From ce7e264cfa3d0dbb93917f3aec9abc716ec27e43 Mon Sep 17 00:00:00 2001 From: yangweijie <917647288@qq.com> Date: Fri, 30 Sep 2022 11:59:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E7=AC=AC=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 20 +++ .gitattributes | 11 ++ .gitignore | 8 ++ README.md | 94 +++++++++++++ art/logo.png | Bin 0 -> 67843 bytes art/os/linux.png | Bin 0 -> 37161 bytes art/os/macos.png | Bin 0 -> 5261 bytes art/os/windows.png | Bin 0 -> 6295 bytes composer.json | 31 ++++ config/config.php | 205 +++++++++++++++++++++++++++ src/.gitkeep | 0 src/Concerns/Colors.php | 49 +++++++ src/Http.php | 150 ++++++++++++++++++++ src/LaraDumps.php | 227 ++++++++++++++++++++++++++++++ src/Payloads/ClearPayload.php | 17 +++ src/Payloads/ColorPayload.php | 26 ++++ src/Payloads/DiffPayload.php | 31 ++++ src/Payloads/DumpPayload.php | 30 ++++ src/Payloads/EventPayload.php | 32 +++++ src/Payloads/LogPayload.php | 25 ++++ src/Payloads/ModelPayload.php | 48 +++++++ src/Payloads/Payload.php | 91 ++++++++++++ src/Payloads/PhpInfoPayload.php | 47 +++++++ src/Payloads/QueriesPayload.php | 37 +++++ src/Payloads/QueryPayload.php | 30 ++++ src/Payloads/ScreenPayload.php | 39 +++++ src/Payloads/TablePayload.php | 61 ++++++++ src/Payloads/TimeTrackPayload.php | 34 +++++ src/Support/Dumper.php | 25 ++++ src/Support/IdeHandle.php | 73 ++++++++++ src/functions.php | 151 ++++++++++++++++++++ 31 files changed, 1592 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 README.md create mode 100755 art/logo.png create mode 100644 art/os/linux.png create mode 100644 art/os/macos.png create mode 100644 art/os/windows.png create mode 100644 composer.json create mode 100644 config/config.php create mode 100644 src/.gitkeep create mode 100644 src/Concerns/Colors.php create mode 100644 src/Http.php create mode 100644 src/LaraDumps.php create mode 100644 src/Payloads/ClearPayload.php create mode 100644 src/Payloads/ColorPayload.php create mode 100644 src/Payloads/DiffPayload.php create mode 100644 src/Payloads/DumpPayload.php create mode 100644 src/Payloads/EventPayload.php create mode 100644 src/Payloads/LogPayload.php create mode 100644 src/Payloads/ModelPayload.php create mode 100644 src/Payloads/Payload.php create mode 100644 src/Payloads/PhpInfoPayload.php create mode 100644 src/Payloads/QueriesPayload.php create mode 100644 src/Payloads/QueryPayload.php create mode 100644 src/Payloads/ScreenPayload.php create mode 100644 src/Payloads/TablePayload.php create mode 100644 src/Payloads/TimeTrackPayload.php create mode 100644 src/Support/Dumper.php create mode 100644 src/Support/IdeHandle.php create mode 100644 src/functions.php diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..df55cd7 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,20 @@ +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = false + +[*.{vue,js,scss}] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false \ No newline at end of file diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..9af3157 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,11 @@ +* text=auto + +/tests export-ignore +.gitattributes export-ignore +.gitignore export-ignore +.scrutinizer.yml export-ignore +.travis.yml export-ignore +phpunit.php export-ignore +phpunit.xml.dist export-ignore +phpunit.xml export-ignore +.php_cs export-ignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..497c4e2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +.idea +*.DS_Store +/vendor +/coverage +sftp-config.json +composer.lock +.subsplit +.php_cs.cache diff --git a/README.md b/README.md new file mode 100644 index 0000000..937c7f1 --- /dev/null +++ b/README.md @@ -0,0 +1,94 @@ +<h1 align="center"> think-laradumps </h1> + +<p align="center"> debug tool Using Laradumps App in ThinkPHP6</p> + +<p align="center"> + <img src="./art/logo.png" height="128" alt="" /> +</p> +<h1 align="center">LaraDumps</h1> +<div align="center"> + <br /> + <p align="center"> + <a href="https://github.com/laradumps/app/releases/download/v1.2.3/LaraDumps-Setup-1.2.3.exe"> + <img src="./art/os/windows.png" height="60" alt="LaraDumps Windows App" /> + </a> + <a href="https://github.com/laradumps/app/releases/download/v1.2.3/LaraDumps-1.2.3.dmg"> + <img src="./art/os/macos.png" height="60" alt="LaraDumps MacOS App" /> + </a> + <a href="https://github.com/laradumps/app/releases/download/v1.2.3/LaraDumps-1.2.3.AppImage"> + <img src="./art/os/linux.png" height="60" alt="LaraDumps Linux App" /> + </a> + </p> + <h3>Click on your OS logo to download the Desktop App.</h3> + <sub>Available for Windows, Linux and macOS.</sub> + <br /> + <br /> + <p> + <a href="https://laradumps.dev"> 📚 Documentation </a> + </p> +</div> + <br/> + + +## 安装 + +```shell +$ composer require yangweijie/think-laradumps --dev -vvv +``` + +## 用法 + +### 👋 Hello Dev, + +<br/> + +### Get Started + +#### Requirements + + PHP 7.2+ and ThinkPHP6.0+ + +#### Usage + +3. 配置 LaraDumps : + +编辑 安装扩展后自动创建的 laradumps 配置文件 + +4. 调试你的代码通过使用 `ds()` 和 ThinkPHP 应用里的 trace 一样使用。 + +> dsd == halt + +5. 运行应用,然后看到调试的信息在 LaraDumps App 窗口里。 + +Here's an example: + +```php +Route::get('/', function () { + ds('Home page accessed!'); + return view('home'); +}); +``` + +```php +ds('')->phpinfo(); +``` + +```php +ds()->table([['id'=1,'name'=>'a']], 'table'); +``` + +```php +ds()->time('event'); +ds()->stopTime('event'); + +``` +```php +ds('调试信息1')->s('tab1'); // 可以输出不同调试到不同tab +``` + +至于显示日志功能,和监听sql,再考虑要不要实现,因为目前这个函数输出的是和ThinkPHP log 独立开来的。 +要高度扩展,可以实现基于本库再实现一个log 的驱动,倒时候配置database 的 trace 就行了。 + +## License + +MIT \ No newline at end of file diff --git a/art/logo.png b/art/logo.png new file mode 100755 index 0000000000000000000000000000000000000000..11b24660436a795a123d3e62a80b4f8614dac5b2 GIT binary patch literal 67843 zcmb4Mc|4T+_kT1uy4TinixSg9l9);nVwAQa+_<F@(_%^1?AsV!MG^{;gcie9p{!YE zMp2Sw%D#<}wK2>X+l<+s-!r=1@BQ9y;rB<c?yJ``pXYqed7pFM=X}odxe>pa9+CWI z-7f$DNTQA&GzWm6p#S^{SSAYng_Tzgh5q{4{pe{=0FbH_{t>Bm`_mTs$F*LEPI+0l z*?ak(_pk$eeSOs(U7b8Ho_DuXck^&artez^02=_*!TrDcJs8Df;$0l9hiCa?7AIKz zq1c~d4VG_O_Or;QSl|zX3l}!rY47xD_E~S;-)>rL%DV43TnHxpsnIaSYwGMjgU@L3 z$+pocdTyi9gtsr1i#LryER)?3vVZr6tq7x)M?EMW=#fze!JmO{t|wBS>NtR@l*xVE zZjyuAQ4dB3$)PRBBC}!GcSgJGryU{jwwwXHm|1G`qnhJmv{FxQL#`9np~y|AMWF6T zobJp;6?ZBpZ^f-f<(aCkGEPyP#%I^W)+;?wFAe8EmiztOXT-L6*RHhR_lAkf#}-9X zd|pY@Kb#HE6tMjAXp|y>UJjP0IQCL*y&>E?nleL?>9n)l8>YW*UvRQd)^xw}U7fHp zkkEcO7UwAkwz6Wg-FRi$wHX#lx(J*`<G`(xT#Ykn5AJd_Mlu|{?WdooTa>b%W!A^< z!mf2+x&s~bdNnG5N5Et@JkZtDEB3H$oDSy_kh@;id?wIhy!cZu>g@H!mR%Jw*ed~e zRASsMWr1HG3Yc+Kz=rr%F(4a`jNtYHvOt~fYmo{&iEg4TUMJ<YmpSzfGEnzXdYq2$ z)Y>vI-$9JAa{C?$z(7T>S&y5AEWeD_!9GvKZ@>vUcaNbzdXw*@6mR2+M||%^zls9E zucXx_U?EAr!hzB2xcpeX&E94zCTR(!4(ZBid1VC(o3FjB0D6BJpvF-Ao%3AVvguZM zR}3C|UfH^k{cKhO;1x_8r-&H1Li+s$7P6!n85}DMTzdmlNV8sFKM(AP8xjTbzdUbi zPCa2{c3F*ox3w+pMOmtUMz@rK_zvKdhk3xCy39|Ydm*ln<`N5mKyJGu5o-s@*2%#& z02{Qr#eA=e7>JC(kthk^fFlOja76;Y+m9zy&aaT{?fyxrza<i$PEwzZ5N1v^tUTo^ z3vAy=)u4C}3`A%kXj=jtM>sUKj`8Yr`SU<;<_t_=FAEHWaeH%i09y_C{mPJfwq{EM zXOO`wS+7NQ0QYMA!~m-=&n=D2o-zaniYDyJXsTu{JxcGzVIfKz^n!*zByCnjwB96a zoF+%rG=BC|g#kzxy<QFAy(H_k^?Bg85Kgt(N?6EmXW+om^@a#Z1*9mTar(YU#o$zI z<CHdT$}Ss+Y%3%Mceu8cbe1jEmj!OcPrY{2bN2vWC+p-V+mgMFvbvQgj4uGULyHu~ z*Zz;hkn-K(XJv)!c0%h?E?VR|a-KHxlT!7^mvRXRJxiyya}d4`9~45d+AIfKS>+X1 z<GLNrPpkwg%&er@{{y~%VB+iwSV%3(C~xXo>$JbT_LO#@YGnw7hKE-gFG}a6SR=1A zd39o+q|4NrZ>DGn?G;er0Nj?NhnBqo9s<)bX^Nu2qaDCF1n={Zu?B9+0cWGLERC=# z$-Ja!{b>iEvW6p!brP9(?p@1Xj~!@mva~$unz|(rhf*zMIq1%TD}?kt2z=x)<6cQi zg@{xf%lRTwVV`lo6MgA1shy1GdI(aMAS8fwoAhRSJ0pfu`G@oAd#ttar89z2sUKNM z7GQtYf3-sbuzv%b+d}%lLEe?;t}3I6J4}rJ>USRa2q+^x!0EU`s+t9LFhN~ExIhr{ z;RiYtI`GQskH(?ZF_3(+!03nHv$%gWV>;>neb2PlT>HEO`17Dqo(3F0jN^}txQuXV zMU=<WV!tn}!)qcH4-^B9Fsys}?1ACYN5{LbCP;|_*HJO$SEg-Chg#xJknhLJcg!Ya zgZm`>UKpKu8Ig@Lr*si)90erJQy)Ys_Ho-uSPNwn31E$RgKz(5;%)r)TFi@#Qo+t{ zzPYL-(lM_24KuEw+I4qcjP4sjy+;EQxWs3p#uyhvxor$KJj#6NWdPII6E|(DqiTYS zZ$R+_DqLr8$O2~-sn>M)cN9QQS||2hxM;#P5rd6{iT5zE-1`rRdvIQnNv$(IkC|e> zC+AFIe6vscMx{TC^J-2vMEUsjr%_*|R~q@8$_RBucRo&=4li^0s2DhQ@jk;osa<ex zxmxN=!GRBlSh-V}$L}yNu3p^5i1j49(xUpJsiWvH#~5_%bwYLM9#8#u2jhzP#<LjN zx*>iS7uA%9Y;b1VD})yergecAUmz0hvtIjmOA2mnpVD*v>~J9*^S<24@bTrL$&Pdj za~(S)<+w&vlIiIYvuzzJIDuc|6fLDSZG=N@dlN2t2Nq)7ep(50SWKF?B5~z*7%b#m zW2G-0iE##LI@H$dHcVFtF;0&gau{*sODW`s@i``WPPRVT@j0Em?!9agLEa!M8uS+s zmJZ3D`<1urgB0Mw+hsHG?&1yRIzk=y9^Wd~hs`P<{T0*&$wOV&`pkFlQZy->J%fE7 z91M0wf{hJ&(T5tP$~3&-#u%4Edg$p)oLy2N@bLp<KSNw<^5v!9^|0L6tn0Q$BqM58 zd}CW(qeZJ3@o|A*Fb55)X0g&Zzu5xr5m}t6S5oqvt)U^OWPzXVC=lH!)Fys*mRYVw z$4H-QygYEPv=V~6QR$~+T3b4d6|E5+QihSc%<77_4Ml?fZWhUU!N*q%R(_BKd`@fG z0v|bXW%qM#ab-OwUe_i5nxALIWAIpAZZdxa&K`cOTlnj;$X%ojUuL`RW|}IJ_9<wj z7405xZ;p4mk^egFPKhXxT?O7Eigy+sdVG1(Wpip<XDLpAfWjqi8eug;Z0{&Rws{43 zJhFq7rhblQL^bmo?|mY%<ia`NcGA>)IZHF|Hp1aXm&ue7;;NTOXNwMT-F(Z8bj$l4 zs&S)XdL$q6LEfs#?9$nO?47O_+r*~kZKJ_SA{7cw_Hdve__BkGSq4TzclKO0B>f9Z z9wR8ZqqyEE0VlI}wdSpY@Vx2j5&z(w>fHW1pX#EEvC}PJ!kd>%(V@uAfl|O3-3-Se z;*foh@~227<wJ4P7Cn`0Y^yoPb9xxrh0Di2Du{ge0q9+llG65jT5Cxzrjg#(p`-iq z!4Ba4K_h8XQw)#oG$;i|4)D*@;%uDB1Fi91`876o(hUi#FQ(mdd+Vcj-D{1c;7#|t zR?Kr5&^$t<Vm-}H9%v>=H~U|(@d>P6>FFZFO23%Orp)^2QuM_;63Cx-X2?$N%V-g3 zljY0$;12e=ZuzdUc96NAG54G;WL(r}_Xa+m;h}w!d##g|pAPZK8WhUxPO7aD)w4Ah ztT{N0#0f^xE~WeHMJjNZ7oK^7;}|}*dX#$~oFX5u05-r#dLAUL=T@w2>*B6V4&o*w zJUcPlBo_aeF<KNqRUc~|=UA=2*64hrLgwv;$FI@%x{h{%_&(QaDPZWVY8UYEIs==c zJanjSncnOM*Y~g9uX@o33wdtb;CD;qU3u=S!ts2a<SRk#&I9_R<wf<SHPKpb{5pIq zsrB;b;G*mDVu0E^@Oszk_CoyQ%fm#9<M0P8LrdS{9LLclGwnfoevG3ICWiy`uB66i zsK&J8&Gc;o&E7#tL97~N)19_Bob1^|4dXpS2rBLKF5<o2jy1}~kKX;IY{{7tOAw(a zVs)ym7g6Wp?B9_-p<XQstU0Az3p~8bz(8WZZT(qq_FP-yuh!c+BgUUZ3}z5o^t}zk zDMu(DNHqHyfqTx$8QsfBA9R~NxyoDApuWF@({U!dyG{M#5b&^t-4-HqC+uYxBl0aa zv0xlyW`Pr2NlwK!XE-1`9r;O}fr_Y+CiKY1De2MdYNAb`<vWOQiKJIEx>(&2Q);My zsO?MTD`!Q447$5pfVGiNS)I+Z-Mzcg#gEgk1~)xJ80!L;HVbfnid6jJ^hyknT>su! z2pHS!k7b9upP?et0#3UF%RPKmw4RekySXt#yxMJ}{Lg3A#yqPCqxcLpuTwK;a%Y&% zeCO=WY6sCSQ9yEE!)QQLDJ<kI@<{q4#_VJ@;`9j8K?l6iptVEdsF4wW*z3!9`0T@q zx95QufJ%*NFppqWm*FeHwFM8g`vd1v<VU%56I7{TqZaDq7w#$g?p&8l8}&h;_YLdS z9qW1|Ao~LE1blpdwfrEY<<GS1sX@zGdh#nlT{kUo#&d;Fn;NEbNDBS_hA0q-lqxDD zo={lTsGcZt)(^iX+JWZaROo)I=!IkAI{yb9(;3sEz@*-O1dA7N-d^fA^W0{nD}PE_ znMUG2at<hclj`!ZOFR1k_XgR!Porh#{56OS#!WrqMyJ|PDLJSrsvy5z5Ym~9Kjt_g zrGeL08dJ@O%c!svFAZ_k6I}uK^A~zPx(>+$@qTtCpV9YX@86j2b_x^9Y()FWrucWg zZM|W0VfebS;OuDMx*FgdgNxGTa`s&(Eh}}8+Xo9d`Bi3*2kI9sPH9c-&8L~rB!Hoq z=TP#JeCZ9m;8SNyanvW)IxJoCR0+wMc<ASh*wWmm#zZGyy{30vzpe|1qFMUXZ@we_ z*l`_i&Kl$6jI6Y`?|=#&-FCCF8C!C(aR5pi9E{gp>QOCiedei1#dVD8RBC~LjTYb@ zWF0CBxX4!ztMID!1&}}bzcY>G;-FyS&wbk#(H_LOZp?Qc{k--yB)jzR<%`H-iygZV zWf555V<Xe~+^aLr*~gr3zB#Pm;DdLZ6{)yz^+dq!JRlL9%i8xS6C626BRVuS5p$c< zmi6S<zH&bg<lA6C6*7kR#J)br<9yr>p#6H3^sH52Su@(IlWdGI%L_D_5k;xu_#_K@ zA}c5DRrzj+o5Bxvbyh<fi{0NmjyQ(u_nUTTC^SriSK|+Si2_sFWQ$Jbm<*#|RgtPM zeBOJBdu~Rc&_=0Fsd?!ZiIv8{LR!D7+NZo=aOthD@^*++^j&Fje`XUzC~e<(*36N^ ztl=cFe08|jZ;(6d5>#RLG1kLvSW=JoM1&t}FI3@##w$En54P9np4?7e$J&U6svWZc zd>uWZQEjkX_c*;7uZJiufGU;jRn0{+pOC=&@#*aa2P=s?lvW2`P{0R&sSyh#JlNqk zyPip$)TwNnbS`4Qk?h9Kl%FP7zs6%<BcNRKqB`U=ETkxy;R1#1>1_G@?49lJ`|EPF z)U<$8`_`?4@7hx1`R*x>>d=zLt*{N4xtOQ_MZ~+59}^p!L5-OjWgZ#j+LL=fgo#wF zX{;u4+dX}Ta^f5JyiL!zn@*38AJw-mO+Pm#7Wztg$f|>Trq<A_Fotr{K1IK!Ri7gY zBoPuy5*>Lm8R?tM>c|6v603uHq`pd@4N!_KPq<irfeGJc<vey+44B01V(mgUNWcLp zIiMh5yA{&v8Ls~%r=;$cg2Ni3gk|RhNtBBF%q^x4gEcuw@M;c{UuHyofUQ<{NF-?K zWqVT32Wllsl&=>B60h`q@+Dukz}J-SVoWmv$Kt$wvuN}aMn^P3mwK^Ko>^U-Vi%Ks zl5^sHW3^8!qHZ1crEaAdz(iN)Bo1!#kPScD$q_WzCo01ql@Z6O*F57i1gwm^45lgf z)BCm*J1vjYjR`ef*OcAMtX&%gan(Vv(YMIAWNbcO>nX3jX_R42I-^fHkSkEu!>ZNC zYoaYRaI-eDs;_ZtFSQOEC_hJn1Qd4Ub5Ljq-ln(M8%N*lLux~&RBHuyVkHm;oW4*o zQ@ty^lve7yT?euiJFMcoDN59*DXzbVA9~`}ztOFqxe?Wha_oO|Ein7{VUe7>Z0VWR zp=`7f<!I<rXC9+Uitsp>cf`Ek*P@4w=H2i9wEK%y*rPzvk!tLh1CqL)_zATAo%5M| z(v@U!rb}X~@yxF2#4yo>C6vbn)ak2-Vn{v3T1^p<u7j<R(;_M<=-*yk*Cve@PaPUV za&%`}5qiUuQE95dz<Bp&R#0X0$)5ApopANC<pR97^gS=<T)9MtvZey&$NX70zOP&# z@}s3hA65lZMTGSc|BPeDFjs)FH^2bXKI~`AQGB|f5ve7*RLZQA!<cROGwF2%YC>ws z8ox-a5y`Q1LU$%77klNNllH3%V#1_=<j}itURLGV`HC2)U0f%l(g1?X$iCkD>O|MW zb>vXC^wgX>;7mpc8!@6NxENGLRO}<B#<599VjZ_l%Y}+0YsD7R`wqZDKBLpJ!221) zAOnTvR7N6p_i6}^!P~4!!F6ZjVwoO?q=2t<z2$0|E#LUDHNG^_cm@`0^Rhi*DLtm> z%9=Z|w%3D~+yD*GJ8yuvsTH8q4e+sPAM)K1p7ACDO*;ZCubZ%z6-~Ek{Jm(p($B$V z7Yo=xYI7JNo}-Ss`OqBnb-|M`<Ny+fpmsCE$AVMjiz@s|`a}VUXawe*)(#v>jpu9* zqy+5Epr48r1h~y47!Q9$9ISv{M;T=dBb@!NEcs1z9xWpglf(;dj-^auaQKZ>C*bxh zO+#s#f5ehAEWmL*(OrQs(g{JMO3E0vi;kR4zj)`<l|zz1!@dCUS%b-R5h^o+(U7Ns zcdl<HC&u?Eb&QPPo#5?Ia(U27T*0>@kgKq_V%TsACi?Xep6&)gq)r4V3uhuC*tx@s zg2`PKz8fdB8l>)BZt4($Xzu|cAwQvk=$02eLUC*(iH&QfWIN$NOyDrHIz>DxOciQk zG#Zj4VuHV9-}lloE_IJ0@?at9HP2!@q*ZY=kLN>OotpYLvDI?R!HxQT*d0~arQfr5 zEtEr}vl4OMS!r~S!mGQ`X{Q4kGf4b1T6$%bc07+g)}SMw9wFUf_)B^D0lDpbV1uv^ zz|2=>XyzL;SR_5*OPqYXH$}CnD?Ejcj66^BY20VINl6GP@Z1gX7yUkp2ov3m;#IS6 zU{O_AJ!NKEVi1$KniiPU;Pyb?J!|8(AdDmDy%Bb#t%aqm1zNw8@wVW^M$3aCWc6X( z&t3LeVgPnJB2ZfXm=kN;blX|Mu(lY0$?J;qMqV->BK>-gm1%C|7-PxRQZwd-vu}W} zmxHSzNdMcHkccZxqW6<1k~q|x*!nIbMbDLAg4Iq+6@(6hTPF!q0cTX582M$X`$||* z)isS$Ks0iqqL6GG;D(Uz=J;w0$>1pjHzsZ>pzVNeUNzUHPSHD(&sz!ZoJYyVS!_z) zl}^9NkZIaYe00016D#dYLz<w_lt!uw%CXYH#rL?e9^C6UTvlCeE(H)~BDk(+$C}9I zT9bxs$gVYVoG2Ct?z25lET1us+TvZrmPRn){hI}1hCIvh?>W@(H$k;iXNWr_-pls| zjy|V)Y3Z??$Wv8t`!#MKJN&b|Dre-)z(emjt527TR6sx)R;!shdAgJ7B)1PZO1?ZY zg;(hyhx)n)cMO4f+C5#we)B5qjd?KKc$kMa?I{+kBj#sN;l~=}LGRO8%}~GEzSi0d zctM$I&=zjz>eCQ8s)@l57xh44vXp#V#2}YGm`AUk2zmqVOBbi4EH#^?6iG1QeRG?W znYm7j05=hKtP_|1uYge?117umJfo4cMMcEZhPI>3yde_QJ?)^c^;>E9V~B80PAMC< z=2SFF0I7oZK-c8D6=36ISV%(vHTX2k+9*q|6dQS4G0D#Fh~zg_%FL_)P5&o0?N$Jj zzqFXh$p0k4wC=ROOyv>pKTl)(!elxP<Mhw7*2nml?LVJz0dVK6ViEoEZL}dgzZ@2# zkAt;l^ORMnl9eo1kz+;~;^6SLxyT;6Q6SE}fmN=;9#@`wx6%r5`au=e=H0JgBBBY} zRc&LyZ8w@vlUerjG!9g&H^F4OuM3)dSP{}g=;G~96o7O^U1o$>PsVP%|DCa+wZK$X zU{(@8MG^1LR%kFAiC5++^&vkT;Yo+F5u=+0Da*k_DRV(6@gT3wb0z4%){%z}!)0wx zp?t1fqDM&T(*I;)#*fQEa+Rvz<WtK?Us5x%$m*KT!mS=gfj>#>rPBwVF#LxfGm+Am zJS{5+(AtlOW}hY6%Ah$UV16CmLJE{rIu2rr(R^FVb!jc>Y5bpPZJsoz#n7#u;L%2T zPSKxfnEL3a8xZdx+}rFChQGrZ23p&eD^CJm<Rs6`=-CGpJBhIrXZ2gK)pil!aySzy z+eds6!}dMElkuMOLG(%{nuOvF+iCY<6W%rYdsEMb1$STqjcG)U)5uvlb7EWI@-<J2 zNh7Ha0^-ippLcu^sbE$sur;&I+)g5$xu;<OZM1i{i6GkiL-66(_IKhpN$Gyuo8|a* z`VuC(O6Ksz&-?!?peaRxCWL}3Zvo3>(qwx()_#yzgWXiiD*-U9wcO}TEP{4_sVo`j z?Knc2+>$Stj*W+sOssYCb8cX)>o}bf-Tt;rnMvGR1-1wMC|2KH4w5crB~CloIUen< zFJ@#2RO6^r>~lePo9I!W3}dXVuRQo$>z>fHEkJKl3>h1!^+^lO358B1Y{(|D{NdQ> z0G8VpndtF%Tpp}ddHxu!swzN$p0u`>>0#fJ`b{*K>iE=@V`luvP&zziutOT2UzWx{ zHMFNvwjSsmfSRvG!JU+sRB5s>Ud2+Y%^UA~vg}uRmx70G2y>m#R)0XYGWfTx292V? zT55|4siv_f(K!uUZ}MO)!vR}DGt(>m5>}Sih-vScoyyG1SzEPL6j0WmPAN{;$Gdc) z_lg2FjbxP$mTI5u!EoY1-jUgPLVp!Fs6}Squ9)=PO}dTVkyT9PxS3`s3;2C<j00_8 zs<1*m-6rvHwpQkWpc#)COLwa;{gVo<FTGV!5NDoa%o+RXKS=mq&|MBD?@;l6CZoPq z_V%-y(&lVI{dCP8Mtv#0Akd0a@iNiQS|cPw45)_t_jVG{{29lzU33Rl8^_k4*dcQ? zHny~Va@*g^dVx5^_%7OH`mn=l$|K6$yUt4eg0qK<IrQg-K%5G-VXEs$PEC<LP%j0f z`i(YJk~^n*Y#jHHZq{hpOq(%k@_RB0wG^yxSqd=A!HbhC!0VXL0e!?9h+FU8g#Lqc zA`w+!&pl3!{&XDX7yrA3Ru~rN!zcKMqF1;RN#x`nU-F~vw51;hAT}`Zt_3zMP3}^b zuX~v~-I`<)+<we=_>`M!jSe#v3#}u>^LdDST>CfE6lW4YUM_k}wZ+z1EpZ-9X}bFa zxh>iDOt+NdbX{3fV5t739+W36Bwk@8+80r(e7aPpI-u36%@@L!5hdXwzCO~ae<JwP z@^8ua2X8?xqc!{Pbo=>e(L@4u;A6}-yLC$x@dlP~{>;>Gfp~JaR0_K)yyx<&KvZf= zEG{DWy{+#krfcb|aTV}$F2}eE8~-)!wL{cx<G-of0bbb)akrnpwB`}{IvpR9GoOWH z4|eoOozof_JJJ(tmwjvZ9$@ceHH&D}N`BykPp9u!!t1pKkaC^u)E^!dMiC)hxeihP zRsW*?kQK0+7R65qT{1g<x>vp@d;RRyAXT4S6a&dInQfhHssno2;S7R3zr5%El^UXJ zqp$5*GZgBRB|FgO@HZm#qm^CJd8SQtgPCGmGneVEOw}VqMAsj2Q!doco7?QINT^k? zkSR8X>rCm?!<Z*%dEFZosiD`tY#ns&F4;Rqk!B(_;Y{=obP_&W*POflw~;OWl0_5p zO*MD88fsdfc9Y{2S_Q{wC4cGzM^Qc_1?0PR(F3PQb#&84-@#L~*+aOVV~2STA#8YZ z%n#DmMnNT}rrDPpUs?{Ax>wr5NHUco-?iJBUpW%fbN6P@jc)qya9}-lid@WUjM8r1 zmEWd(n$WbT;EIf~U1J(MW?}^h<zHsKI1~NH|DYbLjc#6kZp_V8S*+)_V`1VKz9q&u zwJ^-W8>-|kN(Y5{lU=l1jf@b9Q~gFNU2XAodDs_K4ZHe~RdcB}w^y9JROnEt!QAO@ zvjG3=Tv$moWz2$-J>+#JkB>EuD@@MYu1zIs>jiD7jieZ6X#(s%G59`r*V5GCRh;^q zo!(e2rLo$)RLG4Hq6-C~J(w)3u2%;P)H5BuFNX)`F;3=OQGXh>s@9T{r2i+3UMOnr z0=Q50M);oE#ga)i*E!cnx$CvN($(eMb@fT*72xrC$gDV%axK^D_(*G>b{zHTZfzbb z{-l)D*(raHmw`hxp%UL<@KgdY-N&iOwkI3oX{T}{yyMc2p%67M(YsVm*Z3$34Cg5g zWcr9p)2!QfcRX!;<FI6O^jMxuZmt5S>$JM|?MCA!H+jNad;@S(8fY9Qa_@OJ>E=D( z^O9j{l-uw!!Hd~dA1IhK;KkG*`2j6n4yv)$-+{Oj&URNfR;)LrxhCbT7s$bUTy#_L zN__eW#QVI~O`WlMQ$1qJq<w*cF0LY2tuYgjA3Je2VSlN++s1D%keR`Kv4$!+_M1!F z_ss?EZ`IrZUU6@}d@9;SLS!aDw}RKuY(l3hhZDRXr6kuM9Omd+Z0j00WJkhtn#Wcd zTL!l6^wv7#fP8Q<P0@PqSQ?uI`^&dva+H6#zMiIW(NkMpNs%?a8Lnf<k+PQcZid9e zpy12c+Sa7x3$Tz?@G{1AT3%Z~+e=e13nS#6*s$QIm0Mzy{05OS^TuV$A8xs9VnIOh zQ(G&<ioJD7=@^Xf7v;R5t>=t#jfq(HA-eZa`g>plE?mcCR9-H(Q1?Ycb5{&1;CzC- zsvi#7hkQQ|^V}$~8n2fF6SqTWtJXnUrISv(1CJAZ#*YkU8^uuz2x@x2XVga?HHF#@ z#Y#1N5wTVlD>J=qusu`pN+(wH2KW-n^KYQS^5=gSmO}JU9y75utz&Tm;07#eWKW4p zr+jc?;G>3|R$VDOYPa5rPk&661m@gNEq3$Cy%=!XoMjM=iA6y!EWLnINR}QbzO6|~ z7?5Sfrw8ZxScF|CDCq@_o(i+>y!%naz$mXNv#m#cQl8xGl!l|bp=$WnMn)s}$U3#n z-%$T!xm%6-lAiZDHH3YLUy`?E>9Q}1pLKIr-eSb>;^`LXK7xhB!HJ9n$6Oko=4H)- z8Bt5ubDNXyYBQmz2K9@6SXJBr*97_ZfwL_fS7Q0_D(C0Uh%;!tsfXA{UWNgbJIQ3) z=z(@%17`d+tfo=E$NSh!SbSq~Nn6SIdC*QLoGtxz@gIduaY8v0d&e}Z3+eT#zWswP zmmb2+W}JDc+gSObz@qDCIpD!wFOH8lxs|qk`$1*h1X~E|*bjx9zZH2uq}4)mqK`pE zh7~P-d+q9>yIZ)}Q{;hd!`ry=(d9d9rRq08hpxOzU-V|`i5_oGI^5hSoUHr%hzEB5 zev8mUBX5Dm#Um$`vPb>Pw4IM|=(oY8qc&QZSl_A3EFFzyYk^}@bZlh&gANzBSg&NP z+b`sob4{Bc64~o)x7U`N1c*jorw@0k@g_DDGbv1@(~3Ap6SpgjI*B}KAa%A1re(tQ z3U!E5ls9i=mHB2g4+{RKeBb5A(6a9=w+fU{_9JDO4-=0<ia4QpcS8w>8Y7#;qVaWj z4XgJ$z)=Rq{c(KHfOWMk1ws82o3i9@Ui9704;065l8oMgN{*S$vq<R;N!Eou@@zT! zb!UFP%Am{4^T?Edde7Xkx@h*vm&rJZOx<{P6?U!$hf2!a-pvB}|0yXU$7Y_003%h~ zZwl9}D81`OQx<c*La#f{Z+K)y*7aQ5Aqr4minYa$PUq~gbu!|tP@+V#P^izj;Hqyl z?uX*$+VjxqZTGp^1E{>78UF2ovR$bSCOx+mEK+NK-P#ZIPEAeGI5ymUPN(v?iq^C< zm5Le`Us4`?^A1(0110u9HTMnhWRM!v{;WAxbJj8NN{S4w=5?U8lb53j)_c5AkW%vE zEHoR?&l*cM9VBPT+*6{wK7O@KYoR2p#y%$b7JPfc#pClth<*lngrB#XqQrL|ETmG{ zHqOMO2_hBLeAQgb;e9$N>5PGWg&R2*;DShaZ8>3%jm#x%aqK($wlyOzlrq+Jryv7n ziEk*`9J@;b&<Dp;xJ}JA{bv-Zt9O-=^RFdAP2q*yL95?sH-xY)(`$2n*<j^wj67Xd zQ+yQb6p$<B=lfO<c*PmnOzBpY#7<Lm;yPHhv#+tSeRSAD%NF-JjTL}Nr;4xG0b;1U zW_g~7zfB&!@TpUDDQStjBrrG3qMVUz9r%$&d8*j9Te0IEcwoc4l_?YzR#Ue2fqx*p zpF!e&#PoZ4jGHuI{7pCy8QXz2p!cIufJ@qLzx5YTs=K)AB>kg3tf<i?3t23i4Ygn7 z?wKd{KLwm9o4r$;em?0n@zhGMY=<8({(iID*}Ic1pgvXJsPtWaSbtBx?!w!bL-WwQ zTnV?OFX;EFwqV!U$YYIa)X$$0Z=@A~@_=cMWwP_Q@}_%@PwVJ%rF>D8N?-RPoGfaO z0Kw17uHn~Ak_oJ%sj6RanEMLBE$8?f>|#ygN=)^>Somh5s`oj)uj8J)HMVdla2sVJ zP`gx08hR6BN86jF2;{;WQ>DAd4X4B;fmD98Z%=cQ{Mx*1MVt-ySODweSmh#&WL^cn zwQ7Ib?I3dOBqLE0nQUW!WJ>VNM&Gt+KP*I@T4-2QR)EPYQ<R^6en)=c*rH~^LzmiV zm6MfJlC1ZPNfDX~-(Lnf8<W-c0e*d(S!jeeV%?@V#klM(-YhAyjk$ok2&*UToa;>y z#7C5}tT4s2d?425UNHBgccg34xD9;oE05a8UCx`RE=G>yU1ExZ{DDPSNX-d~RcR7> z;v1~lSlv!DsdBsCO>)PaKWm~d0k@&KAT-q6BK$e9GGRN)SGp(oB4Qwz^cIJ^@vW`( zqg3#=c$7)puiQ~JXiOf#PgJ?MY2mO>Fp<uAAE7o3m7Z)Xj=h`sBG@B2ofhtjJ-?bV zB(rg0f4aK@l$$Dgzn0g9LHS^i9iUFN`mq9VTvevy-0Nb%E7xXpCK+W!U<ro*SU8?q zn)8ffoqO^DAEr0AJgWS+C(uE`-q|chsX7XADhR82R9Hco7#5QjEM~IVIj`761LE*7 zdyGzN!I!2zC-3$Xi?vSa@%5uiQ_}*WqmT=6*T=-~x#ivI4_!EfzV*eu14YYHmhMPH zbOcj|2TYvlC)1#IoI;?xnhK`>BcEy;ZZZ@0sLO5i+9V!a*vrfE`mv!MX-i*(kV>^a zY^ltRhZ=7gM|QV~t*nEJ|ChltTa>aT$Z0kK$-9FBwH97*vjB093<=4Jb++pqg9oE3 zY@P)Sy+7-=`5r?egn)h9n{p>Ty||=^Rn9j1)<XFHiANPy6{_YU2OCcVFia6gs^ml4 zkj_OcNyLD|OW|6c)TzdCOD$2Q=f{UKK2tOncES~)#xc!1nUuIuj*U|#+K&OzkjhTt zaQ#f_>zcT5*ZVV$uWOgO_Kiimgu@RkW<6c5xz@NfL&m2tZ4}<qfJ$k+lQ`y`uUAPh z(`3i~gwnZWMA_vPn15A%QG4}8=ZQe$48AQ}e7BlNNl~Kk6ww#7ulzQ_d7R3%&eOuB z7e4CB+_-U33qpt0h9P5RrJcE>*#2>A6vC9za+U0wM}r(r;Hg#PxrWdvZ&-Y{;L0x* z2cR8)YX$s>BCP-?xs7$kOBxEPqMB=aK5l6e_r=Op<iJ9DTE)@?x$!x%9jan(ZjLV* z@P(7s4R9&OKGsCkWgDtyOD^5T!;9@YCeRFl=C@S%?59aNa`culqe*Lf_bvP-(oi>R zzJo}J7()jy;j@jdun;|;Jxbnrm{8;qGo!Xl7M-WblZWv;%mjl`d9HpHne>_0T}GZk z`#v9%{tuJ?ep@sfYI1!h$RmE<%gE^*8BZ`B@v46*kF0j9uA?_o_BMCmyzZ(<62l%j z5<(3ZfoBRWe+(}Asv>8m75~)I*IA%eq`m_~HN_TAS^>?H3cxWt-|d2*gOdk5yTiWK zFF&S#RoE?Q)(M@FjHgOnNS+H|O>Boc_0>Jzg{bf_PTf?!VR4H1f=C`ux&b~Q7`wq_ z3!b4gPhZ*X?YmVk$a!e(Pa0xCTrj2A5{$#~jiSv!iiN?q?%a=@RztrJS%z?oc_uR2 zXFNhc)yzmHIAQFYNb7-PZN9;z3LCE)*E^yZT<px=@`Y{Me-{MMP<tKL{WdZEF4Phl zdMzL%cT7PuXVS=^;hVGx><C&nsH<QSwt6v;11N8s^J<pBql(Fi&eJEWP0yzFl<}|6 zy1+toZM??Mv<-r`p}u)t)JHcL&K6bJ5I3iF&iHi|oAhZmT0uv4e`*QOA#=jJ4uCvu zYh?3nbMS(awT2(JBT~xR_58e(1j|7o*Z@kM2`j(_<A9E}?(%gCB{d`#rF9Tp+;s9^ zFUfZur-B*_Cq>Bldb_BOiP@Ki(;D!Ynv?sY@GQV!#Adgbw?)8ouS>DQs)bQ;C5yO$ zVw2p!+fgwalyUbn{HH%_=umHUmZ5K-aXxX~3tJWHY8cCTGI7CRBm@P~EfwupH0{lr z#o#+s_Y72@jom(GMx6fRnL7ByB+#SJsp&HVWHd>}N=cFhjf#uVfB6KwH<`Q9&#nop z7A8+GD}3!ht!>pxS^B~eIOn9vo5JS5&K1<EuZJcmpqY(%%fA(%2;q?Co~CzZqXuc& z5^iH^X|NZwXRpQE?DgwNx6~<85<Ho|{kK}Eb~z7L&x~fsA+Na4*<=@2o^jxv9&WE9 zPVjWhsxCqj3nH2Dfq9O<zoFovNs|=(r@hKUvcUUj+*A+?%}HE^utIL3iAE{uKm+nu z-QXL(wPwCMt01g4<|JANPNaxzXqs*u7=P#zr-NsFc^L`L^40=Q!?_BjNE9^GZK$8* z{_$|=1_2E7c7q_X@q42lUn49mD4I=qST+tN<&&s9f)%FYVU&_%i;a7S%~@V?@Hk-5 z7!~REMs?od4Pgl%!<HT|=?DAZl2|!|Mq2|<boXBC%Y0*4NW@8-9o*K*=ZR~&lXmx0 zE-Xr_l0LNgx|wKhluLGCO>dO03miD6rriL%SSkt(_T8LsaOj&fcDF#uFlnG}jU!zx zojN2^F$^bo5|!lF7i>nYQn4;(so|2uHh(b$7URa~8Fu2Nc?en3h+M&1?iJoh{G?BP z1N2^RQ}8}3Ai3UlwqwX81oj#6#5gzi^ANc29WX)-l($ECV(cY-SXf+`w8+T-lcAu` z7}2;&OO%W#(B!GJ%PS?Fx;}GLoxbb}gkTkTm2hD>XiWWa0v92?U=wfjdxWSyt3-;O z%e%7nwQ1}YZd<su#c#3C%Ys>Qqd_~&hqxk4_!m`CCNchdV=&*KB_4xS(Y6uQ>W~c8 zqPNBzg=FHFO6tQ5P;K;?#Ip0S+|a$A+1f#~8wJ%vn+5abv5;H?p7BKaQUeR`vI3Tk zS7M6DIr6v$(9C$TDiD4vp86{=?-bM=TSQh^ZWAaek*t6^$dCbLqY@#(YzLrDANH_Y zD|s;(SbYnNG9UI659!!bsYTZkg@)416Qv~281kRiMY{@`W~B~C=YtXRO@#gB!DuQw zG2M0@=L%b;Lp<FzT6MhsjZ~&0ZK@_vdRxas+RrmJIiE7jcHRTerR!IR4&I=jRhZ|j z`5P22SAmDZi0fSO*=P0KyCU>CeK4{mZhx-8*u0qf>$RoQVf~BLl!ib_QV(Vj+pOIq zI$p&zB!8k;5FT|Y<DjwkuE!Gi%?qJPNE?=;r`d^T;XmCgg@#gLO&IcQjTiWFOpW^G zW9ZHSPIwjeVXkZyXwLb51Ir#dVhu*an1~v0&7i!RPk6V&RnNF(^q_S?q9NP0)#0z& zuPQDSl;$XcD%1tYF&2@+iW3{Axn()Y5)cgYK2I!F5LuM9ESQYVN^*ityb)WpR!Ro6 zn}NNsa}E8d#rWsCTi}47xWO=cITja;ZtEB?1{7<UYeMiF7m&TT9|ryrBncHv(a(VQ zS42Y^1+JaC4ZyPX!1DQhIT>ng&tmG|f$qo5cO40}DkkQmibvY7?$3mePM<rvkkr+x zP`VrH$9`GORBRg_pLWd7Pp|nn7PtG$=vA_m+G3pFNne0quMzylGnPPx5{<1hAHe{P zI2vcEMne4Vr@D#Ni%7UHtBC3TaJ3@x2j^X^cU>)UrmfO9{fwLL?l(s{zT3HF0rf$Q z9~SiFCOF%y0k?=fHWG%vLCK<VdPH5il_4(ej2~H47?ZQ&8FxML6E73E7*&b_G{?po z=Uzu1xflAF5)IAJEF1{sF7g;J#RK&-+AE|dicxJQqEf&XO<pAo5qxL?7dQ#IK#1FO zCc-iENKA=>Md>58)GgL&8E+{|Hmm?2Ega8}R}<~^L+ZeL7b?$mH+$!~wub`&4ZzVv zLGFgH=R!a1OAB*wl%BwW$KMpA!XGd0Hxos_%QbWSh!Z;&D+#K|F8g|(_ubLYZ+yUb z1(<xAy%PubTWf#{6$1==3l<R`p}C5Tb|7RiF?j`edh0G=Q7ph%7A#x_U&wc?Am0%o zDBS|r<?_&qUVy<u-XhGwH?YNSs^?*g%0fqYWte=~0Dgt_f&n1^b8>*@*<eT=Gh+v5 zG#26(^-zhxgHrNXSJd-G$YRQshK4L%DK@rpi&Bbk<>c_~-&S5SCVS@FEWmeXyoG}v zP?rW-A>8p~pJ2Jc0!dn2Uw<3{9kG^SB71dU3z;7(_(_b-0y5#y6~fYoW1(r#@%X$X z9y(<Wfru10>^6T_$d#{?LO&{0|CZZuZ4CrO;o!!P4~HPY2z4{L;|~#F5k65x>>9=~ z7yD>pXc%<R@#FcqZv=G(SpV_MVnwY*g+gY;I_v*nc<mdZfN+h_ijstYCp?^<w~`QA zV%fTN5R!xwSPSa)_->)sE=c@@_S)ol4)VhJrXS{NW1*KEvhZK*qjw+nEmm8qhhT0Z zTSb_R>kETGwZ>>n{zf>Pbzq)Z4QF;ns$?QXh;-cP3CORZiL&ocvP0JW8|Uk`Ga-rR zSvZ@$ckHXT6`pE@@U<9upVh3Cn*aTC#TXPP(%@-sHTpl@o=*ZbHoJnjL1>9tCO6@W z1kgu;29kb|A+(@L?@4H2xR_+7K#7%DNQx#XoeNzDy@|p+EA+I*Y;O{AhvgR?1c4%O z<NPIt5NSN)0c7fC1qj173!_~hT)DH_Gad4ydG;vmJAM<J?icO8XhEtJNOvH=n-3U& z8wMM}?$>_2XpI~n@{6`zv>@@ishedNtr5EzhyF!t<S~zd69zXTR5JeXVCb*(N+KSN zq8LLHpo>+B4im9Q8wxS_AAL0OkK`m!8hJ}>?q0~dpa$F=v=jf717i!!1I1Do@8{4f zs)@~YYv<oB)Q1{o34IM4q1lJNd|@FgJ(z(*BMW2*iepv8-!Th44w1>PFfUjQnzt+( zFrRFA#x0BY{KQKd0^Bx-`7yH=&P<yNfC8n?C~OvcA>DtAY|!J;*eqe9n>P^tZK_L1 z0q(-05qV)f6R~>j{F2Z0&AuwVKLV?=_}FqwRe<}rXr=EYuoK^i&JUNl{*N$#607$1 zqks8-2p)x1;VxQ-vc5dy(~I`gDt15mgXW?=F9G`4T*xUG7ep`k_n|$c7aar!Z(>!d zA)ou<H(TGDRbTB{D+9**LQXU<jr_*;5HBAv5q3n0b3eIIlEMvsnC|~3C$ovCdf18g zq5C5+4hql+{14LNKT^hpl795%0N~?HivO}76NG={fua}(^>y;VcFJqz#bmnz%s$V? zUf|rUl>TDGc|6vilzjK;jLW?1uL;r&vLJ=k3b{EHm|WnbW$Scc^S<LhOn`W>t6Jmc zVNsygcRXSq!kNjRE4rYp06iZoy5RFr^ZjpeE^U(r5*WR!7AC1su+dLd`g1REiV$kH z7z1D8`XxMW{QoHQbgZa8Y{R<me<k~071W$C5M6{K$o!4hzc>1oFrtm1r1d`^#Qvvj z5GET4H);vOT6g|d^IWKbG@if3crWDO^B)DwaWx@i!l}J#iO!2(eChB?Va4(NPip^a zpnlE6kh+Wd&c-fYBMA?TcPv`)j{BYiP+(fPww<$#n$D4Zi(mTb9C2Li(z-_$ukMag zPus;yebGJo(xNTnxxL}8yWyH2n?{ZOkIH6FD;GVYd!Z`ehZ~(c`}>QNVD?oHISbS2 zk3m@N_*bco_%y>@|0MtO;!XcjM@}9}?DHOf%vJGoOKV6%OmmSCjBYF0e{u0D@AuX> zGyMNN?wWCD@!QOJ&|tSt$k!LQQRfdy=aW7xUK$f^4YmAOhop^AnLmRW%(5X)zI5D4 z5ykZrcMJb)4z6%X5G4|zzGFP?(>Vbf!T-|F!Ve9iit!hE7$%iOvAJnu;fJt))kRQ< z=!n<o&#|2A9n4_ZFSCN_mZUEO)C)#Hh*Emgr~b#hUOnLgsaBf2z}s_2@6hMpUrXIN zm_cGO0<J?^LY_n$HM$8}{rMk=`nd$e<DY<#<Bj8t{c~r$!jGu`qVQ1Y&>WO#pME3U z`*T8nW~}g~BhpA~P5~AGWMw2lg}EC9gkJ~G^~t`5NsESu)(D|DR*!H;69e?7%t#}M zv_3oNH|<ejSn0X%HHEV>|H)7JDh|ClGIP6|#)F15&Mal`v;5)6F92|^VE2zU6zYqw zfEXJ538TAoDw61b5@axP!^@!GjQ;R9;-dlMUw;#k8OWbP>OCXzv@>}ypu*<IzZnbY z{ra2DF(%WV#DJ5^rfqD<u|lqV`jOtYzoP9I>dl!@pUB=U5CP61)(P~!e)R=?zxt0{ zoAKbfuin@8jc=b<BREBRRRsrtI^!P!A^%N|gRlU<IEk4tmSeEMUlQ3cAY=>lfr@av z{U06C*+j^O(QQdFx4w$P!d|i_jw2eVbtP9Q5s*x$=YI3w+yb)2Ti%D=Li-Kq64m(( zaQHMI4PG_oi2w%AmV^GnVefB^LY^^1kdi%429NEj6sjnWAyjJ}BBce6y=nn%`{9Wj zVEMl@lIEauZ<W*V*B^XBri?gX2cM^Ef2z=vhK#ob`W{+1oBf|sO!x}T*mL_6Me1P8 zG{=@IB?0uD#9y-f%{HNc2RZANHasiNUO4%zV48;Fput&fKK)5K1=8u6FgEFbvbse> z7*t0JGyCx8eDvsa6LD_&hu+^8e7gWAI=6T*tx|~7-jxupKk9s6W?9f&81^XAa~5Jk zulPsXaE_Tl+I|9+;X-xu_sx1Wnt_dL)tO=dusP(rvX&%vaKnV0SJ<B5`cIi<a^OPc z4b6$M@B3mXfaWlv7$s*)-6M!tZ_~4%Aw_qFfA<Y5pfXw5BIM5PY=`=H)vzALGhQvM zcVbAvFWU@>UWc)>zaqGh8_8~%gW<n|m*+ty;)Kw@^@F*aX`CaV*qlaQepe&I@B7eC z1;UzSlY0abiZt-=ZYz3+0QXb~>=mg&I#h??*<1R2|2f@Vy!zdp-FZj+oi7n0z8ox@ zh^WrwbfD+7wqwipw|IqTd_oi`pFpy<MF_!PA^X+C{=KyUs2~=enM`_cjx{2A!w%Dd zF{b&?AsY&B9{Fd7|F1xtxIut>EEL>EpM{Gu=3xd=HZx*C$j<%W!^dzeWDsXyN1vO| zd5W08y?-T^l%gbzD964!z<9^FiJqJ~@o$ch?4f>~XM9K$*etM@nKB8artxW>92o{O z?L354!05o-YyQzlfw-+jgHoihQWw5vKgEKi2sv?D%SG%vE+2Z6^Y`6eQw}8LBHaJ_ zkusbyolo>Qj7B!7fB>)q`d;fho`1G+u4tbV4KtE&!EYv|eHMau$ARxZ-v`YBsMl^w zmSt*{y<kxLBiN9tR(##Vf2w;S<yIMvg>oupPMmyw00_BrU~Z)F-|^NG8kK;Gbw~s) z8VrJ$%G?;8@MEX1hZI73<NU$@dKEF=W#Pr31KiVds-Azbx5NPj;1)ZX{9G90(&q;A z|D6PfSIdI2&>d~VU6CavE9oC0V{QI=am2rKdG1Gc;sJG-?AyEU;n3aHvKzm@g{9TR z-S<T*=6~oq^w7-(9)jHcaxmbo)cr^V01hvkn-nzsSA<>(CSLLbUX1!)3X_D)X+HN! z%fDGn9Gi0R2`t2pXt)Z(h`W*@Z@68t>7DV|f0G^PvBRN@c`OZeaWRik?%eIv9p6_Q z9G(N#ht;pwKNTo__$OcVtG;^-Q|v@ZxtVwZbQx3imLyG^%l}HxRbUQu5_4)scS-^+ zM*&r13s+Ma7|K&RmR7D@vD+P+MP2_wHxPMBox3xoGSNG69gj0)OF%#O<m8RD28m~z z;Q|E$#YC@~jRH^SSjT=Gblb>3k%r<iP_Vytp>~Dbk^z23T7RlXY!(cAe7)SF@l`*3 z4HVQ~qB5cqTOBI3rk!8S9b-;@#VU$NIy5L!kw<wH0VeoOW~T^V$2=c--<>JY5{mcj zo+t3bw>7%{(?u0JKXlua>ozGMfiGpkEB+&CiqASWby52HpUK>d2)S3pX0LB|Y+wgp zJYa(2L}t363(Fhaqz;4}dNuM}CYBpx^SH~c19^`2E;TZ2yCKvL%~`UeM>!`H;}Q%e zralQj2G*KAAE^e{F_Fc8-*crJK6nd6^Gy2SK<8kG1)dIa(XG{jfzdy#G-uB4wq4r? zZi=!N-SLNL>egZ|AAQ-z{|PmXr}eC~Kj9F4NU|G!`R@yrh#sdJ*kB8mzlYyOG~mGu zy7qbIwZXua#Oe05lw{Ayza&F9#7YC}{2q7Du&|D^(OM=`M1J#q*H`v;;KQPH#Gb!z zOF?UIci@4O;4qC-1AY3cMBfGMSdtoK|J0W+gKmUl&*yG5xJWu=n6Ob$oL2=45y}Yi z(K;tB)6+PwSMyoO^2eBGk<J|zd|bxAwhR`d+bDuG@BjvVPz<<zT{$&%gg^xC_#KHP zhWj^BNf%Ji{gV5RD^#<vS$?0yj}gbwIaFOr=@;*k@7M**_Z_<8d3TU6Xef8nT)Fb+ zqqaMLUe;%t?VZ*7RB7wYb9c?(;tt{Vx4uyQW$WYLIu432+j_G_upC=hNH09Y&w9J9 z=y#g>`%P9$uI;%!h@s5#R~$jdmNT>+8u$;m!3}5I(82CQCHAS>8V)(SHAz^(JG{;m zp14sUvccH3%=1`nG~tj|4}rRTL%Z)M#oFbd#iutS1|f(Kv*m*9&!^2sMk<v_&8rfA z$Eb?!wb=)0dfnVzSa5~TwO|^z6~lSf<l5N2w^{-is8xHWDJ9}cc!K<C*^Kq>nq4k2 zU;rUO5?JD_Pg%7N*L24wpLL@ls8+%Sf1)Muf7b(N@M2S87Ou@<JEPYE@6(bQvQ7Hc zJx{wB_eauT>DSoBI703rSO}0zVqH7j5ui$aUinl|g-!#iBQxXJX3*IibUja{p>97& zqhJlhQoTZ3U3%|{gv_{;)#M6TH@m#5N0_47RYWySLW0C!a@qBp@#>rNQ+L1LxW3nq z33-m=+#PFeZ9nt=o(1r`<iJDoEBA0}i^&fQX|qQ_;G=%9|75^eV0U&Ym#`%aqE>1? zgf(ARRg<%0I7EF3t*&p5?vk9)lyWckgJ8c~zYn_h2Dz_5LqKHp@96~FX@x`Qg|1W! z+7NBH>jRTdQqnw@8SuI;&}xH#<>w}6T{~no4&ycpE(pa;)qekrNVJR@bTil2E7=~c zKi&^^qW3*VBI#`bx7lJL8+*fvXEH4xc$F#mZGG#Yz;uhmBl;nm)(@B2U34az9FbYC zVIfxjV#JI${qsNNk{-OV4n*==Dmz(UXkH|kiJ<Hh0H6u1xWa&0X7O5S{Rpg8BYT%T z@Kbvb!AkQTd>`SNvFZIRWp()}wg1u`{KJYp0&Ecf41VfQ+A8qGDInxt5Ubj$kn(e} zWBr-PjR4clSO*<8XG`DO!(YHEO39J>k57seyzc&&HGhl#lL^))w>eT)w>eE?E=I8d zVABK~dFC065**%|lRMdA%<GD6P3!<RR18g$^HvnySHsh8e~LmfwZ?V#RxtaZXxcP) zqZu-O^JN|yTdRW~xIrtJaE+l<i2^s?w&nOA6(jIxM6iN*cCiv3@#HUUZ5}Q1v`oai zWTX;@AA&vTU#|SaiVRv^I3!x~UD|Zsliap3-xW}L#0aJXrK!`5Qp1b=C-fsBecfl; z?E;p)m<=L1U9%&NjzEx*9ak1`e)^|3vAl;2o7qIWLD4Y`+q;xHGcDYvM<1F{csLi^ z_94~~ss$2;g4TXT*JNxH7(pxsr*Da1`*O`f`rkI8c$p9zioJnFJLn&b0#7`vE@0fG zdH1_iA%TkDc}-gI<_V%TF2XTa{3x%h@wr>UaVxte&cTi06^Tbt0aH(O0)~^1Os89q zG(1_d9+3*&`4<(#hAyDu>P&9D%%k{|?%8+@cyr#GILSd{9s_mC#EFo@rSjIC*0C1y zC`}u(=OjgSiL}tEm}w96d>JDJT2YsivuOlx*moAhFz(H0Pw4PRMIrb<+ztmD`RnBG zsOw(|^bTf;nDM&$Ch?oT2yMCwL{YucEfI2`HgelaK4Aab+X)Rp5NcWadvo~F{KDV~ zC*gA260w5d`jn=Yk|Qq4eUx=X#%d8UKtwZ*ZT8`0KCYN>J}i}(`BrJ`_qIy3Kg-R2 zWdrgj!`DGuEx02c%(02`!m;FEy71pZcY#qh|Ln7(0!TLFDGyt_Z4sC}_!bqv+7UfD ze$B@Fjb!OiCZv4>>mD#Ga5`0$o>jbz$r$K*U?4=j8BgoYgN`-NzJmkorLk)^{%>-p zQ$YV0E8sxIj&XXeB@L4%>kdT*-PxjJ&|PdH^~wT`P5(qUF;@fr_#McR)RUi@k(<s2 zw?HMwbM5K879AGYZ8c_EMa1V0nTv?dDS~w4zuZiy#`R#X_N*wM=F4!a5(9SJD({ai z^R7WsEa~r{pOVh041fQ%`SrW=)8yU-1dvs<MvTGzP;VwZy)Eu!IjD|dqkqwNi@*k^ zeKL>!x^0Jp|H5msqdl@(IUr!N%&m2pcw)jV9RMD#!KZpP&-#wQ1=CkmTz?C|y|G#j z&KPUYB@<@aivJ3Nm=u?cB>sbYx23fE?J*q6Wt$Y}|L(GF=gy7t9z)x#rwdJTN)GV4 zxVPY?m0uCHcEvv<J*BO~{(c9^#!P4A0p-hw+~trbE8H?WDwg)r9Aq<y^3VtRGlZX{ z@t=RF02#3Qfp4TbI7$|J?zvjwuZa$K3G9?TN{s!y!0mgIpeBS6f&Zg;&8F^PLjU6~ zFRBCma-A3eSmXyAn&s-d;0U}l>DAq_Y}TpE7SI$D6m|QMoBsvbu4A5D|B-OlwpsAS z)17bt_;v2r+S5{)$<FZ1S4)|Um(2;6&Ixl#1bA!NKLb94=B!aaHcU+<=XeT&?JhzU z*j7>{Er2sw+>_%5x;H^#8v6C`iV8n|_pAVW3YV{c7&7|7p+|*!_z4%^FZa{3xntOk z0=<O$(bs-xc2^`wf2!*}alLrY5DW-;U4pH@X5-WC!pTj`RV!Cxx)Fb05%B}G3YBKV z!!nv9WV$==K?T}~C*}Un_^DT2-eZV16MwlrN^sULMd)V#?<wu|A2HbTh0$0fQyTa` z&aONjs_*?@OQ;A*l4VGuB$Z0phE$TGQb|HPT1aGPNLflGMP(V1v|38YHi}4#HA{&R z+1IfS#@yd?2d$sa=WBkw`pevV&U2pUInVk&=U$Tn;}IQ7JnQ3b-#Ge_j>q17wqVkb z{i$e&UdfP>5BNl!f9{-l5kWqmYsqSKrd+NWyb`8F>n8Doj_!R0cZvTKv)N~>_xB99 z%bU};2nf^#vIEi2`XX(*Y&*Nszoqcx5iZ0&I<f|H7I}m%f7pc!Gl=8OZlfKHU@Jiq z(J)RMELzo-)nH%iSa7TK@`$@(KmGENm5jIX+jSCqB_^F7DM4U4wZWmgN<=R!2r_XC zNu>l)EUb!G*%w%Ka4EUxB!BkZPolsn+V)2BPy#6@WafPFpC;{sprPCO7wh~f3t5rm zn;q7*Q7Cm6rI<}`M>e_QuIpx<0Y#6c67=X<ui#>`$r#MNNW#3YGRK`2$+0`;8p&&S z`8`(t(h|IIiE}D+84vd?`u@~o9IDxEZ>g%d&UvA)pup&}j2*i`a?<;3@QNsW?(^fB z-g!c<&^o5_I&M0)<CirOgNx4?SL-9ltpNYxeocKFPbhWa_ekz{<eQA<$i;;%De|2% z2(n!}zhxvRE-eZQI=DxC*o{CFaam8xciWozLjnkLU#hX+^<gZn$P3)Ye~wd6QMiO5 zO?O^81osS1`e3{au_h&v2r0FgFtJ6^m$3BH-wPZ0nsRAsT|~&%4+AdZzbN)^Fq^ds zijKeYSx-In%waqfe3VzK7n{#VuVV;^KUgS7rTQwcgn_=5^HWu=pY6%)k81q;F$h*T zsuvFlB8PmrTqBi?mNn~qwESCW5axnc11{G0XBO_Z(Lc!&&mz%)yZ;-nb!asku@b!< zyLxfha>22C&3GXF@V4K?KRME-3smwvGW0ok4d(tTjK%abkftCKbMw%UUW~^prGM2h zy$14p@b$<dO`86tVr)4}e^pz!H!}sZ<9vQ81q3y-eoWZ+7yqgclQe29_C*)n!P;p5 zI(}&M%l{&eU~~sVsr>8fhLYp|L|%7d0)kxQZXhkQ#FXr}JxdIxI{3KFKs=7|p<dUl zFe%9TqWN(1+~Ni@+?tt@o6U-7toB7UbrgZIlJoKijf~u)2kt1YJ!}SS6V4-ubz%cw zyg;@7%DBIIJUox2(kX`^i@m4`SGq8wcJiTD0j{W%M<PCNqqe9f3BO3W$WTiOx_lzW zb-q~*BpXJ~Hw--O#&`-ulV^otEQyw&ivYF@;!eB_rDqP9Q=|}He27W=526^d6wV{9 zh3^pL5qPNZDJ2RyZ6e0p;74%qB_POF4hr$Y8a&&65!jg<X-eIUgw7pAEryBuI_$7T zSYyZM(ND55PGJQ`;MCHY7(^#}*>B94oR@Ht6@wl=nDxt~Xy(M$@kN(#twt7<Q3Gwb zkNxul_qnhh`|m^ddrvYdEDtNcYeD1Wr-WK~#%98X)1)bVd_cVO2gSuAL*-#z^Zi@v z$5SZo3j`n7d^l#4w%6raQ;}NG+lI{xe64B2TBEOuE1mHE^Ec95>enM%*(l_Ff6O54 z*(DUvp5-IIu(!?=ZYy=TI!*&f-mCt{$(uUIpS;%*8d`wd(xSP1>(xi7!GEv5U#8ck z?t6R^5h`dOIfwYr$Te8Q|F3m^Am;Qq1!v^DyXO(s5JLsFY0`K%c`*#=Pcao`!kJeB zF>Ilp<A?xN&H7wbb#Wjyu(|)-#-+ZfrzO^u|C32FnY5X-NTrvjI$N}9+Wk%&qUXU0 z89&dS&sd}IcR3e}{Nuo1AUpvBEcmOMI_1t(Ah42Jc62Ws8{tPwT}}05XHcv+zQ&Yx zujDUEOH>N)?faDrEln49^PwjeW4(`Q4Z01(?fyO}Z@q5)aAu*&Q9RtQcBlCL%vcHf z$5nrmiDa|87l(aaJJc^lj~U4f-#M!RKhygUw(2$Dazg)NzfA7m>|~?P{fq4z+c#x0 z-0E*zhO<}t7r{>~x$q$dEq%rJ)Az!MEzJI6BALt2og+~^59QnV!{3?LG!g|a$iqht z`Osj=silxsy~Z#vk{5qO1+bJyIquDHA*JvSzKBR;&JhQ_gefn)7<}BHL)pCMM!Xg2 zHEw4Ge@-g{Y(IqW_n{Ku7V3`^t5|Un0}5zy{fsiet9p)qz%>w7|Il3(>beGXSgg-) zi+#X4b{n6E9`i*l)U{-AhOiyxWRn|}u?@kUho_j$Zy>+dfgq;3m?lY=(E@!HRvt+^ zcektHL62t>!}k2I=TOh4)zcWy!k_Ii<en7X;}Uc~^ci5c|6pB7VZlv-Gx#lyqWiC6 z_+eQ#iass$5_K5r&pT%fDH43qLO#%YZ$0(+aEq~33p;X7VsIrbVP8T6X?Y$gG#J8! zMB<1RP2U^#sG?n;P1B~Dz*0xfeNvbLzSE!ypvNWYS>eC)FFH6-PUefdzh2K{^!Dln zg_wuA;YpRDzXvk~cKlB!>LrgaxGIe9ZurmD7&!~8SM@Eaba@Rh+l&7_KNUCkNR~`y zquDmB2m9}m@k1pgD_s_Cr0LGYLaTo#l7e5H=d8cUk5K6NpB$QtYHfTne9?_o<>Gz< zqwzG?xetzT&=d2Xf3kDp;Z4cZP=9RpYQFEcDDXXn2~YW}+M2g6ru$sn-{a>?QGoi6 zFCkI#?W#sN&<v$a@O-~*m=YZt@64n+fnAMej~JWPTcW@}?uQTko%fT=3Lq5H43P_1 zRfb<PKv@5WD@Sr?Ozy*}VM`m$u;SilEX}+isu=krqG0i!J-L0N%U9B+#$82DZ+kMl zX%0o<HqZ2iW)qVuUvay8<Z7kaqPI}e5iT`&j(eyXP<mNu)!=PN&IPDz7t>h|0NRCN z8cJ@<(jCZ7-b14?8@yES(w4r6t1u;Po~_N{EbBGeULHveJ;}?M8luMU3!XX(7!a4{ zk<>iRv>I>=eX5GZrwCU3Mx-ea-nhyW-q0QeK1eQ}uVr?DnxMbj%nHaiV_zu^3NBsA zx#@G*t<mk0^sbq-g>z9Bw=+KD+%qU<HHHMg>M`MW!b1t;=GZTnvPA(4e1hT2j<{*u z$ntwwJg<QqnUf$%!If0mR~JJ}^}=m1)HjP54FOjcT#q}@v=H4rpJCVMcCg*;+_By5 zK9m&L-Ff^_kL;9OcW<Dm>oEzOHh0rvdY4-sAzGmY+OE9F7je|JElH;S)K=^Z99RS= z?`l=^`XApIh881+BYv<gr|KG`cn2HOn2IGDzb*v=-!WfwqnQX~6e`#jTE+rggTgcx zJf8W6<v@xMP@XXxmp;;CE-OQ^2H5Ltw=)0?|ITpA?5;e1lS-d@2}`{GX~{2^(qqp~ zEV&m%JE6_w`HXx;OOsYLRAIJg$lV+4)exN6Dyd2V;u#UzG>HdnI2QU&mv{h&=P^P2 z2D<bx!>!Mxg3Kp&t@Uh1S_d)jsj+qieiytJu-64{R&G7zLeq_({#uo|DGD$DUMoj0 zWfz|3v>rtIU$Wsc>$>8d5c$?=(}YI7rGXv->&lr}67#DrfI9s13&4F@jH16D_p;XW zapT$8IV=G_6Ei*xZL_X!FuRO}xQDl~W_wSi8IZ)m{}%l}A70RC)`vwiE2V$c97!x; z>z5hA&}`sPCIzbmCw-kT7j^5p2W%0zc^AtgAUA{mBLZW9u)^HvBqK$dsiB#ez1*(z zs|x!PjNufh-#DPxVn(<lCO6d!Dfl8y7zX5+4jtMw>wBLuks8eXRUfe|5>GgSLHIDQ zKdI|^Xpbe9b>-gpP1mV`a7o>zY7BXIrx>gzV;|ut=+?;u@ON&+XwbAJ|KJ8tp*Q*u zRN!aj5$63(MTiczLI0GAwkI|4PXPu}iFfS&LEwaWzNl=TJ7D;*U|>?6e9^XvypcPP zU<8McVA-=NxET%jSxICsEJ}(Frlvw(cL{dpt%Yzwi9BlFfP1Ym6=9^T5ktde?q8td z_JL?ttHbDwO{`4|%^k7^f$(um1sSQAsDZERDaDb^JkTP@Z_)fgLSHqu1-RIz;wsQI zSlC}98s;)=?E>G)FbI>^tUNRkRP#E;>DmuEl?NHgt|wJtHl+uQDCi;xfL9K7h%k|J zQorCHnwUB;1H~UcpZL!Kv+eUpyp|B?&QF>XKeWCEJ_j@r{rw}ARRPpt6<!VzBu_c* zOXF$9-?>WI4?ClfstS!4%<h80AVLdZKc}Hf_!;=*$A6N01`<=>^JiZa{7x^Sx;*ob zL9MktSTvq^Jyt7Pr}aZlu*Gu!;yl4PoD+d%<ww{Ac==0AMQ+#@JFMUD4K1+7eu=4# zKvILcJ<!@%w7)=e3EyN$2sI!AJu%Kn>vtjGd1BPRFdlX+(B$~z;X2xY_xU@6GWcQl z1xN{>t+~U%$n(^y{^4-7oUEe}Eq<uodK%BfT(=4|&;BYOLbU<nao^~9N*o?PqUVOj zbu6n>taOT`>g(oCl9yJXdFanq5QT0t#puw8#BEiyC!Kr}j5qWFroy1Hx<GU1UvF4< z8^asoq-}WW$mj**eC1*RID}k+NL0S6NK>TS@bUek*~Pe_d5FX;5g$Zu(2R8JBo|+Y zDl~Sq0UN@YK{deZ&>vhtkkYi_S68(>(7Mx;kLxxt1ZQKeUZ5%QCqW($zV_!_G<7dq zHcqV)aUU}~f^n)@XFaACYr8*mtmlGbH$QZ<h1X>k!WW^^BUW`K(BvVpZl~Q2<diS! z3;FD^Ug_1biljyfsK5N!^+bH<Qbc3LSErt|A$9wkPy_dF5D5dzCH)GK@KOj`8sQ|) zS@hQ;UM96e<=XATvT@q|Pg-zC!0LQ95AN(u_wAZpMAvWpT>)8<@9*A`=difj*glek z&(DbEvS@IaEizE%bX?Dt#c}|`tRD*ic$cGXK|55%zb+deO<C1=(+?G0IZ1pl6^H!7 ze(06>zLs|gIQ9AR&Gc8Np*hxaVT$TJ6wJ^>{xVUp)L7&G{N%y+0Y<SR)(I-?5_H?U z&66vHTK7~C59SIR_1#Cgg5=Y0mO*hn3R|6ny!PxVEP&G7aqdI2E@V~bp*aV8+XAdI zPF+TWe}r2Quyu`Y<YNQPh_bXgu;IR2fN`vG&%y*p{RX`DYGH)k1umyPaL_?l|2?^? z+`&D$aLdmK12Wpf`YcFh8ohFrym8X*)SKeae0q5umQ{Ua2Q4h|#8bO3+V|emW8?g0 z@}s1Qj1OGtPC=M3C#=Itxcu4CeeFXTSG+;YMeI1nd;|k$wYGN&Ix=Qo%Gr2tKRx+k zC)5kEY!>X9)?RFP$<o@Djvlc8u&g%88IuxG1#0N8Ogk4-$lYF#my^+l14`z)c+$ge z_wORCj06&x<?|>p4pf@j^ic%k*V9aMtZ78%xG)F7I7B$NFTUII4d*=tcZU+ULM8So zXEU+PyM53$X^kyND61XTrwx(7T#c=p3+<E6H%sUuN5^m3b>A#=BDPy<#hNWD9R9eC zkzyKSWjuzOqgn1=rsq1B)w-brRhUS7$0HB1c^pz$N9lPj6dw}cO3;_<S!&ziN`CS? z#V>nvJ1RS*3*yV#$>Tdbv?0o=cUkPo0V_V;K)z{4-=aJa9!c*IDz9BeR+5|YDACKX z-C{-SP3QU2LRC3m%oZpL^4UOLCj)ovV-oVI&*qE`UeVpwXcpoecE&8*df)GSKKODd zwBrR?$Dy6R77RxoVNSNZ0JP_@C2OrJ4UVUt(~omai(AV(jGp@I?XM$s`c<dM0zIF+ zc#R0W^%)ky>md)qSiL`<o@7_;q*i;@_^;PedWm?W1ULP3177vhgX5Qb?(S$@k8lkg z5kS9<d|cM%+aGIfT5}_ankv)Fxq?wU;oX2OwI*$pP<4hDh8)M#DL4BFD^0-Tz68A{ zC$}TE9KR%Dc&X*-QM1JlXHu;7>v<0{ibuF}m_nuW;m`~{1$>*{QzI3NqZE@*r;L19 zG!livsKwV64$4QI4N4xR&wDHYi4Z+U8f#afl0IrP5DOLZNU5?|Z$QRCZ@RoIWQ&JG z&p1wS=y|hGm5xuO)cALf_j|#qvl8kVcpdawZX_$hJ=<*T)q$*bF$c@8Q61uV9-;NP z2z0iv9k=gnm0Q_m-mQl2ACIiX@-<u<qsN8+j%jdiKFLJU5-f<1SxWQ-k=BBZ0%gaE z!F6N9WnTup;u%RQTPUNL<s%Ba?a=;__Tj2_1-+NL9qYEAUjf3naa;sij@WdSeJ^lZ zwX@CAyW$@WLy$d_26%j|KcqDWRCi^kYm>{V!E^`mQ=X$?kpk2e3oSnbAPv)8vU5CX z?*aFefi7G~7U!RAMXKMLlg1NG$9yFb^5(A4r!BgZg4D{r^P)@zpH3mp*uH(cgYI8z z?A=NqG3M<UG=EZAy`J%Ik1n(uhmLSwMQiQ5ElOX1d7m@Cb#R^Og5K}%?{SKMX^{VL z@b`U_cwD_76))>3PBT8*xZ{9vU+tp9G+iCoH?O5EXu4&3fgvkYEH@Rq9vNKYan2Qu zE0gRAc6TrTj&8$p{9oCJ+;72=MiT3KBQw^jcah(|xGPPTpIbmWrjBsU7x!!=71Lgp zjm_yeIU<+dzK$B>pPTo{WgUG_eQ35EKf07_ilKnH-FX2WyXrHjWS+2sYX0)PWue0r zjs`|8V|E~S1L{y0U{~@ipe`fxv6Jm}S?|cfqh%Wmx0$=$jX5vUo}fKtRbZs8@5zKF zNqKxr<R&eT5Z6=-xXu4L=tJ*YS-MPrxQv5cp`X;3;|1RzMK?XJ+Ny0<QY!YC)69!e zcmp#GLzHkEx;kB*10N3JD!JY>pC_Mm3=lx`#c$^mh!NuQCg+YAj;Us>YAT_;CvUah zkQ#%d-5quFn~cJtgMxhQOHz1Rdbp)F#?+(d<Y8By0@5BA1Ui+g1JP{j<_80nRSxHA zr<Cuk`jY6rHLXXp?WvH%07b!JoBpC-$5B5>f3tS9j1d3y<u=`H<MjZK?leaXO6gSM zhxf#)(h=?RFS;&x<MOYq#O%&9yLa06I8&(xo+P*f01|UpkJA{?(`Vi_s@zf>65bKf zVD|1LvhpB>+_E%dTPW%2W4x;>UhvlC9(r0#ZgEemcTEZnz7GK9N-R#dCa=taZJA@2 z{QY1L9IaRf-zfD*)n_;BnBz)IHQz5_z1N`h_?}czPit6}`nkX<;)$u&3l4!BJfwW! zT)aa7Vd)i?oU;W4Vo-cCO;9Yt`K-3>32FDOTJNTe(8GZId_SxQ1$oSGFZ1%DyQz?G zk(LsM`~y~ONO~L_sMC8^<NClQ_%g3TXKVM^Wh>~XjWWv5_-nt+3rWrHR(KUJctuD@ zD59idc4QHL=GHfX@u4Ba@=|@PTPJ~FLpbvfP(02)9yYL-&=%D#8uXkjtX!!+88T3$ zWN-JKMeHiOo1kq=_gHKUUczML#g0IU26BZq!y<UP<|1Gdkn+;&wr+_~2EmT$J+o6T zV*&ayW75BzIQ9Ja;kjUqV!;~q4~wZ~>Mf#2K#>Trn7Fq}+?WAdDJH+6iqoI46ua>O zcTvqDc!k=-$1?IwMD}|Pr|{PT(xYN(x|bytFy8u$WKAfitc6swqqkLCN9ajw>t2OJ zT-PplSly&IcLrpS=UQ5AVh{`1NP@&KV#Tee$F79DlYBuqrfe6Xw6xH=)ne$wmK$0H zV2&(tUF~JX=hq~)z2ElFudC8y`LNf&3^$nT5FAcxtDLS$bly5)g{ZSL(uZHs32TgN zPe$kb(5ap7`YJT(b%=-LJ?WNFZa6)U6#*W)W^^rw-KAaZx`=##w@p{Vy`~ns!Tzu( zL$|27f%^~VOVW4r_*=_9Oo?j|&)VvOcd@!#z=|Lgi^7-c5WpRT1d?!)%&<DaA*8!8 zRvx5|(k=UHrNqWP1G1^a^Wd)0D5V`QxG2`n=B`>ggKD+z-yWzF>W)OD9tk?(zdDBl zu}}g*n9oD6*MK0b-&M73<&*~>q9pb)th`=p;iAewotA^2OK%f9Eo!|r_esz>vn(HN z_9c|7G>UBFAeRT+lj1%2!1`e3ri|{q8E4?sj}EBRZ8(iU*GJZQg8S*vDR%11C(KRk z2x!BVCiYdFQdaJ}5YWBfq{;LreJ%UOlx>Q;iau4}(s6KW4sLFB!PRc&%yQHm_W>w? z=i8Qp`08g#B#At%d2Q($Z1t?%zRX9jwKcX_Z`jv6!mPHeG`i*dpqJT=!mSO2lCb*+ zE>e}UY#+Pjp?e_SAdc8(q&FmsogZ1Ma<VRby_pe2$U?s84nLc9m^V*38+<#aOedkE zm0D%D=IAH-E>AnMSD6m3z4dZ}-I`UaDxO0B+WO8({s!_u(Nlof8yprvgPq3JXAjiA zcPK5#;a$!`FwQNE0RS)wTe{9ravHIX?GNm<s2N!o$R%F5Nk6^ey;wwFP=L6jML8P! zQ_x@GQ~+MEt$|eBC{+9@Rl)d?L0z(#Pzp5F;RDAHd(|#sfrB)z%)tKU3WBkAakZD6 zd|X32(ax@V!~{|gIslk{$R_oRHcfx?D78oNXmX4JIXNQRk$!aW)|ru0rx7Gk8VV{5 zh=Qf7Ag=6!lL%p1Z`5%S!YZWmWs_c;@36zb)l+JnEP<sgR==*d^dL<?yPP;)dT_k{ zvPp6=u2|$NH~@M00N-nKC_lwfc&OL5q?h%Lt0*^K3ux{$@YHd1bkmMAE3I%cJim5b z-Ho;NtCVwg7|3s=h1I>RfcxW@xx$iTQiV&+i|dS9p6<VQTk+N*$f_u2-plENVie*E zaAcWr+k|j3@^0J5UmSYxN^cJc$awHLqeu75EJy!2XUq3o;Y05`SiOLv(kwEyr@U>e zws_iAI$2sbxu!^wldv5y02?5Qg!;5EdIIKa*j%=`Kv#jvma+C*5Uq7IAcR;`p>MT) zP-fp>i{_UC0(@LPRPw54UkO-$HcS)L@!Hxvf*@ABMo%=7NY(qE-*d>`rQGLn6;%Zu zj?n`G=o*HG?zPTdY~nF&U)NMD$|JQ!7{ehHforn#u@AQ^N=M}8x4l!eFI#6E$h`>g zWStALsR?7+zK8pvI^&0`M+DgA%)Zwja3kgOmohfDe3^T?_^MK20=Xi$WBESrKNha9 z(EwiZv1#&)Y&0p>x!d6710F;p15`p1D}oPSMGHG$hS|0Gl?8_!7(KMw3{41_qn7$O zY+t35E~n}i&a}y0jcJZd)GKPwbLuL^0c)WZl}oL^1ds|jkdken|1%v9ET%WYZqmkY zORu+R+pCZ`@cNjQX+`O`7Kgzu98X{6oIgqP(4q|si?y|WQaTf-V3xRFMcw(+u^o`M zf{=Z7f;GjP(uQxZS|)bhV_-;W>+_c-=jK*Exv4j1VHoNjALCc1up{TFoyRX5n!qaB zNLZ~v&3$V3Q82@T-11S;Oawvhz~_T>Z-EcQDbZz~4=cu!RJMGvQF&j$>c+??Aqv@S zQag62G-J_kYMA}1k&NnU?!N%*!e9=>y42?@@W(mNtX2772tbYp>=bKF-{%q(qBd># z^BMED>jL-8)k|By<pB2f@m0JawLdJ**@68}HcITL={FCKEib9S8QqOjx7sHKkj2Cc z)YRA5H9;+cs9Q?iHfOT&y{0i;li`>L5l_;!mD?`_WcSwYAWQ$Li8HxGQMbr6yZhPw z-=vira?UIqgjgkt4-HAXFG3-j(}n?e>=mM8z9O`la!OaHdSzYdOJaNb2Yve&R$lY^ z7KqhPIu*>;5Iq3O(-WrlJf`39bb>zdW$^qWoF#P?f@nDT5>9=Esy3mHg1>E!*BO0l z9IG~8#(-PREbD%ZltOEJK*dA++$B&=gBmF02s0Vc=4E_D+^P8ek6KU`gVTryK-rdZ zjfSR<ljfz3tp<g@GJhLRb&K<7+v|_LLojRIXRB@Zu{exsA;GAALO#WQY$57qU+2CD z9ewr2x#w_TrGM!XpC=G5tcAlFAKi9DcrL^ty)tOm6;xeOJ66D~rks+{X32qn8GdoB zYO8hDu}y}qv5)=y_CSROB09L2MPH+tLN>oA7tx!3X>|CC(5X-{^EJJ<0QGv(7rn6t zYnRu69d}b8#1A+W3?%z@$Vnf*D`P@wir0JTx`|iySe7!Q-VA2}Wul}REU`?<MoVLz z2cM1jiGu;$&PyTQ$p?<1XF-G1=Ie$=%Bmd=gh-XoW-w4ixs%2}K5G9skmn~&vl~h1 z?PrHf4T+9bb4FX2s#tV)MxndsB2n-y-W?@xZ(pV2;$agWGS%-<c@pOpGWh8maqp6E zAu1}$4Yc@dn=`ektACR92FR-FQ8YuHM&@?C99tfS`OI<+n$qSzEF=tPa6q1H24*?3 z`CL%bV%5y-nDT_y_RPoW3q^3pW=v5Ah5Dl>(u;4Xg?#wru)_GR6z^AW&2<dy))F0z zS3W9J_PDCNOl+=txMWMep~LykOHy#GWZCedDN)Mish@b~djG?nQm}L>RYFBIMuA3e z1+7?+(~|VCC7;14$<URKQx>(|ZFF}2RxY3_dTsG|PlAeb|7WT6A;aV92N-P>S-50i zR#M>YN5rKr_*3!mFOT?{_I17#>;brvu{U*CqEI#rMv6P~*r?2sb9mr}Nvy7Vjc{+m zlU%#6V~4b54yxYOGF6ZE8oJY-$_o8O=r2qTsY&vXKd}B0VS~AOZR&~BIf6_0N3Zoe zp50PZ_I@6@Wax@>=kTWS*wyat((AjVhTE?ft5-jGJ`U&xK=5L?1YbRE<@y<A-7152 zqk>{jv&r>`Ur8+>URyDK(6FlZOX<u6@v3m`gSnTfSX%*(^~Ugx-Fi4S<4H}IW!O{g zcKO|Hk}jR*<z@y~!*4baoQZBUrI&Hu*<}=BTfbaen403Y^cNr+fpP*X1K-fL^^2`i z+cN<d=e`vu-oIYrI!;nn9{9>%oBRyzp6DUKF2Y#fPGC`VbpO^!vIHEJF*O*?bX&PH zk6`%$v=pErA%z9+>}TJb9dLb)BMUC^VVcukZ66~3uJw50>jKbbND*XUWAE~H`!E5^ zV6;J0sD}>uqT6m^ZGWh18Y}NR;Xh>eiKR@XPU2&v<^2mfPmJWU`j1Mb57?UQm<L!4 zEaWG`O$^XjS~UScVRSZn>b*SSE<ghpFoOWwSgO2l$o+)Akho&BSgNAI>%|Of9oU*S zTl;*EmqF&j{~Aa53pHVwb`opO08LGG>}p*p&j-E*FBy>0S2W07LMuKmCXaX6gU_%G zHoU|rhXhYDX#zRJXdQ^T0(;OLZdF7!I|gmez(9sgkkfztTqbNCSrR=q{Aq30cIg45 z^MQ5)oLdGi_0a9T7$>CgegGPST{8hoVRV+ruQ=JXXjO}LnT}XzX8_(|j~boeK*F;6 z$fARF<(V5!@NzCmI-D6}i(h+J5x?Os<n{4eXvSaPv@#;gKlm;*dY5k89et6Su;T)Y z$0T)L1?aKJ{(F%t2ptzA6Z0DQUxiTH*P4jgyn0|oaw!RvZy-0U*usd47)>f)xS}v2 zWlw%_F<b`Ad4Z~Q_><iWB&-JmEq(^GwYg@ikm!c!etd1IVZyhg>t|pZY!<QMt`QG9 zi!EUZX5}DVRp3V}Lf%nFgsIfXxm*oo?%W>~rBKME&z-l+YRt&x1`apXskZ~x`SVcg z4{clL?~wfMaE~?%QsRT{g-~Dgr0#JVjT_6(d<h2r^qEu3vIHQ+m|AMwY{TsqrR!)n zO%abFMq3xYFY^N1iyW|f`SM5`IM@*MqXUNKEQ3@VGrAEa<%;6Pd~h7YjnS@!FSeg~ z=uaei!tEjK6yn7@Ki;?l?gO&=7SXzLO&74N!3&Wn=|A2{xZx>54-P6#crr$+_WGLl z$$VQjg&bECG^dsnH!S*Ee+Kjk{$L4wcz_SpDLjVMqepnpVHl4QOiIHyBGv7_UbO#w zI1z3z@KC~##PCsZL*r$QE#`137MmtbM#c;Hct!0khP6nRqmQZDyR<bhEaS@+;FC@N zpblFRnd=oNLRT1)z%VIgMG)+pH(#t9sS;4`+bgh8EXfF<;k*BVcZ8$t;s|wWQ5g`x z?u?Tfe>2-zxu@4gKHU1nI=D!M;oN`cIU$B!?8kfW&I0so=<AO3&Wko`PC{~!`BZCS z0l^>dG_s5Se5dyf7GQ0~sX8Cz>{@$R8kq6r9~RcLG4UrexB*)#+-604m}5Xcx$(LA z0VgQ5ti*i7PlZ-0NouG$*>#EPAXS3opl`&#FS)O70GP7nE?Y3O5-*lINGNAPxMlu< z^%--2kr(7{)n{bda%Fb3>POCR{0Ik&RR5%~m<2t0VgUo+-b+a0e91u65R{vXLW&&A zFJkIp<q-qNy1-LFN$M9ZWW2bak^fJze-`99;6*GFW=6bl-Dqrm{MljzISnc1{06f{ z^vCiyDgBCYL-dAv!Ut{x25JKpa=A7E{dwHiDKj(>Bv3GTQMy?d%bBbJsqtff`l6z} z_!Hjp0L37&lmJ4;2w)jw%MYYc;#h~r8*f?fL_Aa(APDIO(wE)Bcsv^zYc_hphn4xH zHS-`YCoRvNkGh=**d~*GVq*cxd86W%;10OuWX|t~ptBKg^;Xm9z<hLVsPzaqc7^we z`JfywR{BC>it(FkdNp~Gl?(o4{b5^3zAdr)bfKq=y0kRnYRZqx_;&~gwy**B7XH)o z@}*@E&p`W)VB2!RsceH!U`KtZ-h<#F1J=KHFxBUyBt7o#CB{nf&`(8H+RBc^nOQB@ zY(9oH_FhAfXP(eK&UaebwK|W~HOT?qu<{{lLdz*ELIJ|eibgWy1_q)V^OHLQc+^A@ zk0%hW`Z<Uvn?dW@WO4^%Ygu#v1NZ^1(9l*LHt*e|1%t2gx3<z8;b<hp{L<Y{C04=> zWcx{zgc0|?<oe`tR<?xSR?F(R3aR*6yTzqitjJpqI73Noc{K{BoKq%^CI0jr@ZE4| zm(g||j2KgM*w`Yb9)GEy2R8@N*auI3KQAtN`j2TIUt>sRHpRN-t8FTluY8XUUkT?% zynaQ#Xw!0=`Ov)#RAJ~PYN~@(YE&F={DLY?7aJ3}>_T4iSLllr9b2>JTkKvNcv`<j zv~8PDH$Hk|lipE)lS<HZ{}q~nTjxW?-QdQmRz{FFhrf?p6+JspxGJFL+-f)g@GDe? zA5DaOU2HW5=!d3g*!k`h1AUyj<-uZdaPTaI8}2;$bL0fwEfaDk1=@CZM%InzuM$f~ zFQyA;Jx7q`e~m7Gg&<?L1dx0{`|vrdf%D2`nl4v6o-{RnaenNLV?{g!{+uK3IHd<t z54Y7AVwcgX4I7Ib&zouDUdEwzc&3af)YATZ2fW>4>|Rw+q@JemFRA0}$~XhX%d?BW z#j&zPMf?(52>~#(TC{<DCuedQq0g(8Z1*TrqHH2)={6tll;(g^SaAIg<>3v}qQyyI zSFti?cv9b?qu|thamB$^_Y0PPKgNy#VD=Zh(uC0VfJvTQK}7?pxLak|uFdA?XpGwW zr7RlRf767QeuZU&SP#DC5M&asRNFdJ{oCr@s1G%e1zUX4#2-K%Yzg?ao^zohgsu3A z5bBmL22bV>Mk)oKstX?toP|j6{`m%J=7mX>Hq{G*GKMWtHJVpU<-Uo-f=+%oy~{?y zRsKLPVM|up>@l%#$nPz2sGE3(8(12Z`$B3F#98bfDH~}%=YK$aFs0tnfE^QHKz_@? z1#M7tac(gS?4XiFt6JY4I)xy47pc4*li0FAhTRCux0%rF;dA!`p?EU<)h2>K<v5cO zMTaZ*0XTkm3fIL@RuZS)54nA&_9*lv7Yy2cricuDkEI18$Xh^(KKTJs!gj*&>%&vy zk3#fyre%2GRZM|hiD~2fD{RObK!{H**-WJYZ}p*RCZ$IwcWRDuCHk1ZU98ryNYzs7 z1?AyJ^TpwUE(v<>6f#W;LmCsFuUU^!u0K<r!U9b4;3&B65VfNlh2pED#8R)Khgp%_ zIX@@FF>u^ranVye7FK|G#Ht`t-L-*34YhP~eE^4ie`7L+)5bCGykl$(n~BIdgPf-6 z)2$S5^+jJ7@wogO&*17Ja$w%ndKBFm)r+d`wekJDxbm3hra?_M<jketq_Ub1&Gx@< zd}l(pKFH8x$v7E(vfIW`(HdY#L7Sm!++q@M&PjH4b*1RwkGer0*~G5dtCM6DgvYwj zMZa?A6|RBA?Kh>?=8>S*K4)B<yOQw&3moyMCIWFDadbqrAm5Fx7LGhT#+`?z^$)}y zo(ixf=~p<({85d|ol*cicPb#9G=odMu=El_&OZUNfmBXFxi5p0nvji6K;)+?6c7Ub z3DK0IV-zmK4p&UV-yv+qQb+;FUH*hy`VxA<w6e!c$%_G#U=(H`zWx&zn}<=(dl@@q z!Puie(nfYb&!r^L=Ozs+-uS7iaCD$!r|p!gGMa3=U{qFsg-v0Ne{N0K7Uy-wv>JW^ zWd0`^#*DLKQ$S&W6hZ(3*~y<^TWy*bK93}53F4YOP&QR~`nUBNAHj}vO@VkP>OlX- zW%9xrVBAlj=YK3OS&i-%pr0|_$DzrSh;=Kb@VFElRzret?oYfmKUxn-_w`Yb_7tue z;D8|Mf0c=Wfi=ivdYmH&+#3<jdG|eIWU4v-pNeFC8DaBqRU%IHRR4n?6PER@L;qAK z^gkC!UIW;?=?*OJKWfom>pBHS5lVtX=BFz47DK`}lOgp-(q%!v0xB1ts`8;D9{}4v z8(<sRaAQH7tvgz9YM>$4J^H*zLpJn#;9t~=Jdz9#D!?E_zr(fCpt=2Zs=UrKNP6HO zH%lHt5-uL?gQ-cvEgi$P`+PF{N_E5-zm~wUpWSQLAlQo06A>*qbpLo^dCS@cXv;x_ zG#^5t`<@e%EA@o0`cjI|bP(!F9{0}=XS{!Hsg@8r=<3IbIGxEq2L9AszeXWE8ntbX zzq2-X$T@#vmPNkkyTzi&_f%mw%;)yF6+6E>XkxcoXa-dEut*GmqMPorXheod!l8?z zk8TMrpEt@A1gC!2;X~Pi4<XljPC%`y=%HJSc<S@W;>|2@wHBn3i|D70sKOH9pszy9 zK(=s<nA`O$tc(>vXe|O@x9l*u0${`YkrcD_TBzet;~MjQTBHL|aD#tI67(G_mpyV- z!Y~B;dI#^}tB=Z=P%GcGiO*p?0IpOi_s8TXq4oYk!Q?@zXwKyP-eCA|+`$w98(|J4 z7)9#dlk;=WfW%&SJmw?@2H_l-rxXD^lp#OAVsE;pyjgOBemDTV7$6D~08(+)5c+D@ zxS7SFV&8Mc4X%veqg3+<t5?g)GKR1#4C@|oTrrCaBdtW)7rh4vGwdjXdX$`cve%H& zgIwP4cRjFQk*6M1eZ6|v+kgyWbI$P@$`(}V&_~a9yz1s=Jg{m(I(1kQ3$_4uB=R6% zO9Yx4?-U(M%fw#FN??y@gm9bC#&|?nF#x#>E3Slt_sq8o{3e5`2j}r&4@ju^qFZL} z+m0Rm;I#<$NwEov>r&Si%DOtqfn#uNay{U>CLYM8_VnKgJsl%u_HmMXueE3yeAwA^ zK&N=<@d5LcPs(J~3->Q)s0MP4wSjyU0Xu>*(C#%gbW~`@*S#5?Yu<01cp!uijRy$U z1bKeor`Pps4?KKs|80^B(KElUFdDsVvm8$DVnb+w04+0$OW(-Y?$W@P;BkxHDs;J9 z(^>4qA;w6N08~A}ow823eQk~LTZRmB{Bydl$0n#6p<<S>gN5<*vGDVs0-Pzf&Bm$> zS-?j#bDn<JNWmz5e_J1*I2Nffa(ZU(rnCh6c~i*5&xW+&z~D>$+IAI285Z5)%Xu9z zLXZdB>-U{ooUv#T=6nIIf^ibJ;k=)6(;NxL18+lMknQ^>263PbJ2hPqk3DMoesYd4 zy7l{JX{=-X{5b$vU6<=nrc1vyDT?I4oTu|HF2`gM`rHIQUsoGHkmMj=5kD!*sLkwF zu^JaKeKIW?g0PZ7A$dj9ls-wEm75`D$HI^OoKGMRf2wV6?JG~4RFyh-+v6g3kQ;u6 z3KpL5ja6(|c~V!e$#@zsm6e2Ki4<z<2vNGQPuJT?x}QnGz)KjP$~ZU2jHWB1Fw5~x zo9;kb#FQF}!`Sr~F#(wtVF;F*(`t8%!=GPiE*29WnA}EE@C-K>b|xh&JXZ`lONn+V z>H|Xs=O)E`(Z6z3F*WDujhT`R76e0J&O#WHjp+5>d{dsm-<=;k6~bfPP{$I2vq;*_ z)r__loT@|RZAPP2EQl?WV<Eb8T)!=M>l2&JK@&k>VTng{)37Z9NPfH^gRM3bvm$c7 zXtSWfH^#RM!t)6H807@z&`FVeg4<0^SBb4)h)jnTdOT42`Cw4_{3+FBfn3pW-Zyt1 z4|&)pqu#3Yu}(B@wq2Ro<oF(NtaS4%qNPR-?DL*>DLU?zN@!11sCwY!3^y)O6?Rj{ z_j*7Nnt^z+-jXWkMjMcJeqHuiM~$)UGY~oLrqWeBG$x<XFQmPcN^iFgJ^4y?QhqB1 z^9Vt&(M5<R#=OUHsOlKdIuK-lo6^1%Ft+!o<AmPr;BP193LWYij+;G@;x#G995~y# zXtO^x^ed(ZFi1kD%HXwv*5i{Jr~$R5C%yvc^$xH}4ukwC+eo@eTVs#uU77CJ6UuTZ zO_F|PUJ}%tP!VJX<8}#xJh{^N{Nxne(8vy21Roaxp3=W#5T7urILR?&1^!G@dXlyU zW5JL?ZN7X9Zjr?fp_;hmkskIm6%!MJr^evN#(+=hGLCj)2%|iQcVV~~!|bz~7cj&M zTx&49fwYxhg&vD_$*`4Run_2Qe_ncJa**VO*c0%j5cu%G<P%|bp-)rW+sn--g=Zmy z%>(6hxL(hfz(6vkUdrgqb_`LUG#gRJF-q?@lIm=?--4qQjETaUSB%jMU9-lo1`5-@ zF&4z$pkTHJGR=KKhBRGhZBITaXA|m>X&GcXxM)&}PW_<@cb@8Jx~Ws}v5QDBGuHZG z%xu`V0_bm3nctx^DUH>b>U<YQuVcj)Od5c$=y^7{&&1?><!-gh6AGpQE_w51SH{W3 z<lZ;-4iHh_3q;j36e45w!;|())wWi#%)p4O<^uhAt3t={e6!6?J3!{4YYP?j{<`A2 z13ixYL+9r+Y^?=5FfNEd(_O;mF+aPy8*=fGX0YppoC;+ug!~CLkXQk%yDLUfs1Qe{ zrlrF7c1W`IM+d)~Ov)h73s#T}dDSsI+b#H}?F5EK!J);;Ha)%liS*<`H)_&^mVSZH z*I=e|@}UI#mRfNYU7{=RL=fV!09)tK8`6z8z>P^b6K6*MGxIY~4S0?AXfwRgP7$EJ zw1{zXa0*;Qs*50xR@HPU3_0%+lf*cYlfxJ*pES=I93QVU1Me}|^R;bjXr`O_q^PcH zVMK|cyQ^Vm<69XJlbTwmy6|{<TX^h&G>=LCD>B9^Ak91XbFBLgA&ccdAHJ_{Gdg#2 zIJipl%Dh~Dba&d%;lk=h_&W!mI61eRn|!KG0((jT-TmO#r<|^YQ@y*+*RP&@Y6zS1 z8+-=k!%tT1=uwph{V6O|=~x=rIN>o4ae~AF1roXutA_l58eRGTH-niMnLav$TYKjd zlz9RE%Yr=#e8UXG4~SPw+38H#`XiIGzF^P>UrEA@!w)>!!P|J3=7SOR`IAq1VY2iF zEh}v65fwna>L#HooI_%0y7sA8&|6GBk;zY%uxoG&*rB<O*G|LHeaG^kfD&FS=WY0b z29f4*hsf3LJi0-zoazo2I$w0r$fx2-$;738MB=MHW9y32zVT*@V^R2qGp}5-cWTmf zt=K&7L+B;|8$>vtluWtnLFj*X>FUU%)s8gtvmYEsIMU&M1w-`S7du)3oGL6zq!1~m z_Mc=FPOYPk9{(b(=+5grcK=`{I`Tq}K0d4n#~Sg{EGt-V-O1rx1MSODOPcnNOyT!) zq0n){QOG5I^s(D;)|D6%0#_&DN`7=0|2aMLgp@<;{aBAVc5dw2e5PNSCl3de)uVni z4E6sp8D)bH{CS5AlZ!h6ENOWFfYK9O$|KDEx5SvUk00fc?;#Q4*6tPbj*$cF5U$J- zW>&LW9<J)Db7dgm_5ZEFfNH?Hqnjo<%_k4XLYRAHr91%5nR><S3S2Jc327*HM-$eu z{l{Dwe=U$|ZQ+EDe}IFhRZALKH0t4|xpH`X@xPT}c;WNzA_wXS_~)P@OO7cs$uP1% zl(3njEA0AbM4}fC24HB^>4?&oV7r=GsSq!2=U|d987VJj`K2=x;O<N*7=D8%v;0!p zSi&q_SNY)>jw58{a4QGak)Or}i(waGQY9Ig8FQk?k~QY&B8jjtE5{5dZ!;$pvRDDL z9F~NHkGUO;<A6d8bK5Z*F8F4SU4-=u;lvD6mIb%F91ch_wI9*EJAR&_7I5x~IUTdu z0f!}-W5KtzGnw5l=FvKEFowBZDFRRuCMh$r^k<r~xK+$bhZvi0!7Q6o7BX$fj82`L zgRok|H6xQ)r-`cKf5i&L2c)FOgmdOG+WP-m6~)2Vla-P)QTG#Y4aM`y0YHO5wPq41 z3HJZ5di-zkNbv#1+uT?}0?pHZt%m>N^nKAMYs2PZUu<Gxis#a-SOzr-h5N@|#cxj1 z=+u3<+ZM`R|Ivc@EkYpfZ&aGWwH~rX>{$D>e78&`l`c4ubx-0p|96OV<f=7IH<~GK z<t;=Z+rYB8X|LXI?W)PU44GI=9$e3ZfqbVe75yiEf)lYi6I>Qhpi8Gh>R}DnA^dA= z;n&y|pS0uzBiEn8drreo9@+7g8VaymCe&Ww)Dig7>K`hDlIvdD8=c!XJWe7i*V^7( z!}^9x_tv2t4))h9!biALIA-#(zLArYTb^(;v+&At8K<D)DA$W$1;VS7s$Rcex6b~w zZIFM^wKT2;CZ#5<wLN!q9g1TW;!d_~b}0U2N3?C<qn2t?fo6rQQLJtGOltWYrx!8W z^~j(gtcCd6UTw#!rRX=O8|W7CCNf`OA5qqg?mQH!Jrd}jq=0HX<3O75r+3ny_R6CC zjyDL_k%U<_gKOU0qxrP#qKi1)AZV$+BitPr>G<p--h^L$AJ@mb*b>=E&*f+$&kF3r zd1{XgH;=?6n&=yBe@Ac>Zz2V0k0|BE&}6m|Ns(DFh}6;17uj!lkavXYD4Ov%_yf#U zr;5%?>9D-4Gs0UOLsROLMZFzwpqtwItDX<TgvYj{l|o4@8Y8?SHwbd@2X>(Tf32sj zWpvS6L>4{l)n|PP7MK%5bLpoURL93HUDAYC4eTSojiHG&?4k?A7Mm5<^~<6`tHw>t zE;7pka>wkiNEFS7=N(B9c)}Xk*YmMo|8Pd+{aZKCULaN~u+Q38dqn?+Izi0^mZzOR zKyYIbL2jUlnj@*N;Scq@=vhwmrKhXP=LPrSKpNKHchPw$vZ!BKOM-b1i0kdG!%q}; zvU&93*2$v#fHz#K??_6;_)A^RcaH3)=K}Rt;V+Uvz^+l+V5b_$LRc|;aE1kw!ts8g zUd$v1PB?a48CdI~a-k3B1ALzLg5nk2u>~>nj%Pe?62`doz}9)wWHz^*n=yX^C{JK6 zuo_diUA$|SPGJG2p?n`Sstm8J$23+Hrkt*pbEIdB@n`=!?ewNnl6<`mwAKb>EIUn2 z7j7NBzbOrq+8hx3bakE0gzV2%4w_p4Jc*g+hCdP2af%E5e@rF%t%~`n!W7e$kVkxu z?+Ct<o*cY)rn!sROw6uup=&*CIh*i#*EGC1KTdOxdB!IkKXw|i<9$acdF9nSJ=+B8 zQ6=e&t&USn)nfWeDHdah=@e5FweV+Q*4Ar|_?l@NTaI+~;#T<jMjy_uHwp~NwCqO7 z;0&&Qril}h-L3?htI5fXpyXXs1)eiKmEje>8b7F5H{o0BHNo~x$5(;sKHmJGEAJrF z%&1uO-TufU%>5`kmP~(7p5%8{S%qyd=Jeu)Z&Ji9%xp6y<?I7_U-X{+Klp#dO2!B? zsZmUAlle)h0)ZSFO*8H@ySlAO5yxJ#GOLdji$2<4k7iy3LEGq_dH)afx&d*`X{Kec zP~ioQ&2J&o+{}M3iE3P6UY#lD3h{g|ndeGocpvYk|IhMLX>39NkL5j=Ks6X~6?40l z^5iX^FOB)-sp|IeQr95g8`@tO-C9<1MJ9|HuV{8v$VR0ta{=emM|zuVnuf^63Qsav z?762O-a*8%*0kTgAxV0Ju!E?Pvdresv^1R$J7g8cn6x07tu;D+Ry@e&rfn5^hRBUa z#~nuW2X(lZqowX^jbHJnP0A5@ocHWntC6#^2kgb1dyg3~<Mtm@4xEuu7rA*PrY7y# zxgyKdZqMYGof-}_xglNO=||Y$o3Dlr#8CEDeEg=pTiGs?)8k#HlK8FU+^ZuOr=NIW z#+*{-UO`-TIRMA<VCQ){7qVwh=^Fb3l%qG9C1*dKC2CXErCHnJE(9n6K*cD6p3!DI z*KgMn=J*^*wlA|E7#aL{w%7Z?y>kcl)mllwRrhf+=n;F0AQ$b?-DxL0Sj^dYe0@Jj z%s|vNfX~Rb{Y1nY>jeqH^|tfPv~Kz{$?#ot7K#NDb-*_MY=j7s-Z9H#<Vu33I)}#e z^ACuP^4~8*ktpZ;F6u_-E0inK149>PaxQ|vdb%M$V~iDOj(^~{V*aD4&6n?Xx(j&r z<5(=rTrYL_$I@!1nGZ79bNd<r**Qq%(s<cCf6L}!4&<_8?G^Hii_=dLA#gsas@TVi zEUU${Mp;$ty=jMXc?35V9nB?qaf-~fU?ya$aJ>H=?(LF`DDSD+fBt>N%OW0R?}k#R z(;b1}NT!=nGZeewj7)Il>fzA<hx|ynN>PuZP`(GY*7n{R>%f&wJIln(P~=NRwB}n$ z?JL5!GR5vQRdw$3?;ek1f95FKHtf60n|&cO5$jr0TGu^23#WSJ%3!f*Y4y>*4Kl1Z zAJtrC-*b#RDAvkVvtRcbbDC*B^a0L5Y?5pYcv8M-Cns{VKP||k*qrY~NGOv79i+23 z9;7E&&B$qvpx$e(Lw4Gccs=y8c#-K>CLm{9n7|3nBiz-&Ihv(@XJq%Cf;birKQcR$ zJ4JUH+WtbFcQ{^;&6vY9J^=EVaF^KrYLnRe%-I0xP=Z2K_E#s1wdrSPXe71T@FK!l z)#o2<8=u9bDwqZq(X73rp1Z^>S2)OW)&k9cSmbwkJV7?S)^F#gly`be+5#!mv_n+u z`(RN_g1XzR>g<{IE~J;u9#&>E9vql?ufG7vJ1?uoRKC1Wfqa|5`>g%_&OKrUks+rN z=X~mZZMad-KGHueG<{BmpAu{Mh8!tx(kcg@>D7R+4W9WVbbKslbGjK_;f-Gx$u!aW zsor+iUeV}9mRKmmM3Q|nv(BxVB(BbbRP@V?DO3+%=%_<-F6b*AG4<8vCLHZvIPLtZ z!Z9m^fIN8AO-3Z1jm`4VO-it3i?WL`FC8?R_nC4A5rAsS^fP(0tL7W&<4dCXhEKPY zwygXnh2YYf=Owq>8L-&Il=BTAs2X|u1dA`3s9r2AzDRRvc_YWyWmoRL=RxnK*w`*Y zq>^=zu^fNu8mCX9lHG0bT7m|c7h%c+h+L$xc|<)w6;oocNGMyazQLepk+t1N<HA;R zlY&QKXJ;@=XE<%_hDOQf7rRV4sY16?m!+HK_smaskgi|hepwdXHQj1i$zX+J^LJct zjblaQEaV`JwHA5zXsm^*tK_^xLe8Xsh^~W#or${B+DM&|;VXh%rah_$w97@1P&9_5 z+!X%AUU&Hc9ZG+ZfbEPX{M>10^4SZmJ^FYxGKk}bMmLMYGh5XO!RoH$ml;uK_3gwT z8(6Wgm)US;04u0Xr`U;wV&(_vZcAjkDcxT0O$@0$R*0`XeSt^%8=njwb_v#-D|UE% zv;JV>HNC<vW<HCPX=DBA8`dGq>nkGgcS?{4VEQh<F`U<TB13cVbMhI4*^S~ALTC*$ zC8FeNHG4z0dYJ^Go50=UhTiLk-+tw-+l9ZmYj#<$QggiK^jBRqd!%Q%`7AE+_Vo*p z{Pi{`stQL;csydXdqm~Z31Wx*E{!Zi1Ue)<wx`Lza`lqhLSRORvLG(0O=<1V9MO;O z*(RCrE;O+tkG`p9MP635@Sf%B9EVh0Rx7$U-HB&iK+pfWcKYQD%BU0?;ZZ{n*2*9s z!);z$+9m@UdGiHC8aGRqZMsj`tEn}9g3NW6Dq>p|HNCnr7L(OT_3_F^UT8fqd@yDN z)YPpZMc_iao#7to7|td1Bk`jfWS6XEVb<=N7LwjJ6Z+X4{0rP7KI<8NZ+&PWKv>I$ z?lv^tyIkDM;)UY3uSp#>2=fCIT<S04-j3In7k-i(ja!E-bNtGwF+aqk;dKFWpi;l~ zL5j><Q`hHA)M_%-mY^ODGr2<2<CcF>LRMr9bt!CoeDX_A*xijbJxem*TYMhfror|` z>D}~eiTO3Q5L+%PP>!3oC$00-`*L@+7c3HeO*|FdW}N%4&hMF#Y|D0d=p%CUVvvkW z022c1NT3xf_Agc4JVT}yk0$h8KIn7Rk`(y`aOp|=itRYwzn+_?_W4XA>+Z#_@5cHY zqNlG5F!a%YtF9dSz3cZFDnBn!F8^k}4yijg@{%Z|mrmf;n6G>={cQAt_AMr*5ssD@ z`m8Tcqvykjtg8CR+^4B8TAI)+a>Yf?Z$EH&WOfu)B<)MEZ#rdDU*Hj+y1<4)I>ut- zAdnx~Da_1{b{QeQ^w?6ju)Y-8>9jfE$oWdG6L6MALjvDZ6lyEGWw>ahwf1z7?=Wj? z@fDxx+p~n>KHfv4mFk@OXSwx?&u@85f6^v-mB*v8z%X)fWI@h?E96t|p9YRtB$Wu( z`U%O%qW7oKH)BNk9Fk~*BpNoeySr%1rNNsmcf>2J5yz@h6~lr@33ichEy%&kRv&dW zSS4D&(R4-$QHXbX-6bsUuao#rZh_D`b5>M;#jr=_Vx^-`+jd=r561I#(N}qVWRL05 zr@wK1^MJ2?nFl@7kqH~*Es5S*bXMN+a>f^)YW|AO4Ai>dAdiP`d{$q}gO%ONLMGLy z+nXYad}Z^j4;w0sp7)9p1DJ40N}?lpl%$-v!+TYIciRVt>YSjPXL*ny1?#P)<I6l| zy|LVCL%u{zR>&r2A)`#`wunDO9?pgMsB;S8@s1zr&CiLgYj&#t8dtHochm3)vN!4M zSTi|Y(Cj$-%@u|$11)c~rteggWJkz6r}3Kx>=lkh+h&Y@-Qq^oB8=ZbWHLT-l^j8B z`JA40I3gaWTm&_EBRiimvE4<&X;(h2qw8fBNc6cnWJg{jtB&Vq@>)A>%j!#?rBSP% zP~`oN>(&^vqU4Z4Jy7_Xn95k7y<vOmNkmkAzuJt7XSJ>?HoZ*jkrb>Nmz%-zz&N~R zm%8s9%@L(H)99gMVTIDxk<h1TdR6~k4ROjXO}~nA{Z!$SM=TOO<IQ(+)M`#{8{E0; ze2le&IIl)*n+OY&V!TIVt9G41?ft$kfnARn6qZzZa;tIv%R$P~GX<Ztv^fb}zQtm5 zb_tfpGr8NX6Z;hE`bg}h-DcyQ$Q8%ru4|P%9%j^PCDR#?s%ipi=3F}cz&PzGCdYXm za`wmdpdoEAomMOsT;|>+<d7mq<u&rfXPO4<M_P3?nPeOC&OVFpT5YBB=#m%N^X*ci zXzZs1=E=q_J~s10k8|wV%`!4QpO9)o7g<$q&U=%5)-Xes9C_ErKr)}rP9qJXsVWm$ zidP6KaiyFz<5<ktS(8_TagiOXlMUE3*e}mjcaYn(LD@0%a`-@DwAJB`=Ryye@CDW- z;2GOrZoDbL=UQw#AFg~H`fh&`K<)yKp+vj*S~1R!=xaPSSIDi(?k-2;k3}ZT;O1wB z)gh?7sl&^fg@L5O(N4nBQ?h#a&*vRmIC9Qc)n@Dppg2}hke%~6d-eq>)dW5fG}#iS zG{b)(Gc$w|W>Su<57<U%RT6aC6L8m-E!q}f=_|61pt;w&&kEjHb_GpndSHTo_%+)% zY<&}X-ZYQ_4BOq?gx^n_F)Kj@4NOY@H2N5A|5kxqb8sCDKRI$sKj0)KCs3kqz%?*( zpQ~s30^E!!S{T3>{wIQf5$Or^DR5CPP=z-IjO@@B4^sFRu0Jb*13|*q+YD(&^`&`5 zTWnD7HMhw0)6CTjH0Gx5f-=L>X}~QQskWLFN|)QqMQ2ynzn;r+xk=A#+`(pHF~h07 zIA<Cv`JiUl|1Oo{uf3*a=Vs|Eo+-1L8C?=ZE@UoZ$0Og35=7g@Lt^$1MqGBln69Sk z&ULe3FM`-n>WNy%UZ>7Vc6|1R<q}-B^xq!&%hscCmx~0Vvq^K$6sm>cornBsJ|pi& z_CBD+8gc}kf3iYN^vG(>g-BnWb^P8LnM?K@w%b<QnsSBkg<iPN=%PJc779(%7I9<{ zVRKa9yDG{3ecN^g5SA$&eO=f$#D5RYvV;n965xy0_a2o-TQB`S_>pk_Y0Ac0^<?s; zUGyD*3He`G8AffiOL&BHT`_%3fx6e%y+%%J>8Ui@>1)qXjT{b-gZ&lfHN;`pUgMD; zLizKCKhNJ&)*OQ{q5Lk}==_`Lf@jTGGP8$x_dn<k?WiBL8FOZbOC)ll3x?Dd&3UiB z;ZZ4FMk1!iML+*))apBpp3F?3OXqLC6rDEvLV;TF@^7Q%rb=JQ!kQvTUu;51%w1ZL zb>um_LZasP8^agBW`7i6(*yX;^wm@b)tqM(BJrjwv)uo^%ch+(Zk3F1VbL=ij+$?~ zZ1lSR9Kj87R+M7bmb=KdR9vuwH8aFRXr(>WP7(Bt9MqLmC~PUp;ybc>kgE>PtX#^7 zJKIq4P*&T={qAnndKDqh)3x&w#hDphkDmK=fY;+IXVBRA?x@#yzX}{#ry{kDt^Vx` zGrUnqQ*gG^yVB?cjql0U;x}2B&8|V)!<mS9t@Ym#u3Zz%8BcP!Gb^w#E<}&xR!O{X z8E{8;g|XWGlJg0Rt?VAzjiIt{FJ5-@m>1z=Ff9<*gko+O@wvF{`9_KlpGn`l-R~Aw z8g|cK9W#^vDFg@UwtJ5a93`tNE1xAaUCzkre{lEQSd^mmto0k12vCP2X;SsEXqteY z_&`y^fc81XO4bkN=SKJYvDBBHLYr-FwjU>}9uTD)_-3}_r9Abrme$|kXJEDdH>3*l z<1YK?xuQNK*0)5LmWSU3U)sDGiy3&n=p-1TcY~DSXj!*&59BKCzSZ}ztR5l;X*CTM z4{l|mV3{R{Y98SZB76Cg3&@_U)@`XX%vRbwz>#AdKQ^>`=3sUhVd+?8)sb%rS|4=o zRcFfNJShMO9^fFRXBz-z_wr;=f@U7tF`AsNZ>63jdT5KHlrzvD;7V=ez5H$_S+(hP zwDm*(3t#y(S6xVd<40m9?G5V-JgdNWlM@-S_t;)Q$x`Iyd|SRiXCbmEb>D+W8E&88 zqPe>jucPrL62okW#OxOdoL@)z8KAuXiJfD3$jBRnplhLY5=V<WLHTsiPFd0J5aV5! zZdZ10W$3AT-$$i+?X?v<m+o7oJb;&++g#*p#oxXz3<|!}M8JTUchj}v4<vECC2$Ue z6IMHI4T#TdBbsM#t;DthalIXPk=XD@gY-9{pSsXoK3lk~Y7zVFkAYze_N}w<nr=|& zVnFBbn{k(qX6EZis1ciI-QfLym3>!0Q(e&QiJ^%CQ4r}tP-zMxLg)!aQK<@u0vd{n z3IbB4CV&XiEi~zZihu+uhTcIsBE5!Ql@h=ZNVy09m;3O0KkrN4a?b3%XV$Ely(XFS zfp$Dxy*vWM$oQ31&aN-Ai>-ra4(8?8S1)1UHg^D{W8p@;B?9*z1buD(M@o(tn?rZe zWnh;aLrQHS=OeFid4^?`ZDCYi?U%_D+h!l#@{sH=b;EUQa=O&GMF#Iz`(cyt2d(Y~ zeFcS*|0$i^r~P=lIrOQqaP4&#R<e1FB|E95$M|F5?4#gLSiJ9SQnd2N?!EbIA%&9c zbdKOkp8bWC`7Nv+JQpOuim=-PMUww19^G#wfCz<z-Jl(l(F&K*f+l|%Tvk#lCqBjA zDv3G+R=A38J7c%a$%G3U_uLGQ%a9EvkLLNjb3BqT!f>uw!(!%NsZtWL#vM<$3XeY( zx@QPeTS>V(C%~RczJtBu9_GLXcnzlH9?B%<!^$Kh3`|#RF>GKb2av><u1Fmq)w7HI zG8$dUq*%-_-u<gS^ADI@rv-%}fhJ{PI$Izo#6{xni~*V9fUge<-?Hy$LGW^Fu;wfc zR#rSjx0KkcIoxA~xc1%V$>t+$Cnor+icA&qpM4Fq#8xttBE-<m(26&j5JM#UNL<d3 zdRYSU4rb)m_MYVlnP)BUGoc)&LnN^iE-Bqh+yGwYZkty&6}+1LH;TExZ^M`t7}+*d z6?Qt&N2tb2!ALs#)@&-4Wh-_eS4FBn7DmnqZt%>u*vW;JDQI0QJ76w=dV4!R_P9}A z#@9g|GQRmx%il!D|3lAGDIv5<x<Z>Dn+SpJm987Fne@2CtGP(ZyB09dVo4K}&XRWS zoSGmj0THxP`RvLvclA`-QvGJ;bb2P$=*6w`hh)+dv>xL?b#CPGn7=8H|0ijwk#(|; zhfvN6RP%}t^TblBEQ7XD<jQ(&5He@qjv6es_#sWIK}Leku_&$bc|OjcP!DPHN3ljH zc6NvJzoC1BH^3VQ&i_q&{f9hPiO~ZuEAI)0QfjP*6=r>0X4*Ea$f^x``viBdmY^>0 zLVS?zJGZ!=rWM9cxNy!d=mtxU4gHxD%lg6pkHzSdkD~&+=a^x~S5sXK;BiTDY3y+_ zsD%CUD}ckF8WOv_X<hgtuIVKXXo{YP%MmVRHHj1tanQ#LgO3|^{Nn+EJ&W+oL`;hs zjD!)>s>td+zCJz&XKp=qu0tNsPLGd7*JPS(&{Ho0%f*s9I{xU}8&yg|<I;GCae;zO zKgi)q>^t_7D)qJ+`8%k;Dz^W?&cZD6ZFL*R)GWsbRK=`H)W^6QQM|~ISzidND+mZN zE34x-Uq_A#IG@(8?mS)l9+Ty`<tZoBe-_V@GYyzrdaUCy?GB1Q)x_xoPa%nalWqS= zJrl1m!^)d*Mh|9f8o+mTVEeGN%F`r@v_k#tA^t1)q_0nwGh{5K&BsMznqF`$u5%sZ zZ>RSy?Zky6a!_VoCZ~)(XOKq)U23p49RIdD(kx~q%x~c|A+QDg^mG|al3(#AHPY8c zsips?Z2jypVD!oC2rkVMs5VwS=&__-=DdUsx5!g#ol<z<&S)g?U?&bcCX+t&kG?KQ zCX~0+O~|B+t>}<gjJU~a!5KPsLkjq6OU|&EU_MK4%}2XA9O44*+LE&ycGt3-9|m47 zVV6L7n3U?Mocsq}`XAiWq2akcKdBR(&(0PmeuI%6_v+*{b1LR~r3@K5c~5xvfKklJ z;Xf55x`?b^3=v`j(w{|i-xlp3sbO@hS)-hOek0})+q+}lC0g(PF+GXRqOl&wKjBjs z_)Ppc41^q1oPS>!i=JzK&B55oE8*P>zEX~3g81_2oK6?Lwg^&?XgjlPGt+@F>S^~| zK%C7Q!J62A`C-WNZ@!WmgK;ZsMJJWD9p$1k8l>9mCi2FPNu?>dW4<RJ+1LL9H@zpr z;hdlH8DSqF0Ln<{<#sF`SX8MLQ#@N7m^%Ow)X{PXI0|}7!~6fvB@OZPTL^NJ9mR6v z=p;>!!5W!{UTPpF&iMq+M+j8y7iUB$g31}{gU$wP{?KK}@J*U0YTKVc?quy@yIcZ! z5P^G^MHvJ~CjJW(+01E-7PPgZHl_J9PZ>-%Y9_amnIC9!MYpku`NI_KD2w+%+=_!! z>OUGS;XHU%K7ly~wlKC!L~@SrBwzX*>F9q3g*Z_CU7WrRPJ;Ybo(zhmKi&v|HpY)C z(xhvtvUgumytGdl&NLenV&~T|h~q`oxGuM!6~s@+k-t+t(bLJ5?|%(-j$YOC&NnH! z>8r<uV{L{roFgXBzlrI@vAT((j{Vra{(Mt|jANc7@W}}Ob@XDtal)TRfr1-*ak`p^ z%N|C7hwgD}>Xx?{mrnKF_Ira#|7HdNNvoAEYx-&0Qxk*t$NHpzM^kPyR~?ecBy4rn z-r<EqJx8+#5OfE@e@h1%Z8gbs^kjk}eK4JfoSc2XUO9cucejyaPm+%6<_AW<xc!`u z)(zn3+}rWu1A7>zW$?K~%vtlj`GC+b!z@Fzky@`nBAVmB0TiJ~J`R-odD3|*1(g^% zG{XrYi^D8=A+yit;33^f3QYU4_?qOm(GYA>quy=1@EC9iZfRcXRuZIt)fDwRX~k^x z4OKR=-UHr`{|kst&cX}H=nLc;@iiV1G<0_KnpF-*TVy-(U@AiEFc=BIM|e3|%k)Jw zLM{Iu)JiU=BzLU23<K@SRo2gUcOZy6M~oAAQ2%yxZz$oTXQs#(n`R}_pE8Qj`9->Q zG!#9f1=PsSZ^n3SjP~PD-J^Xk?ArE=>;3vZdLO~)$d)eMSi(pv(~2+QZvTqZYX6L5 zKQpy`;2*&TahOa{@2zo_?^z*hrSGt2nIB5Mm8EIwZ|G?0b^hsUge*9*0VMlPhMPsY z`-)C-pQcv3Lan6k`mXYseWuz6-x*N4VymY(`Tb~iGuE*fGyRX{-8LAQ*a4YM0^{NK ziqNxCSjvfXj!Ug;ccCk*D#S8Q8SU0IS*Bs|MCah+>o@QPYelh>-@6Fp{W`$SH<2Hd z7v#+0yiUF4Q$e5e?jgMAgZ4kI#=)}w4P^)I$%ND@J&TJS-fh$*JL;F&6}Q(~-BwV1 ztA4wf$jNS@pvU0Lg(~JIugcQS2%Gg`gx*041kbCJtj+Riy2mVqPEL`(OJE3fgO7@i zr1N(^RQ_Vj0M4at-BcC-%kbJC0(Ga2{+pNn=?6xL=Q-ZzfG$8|xGqq!UQ`R-9&rv0 zc_#U;mdIIij=s=9fJ=?`bF;oR;Sr>0Sw$_10bKxgmZN3or<2yVv`YnVm!pvU^8jOx z%gTp<dr29_rC@g(uHbz}=>J6y?%-xI7Qfv`?$Ii+{*|Au%n7CM7_)eUdet(a-pfob zv=d$un%>CeHiU|h7;L^_C`74#8rpYxp=P5RJ<L1_2WscXAyCKU>1OkvK0G4Py7K-A zY=iYtd}1aro$kmG%Lo(>b3KS{_{|RL<Ngbxx3xe|7=1;*m9{}({MnMki-WFWG{S0v z^p0+#^geRT^tOApx?fW_wvuGRFrw7rR_W6|hfLDAthg37MF5lIVZ<%F4E{8;Sif=3 z&W&N(C)d&)_&eLnrjGN;<)Q`ul#{;BVOD<7c2g+Z6#6{m>#TgUWS<|@fW{uPu@ypA zPKo$(&Ck%$+<!#wnv;#8Ja{m0@|cAIuDn~(?Do-EV@Cmr99KN5-7v#FWi+*nAnSIu zWxlbCE@m#z5q1=uq3f~T0H^Q%*YU(Zl>#`2*vm^R;|DZW%KXacXorbeoP;VL5O^<d z1s~#FRP*r50tlb!hJOBp5#Fk56F(idn`OTZB)X|lD1saT7~il9f1si*1)R#t5$5r+ zJl)4SvfT3qV_%8=>x|<cDa<oU8nTEm{fbt`2WUjwrUppSxMI>ek=d@$NiWMXw~t^I zk$-TP&!-RsyquUKlHYGpXJYixNrt)M=rWgIX^^KY5x4ZodjdU6C3x2uM|o(@=Uj%I z{1*$eo$UV&>+w1?Pv47ZY9Z|gxr^>J0HtVcFtL(#A3VwP`w_<m1lwq=z9uNUV=4j~ zUZ{-%Ls3N>{<P&smb5rUC79riD^oeW@SuFcf$_={Q^7-LXIyn)<TQaKIDdA!d3{D; zj-xz_Iok32zifsK&EvYtYn=I>XN%0Kq#JnH_8U$BY(=bf(UR$T4|)KY+M(M!`D4zM z_l|kijj2u`S2={-iG;?(Rf!Tk%ki&(W1?oM<Yy);cyZ^u#6u6dj+<(eo!XvMA4z9T zA9=*Rc*B4E5qB}@2>)4W36H)2j#vBRJZ#nR+nancSM?qPJH)$;F{3AlB<xfFxrt;p zpvhG{Zgu~PVP+dS1Y|djRH2{JpGzU7zh66=z8o0QZMo(~J<TXRzR|AK>>236+ou$b z$}mDPij3M8Q~6P-Cx?^jL*lhWK73nE30U3fmHVAcSx`hh-b?3kjTo+UNXs6)zR-C^ zE&oIcFPR|Ni+_ENZS!dc=Z|l=g{JK`I)&WyjGXi+n<o!PdUGAuI+Ijl-WWW1F^D21 zZTS{MV}32ydHl$V(ig~N!|PK3VMKXmO@cPs(+9-JT6#qb-1bsEjHA~v)kZ0L(YJND zpG<nEmy7VaZH8gdA&z4VpZ%Zgg|OKw2h?BONztF_DwMrmW4(Lcq3V;NBXBZ~t|VlJ z3EGZsVV;-u(zqUc2NUjl8fQ5qSak8*uK#Ha6}a&8>JNd0?yzBI&1TYOg?d!{yi(fD zq8E!1dkJ|;ej?khBPVJMs5(Y^2`o>~^uh{fy2%ae{{CjrbWy_%W$kL{6VG5y`mcn2 z%?78WXN#Rd*T&-mK4L>a0xSn#?#e-1SN=S!1=GJJ`qE|FPkhjkD*~6IUMKzOam_&l zciEA_AVi0_Qhn3vg7EhMucUhlstP}Eee4?zl_zt&&GyTmkOxE%Zl|AbKlbfPD3`k8 zX{CPlEn$*W8{iev(hDqZ^qaftEK~LD67Azfb15H_YJXF=M?+rbmV6LVT^4`J7rV!u z?2~N~=w+h`MS<Cy%7r*Xkg`edbvOeWd88d#KJ{5V%<x!nRt2AxN}KDN+uVp9mY4}h z`<|?OMhWRu8oZ>)IrtjU@xZIT(XovET+LUB`>OuCI$Y)2%W`<`Ipp2*1i8zQO{S<} zlI)l2v{rP@QpKxc=K0q))llI~=K1nXnTIP0)etLc3Af1gH9J+}*N4E}c)Htb=M)`} zMD)9QFj$JGBQsoNw84N{$n02oHw4C$Qb7O4xXb1eV!CLL*8#ZjY=YHu_fQ%Y8!_hI zy2=Jv?Y(*NreCASbufbu9(=<L-)*}dnaS<ygf)Jm=G_qSwjJq_wzQRut|b+<j=t!D zZr&EiCBh}GL**_9xH2D3RAOG)OYGQA+CAFhI#4dO38(O=o+F$>FWD!21+BfB1bgX? z<Rnu4E=h9|kxPWB%)McZ@Z#{R?-{6YDNQuv7%5|Q&-vyH#HW-m<Dk=~b4>N>a;)dk ze_BDUx)lAp7i7k3LJc)@a(}?Y9Po1^Dz{61Cw(W*82z;GvaYb5cr;`0XJx(4Cg-hQ zGvxO{u5TDp^TgVzE4FYxfTJT*ZyfRP=i`$k`>ZADt^tx9?+U`*>=mun*REJ)UDm^@ zTFNigcFc_p+h=A!7kaw7&Ndn(()Yn~ySx4(shj4clSDoxou?qw?f?*lg*`RKX7o9t zI8UXonu@Q^+ff$|DFEip%RvZgPL6-xTiseeo86@H2VSVQl9jBH9ryHI)BY=Fg2Sr` z_=)xVsTyzXv356+-$~KqcFMM?!zoS<H_2CTuVI<zdp-!Qw}zcpU9i9VItAQ3HMCBi z!Cq5wT2pu_V&Uppx>pws`iT$tgd1o(vRS~Uz?j4be3-=ybW^oHP^xZssMPcY_n*yL zr95GrJXlL*5Ra-`Dr@AdfZZ!$GNWDIr<|h#-aO!JD~sRq=3dw5MV-FZy$n-QG^Hbg zJgZ?O_-dofzC;qoDTsl=?5b>6=_zAsehqqYcwIf^-eGHhh~e*NRZ3>h5uM`9<{97x z3*WWtv)+-GlOODX!&$A0{TsdTgtZ9J+_n?+gQdncG^W}PbVul)z3m&lktg-Tqt*ID z0%MfirxaXJDH~Scn{4)4&9T5VjX548fgs_vL=TPN>uHUPg|;qR!~J=#OV$OD$s=NG zHMADZ68g;amf%zo9_f=k*L*MEaxYtpY@gHbb7VV}aoj^Y1yP!47jvI|Jt9HHQi=`x z&`#N+OQzA~tINLC9}t~)UnTR!6n=R*Bkv+Brw_Ff)^Gk4mA3B;Tf4Qs^T(VA_<?~r zBs1=;++>n{cESK~PJ+HksrJ+JW@{YnzU!kOacxQhAZdl|73$JGLaQUTi9%%$$=a)* zw&aHZ7MLA;XUp`S{4SfA%Sp={g!Yi!ixPu`v;ED?>2o0&{i8v8E55}9Ua!Xva^1rE zf|I;oJWILxfTAw9uL)=r2dj^3elqi`)SoAfoesTlXOe(8<qvg+69Aseub&JI6B2tv zkvcWdln&;3xj7^RbG5PJKy7)%!X#s5v9yWaBOoD`?gf{_=#74Cd<dK*s1tx$*-%v` zLA3*mWtJqqM3^p5?6+BbTxzS@%W7uu2S_!yZ{TUYaCDKZG)DhqBNcL>W+*2Tf2Cws z!_0Io=*HTO#Z&$VM}NgsB8tJiJ<Yz(=pBWxPe>z_L150jKP2OaqsoxT;XXN`gd}@F z?|u^~?#*f)I_b~L573yEcsV-w=a6**AGDLD0GBGUc|!LyIH%3e%7;mBePu<dvDl*D z5>x!Z71oLalMidv*k6X6AnsnQ`3zoDpx^ZKX$#eo4An*O^Qj%@0@<+Oy|Q|_bMx&D z2mt4<vmxm{!8@HrM1?w5elwl(NuMDBySfib)H-U6SzUkuZ}<Zc7x?YeJw7s_E|Z;7 zx=p^RjtRUnP@~ovSG*yk!#DT<=)?0}t^){TsBj0w-~;r5D)=`G0L!_3Ex=~kEV54Z zgZ2&+_A^P#BDrtI{DY%k;OXX*n(7|j7k(LoQ~K}vx7kps&nF*(AFeo*U9F1(V4?u1 zhT-8Dqx?GW)GLSOhJa8mS|qkuM&VOigK5czfmtMusV$eG-_(dA@?k>9s#?&vph%{b z4;biXXq@@#2t13U4=8;WfH5cQ5cNf<?_dA=F&{q*{{Fy9{Z!H&J6chbjEYWaP|{($ z@r5}02SQVL0UKap)-Y_FRsAUaqPKqSTcv=T(FDQGpT_m_KwzKS;ih(&*O8d`6Hg)6 zRhbtPZ`^XZ03<u4H)h^M(qhIUN{ZL3jyM3??0=vk^>cpDRpiN-V6qNhY5m1UYrkJt z#pX=k&ETbSq>6KB0YTNK89Lt!s0>wG=dVC(!xZPOzdiyQW9S23XD!+J*K1YVWt}-M z^zdd0P?R=9oc_QAj)E`{r3f?#4QVT#OM}O6$}5Z3k3)sQiBj(0a@OC(%85EF^vk?U zq>9Z|<N6DLIh-Zs*|ehe1jG7i1{o;vC@YCC2RQ$-7$R(&tsW4>439CaOjyfhB%ul* zG2&ay^y%7Rs$KrIH*0BYLJ%e}vNYR|6#IrRHd~bBOi0$g7wJFod8<In{c=FV0fE3} zYZi9R9^%T;(PWLcw!Z7%LRc)E-nt?Hn^w%q*bC5i$&WFFUm4b-GXY+|nNXp*33+RF z*U?oy_tK7dL``u#Qidn&Wz5gtasqC~V`}UDPg_Q5%U3PJN;vd8S6v;73^$wr@$_tA z#X~I*QQatKKFQ-WhB#qGNXwJ#WNbsJoJZ>A9zZ--KH^gJbSE{sEnb`^0XlkPhNmUc zyyj;u?oIw~x}<ap?eYv8@a9*D$+C6<9LUMBWN@QNiI~SXcvAs;*E1f}lMNK}6S)!? z{87O>qOGE~<MWzM>e=^5=N@$2w-{SpK4R^E`+Ao^5wktd1!9NO^oq^2N!}nwDB_#Z z8idLIram>K=d#?lfi+VRe%LK$$@Cwlp>;OR4ggEswJB>ZvD7!2FZp>R!a?KoGFWd_ zk(xbC3fHYmmmgQat)1Y`Pfo@q4JfW`L-P(!gMV~!Sl+?(sKxfE;24u#v*lbXU0}^I zqQ7C+HMzzg;QLU=w;R081l02FKCj!oec=@Nz3ctXzxSH*&g}>|=|nJL+mf=!M0Yy) z4Z{=4xE>fX@&ioMTWW|(eVt5>&`EgM=mh2_A)^p73IFP`;{ZHkcMOsXV#6}L1fLHE z9G?TQ!;G&R0I6>y$RzH+$<DEJb|z#JTL<qr`74UvFMwEyZ@t8PDRpsNiq{b(`S%k) zmo3Pt3<2vL7An39fF}6$#5yJv*l|Y!U}UhZfZ?|dEoJjyQ2<Ue@dKQiPgwK4SzTri zD((J!l>Jba637N*e)0XeE5&^&lN7r=arUvgR2oPU|Mo-$fD$xnwF25_Q?TFtxb)(< z(d3h|sU6)T_nX!aD*zE8LVJt#SG{I$J3d2mzeGQ~+_h)j559(8P|{!r6?SvxPX>A2 z$xzBR6znhb6@b@XH?;`oZX!Vwn^PSDhl$$tQzomtl%Jh;vz}j$c-=o7Z3Ru&+2}*4 z*Q_0%P^Z1uT$lc|wOrW=fYvk&u&1$Mzt=r>2KOgMm^jD*@B`O^!1qlm3@L+bm&Yd` zl5P}Q9VMGu_ah^1LyEG?=>Tk9*os;q;cDDB;8D8Nd)apqt9fggu$ZBdsUiqWxs<I7 zT+2~y+AhQjD*Omc=<qQn3o!j~+8SN}7>=dmG{?FFbW`URcK2E8VPWuTIt$XCPFkmG zOx`{H$f+if*7i@215xm7x5oCVGs~`}HcO|<m{!U@Hm!pcjfuw_EPuM*WO|0Wn&sXw z3wyn~m-VUcuMfQm1~d*{`?x@>0CG<Dc`wLJv1SmGNWt%S0&4D(qzE2s(Afe)CRp*r zrWJxn`P27Yy9(kH((HRwxuU;1CCD!T`$c}Hm2aS1E<T3VmbqtFLq6iHwa^V4GvJhn zi(%LiFkcJ>Wqfn2ba<TQG@2bIb?9@xQQgbmB$ySn7U}TIVi;iA4=d0G4~l>#SOEkk zpN9azU<MEA#Qq^wJpi&zu*reFh;svj>2vnP#Min@r)vvf4#2r|eEpOsZ7HL_*G>k< z9VS(rCvDa;XRy_>bqx%ekk1JB|HbwHFGo$V2NaWo+peGtG`93j4vB3vw~Kjsq}4G2 zwvSY|BfHlsh&jYU7hB)fma_uVmR?s(%XGE3oKMYJUyJs;JqkL2H)!zx!zV<&z$%Nu znJ+B16M2vEP+?$^Vq`8(@zkJdebTn<e&9uPfxDyhbR?4Fb9DDlq)DkC|FPdHVtb9P z)rIx`3vS3s?u#aE*SR4mOH-~wFXQ^0R~JLO@N9(;m>S5^{+GQ22EHQ>4@9$JU-T40 z(qZFVTRD>WyFxLK1X+V!S9r{Fd5-0RAbq)vDdNVLJNZ+!(~|7vaxUZTc3QZAFNkS6 aG&k*-<;QCa8KArixN^}zJ73c(@c#hmg5moB literal 0 HcmV?d00001 diff --git a/art/os/linux.png b/art/os/linux.png new file mode 100644 index 0000000000000000000000000000000000000000..fd92b58f3b7e535a95694abd9d80e8e5094897db GIT binary patch literal 37161 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 literal 0 HcmV?d00001 diff --git a/art/os/macos.png b/art/os/macos.png new file mode 100644 index 0000000000000000000000000000000000000000..193feecce5a68cea44fe938e1cdac4e180c6cec2 GIT binary patch literal 5261 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 C<mDRx literal 0 HcmV?d00001 diff --git a/art/os/windows.png b/art/os/windows.png new file mode 100644 index 0000000000000000000000000000000000000000..3de8a4b6e6015be85edb385c9cb60b20a7b848cc GIT binary patch literal 6295 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 POu^WYu_t$z^KbtHWONqX literal 0 HcmV?d00001 diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..63303a2 --- /dev/null +++ b/composer.json @@ -0,0 +1,31 @@ +{ + "name": "yangweijie\/think-laradumps", + "description": "debug tool Using Laradumps App in ThinkPHP", + "license": "MIT", + "authors": [ + { + "name": "yangweijie", + "email": "917647288@qq.com" + } + ], + "require": { + "php": ">=7.2.0", + "topthink/framework": "6.0.*", + "ramsey/uuid": "^4.2" + }, + "autoload": { + "psr-4": { + "think\\Laradumps\\": "src" + }, + "files": [ + "src/functions.php" + ] + }, + "extra": { + "think": { + "config": { + "laradumps": "config/config.php" + } + } + } +} diff --git a/config/config.php b/config/config.php new file mode 100644 index 0000000..4216397 --- /dev/null +++ b/config/config.php @@ -0,0 +1,205 @@ +<?php + +use think\facade\Env; + +return [ + + /* + |-------------------------------------------------------------------------- + | Host + |-------------------------------------------------------------------------- + | + | Dumps App Host address. By default: '127.0.0.1', + | Uncomment the line below according to your environment. + | + */ + + 'host' => Env::get('laradumps.DS_APP_HOST', '127.0.0.1'), + + //'host' => 'host.docker.internal', //Docker on Mac or Windows + //'host' => '127.0.0.1', //Homestead with the VirtualBox provider, + //'host' => '10.211.55.2', //Homestead with the Parallels provider, + + /* + |-------------------------------------------------------------------------- + | Port + |-------------------------------------------------------------------------- + | + | Dumps App port. By default: 9191 + | + */ + + 'port' => Env::get('laradumps.DS_APP_PORT', 9191), + + /* + |-------------------------------------------------------------------------- + | Auto Invoke Desktop App + |-------------------------------------------------------------------------- + | + | Invoke LaraDumps Desktop App to gain focus when a new dump arrives. + | + */ + + 'auto_invoke_app' => Env::get('laradumps.DS_AUTO_INVOKE_APP', true), + + /* + |-------------------------------------------------------------------------- + | SQL Query dump + |-------------------------------------------------------------------------- + | + | When `true`, it allows to dump database and send them to Desktop App. + | Required for: ds()->queriesOn() method. + | + */ + + 'send_queries' => Env::get('laradumps.DS_SEND_QUERIES', false), + + /* + |-------------------------------------------------------------------------- + | Log dump + |-------------------------------------------------------------------------- + | + | When `true`, it allows to dump Laravel logs and send them to Desktop App. + | Required for logs dumping. + | + */ + + 'send_log_applications' => Env::get('laradumps.DS_SEND_LOGS', false), + + 'auto_clear_on_page_reload' => Env::get('laradumps.DS_AUTO_CLEAR_ON_PAGE_RELOAD', false), + + /* + |-------------------------------------------------------------------------- + | Preferred IDE + |-------------------------------------------------------------------------- + | + | Configure your preferred IDE to be used in Dumps App file links. + | + */ + + 'preferred_ide' => Env::get('laradumps.DS_PREFERRED_IDE', 'phpstorm'), + + /* + |-------------------------------------------------------------------------- + | IDE Handlers + |-------------------------------------------------------------------------- + | + | Dumps already ships with pre-configured IDE protocol handlers. + | You may adjust the handler or include custom ones, if needed. + | + */ + + 'ide_handlers' => [ + 'atom' => [ + 'handler' => 'atom://core/open/file?filename=', + 'line_separator' => '&line=', + ], + 'phpstorm' => [ + 'handler' => 'phpstorm://open?file=', + 'line_separator' => '&line=', + ], + 'sublime' => [ + 'handler' => 'subl://open?url=file://', + 'line_separator' => '&line=', + ], + 'vscode' => [ + 'handler' => 'vscode://file/', + 'line_separator' => ':', + ], + 'vscode_remote' => [ + 'handler' => 'vscode://vscode-remote/', + 'line_separator' => ':', + 'local_path' => 'wsl+' . Env::get('laradumps.DS_PREFERRED_WSL_DISTRO', 'Ubuntu20.04LTS'), + 'remote_path' => Env::get('laradumps.DS_REMOTE_PATH', null), + 'work_dir' => Env::get('laradumps.DS_WORKDIR', '/var/www/html'), + ], + ], + + /* + |-------------------------------------------------------------------------- + | Ignore Routes + |-------------------------------------------------------------------------- + | + | Routes containing the words listed below will NOT be dumped with + | ds()->routes() command. + | + */ + + 'ignore_route_contains' => [ + 'debugbar', + 'ignition', + 'horizon', + 'livewire', + ], + + /* + |-------------------------------------------------------------------------- + | Sleep + |-------------------------------------------------------------------------- + | + | You can specify an interval in 'seconds' between sending dumps + | to the Desktop App. + | + */ + + 'sleep' => Env::get('laradumps.DS_SLEEP'), + + /* + |-------------------------------------------------------------------------- + | Color in Screen + |-------------------------------------------------------------------------- + | + | If true, LaraDumps will separate colors into screens with the name of the + | submitted color. + | + */ + + 'send_color_in_screen' => Env::get('laradumps.DS_SEND_COLOR_IN_SCREEN', false), + + /* + |-------------------------------------------------------------------------- + | Color in Screen - Color Map + |-------------------------------------------------------------------------- + | + | Color map for "Color in Screen" feature. + | + */ + + 'screen_btn_colors_map' => [ + 'default' => [ + 'default' => 'btn-white', + ], + 'danger' => [ + 'default' => 'btn-danger', + ], + 'info' => [ + 'default' => 'btn-info', + ], + 'success' => [ + 'default' => 'btn-success', + ], + 'warning' => [ + 'default' => 'btn-warning', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Level Log Colors Map + |-------------------------------------------------------------------------- + | + | Definition of Tailwind CSS class for LaraDumps color tag. + | + */ + + 'level_log_colors_map' => [ + 'error' => Env::get('laradumps.DS_LOG_COLOR_ERROR', 'bg-red-600'), + 'critical' => Env::get('laradumps.DS_LOG_COLOR_CRITICAL', 'bg-red-600'), + 'alert' => Env::get('laradumps.DS_LOG_COLOR_ALERT', 'bg-red-600'), + 'emergency' => Env::get('laradumps.DS_LOG_COLOR_EMERGENCY', 'bg-red-600'), + 'warning' => Env::get('laradumps.DS_LOG_COLOR_WARNING', 'bg-orange-300'), + 'notice' => Env::get('laradumps.DS_LOG_COLOR_NOTICE', 'bg-blue-300'), + 'info' => Env::get('laradumps.DS_LOG_COLOR_INFO', 'bg-gray-300'), + ], + +]; \ No newline at end of file diff --git a/src/.gitkeep b/src/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/Concerns/Colors.php b/src/Concerns/Colors.php new file mode 100644 index 0000000..21a48a5 --- /dev/null +++ b/src/Concerns/Colors.php @@ -0,0 +1,49 @@ +<?php + +namespace think\Laradumps\Concerns; + +use think\Laradumps\LaraDumps; + +trait Colors +{ + public function danger(): LaraDumps + { + if (boolval(config('laradumps.send_color_in_screen'))) { + return $this->toScreen('danger', true); + } + + return $this->color('bg-red-300'); + } + + public function dark(): LaraDumps + { + return $this->color('bg-black'); + } + + public function warning(): LaraDumps + { + if (boolval(config('laradumps.send_color_in_screen'))) { + return $this->toScreen('warning', true); + } + + return $this->color('bg-orange-300'); + } + + public function success(): LaraDumps + { + if (boolval(config('laradumps.send_color_in_screen'))) { + return $this->toScreen('success', true); + } + + return $this->color('bg-green-600'); + } + + public function info(): LaraDumps + { + if (boolval(config('laradumps.send_color_in_screen'))) { + return $this->toScreen('info', true); + } + + return $this->color('bg-blue-600'); + } +} \ No newline at end of file diff --git a/src/Http.php b/src/Http.php new file mode 100644 index 0000000..065afbd --- /dev/null +++ b/src/Http.php @@ -0,0 +1,150 @@ +<?php + +// +---------------------------------------------------------------------- +// | Library for ThinkAdmin +// +---------------------------------------------------------------------- +// | 版权所有 2014~2018 广州楚才信息科技有限公司 [ http://www.cuci.cc ] +// +---------------------------------------------------------------------- +// | 官方网站: http://library.thinkadmin.top +// +---------------------------------------------------------------------- +// | 开源协议 ( https://mit-license.org ) +// +---------------------------------------------------------------------- +// | github 仓库地址 :https://github.com/zoujingli/ThinkLibrary +// +---------------------------------------------------------------------- + +namespace think\Laradumps; + +/** + * CURL数据请求管理器 + * Class Http + * @package library\tools + */ +class Http +{ + /** + * 以get模拟网络请求 + * @param string $url HTTP请求URL地址 + * @param array $query GET请求参数 + * @param array $options CURL参数 + * @return boolean|string + */ + public static function get($url, $query = [], $options = []) + { + $options['query'] = $query; + return self::request('get', $url, $options); + } + + /** + * 以get模拟网络请求 + * @param string $url HTTP请求URL地址 + * @param array $data POST请求数据 + * @param array $options CURL参数 + * @return boolean|string + */ + public static function post($url, $data = [], $options = []) + { + $options['data'] = $data; + return self::request('post', $url, $options); + } + + /** + * CURL模拟网络请求 + * @param string $method 请求方法 + * @param string $url 请求方法 + * @param array $options 请求参数[headers,data] + * @return boolean|string + */ + public static function request($method, $url, $options = []) + { + $key = "http_{$url}"; + cache($key, null); + $curl = curl_init(); + // GET 参数设置 + if (!empty($options['query'])) { + $url .= (stripos($url, '?') !== false ? '&' : '?') . http_build_query($options['query']); + } + // 浏览器代理设置 + curl_setopt($curl, CURLOPT_USERAGENT, self::getUserAgent()); + // CURL 头信息设置 + if (!empty($options['headers'])) { + curl_setopt($curl, CURLOPT_HTTPHEADER, $options['headers']); + } + // Cookie 信息设置 + if (!empty($options['cookie'])) { + curl_setopt($curl, CURLOPT_COOKIE, $options['cookie']); + } + if (!empty($options['cookie_file'])) { + curl_setopt($curl, CURLOPT_COOKIEJAR, $options['cookie_file']); + curl_setopt($curl, CURLOPT_COOKIEFILE, $options['cookie_file']); + } + // POST 数据设置 + if (strtolower($method) === 'post') { + curl_setopt($curl, CURLOPT_POST, true); + curl_setopt($curl, CURLOPT_POSTFIELDS, self::buildQueryData($options['data'])); + } + // 请求超时设置 + if (isset($options['timeout']) && is_numeric($options['timeout'])) { + curl_setopt($curl, CURLOPT_TIMEOUT, $options['timeout']); + } else { + curl_setopt($curl, CURLOPT_TIMEOUT, 60); + } + curl_setopt($curl, CURLOPT_URL, $url); + curl_setopt($curl, CURLOPT_HEADER, false); + curl_setopt($curl, CURLOPT_AUTOREFERER, true); + curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); + $content = curl_exec($curl); + if(curl_errno($curl)) + { + $error = curl_error($curl); + cache($key, $error); + trace($error); + } + curl_close($curl); + return $content; + } + + /** + * POST数据过滤处理 + * @param array $data 需要处理的数据 + * @param boolean $build 是否编译数据 + * @return array|string + */ + private static function buildQueryData($data, $build = true) + { + if (!is_array($data)) return $data; + foreach ($data as $key => $value) if (is_object($value) && $value instanceof \CURLFile) { + $build = false; + } elseif (is_string($value) && class_exists('CURLFile', false) && stripos($value, '@') === 0) { + if (($filename = realpath(trim($value, '@'))) && file_exists($filename)) { + list($build, $data[$key]) = [false, new \CURLFile($filename)]; + } + } + return $build ? http_build_query($data) : $data; + } + + + /** + * 获取浏览器代理信息 + * @return string + */ + private static function getUserAgent() + { + if (!empty($_SERVER['HTTP_USER_AGENT'])) return $_SERVER['HTTP_USER_AGENT']; + $userAgents = [ + "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1", + "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11", + "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0", + "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko", + "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50", + "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)", + "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11", + ]; + return $userAgents[array_rand($userAgents, 1)]; + } + +} \ No newline at end of file diff --git a/src/LaraDumps.php b/src/LaraDumps.php new file mode 100644 index 0000000..57577ca --- /dev/null +++ b/src/LaraDumps.php @@ -0,0 +1,227 @@ +<?php + +namespace think\Laradumps; + +use think\Model; +use Illuminate\Support\{Collection, Str}; +use think\Laradumps\Concerns\Colors; +use think\Laradumps\Payloads\{ClearPayload, + ColorPayload, + DiffPayload, + DumpPayload, + LabelPayload, + ModelPayload, + Payload, + PhpInfoPayload, + RoutesPayload, + ScreenPayload, + TablePayload, + TimeTrackPayload, + ValidateStringPayload}; + +class LaraDumps +{ + use Colors; + + public $notificationId = ''; + public $fullUrl = ''; + public $backtrace = []; + + public function __construct( + $notificationId = '', + $fullUrl = '', + $backtrace = [] + ) { + if (config('laradumps.sleep')) { + $sleep = intval(config('laradumps.sleep')); + sleep($sleep); + } + + $this->fullUrl = config('laradumps.host') . ':' . config('laradumps.port') . '/api/dumps'; + $this->notificationId = $notificationId?? Str::uuid()->toString(); + $this->backtrace = $backtrace; + } + + public function send($payload) + { + if ($payload instanceof Payload) { + $payload->trace($this->backtrace); + $payload->notificationId($this->notificationId); + $payload = $payload->toArray(); + try { + Http::post($this->fullUrl, $payload); + } catch (\Throwable $e) { + trace($e->getMessage().PHP_EOL.$e->getTraceAsString()); + } + } + + return $payload; + } + + /** + * Send custom color + * + */ + public function color(string $color): LaraDumps + { + $payload = new ColorPayload($color); + $this->send($payload); + + return $this; + } + + /** + * Add new screen + * + */ + public function s(string $screen, bool $classAttr = false): LaraDumps + { + return $this->toScreen($screen, $classAttr); + } + + /** + * Add new screen + * + * @param int $raiseIn Delay in seconds for the app to raise and focus + */ + public function toScreen( + string $screenName, + bool $classAttr = false, + int $raiseIn = 0 + ): LaraDumps { + $payload = new ScreenPayload($screenName, $classAttr, $raiseIn); + $this->send($payload); + + return $this; + } + + /** + * Send dump and die + */ + public function die(string $status = ''): void + { + die($status); + } + + /** + * Clear screen + * + */ + public function clear(): LaraDumps + { + $this->send(new ClearPayload()); + + return $this; + } + + /** + * Send PHPInfo + * + */ + public function phpinfo(): LaraDumps + { + $this->send(new PhpInfoPayload()); + + return $this; + } + + /** + * Send Table + * + */ + public function table($data = [], string $name = '') + { + $this->send(new TablePayload($data, $name)); + + return $this; + } + + public function write($args = null, ?bool $autoInvokeApp = null): LaraDumps + { + $originalContent = $args; + $args = Support\Dumper::dump($args); + trace($args); + if (!empty($args)) { + $payload = new DumpPayload($args, $originalContent); + trace($payload); + $payload->autoInvokeApp($autoInvokeApp); + $this->send($payload); + } + + return $this; + } + + // /** + // * Shows model attributes and relationship + // * + // */ + // public function model(Model ...$models): LaraDumps + // { + // foreach ($models as $model) { + // if ($model instanceof Model) { + // $payload = new ModelPayload($model); + // $this->send($payload); + // } + // } + + // return $this; + // } + + /** + * Display all queries that are executed with custom label + * + */ + public function queriesOn(string $label = null): void + { + $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1)[0]; + + app(QueryObserver::class)->setTrace($backtrace); + app(QueryObserver::class)->enable($label); + } + + /** + * Stop displaying queries + * + */ + public function queriesOff(): void + { + app(QueryObserver::class)->disable(); + } + + /** + * @param mixed $argument + * @param boolean $splitDiff Outputs comparison result in 2 rows (original/diff). + * @return LaraDumps + */ + public function diff(mixed $argument, bool $splitDiff = false): LaraDumps + { + $argument = is_array($argument) ? json_encode($argument) : $argument; + + $payload = new DiffPayload($argument, $splitDiff); + $this->send($payload); + + return $this; + } + + /** + * Starts clocking a code block execution time + * + * @param string $reference Unique name for this time clocking + */ + public function time(string $reference): void + { + $payload = new TimeTrackPayload($reference); + $this->send($payload); + } + + /** + * Stops clocking a code block execution time + * + * @param string $reference Unique name called on ds()->time() + */ + public function stopTime(string $reference): void + { + $payload = new TimeTrackPayload($reference); + $this->send($payload); + } +} \ No newline at end of file diff --git a/src/Payloads/ClearPayload.php b/src/Payloads/ClearPayload.php new file mode 100644 index 0000000..cebf25c --- /dev/null +++ b/src/Payloads/ClearPayload.php @@ -0,0 +1,17 @@ +<?php + +namespace think\Laradumps\Payloads; + +class ClearPayload extends Payload +{ + public function type(): string + { + return 'clear'; + } + + /** @return array<string> */ + public function content(): array + { + return []; + } +} \ No newline at end of file diff --git a/src/Payloads/ColorPayload.php b/src/Payloads/ColorPayload.php new file mode 100644 index 0000000..3396899 --- /dev/null +++ b/src/Payloads/ColorPayload.php @@ -0,0 +1,26 @@ +<?php + +namespace think\Laradumps\Payloads; + +class ColorPayload extends Payload +{ + public $color; + public function __construct( + string $color + ) { + $this->color = $color; + } + + public function type(): string + { + return 'color'; + } + + /** @return array<string> */ + public function content(): array + { + return [ + 'color' => $this->color, + ]; + } +} \ No newline at end of file diff --git a/src/Payloads/DiffPayload.php b/src/Payloads/DiffPayload.php new file mode 100644 index 0000000..88e305e --- /dev/null +++ b/src/Payloads/DiffPayload.php @@ -0,0 +1,31 @@ +<?php + +namespace think\Laradumps\Payloads; + +class DiffPayload extends Payload +{ + public mixed $argument; + public bool $splitDiff; + + public function __construct( + mixed $argument, + bool $splitDiff + ) { + $this->argument = $argument; + $this->splitDiff = $splitDiff; + } + + public function type(): string + { + return 'diff'; + } + + /** @return array<string, mixed> */ + public function content(): array + { + return [ + 'argument' => $this->argument, + 'splitDiff' => $this->splitDiff, + ]; + } +} \ No newline at end of file diff --git a/src/Payloads/DumpPayload.php b/src/Payloads/DumpPayload.php new file mode 100644 index 0000000..7c38fbf --- /dev/null +++ b/src/Payloads/DumpPayload.php @@ -0,0 +1,30 @@ +<?php + +namespace think\Laradumps\Payloads; + +class DumpPayload extends Payload +{ + public $dump; + public $originalContent = null; + + public function __construct( + $dump, + $originalContent = null + ) { + $this->dump = $dump; + $this->originalContent = $originalContent; + } + + public function type(): string + { + return 'dump'; + } + + public function content(): array + { + return [ + 'dump' => $this->dump, + 'originalContent' => $this->originalContent, + ]; + } +} \ No newline at end of file diff --git a/src/Payloads/EventPayload.php b/src/Payloads/EventPayload.php new file mode 100644 index 0000000..4fe8bea --- /dev/null +++ b/src/Payloads/EventPayload.php @@ -0,0 +1,32 @@ +<?php + +namespace think\Laradumps\Payloads; + +class EventPayload extends Payload +{ + /** @var object|mixed|null */ + protected $event = null; + + public function __construct($eventName, $payload) + { + if (class_exists($eventName)) { + $this->event = $payload[0]; + } + $this->payload = $payload; + } + + public function content(): array + { + return [ + 'name' => $this->eventName, + 'event' => $this->event ?: null, + 'payload' => count($this->payload) ? $this->payload : null, + 'class_based_event' => !is_null($this->event), + ]; + } + + public function type(): string + { + return 'events'; + } +} \ No newline at end of file diff --git a/src/Payloads/LogPayload.php b/src/Payloads/LogPayload.php new file mode 100644 index 0000000..be990c6 --- /dev/null +++ b/src/Payloads/LogPayload.php @@ -0,0 +1,25 @@ +<?php + +namespace think\Laradumps\Payloads; + +class LogPayload extends Payload +{ + protected $value; + public function __construct( + $value + ) { + $this->value = $value; + } + + public function type(): string + { + return 'log'; + } + + public function content(): array + { + return [ + 'value' => $this->value, + ]; + } +} \ No newline at end of file diff --git a/src/Payloads/ModelPayload.php b/src/Payloads/ModelPayload.php new file mode 100644 index 0000000..bd9adc5 --- /dev/null +++ b/src/Payloads/ModelPayload.php @@ -0,0 +1,48 @@ +<?php + +namespace think\Laradumps\Payloads; + +use think\Model; +use think\Laradumps\Support\Dumper; + +class ModelPayload extends Payload +{ + protected $model; + + public function __construct( + $model + ) { + $this->model = $model; + } + + public function type(): string + { + return 'model'; + } + + /** @return array<string, array|string> */ + public function content(): array + { + $relations = $this->model->getRelation(); + + return [ + 'relations' => $relations ? Dumper::dump($relations) : [], + 'className' => get_class($this->model), + 'attributes' => Dumper::dump($this->modelAttributes($this->model)), + ]; + } + + public function modelAttributes($model){ + $data = $model->getData(); + $orign = $model->getOrigin(); + if($data == $orign){ + return $data; + }else{ + $ret = []; + foreach ($data as $key => $value) { + $ret[$key] = $model->getAttr($value); + } + return $ret; + } + } +} \ No newline at end of file diff --git a/src/Payloads/Payload.php b/src/Payloads/Payload.php new file mode 100644 index 0000000..c764959 --- /dev/null +++ b/src/Payloads/Payload.php @@ -0,0 +1,91 @@ +<?php + +namespace think\Laradumps\Payloads; + +use think\Laradumps\Support\IdeHandle; + +abstract class Payload +{ + private $notificationId; + + private $backtrace = []; + + protected $typesWithTrace = [ + 'table', + 'validate', + 'query', + 'queries', + 'dump', + 'events', + 'diff', + 'model', + 'time-track', + ]; + + private ?bool $autoInvokeApp = null; + + abstract public function type(): string; + + public function trace(array $backtrace): void + { + $this->backtrace = $backtrace; + } + + public function notificationId(string $notificationId): void + { + $this->notificationId = $notificationId; + } + + public function content(): array + { + return []; + } + + public function ideHandle(): array + { + $trace = new IdeHandle( $this->backtrace); + + return $trace->ideHandle(); + } + + public function customHandle(): array + { + return []; + } + + public function autoInvokeApp(?bool $enable = null): void + { + $this->autoInvokeApp = $enable; + } + + public function toArray(): array + { + $ideHandle = $this->customHandle(); + if (in_array($this->type(), $this->typesWithTrace)) { + $ideHandle = $this->ideHandle(); + } + + $pusherConfig = ''; + if (boolval(config('laradumps.send_livewire_components_highlight'))) { + $pusherConfig = config('broadcasting.connections.pusher'); + } + + return [ + 'id' => $this->notificationId, + 'type' => $this->type(), + 'meta' => [ + 'laradumps_version' => $this->getInstalledVersion(), + 'auto_invoke_app' => $this->autoInvokeApp ?? boolval(config('laradumps.auto_invoke_app')), + ], + 'content' => $this->content(), + 'ideHandle' => $ideHandle, + 'dateTime' => date('H:i:s'), + 'pusher' => $pusherConfig, + ]; + } + + public function getInstalledVersion(): ?string + { + return '1.3.2.0'; + } +} \ No newline at end of file diff --git a/src/Payloads/PhpInfoPayload.php b/src/Payloads/PhpInfoPayload.php new file mode 100644 index 0000000..863fd32 --- /dev/null +++ b/src/Payloads/PhpInfoPayload.php @@ -0,0 +1,47 @@ +<?php + +namespace think\Laradumps\Payloads; + +class PhpInfoPayload extends Payload +{ + public function type(): string + { + return 'table'; + } + + /** + * @return array + */ + public function content(): array + { + $phpinfo = [ + 'PHP version' => phpversion(), + 'Memory limit' => ini_get('memory_limit'), + 'Max file upload size' => ini_get('max_file_uploads'), + 'Max post size' => ini_get('post_max_size'), + 'ini file' => php_ini_loaded_file(), + 'Extensions' => implode(', ', get_loaded_extensions()), + ]; + + foreach ($phpinfo as $key => $value) { + /** @var array<string> $values */ + $values[] = [ + 'property' => $key, + 'value' => $value, + ]; + } + + return [ + 'fields' => [ + 'property', + 'value', + ], + 'values' => $values, + 'header' => [ + 'Property', + 'Value', + ], + 'label' => 'PHPINFO', + ]; + } +} diff --git a/src/Payloads/QueriesPayload.php b/src/Payloads/QueriesPayload.php new file mode 100644 index 0000000..e28b4d3 --- /dev/null +++ b/src/Payloads/QueriesPayload.php @@ -0,0 +1,37 @@ +<?php + +namespace think\Laradumps\Payloads; + +class QueriesPayload extends Payload +{ + private $queries = []; + public $file = ''; + public $line = ''; + public $trace = []; + + public function __construct( + $queries = [], + $file = '', + $line = '', + $trace = [] + ) { + $this->queries = $queries; + $this->file = $file; + $this->line = $line; + $this->trace = $trace; + } + + public function type(): string + { + return 'queries'; + } + + public function content(): array + { + return [ + 'queries' => $this->queries, + 'file' => $this->file, + 'line' => $this->line, + ]; + } +} \ No newline at end of file diff --git a/src/Payloads/QueryPayload.php b/src/Payloads/QueryPayload.php new file mode 100644 index 0000000..06af3d3 --- /dev/null +++ b/src/Payloads/QueryPayload.php @@ -0,0 +1,30 @@ +<?php + +namespace think\Laradumps\Payloads; + +use Illuminate\Database\Query\Builder; + +class QueryPayload extends Payload +{ + protected $query; + public function __construct( + $query + ) { + $this->query = $query; + } + + public function content(): array + { + $toSql = str_replace(['?'], ['\'%s\''], $this->query->toSql()); + $toSql = vsprintf($toSql, $this->query->getBindings()); + + return [ + 'sql' => $toSql, + ]; + } + + public function type(): string + { + return 'query'; + } +} \ No newline at end of file diff --git a/src/Payloads/ScreenPayload.php b/src/Payloads/ScreenPayload.php new file mode 100644 index 0000000..9de94b7 --- /dev/null +++ b/src/Payloads/ScreenPayload.php @@ -0,0 +1,39 @@ +<?php + +namespace think\Laradumps\Payloads; + +class ScreenPayload extends Payload +{ + public $screenName; + public $classAttr = false; + public $raiseIn = 0; + + public function __construct( + $screenName, + $classAttr = false, + $raiseIn = 0 + ) { + $this->screenName = $screenName; + $this->classAttr = $classAttr; + $this->raiseIn = $raiseIn; + } + + public function type(): string + { + return 'screen'; + } + + /** @return array<string|mixed> */ + public function content(): array + { + /** @var array $config */ + $config = config('laradumps.screen_btn_colors_map'); + $classAttr = ($this->classAttr) ? $config[$this->screenName] : $config['default']; + + return [ + 'screenName' => $this->screenName, + 'classAttr' => $classAttr, + 'raiseIn' => $this->raiseIn, + ]; + } +} \ No newline at end of file diff --git a/src/Payloads/TablePayload.php b/src/Payloads/TablePayload.php new file mode 100644 index 0000000..ffacfa2 --- /dev/null +++ b/src/Payloads/TablePayload.php @@ -0,0 +1,61 @@ +<?php + +namespace think\Laradumps\Payloads; + +use Illuminate\Support\Collection; + +class TablePayload extends Payload +{ + private $data = []; + private $name = ''; + + public function __construct( + $data = [], + $name = '' + ) { + if (blank($this->name)) { + $this->name = 'Table'; + } + $this->data = $data; + } + + public function type(): string + { + return 'table'; + } + + /** + * @return array + */ + public function content(): array + { + $values = []; + $columns = []; + + if ($this->data instanceof Collection) { + $this->data = $this->data->toArray(); + } + + foreach ($this->data as $row) { + foreach ($row as $key => $item) { + if (!in_array($key, $columns)) { + $columns[] = $key; + } + } + + $value = []; + foreach ($columns as $column) { + $value[$column] = (string) $row[$column]; + } + + $values[] = $value; + } + + return [ + 'fields' => $columns, + 'values' => $values, + 'header' => $columns, + 'label' => $this->name, + ]; + } +} \ No newline at end of file diff --git a/src/Payloads/TimeTrackPayload.php b/src/Payloads/TimeTrackPayload.php new file mode 100644 index 0000000..e284689 --- /dev/null +++ b/src/Payloads/TimeTrackPayload.php @@ -0,0 +1,34 @@ +<?php + +namespace think\Laradumps\Payloads; + +class TimeTrackPayload extends Payload +{ + public $reference; + + /** + * Clock script executiontime + * + * @param string $reference Reference name used in each call + */ + public function __construct( + $reference + ) { + $this->reference = $reference; + } + + public function type(): string + { + return 'time-track'; + } + + /** @return array<string, mixed> */ + public function content(): array + { + return [ + 'timeTrackerId' => base64_encode(config('app.name') . strtolower($this->reference)), + 'label' => $this->reference, + 'time' => microtime(true), + ]; + } +} \ No newline at end of file diff --git a/src/Support/Dumper.php b/src/Support/Dumper.php new file mode 100644 index 0000000..2ec887e --- /dev/null +++ b/src/Support/Dumper.php @@ -0,0 +1,25 @@ +<?php + +namespace think\Laradumps\Support; + +use Symfony\Component\VarDumper\Cloner\VarCloner; +use Symfony\Component\VarDumper\Dumper\HtmlDumper; + +class Dumper +{ + public static function dump($arguments): string + { + $varCloner = new VarCloner(); + + $dumper = new HtmlDumper(); + + $htmlDumper = (string) $dumper->dump($varCloner->cloneVar($arguments), true); + return self::cut($htmlDumper, '<pre ', '</pre>'); + } + + public static function cut($string, $begin, $end){ + $str = strstr($string ,$begin); + $str = strstr($str, $end, true). $end; + return $str; + } +} \ No newline at end of file diff --git a/src/Support/IdeHandle.php b/src/Support/IdeHandle.php new file mode 100644 index 0000000..c8bedd6 --- /dev/null +++ b/src/Support/IdeHandle.php @@ -0,0 +1,73 @@ +<?php + +namespace think\Laradumps\Support; + +class IdeHandle +{ + public $backtrace; + public function __construct( + $backtrace = [] + ) { + $this->backtrace = $backtrace; + } + + public function ideHandle(): array + { + $file = $this->backtrace['file']?? ''; + + $line = $this->backtrace['line']?? 0; + + $fileHandle = $this->makeFileHandler($file, $line); + + if (str_contains($file, 'Laravel Kit')) { + $fileHandle = ''; + $file = 'Laravel Kit'; + $line = ''; + } + + if (str_contains($file, 'eval()')) { + $fileHandle = ''; + $file = 'Tinker'; + $line = ''; + } + + $file = str_replace(base_path() . '/', '', strval($file)); + + if (str_contains($file, 'resources')) { + $file = str_replace('resources/views/', '', strval($file)); + } + + return [ + 'handler' => $fileHandle, + 'path' => $file, + 'line' => $line, + ]; + } + + public static function makeFileHandler(?string $file, $line): string + { + /** @var string $preferredIde */ + $preferredIde = config('laradumps.preferred_ide'); + /** @var array $handlers */ + $handlers = config('laradumps.ide_handlers'); + + $ide = $handlers[$preferredIde] ?? $handlers['vscode']; + $localPath = $ide['local_path'] ?? null; + $remotePath = $ide['remote_path'] ?? null; + $workDir = $ide['work_dir'] ?? null; + + if (!empty($localPath)) { + $file = $localPath . $file; + } + + if (!empty($remotePath)) { + $file = str_replace($workDir, $remotePath, strval($file)); + } + + if (!empty($ide['line_separator'])) { + $line = $ide['line_separator'] . $line; + } + + return $ide['handler'] . $file . $line; + } +} \ No newline at end of file diff --git a/src/functions.php b/src/functions.php new file mode 100644 index 0000000..1a82272 --- /dev/null +++ b/src/functions.php @@ -0,0 +1,151 @@ +<?php + + +use Illuminate\Support\Str; +use think\Laradumps\LaraDumps; +use think\Laradumps\Payloads\BladePayload; +use Ramsey\Uuid\Uuid; +use Ramsey\Uuid\UuidFactory; + +if(!function_exists('uuid')){ + function uuid(){ + return Uuid::uuid4()->toString(); + } +} + +if (!function_exists('ds')) { + function ds(...$args): LaraDumps + { + $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1)[0]; + $notificationId = uuid(); + $dump = new LaraDumps($notificationId, '', $backtrace); + if ($args) { + foreach ($args as $arg) { + $dump->write($arg); + } + } + + return $dump; + } +} + +if (!function_exists('phpinfo')) { + function phpinfo(): LaraDumps + { + return ds()->phpinfo(); + } +} + +if (!function_exists('dsd')) { + function dsd(...$args): void + { + ds($args)->die(); + } +} + +if (!function_exists('ds1')) { + function ds1(...$args): LaraDumps + { + $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1)[0]; + + $notificationId = uuid(); + $dump = new LaraDumps($notificationId, $backtrace); + + if ($args) { + foreach ($args as $arg) { + $dump->write($arg)->toScreen('screen 1'); + } + } + + return new LaraDumps($notificationId, $backtrace); + } +} + +if (!function_exists('ds2')) { + function ds2(...$args): LaraDumps + { + $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1)[0]; + + $notificationId = uuid(); + $dump = new LaraDumps($notificationId, $backtrace); + + if ($args) { + foreach ($args as $arg) { + $dump->write($arg)->toScreen('screen 2'); + } + } + + return new LaraDumps($notificationId, $backtrace); + } +} + +if (!function_exists('ds3')) { + function ds3(...$args): LaraDumps + { + $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1)[0]; + + $notificationId = uuid(); + $dump = new LaraDumps($notificationId, $backtrace); + + if ($args) { + foreach ($args as $arg) { + $dump->write($arg)->toScreen('screen 3'); + } + } + + return new LaraDumps($notificationId, $backtrace); + } +} + +if (!function_exists('ds4')) { + function ds4(...$args): LaraDumps + { + $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1)[0]; + + $notificationId = uuid(); + $dump = new LaraDumps($notificationId, $backtrace); + + if ($args) { + foreach ($args as $arg) { + $dump->write($arg)->toScreen('screen 4'); + } + } + + return new LaraDumps($notificationId, $backtrace); + } +} + +if (!function_exists('ds5')) { + function ds5(...$args): LaraDumps + { + $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1)[0]; + + $notificationId = uuid(); + $dump = new LaraDumps($notificationId, $backtrace); + + if ($args) { + foreach ($args as $arg) { + $dump->write($arg)->toScreen('screen 5'); + } + } + + return new LaraDumps($notificationId, $backtrace); + } +} + + +if (!function_exists('dsq')) { + function dsq(...$args): void + { + $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1)[0]; + + $notificationId = uuid(); + $dump = new LaraDumps($notificationId, $backtrace); + + if ($args) { + foreach ($args as $arg) { + $dump->write($arg, false); + } + } + } +} \ No newline at end of file