From c1602c86d6d52fe56b88adad0ec0c2913a06ed69 Mon Sep 17 00:00:00 2001 From: ryanontheinside <7623207+ryanontheinside@users.noreply.github.com> Date: Sun, 6 Apr 2025 12:54:48 -0400 Subject: [PATCH] Initial commit --- .github/workflows/publish.yml | 24 + .gitignore | 7 + LICENSE | 21 + README.md | 256 ++++++++++ __init__.py | 34 ++ assets/learning.png | Bin 0 -> 55844 bytes assets/main.png | Bin 0 -> 51523 bytes assets/mappings.png | Bin 0 -> 41044 bytes assets/uicommands.png | Bin 0 -> 114253 bytes js/controllers/README.md | 307 ++++++++++++ js/controllers/gamepad.js | 357 ++++++++++++++ js/controllers/midi.js | 315 ++++++++++++ js/core/commandExecutor.js | 167 +++++++ js/core/contextProvider.js | 67 +++ js/core/eventBus.js | 111 +++++ js/core/learningManager.js | 589 ++++++++++++++++++++++ js/core/learningStateManager.js | 256 ++++++++++ js/core/mappingEngine.js | 501 +++++++++++++++++++ js/core/mappingManager.js | 99 ++++ js/core/mappingTypes.js | 392 +++++++++++++++ js/core/persistenceManager.js | 159 ++++++ js/core/widgetUpdater.js | 298 +++++++++++ js/core/workflowIntegration.js | 253 ++++++++++ js/handlers/controllerEventHandlers.js | 61 +++ js/index.js | 246 ++++++++++ js/ui/commandsList.js | 250 ++++++++++ js/ui/contextMenu.js | 323 ++++++++++++ js/ui/controllerButton.js | 158 ++++++ js/ui/controllerList.js | 291 +++++++++++ js/ui/dialogs.js | 517 +++++++++++++++++++ js/ui/mappingComponent.js | 653 ++++++++++++++++++++++++ js/ui/mappingList.js | 157 ++++++ js/ui/mappingPanel.js | 239 +++++++++ js/ui/menuIntegration.js | 85 ++++ js/ui/notifications.js | 83 ++++ js/ui/styles/branding.css | 152 ++++++ js/ui/styles/contextMenu.css | 19 + js/ui/styles/controllerButton.css | 75 +++ js/ui/styles/dialog.css | 421 ++++++++++++++++ js/ui/styles/index.js | 24 + js/ui/styles/mappingComponent.css | 361 ++++++++++++++ js/ui/styles/nodeStyles.css | 32 ++ js/ui/styles/notification.css | 104 ++++ js/ui/styles/panel.css | 656 +++++++++++++++++++++++++ js/ui/styles/theme.css | 54 ++ js/ui/widgetHighlighter.js | 143 ++++++ pyproject.toml | 15 + 47 files changed, 9332 insertions(+) create mode 100644 .github/workflows/publish.yml create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 __init__.py create mode 100644 assets/learning.png create mode 100644 assets/main.png create mode 100644 assets/mappings.png create mode 100644 assets/uicommands.png create mode 100644 js/controllers/README.md create mode 100644 js/controllers/gamepad.js create mode 100644 js/controllers/midi.js create mode 100644 js/core/commandExecutor.js create mode 100644 js/core/contextProvider.js create mode 100644 js/core/eventBus.js create mode 100644 js/core/learningManager.js create mode 100644 js/core/learningStateManager.js create mode 100644 js/core/mappingEngine.js create mode 100644 js/core/mappingManager.js create mode 100644 js/core/mappingTypes.js create mode 100644 js/core/persistenceManager.js create mode 100644 js/core/widgetUpdater.js create mode 100644 js/core/workflowIntegration.js create mode 100644 js/handlers/controllerEventHandlers.js create mode 100644 js/index.js create mode 100644 js/ui/commandsList.js create mode 100644 js/ui/contextMenu.js create mode 100644 js/ui/controllerButton.js create mode 100644 js/ui/controllerList.js create mode 100644 js/ui/dialogs.js create mode 100644 js/ui/mappingComponent.js create mode 100644 js/ui/mappingList.js create mode 100644 js/ui/mappingPanel.js create mode 100644 js/ui/menuIntegration.js create mode 100644 js/ui/notifications.js create mode 100644 js/ui/styles/branding.css create mode 100644 js/ui/styles/contextMenu.css create mode 100644 js/ui/styles/controllerButton.css create mode 100644 js/ui/styles/dialog.css create mode 100644 js/ui/styles/index.js create mode 100644 js/ui/styles/mappingComponent.css create mode 100644 js/ui/styles/nodeStyles.css create mode 100644 js/ui/styles/notification.css create mode 100644 js/ui/styles/panel.css create mode 100644 js/ui/styles/theme.css create mode 100644 js/ui/widgetHighlighter.js create mode 100644 pyproject.toml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..4f551b4 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,24 @@ +name: Publish to Comfy registry +on: + workflow_dispatch: + push: + branches: + - main + - master + paths: + - "pyproject.toml" + +jobs: + publish-node: + name: Publish Custom Node to registry + runs-on: ubuntu-latest + # if this is a forked repository. Skipping the workflow. + if: github.event.repository.fork == false + steps: + - name: Check out code + uses: actions/checkout@v4 + - name: Publish Custom Node + uses: Comfy-Org/publish-node-action@main + with: + ## Add your own personal access token to your Github Repository secrets and reference it here. + personal_access_token: ${{ secrets.REGISTRY_ACCESS_TOKEN }} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c189c65 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +*.pyc +*.pyo +*.pyd +*.pyw +*.pyz +*.pywz + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..03843ed --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 ryanontheinside + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..d84f4a9 --- /dev/null +++ b/README.md @@ -0,0 +1,256 @@ +# 🎮 Control Freak for ComfyUI + +
+ +> *__Take control of your workflows__ - Universal MIDI & Gamepad mapping for ComfyUI* + +Control Freak gives you physical control over your ComfyUI workflows by mapping MIDI controllers, gamepads, and other input devices to any node parameter or UI element. Transform your image generation experience with tactile, responsive control. Obey the knobs! + ++ Adjust sliders, toggle parameters, and execute commands with physical controllers +
+ +
+
+
+
+
+
+
+
+
j zoEUKUG*_b;9*6mRSb1r$?ERN|z>U zXnfqXdSauuDDkE{$@lCGv=B$l|I+0|!#w~R(u!d{a|*MZ?zHIDaHmiu`@uDfABBsH z_A;!C{kF*ta;nJ7N%7qBjz?qSs=;}w^+bktXV~=j8+4?Uz}Cq8A; z^0viuo`bt%sC22{Dj|RCzHhet=~B}ttOHGcEGbD&5UkkRa)0tT44IDhExoX=;MJPE z4H=~6n(TXEvN>6Q@%?E~B3b_VRp?MFiBM34uiW~WoGZ$L$b3Ma2}4&z91fd)(88nl zkRS%SIz#nf#SuNUqK)N=_3&suL;*Z7=jH_@>A3L8uE+2D{|^^n8F@D=t(##D0uZ+y zdh1iy_weBllf`WR>}_|w#th1FRIK8W0~w# &z0{R28_fn;$ zLg~3!Xczi{7@{05x&4yT__gwv-)s|ntF`<`Fm&wV40Z~X;`QapQ@&A?)0n6i6@}1Q z6plo2Rm{EasX31i-Wyc9Vvw_uY?Dp$edvkHdUz?VF-tW-?w<77HNq%n>6YuG1>^!` zcO^IE-@8;~VkAr2;Br^&1t)uZ!RI8O#>2gp)YMcbC#TpO>2|NuuKR6#tGwFuDsqRu z84t&WnW GxE6NQtE(n w`vfDq}LQ^{*W(G^_ z3Ck6@L8r_Ve0WOt7e`ajoiWrb9xm%O7f~qnWDR6AXA)|ym&4ppQ}orGsn>~ HM5Z1BFEczRoQp7EMI>Q2~1K$*|B6+ErpZ;Xo#QH6K7slTT?^M z^k@$F^;4+RagB_Q=36C^T-@A}J3Ed*$lXUi3i<1MwgO<2ta%ib8xk(yJObp3l1SOn zuV2T@t!{+;3-mm$a_BF?V(;qfcV-VWhNvq#nR?7X&s;p~$Pzuu;y&AS^7Oah<9|oV zl82$%SmgGbT)$8JMG!vaZ$B+oBFz=c=BA$Sl{tPu2W>Mi@*(iW`~Qe+PE1$2VrH-jT8C0(K_;_Y-pLzZn0jKV~zobi4*o(0nGj02( zaHo+VvRy=x*xSZ${anNECf5y?9^jD2&u^;z`PqS?Y;DfA2&8k&BewzKaIj%EB`#$8 zYxD!svo8fJRLTL}s~+dnVw2gTLo+b_7k3qekgSaaWBe}6j!>afs)(dEuT<76^w@I) zmbs%eg>3HOk!nEi)f19iU;6qa#Kq6);(r=P3#2KET7G<_O@vHJ-hqb6mgeeJPESvN ze)%z4nd#u?8e^+NjzTVnMdEvh7mv!!Av$b%= 93fuQu zHiWVkWrRI Up};Y?}d?<_Bv9#DAahDWc+P zy*`K&$2Ed3pY#~nBs1u9TsRIsn%iBtEPgCHDx_*Qpnl$9H}NgvO{wHvBkMmj6sGz5 zzY@dPSKjIz6(Le_yUE_606hKAxB0_7aj##$4hRU~RdjvTc@iAk@w`gQ%gbm7*cA7j zZ8Dko2za{iFM2vW+c?G{;-A{#i%#z0H6Q(VauO0O#P<+hLqkJ}WR@2Y9`mvTP-OgG zyL&b4FKMg-IggCz;fzRLzws`16(1gY9~}A{#cgI4JzATTZGo^i(yAUQCV07R7^_32 z6mR%PkR?^d)QEVs%5OpN@U;5mq+-q3InR~C?x! CQl Y)*63s5nqn zWxr;`;N1TYHN?jp3UP9Kfpy)y)_-i? *c#6_pb44C2IX`xf zY7Hr;30He;M@(0Z5oqQH8RM$lE;m&7xZK<2NwOGJkQ6iHHZHw9!B!ndEX9vXN^vO; zW6|0Le25NERNR>YKnuWhe(D2M9n~_A4B0Of_`6@Emi*+MW`5eW$6rrfZTgv%tGaE5 z^#2i6Q6clrNc?cT-gAM9ci_A6^OE#QI#$iaAJ?oNYibI4sk@C-AmGIpCaZYYDVpuH z#Q~a{klaVDL`iEB3}5JS^DVU0+)R2IGi_LN@jT>W@ifd?As?;1?K@iH)g%AYkAMb9 z%?qhh=g%u{O~7mwe!Ts*p+zvV7=Qg2!=HXqscIl{K=?_@Q^j(%p+rv2p|EGbByo=h z*w0^<$R@#RRMnEMhy i6M>o+*A2V&e zKG5|~aT2_QuGZU1tLZ9a;1m(3n9uurwXarlSE}Rcb M$~j~(}m(nng- zF5vk#Ky%^#j~7;vJi 63Wz50u)eDELt*J2QsuFeCm*Fs1@&)9DD EWk7BC>P2d Ewwgib`6CMz!ts&=$A(f_6-*vo>ukXr{4EyUf$25T(g3Ufx!1VVgx16(3I=y&b}X z %%A70rjFzgX-ze3+pa5s PxtpByMvOv#>w2#y^q}mCr1j)of;o;;|O!v4o zNb9L0`B7+;3X!)Dk8ey=v$L}&>o2|4O9}?Adp}b}yU^sP!zn7|EDL5urJTX~itcCc zPQ47i7O-odte>2gcHR4OW~Pi=pM4Q!@@_NydFawD$^JA^&T@O9Er`ntABZ aU(MZPEX<)G=Q%#`Jcv#cvQRAG2{ zLzu}rU#isbqa2znR^UE($6juHsZsNWVTnaooY};btM7u@^BtDG8WUha`i|$A%b|;y znzc7s7U|EHx-iXf!$$ND(k2X1L~qeqZLik^_iRovNQ7uUlHGz0s0x 1D!k>k&v#h%-H^FmMP@OB7%`1hC{9ByLGOBpETN8SDT|QXR z<_}0w<9L<)x}l@&Ci KXIp;AF@C4*-F? ^evs?F}{(_2RF6|&(XdCIQm%35|61=?28=8;n7BMPp5yfG_vfjH3Kjz z^*T*fD2K?0WbZ=Z6&>voTRSZxWPwT5o6Ua@8TN!f1{Tft#2Dv31O1ZOWot#{D%2JD zfD+_kHz2IUVE}*SYf~c%F@hOfwl#fgu0ds>zNSxbrB4jRP5DC 4&HkOJNnB%T)^^IyWD~ Z5fu1d(SnvyZ; +dgYDC4CffsA7|NE j4z#ze#7Dxh5$T{fUq4T?A12xCo*6$ zRBam;$M>WYUm!o{c*?&R4*wHs+{@UB2^t;65R9AQ7uPd{$1ZB%V4B10Iv3YjYOZ;y zGY9! nV|J9dOXQj4gd3iHkDogd0#>_;pkki%mVD0SLF%TcXMIi4ZHSjUMAmG@( zO1Ti*s?fUBLy^#7^B<)2T|s@Y>Em3)Xs@Zfj5XsZ3)@ACs;=u)ZF%C5dw3N)MiW3G z00I3uSwMMC8_!Y>?cY4FzD)oSf1FbgISxa%MD;(Xk|qrCM--&^?0Qf1|23w+#xu&^ zY~f;53H9?bGHM*D5bke+!a%z>f`a_~Qb2%{lXFNZbCB~DhzewhJH%fim*G}`s)He* z<^jbP-+iCDNlpVGRX3Vix6tvdq3g2HIb Ppo z#OI4sW~%+<#a1yu|IeFkV?Lnz`a3VQL!g9ImXSlkWIIm{C-;JB{*2vgn-2?aZ_0fK zI9n~v0Is=kU@`BiXt90UA|ejM`j(QB=XVltHI`^AIH(H@RJg4?=24l MF`D8fq^;@5liIkGN z)+ta w!8~9t~diZOj{7r4VSJzR3ah=K-wksbA4C3~1nWU@wJU%>e^Xb(38*yWi{XSo8 zKZgI_)H+QQT-FhAeI!b&M0+Wu9BSd>InIgNzu~2xRio{RLwB(_nSFqlj`j1`gw=2p zVrn#oF3hLk99fkgC0HQacoM3*1ykSDFe<0`HsPhUn}-CSH_B-vAHVwKA`RE3{r(BP zv{$2}(+p2VD>MY)J~dDYP7XZdACS*GsW9kI9YDV*>25Mh{79d+;d^nh&&!djAl-dn z4PMiIYp}K#1T%~?;$=-OUraIz@ww3=9G#3?fx5roIVj_h^$In3uCQwoiFnyrPX!Lc zcN(Af!-@^N4`wmRdU*JweE?S;08~W~58tYr50r`kYUSFQT*;z$KLpeYh}@ZnQ>X@{ zVL4pJsTH5++{Gx*v_B<0T&;Z?zB{=F$#aK2S?hBtLc>gCMo7gCXjrMnNCu#&0y63t ziUp1vGJjM4%1OPHTCcKg6M8NKt{&U<=M6Fvs3b#1w~INV?CVlGhn$7?N+(uR3>n{L zu=@3uP}#lsL6Ibm97796vR{goMXi;XWNIyD;&Ea_OnQxIBiRkafvyf=z`L66C}ciJ zOJDD^3=hTNa`t&dwjqGB_KQsAhA2G3K2m1d^&JS?Bw!qjYZHHUN+C}HKGQmM2?N+( z`X3)XpTR6O!i2`d-C?Cl5@|v*<_kz|)9IyiiWT1_>4}6-6jHfGTd?*>466nnoMH;$ z9(Jm0uz6s+D4rz@1G{Nf&64Xv6T&r`-TrPs;su*`h`M_?RZNOqvee@tTEHBc>t0vK z!@o3{aZvi`t#u3j3l>5`U%qRCBj_@eKG8dL7thjRHrEP3I9=QSKwd}qFctvUXFYMZ z#-IpX4!xxdf}ay0zRBAPuc+amkqQR`T%Gj9T66}hUXx`Xb!hHBvmV_;A$eIdEI=f~ ze*jv=#f$%T`>z_zeFvF!L@L#Y8{7dM!*xyS-d+rAA5|1rJVO4FLW&eSbcMYR!8*#+ zX>Qwe0JwIb(%eBZae+y0EeRkm9#`i^McvPkQ+AC3Y|iD(TgqnU`++atj$c_1;)u94 zVW2m1g<>9ew5Y+EbgO}AJAUQ2IA@TThv*A|x#|amD@CNFEN$27?8pCN!}zTgM9jJ- zTPgcRIZk(WjlZ($;ZsiEHhOfIMa{^lNW|g2hy#y5s~bfHD*Az#n4LIgF|tD+IIb+N zr!21Gbnd&WlQhRAk2@}f(y6Jch3>Dq9LEmD4|S|?4$X#2Jx12xQ 362nlp0wN;c=r@WH3ZB_%+rv3{8xD1~L5Wxco4(u-$q zEiT1}PML!#`n*Ew%xCE$TSL#TMj;hGo}-JT0pFZvrp<%vYPJ)RK|zyaM8_r-=x$8| zu0`d$V>Rn)*1o7_=vl!N%(U^DXeuYnAmnKDB>UxipoD3UJgJ4-rxyZ)n%1q%^&?m( z>+#SpcOQxT_syG2>ia5vAv8X}!E??^o`^<9L`i0+g2{B0>9lZ#f0)$k41hpwnxU%- zh@P(jC&4uTf4)gwAGh%N<(X5bPOb31^Et^$@ -aWOE{;8o6_H_}fv{Mot2Nfjje z?5h&u3-&7ya#RCIV;=y|>Mip5s?e|lb+IDCU}@)bC8pV_3Zw^1d){_CPnxRSJ6fTu zz9P3^jaR4>GcupWvqe1rY4Yh+cDB`zDbq4@hZ=LH+3c@hztUzE#d+|=ce~V-BPwla zoX%p92n52=u+nGEDEq;cEu!-^&~XFl&cwt-;@^m4 gJspaY@NifO8rcY}+Z#$wagb4-Y>yHZB}- zPLZ N|L{{8zX)cU`_zgZb0e!V8RxH&sh5#;u$Q(b>)AG6~bPjsL2 zKA#6?8Q_sU^HD&l%Dy*|o{6m#iRU?4Tv1Wc&=Am{B9#+^+g>UA@Zkdvx4q5n<>i&Y zf5X(!Fn`1u2$qqVIq2v;dsRZ&sA!ZxBq}K?UcCN9-77}{HNG)}|5RD&`D$OPLHMs8 zv%jz)49AhS^kO7>Dk(dA`rEhq;J@gTXG~!*{#$`uHCLK+;U*?`0wdbn+uz+yeP2|B zGp}KpZDVEZh=D*e4jDa`o*u(<)8>3Jt zUtfiXFt9Urb_?JQj!@(&78U?ngEp8MKnh_n!tikDX$wO`+K=vvncyF`q~sdUeIT%} zFL?%!+429V0F{tP;8UjKfAz3Mr;xS^S!o+pY~-sl4R#+CoF7p{=_f*^rt9Nn7Wr!6 zMIa_NK17xMNp&$mC?BLqBJe#vkS_e)p2b#>UFZa~PPh@#yd{P3I;=I9|t2h6~&X zx3B;*RQj%u18xLie0*N*$}hoUS-P`=Xnxu=m9up;ES|)2t6&aeK-%>7-XjsPKhhEt z6FZ)txoS~+nz pNh4_Pp3Lqt%mhQ|@ zK=JVM=Bue>y8}V)cw0}mZ^l|hWvZa}#irg6T&6!gy()N8fYvi2c>_|g)Ss$!?ON-7 zv$FBY$w|-``?d0R_Do{4Ow&2AqM0vOuH)%7PsHq?8Rjx3C(S=PXm8OlT2?!<240xy z3=;(O%wfeStl*0a92|VgUiKpe+Wy*$wzvgz1_lNoWe3*z8qdShyi#CKuQPTcztKP* z%cYan*Ta~=zJP`>5%;LYf5-NTkYFUulDvO2Sc(kS=_l3mn^(=MfX7|}{33V#k40d& z=PZOvngy%O%fP#g!s(_aCZJz*{+PAZBCnfS9R#2gs-3~J;RKhPUW?4lo9JKxF5|^V z_IzJn2l=xz*+3Iev|X*i@jCPu!> H$l9*gZueXOGASe zd2S8z? Ru=Dcp$cUAJb=1^A+|LFG7{nec=7m3dsRdptWQwd1E8n?f zAlD_oP*W^xOSM$lmsJ8vbZ
F~E?hyIiwJB$~TLOULwUrtsRZ2kvA=h*nTv{{usp#;Vgue12j{&w1x zTJMzyZ^tq+GJs>^5S4VFCWnW?amA`c`1TE9WJGtY*;=nQ*`_`fEO>qmQ8ZcxLceJB zqV(#QbD=aN>&*Vq^bHKm_|AH449l`>xz#7m+c*&JevW3}cslPY{Q@h-lb{YI5C~CG zQ3Y&K|MUv-fYl5AR3Agn_jWA+b9O brhlcyuhJd8!@rqxq+(RpCge36r-q zcpdu2)2$PixQ1w)K`1vdH614sJKp_xZykNwwhP>=u^2;v&M 9k|v=#Actq=mVfZr z=bLG@I`g+EJL^6OXCd`{9`i4;XkMQaf8sI^DS^Mg%BLCABy#he8EXkTRN-eg2WiB! z@x6i>Mt)i~ZW^sk<%;0E5W3TMr&MIPZZBCFq2EPD=I<^R=YmvAX5btR^>fD`SwjlQ zRs{D!Dg)QQ!-f9x3VjbGTpj0W3y3y{h+<=EVs=EG`=9*V8z9LGvv~nFv?5S)OdMn{ z%t2JykGa3{QxlsCYGQ-9#Yy4-IZxy*I`@5*$6rNa_?Z7X=|80=mK}7oN@#wy;6DJ( zZ13nOdXNp0cK7OuXW9ZE*#Ap4BL%5<*|bOgk6{qCs&GO;)HfYugwHO3k)!I|zplHB zy`X^$szyPwO4CIS@-r~1$qHs>J#{Km&O!ggERbo_&?tnOr1=ZY>ENtSfgB5`tAz)N zXxOk;YdjLX!VXSNoqe8+mx<{6RMAdRCs_Gz-waI9aIy6#+H{PUx nJ!diPO=yNJ5Lv>9xVtqR`^Uzquzfvh4SJbEPV&XdHbQ_uh!B!sogVQ7n)M! zBGAkgRU(%+43f>xvp<_N_c;k96Fi}HA{5CF?P65*ngi7FEAL(-``u$LH*{qt1N3&B z 3TEYB12h)N(c92&Qv7dP3+S4r}yg_JVFO z{94i~;mg&~Tf$&jf zslnb8UG~if|Ct=DFs*s6$LU*d)@2_N6Vslg3B-LyUCWS*II7-Q70~C)N?@`}E!F_b zjZ}Yl&R=CeBbDP=k8|PHK5O~n07HDh O-qhIXbr2xkGClp~ zc>FFj$mizM1dy{Z&Hc9hTr>;O&Q81Fq<4=-^YdOun?_XPg9p_4L!( zZ@5;g-Ff*NrZYh4GE{q`zVGNc=Nexd2YH^c?-oeMbOrNAW&pxv%Kj?1LAos$Mxo>pZtuG9(Kh-w8%PJ9Sm!!9I zTTf(5qZXfY<8xx#&%r+v2KxN>Soe A&NT2{Iz|6V;qB#cGQhP58jPAE|2DBNTf@l8-d<(bfG%h@TH#|t1uiP zFst|1&ZmN6dG1Oi0ek0to>SM&oPCxDbd2BHL%BxQhmUhsV}Qt^%&H9N`v!5xPq*F$ zXK|MiT}C{qVmHsyOGLvCopou4xPE z?qb-8Yt(`oVAt}VkqEV>;hLlq3Ix0LsX&ZtQWO0*Uu3s>!+E&6O($uHTC_#d2>(w? zzM4LnHzZ(j{ECXIzA85vFEMGM3C>e=)nLar=R3@}(nP!cgC6nuO5EfO{ND8T7tSr= zv0Wnj{9oe;VCGail+oH}u`_#Kmauj_uN5j6!9#aaa93cm;M>667`5afd+`%qQVPYP z*MwAQG#`0BqeIgD46lAM${HSdDLaKa2kl9^+gi9p?7{k%0( -ls8;s#j3jqi z5gJWg!k5@f?yMZOJ{PIs;yj%?t_?)ew+}`igZKlk|HoYaff#y4gzq24;O2jRD0m0N z0LGID6)6xM;`~4e)%|@nbSoFg86F7&$E(nHqaZr8I)f9*_v10$>OU|Oxaq`e !W}%C&u3@c6TI5gOnrGOHs`{}cBo2=7<}=T&+jy5I@M2oRFkzDGtzG~7Ot{_k=F z1^@==-}z |&gYm_@FX(&l-vJA;h;m~gMXUvS)vDf zdc?%UdJ5wIlWAB(@XD2 IZ|8Vx!QB}3y z{wUquA`OB93R2RIAc%xYmw DV9=(ui~`B@Lo M zPft$~1JBGb%K%CR`kc6UU5q?1L>A0SFjZ!jgs%qZD {*YPwfZG Yq&DOw6_9Ilb8~PF9x{pfh=~_K9^I&tF#<5>r|)xA zq`5Q9eQm59GC5 gq(LJ+nzxgCf2uLt|xcy3G0J zY%}p?k;Y3&e5QUIQ*~hay12N^^sbFpy1TljN_o@NEc~RCtTTb+*!9U8MP%CO_cW~# zS(YVXsKMjp u;yv6f?XhWwq?K}A zewFL#yN4_B9Bi`XWw3fl7{#$9R+g8Uq
_&UWtW>*E^( zABwv}X_rY$40uggrz9HjOoQ(SC=X0cP5u0Nbat|#=0j0hImn51TM~mk$>iPJw@@IX zB _4SWn%A)>{ zAOEJVFaP}6=Xfc{|7<6H3x|h?htIU$XKSt{DJcnB@rRRr4z {- zeZ9D#psS~+&SQ(s&js9W_v&q@>nAM*pfDVGrshe{+m#VyWo2bh2IbNo 1O$-iN3cQ(Ncc6}pih_I#=bA~9T`s>@@7|pZC^Jj>9FiTgpZUx(*-us{ zc2ySWB2B7YIxGc@t6lKjr>b2E-Pr2B{x!FU^|PO<#b+R3o~-qxRJ4Y@;O#Bp^T5c+ z=kKxWDPDcZ+thCKtuLD1gKT7EUalM*3_80u0&jrLV=yHk3(TYamIJF+9oy5X8uvcC z%5)ijrkAh!3nuLjHgvy|;yrylUGJNknhGf%o{o+;zZWblQj!QICMCfb)EI)qT^7l5 zbtQ3(Nft9l&QhejD?WU%INJUV4KFS(BK!@&CyBpbP(=wT-<|=B0SZ!lE@!8nhj`I= zqB0XF9SK~p6ht0uBp>$Ad8!@d8!ZK1Sb7x|6e#%5z?uOkw42HzGnQuD9hSad0eP@C zCTynAr-DW1d*&~s!jo~crn>qiv&_p~105Z=gLUH$&lw)DUKtq~X>S-c?ljX4f@2hc zYd>92>?g0LMu=y#Wp=7#Y&;1(2^$7BPB6Pcdwv)RqdbnHR}10n9r$T*Xy{?zt$}ml zH+MysT|wdi{T*;JEP!2t?f>?9lHp2n3F8H5g*U2X>+a&-OP8J;9uB=7&|$fpXmVv@ z;QMzr5{IMX%<#_`8(rY#l<+$hjeW)ERR{hjaMGRJL&{pkTk9-Rs0@@rN;@q1`4-xc z56sZPV!#w
9R^(F8B1~-N)n{oW$ImSd~jY44)7}^djHM-7d#s& ?RN+KBj*f!R0u^PBjAj+k X z4J$(ngYD+C)k5pR^Z uf}uk^ zq-tgwNkIaZvU1o$Kh3F46DD;~DWZ^hhj>!^ dI5o>5gx3{qn1kVTMn6I1USlpR^x&5$ia}#aM{4ANx8|&=q zdel#(Q24E}(6G`jRn!q q|Z-xK*-DLm3CNCV3zfQGXS-DaM9!$@1=?l(RRd0<>0XLe S+9g2WJd7lW zA!sdR8Kq=q>R$oJ9Qbh>J6|croAdgrsYM;eoj39(_r@rkI*27d2vrQS3!3k~`XW ztTASqB8NKsZ 8M0i+1XND@W!t5;!$kV>OUly{<}*4@3iqsT}xTn@hN zc)|Yk_t$3MjK^-GLM1YI(RzE!3u#O27f>b?4UBPCv^O_Up!@@QKx~dKLwFlGT|!5& zgp_T73G=7(QG`hY32tNK+tDiw8f|&%z ?}g!Attw8(*n7CDyYvq{mga-eSol4>h)GHP-{RxP-C>myxl7%W%2pR?KW9!P zdDjpF|L5Q!)+N1fp8DpSwTEZxT&J=RkZBVHWe;vPP@T~f6cn_y` z#fvD=p6=7Wv^vgY2Nw1hggPUq6Wbjd8hTtg z&f1b6Y%;4}TUW=p@MWsr_woxZM}p@X8l;wHaww2i=X)aJx7C@*qtfFSXccDyUU;Y} zxw5R|!4%84H`fy7A=2TTUsR;DG6UNi zanjOHbXCMcypFaKKd*bHpeG i$!uJp)6-@!?^df`q28ShD@#Xa|i|>$&sii}OOb$rX*T zGY+idz{d8>5l}{MJH$G55TCgD a$b z$yFb9_q?E<2zD(v{Z+H)zs`)m5wrqeaWk$U*N`<4hEB`MOM4cK6(oza7HTHARb|r% zis5G55R4M;d!$a^L656~bO_qCr^r3r-*>CJVT5O2!6(Bhj&ivuVqx4tmITg%zOdS| zwN4UH%=ChDKl+X^xNq4{1s8soMJ5kni{bq!OaV!o++|nE{#tI%Hba+%55F!lLQC;# zi%9MWz%c-M6HppkS2uY-YwmJgRpWJQo5S2spD1FU+S@}xO_gak4<5de!*7hclYeDW zzqqZvRau$)j;VsI`o!vXc6ziE`w;C$uvIJOg NeBct|wuVMb^1>ibzk`+@ljF{x9+0Uj>uGHky{}-x zud-&s0 kA52 z$fg0m0*akEoiPjlBg?!*eZ+Y7(*s!Rr&|xVKid98-@FRquAS1s%w4(93QpB>@=a49R#GS|wQgtM@taTV0(*TXs^*SOa zHb0wPFWlaC(z{DWv)C#@aeYAgdx52OK~WJg4XvzKQDI@N`vy~|O?Vx3SVh0v;;)Se z5_VWfMKi4LJRh&X8BNZXzSvKi1kg(?qedEeJ7_`6@dfDP34J`Ux3_PAO$N%$)AQ(L zqrrb=__`1S2m*jwqzZ<=fB$~XXWE((_|M&Y+44z4cK~QJl-@A|m|MwDL%c-I`N!Oh zrkkO;kymd;vliQi61-E> %gUS}21zHS)9ab-<+Zv#RS&H@|M2u*c zY^~fXXeZzEI|FfG%A(-~OV)i4+6_T_8G0m+*hh7*Nsh-+2k?G D3R@2RAxEDC>QW_I<%Vj(m0LRpU2uY>oIq=5+8gx{QLF^CIca?~Z`FHXNft?qeA z<&9`z$j8v16X}$cbU);C=99vE1>bmGkN*1uq@L)J3XwMCXSno z%HJJh=uSz0Ex}GTDz~AY-)i1++`8#aEKf$d=v`A$F}!l+*bfJJ>-z!n2Wm2#gXDOU zb* =3pnxnH6Ui2Bx>F3yBD#VvPzF1G70O7Q$vxyrS+hhhHSHkkSJ4fg z+uJi+%AVExp1^Ej*j#541FuQ?Z$hK|cggSw>TWA5+mDt!!do1&6p(YGQ5m+nu*4iX zX`Xn0wMgRCpHr^G2{yUe(!{c~2Ql1OgU89Inz@&ufqqkzxYBs6&3p9+gmCRfOPZjK zZ5@>&UpVW>s6OCp$ZimYR|`INY^UOT+nW{V017}D$1maV7s;kHXaceaMB3YXFIk!J zE9H$@F7|Q{CI>N=uv_z=0;SAlQ1+yl?a4{Wk_XD`qlzV;X2RM;&4C|$%6m~zIk|xn zs`1kEVj-9u#}86So>h+9PgDhXR HWD6KGkw@3d%j* ;Xz5HW`k zGnk`~N)gTry~YiGb=B1d^2q)^Fsmv*e>ST1*y{5?bB1DNmZ2@pv-U-U;KoHol#1^e z29%4DAYYtUQ6W-dN(un`#}CYHnkCYzJMq^q)A|Nzc&qOPzR`B14uW8eU!JZ?NJtcR zIHida6xseP0|XsZD$rgnpc3TaayGnFj32;yn}ucfScsCsyuL~8^$m1mc^c_W!#=QH zKw#8N-YEWvF%fL~jYuz6k5C3%EwiD3Znw)jgu1epbK$lZHbHBtL_!Bv<(*~M@N?bF zE^>^&O8;r_?OjfmelT@G$&Ib;?=1AO<4#t)u8{g422I-GdQlAVY_o74D6j$%@Jor4 zy|RDe;G#X-WZwMjo7n(47%Jb3=5`dkLZmIY0R2>PpfhO@qv&9V2hNrd>i{sAfp$iD z*wKNo`+=9CP*9fsX`IQ;I1z!@DtU8po86L2)c3!c4;R4Jct0|`PnmN@hM_?i5GRXN ziGmU@1-w|PH8%-vMf|6M0W(7ki(M39Cb~Cey;@56Wn%XGGZm^z3g-DAAT3E$Vl!p% z12pB#IQk3PKaxdbFDk?)P1=Q#Vdz;K5Y=InQ7h-3lG=hP{%9VpSeUTuQA7b9OC1V- z1eTs+J-IX76nYImHko>fdV;j0pC)ow^C(pdnnc+?8M;L7iM+T`_laViuPm2WRULM} z5fmkE(lFDpvRbhBKN+__(lIq9jVP@vHb-<_8(VV=pIi1e8_v6* {l-qM`_i zlyO_t1B7%;RJDsnhxEY5O9l}H#r{hV>%JltQ*;o|2p;I_M*Vo?XdnkU0T3zyYqQq( zWMA_r4mF8^h(^535i?22O`3jjG+bFDZ(%yxJxMN6oGLdpJG*s2CSmoL(-=QU!N#3o zMt`rHeh48wj4boThhSyrtEHO~?&5y=@&y7&%ix~?$IQa};DCDi)EK}e7@^=1auuJ> z-n!1lW^S!rjYWiS&n4f7&Va~V&{=%7Xx7*nIwh`lf^t@RKx9q4HVyY8h;*9>0yXS^ zw7$PUIoUTM>B!YXigcM6 FUxvo z0flzt8;OBJw?r37;c-}gl(#e^_T$dQlQR$qE4a+Ci+kZa4nXB`X{vnpyy(h70o>5U zB**`J{IaMR=T(j+$%`JU;M+0|?%#iLhzy9r6H~=sc-UF6Cg7WEP|z95t1r)@iSpYL z+z}_e=)n%sv~YM>Gsm<3Go0I$7#~fPfBeYyM#bq^Q4vbKrffBo8D@)irW959tu=JCVdNT*7*r>ue9H`Q4{A<#e&=rYZ_1I{_*TDbGx*$ z)dTotw(4Ir&r8aGgNyoQJA^Hy`y6RKSYO<}|3vdwQR1b+ueUIMuF_Hk)bgiB!9wDM z$%4z9@7h_-`!^7)lj_==5Id{!y@-!lj-38X`i6C`TyGl(A+hw1@Q~)>g `kyOD zf79=8FXdDHK4^JaQ}tGm_R_hF7tz$%`qWudY)aXN|2|`6eR{%6fC2%mvSwEoQNh66 z?Tmqf>eU)cOlc)A;!rp%U~ii6NfuY@Ga-64^RKsdtVq%8;6c{IFa1|w*)ulqh_LI9 zwcR$Ie0@xeOeolSXX2W5-dwpU_w^b@I{MVNJybaGrzt_Q?0QL0=uY@90pDKRLJQ2( z`hK|m!Qn6;)32kqq`Suocjh4`2SK(XRjmNQ%}Q)RR9G@I7~il~c@gcDC-4u>zW?LM z&N8mizQk+XF03V&*{D3yuHX!vJqX)kJ2S*iZX6o9l*mROUh>i2_q?bdg+luIu+li| zZV2br^O*0tba&G2KfCOWJok0`3`6u`ui)TJQH}XqFG`R#NBhOOi^xXJT>f l9>SDuvA@G1C#LzQVe##_ zM`h;~h%E`9727C=MW*UwW330NA&k+|ci!2)9HpG`TD5v-OR~Fg=h_PC?)_klK4%{L zb$2Ba*)wf^%JZJwvUUgmFk2B9oWgk5+mFL~u2eSgMB1oEDSW`RPohWd!K+xIfhJe} zpmjd1({UDO--k{csJc&iCFtqXQna6F2HiV_@FuXK?4_I^7I0#WhL^8)XYaY3*920) z95Hq;r_EaEt?d)+TrJV-+A+*tf4Qa%OHBEmD9gY}BM+bO9(L7ScPb&Q=X*(^aaeBq z(q!fR2%LA+Yx!-?xG@i5QkrfhU>?AhnQpQ~-5aF*)pI+3&YR!~y0CvN6K?E#N@7N! zbZg9+fl%31F+Fytfa3tz=>h#pz+==8xrAh&U|3!?NPqQ7cOz6Ndk>C~ZokG>$5hct z|9w>LW<9xDEesjkmA5)8;}62lZlNb&K+w!^FteXHSF3JaJ@LHU`j2VU6BJF~$ef(a z q3s360NJ~iv;zmWqrWY`pr?#*026&0k%`gQZ!1nHGHSqC^+NdFh~Wm0e?n&5bF z%g0h9Sl)>V)==2$#!GYv1p8f$I4! s&G+FUB|z zMys c*<195IA84+yCQ-ap^p4`X`OB{LGsW=IcN3ms}VaJSrCLX&A3 zvH7@EpNt6^1{pjMFh7Ht@jblpohMw`<5t@aZU;l7f2pEs$N?Ji51JECt{+37!UWEd z;Cm$4K?p7k1vw;zGg^+ttl{}ut(a?`6P-22$wN!xk7gy f(kup<-VioXJgvT}|5sO97vpe}r!K7{yhV-+zfKjb)yR+?wa|)w0h&xQKHSL! zA8ry`-*{?bE#eX9pPTfDUuNpwBSHoQYwx3??Xqa(bOc_BM7EhSqp_SP^`grVaer|e zTYC+J8}_wNp(X`SVV_QuS>q|F&T=?JOwxExFFhpchE-Y~d2`b|JQ1%{1!+C@wJM?A z{V|SkD6@|)l`Cu1QQ2l68WShZlShlxDd%DFD)0yd(P1SeRe~kcaL zl3<(-wzEOym82+t`Jrh^??90lHLW1IgG{c|tUTk0Kv8;INmBbGhpAOk?U&{_J9tdyI zIGMWr3uBR*h+s4P#E(Ke{vU|wU$Hj2Mx)%Z=_}?z`6e{fM9P?Iz!GneFSJ(yaEz~_ z*>1irUTvG$ndr>0^31Vo@`763p=-nui{Ie1$Zb5txhy5_F(C`11|Ak!fR;KE{af5U zB@_ZeU;$piXW8ZYhe;s(EzB?aUH<};#6qB)8$B3&ZYXTQkHQu>%Ho6 CvXy1$ zSMeHJ+2d i0*Oz zuZP}2349j};JX?hd0pu4hmXCm#{lZ0 {~$_6EJ)HN zARrJB5IAnmGI>eNR+pWX_49d!Y#& c>REdK?7#fe-{ zuoN;Q5U7B@pPyg)m%*+8xsN07-@j*>5J*L_3tm8`EQ_#kd2Vhy;j?{D+JO~KNv>)f zAX6|KK>EzX!3*F@h5_^pZB%%F1C@Jq73M=9sqx|%mGH)jXq;Kvd%Qq1lY%MqnHoce zd6^9!KfG A<&5yr@>bo~-Ud$t)GBN&D7d3q zswYQ d1|PiFo#y|+1xv<%Oa>R~59gxz>UL2yxVtNU>?iHg2G?dT2Q>Xy z3C5>{Y)*{yd+$Okd}M?#I+90&D{%g*2iCL-41FgXHT1? s?%;w zqOwVdE@7Z&j%;pjUOSJeb4HI`9^0-5U(V#0sk@K21?UpqdjFvN732|gM_IAt>C-Vp z|27$!VlXEbbM4^m`RnB9=pih#6pEU%O201|kaHkNqr)QuSzN{wzqs3I3*S@sb m^oCQPhE_?|MxbLcn!0V>Q;6OV6 zR=qC~fkvME2)+msrR1~2 u&oWiab$gz#Ss z{&@pOVddoHq(h+i^Jgjy&gYaR4E(~9k|~pcf10kfhbd6tD=RCX934SIN^kV5GTqo= zS4tMop`NgPC;W`pZ{NJp*VDsWkB4=B^yty!$5)8%!NH+WasY`VloS;37f#C&;(o58 zq5?twfe*^yY 7piJ3FRozm=}4Y9}} F z@IYT*-@t&t2UUpzS QLqbD= zl>(RXu`u4;g*Z5|-8QfZM8ZpoVKH=cb(Iwr@vtx$Yk;G`uAk&g0#N|&c{rpJGH05} zYO1RASjZHWlrrtWi@5OTPa34d7@)gj_Y1&!uC6}UVJHpIi;`s-t#P*p`sDLJ AANJ&(6jf_^;*CB@GxSxb({^CVZ zaj~?|A-{P1YCjWwdn9L}#dYX(`LUWp8>L$l5o-> qA`)pYC)WfA_sJT<=Hcc_Qm0e{nuSxn ziXOv~&S*9E;6huV4Js)lE=-p1c&;eVLe@B_18!kk+w0Y(&sRnb_SYx7?j4uT5z =r7M@ABWtYNHim{XaQg6~-6A&cBz z ZoO#Y#jN)&0&i9!+6DX+Xq^qjc!7xy&gZX}_$3KRnjKi%A}l6v>X?Ag zrl6#J^q$$W0G!u+e58LSK;S^u4eKU>)zgU(!Fvo(gDztR(>J2kUisGA3Oguh8A`m& z2}P51U+WfPzbehoC(ytrB}D=#Xm59Lb`Bax8zs6K23yp8Ch?d4$nfyj$*Y2bl R+KrI2p!ZUqJ#1x=(1M2j3{k3U66E%lqxLoaD z9hBr?l67Da6FY*^8_3O@Dg7F)Z*Fc5Kn21m5d6M5erNo~@RwE<3?s~YC2S%h6}7dJ zVq%w^x-|EEe0?F(YXst?DKan+V{Zn{knr&Ex%s8hj_ilBD}aZhA|rd#q%M<_XAYFL z)(n7f2hlKF2 &62E1DfO#-L!aEaOcVXTC z4ZIEv*8iuYI0OE^b;{V+Hgqx>Lwc?rG{Z{BoPj#Q(XLr`GCa}wtwKmRf-ss>=QppX zkKItp{f2+O?^`TU1@8(f#+uP)m%^~HuwTaCY}v}F<*UW-Wg08WrlNHeh*OT4qhpDd zX%x1IyOoA5>4jMlun5Gaq(qZeEQ^M?k)ykU-e10J9feIcgGHtn<+^H4`lGb>+)4adm!52yjHPQ5!F|)}S+y4TV8U_+czG zZcXh*Y_eFqA&A-SYO|)m5w0XpDu$9*1^3)2(AoGgv4~#l!pRd>d>kB}sR4wyAHq1y zt^xO7|E(IA3VrL*p~veI)|gq|fF6?M8 _rGn2$(+s}G@SpHIp2}FZ=RIpg7GN< zrf{E(KfAVmyOW1cgBOJvqxkAowrwH_Z$F04pxNkaNTfP1@*Xd;cAKE1;D0<8Su1^_ zRvJZf-OIvUzsg}Y5SviNMBT9|_wK*ZYt8SCG*F%Vd1wEX7G7l#udB9%Wr@OI*(|c# zHU#+(I8h5AE4!_lidt7TGYXhJXOn6ObSw+g$s>gyWwGwcH~Rc`h1wgoxOR>g+48VX zEEt@eEHqKKY{x7cd5}jG5%VLu)wO%WhPS&J8~_?@ZQZ b+LsfON?x z+(;j3|K?C)X=!Ox+GkG4#T{Z;klZWseAFzwV*4n2*QDtaq$UtNy&$O`RRDaU&n*&U zMTWjpxpFZg-Z%ul1u`i-=sD*F*`t8$r7GHDD6$9Kfsu2~X7F9`fCYIn2lB9*_gzFw zqi!`_mm+uAMVAp+vL@+uvHew^|FfA!j*Z0mAw9i32AFm@S_jV_YX0GfJHR4uv3RIe z;YWa!S< g8 zh(_bzOg5uo&_jxR97IkA4{ua7_Z7QtTqZn+zZx~4jaR1lXvY~%&Zov=4!;gD)4=OP zXveX|iUht@lrwLUB5%oy9goJc89mJ?KOU5CLv?10!TEZGYPR!6UzQB^_NE| J#S#M4938A;8%blj u1%+48A`$^OEzVm?h+z>M&vgw-4;SO8sH13zvhIh2*(>=eMPyIS- zp2^H@7#v7ne(SMpWw`u=3l`bVli0~%FR|?tGiDmLQ2m~MbTtvD)Lz-&CV!)uw^B)u zehmJ8`0g(}X(9SvWBUdbb|nEzkhkMu%&j2VwufYGhzglK!|2Kz!xRQwU| tX#yK1eI3&0OfrIUHYJhC*-M$ Oe+}L *aPtunactQyhR1H`5}%7{ik0ODIe(+ ztq%e3>fUn)=^?L5mY z>3w0pZuUl1i%H&04LM`6vgzt`9CD}pVPu@9ru7O)M;+O!bcu>meU4@LD$;}hnM~)( zQOxV2zt*+M=5doT=(QWCG-arP!KQJtnH`liMNyd&BcXN#4$iiMglC9hOEPUhLT8c+ zN2uPB(FXNnj8}wUOwb)LcuP(zT@P}VPG?>^JtIBqi_>k#LcEuiWmQEp)Jyo>!7~`> zNm7O3h!(3W6w!=pi1n#mEV-O{ey Mea{i%*Pd?U%q*La9}0ICpo2S H3qif^UC^(Ym%f_3*Qi1KtnXOKC+=IhqokA9J! zRV;Gbq>Ra5|8W%w-Gt^84gRKP|MKJASYUkLbG@^mhU=j&FIMX03HT+-v2A#a{?2ZG z`-N{NHi{sX%c!0EJXPq<4h%pBh#)&rx4p*v{s%KA=A9IlCQ8m8*3P`N |YY@)BG51V zj>?sz^u7Q}6)UJ=Q^IOjqTtrribfG^+(t{39tlk%0L^D+2gZBq_(-~e1}Lcxl#(L4 zPJI_Eym5jPZTomNB)HW#t7`&B4fUW|F(rTI0e8kfl{?^hF79&tVJK4vMv}pbIAI zDs;bhzEJK-_Zowz3bH=1o?Lu|G(b<`V5U?xl-BE41;E8aKPGpf0#WLVb$1a3m% (w zZf!aK2SzYqt!96s%Pj$I0sloPns?>|G^pkPf#?bzrj?_0e;P!+((hpeiqB9%Ur PC`^i>-_zcyCLuo=YglJ zqED+Cb~9_^K)>n7y`SePb+_Y2tRnPVd%Uy06^eZ~&3mKR7>HMb(K(=V*vSMqL{2y9 zE+7uGB>a-)qX}0q-)U)SGc~KyX#TAWK3<4C{37-E D3YN`^7TCx~k^|Fx<`xc55YU9T*7zmHmb7-bE;UKco)Bu_=8v|nBG3n@H`433C zW1{}OG~2g1hcW^&M3x*{i-V1g$~R}e0cT|@YHE^Qj?Eh7!KeAR{H3~le0)?oZY^D1 zgw#p%iQ@nHecNkuMo#CU<6p?{;*1-q O9ol}*oJ z){K!`1a f$HT>37LVWixR@!Mz!^w0t(#~PiFAu8Go0?8sne9Wp zTjn&Hzs6^Me_+2s_u>zJ$n1CpBSK_(T2`aacy{(0{7Xx#5uz#ZW>2ZN9Y@dPH#&%; zKlmiFa^u^$1P-66Y@-S9i|eesy!yOnRPF x}RZKF~)E zm1 g(o(ENHJkcgqw%8MejIyTd4J+ *=D`uhGh zPrrx@2~AA;5`J8mZO)vXjmys7m-2SHo-4RE>gZr?t(T>p_-fEv=wznp7dv~5vT_?0 zK}!&Bkd_v%FjMPKQCrWw-3e;i*ONaz74m$(kGS_u`;+F(FZdA?tAj0XZ?_(+djHq2 zvhlI%m1TpWRO?KBNj~KJf|Vy)1K09|ge7WLkN3t+eYAL}LcP7#s~u*wtrlK@F`p+? zo|(DUnaCt{`OIi%5lxUwc3Zq_o1WTrbFAFHwUvsIaU?$eWz*uP+FCmg4@)>$N1}#E zoJ^wemFj&*OX4(pJ-ttr?sq*rA|JdZkmh^dh8!it#MqxhqY2v-%{@4n#{A$79FfYW z+(u?wE+HOjrlkGU#@sxB#FLt!xi9rZ73TB9d8H{xE=1n()I*pahy7VJ8X~nn$#$HC zK}_3kUgfC57MFohq2It7uL2_~klKDDd3E*E{{FKVrWd&nxOGgVq})S7t`rn- IAoRY$Ka)JvJaC}Kb5bx?bS%_>PYW471=jKBe6xLQfYR& t=_Uwl3Ze`ww=NV>x%Zom4QTsEETfc?~Lf$v{ zBNzp7uvVcovbe|==TZpkatPt;(SG!HW)C-Y^))4>90P;m&flr Y9Fq(ouA2xHk-mo`yl#Kda$;jK#@58^A z8)#@OXm=Fl9>8G0{cSL|0Chm?%hjI0T5Vs}+Ks!ha4o2jJ)3M;-dXq!XY-H}#5X+} zujJZ0AWaeb(JjU!_GPmvDD(7`pjK>c@*QD-LDk=k5Km7o99(8b=~J$I_`5^gpycVf zkqv5>6I0GcvXme4F)}pA7-!m844L{38C~DzrV2H!pUBeAo8LxiS!bkU<8CO^3SU(j z9vqYw67tzwcKuT849o>VB%_Az?)cKJ%nB6mK6|#%9Hv0fQpFBso-a%d4JCYie@RNY z4-E=U)*O(@lhxI^A0MwLCZ 83IJ9S2i$ 3*&rh-De1Ipouzkr?X% Yb)6x5vPSX)!%U>(~ef&w8<)II2IaFIGX zlO1meGd?7d$z#+&ayPga9PS9d)`_ZB<*2crT-MEd099sz>n$(KL7Z+Pq>ng?>d&@; z;hdc6yZew;?i-n^S%J)ADlyteAM4LPJ$P$i>aU;YBOsD()*$V{&ykqTd4&-wl9(77 zgCgFxw(_WELHxm+oILL;Qc9|lMbYEP>9zLJ{GXos43;+)V~!=HzaHlaL5U&~){V($ z=Se!!-sr)g+&v$(KN+%+=(rL6;@aDH<4sEzzaMgT1ua6s)~`5ruD9>ne4*6$$Fj^l z5c}cRU%eW1n1A@!%+|2F+Rn{&@>?AXa+PM(_0Qd%(d4;PPfznXt?0V1MTC8mHMefb zG`ue=s>#YyU~apl@sYag3SfcU+9yVTV>ZsGr)}2H%Qsv7=N49j&W|_Fj|{gHbG$mA z-M=rf%Swm$>yYtJ4JPKn?|Gj$sm3}6UN}Z-iK^H#PO)hN1Eqz9TU$^3{8~nn19x1l ztv%Xa2Ibrv;z`t?inL05V!y$dwcW9}sCT>7F;+Kg`;JnJ=jPz{_PywrFQvSMKKc9C zSBzbWpByRnZLXdY&`+xv1!j7{{m|Wgqc` =yLja9e6-zn7?FEkeE+EKaNfCAmx#p0bu!qLv-6q% zdDU@aFub2f=l*>-Hpc4NiieA zbgJ6&a=~j$qkP->-CYHUGva$}(QV~J#p_;Sp-k}Nhlw(sJ_bZP0_Jq+fR`VtBk93U zN11?~NDwm1rD3AUoyeWI4BC&CHKHUnQMdH)#|LGeOf0-25JA;Ls{Wpj!$|l$vaK9u zy5BspBoXmH`u(LXMmZsYaF*wchsK}#wg2RZJE>t yR$6q47`77+mSTVHwYoO!&&;Np?cCjSc zJ(v!AuFhC~E?I1~uvPw;WabAJ8B1#~?hz({AqYX&TWQ$YZ=?d@^Yf1n4;k=EzOK^n zz+CPCl!Gjm Vwx8psS7wR&`;!>qh-<-b32)jO !r923*eO&00$yeh&| z@VUIath97(;WPKXE)}&anR%zaepY`j)X6I;etd)|uRn7FVJfom(1N0PT^IdhmhX+% z?w?3omeUUihML%mQo_uAeaxMm>c1@@F);R-qzv>8yf|eVP`uiG?TH$&b#8usU+;}( zA-yD=B12~MvP9i7Ki1hp9^>ePUi8I>)uu~<-a$bJ&2&k=;)KImdF8&YE<{aEnl+4! z3Yt)1(`#-n$%F1eljGJa_~5Xg*1PzF1>OlB%?ah#i$3M4uf96;q5>&y%_rTT^^07f z!oeu)eTikp$A$ZbDO|&&@_HN8%kuBU_{tv eeyoISvW_wY_XA!dI&` z9ivhDQn$L>>p v%gFo7op&og7MrWSR5yKj#Df(*8B|>5295?u$=9_bGg? zCJE-=G7ReAXEP&5-N=rFvmIu~HwdOoxCak*iVLL7LoCHhH0x-U;?vV $;{~ju&EQ|ghw`)5zax}B?ob_n_2uGyBP=wo|wDTPpj%ip+{3uHlA&zck<*%!I zi}?6`MaTN <@%tRY$hro4rP;JYStTH4nU<1hc0ZQ9<_qNJ`S{9JZvu( !Iqa!&%$jZMM!rfGa=GDRbhS(VBstZPOy2O=qV~Q8<3v>`Gl(JcD7jBOE zy8m*@hogBSIWg2)Q0|8j{BAMNth}N;<((xW7-|}MM&9+JgKkrbvfAvl7jh9sV9t@D z+Xpm8QIrYstn$TBKX-Nc_|JG2$674K=-K9`h)~hH=mUo$Bg|a*Dla&I>LTx 4s%0O*jvG)@^zx7P|=tUQkuS`KRRGs*z>?^&egj-4!VNgHfMxaWrXWT&0 zUOB8jy)nW6!2R6N{Tz?v9vD-blnf~uCmw Eoit z*16K#>xs*>auQMdQNct`8VuL@?R%$#!y@_ pDaQVj11PeJvI{;8{i90d> ;+}-U#jK{?dWM}ip$qC$>t!@YnWwN%Z z{ys5rBQg71n^k4G>(EenzQll>+$Xrn*47v#xb{<3Ev=!wmCBv%dw3y_3J gw5wtP_}X8)}iDm^4=BsVu2^y;O{_g!3!)KtZBezk3HSA)f!nF)C_0*kUK zrCcuyn|6o^)%N#a;*&BnCkOQrj&Jeo%kPi8RPbOJJUMA=UNqrW$HyBDvU*xDIpD~n z1K^p1^Uq4GZYKZg#24hNPA)*qFv$m3soG+6EvSJvw4V~(Mr*uh-33gb{PGpEn0CFb z;rkE2bUxGQJ>n_3s&|dI5VD}WH_iC3E$IQE= N z3f$9@_0X7Z`lze4ho$>EILLc?GPW{DM&@UbF$}&=OogJVFwD-b6*J_8;cBkrbaa^P zZaH5nvH{ke8yF1onOCn%L7H5pYF4#V*5!8$m){MIdSqo~u}l4R*62(9{d-}4yElQ0 z@9^;3r>O!xhBwK22$bn6O0;mQXlRJce~@2X{Lb9*W6nY^KpEBF34&H{85t|>#*>m0 z?&FyEh(+z}oq8UnN*oL d9N=#BxKvEK;*!0Ptt =U i7JtzKU1g?Ue_-8Wc+Spf3w?oIOWNPs|@%cw_gOeOM6YPNuZ`_C=2lq&@o98hLk zE0yM-J$OGc6@l$GL0kYZF8Fh+@=CS>`uj0~@bKp4-(99w|ChzefN#ri`Epmc kgUX$uP*2fP6D0=8{kot5g;GjG&;uCGUr9-nM1t<>O#m>Dng z09)BjE`za3r~$R_^z>dCISV? BwL2Tbp^5xZ9tHI`TS zKp5}sy#_RHVG((JtaiB96vUb*bOn|V_SE7c-Q7W<|I^!>KvUWNZNp}gu_DP#8AD~B z$xMjYlr|ZQGLs=Q$xJfOM8>wc!Vbwi&qb!pWF8~DzwQ1%&+~uQ^R9QT_gmlh-S@p( z-FsjAy3Xqyf75XsLP!uJgLnok3kA2;rO)_%jUDlIdR*y0Ykyq6#5SNOPPX^BmM1nh zMRF|bE^>1!S@`Isr)hT9Es;$KL-O3-7RiI7C$;pZf}^82$zKDv*tRVu_lJ+hU1ycu z9JfEA9vQw&+P1z=I5y~npJLD*U0nyR?eFF4;1-|SvWIq;KY%0n7a{=Qs)%M8>FWy$ z2pH2P*Z43|-{cbgL{ay}5GvLfKZ5{jT(vQ*ZCW&!;0_ubu{{my@5Y)SWKawjt7% zIZ=yd4Kg$>>z3UDYHS$Sc7FCP#42LrhW)IARk8bTi-{3zHb4iJ-o#%3k7px-o=`Kj z0Kt{caj8e*E)7p)M1;B7CI4EkSWPajZvV#Ec!ZRg*xq7a>&da(s8zhOi&2fx8gtgl zjTrhqYL7sSo435SHvakcZ6To*@aj?yd|>TCH>=Kp?$Pd41Cz!|=@u;nM#ek{AM_0l zB9UIa;0v9eyzC~Ya*9IRc7@f-RltJPd;a|5)l1Z&tlkj;KdXmM9S>qnxjZXP;Ow>f zQYgc(yIy(Jwx79h+BMf9J;R=LQll}q|0||v6M0hvi&;*orI-VCd_1!}a2D>=RPW4$ zm )y!Ge`lVUI(Nn=O;Tr3?CE~olEILzn}i`i>de#ga4`M@cWGW9C| z#zA09v&Ew?KLh{Wqve;!U&6*#a2q =iL zd<>hz4)oqFpV1IvkZ6a49;?rHW99pISGAiPA>la1`+E^8s$%Xig`Yjs`%kBq;+L^^ zR?1PFKHWK`f*#dUOW6>d**v*3*OsEEtDS2ouQ(#&;q6-?N{S4O;(Bd*N-KJrXFF&r z#Nn9}aq~EzndoWvm% XXGC7=5*pB4?~0DYzZmXz=waWpmw#Z03bFk3;;i(;B8lvPdDN>Qoh@Q9F>cJval z0)%Q_lb1|zv(bPp!hVfDrfrLsmX|xWy`e#AS(9$clbdsiMyBx_59kIsuTxzpcW`JA z_{vWoY!FpjboU_~A6}aZT~kx6G>@MYrdEOH^ajBSwSXV3kRxm8uW!i~O8wT>CNeW0 z!vQeA7RiWu^$h!SZFzC=Rk~8B{+TJNmf9jt#N{6Xk8N*%()++pS!rIz`_xl8Y~ `Lzjp5vRrT zwQeQk +6g}WND*!NSF6|sXJKyw{9#a#*NLH0sDoYy&^M{lqHs;dT38jM8vlk z|MtT^kLS;xHNMsEWFNXG&VHV1z(SO~$-+DqPBN$pwC`Vny^$$5C03U>9Fsnfm**nT zUs>T(QZO%ZL(#_A34YP^ab!EvDmrmPX%R`Rw!3i*x3CMbzb9dk035K@)1^FAT^M=Y z`~qTj_U&{G%G})Yaa@1dpl^|2l+Ta$LW9#BeIZAg@|t!xdS91yDpdL!qIzm#Y6_30 zu}sr4GyB_`+;lS U$5 zZt*9+>%8sY{)|r1Oe}Bt#78aUkmX;?aUn?a>+@o)cs#=Sp40b#ym!)jCO@oO=B$G< z-m@w+9%INH$#U1Q@vSf-eY}5Mkuh8EgS{HRkMYF2$F VcPfJ0h2t&Y@2MTouE(Pzns-?K?Ro+54Vd- z-cxxQ&9g7rP~d}M>aw_@GD|Ej?c)nEXagpPONya9pa1>awh57%q=-pgpA!*3s;RDi z+IzY3u1g({?r6LbS?Tun_U$P?;*Dz;+IZ?T#+sVUe^t#~qi`KKD?Q_P#z8_M-Tzxo zYuG+;Hl7P7`wc{FT7Kad=n}dvU+AX-&k~Z1G}v#u{Rzpf-j2YZzivXZ_{U4;>9EH+ zA#uIf9s$Bqpe&x!QOP9VaY#ThUByf9FH{m?QwJ_H~zjO!VZYMDK>K3Mq zpk55I?=( Obad T{{8pwI;`k`iuuf&{rB%6#!>BB zdORpynCnUY?%$nRgwdm&<@HJL-Bt3P Pq)YZ%ey{v;Q82IeyHvK?-^dB)0K6neez&75hj@s#$Y!6 z{Y{HcFLtdq=er(bWB2c_paqjGZTWUKe-Jz$tn*zNb~`)@IywqMJzU5y)qj4qFUNtvdX8SZd9LiOv4lOOKPR&}`}L`o06SooHr5K)os?W6M+ zqF!9w*21=A577^v$)fEBa-*uNU(H*5R*%c=d#2fwk(4C%#8g3{GOhS%Hs;geArObg zX-WkT=odAILo1q_89up|o-43^@ +Z$Lqe=x>|^b2 zt*! qg`Y%=hPT$Hodm*B%_aD@4?U zgmw(t;(qy(d6`dWXhfJ0Pnnf<2B^7!i&dt^`S-6u1*2jN=zymK6fy2SdNcx+9HXOR zzh+{Lrwp~VPZs+&rlz#q-G!WFU23mTFg3|?yM9R)4k|WUUtMQppkTsJzg#tg_}#L$ zhE3yL&n!U}B>Ze6sLxZz=k4xj#Sjo;vg%!;U ^xN4$7eWiQ1ueCkTL$*}YGd~s{*0sIFu zj5D_V{AJn(;7Dr}a4&f?qf89rZzjet844$ zPZsCEN97ic>A* tST%tvhsOyhbFj7f}eAeMqE1 zHv7KAp;0`8F51bCMA{{=AY9k`kFFzlVrcY6A&M7r5wPS=-evZvur(}ZVP2~CyMTy@ z(_H(|yv3hvrN&4GQva0~Q!?|5iwSa>pWG`8^YfjJr!wU-pIEOvdH%c+b@y(ujm;NW zdmwZ06YW7RM SNQl7P<%JP~ zG`+xRCsd7*Jb5<6GRCdeb4L?c8gM-hnNJM`_{2 )5>Bd7T(H9?1Iup+?Er|w^%}qi- z(BF(=$kBFNGlVs@^YgQNj<%?fP_q|3jVo64w}ysH$cjCdoBtZ92p1jgrPkLIy&XZ- ztp$gLkrPFE?GBm4=f{V4fl29k ptA!|Af{)gI`|AHu3-C5} 13hQcxEOHza1jdrhGSsvo$A=C)CA?7l@S#e8=D51DE$ ckb}uv-&XFKX~_lxRVNPbXV1d6o$c&6*vypN{%}IwfEGuuhb~uaBxB^- zWI8rW)_pFpDC=1}Iy*i7x;i~syyvvz^}Mp?lX7+Shtd!G-Kn>pmm*%1K#Hxqd#$%O z6=ssB=L?ZdU*{Ex>Aei?eAuyk2HcBkG1I1Q;(Re25K9M}TX%xCva|QCk3Lt|5CYt> z@&5GY%pC1Zu`6#IcUA^fHl~_TKx7K}Cw`56GAQj-IG*n`EdBN2x>)RFsHRklN7EEm z^N|+v= 4@ jp(+ZnmKmns9EmWMiu_dr_ z-H^ z6?9TpGWF!(rMMZ%! zz7gr9_=HaNnU4m*{DiHcJN-5KOJcF{`>Kox#K#_Doi3V~@`QSof&2ogbfm*#Y55F1GLGD-&=oOky2DlqRYEf{`O zaN^DBX73jiyCe|xLoc;rS#fg}$z_6hCh)0~!V4zpRXVz__1r?l6(E(h{^`@Z&Q4Ys zwWm*ifCx%G1>yUB*lrV3JxTr!1L~5*%#qBru78kP&3~BmpM9-ceB*mmC-&eap_|-N zQcKO@$XL~(A?L0ph5nyB;739%XuML5nlat!^aNMKP9{4oi@#yw;DGHlnwmO}08iP` zG1U0O )4w_GW=Qpv3Jp%FkLoX-8sq3=(W@t!|Bep$=oNy>zB&w|+$~bhOCF>Jv z$`EEr=Prv%z~B9VyfK`b5E~tBYRgyg@p1vX#nYeW2R*T>B^U=lF$ytkJ5>8&+#`^a zzS|TZS|uqW65yr)a!kw*Gd>&e#((tfa9JHCP0<}uLNYsI<&GvN&v|+t B2>FMTOPR_SyTJGktt@MIm8f zb@rwb^~B{5i)s%KUk#6Z1ot$IayBzlNl?%^ffYXxOeh })EgiaIj$^W)$a0h9;!!qPL>^xkfX9RiUK z_DWvCC+!FB+Dgz`Rf>x-`j0#{jx)d0i|<{(=2>OYML={B2%!rLmerBS(q>3^t;uaa z`KRHYZh;?ik79X0Az046I^a2SqW+TVGamRg+yknIzClX$=CN{)wi46{*Um`Q;gd zlu^+ht?4^PzdwWZQx<7lTF3qJq OZM~g70Wd1rfoE@jmd}O z_KB-X7s?v&hCT2Dn??pQerVxXGh1FBd->p_JH{J~MVywoO@|+Py$o@#?KdA5zv7M> zouJ}hp?-rcUw;A8n~?21oo1XrZS+V!nf7P$ly*t0J6=6+F($o{so$M3@r?9(<7*!U z%uqzs@){oOef6$-cyJVZ=ymdAEnL_Y98)`y&MSk-#SLaOlqE!%r$&!lQ#%+q(3cNl zV#PS0)Mrj@Vd %!L~oGl1Dr}gq|hok?I_-4!67oU3aZF6*nRWctz-9^*5V<$ z+=F#)R*mffpxA!A9ob!ZgeZ0xj$xt)rxuG+i@n4ucKdMmgH?C(E7CfSg@aRC{5VWy z?+|#cY#08A0|-8xp`oEbUjFEHJ;@=exbhJw0%oFsnrWiIue%kHzXZ=sLx$tha(*$6 zuMcZR(bt0YG6FZ No$phs$qgrIuU;q^(!rO7G)c{EHpd;O(_@qdLQCwN0qa-%RfC&4}g>t7S zh0$})pvPsa&I6SPh9$ u)V?I zhqmZl4E~PQ5VQ*j+9B&*7#SIvyV&yX`Ht4_x7C#NP_FNzh;u07NV|=6ehos6g^BIl z5DY1K>>nA~17dLFm3&Zh9TBnej}y%w-~*|1m&C*^25IR!5K^GYDt>t~`-1GdIuA;d z=M^Dg{r?U=$Amgh&4Z q&Vx?(;yvCQjM-&3-i~(y@M7kBuFvvq93$R)q8{ppIXAJI`njULR;H%tw#h zz8ZHrWqYK NZWjg6Gn#tw z3NHyMCggEL-9hcPDHeIfxw%++r*hUq0DQf^QLp;>`x*e`hP?#Hu>Hx?MaE1o;bfE2 zxivYs6niiZmT2uThz-7!V(ieQ{19MT!V>9Seu z%6;FIGCx}p&{MsNsUu*5DdgPXho2iY@({UxLQ`+Or{BD=&6>LEz47t*@?_KLuWd2{ zLcbI}XSb8(ez>6U$W`=-QRG4mKokKB_qVvGT%=J)dh8{l25^n{rViQG{q#=(p%}%3 z9XN+aSdxO>c3~qGb34Nw_52sm;*L{5y3yVKiYG9L;ut2|DoFWcS$`v-XW>Zn!(q4W zCcv4ZyZ4OS01PJ8CPJ8p?r`MfD1u?uu+{h7lin@A;aqO&Y=pKN1y~B41psfct=(*1 zLDi8FTg$IkS~Z5i_>fGG$n|+ZD?hmN(r+@vi*6vfn>y^@9-krkTxry?3;? O5S$`2 %1h5O{xBpNWt?jxaJ{{gE!LzvlSUtdLO6*>Z 96lH?u P`R*s=pmVhgKfq& zee1dp{A;s*79GEy Rx3jvR4jW-*GUeNmW96s54hmb~¥3*e-3}*sN(P&mh#;Kfctu5?^~>m}Glh z#*7&j ;lLuHK;Ly;s$#(9Qh7O&w1^T#8BkBTB|CQvTD1 zqC?^<5Ol47OVk-v`}O;u_c9D&bAs*M>d1z77uokhbhN< ~E`4!B8 zYW6(Bj??6ZV>N*tEW6E>H!Oz1n$PXi3i`LpWO*;+>5E>}VMDp!dIy$cEag=DiW(of z!ngqkgG_%xMiY3+QmZE}-`=&Gfj`HYL`uf$62X-n9=yp!pG`uEXj1tp#j|!T!+|2@ z!JKJ-vAigaUN8zyM3xMHtPu}ElZnEJ2Tw1 Z9>m~$}!s?^*ncREz|z~(fTf=72P zJczo6F>$FNK3`a!GDrhkPG=At>3d->r`Mjb@%gzq{cW zbQmvYMS$&8cQn3^be#_L{@db>QB_evE@*3JRAEv)W^jD$roNc4x3>?Dh`@-$i;Iat zIFlqf1Vbftc87+B1`vFN6Aw7LLH>!=Emcj@cNEhj(U?sJWQ$dD`lqIh0XPWqM~!ns z@Pi*e3^*=*_!qd4881LC6GT`2{r!C%#8u8L#y{H&bsJyL^8wqJ^znf76%G^`85!hu ze*AFjN)jad$MEF|s0Z=kl+;uOmS|sM_$Ann2f)jQJ~>>01LGCu6vm+LSS}GGiu4~_ zTX$st1JPv0d-nV}e8hZ-_>rL@iM=s #_3B`Qx&oep)L` zVh&*rFu16lKey_`=