From 6214c06a90afd34bb76ff8b9a1d38c71757c8ae4 Mon Sep 17 00:00:00 2001 From: Kalmat Date: Sat, 26 Feb 2022 17:59:08 +0100 Subject: [PATCH] Renamed to PyWinCtl --- dist/PyWinCtl-0.0.11-py3-none-any.whl | Bin 0 -> 61188 bytes src/pywinctl/__init__.py | 397 ++++++++++++++++++++++++++ 2 files changed, 397 insertions(+) create mode 100644 dist/PyWinCtl-0.0.11-py3-none-any.whl create mode 100644 src/pywinctl/__init__.py diff --git a/dist/PyWinCtl-0.0.11-py3-none-any.whl b/dist/PyWinCtl-0.0.11-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..0f0a4df7aaef6eb0a282d57aa6fa864862e89fed GIT binary patch literal 61188 zcmaf)LyRsAuwdJL+qZ4owr$(CZQK6Zwr$(SZQHgn|7vEEw|J>tttypNa_Xc?K^hbc z1qcY}4^Wk`hRVgR7os{e5KtFA5D?~nSqD#ZQx|tjI}>|%TL*f5eM>t_7kzy?2hVLS zTjxzSq@P;-KxHyyZ>b5-a~X3V$J=b3EH5N(PIBJYEZC%kkW3;BpyrXEk4DH#@r)l(B%}@#@Q5DI z*y$S7)C!dSJVZ{exyE=MWN5cfd%2RION?VWOE4yX5*`-&wIQp>6)5?~mVqx2_&q|5 z?|(X{NPZY2`k|vBBXWfy;_fCRi`h6CJMvH*_ei<)EZRNjo|T||Cm^uf)o=38Yvp}r ziF^>KX3X_*AhS)FoWzG|OKD5$b)!Xy`ldowh0v%85+qO&MJpf#GzC0Zgh0)AJF?21 zMh&w~A-J*k&m07YAv1(_B4Q-^G^|jet46GRc)o}{*H-pB#Qm8l1V5-ai-fUtif@5q zUXlRVPb}h|^cl%81$0U)mu7eg#J?(30yQ8;T41#k_vaD)dG{F0knF`#TRVQqoLxPn zK6ZoOFRKDL!m)v*I*2jIcH+Vmt0ZO&WFF&2!Ki3!X6E5-ZOUge5>iVg3$fj#)^Fxf z{A*}re)DnmlEA<9Pr;zTnTkTGM7QNeY)rHWB>Y+TDVOV45)CFdZ~J*M2S7E&C@#4L zp}i7`j1`>9t>777GPNR;a^kAWO9BDBmOdga0QJ2;25)%*A2iP3m*&PnN zFGRf+il~=wDp{gRwHU*Fy&3~NpiA{;_w-88=fE>5fX&0IypLLgN-#Gu;qAyACcSRo z+G!I8I_>~@)?$vU+!8+_krSnA zs=t3Bk_XmAN(|?@Wbf=@uRTPNaazq>#~5Qd{1X@;>C5Pv9u9^bDAOVX4LgD?{lSCR zFknFfoqVlqAnu>2Wl^lz4@#_8n-6<^m!6A0+-7o@*^lJ3#(leb%TwbPj!T{o^1)Pk z>jqqP`V>e;zBmXuG;gX-kw6UnNefVi5vS2ho!IPD;8u2PXW_D>AiO!&u-3;_hHcYdB4r*|3G|s&`T>mh<<S5z3 zA&M$}=xzf=K{vXb@b?qCW~16?&SYN(w|&0qpjL%7fDn(A6OWKhxbDQEU}hC)5Sqy` z)7YVawfl$abb-PsBkY`IQg#)xK|3U9^38;_zF-~B2Hx;^#D-#ur4NUZrL$=r3t&^K z$lk}<*W20t;UL9Vb~LndI;B4^j({WC$zbJ_DYszkRw@p8wV&(X#i*__dr-LrKCG*F zEH^&ydwiaLI9ino=O&;^)ibBFTd9(fk1te#bXg&lq0?xs&ZR<}+>c$qXW4Pu3LxvN zRaMbywK|JuPEHj55m3Z>t&>;U%gtiG(N(*Ub7}v`vxQd<1s$|0tF@bQml{w)WoODu z#D?l3$?j5I0l z2^r+7yF4;E#)GeP^HG=k(z1Hlc*6TWy|uLnK{v)*lilg6)^3lGO~BURyF2n?=E zsjg^+AAm5xUk`>GhPGBXgLk&2-Tbr925H|9|L0h^V_g_q#5cc*cOT+iEzOW^2 z?9+i4LgU^e{V*qg$WcD4*tc13Q10%piFCPNA?UV_)T)X$?iSD$u{Xm%HH~ig0*njT09kU zMQZmy0C>y4BhLzPmk<-K+*8jAnU_QNItavCu%ucn5op&U(FG#WLx{8=5t;Ge-z>4| zLk!2VQLJ+0f}gerKu?q2pgBiZukn6v$8bc!2Yi_}caQm8P@R|1kOmsMK4--mzIvA= z5lZj_KCqhvr@lp(`D%Vp-c*dH_6@F!g-Hv3S`^2B>)R!(K+cOpmBRB)9lV@3fSt+z zsB&JdW@{2X9aTeSP$QNSu^c#eLvq&KOyuSyI?5b_%8#i*ImdD5n2rQldWW!SFG!R> z5R~=mIZGDJ>0d|s&R2JDR6;O#cdtDjXg^NMxb8~iT()jt*QRaC&L$7{>{hci>e;49 zlbY;xC`OWu&84-@>aI6f7>LFZi^T1DY{6w!F4&&EM8rAK+TwvoeKBB!LqQQ@Ef1T zMrpn{lDg4=fc7G_E|5#UW`Jk^@b|-0p=7uJ~O2c>)C%wz(cu%`};yfl}R7 zX_YMf-D{c-H4+%pJ}-z{cBi$;jUu5XIIn`AmG5a`hwBLAQQL*@`olKgHdGtDCco-x zdn%coVe7BD3-9fEG_S5(l@d)NZ!TIT{j7TzSXWeH)xI%W#j}*4m;@6iqv{HiTLaZm zZZJUwbzp;`KPUk2eGWy};GRy?(Qg&53;tW^7ZW%ZH|Px_7rO3_B-m9{O7ue!Uqni|n@D zhXW^G2fx0s7>%yOKz~dlmjH_R3QB*t5Adu~#cEFVr__evyNxn!G^^qH zZv^*$ZLgZ&K6xiJk8CscFtxpbDI5n!E#Z?Q)?qzHT7mvL-x!1E%>|kcz{R~WhUo=+ zy7wFbNtQR1kguUwtemy~SM_W7p`rFf)GQ+WkiC(s( z+_BIBo@WCjh15DT&^X7VQJ%q<2|%1@7HDy*e%BOGGi=xD0-sZ|M|o8 zw-I8kyd_KLNgwWoHNO+&%f!P+Mobep^%#7u&R$L)=CdXM;0o^Xd;D(S)tEE_K0h^Z z{{Bq&7d4GH@F#wB=rPkV9@6}K;a(L=$;jL9>7+8Qr?L+I`cx|JAN zXO*qWLl3b^u0Iwuh4qv6wwgO9WKND&Vggn5Z?a!e#m2J;;kY>*ptEtD^htAap@P0H|AD4vP> z-xsn#gdrlyo7n&)igaoYR=%H-5FitB$6m#GB(WC7XO0cMpix1z2emBMA84tBRYb^< zbVSNZrVw+?-K(-DR>(To*{&LjRtj(?`x1vV9tsyr70n^x0rx-$uwbF}rZe-J8NwnO zL+RgDDf*Br_{fH0iZ!ncfruo|$o{ny&j3Cp8BeIsyMmTLzfF9;b`B=DPh=E3J|6>G zEa+gIO`zsK^HHpQCh@cjZc}2~T?;P&F*0V-SbN6eZf|;NMo$5@q2Gi#!*UHpidv(V zL~TS&_u@2sh03%MJ(CReLnEdMR^C9K(4|Hld1|jv>%|7yI+2#(S}A&%NO=NT zIC8YRz}4sGlM+^be_m2N624%w!05Og2%^DBZM#lV-Cs{~Y82im(6u=_gc4@@SCVDVA$x{1;dgJLB%4) zNr-@En_M6p2u(^ZVb&v>rw{|$ey_$jvZoa*bSogOko8`yx@9~~AkcjsK{Ri0ukuQy zy`CG$^K@a`gciW%8awK99_PslZ`d)NuMAUqlf|rMXdZ3wyf_46gmfN*h-i^CNwX5N z!Dg6J`Wcm}YNG{$~Pf?}GRaB;V4_#8ECkO*eZ<+Sln9WaF z4XMrLK_|H=A<7cg3^2z8Su)yzp^hQIzXpGbe@HtM6J5&8tpAkF$I`tnq3GoXoksL3TP@7at#6;&eF>il)=ZB7p9i^ZS|7_w#)D>gy8F6F*pA z@Nff~gFje@I*8NRyf9F>%)d0kMWgL@Ae=-rMN*Awsn)zB38I44E&qLsWVTbz#GdR+ z8sAPa)z)ogg#dm$Y0gz>$Qbn8rzjnBG?fL{Dj>OhF(PI3-blV9vqS1DH0v_Hs5GC> zD-m|BLDBq`Rlf1vn$U)xh8<*Ornse?O6$}i6Vx)lmw$&QP6g4z(4Zxl1=vdWSl5)# zJHd*Dm)hw9w^PVOqv*~KSBin>L6y7x1x;6@32)wI1jqn5#GR_(1AM|*5Q_q;N8Z%J zj8i1AsazIXw{Q_eWFsm>qZ{=V9---4W=L+Kh26X7C$WVd>FD(?gn}Ss) z)hnQtuD2;wAH^328@%|V+>*b?wVXUMPGrdLV2UnH4lq2{C;9e&X^aRwzcLjG7>h;w zFzpc|j3L%qpZ3MTE+^uePpKiZLK(EFX)QBJ3UKM;{sLW@Vg5m-)JeACq(>!BQL$rQS1$E zWYTIV+lkzgJP3;t4R{Hq0aL!&Qp$RJktC(Oa9ewpU8PH_=fX{qg0<@^&U`7$8_3|e zy(7A*i%8la1&+0&S*S;fUNFEhS!ImrR!A*Wmy>Zu5!-98ObA$QxxZKS?oLINb3yaC zAPoaCfKD7Yg|A!R63)H_Z33^`2~t^?lK$EDzdJ!y=gM;q6u=(Qm;*8lpXY>#@P6G%a}r6{p#aA)Y3~1+tT; zck(=kD}qOH3X!?-9lBTh7R~2H^WDgUQseH4_AQi{1SeNi+PkgA-B_sCRv3fMYkVpZ z<+zt){99E}6c;!ui)53qmSa#kO<|w-X7(7Kljc5yYSRU|i(WP@XtMuM2_>pbZTP>7 zwXYquMk4^;4{Uj-xhh?^qr8+pcCPYRrGrkmM76|=Y{Wbq)my?2={=aHeusKW|Mk9S z|HztR8SkREQ0N>{HZ-)(yjD{n{o1eQv6uV{{i=^wg-^9q3YCn?tSY*xTlOGtY=NBhYuCF{*FDOx zIR-cj2uTLS4jBPqH27x{w?#`&fnbG1>rG|)@363fI{-PG8UfOj(2*CYs16Ti;(a6^ z4|C!tW=-i;m1c$_CT{!kv&hlXgckjD8qo7Xx5bO)JiV$4t0OqA;KMIiD9tES3w-K{ zVKcnHhE{lQ%`)c}{MV=z z-^BbnD|nmsvFJ(oT`+rtfveV9HT_d_2$$FP^}t|;_$P8wy%m~QhLo9&OsoCIn=cR4 ze%TYYBgGnZd)SqsYF>Rz#No+B*4SJ%m;>?_vNOB0%JY{+-HKN!i@qdO&fjrwJqm)OAxRDnoY{CgVcHmj?rVapf1s#Zbwm*tV-Te7KpdeQjSXunnAR%+$9LXwyK2? zAy9EK`oO$7_sB)D$o-Df^ZP>kFC6G!RHaoljVt(QP7oT%ablY#F2!k36jZIKW9$pS zp`=k7a_=A14U=aRroQRCAE9QxH@e!cvDP2-#4w8X%I z=`&cG{Br4wEv$2)8fE2RR64kDo@IErux}$;V8VRzEKbU)GfYAS)f^PT zIR#s5Cal_?8jkn^Yf?UXN?r7iK;B#!_Ti9*`M@_4XRcmJZRqV^5U3Jsb-Xx>7 z?%Nhb(%!=>T!h`lLzJO7rLTaYltWB>X;^qXPzJCg=X*qd2rK>yCuAWNavMJNxTWw!;+Y?Q`M8J5xzlmP^f~1r{VT+E${^JuK0nIUND(}kz`cEP zo%t`Gj3`Vzruzfhp`nH22BXIiKu`K>sI({DF;Xyn(VJJ^>oVH6^m21o^}{u9 zoo}cw2qvr3{ES=tV|k`~j`^zR=`u|9BlYJ=+@IDV4+eyJlVEgxVcZ|KT^AK zr;un<_clY)y&+u3b;CJZE2u10%D$cVl+U}0cGY)=SfG&hkzt&Ad#&5)zI5pF7J=bG zI%`u4@&yL5z%a>5=O8sn2YQqogV!wgN`2C4vBwQD+YDr|kQ}nlmekh)fqhO*Q2rC4 z8co3mNw*yvgCeQghp`&Adu)ca(a;p9Bp%K!oqo_VZODCHxC}qXBhl!6-5ee}Ii8N> zXFx4E81Y!*AI*$-Nat@8SH|IWX^P?YOn5LnzBt3Uf8g#}DzZDjg+|iK^+R@I(q7$4 zi}g|?NbOa0Y<|TAuV+}|o4Tc|t6#*#k9hPev@sVoV2bglIZzKf(wXZSeUZv(4@q^A zqn>3ga4O9H>``rp=T<-MXLbtfte(?~<2nvXwej=uJ73Yc|DKurlj~bWYPxubTnn(_w=v9g=8`S7h0t6qhqSSYw<0Zof#Allq^o2V6&xA`C&)&8;;5wnj6kp7Lk z>_mvtRE_mH#>TN$Us_PgPanjBDL)P}uW{fjiD&JKZrsPjka?wuFs7F}5Ppf*F*#;* zY-ucKa8l?evD{BMS?`c-OKE4-eK&Mpi&)hpta6A?;*d^e82&V4b!hge(o;@^K~E;g ztqy{lAL6>o7|O-PS!N@_(sD{jbD7m`xL>~!6q2#0riayN;;w))mhgO$y|*)b1SR3S z+y-TDeEYnsdw377yVARre^ZZHuzLNGC+!dezVYMB5BOQm&>BKnu0nfl3~_SP*dF@j zr>$}dv&eqva#gBz!{zhoC*<=HaJLfa7Qm1fLm?Nuwx;Saco3yJhe zVqtfTY1)KT{=!r*OW|#`vT*y!E7kkZGaFHAuM2ySKWBNHZW9Cq)V$~Fa%$)t2hpTUFyN(5E#983m{832<_~5!3J7>Y3AH&fHEDYNh5xXgKedDK{ z(BciZgb*x90jr}{>Q+H@XM$NLo5HIm@{GMLYz#0Hc;-+Canz!ust z!&>NX!^GT^i}lVSPJ^HG*C(?^QIg3Uffe0$3LcF$4x%UIo+q_SKuLt4@0l3~@E(u1 zOJtvsp**cxYLE9peJ_s&XI5?r|N03Wg5x?{@G3z3Lff4;yMdbct(GFszj=PA_iO?IkjgDCQe^E~_z+=Pj7b1+d(Na9m9x}NTvVoAUHd4;t6^aG5NxUIzawnPckx08^p}*Xi9TRL(%m%gMpj-V|2v$(D|J3DZjOa%EhXt`|EqY`j z(ncbr$6s06QF^!_J)D`*Y1f+wYGgUqI5CE2U#_e&!68oWk6+n3iaIg)mr*J^Wq9Q;M73i{G94|uzXoduG-9I!B$sKR>_goLVUEduRzin%`!FGOg_)Fwf z9iZUAdk9-l1KdZuNNO$z@DPZqsCW)<58l^IH#+2FZUJet3*c<$~Wn$aEBFN3X%FFBH_40|9f8VEnAh86}1;|0A;6D+^uXzCtdfxU}$eqa)zK@QM_G3e5B7Va59jS%? zZAcpgFTMYyi!Y{*8|=515-VWrzE9E=`Pz$uEwa8q3K!8!0BYOnr9^e)#x($@MdZs^ zT&^oXH4{~^C(EQwQ5=*9)n502itw`H z6y}dY=IyE#GrWp?z3~{u-wp}e%0iU4zxh3!e-4(FX(7qfWG4Of7zhBSrR~S3uK&vz zZh-+Ks*qaVYPpX#L>^VDmH)_{GKDVXKB>N3te25r7&nbU%~ zAK{Repme={LD1{7*>~lTj=Jp;uxhXiZeCjwiz3Ft@{J_|L1X3mc3{c?&o4avt6mC@ z%um>{A{r`pl-OCs+4Ej!&?HKe3MiE92Y+P(Re0le`5YrZf3lela#nn+hBbP3%i1_S}r#p<#9~@iC8vN@8;gr zm_;`;>AB0iFt~b}Ix(0^a;mj-phdZk=`keoC*4>1X@7v6kodvz{28IJG+S2}TrKdE z6ysP{T{0tk?g&_G^J7Z78W!n*YqmO+eW{48hcQYNn7R5mTM4-U7_i6ttGdmJ)$Ow_ zTmvMdRU5$=GZ)w(;g4H_$w`Zk+2D|!X46P`Fp*<_!p@VL}ZQ(Qcw zw*MdIsG2H@G)jX-`ag$ytRr7WDWt)})m3n^8}P_@O@vIJ%QVgAuIHo6ZTr?dA5j>{ zuL)KqZ)I)b!t2OUCTaT))g&z^MwyOXKYcCJ#A8c-6K4-PEqSpZObI&R<{ZkIq1?^B z?g$|z!e)v7%s{gMX_4v`;oh{WW^~>v3HD_>XoNf9O9i=U6xxkpQnq>iIzW*Wzl}Xp zeoJMwf=?o1Hl?zu=q0%|;~1PYpV^EN(((6{bE9Ti6Bq<}Mm@1rw>PwOFZ12F%`=X1 zk6j~zS<`x8KrYu4{k_#e{~uOmNlC&fv^&A^Kh|dEGHe{FmaXp9?^1hbQcu@8{;Nn| zbsiLMv$HnRe@32C)LNL7HBcK$>k(7E-8i)n7lR1%2{jjSgP4>RqtR|V`E%jA(e->J zOULlmvG>yhz@xMrV&^Nr(%X3-3o1m1Bsro#c5)FB9fh1pNNVxohNwwNy3;>*y&f!H z7yfnW^KV0YLupRhQlz?Z*d#+(PEpPSyy|fwt|K=Q4%xmGZQE#Z&1@;9%X92=`PTh9 zz4d<;>g(+(D;G8W7+{sjlO6N^_DAlT*CG3$@&tO}u`hk>x7UrrKJ55aF#9Y}oNyb+% z_F}Uj^&d7aMf4jYbtX;^c_{tn4nxJYEe% zn;F8>wAi6cm6A!?VX<7#K@RYJszs6chfciL2B5p&h?>`9v}Sagn#R?E(0lpb1w{*< zQ#ZIW5M;gy??zKS@dc}!4s4kIk-dVRp@~zzrEQsI#Y{c*+ao_cg=bu3=%esZ{!4D< z*#l|JMtoHo&}pnCUBleG$(hDS{bB#o^TOpibyX{*IG9mBtkKG1c&PG@w#aG$4PP<8 zjw0RgPf;R)+;24B2ca+2sb}e;*Z&6(H{rdERd~!vZl0Y=&S_3I`&H$H(AW13?C6;TRzt@#YpyJjv>2VdDB_5!(Tp|{uE70X3N@NXq*vE*Gxp^ z_e*{G78>%eFO0l}xjA<@TIMrzxs=!-;rD=vz1EchtcYIugL-oUSG%`~A z62r^-^bp6s30j=a(E|wkU=UjLCJ7YzOq}ICLBTp3o^jMm^1BLMl!fA`bHdX^O1pgL ztZlf)&d@uyP8ux-gZmU5e!ARV&a-ZgMVA)~FzwV!iq?cE+C3m<$E_#KzDJ&9fU-^j8ohX=3`;j&jc&iuoG-Nl?pJ| zFVBw#0``ai348w4QIh_~qc4(wb*=pO_(kl+7Ww+&wKwd@O>_DZZ>$;Au)MGnH~TlR zQRf|wEYaojrZM2M8j?Hi`g3z+l03ljzGjw3V%bKmETU6Q{BvUIYg1C&AoAL%Ie&SC z603d96s%jl|22D1dYr|OoRK(T^EJR}k}B4dO|vCQL01l$hK$w4a%j zVQfrJ*E3*zEQs8Wh~w3*PvE)k#h|RABY?uw^k1}D&S=ty?pcuglQwavpR~kG_26IOlBa$Cdrjmyx-~Z#>BKk zmUqu1#lz8f@#<{fZ)(J0&hBmGX|k>*`}d@5j&DNCsV?4Y%0&Uq7z0fKfKLb|lI3r4 zg96yHr$li1=|&(AJce#mS+RO!9Bn?W*iuV79+#q{OA@~j;w(>FXU3R0&_?EH zGJivvEc_ne^_K4r{~6K{r=rikYr8}Ia|JO6PVojIYxioIaV|{T-WZ3uz$83=sR}D- zWmLeKS#046Ddw-Hb6Vo{9Sa(}lTx(&t-#rHWvXq*m@y~&GFzcTm+sY0{@$uJ>g)pC zRc5I~Jeu9x{&D;oZ-}e5RVGzOeTmyJt`s_qN2OzLh9>%)4NL5 zn}_dts=XI)nR=AI8i$O+P0V<5$L1jV9Jfi-WF#JE;>UxJWK_xQkzt$buB3L^b(q4; zVt*K=%cJf0Hf!K>-h+RcR$FH>_K%Y~O!B<&FmiaZ!imZp15P~f;cgs3>Qi0tY1fXhT# zJe}%e#$_QRK44!@Fft=d5&8}5&K;A;FsBuuSey`WE_4AP@sE>`@p;#Gd>>X;|42p{ zdL#9|CIqd)AGVe#+)?Iw`TC!|Zi4cY3ES?FnKVOX7-|nLyO~RJIC6q*#3k3NwSVo3 zf9;OpyPJZ)?N&a-E8v+M>v${-Li?+t;?Y;#Ev$HZ!b6(_?#8v9c-penoY=JxH)x%n zV(c^dk7IsG=H5Es@)A<`UpvKCOY&0gQg>7Kx`bP(2+!#Pime5WLT!>P6dyjgii}UK zEw_ZNY5~0~6*~B|)5$d}wMfQnhUkb!@MdpgCR+?WyRP*+e zEHq2SB7Isw^<2K90#}yXUQs6RSqso(iHSEC{jpolGBQ)Rfm~P=+sf6ci z0`jW}>l@ih6z1rIG-RR+v-R5fs1Vm#O`(5Zp?+Vh_-lP8>JW0PJNe!&<_HF^0)Gtw zSkfc9E!AJbw90mpK@XSys1QHr)%GlJ+qJATFWORX&z~Z(BmI^9#d<`bmG5kmHQ`6= zD`UW{)$zGd$ybKTC8JOAEZHo$crSM;Lq8G_4t(C((lljiT{c<9Nbo$)7A;qOGoz;} zPu+>1I|#&GWhlJ0@+Sm9>YBAzd|pp0OLd+di|)a#yK$1O ztx$!noXl;sbLlMNX`x@3=3qY)ZtEA7>LAGogTgW)zBdJ2-rBZy70#{bt))yHuEDzZ zo43zK#8;pgLv0Tt^pIsv4~Eqok3>-|J96>6+AkCiPnywN4(ugTxcxRf6W5&E^Mkfr zpPFd==BQPUdWWM*bzJ3y~CeG|0$ii zF6`bo+8^=**YZ*Go$;}X5}Vs$*XbPOc==~43!hb3rR%n3%j;2y#jUuZLI({}GJ#Rp z$!y|qRc)oSwl{q7A$WkmYlOQ7Lj}*kaV_vR}o~%`JnCNlu9psfnK&mz$q2 z=K9~qIUif0D0BYS*>85w+8lX3yYcZ!;R+;vgXPmoJuuM2iwcRhOSt}IF>R1?dc)g7 zy<$_ZJtlGOL4s`^21?hkd0SbjWXB^|^Wj)0=JJe;!f57p{&yciPQ@QhX4((AMi})8 zs%Amej;*Q@$6X5Fzw%s(s3b5ajdt|xdC?j3c~Dsdtnb8(6I_(#l>OE?-VX)s5rR57 z;k{=enOuUSIy*^1dprtu^`_y~RRYgCZy^llz~H6>_lFRzC#RIK4*#}KN#R(AqifSX zJ%R!Xv~`j8-h;{Os|Kwl!x~MVsVoN~Bt%0y`e&@TodLe8+>@bR(n8`bW;MR?gZVS- zHr*2fH23NmkL7B|C!-3gkIb5itI}jD)ZB8(UrBBntj*8}S)uGXJ1ylET~fR%ejlC0 zpCKya7jIn)nxv@XZP`%&y&3(0H6(>OFi{n1))0Ta-CFIq&A_6)*8DS7tnSQTg;67@ z;?wUGV)hwa^z^Sb%6Md}`StcXFGAou=ZLLHG!b9^Wz>4h_=XZ4c05zFjk zNPH1FAu5^f_iP}I2DbQ7R03(c%l-@Y4TcT5{S_K^Qkr{J;+!$J)~$E<&hz51yLjUN zbIG5z&Zz4V+3{KyT6K(2PP)~tiZsD@_t~LA9JlTO*$_u#T7@KZc6Yq6+aJk7);pPW zxtQWq)X_OnMoN!8L}Qte6-G;qJol=@v}u}^2eR~iHuHK%zk88UeA4j!g$q-+C7W+X zlEjteePJ)kdN9kTpTts#n55w9(9u-CD{vLp^SaaCGm|qmV>GrkaAvX!TB(W-TWRq1zt~}QNBuSFan;PDZk8mv%T=$14T^Izm&1|H{?o2+tC5kS|Jidht+f+ zC~d}~R9RhHTXr3jk&8x3)Jv^J9w%U&V;ekz_&jJFQNP5(A}V#r3x&*-#@rBHYO70* z$o^o#$(p50p-pPT4a-UT6)H9LbNae zt7E3O=<443tYbl_Jd*&*8dVw-iRv1ox?LZIqLDs{6ff&k)}U~)=sToQnmtA}oyBWx z1tDl%K!NOiLZ3<&SqWqroqc+Swc#a;bFMrDcRBPZGi-2+8~(W)>!VT=8MW1RDIpiliuU!V$zMF{ztb$huw=u`*Xw`wTY$A? zzQOmtUOvq_6jFJlk;ffq0WAC?c6E@nNf*3}EnxaIMO1H-%Rq7D&hFikNiY&#lWf#S z9J#6TAFReY-%OSg1!@4lmdceLjjXAir-NG|V`^P%jrFJu zh-VCRmM@b|2oA!tL%G!KJI6W#JSP{G{Y|=99JEOFaNpR#9QpPZyqDd*aD$#Z$aZ~%QpB3GT8HiY?iFMuk0k_$3bq>V z`N`6DXyV?7_@nRTWA3VBC>=Z2_lr(qqc3*0+(;6qtJK!5o#|~{9r6*1->nzUy$?;x z!wJ6&EvU-m$!P8+cF7xAH8b z-flaa+67T*FIyAPfKE$);%$HdpNdad$b24KRYTv_-ya$Wy%}AF5nU$Rq}g;o@te0T zVxYZhJp=WDNa1Q3W^BXjb>o^@U$iEA!$wCha650^7$Mr4=bDqwRil4ZNLLwB+|pE( zxCs?aUBz)~=owP+XewH>%)DA@`T#(J8k6}wYVRd1udT{XmBw(KWGNV*-JWOzZ)?^R zpqXTTGHsHQK=*^)q4L3S4~-f?U4o<5;n%}TH=zLzu$rS63KysATBxgB0270ifk9`e z1bvPsprf7kYqml;cl_SOQ-_`bDJ5@6Jra0x_x$XPpK3<%pRhUj)^^rzxTz#v4>+aD zU%t&c=u3P5>-6_BPgP@S?!hvk%!_J|5oJDkEK)BrBCE7Zca=9@ z84q-c);UJCrcbqQ1;tRl`5$CaMdL-1eN#q#_I>$*Qxf*salE_Ad9_bA4Xc)tB%%h( zG*krz4rG>*Z(>=@#RMvl_V3~YyT)ZaZyLDF)tgMge<$+uM#6Jb=9HH^wd0mQ$A46$ zyptskkhlgd-l?<-uvq7!YL~v0?Jvy0V@2H5#`kn(fsJFOD}J?9BdY7mhuZDH`LYY9 zewQnd7EEq4-}A34UA(UiJN5e^@OtX`jVP#>$hK3H__e$?#am^p>xkt#$%$>(bb2F3 znuqfRQSzf-G4Bra0-t3v4$8bxy6qx6ip6UV)M*)&hRaoVMwhue5W!*$Va5gj(K?1Y z4+0GfGiv4bcTH|o;)J<~pHBZlE7ZCYl;KEVZ^<{9_;nEXnOcHC(}BA;<0nba2ah>h zG@6R2hHfx-f0o0{GdjJ>Q4}|Cj6n;Jo}{4cD33tPJvMcEGGG)5Q@<9m2@UbW7)mZF zS+A0nq&(fwUxCbZux6_*5rI3m=EoE^W(-w-b^SxTCRMCEK8$kGCC6?3+CvL~H zZNfSCq%rsB37KP?huU!o7)*#f?jk(;?rVAE|G{Wf~StJZ{c z*O#-jH_K+@xoTrAeUqV2_&Pj&JJQvw>9!OE>r0-MB`#F&f~cCAGQ-Lj6%e-2qy^q= zK1HSWcZY2!Ve6HAXU5mdrm0@%m~q-woH-BrC`B54xD)zG^1qCOK!+0{YgNN)l83Lj zT*Yjil*MiHIV5umqs~!{A_-J9`c5Nt8r772EXr16Cu>{Ho{8=H0$Gbyef}Tz?y*S} zwOiD4+qP}nwr$(CZOpc9+qP}awrAV!%(eG<&rVX6ao2Hek$#fFf zDbG13K^;+loDq&g(Ig*bItf_Kmgy8G5B?AsC5(%=WeUC7RO2Z#llCozXhP#aqVx3C zb6+|SJF6!Z746JJ6TYXT)mWTn#K#wtYY~1;`yMQfm;j~To=}RLV9M_luJ#K}1Mo6> z_zj?`lX*?E^>;pcp6HoCA0i#ys{G==Yat@X^(m}$&G=0S6-|Y4V04&Dn^#c$6GUY) zk%ozNdNq~ymscHv*9$^pGfvXx$2P@tqpSO3YLgum*Nzoyr3R=QwHZnrH`HC%@J%)_;vjo{IPrqI!N zU+8!}tS10wkqr}l(HzRD6pWau^OdvXKf3@&&$9H0luRkySBmD_m^#+i7kY?R^Wz<3 zlEj$I9K&!~gPaX%tQr|qfV2oKvDE5{j}0Q5Oc__A87Khvj_x%2q1A~#IzQByU~gwa zC*ef6H?~ygy$f2qx2#m>9dM1Qdr9wljyY+C34Y~>$f(!m~8!!G;O^ujH03keo8a# zDbI$X>vUG@d~CROw@9y5`m#vSy&M6a^LZ!L9u&K(3$BpcM zfwGu00{}fHQIrXTKV3L3HL8H2MUG6HMmp{`*T%){CP)-H+13b^a=dvFQ-PA$sKkUw z9a>)_#+W<2Pzt6*+^% z1YeYU+^mUFtdui~7>Lb%{!Wz5AS>{s6niE%#mIw6~|3l>Fj&yML5%L(y8c zQc4pG|Bw_~A~PVS9qH+Yk${_-FCn6w>p0g~ZG0P~Q&(oA@}=!Hs+o2Nv)Rbiwyjdg z`r=osHjs8tj)v|h?xtmQPLq(94=QwhQ7O#sXmC5i`8&FszV{}6D4tJg=DiE<<3}O_#yB;Uv=o#E%lp= zEn(V5P~F~2m*ZLO@wD#cTIJzzjRQZ{X-)I04SaD=pl%>YvDgVhzO@R0YGQl!C%0YA z_H{lzHa7M>&Yf_ZzmJnk;WfZ44(hC`^ek!_XD|74*%JO&v9n8KUZ=Z7VlOP%YTIDN z;hoKes9ck=mdt5j#~UP-8`n&a_|Q6KfxnZ!#KKIe#z_wwBFHb-Kh$P%AVW4zDVN5Y z-Ws(!ou%jr>AVEaSb@yXVa>IYgOrdWKSm;b$FlV^(<8M*4m_j2%wHyaPe!iQ9P-#& z^m35Kym=;r+dG(8L@9IA{4uRVbu>JpdehcB95{0TsZZxxBf*X-auWG(f~Q}ony#-{ejciGj=5{&sH za+OAhf|mg5zrh`oa$1mlPp9`!PamOEf4_N74O*AF-k=X{`yj|SKwIyRkZNs25|h`@ zRO)UdellNG@xvX8vg7lPy=d4bPI)g4Q-1f;4v;L;(REAMT#Mu7W#G;&!)Is8ep+a~ zo1T#G+C~N5{2GeZID*$oOM{Uo?qyr=)r@q;tU$nDvDE^eH`%9_xaF5)y6W=rCOGvs z1PpNdCiG&?gbd{SX#KoyTi!E9E3=HA7%=8{k0Gd+D8BhwQA__rPI~%-USC1qFhjJQ zEFfeHY|Glbe1dRia3+o%N)=c%zM)HuGwVgrfgc_?)pq}iTxagLgy{>*dbyBbnpaUHX2?bh#GFE4XpiZ+c7Od-4TR36_MO|$-lNaY z{Aij(K%M&cf(ZS;of1TT?5JWVn#Fpn@~-X@AAh` z79|Akru?WuC4`WL{^(!k6T0I8@B&9X^d%u|Fx^-UFRH9tk9z|$+tPfJASi8iQf^^} z{%FX4{EZof;o2(v-SoBm_&V{WB;UNFn?Yz_cO6Np5@^;2!~9+kUj_~^Wcz=7Zh~ZK z3TSTPdZh#NKgQQ7QzN5RZtom0yd$B?QmA*Qt2(HHtB{X_c0T~PQzOTIe^L)QIuj99L;q*uAhP7l30adN>+*`%oAVHeFF$tu zxlO7aQ9RUP{236=@)rA1L+opMTi{xY>RO}zfU<#>n?=iaBmVv3<{CBp(NlZQ_EnrN z=cf$PC+tY{pRqtq%+QP0k&d~^lnv&76wBJ(Em`-0jMh{Z4Y8CiAI12EO*dcdxI znAMnUNulh0cKQVRa;g$&Kf%^BcGJXAOC=(88i4d3eMAIrt^=uXjen+huN_7+>ZOp#*To&6WgI5g_JeYDrpCIpX1rX!vL(M zEE_|vAI#px^B-bG{?<<*0BW3j)w0XmxEjc)H@TY0bi(Q3z%p3R6@PA+O^brl*zFfT zj1At6UxfXsrwf;*sE7}!zqonbzwJ-NChBsgPWiLzKRF$Dy%V-sJW1<@mts-aO|4nI zhi5w%(U!QAqtpFH(ZU7Y>{U%(x)~Mh4m(48;G?0Mi~EM<`{HQP83svP^6Ls$x}we2 znB*&VkfbEDD!>}NtPP$*L%xWSqUNhGO$YoosFNqD1wKpak;9$pqDfff7LJY$*P}ny zIh=z#`nm8?5>gK3DA8`veQ@Tsze{?&L^Ft8d&x72i4D-E{t%6z(z??3eq48{SdaI@ zjMf*QsPzQm*k^BC%R-%cV$Ebqk1q!I_v)c|cL-2xkf}$kKulVf(F&uM5Yxr+#5*YN zr>H%HQi<2r5yLI(#Qc#NVJ}xB;GSWP-ti0D%m&fQIvC-dEGd$~?bBoMIEgKPQx$VL zxNGPF;Bp6 zEvY;N`LLtR(P4QGBlInW>Hf@V@PY%2(<(oW8Li@~>K=2Wwx!-&K!u;#_aq^{h zc^2<^i*H?*nwxWy2Ny$r*X7`D^j>!lp8l7#3w*5Q^#Whpbbxvu!tQKxtHYB{&E2Ip ze!F=_w(bZFZr9ay!t4(8-GUh~y9?5}x|}IL;+jm(#1J*M4WL*$b=dyjn1gqxd5m*3 z8~fPqLms);yL6Bg3A|OX6M=Bx)S(JDXTQ-x%);j}XGe`YPVDGF(YNZO0aJdRXa^;- zXSNTd_IxQIRVQsyq3a1TiDFZbUifDCDq^s&3aK!~VNk!7M?maANjJntdd}dA6g*Mb z=Nc*tm(0)+hFumUB3W6Vr9u>FX;0$&tM^dVPeT_*TLE>_`|6$~EP_78O9b0HNNmzX z4UO*)bi>U!)^pleK@Hi6dQEHpizO54&xA7!8>zGrjA=XbxdCg0{>@&IpGA*SQ> z?i4QQi8{HiZfZje;>>g5SK%*P>4A%MdCB+N^KoYFy`88~Wb|1|9L}g8#{1@v zb0i6^4nGGBFh68bGKGnmWZwdFMB_SR9ehReyUXpM;@dB%D}hR5R&&sXR+0T4IPDY= zB|9oogdeo|!aW3-eGByNP6CoYq3G|E2-_q^XA_Po?*wErJCWqTToVVU%E0R$CliQr zWInl}_#U_#PYlT&nC@cIAZbNRlJx|Q0y8O;9?=kak;bb|xPc7~>408LU97m0Miq(% zl9-0$ft~QAr=vNi$cy+EcCP_*=vY$cpkYT zhtJOQ;DN0(Vx{gluBNf#w8F|>TkMqv7OXPv-O z(l9lOPQgmv&aBlv%lGm7IY;P71qeDZ3Dz4f(Yf4z&P=6=9~|xF(JRibx@S0j)agaG zfs51s+Ras9v<%G+LN?N!7s?mXXXsHvqsH!->`S(Nemfu7)vrti1XxMHSw+gyzPQoz z$f+n!6rvX8|D|k6CCib(URi+oIc>_nlScb@T~-I1uMxo{5lFwu%MXq!C$FlDhIE4M z8~=Y+?f>b_tT-ZDn_&R}Y?%W95dOb+X8yJi|EVAHe*LWd`gt_XEt;%)hRNgcdwq`o9c6GBE}66(5q(gq zy}b z+=uLbEbJOl64n>na! z!lp~dc19C}?ALafb4SLjPVdqI<9peZp?O<&2lilzHe!3>?Ik@~z;#}9*r#jT^QQ&L z^xYAq)NZFHd-icp^YjF$!EYz+bG8g|!3Ud0+LeJI*E416~7rGykL)i$|j{$*W>)W6)iUsQe z$W~LxuK&O?waNFm&7EZ$m>#<<&Tx8h2rV4asb5|KUiFziwLGwba<+V6ThQ+rVg&69 zSDo*iujGcTcqNiYi1af4@5rCn>`Q^>^D(qWL zqCV0ECBKe`9uvC0*$#hZc^Lsxp3eLso<|&yVvQONv*w1o>qYq!CBDeF4~i)4auUV| zxOb#TJAqjtv`*;UC5wHsCC>Cd`7-#00G0f;q)vs*Rv=w&)2H6@I6;9W6eaitbDaT| zx;4qlWvM`YQdCm5ATuDbEZ^Huen_VC8S*-Wjzs!po8?bLxfGB!Q=6&b4Ux2q+ew1u z1~E1qIls~H!;HGvBWw1@cr!(e>K&9R5K}L9~u$~(6IK_+`3Z0(N%oI zM$oI0Xtg96q-khd7i~hWT(DXMlBRiVd_nIsd+ z=eAan137zQ2mdC3b^cg1?Y?52d{snk?_J)Xys|lWx3>N{_fos{JMO(1?kM$~oU31B zBeWQSvmgNyX)A)NeHsYbcx2FxSsRHPRPaps#0+=I6X>B~#?|>4g7r@1qdEqKU>qXs<@Zal z3Ss6D=%FeDn$O}t5qgQkc-)*Du_YwFM(>W3jSn@z0tF$`D{4bjYmlf^ zY}zF{t#wskWm_ptWM|LUmLM|`mHA|9lm`{#p-Z+162YjP6b6UtRjqcU+Nj|a<(lC& zaA&{zm&{by?18Opk?p8&^rJke_E?I&Ah?nz^(!?l{3g>RSu;D8#PqE)EU)if!^~hU zx7XpnOnBTt;LU8IHe_ZaT_BU~T${|mtk#RT)fx!DmHj};D0Gb^oY2Gp$nF-DQ?Vt9 zQi1+3dz~E-t8`i(YJ2qpECjMQ&H(r!#1zI(0HH>up7CnweVR_|h$$Lal96sp`BJ}9 zieVIB08th){CZ4*WTQ4Pfa~|4@PK;G z8B0|ZkQQ>F+E3FM=h=2tVaqU&e&4+em z{OngH_lV5G#%mfCq*2c#Qq{lSMp!H4EZ0}!e=`pr2x5<52#F#UYxV=AhX8J`Z~ZlJ zZZJkOZPt!3S0L~wS#2zWorC&sX5&;){MHKay^iv=P5a&y;7puNG703+T}$k!|5}Q= zBq%H|a0;iNX|-oRth~9&M(D+ffsY6C*Sl>i?2oExxsh=WmLI(UH~M#-jw6oxUFv$_ zWJchHx`~`2+a&IMfA2hQH&+!~5JYiM731;3v4?|?7Z1m`dY>u?Aut#WTAOtJz==~v zhCs&hRj>KTFi`InfU@gyAw&M+d9CPLFNwy+x zZv-h&3qVR#5yMTqdJ@0IVh?w~Fj0Xi zEb9h9|JjeC=zY&VjyWo8zCc>J3?Yt^MxHd`4lgoareGT*#i|L5$EmSe z)`Q3&#{a0DmpNEB#Rt0q=tZgBKCtfJ12h9Cc0ee|Wt&LMHpy@#fQ26KNYGah=(JK_ z{h3-Sx*NHbSx_`LRCNegw>m<9zBs$o<;V$xMNpg2$|2!=#rKprsOyP6wq@iy`Z*qFa5Q$+FniD1*9P$hHx zf~Vw<@{RSUlLrCJqiIlNQfW{ju$|x#pq{3E3 zf>uq1ZcSS&D}t9k0B?!&^Wa%IcJ&1FtduW9Y(9sG|MaS)EjRS5QoW9O%CcOH@B-?3 zI|U;QKuasc|4?I1QVHGn%o~5V;Ny;*^HUrh4m;)&F1IL1%r}mKdZxaEE z8^U<-^ctK$3Oe|hpKVKK^SAfAjrq;SL(TEUsIG%Cxg@MGx42@aOZf>f&l}F2`)s1_3^=+5V!$Vonh#3RO9fUBno&gIDVl6w zc?~2Sz_-EsTYMiipDrpgVHA|ikAq~e^o1mmXc+=Be3}GgJOT|2#|5#F62eN$Zg>x6 z>8~Q5J)jWjwbN}|^)X^4zpEBm-Xd6JEs$J+R0$&8JVK{YX1l6S@+{Z&VCd<>f`MKt zD+(^krYFD87xw=IFR71})m6se>E%Ap{jl=zU*x6ffB0SfSm#XUc0EhXY1DRnIg;CDHE@SpUjx!xX^NgbHw4#1imjNUES-yDz;TGVB zm9rOZi;g3dIE}t=p3#b3>S0a^ZGH#cIHH|#Tu(lX&Vfd5+E!=^&q{9V$-%Wqn;#YY{9~BXQeTwBy++`!I|91nfe%sH z$hzIA9Ff!5WhEBq8$j^Td{gb6CjfVQy=}C%&b@9e;R7d2bsSd8V19#MVZ%6SB~Qo_ zYVK!g!o~_Hl-{W5%v9vLnCeKSikh@X*Nr%H-nRM%R*8u}w0v~0-%&_=BtISTH3ek| z&7_pkpp@qteM4C9;58E-%am z^`2r^#Zt$$tTq*UwZnd{Hd(b6owvL99}2e{E~PRq@k)prjFJ4qaNJONbIjsG4hXM{Q0&dOJ(k&{KVhy=VU|$5 zssRpw(v}fOIH2e>^Iy+9*M_dFEbSOZ99$e6mQ6WVS656nM6Ws3U~?diWQ+8+=*H)z zmv+D3S}<0na22$L+c$gl@QH1p=BkCPQZRihl+usXj<96Fa$F9AqR33=oW>9-*v#mc zpTDO2!s{p;A%ZSZYMLj1GZn9-?e>~DD+aNY`5)98$mWNf5l9;0&+ntv9n*bXzg3~n zUhn8-o&Q)@)NRC*r-2_1?N8i(hJSaxJMPl(YH0l}7$oBU@_|>!E6+sumiI`^PwIy% zh$sOO-ZHK>9ENckh+qoe1||z*P(BXa(WS{xUp^q6N)btHzmA6-+C{TPTBMWEmSG#%R$7sbe zK-AVy33y$*$S|pj)P(Wik6;F(MRn%>XWmZ|UF^%G9wnj$;SYJWK zXmsKzGFT!+iYqE}qv14mA6T2#$no}|n5A^US1z3rl58otpsxZ7csnn`G!S_hYt^Ou ztuV&~9cu;TG?q?jcWLA5MOYY-{GfOljmUk*Y6?)kG>CRj5 zBF8j>@hHE`;3X)ypATfc2LZT+gm}BFi|M2-?G+zi5eR$^K1xMlRiur>9M1dO&W88sB zrq#ipJPaID1PLpKw0)TEbBAX65JKw;#9}IQEj#BrKR(84Q1Ya-wWvJQpa$&PyQP zbyw3Aqb|b1hW+1PA2+OnEYu+|_(?9TyVOHox>-TWMV5;M>lOl9W4(-n+4jjAsClN& zmPXZ1~d_rh1eK{qTc87n}FRe^}v=D+s=yyrkCM z{sL1;o8COGtE+!%v1$ghGXyhRtAeqJMIVVH71f3A?pC7pCquB`Sp{8V@EzhY5dqFz zQ2_BZjl}9415=q8o>~2h3eYxY8!6FZoDFJ^l~aTR4-Q@`Y6a4)c3|Px!Zw`=Talfa z-0~Kq3NR8lPi-!u)6%Ak*pGTX4XHknXSa=AthFoenM3vYv=mXk0&M0f^=5@Uq@QU#(q7;=F|IBu-Zyy(k}+_9i9m{5g$^H7 zrMMcyAZaefC;3nrCy6!#k_A~+P2J2wf#T?HZgy^7*r_LwO$Fe~8X2ZYp0R;tp5yVJ zvIQ%}gi#s|`MPE?3iZbkm4TCVV#+iar2gRH#|p_}U;0Z+8Q8LBUn7TiVrVN)6E#I= zv%fKUQGtt`=I;mY$Pm7{A*X6PBe^XwuR%%RH_>UTcSk@&MQ#Gcimoirdig+@YoNs^khZm42M!D z5GX&Xw9y18{5|NofAF0`((Ks8^@+3JvEy>acox|?joSPoMSMyFNg2P9ph?2{m`Tdu zt?jd~ymN@JzJ{EtuN1vA9U5m}VhfP1nI6Bh?S=rgL^xa(b)rq(m9D;T?p%)-tXzd` zMJpP=X;xzf$QoJigGsUJ?kv%LUVk%>;V~CL10caS4GI}p$V6FT{BImH#8Re``>>ED;fi0qw^KYq@xL9m zd-Cl)H!NmG^fjWgZeN43A6vV;OAS&5U7>sUkL4J6fl6Cf)|`;5SHsud(tWEpT%*u+ z-VTOQC69q>$nTlRUxbgmgJu}~$11YXQ6FzFVXu3mTnLj0T!MnEl1Bz(n+|wdFsla>qN4mLQH#~oA zOP=XiX7?2a3Tfm`*ekHR`pGnv<23D?T(W8l>>^V7lbxR9naV20vsB~gQcms@K0vfb zUPidlwcm|I#;QSAj~mzyE5~go#ty_wR;9GUe4)k=7wd_<5{*3%P)0D~${=z%Xg^S9 zpi(ao({PfJ+_r4Khk^0^&w*XR=5ArSl$+H+w}i_gC%4((k%u0*P0B233fJ9EYaOB4 zyYx}*0Tf)(T+9T8;z?a5be9FI?b^ALGK!_U5y3mV1oPqP@_#9iqlBfB0A`gC+7_6* zia^ELpxrCkfHrtYzk>CBT_9W%C+ZGU3h`G>bfQHK#}Z#1?(izetF}m(21)l4?};EHs^j) zgX%WN6EIrP=3NuHikZlOd-VEJWnZP@xedW_(*`T#(x(P?DVf9Ugy6-2kJF3m7A|bf z(!HJ8Vi%LZSB8SBOG4Ax8x0%h7`z?9VMB^HYY=1zUVEU+pYIi*LypN3f;gVDjTn?D z7RU**xHeryKB&`IHzp_8VHRny%-zlb)(?@uafL@f>Va<9o}kZHQA)Z)GPN=JVQW?9 zo1*9VkltI%^&+{fn7Iu_cohWq9Q0KnA1Vu7Dk`>n&K)^5L)DhLwxV!yJbR)qM&a*q3DrpsxP;PZ1@bX|wfLVN6!`xPsVtPVR8Filn6UrST%>=S zQ2&5k4xWE!QN}Jd|DP(?cDuV=>5L~5cSTa}hb)++gpe!}48W$5|JN1JUe$l0T)D$w z|0k4-v~PdH8&@_r!5K-SV3{ViTn`E}Nh3saI0DUNA}RhBehrcSk6q4j8ytD1}t;8DMQt8G)Yq?I76XnhDMnp>%@yT zG2!d;@nUSv-p|Lk(Wp~ECiLLdsq}SsJys7rew=hh@N&l5#Lqa^fGYGyUEtU3(j)O& zNYHP;x$wdh>sIk?}#-G+&hvjfD+#=S>@(=bV?;MR`bbLf+qd(6p8ioVjC+gh%v$Hl2R;b)VjV`Bo~-2YmM8YLKucAH()sL{4_l`xqZnt)T#-XW4N@nn_19 z1$Q3S)mE-)cca1t1f-u;#Je}efK_A&%OcO!k~&l`l-{SZ^L{v#C1Gt}@|7*&EzO%X z7R?4?#LycM5Qjm$J^Lw3wIqy_O6#zuId(^r;}bTY-@%ba>TUy0vBX}ZL z%S`M_3*{ne3)v6WsQ7&Ryy{lk~F4kd;@b^U=;z1q)>L1iE zL1_eQR?xDGt24al3aUU^$AncScboLMd+uOL8rgX4$jtN{O_9N`wb_S4tR*&^?CU0& zn@|)dpqVai)DSrL79-BKLx-;8oUWnQay^R?ONmVsOHm!&x?ZJFTUp~l6A@~dRP04i zG_^|?**)|IE$Wwmny!&T>Hr#JS$Al z5d1|L84ySc*)j#UrwscB+GQ@ui%lp^d4L2GGGM~Mrf7-LEQkDwF2s#D4-syQaJL6H z#&Yl}`3cjV-QHY^Mjj^JAQJ;Kg;Dy20oK5X0RnXVzPt`|aL$fJxoSHsy;f~G=KE2a zCH{1k$y;GR{@xt_;pVGIiCZ`Y{U=lpu>7JIY|ZgYC;=pCDPqs0qb}DPBIGM2L=Azz zyg&G? z5wS92oAw4d(~Neo&x`_~_ULd?C8)EagZ6NR5HKbz&YUq4^Li;tg}5o;I8ik$fn>WN zGe_&~tNwpjEvt-1)|(w<^dmmGE!iQ~w;~)@NQa_r6`S{GhZNZ*1wfjDtf)*na!ey! zy21C(V7>t-KdtuDEQvfR439#6AVQMMV#Dbc_N)J4wO+z>z(X0G&?{4$egLHaE;1TeHW^GtR8HUXB2B^|__UY2uZ0Gm9x>Q% zWc)Od?q5icnjkD!-aOK0m(vHST*F224A4T2AK?%f-Uis<$Z6g4Y^`5`R~<0#m0^Kc z(won{MLcoNU&cCcF8h6qZ;0b{RK2-Uy|k@SF1U^zH+3RKANQugOR2Ef4N$$|Kn9&ziJFfY(u` zsKze<>hyfe3;UIKhu*4dAql+d>7<4ysAmrOA6H9S_^+!~EauXSd^&y6G?jKzZI#~B z488<5l)Uvx{nyoMc7z*{?QCk+bJ`?z?ODDBm~9PL%1WhM8pKn&7I>*hzPxjzC+wU2 z&095j>F!p@fuu zMY<83oszCJH#fmjdh1WBP#w%ZoJBuzGs`a$l>sh@QqI1xn<0he^KTh@(rdc6s`46X z=GDgWxU2EhFYUG|o^@5ff?fM_MRuxqw9{4F=YRj)%v~mm(?1? zGJPl{(CVhjC8xP)Z0xw|92&nh-x_9L-@~_>!fL}kVM_CIPoL`EVp}J#{tm~g9)*P| zO=q2+Jv=EwADMaF?C^PmlrXJe%;{iJ((sj|OFcou+yUriE(sv3Hxa7<7m5**50q#= z@+;lwo0Q(Ct`|AU+S$9;vS#HYsX^CS0ocBsjwr*be_W_&?VD^%3MJ|PH#gaPWVE_OdF!WD1 zeY~)pI5soh2E}d=WrPfD`mTP7r@;;-pl4szdoo?~jp?thcAwM4Af1dxzH>bMHo*~7 ze&WrAH&f&|a;)~(Jd2BDKej%k$Zj-Y3~tT%{E7vKtrY5N+JMis`}sNf%V_nIS1i6>-8X5=!j znHUPb`NYXxsPAQ1aU3cZd(6{)zlWXcbi40uW$a!&&UupT3>O#iEgAwmNh>H>k(hqh^0pPJ59eh-wCSdT+MJ z5F~Ja5CX?Yp9?x;bo)&QFu?A9PZJ)um<7<9`A{TwwqrGVbSk9v#TtgiD%+k1rN29| zT&(vJB|e~CN1wpa8(z#`M2jsic5h5EykiIiEKQ)PHm%+vwg2w|85tGT=j~m(F{8~9 zPr$y%A#4y3weVdeb`xOuO@NSz3!f03mbSP5@Oz@VcR!V(3*Ou|;mrs#fPHZv_f^YF zm-kp%*VtIy%PyXANsa8?Qq`Khn}5(vR?o~8dCYI~8{XaUUJRLhW|1<0N$4;{@K!v+ z{a4U9w18O>t?HVZ*w^%dn03-u&^E4sh#V9;6D<3)MTz%I0vHc%2B?^QT=^5k+u$i0 zG4*9oxJZw90=o)dU8+JiuLw{Z$Xm(eFhABB2eHSEk0LyoErN_NMWrH@n3P^A4WzN@0Tg9v%`ZhA3(eM!Nn$v=9KJYvT#zyD4d8fsdOr?( z|A7ACSV^?7n@+wQ3PuFf(g@H?H6SE{Q)D=aGEmLm>ExTfM{K=mmgh=&CCVnvPkuN1@V3`?zdd!xJ@P*doHzPHvuHT2 zK@n$Q@xT@ZpjkbG9XfZxBS7r{*2zGV=>|Dc!>4{Eg1dk_d3>K6@B-JMq6JL~fV$QI zj(^>94-XeVf4q$NYiM1Mji5T_*8IJ>z!1vJKN{P(`6#@?z_!21Cpph~2)(SIVbidO ziYe?nwCMqP1F?8J!TYW&x3=)7g_bPn=NxTVmd0JCXVA76c)dM`K}k!0(}E!6dKYc1 zuQ5SMUe}z0ZxnB)5NM;in(Pc3{KsG+cWx~5 zH93U&ZhsM*6#33^u%}6Kv2{aTXf@bRP>f?J-GDvXU(;<&r0#@m^#)xs+Oz?T0HO83tO-8$5}v_Ujw+taOx0#D zZZF2tg08$18vasPKf|vA~DQ3XrD$Qdt6cDZRkX@H;PejM4K~K zB&AJm^UCUP1wR~doU-15bb(2^ue=Djiu%Ypy1^860?Cuc>SP6n2HZ1GHWB2uy}>aI z`2}Wp%qJkz=djJQx##X^<5@jRK6h{suumy=c}Hax;*Zm6Wz*wDP2zH5^g{B-;oK&b zYHHbAz|4TI4Q~d65kUipf?FvAJoxqPCk>QfXg?9)8Vm!l4uMe-USp3=X-~N(XlH?= z@+$$~JQoTwvuHGvV<7DE*p!z_MfjyGP_tqRX_PwVfLaCT!n?=?L!DRSp znL*R+-#T!%!Ju6J-8ZAweGejdQwsN{mo7Q}v{zR+kk?7S{@%*4AhC)(DP<^(cE7NY zSi6~9~Z$Pp+3@z8MF66j_F((%^x5Da@~ZUIrHj* z$QJzt8IHq&>S6}10K%Q8XB3c*py!dMBv>5b;;)iup!;q;d4{5uQ%S%xzG@KPlk#BZ;$tJaoci5|LJ%fB{Hm6LnQZ*BMpu7=q*{MYAJRcNdp;&u4K2NKNCZ0JpKH&Q1G z8!?+w()ML)OP>Q&;9v`lAKe+$dAeRIbFzS2R%1;zmPsaLf?MCb=+{YirFM?!89Din zZV%`@T!PSs$Q0Ykr}s_!i`u;F$}y;XDO;b#1d#17@5)7PkUdP%sx`spMQRnS9kadc z3tTHD%XyxF=s9^^0}@6zLx1)GthXQyWXo4MszS9=}!Bu-1T7td=nC36R z^a^tZ+7Wb&_qIFG5y%L?eclJn^zIz@b;GF7>rYM(B9*XV+~f1gYj;aN$b8&2M!ht8%yK}${VRNp~~|9ib)Eu!%A=w7{R4kz@;>Lui@orT%lU!7M}NkVctgihqW zWdLqVuqc$WQy3YstK_5|9U|d{R@|Qx+8}O*_X{~^dKxiWM{7^4J%41xHZf$$O}?!? zt>5OsH@k4igb_KKNF#Xx2gH{N_!_y^d5JLf$>BS&b_$M*p)DE~pCu>WUCrIqXbaW~ zAgNa%T2aF+3zzJN8tl(1PKi}@ORiG3E+L?I7=;px%!JlSDUAh$d$5Z1FaULnQNBFD znxbvmR`c4^$c3H#I=1yB*IR7yqOQw?UTTLi^vq$kcwBK9I>{_)#GqSvWSsW7_$w-n z!JX$8Re`@>2(_uOARtMCio#Vkbi)&Y8`({;;*a3AT?6gJAuukRSdm-j~>NE4B;QN%FKw-f-&CG?pBdH`2 znt#2>rF1n)w68>q8i~BP{Cc;A9+2ehtiVp)jaatZ&OyhgLnL>SWI6Vy?KSCcbyLFW zJ0VvAQ46CKx8r(jbYnu13L`tg#C?d6bN$-VL@=-rdP4xn53wrDJGS{H0?0zgJ^1%H zm~;Fy;B|e;)w9y-8~Ir;nqf&vD`Ew#j<+$W4adRc2r~$?*g)x(2^9~MIe7v}Zod4t z*TsPrwlQq;h*D$U#3;II<8jUC>5SBDUz`GnbsolY`qd{C8a*d`PAW)`h|LgrDIql} zR4wF{n35!*>-coiAkfQd)_9b!<_r=#uXmK8_9_f?a09yRik{D~DF9UpodmuS7?nNrWEz8 zNsOKSh1n%Ds|Oh#{n3W@qcs%KUNbir$lfLAwP@B9r>!ZK4?>!OYIKfhuZFp|X+|NH z?*gi$VUbpBVTtjUy+)z`qrG*RSFBo@RSWmZ`w~#;z!DGu`ci5=9Jlpxq`z~?8L;o81Rw8G z#_DCedx_nHYPaHq@JhGBLrWe>WP~8D;@^6Opk8lvn2y;cxRrZmxSjSgt}Hym<`f;J z9zPTvrKvk|v=wKQzT#7jwUORUo#WFD+9`z^>;aUan4gE=$o@ix4@aUFy zRjM%kkgwcQ=vk&bm;T-|28}2B3o+S7?0s)R4RpMpgC%q(yu4N|Jssz0k$|V7TxdzV z9EoUFLcg(6WK+`l3?gN4-QlVf>_Cd1_NpD^G~;2c?N`}i3CPTRwuHO)oQ+7Dr5T%x z<9U^OZ?E+@vlmac*1!p=F&2;HSc}PdCo{1|jJ|R6M`hCOvgu4i4sZ_UUAr4aTRgK) zl(A|;zq8bbJi3=Nuf+EsD-N!xrk~%dCM-GCGA|SPI;bs|8*Rsq6pZGR+r1SI9QUJC zYPs{4L&2Fl#UZrZm-9mA8`;)95O10Ld-xGyf!SV^L`s5I)4&xY1u&YfI|IL2y4`Nj zqs5IUIerXh^+{*-vicdw@`0<;wYbAQFluJpJ?@MHZWAAbhxd7r_Sd9bIm8`yFs#X5NfdWjL(+AK2eVtF?F1o=z$b42 z2>BBXDMR&_ARVH=Q}P*4e`EMyLq1qR9l;aD^hF$|f;@1yYuIO}qOx_&VIqrOx&@L9 zKh$=n^v7Tg4oqu5K}n2paK{$WGI?M>uw#$m2lLs#l4IGNbTO0AQUsal${)ILj&RUHFMC*n0_aS|k1jbXDjZ_0wJuHU<9Mrml~ip8?sKU6yJ++1nZ)Ig zXec^V>SY5K8_`=$(@10z!XynZdZZVfaY~0cLz9;Uwf(x(c;Yy!^?H5{sL>Ryf(hJ4 zf5s|}hUxBPl$kcJB$_uZ(=uO9i5(6nO#ukq5MFvx+y^x^P?Z!4^pV&pzsPly%vhHH z7JqX=_e*X=&${C%?84GdHnwDGhkX^todMk93dK9JusJNO-w!ci0VAdqlsja`r7jLd7hWBb5YR{K$g17(9 zjdd6!hLXyQj*7dw;%02g(;g1WIC*xI%Yd8h%b~@kf!L&ZSc4a{KiW@ct`I0`m2$2M0sIpC@9rCulhWA{J%3Cz!HJURe|16zle~>*xf#!C!ex`Jc2HIZUj($WQ&yL=AsAw7{3( z`;BZlk-^Ds=Pt+t=G*2va~-80{J>et*(HCw7pGiR5KaMVrZey zSh5j+vuzk#mg@jYaYDcw5>7h8AFXXTI7((WXs@MD?kd4PuHpHzMnuuW>%r_qAa`MN zCndlc4l&W?tDRjv{O)QO4Jeq_C=7X}P)-Lh*%!B(DGQ-&Ih!n@^_eDL-t8R5g7_T0 zlKuGg1ip}kkr>%zaE+5Z9`-%+B~Hj^ow=p8v8Nh9YCa6q8Jq{UnNN2_9~YbBvWp3V7Gt+k8LzHuyo;Gus47k=?b* z{-k@-_V}}N6Cp0?Re;22uyn?_3j%ZaNHNZ48Ou)=(>jdL8`9HsijZajIE7*z33mQh zxOf?3kd1}Hc_fi3H@FQ-2EVmsxQeOW&X+`sLH=Wlp5{fR9y(==l9@lLZF6GCUYE)n zA;*bOQjGGr-hz%P=l&lOEj^1nGJ|+!1vy1ORrbe2LwiL3R&IFjIY?ONfY7#1f?z)P z+(o?+81)qY^Ryet;ss!b@qqmi7OSfnMf6>5*PIk)IRsU0x~DS`K>n6a;@%Uw>|R>v z8e)v__@#+LPy#|!)E6MO0_zLv*Ls&i=wBg0(NfIla-H-FMl2>nM*>L0S3`fH+z{okBYY$vc6` zH^)^0VvliblY^M@lObH;%0?9GN#sF~x_EEM9Eih0s_F{bsR}lYv24#ygT{vJlAJHa z`UB&GCz_Pzu4_ePBTl?GLvSBOn%@%^xmk03_xhAgIIy zB%<6D3(T&zK8Qa)5Jx8&XzOo%39o0e9_qtV3sgYaRaOLpyQ#+*a=NpyETCW_5(yR_ z6Pu}j^arMAlyUYSM0DyKMU*WzBM(O%@IW9HrZ(04mc-s8LCAAdyO};Yb6ADs=191a zu;RN%T9{dG5pXVry4n6n+lja}IzQnIs<-z}hd8q01UngGgjnpaN5p2&RXCtQBM8x` z5lWMU8=v)Ji6@w>e$CKaTu7=WJ!I=QIz$&MEcwDe#xBxGD&t8ugU!4{!N~k15fn<; z9exBeis~?hs!6YqnyMNmAbYi6d;_>|@C#JR`DBh{%%7#v~RsMyq3McBLk*z$40sK6jm$3(BbYy)2moh z1v_;5lDm8bYgGS$T=&toEYMyZ5dS@We{LZ6LUt3n4o0oTxvJm&NY2HOf$|Nt6#i6G zYw0ts132&^QQ0xDHT2C8VRZnlH0HS$fxs+Njt7dr1*mR4mEu#%c{3%MAAMmgZmuYjLOOPDxE zURM&5%4QC(tsaL+*YGU2oF25!iw~z}(KV(nZ9dgB;7B1qaZuW;3KHX9Zp6IZv~ZQZ zdgg@JWqUjxFK?F%L@6`StOkFk;lXM3c80(N@xs!uvTvVKN72c$Z?s5yJGq$~-ai=wNY>78Wk zZ9d(DVf&EWg#vNlVwvuu%7uSkVeiYL1@3a!cljjyb~N}Ftg+LVqj^E)G>7PeH3uND z#k%8fBWcHz*eL>;r&E<;*t7i)jn=ewY51$&I`MZr9?@#waX>ua+RigWhj@5c@=4rGT=(i4HoCb_FBsC<)un9 zOu%YsIp2~IR2YwLkG3nYzZ)xUPtX~RbZ1~E(x%>C$)Dw8>~zy;vL8%rr4KQo?D0?C zt$~kKgT;>Ed#r~`pfLi|W_FoOm>_I`sW??^i>sRhONP%-N|dN2yeZ2s^W_^*lV`=< z4GO3um5R1vA$%XMT_1(T^iGOk14bTZhIv5W$(?6JCxkb9 zX08oSngOp+I~%N(SYs+IMQ6OKAzfHkszgZ4J&#A4f7ggss8kl{NY@A+tSD0y=+aHe z&lXs44=1e=@t2zo=+565RQk~gwjXXI)cjmM_0ciyT?}S|zx}2$G-=`-2z0zsyrigr zzLT!PYG&Z0?I2NBqSLacSiN&oS6nh*j;3E;fosg%6E>e-ZfpH+o7+&lZ!-)*FR!k( zq%>5X%yM^Uu?DD7KwFcHk;$>UFOgOhTy$8aG9QQ5I_cdbbfOrt>V+?f4pd<{o)=A^ z%UQh2hn$^U@$Ot}AYSu}jjJqvfX?7{WrzAa+l)+R^8DMCQevLaqsH`6qxr}W@@%6u z9qs~xa_6MSe zLErdYnx-Y#Ht~wNLK}Aj@g`Fs1{7+GJs0-{MXiA%RA$^9_(bh`1FSczUCanp_STq7 zq5MY;Mi6~lQv`cx6MU6tnpAO`5sK}s=O*AX#E?7oj1W?v@tge-1zQ0x^-^$L!b(64 zPT5fetVHb+UOVBj%>0jXmzEc`$Rv#mr>h-u@d zaSjrZkYFh3PN6e1sG6;f2Vy}Q@uJpNm)^se@_O;O*TUy%gfb4tTSxY^nmSD9+c7m4CZH#I!n+jewMoU~lql?6muK2`~ z&D3Q3=xRheHfFPnP!dGZKwX#fZ6d!eb?Yn_l!y5>Y8F#yry4>)1blY*uJj2H4#-9L zuzksfbOEImy=y^(RH!_y5FEUxz;z`=L;#%*eFj;ml%9VOoHo=~K7&b*1JG=3K18GT z9&Xx>$|VIstEN@@NJ88h0nSPO%w0Ve!YWlpl3mg04pM@L^I@RxaKgpjYGl#iGAfhs zc!(tzWT0?nAb_)BBg^5rf~Y`b1r4Q!7;wk4`nO`z_AcR2UkQGcrt+H^14C@Q+1N8W zOgp*uTLlOUsFPa);N5^yNle*uL5NyAL5Ofh9P!p*d*-5|MJkQ>W3KDSalULZC+iX+ z)uK9)nwUh#yPEq*Z!&v_OaOL)Q2U7AT8%~HlGRxoy4n+^$Pd0ZBuJzqAk+TVnheb6 zD2}HhP7dAYD|EOHr!^myefyxv1vAD{qRs6Z4Eza1L-q@}-Jv<0OVN;f zxwM+s>dL95+=U(C=TUx>onu4ree$aNJAY?&4+8dYNocmrq4p>x{?}oF_RDSOA86c? zzi1!3l_vz6kH8CV!&aq;QYh{60#dC)OQWU|lrRf$>DDGRD0oiO>-ePwF>I*qj$inh zR$x=r8R3qIf)bc1Hi>^0iu;8^z#%5&rovv!K@3_4@iKGCj*~}$p@&`dcY;C%p@F5; zLo66(Lf@lq8`q;e!gYV21c{okG*Z%IgLr2?&w0?qpP;r5*;}xn5QCjCE__+;%E#$6 z(`zvbQMKqXDHvH07Iv-Bj?^T7L88w|Bt-vE+5h%%06?8GC5K>%vRVE14k~A(3%Iln!4~g|nV+X|R0mIQTfy;$c9v)+DjL$2p@&UUZ$?T%IQ< z9dJJ#_ANHX&NgX{j3Ys)z`4PUBXFjqmfrz*tFr2D$g0efho}J*uZ&!QwUnb^$Lcd; z%uzd`q)@>cuHrdV(%(}@N?;QUtqkiI`4A`yZRk}(Ctt9{RRCiLm9rg7L+@j>?sWpF z$;l5)lhtz`I1NZ_KLP=)LEuaYpa}#qY7(AN8gt{tQ}P1&eAD@?z`h=O8A9u!uh*U zTYn}tHA^Hff0Mjap=73|ZYn3-n$l1f2K}iAH+OXm?_EcDAEQraB&b;0rH>AvOYF`0 z)t`n@qDj;UKyg$wgNz4&Jy^sX%uia@>jQ*)J^Q)0#R_m_wxILCVlaKp4b=hsjYDno z=Bx!3pwJ#lCZV(usKzf7UD+A(GiMVOJaIcjkypuTfCeW_Je$(IQ`xhVSgE}Bw9Iw- zTOAQlkFy{Di-wT)sKAnmDk~Hd)~+LLgbbT@!MrfH^BSRCqXNzr1%(c>!?p7b8pwuL z^XwWv9A1<$377>*DPVfO{Q)PXz}I8gF~sG)xjtDnT|k>nFme$<^*AAUssrhqd!{FjT5q*6)oVb+CfS zX_dG26=Ui!zZYL~mK=YmAe^^VAw%4#KcfJtxA81^2V*)n5Z;qWQj)xpX`bDQTdD_vMP-ziBo#q2H)|IZ zRoeuD87?1tatd~-H8BB;-nLkhI6*%d8o4M>B3nEp^zEt!>5NYuGM2N0QPPYrwK7dK z%6|h&*=34I!{&@UGsf{Ps$Wh8=Okf6iVe1#X48Y2R6plC?GCAsLcH(MKml?b5>WzN zT6Wn5v)Qi+w2%Cda-U6}XGh2$lW9{CvZ8CFG>Y##!w%X4HENcX1ybS`&*<+WZ;WGBRE@W&Q;W*-wHo~?6GQ(G=HLswxEE~cq zL%e!i+Re`K6MeLXfDVkPdzzlSRB_cZ_12M2%6UL%Y1vIrOFy@7Hg)jcIe$zQ`hzv4 zf~l|6QGW2VEvF)^Z=?)_ts9A9Fi2MfIIDhSV|$S|6I}RKz!0d7<5@#-P{0*Tz&TAYJ;m1)?o@s5APZDdXP+{AD9&Dor%2Z+D$pkrJ+v;Yp?W5i^B#iCND zfxU^a%2(H@@3~kbJGgJi?!i#Dyh0=wTR30(7;FrO*NA#&v7A6X?S?-xsFJtNK>0mB zC30YQe|y19lo4n8^F2(H-l%WRZZ^|u;r{53dE$dj7>XRZYxPZMtzFIn90tQ34GM0n zU>Rl>`u=Ix`2A(9S8>o#qh=(JSF|=#Rh2P0s{BC!U<%qp_3Sk`+Bw1#Ioc1H@{R@V zv4-79S&J=L)8-Ur6s6-qB+P!YH;DDrp{PFU=pE)Xi9XB?N=1VhV^)t${jV4mg6ccC zeFpXvkax-8UP;LfBu&S{LbShXh4V*-i4EsE$xd(`Pd*Zk=YA-pRlS97BXM`JH|#ro zb$i?;Nq5Wo7vQ?j50gm zyw87Clv2{?|K<@`kJdk_;b*Gk-{x(<2h^)yu^~~qx^nscbNlw}=k4vqd&`LE<8x9` zZW_)UVANVlXra!fBadV0yK2qO<;UPx?C25aD4ej7TR#DWgVZszebl4WgLvReMMkr}|tJZPXNX;zY*ddMR~g zc!?sz@w!`(%d?_2XToZPp*?=@*>ap0y*dhd4XG#N2xnpZYWM!{tFnDn_=+T@siUD! z_|2B7XrFBi%dxvuoyRpp_xZTiL>ecDMXLel_u%9%&BFbG9|hALs3|hS@!IiBYr!wR>h@z z$4l^6XB8`+rnwaUzVK)4lWWvG&Q`%jwP4Y|!Mj&sMShGDJ54=W*M<=!4t4!(p+Hc= zOU^P#Ep5f*!HzM^9+lIpyKC~X7?=DCc1R+ovbDK~byvQi!K4^pqRq$LT@twm0Bo}; z*8`!TMhhcl-Qej(@`rP@nSDzgXaxoi2J%GWoSWz3B-8d9)(d=C$>%a4X;b2Jq>~&q zOxpZ5I}O~f8D@6#%QN8MMQAXV*-ADt%}ovF7CAlp7csL5>+GK9!&PQ^kc=ttn61BWX=Te5GG^5CmnNy;qW8pYzQciXn|8o~#A*eVo3wy%FVx13RpIqhc= z|E38?1{CiBith#tt7C+tOB`*hH<~aY5pVd4K*TeRGrf$dEC85=$o_hFB-sb6AlDDP z3@Itla3F=eedrSQ_v$MbXx}AEq&ZI^91~!sh@}Dp7~Hl62*n{$j2>8XHV;+>3!ujc zAshgTnNFx?*O&W>KU9&c5)*PI>uO1-R}0a2(H|>}q&g-?w+YJ&Vv`j@24r;eRU`Kh zL2u@V5#*~s*p@h*{$|Hqun0> zz*PK)uM4uf|LhZ3j+gZf2ttLum@0H^4-X3&<%Fw|(jdf+G`f}X(D-wU{?q^(n8%*3 zlb+F&5l0Y0Gg`p{mt`v31W{kz+ z$v55JkG9Y;b)V|PkM=|4QBU0nzBPuN&3>z|3qBC4wvcxuW*ebJD;9A&57b$>ab0_{ zBUxPn)`FbGsu*k#v(j%#73fh`jGV8=ATj*Co=uIi0^l}dPzF1^i#B%F4Tziuet@5Q zFp7yyjb7`7NLc8oRW)?zl>=`C+SSdbTBmN(pF0C31DHq;H$qZtjfC2Hru+FgL&-9< zn|atyT)OHm4&Bzu`iZoyL9EGS3Z%W9fA>q+buX2RszI89UV(_RBBLpyoEY88e#h4f z8l0lBc2bJnmL1L>>&Rfkh`OWSguSL;jq&hEZJ`KcX&8R;L~bdX#_8iu@6ks#`^HGb zx$k6T7aeof3E4M^L*djoC~w%y_mIas5(KV!s8QxoBzUx|?g2>$lAh z9I(rdz=8J_X7igyT^9K(hF>0H68eU+x0n!?#jN7AZf{HXS7bAIiq)UwmmXX4hdM5K zL)Dj%Ll=uUE(5Ke##f<-!e`5r^(cb<4zJD|ZOJ+z-E`BXz68OYHY%XFhY_7lfuFEl zdMi&cCO;9rgkAm5noo<5j)|@3U%kL{|IG+)pEmTDPLWsUT!G-1Hg%xReM8ruWK;%4 zxHPtVU2G2~t<4+I5L_+GE8SSFrd~?K11*d3rkYYmpK-~P0?-16nw0{970w5AJ-K#o zN8d6{LoRO`JNk4BUt3rJN%BqG2sjk>^nww}ak?@B4UchrBtbm+#UmW8^B~XMP9GQ6e{iZZ8TPi;ex=J9-}Ole$5)# zd$4AcmzG$hCKYoYqu4-@rhfEMs2OSUHq8~Z+zl1U%9?k_<6()(c@asjzrJfej)-9v zrsHNYO(FoT`rG9X|CAtk2^9J--OVXzc>U@e@3o-$v&D51ks}MqI$~M$Tqfe+x_;Y^ z@@hGLtdpX+|L++9G|<;kglLDpi3w>dI&Q_4tX&%N^lTK>GPt<@F|H%RTx4n=&Rf4o z({$`TCyBCfonB9~rGh-Esa8id!d8?d$N*3x=tHeE0$aenDs~f+6$W}%6UQLjNgH9& zSTzTfR+P=bqs#u^+2I}PL0%j49dPjbPL1#e;X_M5ou361@WaqdnBMlgmYGA-BO_2r z%BrM|!W)oumbqBwiN;qf-dhJW?n=X{QazD!UFcq%aml6)xu^1nd?cW0a%b~v5gfNg z+${Phi0?Y+;&{-_Hf+?p4j8nD-3}RAFBBozSy{+9Cx(2B>ZmN&kfIS>!ggysD( zxsG!isWF572-I@F-UEp~W*WHC=!N!Qa^$ZOu*=g@#9%3vJobl>MFi)9kS7|F`Zg5F znJ#l1f`FE6CGQ}J;Prl$v2|bzzjI|sOA_$asqfPpXjVTxJ?dDgfnS~5?$I^mP~1^J za@pzBzkY(#!Rh7=FzAQ+E+P}E%n$63e#1=^PzMg%22ykoW&<1KZ}2L)DU$lSmZmy{qB8?^oD{sAS-$%B$E z83jf2)%SlUulaXf7sh{1Uh_xO^+(h7N7MC3)AdKw^+(h7N7MC3)AdKw^+(h7N7MC3 z)AdKw^+(h7N7MC3)AdKw^+(h7N7MC3)AdKw^+(h7N7MC3)AdKw^+(h7|6kLksi>i3 zubWKf2?zkt3-qPx`U+0TxvQGn2s&BO(9_b>GBD5@nL9esnA@1x((x-RiODJ`(mJ_0 zS;tE&XfnWzJZ0bFH~|Qxx+uGtkD`PKFp8rud(4bCgyp-0>o)wLAlna2V zxsjcHHt40rt^P3d5KMmtUQPXTJifoC7Im>-5 z#+Y*|I`w_5Y{|lO9nDl74Cjy+LWu&~RfH?S^^u~*X$SSCSci7G0o~VQgNq}*tSXLO zVf{%zz*PhwVGKD@y&m|J=|Yk>(0pf zmM1naIJrj4@ML+-SrTWImGtM`&wViXPx01yE4|8@1G#07T zU0651=$8}}i;W$8bk_2T$>WcGX>E&#}7I@QNEO;_z3d^qOA0J&Xt1e0}Ez-dRn+y7+y^Z^)Y0{r$8(qD* zgq#`=zPItbwL`Az89y~seisljwmsE*S&l9!JDcqg)ih+-P9f@skxL)Ov33Liby_`c1euVre*)4n1#C3{S?Xa+rW&`v6jvn3}@CnzK zz3#x=MU%0&bZ*C&cPG^=u54mOe!o|36?Jm3l0n8AWup#J>k|cbafPl0a$!op0)P4< z)G{0c^_zaHDq2Gh(9xLu92#sr=O2)o>O}tLaT;s^RzlboIWOb?$B|_k2 z)olcYa%V4&FUXi{ACE1bO1O=;b z^`(I97AxCafhxH;2laf-m(a0~KY>OeH&_QD9b(Mz3bm`+pcOpCT*zX;aPQk2(GP4= z*EvX~+Z=~34Hp1g`E(u3e zY$}u(a{ct+JCNR_DifH{g6uRA)AM&Jes*DKT|$$$+#6i+y|+y{Am?7 zq2h`e{>v*ZrI};J3VR4s!lrv1*vTLu*(j@N zZCtA&o`(5xe=ucOotV=0!1!KBSyF`&{_Q=%h+2{bg)L)dJ@b{&d?ouS=Sfy3UR*o5 zejR2gZItpttDUkiXQLdYXzD@$(pK0cs>X_-a4a~>y)4SjlM87*HuHg=?1o6SLcsLR z<8V+TW3yVD*WFYysrnE|hPq3)ZBMUu)<=EjC5;CB+87WzaJj2toz9vCWzW+~TA9L` z0fkCk>sr^XQ{1SJsH|IhV;8d$K26D>P*+SUaPCoV)A&_ul841Ac{7+4WMcf+O3F z!yeevJ3^*YNa$l%La_m(#to>)aiE8R4 z9Gpd6s`(0Ub&Db?Z}@oqz-XOSiE8IskS#&#Y3|;1-;)bnBv4$cDC1C<%MMA4P04LW zu18jKM#kI;vKAbx5SpQ#YoIy;G zkv;M!fB6u_6KUrW`EZ_SQ0 z+ko1eJj-IlO?gtP)(44B3r@AlR5hL*s&3Pm>mI%i+fj0nAFC%0hM%XlP@*c^w372a zhRlC>xGTGRSCw7<{hGky<554%n_YQ(pTP3*Y!sDnG8XKhUZkqzde&AXaChd^00iLn zYZsiaforkG+>XGz0J_o}Jxe#5EXDhC7q2RFOJ+ygH}hs(^jD5X0p0@i75CMfys?gx ztSlh-yK2|SMMYGW_k`K|$%nY?n`CR$YZvJ3g5unmF=**2w~80}19hsmy;{v|vCnTA z>8c6igDF|rSxxKZye?T;T^?V1xj0Zx@jDUKX=tt-ya)&2-TsILGr8RaT?xk%H>lCe z=~d^vyWoA+kyvu$ke~Ia{muYR8%wwsbk=oaeokMBZ*t$N`DA+~FRPtMlFQZVg6CE0 z5tyLCU&ZIAV;1l}#N*Etxcu?NS+55>>x*J-svZPXa1Ad^?p2;=5H|+^xDRzI7+2*_ zaSVw?v;_Hl=qdJmxfJ1Lr*_F-$?rD-k78Hs>_QZO0fa7~cnb9`QNeMu3MU4AVX(Y* z0^BX6>(*$465={4Ye7z-BFKn|5=0jHG_PXjWJkM2Sd{v-zgKig#GB4!3wP{C^+)n& zk&LO!$I_ThTPEDfAs`78T{Dy%!PqBevr*BwPkBl%m!XgvQwyUAKK%ZD8|OJd{Hz$- zG7hi-J#X9R)o~;TF)DPz*pC)zmMiLG2I>gH|DbV8h=EsZjtSD^oBu2L&XhS_xl!_ASyazncVd9;mrnGt6Df?-(lz%2A99pv^}{;|j@&~Or? zRFX&3h0`p**YDEs))a{Gs?kMO=vyY_O2AJ?v50Qp5~7Hv%~ngMri$SaQL37%r`{i3 zz`H-rR%Jjhs~PlP@hst%UNmUxS{sD69;70xZK`=?W`-A5w+}8Tj!`LjI*(O291kJ4 zua!#rq65H;g(CfoHU~f`%J%x9HH%}4B=kaY zLrO-^h7;^&ZDJ6dNpZrF+^u;cF4owjWE+{S8xx`16~r#FrwwKw zUS6vkO)bWb=ZJXWJoqn_!XTMI;lS)*E@vxU1#o0VNf$FrpUpajA(;}V~y*>-0 zg8=bq4;Ny%=bJ!vlurB&8guhw$P(Im$By*0ODlj>p++D-ufM*HA{KGh9d*d;N3o^8^lS9B5e+ z;8$F_fOh+7xu%$0LXMhTcF^D?j+!l}Gvz=Tr!LiLXZ53-%cR#J@JjsJuVSpM+tpU1 zM%5g)t)~&RtmRaJzb9Gqzbj)WbamwyHBPXXl>LxwqcO7U%M5vGrsFVTNNJ^pcb&;U zLmD>UJCdz0Rn7>8vx8LZL}u=XRu&xRfWTtOpAi2}6r-M6B_i7H%YizRM&6v>DD|#v zm0sw)To5sBH&ZqTDjc-tFnx|_E0Bc;9Snr}+IH1+Oo^{*8B+r_t?DfD#$lH=9OW}% zY4>D|Uyec^1DA^4SDcmut5rp#?~?$XiM*2695N;{_N4b4yVzj+MOgDgW=nF~8xoZ` zqGn3kq6HJErT?~L!{gO!48+ei4ciYz*k_`7+WtBZD|31rMlbg zI!RPgZb;g}(E_M}Tvw=2fno!lh9nB_{pQWSPZ(y@jbm9%Yg&E|>+2S9yqpRqd1i6X z$g*6DawN<{I%bRbYnf5Y!TuYvs5z7=W0DFbCMOcBA2YFuQkk9>3W$M@e2^PZFrc8r znXsednA}~|gx86p2`{wMGovPJh#;86ud3n_1mV9a9K?n>cnSDu-43b|LSPCOquu$T@zH%u(C* z$=EQlg_6s*$cpw{p2=-2M(_W~=Tm}7V4JH~7GS7tOdln{HWBUvHmU0+p_=@$>9CRi z+E`LLJCqY07+d$#9$8KbrLp7`_l?Ab&d9=pBh8`ZZt7L8LIIWeD*YD!XKbZqddXRq z^C>>Sb7R8i}bfsd@!+3QFlCC~>J4 z1@cnn<*A7o$tCH@io<=NzjcG*?VXpQzX}BTwUhnVf;rjR=~@}P7+d`{s--HWo|%-S z9ozdm&&5l6NAYWRBL@Tk0RO-86odt36@;p0C*srj&_njTt3k1+*CVJi!2mfZ@Y!w1 z4~?i?0vqvlyeAD5NYfk=DqpUr6m`3%)KH!H*vSUk+$E8M5T)bAnHaxP?-(7u7SWy6 zkCoqxI-)1Py?TZTDfGLx)}m>fG#6~Qy>Dv8l?~qn^ak2aT^}y6l_7R-e?79ZEOQpu zi=)kcA!fSP*Gz1hurm4}ZR)KxA}C_+<;On^K{(PiIAbo-PWG0p@8EJx+qmwt1BS)% zFddhadFhkZOe9z4{={KUvwoQ=??)Y8b2D-;bmG7HL$r%UO=nR&eYg6N5&KAHc~Zi> zW0gz!G@nls6)!S(wBan!2Lhw2Mr&H8A)iR&b?Su*1K$MvD|B zB$p0LUgZ;(^}SQLsF0;EZ?sx;@Dn7O2pbD4)Yp2{>v~fZ5 zm*#Md{9^xvqJtxX%DfS9ZM3VN9(X2`u1wb|RAPlCBqvY8LLjhREtj7TKPOpPq$TM* zk^q2@B)qE$83`#~%dugAS#RPC`qAG^-_LVc;+A~PIx&7BiY_=l6lXc$0SW=E16y1u zex6TveuAHC>RhrpC+)hwUpS%{<#9l{H-w*6r(dLJyL=hfTo{jj1N6jl`b;_C^$I8_ z2?&G&fbw$<;swtiCcp$2Njr2Ocvb+DaBK)6Qv;SY8?A%R_oxWCt8`-*A+tKOj zn%kH=>FUzjx&J%n?^aZze=@$_oBgA|;D5vX+u{FprT#lG+(BK5`xHc;@~cc)@PGjS z6Bt48UxEM3L;vrRbt(f_;` ziaP%z=>J_c|7jlgU*!>4`CrcJ{(Eizr^&^CApzF@8}i?#8vl;``xM8&kW-ug4f)Rr zkH7Q&-iZB+$93}Gc>ie9{to+l!}BlL;(vwxk7nra(7(4n|AaOI5}*FJ68@jINKO(I T?5{K6zFr((?N`(JUq}BBM37!R literal 0 HcmV?d00001 diff --git a/src/pywinctl/__init__.py b/src/pywinctl/__init__.py new file mode 100644 index 0000000..4508abf --- /dev/null +++ b/src/pywinctl/__init__.py @@ -0,0 +1,397 @@ +# PyWinCtl +# A cross-platform module to find information about the windows on the screen. + +# pywin32 on Windows +# pyobjc (AppKit and Quartz) on macOS +# Xlib and ewmh on linux + + +__version__ = "0.0.11" + +import sys, collections, pyrect + +Rect = collections.namedtuple("Rect", "left top right bottom") +Point = collections.namedtuple("Point", "x y") +Size = collections.namedtuple("Size", "width height") + + +def pointInRect(x, y, left, top, width, height): + """Returns ``True`` if the ``(x, y)`` point is within the box described + by ``(left, top, width, height)``.""" + return left < x < left + width and top < y < top + height + + +class BaseWindow: + def __init__(self): + pass + + def _setupRectProperties(self) -> None: + + def _onRead(attrName): + r = self._getWindowRect() + self._rect._left = r.left # Setting _left directly to skip the onRead. + self._rect._top = r.top # Setting _top directly to skip the onRead. + self._rect._width = r.right - r.left # Setting _width directly to skip the onRead. + self._rect._height = r.bottom - r.top # Setting _height directly to skip the onRead. + + def _onChange(oldBox, newBox): + self._moveResizeTo(newBox.left, newBox.top, newBox.width, newBox.height) + + r = self._getWindowRect() + self._rect = pyrect.Rect(r.left, r.top, r.right - r.left, r.bottom - r.top, onChange=_onChange, onRead=_onRead) + + def _getWindowRect(self) -> Rect: + raise NotImplementedError + + def __str__(self): + r = self._getWindowRect() + width = r.right - r.left + height = r.bottom - r.top + return '<%s left="%s", top="%s", width="%s", height="%s", title="%s">' % ( + self.__class__.__qualname__, + r.left, + r.top, + width, + height, + self.title, + ) + + def close(self) -> bool: + """Closes this window. This may trigger "Are you sure you want to + quit?" dialogs or other actions that prevent the window from + actually closing. This is identical to clicking the X button on the + window.""" + raise NotImplementedError + + def minimize(self, wait: bool = False) -> bool: + """Minimizes this window.""" + raise NotImplementedError + + def maximize(self, wait: bool = False) -> bool: + """Maximizes this window.""" + raise NotImplementedError + + def restore(self, wait: bool = False) -> bool: + """If maximized or minimized, restores the window to it's normal size.""" + raise NotImplementedError + + def hide(self, wait: bool = False) -> bool: + """If hidden or showing, hides the app from screen and title bar.""" + raise NotImplementedError + + def show(self, wait: bool = False) -> bool: + """If hidden or showing, shows the window on screen and in title bar.""" + raise NotImplementedError + + def activate(self, wait: bool = False) -> bool: + """Activate this window and make it the foreground window.""" + raise NotImplementedError + + def resize(self, widthOffset: int, heightOffset: int, wait: bool = False) -> bool: + """Resizes the window relative to its current size.""" + raise NotImplementedError + resizeRel = resize # resizeRel is an alias for the resize() method. + + def resizeTo(self, newWidth: int, newHeight: int, wait: bool = False) -> bool: + """Resizes the window to a new width and height.""" + raise NotImplementedError + + def move(self, xOffset: int, yOffset: int, wait: bool = False) -> bool: + """Moves the window relative to its current position.""" + raise NotImplementedError + moveRel = move # moveRel is an alias for the move() method. + + def moveTo(self, newLeft:int, newTop: int, wait: bool = False) -> bool: + """Moves the window to new coordinates on the screen.""" + raise NotImplementedError + + def _moveResizeTo(self, newLeft: int, newTop: int, newWidth: int, newHeight: int) -> bool: + raise NotImplementedError + + def alwaysOnTop(self, aot: bool = True) -> bool: + """Keeps window on top of all others. + + Use aot=False to deactivate always-on-top behavior + """ + raise NotImplementedError + + def alwaysOnBottom(self, aob: bool = True) -> bool: + """Keeps window below of all others, but on top of desktop icons and keeping all window properties + + Use aob=False to deactivate always-on-bottom behavior + """ + raise NotImplementedError + + def lowerWindow(self) -> bool: + """Lowers the window to the bottom so that it does not obscure any sibling windows. + """ + raise NotImplementedError + + def raiseWindow(self) -> bool: + """Raises the window to top so that it is not obscured by any sibling windows. + """ + raise NotImplementedError + + def sendBehind(self, sb: bool = True) -> bool: + """Sends the window to the very bottom, below all other windows, including desktop icons. + It may also cause that the window does not accept focus nor keyboard/mouse events. + + Use sb=False to bring the window back from background + + WARNING: On GNOME it will obscure desktop icons... by the moment""" + raise NotImplementedError + + @property + def isMinimized(self) -> bool: + """Returns True if the window is currently minimized.""" + raise NotImplementedError + + @property + def isMaximized(self) -> bool: + """Returns True if the window is currently maximized.""" + raise NotImplementedError + + @property + def isActive(self) -> bool: + """Returns True if the window is currently the active, foreground window.""" + raise NotImplementedError + + @property + def title(self) -> str: + """Returns the window title as a string.""" + raise NotImplementedError + + @property + def visible(self) -> bool: + raise NotImplementedError + isVisible = visible # isVisible is an alias for the visible property. + + # Wrappers for pyrect.Rect object's properties: + @property + def left(self): + return self._rect.left + + @left.setter + def left(self, value): + # import pdb; pdb.set_trace() + self._rect.left # Run rect's onRead to update the Rect object. + self._rect.left = value + + @property + def right(self): + return self._rect.right + + @right.setter + def right(self, value): + self._rect.right # Run rect's onRead to update the Rect object. + self._rect.right = value + + @property + def top(self): + return self._rect.top + + @top.setter + def top(self, value): + self._rect.top # Run rect's onRead to update the Rect object. + self._rect.top = value + + @property + def bottom(self): + return self._rect.bottom + + @bottom.setter + def bottom(self, value): + self._rect.bottom # Run rect's onRead to update the Rect object. + self._rect.bottom = value + + @property + def topleft(self): + return self._rect.topleft + + @topleft.setter + def topleft(self, value): + self._rect.topleft # Run rect's onRead to update the Rect object. + self._rect.topleft = value + + @property + def topright(self): + return self._rect.topright + + @topright.setter + def topright(self, value): + self._rect.topright # Run rect's onRead to update the Rect object. + self._rect.topright = value + + @property + def bottomleft(self): + return self._rect.bottomleft + + @bottomleft.setter + def bottomleft(self, value): + self._rect.bottomleft # Run rect's onRead to update the Rect object. + self._rect.bottomleft = value + + @property + def bottomright(self): + return self._rect.bottomright + + @bottomright.setter + def bottomright(self, value): + self._rect.bottomright # Run rect's onRead to update the Rect object. + self._rect.bottomright = value + + @property + def midleft(self): + return self._rect.midleft + + @midleft.setter + def midleft(self, value): + self._rect.midleft # Run rect's onRead to update the Rect object. + self._rect.midleft = value + + @property + def midright(self): + return self._rect.midright + + @midright.setter + def midright(self, value): + self._rect.midright # Run rect's onRead to update the Rect object. + self._rect.midright = value + + @property + def midtop(self): + return self._rect.midtop + + @midtop.setter + def midtop(self, value): + self._rect.midtop # Run rect's onRead to update the Rect object. + self._rect.midtop = value + + @property + def midbottom(self): + return self._rect.midbottom + + @midbottom.setter + def midbottom(self, value): + self._rect.midbottom # Run rect's onRead to update the Rect object. + self._rect.midbottom = value + + @property + def center(self): + return self._rect.center + + @center.setter + def center(self, value): + self._rect.center # Run rect's onRead to update the Rect object. + self._rect.center = value + + @property + def centerx(self): + return self._rect.centerx + + @centerx.setter + def centerx(self, value): + self._rect.centerx # Run rect's onRead to update the Rect object. + self._rect.centerx = value + + @property + def centery(self): + return self._rect.centery + + @centery.setter + def centery(self, value): + self._rect.centery # Run rect's onRead to update the Rect object. + self._rect.centery = value + + @property + def width(self): + return self._rect.width + + @width.setter + def width(self, value): + self._rect.width # Run rect's onRead to update the Rect object. + self._rect.width = value + + @property + def height(self): + return self._rect.height + + @height.setter + def height(self, value): + self._rect.height # Run rect's onRead to update the Rect object. + self._rect.height = value + + @property + def size(self): + return self._rect.size + + @size.setter + def size(self, value): + self._rect.size # Run rect's onRead to update the Rect object. + self._rect.size = value + + @property + def area(self): + return self._rect.area + + @area.setter + def area(self, value): + self._rect.area # Run rect's onRead to update the Rect object. + self._rect.area = value + + @property + def box(self): + return self._rect.box + + @box.setter + def box(self, value): + self._rect.box # Run rect's onRead to update the Rect object. + self._rect.box = value + + +if sys.platform == "darwin": + from ._pywinctl_macos import ( + MacOSWindow, + MacOSNSWindow, + getActiveWindow, + getActiveWindowTitle, + getWindowsAt, + getWindowsWithTitle, + getAllWindows, + getAllTitles, + cursor, + resolution, + ) + + Window = MacOSWindow + NSWindow = MacOSNSWindow +elif sys.platform == "win32": + from ._pywinctl_win import ( + Win32Window, + getActiveWindow, + getActiveWindowTitle, + getWindowsAt, + getWindowsWithTitle, + getAllWindows, + getAllTitles, + cursor, + resolution, + ) + + Window = Win32Window +elif sys.platform == "linux": + from ._pywinctl_linux import ( + LinuxWindow, + getActiveWindow, + getActiveWindowTitle, + getWindowsAt, + getWindowsWithTitle, + getAllWindows, + getAllTitles, + cursor, + resolution, + ) + + Window = LinuxWindow +else: + raise NotImplementedError('PyWinCtl currently does not support this platform. If you think you can help, please contribute! https://github.com/Kalmat/PyGetWindow')