From 400ca5533d9907c8b51eee0aef05c11aa6c0922e Mon Sep 17 00:00:00 2001 From: Eduard Ursu Date: Sat, 10 Feb 2024 13:56:25 +0100 Subject: [PATCH] 3.1.0 closes #89 closes #80 closes #78 - Updated hosts list - Added rules to .adblock file - Removed partner.ads script - Cosmetic and script tests set to 1 point each - Improved hosts test with fake 404 page --- .github/workflows/deploy.yml | 19 +- config/{purgecss.js => purgecss.mjs} | 11 +- package.json | 1 + src/adblock.ejs | 12 +- src/assets/preview_toolz.png | Bin 0 -> 56991 bytes src/assets/toolz/icon_filled.svg | 8 +- src/d3host.adblock | 15 +- src/d3host.txt | 11 +- src/data/adblock_data.json | 4 - src/data/font_list.js | 492 +++++++++++++-------------- src/index.ejs | 18 +- src/js/adblock.js | 37 +- src/js/components/fontChecker.js | 4 +- src/js/fontlist.js | 2 +- src/js/index.js | 2 +- src/js/partner.ads.js | 2 - src/js/units.js | 2 +- src/partials/adblock/changelog.ejs | 57 +--- src/partials/adblock/faq.ejs | 2 +- src/script/build_list.js | 3 + 20 files changed, 324 insertions(+), 378 deletions(-) rename config/{purgecss.js => purgecss.mjs} (80%) create mode 100644 src/assets/preview_toolz.png delete mode 100644 src/js/partner.ads.js diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 232ef7f..bc5e206 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -11,29 +11,20 @@ jobs: name: Deploying to gh-pages runs-on: ubuntu-latest steps: - - name: Setup Node.js for use with actions - uses: actions/setup-node@v3 - with: - version: 16.x - env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true' - name: Checkout branch - uses: actions/checkout@v2 - env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true' + uses: actions/checkout@v4 - name: Clean install dependencies run: npm install - env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true' - name: Build app run: npm run build - env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true' + + - name: Purge + run: npm run purge - name: deploy - uses: peaceiris/actions-gh-pages@v3 + uses: peaceiris/actions-gh-pages@v3.9.3 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./dist diff --git a/config/purgecss.js b/config/purgecss.mjs similarity index 80% rename from config/purgecss.js rename to config/purgecss.mjs index 7d454f1..18caa6e 100644 --- a/config/purgecss.js +++ b/config/purgecss.mjs @@ -1,8 +1,9 @@ -const { PurgeCSS } = require('purgecss') -const path = require('path') -const config = require('./config') -const fs = require('fs') -const chalk = require('chalk') +import { PurgeCSS } from 'purgecss' +import path from 'path' +import config from './config.js' // Make sure the config file is also compatible with ESM +import fs from 'fs' +import chalk from 'chalk' + const pages = config.pages const options = pages.map((page) => { const css = path.join(config.build, `css/${page}.css`) diff --git a/package.json b/package.json index a17154b..54f7329 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "dev": "webpack serve --config config/webpack.dev.js", "build": "webpack --config config/webpack.prod.js", "build-list": "node src/script/build_list.js", + "purge": "node config/purgecss.mjs", "format": "prettier --write '**/*.{js,ts}'", "lint": "eslint 'src/**/*.{js,ts}' && echo 'Linting complete!'", "lint-fix": "eslint 'src/**/*.{js,ts}' --fix" diff --git a/src/adblock.ejs b/src/adblock.ejs index 2717a3e..1d7615d 100644 --- a/src/adblock.ejs +++ b/src/adblock.ejs @@ -300,25 +300,19 @@   Ad Scripts Loading -
-
+
+
ads.js
-
+
pagead.js
-
-
- partner.ads.js - -
-

diff --git a/src/assets/preview_toolz.png b/src/assets/preview_toolz.png new file mode 100644 index 0000000000000000000000000000000000000000..fe454e53d7afa966662bab02a5274005e5cfd744 GIT binary patch literal 56991 zcmZU41z1$?w)YGmC0&Aah;(;%2oi#Tbcb|z4Ba51ARQ9YO6P#IzyQ)MjdVABd;Fh! z?m73H=h^IfYxQrf{Su|7B9Dpw932D#VJa%fya9m_kw75uS5#!+Nu5i`TM!7t)<#-d zO;K8!O3lU5(#FmL1X74f)ke|O7;1TGDZOGLtZ6^ka> z9nZ$p=z-f4T^Y^L+>G$8B=X68{>-hZr0lzA?&<`o{M2BB%hb~c*Ugbnjt|%KSp!*M ziSG%_AJ+4ALF-YcUygC9hmK2al;6CBLU2b>+M%I8lNEKGoyS0fYLA}Yo`_V@4_}kJ zro{Um%eIf6a8ZEzWg@w+xC|+}he0c(-gq`*AekqQf}%$G&{L|Z)GiRUVFC2rt5!V- zcS@s;+Dp!C%wr4CM2UVS&r?vGZ=w~^(YIXkI8~gM$ZHx-&}Uj|taY>|zevKGgrT1q zU!jCJ^OF8(-5eAv$;WZS1Ogw^d-mm8Mvr$W<>jKfaU--V|sr1wQ*?QQ#Lvod4GmsOa{myiI$ zc8Y%2Bps$($54d$L9rrrI%Q=@8bZxm2!kN9DQ0Arg&>+bQ`VTQl*dqFye36e`dv@T>9EnFN{Vd7M*hF8ND3SZb;UuGs;>-lkuk~rds2P4FE_s6Ln5#jjuqvL719NyyDZ zYvCk=k%N|tdI$ah>JQ%v!-z+h0I!QbSm@Sowk}tt_$4Z&`g5u&M zMz)098TO(6j2Fj}{tUs|V>YE}2Nz4fOd0WYqI}V2B0Xm;@vB(6aQuB|S`nPfzJlM} z#C-ejq@DITE)kjp@v-sca-Y!Ic<>>f+-+`i=+O_huLM#9PHbYL*AO68R~LEVMx}G&(%KA?szlI8QHxO1njEHmmy`g z{d#xCB7&pw+msKDOgYi72KC?TH|vWr_MJQlyN-_Q%VtWaCbU31O=r1s$Ken(%|2Bq z%81Ee21Pr@ogD76njMh_bBqLTMC*Z3Bgu)0t#1ZppCLFAA8-z4RAuf9fvgcgBO@CF zU!J_e(iTBIGLphS;E^^)XMvCp^U5VCo6pFIrA6R5!`#-$vM<~R27iK3>Pd(WW>&IP3a>25Zcc8`oz_yNgg4?6U z^fl&lF5fo81d2tTx;2du+OSk{p6s@i8;LGNE6;aK=nTmR+!pVV%RXj^Vf=>}k-IOG zgEBU*$J9oLp1x<(_=}F9R@kIz+>xkJk5IM49->P3jsU)AFtY%jYM1vFj~`Y$!E(@H z@9vSt)!RGjrI0}CQPf@}`Cv+jG_h(wjq=MBoIx~UvO17iHx{bD2emBOx~uVSB~wnA2+7_U1oH!pvk zQymX)jc$!@(;P*e*?aAY?9%h(y8bD1aTk_!)oe*al_g0BIwKm-q+7;00=-wD7ax*d zr>mCcPP|dkI8a~uT2`i4a{Dzw<5?+8qe@LYH$dw??*`>7)+A)GNTqPF^k+#+$?(Md zL<7(B;cy~lrGkxLAIHAhytKi#_J8h%X@wb&Y-Cm`_eCzNmoQHIv-xY=*B>{{hiQgg zhNVA$;%TYt*X7f-W38Mbt9VsGtIJ>KQ@1l$Iaf31J*QN6X`S;cpi+9gW(@7u?_HLO z*-F^ z6zLLwR~%VvFUf2EIXkzx65r4R)JNP_+%L3P@r`D&&xMKmNMSrn4t`^e)7=wvT{5QM zmevau8yJ7^%<#;+#qDtZV&iUpmz&;i7dPwt{h6{TeN6h#a^q~%i!{;<`OiOx8`2xn zFZE`0>E03O?KLzyD%PCU4AttJ&6>`dSy=K;z5n<&Zj#*gTU|oks85!A*|{&NUIsyi zEZ;dF%pTKDuwJ&FxBha^+C$Rg*WTB?%31t<|2@||{#hdr333tgP^?s}Ph{%y?D8Mh z==&}{gnnqJ?V&A`TXM@6s>wvpe4j}n#GP4?6_d4_Wfb@Ac`D!gjgl#KBYhDA7Xy#R z1@}p3@-^MPx$T?Y;m)`%tsRfytWAmovFWzX`?`pN2&mcjK33J{EghI_HfwfHTWedP zVV$ADlGf7B5^0;`&Gt?AHOsl+uF?_aan|nq`fVrdC;ReY?sCq9%7fs8?_EwpJvl3J zo7veKC8QDwTrAdK$D>8`m2RHJ z9#e4p4wW*z*OZzFFOeU^8XMp4t=XR8G}BIKduB#X8(*66q$YD_vgUHlZmp>2UMOCG z%|U;ovG}<1`1`6J{x+Hh-UVH&5{9CFwio{Zn_~7vQhB-vXOqyi|10akuPO1z1-&qe zKVl2~VFQ0iat&ueMBiq`TH89x>GV+x5;*v6uvI!Zy^Jfz>WO*9$R9jpw4Y&% zH1*aY+wLCb7a#X71#1LbT##KfTrRgtH@<9<fCR+jy@-6(qVI9t6eeNWR@)H$K?#I+r{Zu z%1c8Z-)(;1g!u?$@cPb^nXB|>er)>a`fOxB^BJe(rQhIP=5+^Q3qcjrgRSIXaBmp> z(=ArNJLzt0-WShbj3;Hp+&!~@7t2n>>Y%sUZhoJ{{^f4`)Pl`o!y@P7$;a%+vGcxY zN|cWlY_@s_b$+MltLVqkq|6~&2ZmqTzFJSNO`2&>SC~{X8k|ngG1|gXeN!CY$-jGP zG_8(nFjl?v{yzFVhYyuszY3#tp<~QzEh+Ah|CrxkmaMhOBWB>^H&)7q==!BOqMC}z z!J@Bz!p^>(7sbL!p0y9_ryA!f1z8rt;)i&Le`d%#ZZ+#X-Onl3M1R_jKKFh-y%gok ze)x28T5VUe#a`Sja2D(&5wOw&+Yw(DAa<|bNQC9h8I=dldZh(4)?$@rs84IKmmgXy z*jtNpZ7L`g1g`xy$_iYZG+)y6);!!kF-tLfnt(~hF0?eyVsjw&!F|>FXUfNxmwh>{ z9`6@Q>wl>i!?MxDUB9JH`rO$;XNz0|w&F7{1&snbccm6(VKEVbr+52K8QOY_FAkM3 zKl!us*C#lLd%V~lj4I31hUu^Aw>XJz`rO79k~TP~w9Y!m1nyq%FU(gR5-jX=2p>}X zHr(;AxZS{xrPRE4c)WeUs){ebmZmiHOF7y;Fk4#tq-w4z=FaB#%2)ScXz$&*Ys1!S zgWm?9jFi2`uHT$|>u6cW-WTU<|K@xCGp94qaF1m9*R}4A&&u$4L%5^o{l>AjlB51% zh^P1A&GM%Ul8gO^mD9X)v%x;A`(NT8#NPVVKQ3Io`17+3(h32iX%CW%pc_}`rKf{h zXP>~(N%*7?||m*K%M65aQqG2p~{|4G73y{GqhCgPf zq59jz%~q5~=d~J@w4;j!6(1W18wZUTIu#X_h>N+U&>I=Ke{~1$L}{$u+?<5i**!fy z**v+~99^u~IRym;**Un_xwu$?7Obw`4sIr1tPZZU{|xd!tCJ! z^X0!fim<~e{|`?5!{)zF0X~bNi?IJ&W@6|)*k0;@7|Cp8R5gJ!pk#l4lfYjF;DDcj z!&8Efk`G9kB|wTYlA2!Ny*9Ko`^9%ejfZNU6c670nTZe_)Wj$^iEePd#Wi)4;8!gSPv&!%KhL ziZ+;7vC3qH&|CLE1`Y449CdB|cNfoJ9(rCZSsk``9k1>?6fU-lzNd&vQA9-rQ&S;@ z2I1f!NJ*fgLb76^?f$n#MGcO+k{s@#WblXo*@6WV;g-#yxz^?rg4hq166;=o$=flOnu!Zm0N}=d>hIv{9n^A#z8HOUd)^Y8+-mJ+Y9?2vi^<& zU6L|ho-EToyh4XmqVH9RKi}8-PvVTNsH#b{pYna7njvvwc>15?!uwCfK-+DnD=T(^ z-pJ+8Ond%&ZIB-7>ZLN|T{cvr2EqzDq<^#YpSiVYbAye`aHsD6n<2(1wAF_<=exVj z7O1{s_R_*vu}r-GIWt5w2I}MZ3_*>Q3H5@dYp(HMg8DmZ5RMKPk|qwzEZU^U|C!GR zXU21_H_m;Tt2X;duc`abF=D1~X#eW-MqpAWHoQy?HkSTw=ad+ofQe9S@?S(N#YrTc z$vU{`p$E%4sM-G4q5xgvAO{m7{i^vO|DUpvKxGjHR`c)eMfk4$nO|k!a1>7tM0;3*~Ne@%OX`InQs=q})Xw8wZ zXI9YF|7QV3G=SuocwGLPfd>}C{OcS3=+Nk}IGSQ-_;7&WfdyhZq|{dd$oR69?wQ}H8hhhv6nB6_I37+BX3 zSkM=Fi6@=oIi~h%z|FpdF|I5$3-5lo*8(>zBsyeR%=WV?yuUHbV+S4bfbmyzGD4tQ zgkVyd2h!&}C|IP%_oT#J@-#jI-fW2kf0a265fF=OP$AA=DtVCjT2Rws`e1}StZP$Z znbyfAw`9MDaL4JJi^`c%Y^4f8f7@vSWGRQqVg0>vL*gsLA%1fbML3NCjcf|0FIp1$ zL3S1pm&m)|TKu)k*r9}g0Zu;yY6%sCn!;Z-9g;KVjt)wn@LwA-T;(p_k#$ghN9mn| z+r~M)pjal5M#}UA9pG>uu9{?Z-y^8jADC)NZbjuOq!h{j9*bVsea4B|6$J}LWy}ia z%AXg_8!Wn7=s>FJhfZueBmll)%2|6Ks~H#3U) zjkqR}C2Z}dFW!?^)MXqQ=?3(?cn+Aw#T?0W0N_FyP|F)|i1RjR_x!oucX4rGX#R9G zCMlVL7TS!z;S-`+$i{1TT#RiN&#mg|!tZU*tC~%NnB>N*3gPjXK9|h@tVyiNLI+=6 z0}ddhhLHvjWlY_n;(JuFso{CI+$%Wi($Ie(C>ewaxg$Cs&*5 zjFxj6%B3bxLj&2#LJ!%Q=?82C>OxZudq{A;do=mz+A)_3ctu}g$oT_ovHMY=(qy~I zcd#1OIx{X(Lt~O@gK^&e(N@%uLBK3$WnWbK?NGG|wjymF=^1=k`wj$hG|pGFGfrX=HN zOmhJ<^68#M01hD|+)!rT0qdQ4w87mZ8VIDZI?!3xzkk@Ayp?zKuGs&^b zmuoWOo?;Bdei72|20lF3Ba+j2`Ii&2i9|q zL!9*IU4evyQbuJW5_e@(sc9-#wXQxwY4+5dpOOwP$5*BlsVC~ljEfzVbb)~llt`2( zwPE%B@oo;w&5Mhs&Q4`57A}kg)$}KO6^qu?d_?SqKF4oMdmsr6Ytcb7kgCtf-aPR; zG$Py?=ppGx{Q%3MY*O$g2)%pt7Ffa#YVEp@kET)$?N=8EZp|+Wvc$(KS6@wZsYf^8 z<)d^-yqFa?4h|c$!_eXn$;yz<}kj*gm-^^TD{o?t{m0yJLw5yH{^gRT#K6 zgr-D!MM_;X<=45Lefp?pEk%5WhnhMECdn*dhcmC?!hUU~)C4#@4v2(O^~=n-yu`iQ zbBwo)Z*YsAA@Fv8sf!N66KC{d#Pdj8LcEQ;ql6Ye-tJb2rQfpcLY_v4=<%ylEqp6O ztpU$lfeCm1l9{Q`#3vFt(O*qhFV&VFW2iM;u{4YGf zD$-<(rF$fj)K#=oX$Va!q;ipog69ioHhcT=4y0^fpHWr6H!^#HtsD*CQQ$IyN4Q;UUv?xb~a;0mhhe*YmfUtDF5`j_n zUO^3CBtv&C^##-3kzt_T@wC2o=8!iT<+zut{m!iuYgMizO?p_g!Arqf21il=<^zJa zRVIoBH6YwfRJz}W%&j;sNGj^lf}#0aLD`F`HBwZrOlzbN(`^QXBM=9A5F!eenxQSF z??3`G3cur$IRwL72h@VRTE^vF`L;#$%~gLoFO+(x581c>i# zX@km;%NVfsKGN_Ip~wv}^H;r^>s7eY4U>$Ilbwrqc~|pHryQ4iDQ<(Cg7F{PeBm*% z?aJ02;OM3d)xc%BQ}GfmXMSv2aHUzSH!ZY9AiTnW-!-r7D&!_2I}8*Z6oTT;o7>|k z%2i2FUb$rM9OV4H@;RLqCGG03r-+oPW*N~1xG@ddXgpJ;de47ays!S7AVBQlR>23Z zvVbcHC4_F}yBvXGd~QC0Nf*y=PHEd1>_=ZEONvG zM$u3;6sKFa*YEYJw)NM`>YIM*i1z%3yDUI_DDN5QSL5_%pJCACfeEMefPo{9kB_7WxycJ(;d3xihZHM}EUnU6~9NgkQs zIp)?x`Xl|u@M*INu9}?hpUO=<%cqE~_+pe?9%Pl`M6?-y?MfXUND0Pu0Td76#nmYz zW{@H0j$`N{2=;u-7@&6hm7_{OV^g4Tfe7KY93(;Qq-I3fym`G4AM}snCKsT(>?mG$6gZ9)Q(rkQz+Wak~6P~^Gha1em_S_fe zX4)7@>kaFzQ>e~$R3YUu)-nzq+Z9v9q|OAD9*bijlE1S&g@+#mi77m|Q<9@nysl-y zJ98uI34`c9MO64b)L)MSb<=4OZ#NXoeOUyxmyD>unQ>%)rZF#yy72AOXM^uupa%R8 zY4g;K{!Mr|vE+-1nO4f7XKW;A_P=R(hC{(`qp}bdofa8Qxc=r;^%#Jf>mgUr!_}Mu ziLZmW0D+&wLc%SQMON|IqS0=PY8fIrjZiurlxdSBVZB z5aV9+j|i=1#Ac>MD`V|Te&@QC8%&~bx~;J9q+_bmHRmx1b|Pk66P^9Ln5YUdm$cy+ z13^)SvYkkDTyR|SAGwVLC8Q|^(sjovW)m>!WQd({I6v6AOJS0 zka+6~kBs;bVK(HTfsn*w zz(nEe~3o0Qb`KF21w{fXC;6`@}qQpRmBZ$QW%Jo7c_YDQsS!MiIW^}|D zMPon|!K2zuFLu^s!D=zy`gYO59LgTmvGpEp|D$9XkpL;Lku)>_N5?@5sbE8%lLDnH z6CkpHbnw{=o$YHMi@$|}1roqF9$<*a!A%SqK~EdQtBIraHN#VoAvVX0O6=;Hpv+@= ztSYyw_v*aV95NsyMW6FI%+K@rAY=k$#kB1Vi!Lj)hG z7A+XHEIg1nMF76AQ5wVx6chl+IK+gSIX*uF;ZT#W#PE_y@-2^dw~j;fdxxRs5S&0E zHbGt;5jhzORsQL92$ zHl!$NA3%CbplnJL0}SOE53pIdPmLRxgF_x(9ls ztYGvMQWqV}g4Nm}Ma@n-)6JOgWo)Kh%fP}F!dHZ*dYS7uP10Bh7$X%DUnnppW@nKk z+%-!BWBy3%di>20{Zu5pLMNKyGZ&p#{zirSfCP-gp1HZ3VGK9^3W2vk;r|{cetl>RvkLx{fZNZAD1%|g>-$azVy5+IFUes4a!|D1D?v%_8eE0BtGdzJje(7NSm1NcntKG}yH=}*h zp8*Dt!Ye1eHNO;qg(CwYpE9kKNK723Bz#y{m`Ic*&y1#AvhEC(|7qY&52zAjdp@*x zB;0OS7PKsu0wdT<$p^ao!17n&Fen_L+or#t4RE&2I5SS1L2ol*EgYlsdVy0K7%OG6 z+E^6bcJHN(HE+&iE)%1ehB0I2T7OaXz1YdortHP+D;B>! zE07nfy(LWiDj(1z{<^_g%lh|6!UHSfoLjOvTyfh4s({B21&i%JBK9v8re_Zy3gk;X zO_l?%N@lS$$ek}p?;$M*2UsF!Lv<=+@ux=L8%T^=0zxvy2Cf2vhH~~;?Z2n@o~C6; z5F->kbu}tZ$WFX5h~4o_mtSUj4L1M|alpnl`(AwjR3Mg$Lz^?mS&pj>l1)@In0VKh zNu&`hp=O40PqKAiO)TJcB;nb;#LJ=Td!yG;*W$f7B$79euQ5wKjgnVhJwZdCtRx;z zU0F4K_2#VG&mvv$EKN`=GSwB~OkZGcb}T2p8L?5FfUI`;9$U0P`0hm81BEicBYv*t z{;jWk=lNuYXqWgqf|;UwtGN82m9yy3-Y!8r)P~}z!?y%y$B6(egWkY3O{|rG6}SdL zn$Uy0zy>Rvc0Hz2gMb6YntR%Jgmc`wKeT+8u{gYZzqnGp|MKKP(BVEbfYi+_u>GNy z8I*oFN}1`mxK@+BkH5CJY^ndDA5D;wk$uEzJ)@a5O<=8+-0v!VaZpM8yPo%$Qj0YE zb*#7QM%UU=;_+8eJB*}k^E;JjgrOgnQXe$XrR%Jm_PHb8fB2^qM+v}!Q?oDsXsMkQ zCnyOGA%;wXTe3HvvQAGMYQ1H*_4r$Sud?lS(N&I}ZAj7EpsH$G^@cnDQ1#7Wcar%6 zLS{7fK)?v7B|+(D;lZwtxeR9B!44lH9&?4InsNncZ+1Y7@L6fj5_!Pn;SN^dh3(J8 zESiUp#H5t$Mh-JDtH5ZI3@2Pc0iF+*#8%(X&?vk$=20QKrvn z$B6n68>fyt7>VmUqUpPy`xlh!umdZeib;c8F%<$;g;|Bwm(`D^{CQS+6hwy#k&L}y zC5Yw?%$zgG3K?to80VN{`KM!`ujfv2zCGPi^_aCr=!=wX!es)2we> zb}te+vl&5G3a+BE;D#tpViI4BitV0-7{&uM5Kvi_pa}uImMc8QV5uYd~5G-GQd8egizJ7V9^lQFl(WbWt~#5KCm?(3<@vL8r&2=rU)kU z%==Mk(!u1Q9O4S3CyOrPQ;fUwKBA&0Ob=QKcboCBRnTsaP`&hluN1cLu@%|PfV&Mi z;DeP6fynKH0O{)`{|>>RRzwIsG+ZRXuaoj1zT<&;FKQi;bKt^5yPT@gBup~N`Ak7L zO3Y`wmghG2#s0wsalduuj~?`(UC!4+zW$qI+^_xyZ?zwvZy`dM)@L`1#r7n>?o&=J6Nqne zYgzsBcJ%cS-7M~SS5-XU=-$)!P_4R|a2(=~alT*$6WeNrqOI*w%BRGAj+S$^TUhmx zi2cJCPTFgnu%w0x_5@?f$u10lS}r~qR#5V+I$1;zV`}- zSX>6NU3j(g*G%KltsBJeaBB{QG62-bnS6j(;5d)QOA2X3q@sI1g+dGYlyuh zL%+WmP&K-U9B?NwL&o^=voC(;Fsr`!Vby5QAxqS^_?MlXpY$FFSkN_nV1UPSK2d5< zbj>)sa{Aa_q__b>HXU1>g>srWL_;%21^bxDmA~a^mCY&k1E=fQM(41(q2-t3!-d1f zlbq)<_C}tQhB{O2wJeI>L{AED>!;@s|DaQJpIx)fAy6B?Ix^EC7i~K9IQSn~L<2!N zI*bmWWJ&@^dN|6}8X*$Ac1yEkfp*clIJG?zbBdv?^_QzPB~%AzT6uhrPsPuq7biX2 zVq`G9HBS}-k`83-HSX)x9L3B$D*ImU_J~iQdTk5+C z2XTpPLYn@tl3@E<^5NyM8Sf({F{fUS!^Ec8>$68NhBnrUd#%!{Ry3Tm-E@{SrlsW0 z2d;iCH{NTbAH6MPKvy`}51N25yS*R#h5gh`n~V$NNWl$JP?_V0qIjy7n>5*clP?zI zUpqhsq827G9^h4p<&AYYgRDon>gBAvk1~1!Stb+%Vn0*eQWZUL8)A@&xmEv|j&;y# zao<$FoG`l6O5)nXM|%I$XP&r`GMen79&Osp;3nhTSIC4UHYdr^QQwf$dYU|zG!7=R zsq<`YpE3shjmC2B8nG4nIxoM&hqkz(iN3ys?3Wo^XZ-iyoJ-1YkCoP zNWT1E7^-v6`c(YMaC^LTM0+u4spdP z-#@tUCZT6K7<4+WO1U@DPg=I;;pH^nGq5IaHa5IF;kpO6Cz3!P6>Z5$h(NY8t6-DE3Q!O6B|-wV^XVhIpA zY@51I}vp;f(Xkd^3ntFOMv^bU}c)~qU} z+U|ts9}rvsImQOjBm;qh5JI;(`R0ohn6YtcF1jZ)CFC^u?iUft%sUDlaX$wTbwA=V zQ?1L9@oVGc!Wi*md_eK=369)b7jv;Fw&mq(0v6hlLlL!@kx_^i{}PW^!E3BrNb zP`6?5q%$2g$SuCklpIxae`S*<&EavOe}{wp?HR`DOswra0}fD;s}43^J0v5Xm!7M9 z{B-HQ)qd&w=0(l>H>?)~60Lmej{RhP8VRe2+(aG8r(bV<)<^0+Di8e=%}JMUxV6ji zMN*0;Am5W^ELVTm1jG-Y_qmUlS6ccZkMOE;2N)dd&`quPDtl0&2Sf^7t#G#_8{J#g z*D*A@ZM^q1JGUeN*_#Auvf4c4s#S;XuK>x0v1i#1PlTLrRP>7Br;+ipe|_LIMgpvY zHn$%R>}WYEh=UqNCD1E*O|OPm#mT^{30ebU3k<05$^47B2}Jch1iV+RJ)wp&^@RHu zsmzP%9Vgn&8CxSCf=onlN}`s&A-u?_wz}gH-;-OdetAKXBYHpFD%wW=Y|S@-oxZe>TO#w#=NDTC|u91rC|F0**YDUv^A zV^@L>Y;D6V+A#rbYtzxN9TKZuWEC5>`&jSz#}8FI@$CoaFWknuQp+xaj^jw_t`(Bk z#Uq=33cwg}64S}=BAjbOMHead^EgdQjHAbjf{h7?;MKnWRW)@aAYU^^7?lw>w<3BF zn2jKCXLV=2@Z_ zj`pkG!Svx^4+#c&mq?f-<^GGoCpjN?3yb$_>f!0Flrg-xL`?%PngPg`%dA3&G!M6P zpd1K)3|pFM$pJUY;RXHlM346DI76Q6)omZV@H;G1c3umvD-9MkPCGjEr`x~KO?*oO z3DUa6apLQ4nMO02wDsFf81N?}8xyE3Zdfx5?}eEZ_zY8Rv6000Sb3rGAr3H*jrI0^ z!S;uBEFHV&L>S!+0+_1daEjUwb7#_)zmbw1G}i^PoM#BY$e}U2m0W5&<&2EMC0o-K zZSH7X*{;j{Zj}PyTWB^sL(hK1#{mJ*5dM9Z_;s`uO0f@HVP+3#P2y_jh++eLrl0Uc zvU}8WeXBCL?DeJ>4hy7W$b#bCu`fuBT=fYefw*x04xv`Nvw{YqJ&uXuz|0qJ)XUq5@4 zd9%TmvgP|*#x+-CM?=zvJa^Y`=kbnfi0^i_vLD9}&iMU&Rho||w9zVO9D&+$d4JK- z>EkxqCvq<2f$>ds)bJkRXJr^s598GN)0#MED~a$;EWnl*i9lp{FvLl#B8KANbPIge zsg=uSLB`nvZ~s<3fgM|}2&3i_m%dw{1UvL%O$Y2xH=iy)-q-sD1Rwa8`S@{(Z8nHP z8cmG$O1DJL@!j`G3NeT$uJR6MCK_!{Wdij1x8lxycQN{`vfT|#M~9M0O|k{3KeDSR zZ<2rYoForWS&yQk;ro0$u!C2eEe@`Aj-{MTx5xPDKYgYDvd=7Q&FG>SNCB_>C>t^R zT3-dVsV)hb2bx&E96me`8o`)qHA6x$85r?RdviivI`)ggWn_vT*opyZivf(J&G(?r zm6{_O>h}a3nfFWjTW3n%QQv@A$O^YqAMW-K>>u4v`v+&{Te*Umk>0hWS_)9^?2+vm>G>Bv}^_pMJ{)kBIO`O9cAam)Q(vG!q9mJiP9ctsi3M4eGw z-}Y&}{#wpfR70BZ^Be&a*7fMKHm^L>h*Yb#T;cnV9UuR6`RY?cQxVpC0_%+ioxAwX z!E4ZOC^p~C{s&Zz5+dAV0@W5ZTtFfct@vyd`)ajv$j4UZjL0|5U*|FYj8- z2#15F<8<6{`m(j(=2$sDv*S-%8YQvzF`*^0dX5ow6@vQ`!=mp;&-pRg5#FC_1{ySE zMq~%_ITW{V!aO1jZj>7$5*$q}`7|eSSPl7DKvw^>Zx$PL`G4L+tAnLI{AfvY& zp*jT?GficJrmz3*f&<~esUn9{g+oQcu1g5LoMC93ip=$&+UuuG^m)GUK6-a4WL*kY zH+ow&uSP&7R%`0`LQMbVEHYXH=I@I<_d4p1d@K$sq*7Vc;c|M-Lmu*DMVIOLs_VHS zIzJui=ckHab|O6fv<2&n)XE)U3@-R*S=T9Y4~E$ z>{8L zmigXZ6aL8v?S|v)C=?(Q!VED8&spcIOuqzw>Ex1rR89(Y(!4J9_9cQ&{H zrM;7@F`)szSD%(1E)Gsq?p}B(Bn%>WY+*sDTxKTxr1wtsMmx3Mtmb zrbus^NOBsT*lm2$QwqT49f$HIx&?vh?-U#t8bCR(xEMi#JZQB0TPJ^F5fXE_41djl z#|T<62H?^5NC1?%m#$F}hYnQh%ZrJjEQR_WPJcF}1`R=JFr>Lr?(Q{u3c6muSjmO` zgYKGw#k|yzU&#iATOa*D+X8+x@W@l4H<5Bc$ah&hGQE_}E^NpulUi+UE!mTF<+OH< zIX#OaXKnu6bkV(vpVkOZF|$dB{hZ!08-ZhJL14t~X?IDymx>bg<$$wZ@GrN_%dFOx zmRp#gRRe6vw3U4SCT{Xzb%XhC9)xxGgom28xQ>DYc|kya?A&~A#pAHLpjgz{0B%1Q zeDK=a#r5<-7zh_6Np9OShZ?64Apg-yF7da=^P!#Q%Nw+Jk|O3I z9kc~aZaz`|{49KZ-gxg>Ys|g!V(+Xt6_Ut|Y7DjZ4`Jaow@b8(Wa{cIc-3`FrHPLPi5_raR8&1K`4*;Q&jp_%Bn7bG%Yt`0dS2_3 zLuZN@pwqDw^P3S-FUNM8pFW<+H`^ZiSy4O92oJPv7%B+&-|9D;@jqV0!mc$u_ofUx z;;;`WGFW8g*U3Mqha$zX-9}4Vj`(ve@#Ep6Q1BUjgSlP0U-<`Y!hqjh)e>UN>(*B*zcv`tW>}^);WZsc_|9I(oWOlU)Wn6j zPSE(zDbzRt2Gm$xqGEix=|!wnw5+gTG>p3THX#rt0Nod{@we*dA2xrfdTw>xwzN$4 zQ52BemCmw7=}$6y4-0O_cw%9?W#(ST3J^6D?OwRYScS^gW0?!!9T4|QC1A` z7nubh@vKFQ5joZ``R!jZ9-E9fH+|l1cYNUOY4z`5?^_(rIqnacI+)10Q(DY>)-Iy` z&N?9?<~aXbJ+_@lWd%xf zFt+aQA802cO7pLm32|S((c1AZJw6;PTn0E!FIGE}e`6IK@H~kZ4W4SGoGSOX|_e2%A z+!~~%uK--Kz*KACNH6#5w6?6{OldJJ@FawnAoeLK&FTAoE3=~cI}*OqhP9*xm4vNT z{e+|{8Li0lg7Z7ejM9emVZm$@KDOy$vG7k0Zi|*}>VYJpFAfKe(~zeYwi=gK_l_g7 zA8i&(t8OnWJA0xVEl?Y<>cXHtRd~P$Kqfk{TSvxBd2}$Ef;q5t5ndYc-PE)#fP-51 zXGrD-lI;?mS8Jh^-;>WYf}UOkC^MoP9}qriXz^9a*#;_}OP<)uG(0vo7|->PSERL}+pEc^6XwGRLAb28nV?l<1FiGQ^@EGax&JO5L_j&jY^C=(T< zmfXk<$xPSi(=YYQW2D?pn>SlWV3lmk%AD(jUEYdWXF{Xfklll8rRC*);cueaMGmtK zI->puG@OVIW-vU^l8Xg2g$89xq9QJ88-)LyHhRh0!8X2M68Pu?X^Vn`DDR~@TWSd; ziSl0Enm10YJ^AU0E-E3{A|pOG1rcq>m^tJE*6h^6_Au76#m5cq!;DbtEqa3P z*G58A^JuYbw^xja<&z?CCz88o=?Z*$i^bh39jE3@@81W73J4^cTvY3k_FkUF!Wt(y zDdnesl!y@}K(G5839M9yoWA)BFV*U*QwqRml~##RW$v>8rXibu1mF|4T@)7&4+YsUDzEHgr2FB$Aa9ci)c% zA*RJ@raCw>>Q1*>zCTCp1HO;e&_=j^HW-3)0z!2rF_pHw#lTBnNk zK;oRWafjp6`0wdW4?a`89{qm(c>Z}q881N#9Qf4=%MxeY?&AInj@)9WYa(rauFI^3 zW?uAcBso5>U0?e}?0yb7s|zd{Xecb++Qz_z zvSfpeMxNm*`oaMJR!f}&9EBletO|!Ds+pGdZ%~zKKqvhFY4bx{&Qre*B{$xKh`8m) ze)kgJw%txdkzeminO)V^yDr}wES@j>bR=6OzP1|+$hs4z%&4Sor>-OB=UP&BbE06P zHvt* zo%gQ=uVS}6i#v|1`ucl3uj=!-w|4EN`!Ngsu2>+uLER4~%N|Eq@?QnUKce{Tt>DHo zy{hXp%=o96Tm1w?hB|7ueYF zLriNli2ZSAE9M&numo2wBimy4x@%~gPAd1R+IN@dfBp<;tY*RCSjAOlaevt%H?G)6 z+}XI|Mux2%GvXaQfx@L2Zx;4&CBr`D?#_{yurfp<)`{i2#u_bj5|fjdT9qoBZ%w8RHafrW0$?;AL6S{0%9+EH3ygRiMFCxJHSR=#B|@Q4{Pvd43}a(R2isM%EQ zw-&X8eQo=FUCLJnu7}@#)bxJ+pZR?9Mw7BGIVAI|+-mDl%D=!rA}_(W#ViRe&sD%n zEjng#Q>!l2_Ojeyner@zQ%O(ZFub+)BRw_$aOlSEp_uG9?vF5s?~6jdMJ;FX4W82v zKiFp;vYaN{S&@S#M;&hxBh(#fNI;@<)_y`2l<~#Cv3g;3hLz$;{Jq73KSnP%>w-GP z^7!8U5-qwt!yIYSkM-n6k)xj16k5u99G%G4MhlYz!w>@ zpBPe$>_Btae1H%?TNdA9heRm*Rf7^FN>|MJ?qO_<@i`Ix)T5Z#%s99R7 zHnjz@)uu&jwp!ZSlpscIt-bdiu{Vj4c$43K-_Lu$&-=GO;+*q6*Y&wR<2vnjJ0}&} z`@QEIjz>A*YewWN5F>OL9HwxCfmOK9iZCy{q*=!eKG+wstb49-ujA-0L#f4*13a=* z%lXcyM~5+)XCi|Z=RdMoQ;36nNAvW?7b_G%t84%}W&sWhjlD(B4h?| zgYABEq|n)leWtmKb7M520iaw_oxhFLE(L^*eKEO7eKHhjHJxzP%O6t8wc%u5KV|BV z>Gc>5SmQ(u3xkD!l0O&9r!){KZ0ic-j7U8@NZMk_a0yXa;RbWEsDin(rB*kzDlJ0f z!NO%7sm@`sUT0U63idvE#=Wg7Js!HKDfFY;~%sVIo^RrbMzdDPdkHu>-X%3Lt<6HyidB zX`LQRas5@!iMv)2+!o}G%`gGNyjTsza&rrp@6K8hY9CJ?IpA|TnV&y>gso3&7%d2& zag|h?SO+CidVOWMHE};fZUTL?&Bm|@fnz94V=eUblVk9eOq{-Cb1gIQN;d*zL}8OJw%+{C z(<7HiTP^7#C%32k`piO?)*gNr^_|jXo0(e91AO8#X$aX;6Kh3#HP-mAv z%8t9Lq2MPca}MFfj+3|gmQMe6x>B=ed{KxZD1lcU{a4A4{;JObhXP>>L!&$cN>^2{ z*mDS@hC2Naim3uUg4|zeERyB3W9r5UwG}j+*ThA%LgD?4}aTI!$ho>uNjX8U`Q;{{s3QlDTjXr0l73Q^_ z2%lr?a#-qoLyXtKV!;RbSAKo-+vDA88r5x8vTGT!PNN4QYHEAP4-9M1B;F(5eHLEq z^te*L$`Q49i)qt7x_l1=@P0S_2f9~C9B}-f-?7(=Q{b2_Iq1BCPHZE@pDFJMshQ}_ z-Qqw=D>3$aGqDO?*3+@`eS@*vBKd|5Rf&_n`0TCW*bwwH&zX5jE#(6%jveWR)u_ovSPdl7bn4@=L(Hh%<3aIdHsW)1i@IG6=KeI8g_gs4Sfhwd_8SGlfl$6xcd_R($Y=ap4=qqqvOd0x(k=aLw^z-g> z1EDwIn{V%=f0fcjhp^}U{kzFq+70L5__8W}_gFwm9rBAJzEc~7L*%>OvjGLi4b?~V z=?y~xB~>d%QDkH1qd!%>mF$yMHs8!tGu-=fd`%0qIPmz~QKCJ)nCl-$;|CJR`8)XQ z0S)3VNUf#)zvczaCNQG*L4-{6S2SG+K_4i^yj`~uGA;kkS^Vm_hazz2q#s$vT(vuv zqoh1IzQ%{b%xvFu^3lV7y1*OsGMdC=!&Kf7hQ_1BEhZ+zer<*{NKmS+&Qo>kq=4$p znJvhTc-8)fkx3dDpEhl?9>ok0%aP%2($Sa}9S#dYD*`>um=(v{H^nJMvL6Lbi&1h= zT4RA^Na|`Pf-8#o)l>c|>^o-e``;=DSoQj*4U!qWB1I`_C=+uDE>m_Ihih?X2+dSSN#;r&L)U@}^ zhYDsx1)$KDV9tUjVK;Dwv($t=aIR$*p4!=t*fjue?S?{+2ojpARJ6c~j5q-QTmRm; z7XrJLNRO1w$pjBy-!$ke9Mpv5t@OA z199UML6BFczor`Q0nUhp20=bu=b6EqD+s3&a6V{bFk?XLBRXNwieTAE!|S~#>7#qc z**5;iVhZw&L3dQ#kAvU|Lk|)OKKaZ=Y+U1*;yvsa`m(HVv!_CPtzlC#*ND=~-#kD}aq* z4Rr3CcP0|($;h4C?tWKb+?8O&u-#}ab4fnXpeKEt5V9>D>O6Vck&gSq~M^E6m|M0<`8mLLG4`42B3aR3y`Ah3MnrB{iubnyqH(Ty+5-}697>7 zXBU9w*$i#k*&}n7DwpMZY(S^2qD&=YKGd_@uIp@ch+e|y;%R*)#eh9m&+&SPj>rZV z_p=wnr5I|p8TBC+org{;YxO^Ww-!xr$xyc_wuLw7uZkUC{{i`7sCx<6NwU1WRw-; z5&4`wQmq8@J>iC#_Xq{gaM))3BK*<4fsu6Siv>*m@DtUX2sSIY`(yh;&{pbyC;PW;K z%{&-?c|IuIlmC&gNRAz+REr$xPMFtJu_*=o0iRl$u~%VEq{b@Fs{M{$cy0&PMM3z5 z9GzHx?Vr*DO(-l%1Nl34<4yH7KBFb0qG-ZNWG-=C0Wmec^6af3DJX75q5hPr1ua6I zh|3Y$1s|O013+aEi|Bxb9hq&A54L+N$k1>a$Wmo(KsJMyzc}sV zNs*FrUM@6VH!AkKNr$j$Sg9~Zb_7|s9gy4fm~NV~yrDzjkK1ngug8gzonM_6Mq!OZ z)6az?!5qNHm!xOt0$(s&L|JL8_f$Zre@7Gb*hx~P(g9$qM~l$D0ss=(x0@X*mQUVg z5q*1^>1}tRdLRy}h9}^=Qw39fPTLQIH-je!+&ONY9PxPF8mEw=R>O6E1PX3E2F2sjHYw0cXVi~C zLXqM0pTVZEq9ri7U&`=`55HUe5NYYce+6L?G@$KT2p5rgr4?a|#x0t2fQp(8BBAz2 zd>|1n$B!wA^Z7c%mHY@Xn@q`2boa(6(!Y_Spv3i%t3l&X-~5b$&d{M$Z%$0-VENV7 zaA0jHb&E0`Fdq9$X-n9J$v;adlLE*E9rq_fLRa54G55xnT(_csKRyc5<6F4#mUxhE z1C5_DdnKR~AyMRP)Z&+F4S$59Um(y4RzvfPF}i{X!*N=6*vdzUHn;dY;I7X^ePEg z(-Vt-7eGf+poE^fOPo5o%XiTRFS?)^U`JRBNc4XZw7Ymc5O1h;I3!@8;=~lh;A#v} zes?jw>_H{@y*XDP5J|K6+EN6xt6$tXV0K7V9}$X%OZogMv$uT*#yKtb3-_><#fgzu zU5Q_6_)F|A5QGS~a*EFviz`TR$!om-q-NMi9r69(j|ZgCKtVnv0*K)2P|0&oWRjtQ z>XEU5qJL_uo!Y28qHj8&7o*ma&dn;1@sd;}q;dkGr_a++KE*C70b-z2Fg(ujxv;n*xN0Yxf3D zU`&RukkT%%Nz<%s#)B;h+358FA@b(72wz;(2Snmkx3(>b=r|% zr2ci*3+O?kZ@B2)SqPAmAKucS$`*>gRPnUe>srID)z{|xul0WCpH%Kgwr7?ZhwVCO zxVT&V4Q@4~SNx>Y2*~aAw^pBPC6^PW2<%PxsPU%mmHxl9=l|+PeL5C(6zUvgkTX%6 z2lL;+9&9xH@e~M7YC#J1gD^{?Hy|%4J0Mp6YsSTrup#yNDfA*ChJLoxim{-egxRY* zZKll1ZEC&c5pxOGobmg`L4v50_%U$qVS}wMMdS0Vr`=K@kK4o(=yA&Z#9w2Mk(o=3 zQaXbb&z5+MGP{8}dw4F>@xqLqivuLi*44{z0NO;ttpSSzlqW_t8fwZ4u8P>mxbZ@D zr>&VYDgSqZ&7Oy;DFLkpWn7B>7vxH}dkY_KFIH&;=94e~1-u7dJTP9*-WTUzpe5VF z{h0MHGgPa03|Es-+IbnIWxn>tfhkp!L`g1_W^>m}gROhi%w+MqrOyl4O!P|MTvOb` za_b%oBu)`gfjUk`J~CjUoJ$u)3v73*YcB_%iDa?hq@c&Wqe}1E+Z*Pv1b;Em%#;ew zHmiQo%~UI>IS4`ny$gRT5}29S?Hlji@YRBG-*>FPuU}&rPVFou`2L9l?+eCT1~R18 z3>LN|*6l{#6CM^|5_MomT!rQLxfk!XC?HAg!r6A%)*{REiLA@7ny^^%q{RxBl1~nq&zZdul229njT3k+ z2Ov#eujIzs7v)B@*<785b>e@%Q`WWQHU4MWNsR zUfxNV<kj!HD7eLMB<(3!-f;R(sk? zJ~ZZ_Yz~@xc{b5cPIYKmRtjy%Q$18y72M^y*l%y2LQPsP9l6!dOHA9%o_AZ6p?sx` zKj4XyYmLq>f6xk^{A5avgF4XhFkj~}?;JS$`z8hXlTZfL^AI*yk2O6$7ksW52(J8% z=D%M?dQwZhp|2+Rm91n&tKsQP8EkZktGVISPnlQ^R} zU*+RP2t#p`;vm9g!|9*zAxp$}ak=)o^ZLAv_%cD>?y16aCyzK)+Z_RsS?OnB$(3Os zGu+uzX$UA_FHZRtlD+BD!C<9!q_=ZD)=aR4g->&B4NNqKkg^m14T97FLVgAPFHEW! zEhOHhG(V>e_E!g3#(8Ny{;he5@C1ZrLa~z{-D{Ni%QWR{;OVtIXZY5)=eWhGA&J~LUX8V~2(;pm+9i`^f zsZy*`6l#X=Gs!9p)E||`3xSeJIpI!^I~8DoK1fMv5af^QHP9M8au;CrjWr;m0-t01YM{LTI$f83kg^=+Xxu8bsNoFyorxQd~e1m90sl z@=AH$R4Do~bu>HZ&T`#NU~69?2(Zx}S8+lMY_NP(46>N^b3|*Qu3H#Tex3~5z6JlP z>5)ZfFK<*bt7MY@e@AV@sHE1;wYIzfa9RcUmW=8>R;_lJXQ}jtos7 zfx@RJ%48kYoPd5~%QSsvi#RJ%c&t$M?6WzwJ(yV0Dw%u>#X*(4h$9Y=5y)O&Js!!J zq3Tkg^t!?Kr^+$U&c=*`6x-QWz(MTy>ErzR?FW8Y=)e7S?v4rvA(;(c)k-!EcX4k$*dcl4(gZgZu3YZUJJIW}zS(u@FGy1LOPKhXH?MB=EwU z>*#5Zj}}tDb!M?M+tbj~k!|veW1D0TloWme+NLpAgi&^~#a8`@$tcYy=iIukZp{2G zI@9%l(#qsEAiS4LBw9|O_&UV1Bbz|dy{CeiD_2b-1y}S*n(QqS=uF4xqb?E2Bst<6 zD-of5k6z64Jg;uauh~Ob|yV zII!2RH9y58E^20s_4pi3BpM+!{xerXCK0-ag)m~ZUgKucfGLGm#YFgTYEh6qdPMs5 zOT=qWO6|A;N~T0?Nm7>q)cB2<=j?QdiLcFF$)MNvS?5Qd2iyoI!g+&n+m;Iqt9ZDw=Lqj%--4t50r4Cp_(h=Z`8I+UwK5UyD;c z1vN;B&;=!*_nI=#jX>f(&l*$h%jtkxC#mtShHLuFY$8HL-GDR)4rDxW(4{8wHyT;b zh4H!n;@be#d=29ijm^iE3&iNMY@z9Bz$WxUc2@ixwc~>+>V&J%G>kdY`E+04R<>tg z-t#_Tq8{YbCMf?LUyzfi{H5X`3v$5Q2qH-5xkLPsurGsZ!~uro4Gr9S5-RsP!{Cx{|pn)td;Eh)hTTc(szf&^$OR!<(uY$y5mG-J<}ly)O* z$Y%~J!P~0GSr>zhU5;)~PrHiGFVFD5+syP;@U-l%lmw}scCd<Ef!?^hD^5 zv(MC1hIQlcse0FUS@4Wi1pe&qdY$yH6MfMAuS^TG{>vhN8d$u>wm56eC>lRIi;-;V zWW-WS8K}z+>9n=m3|Ipof=4MiK*U;<_^QfJRSy9v8$d#tc5V*~X$iok$%=yT>0RdnNL&l-&qI|Agx z4`xGY;*W9AS0%F&*CCKf?lJk-Sq_l5HY6&-7`Zh~{y<%Ayy#N8vP%JKrzj~Zf7-YWWJN78%MP2v1D9Ccs!jIa)|>-M^f=L=0_|wEJ}$hqabP?RX}EFQL7y2?sm8V zwY2pNvGf9qgt8Th*8JDY7T5wR71wtSakVHkIiq^1`pVf_rVpdH#^s;^>j1y(Px0+2guazPF@o znnE1pE`Ek*^=JGx7Y<9>c#V6-pIO|S_R0G9QB~dYZi3_NmmJe}f-dr6EOHwSXY!=l zhW}7I3r`zX#e;ZEv!6$^D#A>dEHfN|HbBqp9^&w1A*wRcsS$K z?Za~$Rkcek+8lmW`#k}prl))0*JcnUq2X1D*MP9;13xRS-`!7|;S8|%O7q(KI+K^Bk<=a#bRuhi}BCKl+bKgzt zrLN-jFk#SbU;#@pzC91dW^TuVr!zS}nBtc`-8pBDgM|!f0F_FOzG2Eg^4zp2m<^B5 zHK!M<0d3l8eS-;v=U`&~;sL)gbnv$urEG*-$~P4q!I*1exkg8qVPXiLT09m=7vuoBs)`z)G?ugzo1)P?7YxJ4lO)9?YOTL%9`l@YH=6uE4=_Le&JeRT^{3bGYx4h*O- zQuPM2e~s?C=PjE#33F%@G3kRM>bJ{L;yAA@m4*RRT*C!yGpL2; zz4(Pw{JWk=|N}K2#@`+3y8+t#jv+5$#Uuj5;d^fa5BU|;A-!7Wq;0ta% zn#D;?p9CB>V78OEyML04J`&c64i3Bj_L)-~1HO8{?;*Ucsvno$b$YWcSX>?j@h-@} z*&6yl+qcDPqQadgOY!DnD&Mt;%8MbD>Az9t!+hQ+78d{qf?UWIEC@ zbyuz6Aufrqmr!u_`E>}2fAYZJWHAbgsGTovm_737 z;FmUghuTA6Ju&q=I}`OmhZCx5xh1gUq42DTU{#r>_5{^Wj^rig(N@jMGMRg-Utm)O zDVub!==Sund#W$Hou0%ke?A)dn{`(4@}}gmojgo##BTqUKQVd(g`G3EuPrh)Y`Ra+ z_nrqiE_+KIbW7~*)u`x32L;YbzM5O4Z8TIzPlk2H9XxuSE`{`tgMwH6uhcd7_lo%u zu-cJjzT7PJ11=`M=*w?Oq^2;j(kCC(zBSMYq>i_UwII9F@o&%&A*gu$^2$CJ@_U>I zt|`uG^wV=@NZ73OD+3nhq|hdnJeY@P){FDtTx7AycIJ7dlLv5l@^CR8d-yIJpa}?O zQMq`8tm03&SH~T9tM3j*-K4%!n`QhEmOx?+FO1*M2xc72mgeV(x%6JJyX@QQM$_#O&3(_{-Z)^EiMSq%Qh#~ z+%{~k#*h)aK($%o0`immVnr`r*u<=G9BZia|4|&w|CizrT5IRMi+e0!F>%=ckVl+9 zMJtO!?X&=E38>=)87UL(-(?QwP@fg2^JT}QJ)OI$@lZvk<97aUBcRRZKg@zvo{3_c zRX9ZAP3PQn$a%SYOS|Gb6X+#rog$b{PTuqZZ?D2Z+ozvI6P0vkt^MNfTpC;xPMPbD}bsqSzfORmErow>ES#{UAnAU4v4W*vo zzq5x4_qvVCqgJ|no6!B_JBZwht4~C=sc=gM^VZ=X36hbdGqrmUNs^MakPu=bN3<&0 zvj2YIR1X4n^zzUWz3h4uV#yLWTly737j&4?gkH$PMpM-UQ!zzL>_E5M&C*Injo4c4|+9w_z) zKddWtb6@95(N^P2@jv!P1HX?)Q{+j@6UebD`AToK8|PEtj@+e_p~J&z)8WvQDu+p$ zi!r@F1L2vnMf4$EGiup_yQB` z;QbFM+L5fox5wz75NOxd)&LM)Nzo5$@&Iqn*c;JU8g8lSOYdz;FTt9XBeNSRWRMS-KpPvV^a>6)qH)Fq7m z!nDA#Gz{%TKG3@rAU`F4xEa13)xtq+b@D7^DVzafL^FpT`#|&sxM!fS&DTvxo zjO=UJD~mj^q9J(-kjuh?RxdN*qGr)8>uH;? zBjcJX}5g+d33If7EB&E`SIpDSRZ|D634Z0VG^~e+~YdE#EIKWarN7a-2J#uSAmoA zzuc^&-pcaCbViC7&6O7`omQLA@SW94!7xQ@S-(>f=6S;Y>LdKJ$7q9o&-5g$oSDpLo)GIM2Z-q51*vR5r|A#COj9z9-&2M>RtyXtAFtkfm9H7{v;UdNo z0e#ok5A8A&%vgCBVfzXe?Mm|5Fd2iB@cg7EZFtzhpMdq4avMp z9K_M_Zk9pycGEJYvR(m+Ho+ zqjUMMdB!G2khU9(d&-Tbv$%kzeWjWPuakS&KkdD2uI97|aYlP{Gm#-AONs_Sb#v06 zjH#z$Be0XuPc;q)G(F(b{4Z(XI`xYiLUjKvjUO^s9RvXex$$(2$xHkp@os5+OZ+kL zcz7K79gd-zSkHx#d6Ws1c&n@l{NIbCv&CU*p?xrP6}~jzOIS(T4Uai6{VW z^vpu0ZAC(>*LQ{deB?`qv%qw>FnFiOf7J6Gve>-hNG-~;*%02576!=^DENa+DuuS4~m#utn3kkIhlSCf(62a*}kI2Z8=?YvcIz9bVv z9p3RV@+p~3PsL!#KRd|nN&8LZne@7aKpx^mS(+^Is`pZ3#T}yZn{@8$WOaYn zz652HqYJJDx+RKn(C9mu4BcNR^Ai!;zU^J>yE}v8h{c40eeFDBm^iJ%KMJ`u-$^ZT zOBD1}3VPLV4LNu}bNu}18a=DF@=BwhoO@dMdFv(vX-FmMQuc!ZI&Q9UCOVg*{{P@e5bH% z8n;V@a+^I+u=inx=mgp^oIHXd6))v_FIxFLjBfU6hqVQlkd@o(=Dp1{8=i#Wg1dY< zrYIL&u@X!z=MU-O*V=BLd8o+k9!>6T%-RS&$^Fg#`RL7dM!5fZ|3yzdeATVtYxE2a zkkAIj_3O~j-oxdoKmi3t;)YD0YS292~YiF1B?&QMwG35AgpAZUr3=u5>y$S(qdVdz!6K1hPvlj0|?i zw3S5AT|_GQxq0HgXJH6@&MgKps_w^4E$oQnw`x0~uPXCwokZF^T(-T_m>2F_i(1G! zl$y(N`s%Jyr-VOi{nj5=O|okmI+D5w_GEaQ*hK&@dH!>a8h>vwtOQSSfF#pm>MJ46 z#vJtC!+}0iSC(1l_TYj{7>0<6j|L-Vi0VGT8r4bV~;GF|e z#99Y+N}|b|BJKq303FtHrh^8ud^i9_X9~>U3q9S@Z7acTyTM#_UOYvYrs`dCl+KtM z%26i?OfC(LnI@Fig-pmO3qozRJMP2l7Ufh|Dv#6$0=?zGJ-rDlUcbq2+t{3Gm{X9_r)RK@O8n(|9Mj@`6Y*ROvTG#Nt<6eeleXK_Z)vb0TZwRrtg=muZHUPy z-&2Uuu)qOiqR1y)cpkwo06qE~)bXW)$MGjoral6I+JQKS&-cJFl8xvUq8rH7#;xUF zV>4+DUGfF5T{v-U4vhXEy_yUpm8aXpG_&kMTYEY1rrJJBdKOM_rYfG3HvWN2+R-%( zU8gKRL7aZO;cTc`@OV&a7UCh%u8&-XyuprCc6D(n&ItKvjks17K-r1J+32ATsldSrAaBM>cNm}aA z8An8{%h2|TFQlNsr~jECb#LW0`bh@&`37=Qap+~82?+PYZqWt(YA0_KXOu3QxdVEB z@D(FT;0X^L{*JtWPJhh0SPSev)^!C5sU>EIi=jUGD5+9*MI*URCyy)wRo}?Kd=jkr zhS|XK(Z`vyNd3j9NS9+K%+TGJ<&FggWvgo(2F~vzG8>}b<3G(DD118HY_9sE>N_3G zq+G0Y^f91f66yNwuEmD-6eAW9r)-JliEZ2VMN*Y=q1glRLRg{WunbO`u=+o^?tH4i zn+_ky((xtI(gOG~_E(BTdjEGLgOkYc9i3YiD*udFq&0Y*0kIXDBv!JFXc_(2>nfq; zmI(W^BBsik{gS5OslQCqVI?4&U&dCau`i`gEs(*0c3TBr=DSV`Q@#km*KMDk z&0^>~_uu8RtGH`5M#Hw9LZQuewP)>zygP<6JtbYZ3U>?h(KMx*Hv2cc*vRt{Xr@xD zVl#vH!}VC$5wa#c2`!HiaIw^2a7^+U<%1ukc(kkT*q3GAi9-rFONc69%*-8%V`a#Hh&K#hLJN!D7Ne^G->f2-=s1 z{{?O`sx)+1M|C9QLT7e(y2gv~mqMb@w(21%H7((2x+h=R-WaVs3H{3F@y-PP3>?)9 zJB6FXI#u(pIQ=mnhG!`rFP`1D$sDsO8d{KbD3BIGWvLRK%Xd6gj#JLHb0A- zZVfmlANwdLVIL+=Uze6)f9vNpj(Mt|K|M2V2Ga?5#;Txq&#%SW@K2UVVq@Tx_6V!( zH13;<-?zyZ>{&7CkkfSOvz2q98E^lH@{>5f%ly)W+|Y9x_-4N_iY}!HH%z9NEkSwB z5iARJJ-*WTdiB^!TjN5&N@#}yxC`3CDt3%dIbMDc;anX_ZNBFEW^MB1{o{Y;O_I&` zyK>>g2V!0|P|LmL_2FM0iqR+HpJ_yc1HQaeO_^+hY?X{lEqt~i_ls`FG`Ey2f21&D z33Sv3ILL4u+d$trd9Js}6xFRZ6Ppj6Z|0miHl=X$ZA)y1Ao}#>l*#GDqLoKt+vRCC zFmY7_z{~PT=ehMp9J1u)~(OfynzbQe2OjA$@&F?76F$IfOQLKXE6gh`(B{~YfbYaEd=pcEx#v~`;j+B8YnY0V zEd{3=-{G$#tb3bL%WtoE>A8-Xm8>BdUq0v>I9A6j0_MA(YBO@1+eziX(AV^iMMebj zMr2$uOyZq661<~GmMWXc)2iqg2ww*AaxaUuzBnFi1$(gv55EG7}}4A_V{S^6rqt`ki#U zt!G4|R^kYYIJypv)gMG zNkmVlP|xs8?D*Q$5TP`$#{>84aUvE+DPTtSrvAZ?I*oYOMED_`n;FFrnH&U=PbWY7 zBH@7;OgN6`(j4Pvy|ifAm)-0`Vx~9wh_G-o!>urbmh1}g%~b<=eFneRWxa9n1sVnH z!jxel$$is|+{wR)-fG?yZQ!X8-g}bS(xlQdn~f5Q;#59s+#XA4)_rF@@pP7uyM4UQ zV9rxZ!*dPs9#-&x>Pu74_)}p&`cCJ~V$M-wsru`dS#v*N=8(v8f{i?@dhQbm_YTk0 zfc4D{#k9E*$QW-YY07K~RtmiT#)YX_?PWwWDv7fsy(M&rx* zqcu$M&Ca$6H&slrzoai25fEC8Nm) z`cb4+g2~*ZM&##Fp&%d~1khb2ExO9)s`0!t-;_ESKW3#Nho(#n&k{Q2pE2Wm<0qdj z!R*>q5FS-J)88CkAma7Lo`^;6%p?AU`F+*vH84~^;~^9nIeSQ@HB*@4iD|;@iCFJP^Ba3(*MkY0y10F_vfhn2$nQ=#4L5#P0rA2Hk z-yUb$8Y;~fUCeF40D9#(+m!1a9bcIg@0oCSCDWwx0gpake47a=WCx#s@pa~teE0%r zG==>4`R8ARGkb`Z>@Fs{Kr%xP=Y2vX4B&z&pXeDh)_$M(9R@t1l%BneP!%kCGOHdk8AA%*@ z3>)03>!5nXfH@-{v}R19m(c~aD;Us#IfBkSRv)*&N?%ti1 zOgYcfA?z)El_+E`%4t@*^y)KbHm&Y(gMNeBWlBI4?L9JnxgFV+gSvo%>+ul*-8RxA ze~thjs(XK@m=?rUV!EYRKU`6+&75aLa{1T3-deuXQzvgU`E#TW&(a zB>BFS<_y!w+Z_FDeT%y5eV2odZqG_gJ}1)$1ghM8|NDv-(|KYYKPI9dMt$&*4^J z;g2BeJuAF;W=&X@_M@rS=MLTEMx5e5LqGY=e(Fd~`NEm2Q?MV`Li6m9MG;p}{?Pxk z{_#($OPHGT4EE|)1oS{&>N;w_m|(Aq9f4tM_|BdSEF72z;E@4{;>)dOsxnFqV<@VQ zj9+uj7EkCP@}J2>rzGQCoA{?&I=onaU3<&^hF$R+`x}Nv0hLmT!siJ5bpY4r%ZVHx zSw+RtS?=0!Q5|XBz+F{w>-&s&o%>*7#U2nXj$}GQ2bAW6Fb|=#re#=G-ovreQy-)| zUU0UJ%QnW_$Y=oQ`s`|32c!GiOtd=V^BZ@&`G*&aptTFK(;--0x!1V0QJP30w|XEI(a=Wl%mpcwCLQ`I%4t{ORAn z)df!AAmIny9~qu(ie8fQaS?Uqi#?#3&d%f?vbCnqJu{Fc}jXes1 za$?d*0W{sW)o_h_APjho?0}vOE__cj(A4`OAj5wH z?(p(s^G<;MyM`GI#jDx}UdO`-gyd%YUH~CU8-;NL!6K{x5(6E8_cbEmf$GfviUya?cKmg6A$k|Mtm!U?^(Mjgqj$Xd$AUpVa zFy36?#jAm%?%>NIS2M4o3GeGlHkbB-&#n&?G;TX#Yr0{@?n+3<+&3Zhr`8Y#w1qx5 z#kTc9IUeDP8%~XNdmLQ5^b_CbxT&zjZp1j;(>CUUPBSfy%V1ZP1&@{Q#oPVDbC#M< zUqs&obU-N-zA;{$zZ*NqFxp`KO6H;a%8W zG%O{Me)p%5ayml}1@3BaYi=?_F}*HlFXQ3iZXKva$>T7ht`%qLxzthqR8+vfqhYUeRR?RMNTTruoJq+cHk+0-nS9v#jik(*YI-eiGw=0&NcqXRtDAbW$FT-YX z7^Km!{$r|2K1+vnqt~Axm`eG@lgc^+s`ovK3KefRSanKy>uy{+`fc1n%Nk?0;>T~4 z7xNtP9C1{jW=B18P>U=urg%mM7#b28c+bpT3-cJFQrmePK};}fQ*&7gs>rKjW5{Gv z^6npK7|fTK_s_D-_=~OL$OSa8Y)=c$9*LdJxI7 zp^cs7Lr#J1sk&L>cYafhLq+<3^)f2XVee!I2GAM4q3xnF8u(Ut&=fu45VX(sBqUZQ z-Q+o+oY~d4ukzLM(Vw4X-vrsYel`AF2z<(JSR(+5n3p(XyJD+W|BY<3^wMsxk*mc| zh8$L0=e2ir_7(Y{rGp?9J+vIfMatf&6cV-Nq`Kqb=wF;m)%S5O9S>aj5xI1d3Ecbe z^DS^UZD}yz@tFzOccc|M@+lhXYdXwzu`76q47&)QSJVs~n$oRcaW+;!tu8{d zQo=njCvE<6J2nr~w|eRh)a~C~MA}gDkCl_Bm)8P!hl&^h_(E%%nJ+PJ1r6bM7EdGZ zem#wsu`|jsrg%Xyk^{T|000*k4vp^J0KmV#i@Q}v6L{4~eIm3$^42k z>;W^gmb}hut^UW4op}*q$#71emlZ7I>T1qIdvU;^O-RS}X0Vo;`sc!zmuuE?QFg_D z3vS9`{4i5)i+5@xux7P>C+n~4rEZID*V&*H{1X;#aZi5M9tSF1f*>NV_8mgW)&jVG zTM6#uCcLZNxzG#p3e7nD5}y_NCfjFBO$;XyVcYxt zgX3*l%;t>hbIjqALOt8V^Q^eAK`8E_VYzh-Bq2C5jlTRbGhEfo{x_%GQE;78#0&nk z24I}a+1_Bsp8?)PF2KDOnEb%&G3xH|ashA+=yd+<-*t!;V@ zf#?dKf$o;z|KYxmrPo2 zFWs)<+o-_f9MwKS#*k9cBYnyWB_r6?VZH@7L9$D!CP2HTi%9E>4W(*`*OHL*Pta$A zFa*z}Ir67Q2EiUlFubxu&oW3zX?-Eoz?H@;IIcAp8Biql%IK>U<*xRE`LI;yHpC9%&fY096UcMm1 z4C@*?9b!wVE!)bEYe7OA_7lFGv@h~G*SVV@m2rPwHai65ZtVO)G`BY~ z71ycv##}p1T(Xk|(*f8hKUZ~H>iKY|nHud>D#{NV>oApmW2Jef=!HBAUFYI2QjpWn z?_hhJb=eapv9fpvC?s7CGGxBLU5!adQo9nURphAmWNWMgWh=zDv6$BspLs2>x`?f5KUb1`UjHs2 zt7_ml9SJ_`y0gfg_X(w{Y+p0#^!l$WcDJ;87oT4=sCgg;IQd8hTQ$wIlHv-<6UM!` zq5B4m%8H@8Weqc+a=upjyd|=}FQ5K4-&oJtga*igmrYjx8{f(b>0-x87khky=}!v0 zq&8rRylP8)uE~d1#n9wAU)~3s!&M@*wSe7kV0QI;>nxgWID?Me(SUDlUkAT6_~pk> zXn^5Q8kwE=nqD}%mGgv4q{*L_wf$0Y+xkd`yp&OYZr*%eZ+EB|pFST^@o{mTSIqGN zrOQ;tsVY7cRCR@OQ|h5s%D5eNy6ny?Gl;@@|u7A>B;=Pn7=;dtcdBSI}&UC1`*^kl+y99fG?%!QGPJ7Ti5RaCdii zm*59?cXxN4eRA)-cV>RWJP#i@NblLR6fdy{g1lJ-i#SU$V!`>>Ng&0##jX)j!f-;EabkPidWW%E@NY1z0b7LU;%BR?+Uq3=uUwbnh ztDt;#*Xh8{FUX_hd|R$G-FmOLIA4!gBi>bHt!ZHMxJc8zd2GOoxoxqYSN5y4>^V=1 zHgb7mUb<`$qwYcFq&eJtw`{&dw4HIH|6RWEx0-Jn34_wEq&dB=I%gX^EoHpA{G-Eb zFSQO|H6KtqY}2&=%w5;F8T6mEXI;B7IXxRUZWfz&Kev8@jvjWi%XrKq=_DWpvf&do z*l79K6ax0|L9@|brKrx#_^KZaEV8aX=-k+NC<%nqEym+ENLdoFz%LL3V8;nX3rBt$ zd*v;enGO*>&`c*ugO5Kr+B1969wa0aSF{-Y3yvrt>@Y|6a7g{~K?s)DSR=Z^Xut?k z0e`RFb4K6Qm3sN{`JzKfffx1)wjA+lP7h;L+sQ#a67!v(5|)_Qq-LCpT2YD5qCjb9 z6dpo@p)h}V4&I*Fh@A^)>?NlH+5U6(($_1_nb}?7d=;6qaORz76et3{R+SsPmdDdmt2>f=PPbkMUwwriR3D8>IPOWt7SJflYLW6rk!T<1f zCqCCt10^v|XFA8;f?v2bn<=vw+<}FfJTHwG8b|gPU6w;&!+UP-1EDef7ov#Q!d;nA zLdDp1rm2vbl84v#f0RiIC=+drD80`nq`5E7XKdS&k-f z`p)OJ1}f9^_|`?xb_(|dnPask=hTKOg%OH>)rnHuW99Wa!CihoDtFIA_ShB?b^DTm zaIZRBkMxCJnAsZS6?HC5!Jl0{-2OAv7vk}!PyX~Au}FR)dojoBYRV_%T_HUA6k_6FJ+U*wSP1YYjq4zn4-L1jjd!p8%-vqrPCI zLZvVuCAz?-_CIUurmO+tjPfU#-vyGb4v}}EK%~8pcO|{G3gwfj6vc@DLK=92~_KH~%B4FqHG3Tg*=u{HZc>{|aM00UoNqTosaTlHYMPtsNpM1}? zB?6l$c(%QPgeFWho#K^Q#wg~8k>Fu{W+;%@MmZd;B7@j?T$HFq z9xJqJKtjd~FgJRxfPjn?VDVuW^~t+JLj<)1)`s6j`2&iA!q=!~AQ*pgkG~EbJ`pu# zt`Q_bG5MP1l(LE7d(?K)Ksiq{hOxZaimTxpXkw>@0dsC{zr!{cfP3EBnc3@Yymx>A z@pw6g?k<0ds1fyC5~lD=3!<()?_T0@B9y!KpkB`aq+*Gx)1=s z%y0w~QUNHbPV{RoJc(I{sqnCBt2I%`NzXL#)Qt=*Xy(p{!CE-f(B?gO{g`Oa&-Zkq zWSk+?9H#9&>V`pkl0*(=&*|ZfK{+aJoe#r{m zT^xZm!_Av{e*~t}0#FWs8mASr{(x71+?Y2k1UcGih5BDyE%K|?i+S1(gu#cdHTzy~ zRS+OJy$9bqm}3pZ*H8$5;Yo(K4>^H?Xu9@wv{RUI;XM zc;9O-2IN{IR1HOJ^|f-m#I}RTuF!^82^61d!@rWkR=VTDIO5dusXvvfXt*eU6Iqm&k6i( zS8Mot8+gkQ9BP&JyK@fs9W@xkj#DWgP7D;B1dsDfCSBP<*zlX$(nNd$ygnMy3D@ZK zx87AN+-iTk$6WJ9W^b4kLV8uVHY6g?D$et-rE%MMl6ny%Ozh^Rk>k{Yj`==HUeok9 z*~|+fWgG-^{T6^65}8tfOmT4ifPDBck=PuTk}(d|^mZN#fKZEL-KLXe=3&>S=H{)8ezP`A%AKB z-xLo~HB)swjYqd#U9%K2F7=5}nqPi@Wppc{Uo={;)uZsYC12v$s{z4Tj;Npw5c1%0 zf6P7^RPu(xglBMKl($>y2?(ykb89Zo#6-xdk{%~dZ^aYVIW$o`VW)U03Vf;`=pqjK zxGU(WJ8wW)zu3cxeGn1Gbbf!{7g#k|R&+gskF!7SkjQ}T?5)V@R9(H^p-lc9A;hg-_yx%cVtk%pt*sC`9szhd5m<|Dz!Q(F{1I(po z6*2?z=t>LCvIqf}?ob8Z)^?aX_ZL0f*C-xV_mdC3!ri(M+r0u&gIbxH4|kNZm?<4c_$Kh>u-FZVyjw>k~%Wa>n0$v>(?7GllfI#mA6??<)F z?osl>9{etAifWQyamvK-FI4UaK_L2iQceVdZ9>3Try(wvi%~LKnnJSLlVB9x?HfYn zO_RRzb<{DI>xp>VQ(|cir9f(a1Ih!QOV)Z7w+SWO;5(@2x$?BxE(o;`iJ>zu@w7Vc zM;mdxh1Q3YT%@z#)l;lLsQ3uIZ==}#t|j|ykTP`H0Pm7&hLpRMf2FGYQj3XKcBH(< zl{_H4m*Oz8Rsu027Bj5m+pJck1(%o5Pfx`OD3-_v2e4kVOa&3Z|79Q~?WW>cfvhxV z7-wNA!oRv_#mE)y)K2y#r;OsUa;CkZnw+*oIUY3A*XN=LkwLN%!IWJFdWr)*m%tk&bULHT=HO##~bWv?fRFXa|TBKjmFpTUT zE_-V?yK|Zny&3BrBV{=hk?u!yj~PkTjDD))tNC5EeM7vkAkVLXNHG?B^&=a2RLG9j zYsu%8Q!@H*8#x=UR8YtSNi#4_RFE7l7ivy_%81T;@S276s4#9`~F3d@Zu@>49ob$u{^~|f4R+jSsg`RJ*$F0Dj1TGpWf#ksBLA%B0 zM3YPB%lT@X?%vHzb|z8I#w6ZlDf!Ek_OXk7(U@=Cz!w=ese7w2ETWg^(2xd_^^JZc zq7oCg>~L!S*#>W3JE)N{IK3(ZM~&PkxvTYiw`S8nsMZ260b0&~0iJP#sdVyx08dDR z`HYDzsZZd>O072CJrw3MhbL;*7x*9{^j{NN+4Nh37(Pmy1Sc`2ILdp~542XTgZhXQ z54O09$!aaO9_L|OmMI*8E8O*m9UqS7f`47s#}vo~y#$3Hc6_Pnr`y0piucz-q>fMB zVz{NRF>Z-m;sj$b)_K%ONp@YUb&6nZ50!gsqz+$`r8Q?fSjb=0i{4^?Oim2d0#ksmxyhVXA-{7}` zV0Xn&0}3%t^CYSuSfdZ7c5}k&^IC+;EqoEgnoQsy@<8`yh-w%!qGC$U~7FD}s9 z@SK!{sNLc{wQvwYW`>rZ?Tb(a>{781_RYJ>PscI5F2o5=T(3arPBkav=Jl3L9}!() z0_F{!&8xM8gwIKY>TG62Guim(^@ZmP+43}m3XN2rhz6_0*k;no>!`OAVE{7p2xNqr z@(QegGZ#{L!!(-Gm`--0S>6a5rlwlz8t>v5#lQiGM|g*A1T zmJc#v8e&lRs1!Hu?siF6yuMp?7&?Uq=|nu869bHXmXIN8dxte$Qze#Si!Smro)A zRON5x_P#hcKO$nXT8z%01O?4TpqaX-2F+~a#{5>eG5gW?g844lxtqVQ(w~61q?%Lg z9w!Y8v7BZ^@5sp3I0FHiNxEvwKyWfE$Z9A*$(sgFYpWya!x1sT(n$|Ud82Uo)z7OD z%Esc0OD5Ocn-rqMzGxob`T0e zO@67|3tIwJbQ>98QXQ@NBqq)IN3Lbnev*dVwn`tba^)v%j+?D*U5HEv{CtK!9NO?K z&@NT)^^Is-vxdw~$khVg@9g)pVp_jvL9pZO)~QimxLxGWF>1+Hu_XvOue*@1mtNYh zixFDhyWtr~HIHW^oOFap-MhiX`6X1rquWeTbQJrCMePbD^nJ|Sb5C?!qFv=)d1DqY z6}KubZ23!ZJM8jla%`Lgr6|E}MKkYyaz!||Yc!-ji(B8!B?9-ZF#kRkjWv$sdccz$ zKnAD(wO}J8V@!^LfM-P)AX%yC0}GzY?<$xo!hAA zD&H?@4)=w;h><@o8CK1EwerJ!>ur)P2&EnRweY>5#PR9a`B&KleF#&CxnjT{3wy0U z<9ZE_mWd0M^y`o&ts_6%YAFeb#JPES^F*NuQtKkDHI&R>F`)@9yP@YKZuj=ESey7g zcK_5DY(wg|zQCeDWpKJ^8efuUDovUfm7I!(vy*i(l{mQ7nsDod)|Jm;)_=Et|`dJ z21awr>Q2@6mH%LiZ;`z3BTEYVNYSCGZ<}M8lc6celhN_p`jtJtZ9#;1Hjr(8Tnk_H zGtVaGT=C-mRx!Co`Poc`G>=X`m8p!(1cTi-(rwJI3n85+h+6Y;mJX#=+E!%?lKcmQ zcEh{y?e%0W?>m0_^>Ug+e{ZYtCk%P{GO(lIG~fT6yL3Ri)tlFrGDEU7jM zsdGqCJ*bY@j8^?hXLOm)Iw z`D0SX#U>jv^I24mJg9d5z!wgMxPO~8#2Q3$$u5Rx{f+^hn3%StwPdP1FoI$9Q1Duv zKuG$`hq7n~sc-HLyQ{2MH}|vX=YUZcvQLc1amhE2na*o<@7HfyDTsXYwE1FTP;p&s zVajWH0i9%4I%Y5P(n84K8j-#LuwL(B#KA4Y?@%sXnsrhj>QAPq=!-J(q!WEgdrILY z!Bxd31&>OITK2QK+D3cujn_FWnhlB>*c6~V=&9;*w@W=bB*r8RoZreF_1X-WWnkalXS5S2@>kWQNhdb7=QXR#4s4N3yhfb3(aoY) zbFo~$UW~ct$h|PJcuwLlHjGpd;B(=bOqZl-5)1IWxAhjq)4Jyj`XJ@_y@Z~GL(hB? zZmQ{h)XMy#P;{RQ?9uu^deIFo5hk*J4*i$FZ+{INOj8O;em^_m5lbeCBQA;erI_N9 zNvj^97Eg*E3+41pV_QTYIdFR_Nmrun6U-5Djc=<}V!Y-Oexb>X7+KW#h{on%IWUSC zM^t!%MtA*(UCk07Prppo&VZt;Bjj|T4w+?TjeJ8qqe`SM%?C+o&<@SA!$cE3Kw{4` zN{hMy-eQsPGlXU3y@n(q7=-&Ee%eyQt*h8wC#?uFI;c)e;?2z8@KF}|EZpdY-%i|1 zPx%<@!l_qCufoe$VE<*V`Vv5Lg#=I94PebLwEg(sn4r?9UXcc#KfzW}FPg=Fj2Av! ziQq6xSK4#yiT@~>jsI=ly1x_^`Qwt4$uKL_g~v+AAd|*UtM*dwIrwVPhbX>+_dy*N zxI~50S7fhW9oo=3YkIXuF_QM%qL~_L`6ecdPJ+v3NwBSwTeZa$E5-acR=pVoWGD|V z*OVLDan&!{z&sM-KI#R>i-tO^3#J;7O`@Z}OUf^hoW(K4!qLYhno<&P=TvsPZ{--K zRtaK&)p_ue5yJvRgOm{lj1mx0#DEDN!aHYcSKP3w)>2v5$(dl!kc1(~7H`BOO++Zg zX;dFOo(r!54qY?u@SUB^1GC}O4APgRyqDpT>&NxXee-I_>fE#etl{^PwnA~ey(ux2 zZ=#AwrY5Dyq*ICpO3`Yt=@3|U(%M6pB*Bi{q-AEGKTO<-%!&laTOp>o_Nn$02rqsr z$PN-4VaBz`?NjkFl;vz^#ZoomKbZd(Av*ZIWJZopiEzp&g6`|~my@}ZRHL+TW^fv* zjsVnrrL)BK0M|)};rVREEc0NRr~J9^n_8}-fov4(7tg4HqXC(j-sc|8n7eAa+}%() z1EYG;;V$HN-kM#jF%GpLy$@VgWKvg}-qmf7he9DY^QczU8tx}e9fMibbvs;YF1R}G z*jidYi2uNw5my>>aq5Jfgdan31&EEP-j3z4D zsXFnh<8mg7*9;+VeikG`Pz*#eI^ z5nQ;#K1HNBEmzt&wzJEo^*xp5tcY^Od>&g3V^Ww{_% zgG*yoi*zYb20C$7$vh_Oj88o!N#n>|#RWvzes1q3J7k16kmaa@r)3-?9ARr!KrE_Y z#=_m8hREhCveg7fw_87A^w3yyvvo9`n5zY)N%|B&g1OZ-cezm*q~0uQNXM(3m%F&< zr~WiS;21#v7(9ML8xB$d-sRDKVgZ?_&h#F0vuaxE#RyfWzPImi3uSmRxwOJ9%&5h} zLgyGU?vBw`(rW8)HKK!h?;o2DlmvJmqbV~cz?syb+R!GX???M=}qOCG-(QeP7jZG9gd!sN>3vb{H)X_?|{NlL^f z5zazkX=rtG{uhlK8O=X2^knr#U$~B1T+*jq2{BiLnkWwGr?4ZXQA07GxKK5&nbt^D zFN5@c)nfNzBNQ%U_NVU_^MbhjuL!gF8?3psRrcs#t01!s7jj9}v; zm+b>)v>z&vzCZgl_Y=E=z6tb-xJy=i`pYNB0A{jT>X4S$-~Hnflgicj-0gCWx$XNn zCz(gT)#^DsX5{j4ILw}H9CW8J&Bv+SKVlE;b{BUXl5n$Kr@`J-H84fp5-%p+CQ}~j z>;^Y1?FEKQ(gvp0R}Cs`ZVDez#`c_Q19)8vi@9laAk5 zTySXJk!|i5HjbOHD=cahc$9>ED{`t|8e?+_!SiHb2QeW7!lA|mGbdnC=#cW2xHsjL zWaUh@qrU<)U2WG@(@80=Xbpm@7K>6&vs(t}yveuDZ|a0fU-qYd?p=wvHB5cozk6=)pJ|b(2JuzsfTO7kGy3znH&*yzH2014%A_Z=5|1BSdiuN z!A*;Md>S3nz7bz}F66Gr+|qil4Zmpy(WyF|!kSyOlSiaL2^74a@Ab_4@xDp!1DE5> zS8gQAf2AZ7B0%oXnares++Hv|OjgyS=z8+EQQwTDo9C${P1d)}NdA1yk!G!iB9hFp zZm-`)_sddznt#MQjnOP+p&IEAWG^5PpFT>?wYL0|@nqf+i3O`ToYfAOY-#!`!!FT4 zuXxkbm>ViYy1?`{d$61z>pn+*!pNc5pdwjTCL8FojA@z7@p!+S$BBP5O~e=lcggTh zQLzd8cf0NEPX#m7ENYuzkooP*S92N4e>QId6c+V0Dw!z(kvm{q$x8D`IX;vE5drV3 zR34~|hoQgOU2dj7?QSSQ(0cZsvbv!1pmcO z>pJv4EkM8lxk2S?_96=T1!3W2b7=*Mgh8GodGMA@zN<=~E-|B?ed!8!s3uteI2ugVky{Q$TZR`wP=S^j_Z`?3&{fpwwXS2*k1(} zRx%h_&E8~Tskoww64ILxI>>T|g-2Og9U0ZS(Bfl>r=+mm*2Jn=(tc)0 z*$cL)P7vYT>0*isQUj@e7%onoFEI$}7@=e7>Euedo@ho&E0nV*P?^KA<{$++ZK%DJr5K7boaq?M^);VE?bz%eUDKu0KrTgwcO%rufq zv=~=(_LHA`D#ajQ#o^ZI6O&~`uv=875r#F898!1#mZ$N7Y3 zmCWi-GonQ|Y~+G@Q*?qOlSV_?y&PoS8baZbE_m|8vdDxNA>oVL?HX%FiC!PkFPmLf zR`(j_u`%qEGmcOCfAK*c4|noT%Z2q2D<@@8ZStALDDG-j)4YFhMWk~3$9*&b?jtso zQUf5&FXC|;MY_C3Hb2r3eDe^&Noj;Mtas|sV`c2NdoQuop%BasC)dg-(&IC;c*|?M zw7aV240yEaR80&|MUakpb$jMiw9}==KWRcQF=gYIc9ZO)u=~|r3{xnk6`mU3NCeur zo|pN{B%$0oc)Vi8O%~++Z*yqIUP9`Ub56@bb0q9tD2lZ8hh`h&tfF_)4wsw4J;2-s zn+)JKIk_WE06}v_DS>qg8aQ*fB2$jod zw6pOueS(;0y_BlK1XQddvXjFK#-eIBajkATPKf`P+Y$&k<{`Uah`drBs z8AEcmr^9D9@=yOjdH@ap>Ca|z;G#2wk7x9JqPW%os|3DuW!4D#=_OJ4B@AyM4cRU^ z4aJ$L!Vw13WnD=*nsg|F;?K~XUIiET;rWdcp}Q`D`u(FxlK7%fkK|m`zilKysEtlS zI#kwfkf-|fJ%8nAWDm2PhX~u3w9-$~+dIaqe}>xGFR?W!ugZG*drtLa`=psFaX4h6 z5Hytjj(%V;)M7Qm^4f zfasj=R}ZYIWDAa9L$Qp$-?Y{4$H7kDvZ`XaaU4EDPK+CE2iNv1>6}I+o_a5wz(!po z_&RRVHw@`a!{1urahsN2${A>!jqb4X2mafy0*S`y21uI9dz+dBw9H^3D!vBb%iI{{LQU4FF-+OZE410Z+1oL(;|m6l{0cD~Hp+O(08O z0?JV~tZ)Qz=ARvA_~Q(VNmC+26rnY=mU9ZTm)X+=56W3hdTAMt*9BW=(MRtH1-34r z{mK~c52*XuLrk~_s_6}R94^G8pw6|8;So#Liu)erPzAwO<$;s0zDrmK8fcSQs;$rx zkD=QEd$J8XV0oOl(_bk7yf=sP!+MuUO+NZi%49^3_TwPVn7wc)&x6kFqsMw`#7o7q zi_G1X$+ppz?BD5Jb^_LHi3_93W`}&}Lo@U^Hre#)6s{rv9FLj4m|rLflkT=B=ch_A zorFN`H#m({@*dom&Zm{3th7;q^GHmDnv;tjjUf`=Q3oF=L&}KmMvxm1Cpv9hHeuR zI$@^2rl@AdL~t@>>rqPf*PjWG=xWyR!<6QmX)Pt7sUiUNBLOG_)(mCT0L8Id(nyMt z6>VuM+is#@BZ{!lVa)u$iap(XH_xTGEUKn$H_#jQ@>(i&U}Hq9!b5$kXKh+NgM5x-?VgEY=(3pB`t^KYHaNj zj`F~0xTu_Mj1L_@F6PRqs4t<@>LZt(MuX=POauEvKa7T*WjAGHekt{Klhzbhh*0OV zQmGWhhnh?>jrNdglDW4@k?E}f7x__pKy&XQq zr;x}6X}b@i_pL`3ls~EkDwXO)|*^ed}>L`t%4J1%tmF5*iPUw%VU}QO?^aZQG!gSr^0@wj>KA%1+;1PO~8qC z^(dAac;g1F56{G@iSA%Z3hd4__hQ`e3JJPq1M0OFp8iOH8X$$5U1iRxCS#&xiHCR> z%2}eI6ZvFPZhMKnlXP(?NhkSWSFTGrK(GnOZ$nb7^qw?H%1z_WiL7ZnK7blihYkCD#ye<94*GBVnVew z`a$}uqlThvQw_F;n#ZGLZiy%ao^t9mRW2JziuBzBea&#QXzp@-)7lsltD7>g#Yg~Z z3!I-ir(>0e0JD^UDVB6-sGNCj{9-T)L$+iQ>0nZ9@okCDf2Ew@J~<^k@Aqc>P7%w& zWJ{be4y3sVmpnhnehw=0i!+n*1PwzbX+?QyX{njRh-`~zcpfOh?w^4=ferKp$<_mS zo-pxvtjyfIGl|L;xaPu3JAr%g?=hqm_8Ysz?(gPx^&OK~T03WUe^+5rUyZaKOL%x%RtcA8CehzhIlv`ExZOP-X*{b9> z!Tds>KD$hWW=Z=_5?vkE(rLx-DICf9jXE<~D0d5G1|xyvOGz966Em*gU9^D@yzqar z89Pb1ChtQsnUAmcS@-{Fd^vcZS@ip-+-XX79LxD7<>N27A>T_0cWU3kO1__AieZHZ zMBjkdoYD|b1Jw~#CVEwDhWG$=+P^5JtdD_zk>GH- zR;A-dw2rv~X1uuVV@M_Q@lxSx#S?Kg>i%euCSY(g@_-E-^7r!y0U!9_Y4r@e-~Gzp zPm9)M(eWs=l$Bw-)oF_{Uuxj3Ig#^|lT57_Q~ZLqg=6ZKo!;Lslu1E?1E@&`4v+`k zF54v$nBEIIb}pm9_2P4jmqDACkv@0&;(30^(<&y}RiB_NX8MBT3_B%m4_ckrR0gG% zqJ2Vu01K`eFcIw6iU!<&yK6NNG!u`n#&WYqKq5~LRp{e7uwblIqArrRnx}# z$ER}v>|!+ik=hSn7b9@lmI~f>s9t$0e@2e1R}QzDvQY3v`nH?j^#Kk`Z7D+fuP#E$z zqX+YTQ9xoDMzA5dU%KoAVe=*7oBigDSI{vSUEqem7PJ;u@dO~CX2&sQfS zSP}0<`~EWo_!}P#a1$4S*H)YT|M*(~b^L&*8Ymbe{m&Es|Iq)V5T6~g%0_HVWPAj~ zAe11{gNBv-dJE(!w=vTrF*mTv65#-}CEsMdA_8yf(>Fomyt%0eGCFfrOYGPcm*(>> zqSNXEULrzK%6qp=)^7*_{wH-=@XF=afQM7%Ky3*!)Kq12FahC(7Mb~CR!H60A-*10`!T<5| z_TxWsFwoR_T$q84gXn>t#z2=NJQfm+zK~$_T_?Rn{pSyLA35!3R5sT05|CahfzA#- z6*LfzN}<3b{gvD%jug;>x<5L)81p1geZEZS-i-QUU~5HBJ37|zfd%b}jfKU)>API0~j-x(tE)6)!%`&<{L90Oyt83 z6HhZ?Ruh;vKl*$;7FgDC)glcqxP~F5|HhK>5fhmJ@6b#G6$yjF4{*v-H1JeF!P^Gl zQrM`rnwZ~EARnr)5i-WCTH-*jN(i(Em+xCv|hhbm+Le9^?##{Y3 zpzB&GB}aco<{@q`uQ1450=TsX@|EHH44)iBCaZ>Jvn_tp_6p zBa3x3kJyd(8{j|TiT?vsEf|vkCClu(>?z7K`WT(L$aB7Kpp^ZDa?^ckuKYfgkKuu& z{d^8a7y@ZApn8xf15Azls`aXnBC)fo<7LU_8U3v`8-6{@kVkts3`W5F9i$h^KRYu8 zMy3rTY?IXQ{m4m;@+l({Hq_11dF^ewd?oCALB+il=gUn6$6-kb*k^|Q2(&R0`Y8CX z4j8@G1te8D=5P8F0uFfH4!?EB(b4(`EEpMV%v-3Zrp+wH&JNhhSgzpATFf&pH;H|g zB^cC+4YJ1y- z#x_>R{8guu?qgTwEjfp2E%(dIS&%S;hh$EBabo+zNLP6%eR+uV))#AcVa|uRidbU@ zzcdDSMRm7T7l&dW6X3`a;d#i=RD#!+)YnrC0|P5||A&Y2i`h~wto&R?4X+^XKnJH* zVRf&ir2xQjbUeh$v?DpLQXgkIx(}=eY(0*&3^vX;DxDvH&6%t>D&Up2yqt7Da<4L# zcD%?37U6R@Kc>p=NKwOe66`_jnb=xcvCik`UxzGSpRUlfMB;y-8x?{=2NPqFbVq_~ zQgqJCz`39py%#fim=@jJYR0y^RIwHlD!4~F;NAYdmA9A;Kee?wLLNMxx|U)2QRO@j zqzx{%L7pqki?SK^a`TjGLf=o_)@p9oS%9lnDH;OO?xzb_AC8;X`QjRVD>wM=;8O@L z721R*3zj5?RfPn-x8L^PUd>;0aN%PECG*Gl`7K_~IzG>?oH~BM`~-w584^J4G0w9t z!|1Z><0ZO9UUaAL4DK>oNn}oz7k<{`z56@S@vOJev&T2bSwQ2+^YqnVMgG|zMXTXQ zc`GxX+nSr!%H^~p+H;)8mM|eEJMX^W7dHr;v(1c`0r4*QrkmoqnXvl)m?i7Rxwfud zy~iEz%^!I6aSEuz9{1e_x4dTru-eUm_+Hn~m8bCycqunF#6YJ% znMcK5Ym44XvUdjphvkqGYU|6%Mh^x51glB3wb$X)wQ4-+evMzpBtd)$s%5&zKFhC~ zBzFnRA!~kWi`KQ5WXt&Cs2@<@^E#8B)?pKHisJawSr#r+Ivi%p{qGIcgamEY0}_x= z%!fRerA-U0U8gFKqNNkieA@weN`3>OS>+eA3nl3|ijOCH46n7b(cDv5LJkqMTv~?|3E?P z0}tNA042|b;!+KNox*eCF_aNRgz|;ma!3(%xc!ds@sZ|kwx5rFczKIJR{AJ%Y|tLc z{>;NV$bA}0+jil#wjikP())(7URm!=lk>8V;OYq1_l{Ey+bz;m-Szk#Y3%1HKyE>#?j(=<6)g0l1cL2s}-_svsPZ!sjpCvDaYC z$;uV)@|c()<6Tumz=BhIPXD0qa?IP3!4|Y*c zFCpsGLs@%{-zCb{2&aMR-|;i;-|jYTW9J!YzVJagHgnuW)PoaWqi*00I|ww?FW{N} zTIXV4f-(Abzi6{=_>e9fVNF_#z$Ig(4e4@v6?myR@0rl+o2jQ%nS1`q+Geb_^TN2>YP1jFZTo3lUH&aK_=MBQ;BiNzOU!XB-=I57 zgbeI!Ra~-3Xz{m{Z>>y2F9Q=8HZXyCyuMtQ$c*Xy=<;O*j=UR_j**`@Yhx`ui5x}tK;RqFuvwE^Zi3D z&9t2TZF|IleAdkz}YZs2F zJ$T*3P_rk*{_ubod9TGzufKXuLEQdj5uP%Mt8Fdpo+^z*YKY+=Ct^9z2fdQw*FHN3 z{X3f1U!;0$x^(aUzIP#VOW{de8FSp!YsU_6&wH};nBg?vHX9$6rayRmcUg=AKE4tI z90vMpoce=+4E__0%~J5PAD`Dq1cJuwR0omn?PWUr1>mC9;ahLCV;`SYuIypj2q^iS z7fd#WojPLh6*F`s^&5CMf(^R8UdKGRK79|hQ@thJT& zTVz=47b8|5bi5kQKhtz56&zBfJT>y{zl5)%xX!)nO36GIE8JNHg3$Pwx%iJ$H$A#V z*NZL;KJ5eZI?&nOD30n{*sD50Q zZ$B+K{Z!9$83k$m_n?kWP0-s#-gAe>;53I2{z^?J@61X(ikXbCeewDH4Rdx#uQ{du zT~mkG+f@2u?kV-!#qf^+hlUm%wG`b!L2H$+G7|3XE!~xRPdzNHu&RR%6qFRNgM^Yz z)h+OERZ@AapKDCs?q{SZ;U2$wrMxax084uxsxvkspw^j-J%4e$=kL(atTH$M4It+- z^xzQccIvWCT1g5u1Tfv^$|itw4!7^El&x^Q^?9MB5L{=@da4A8x-i}m5iG7YR1_cb z#rw;4AhkJKmaQbwR3O3XJ!fm`aBMVluTUL3Un(~zU6*l_G$f_PE{!Z&ai_l=SDsRA zy9Agl0~)nC&tri9(f;;Q{>ioNLHy17w3^?_V`+ZD8N*@@IxiZ)=VLG}Y*Frd7u7jP z#2Efgkl$LNcruM|FSYV0kD(+4mH_23%-d4lRcZb_B!}Hf-9wnR>`_)KAV)PIM`G#KNDi4#)<^7qU;W66zg8{hU6mW7PM>kGV7Tt9 z69QS*o^(qRou9_)-!7i&`22XVn6B*kvFcxEt>^l1zi~eOMe%RCYj23-MnL;SKGX!n z3jK@eA{&A7`1QC(hoyM&7rA-ox2L(HuIC6ZJY-#0$spIl;;9kR@KUQg4;o^p!S`#n5l$~T*? zHl?@YiuTlUrE%%;c(834+?UGc)GC(xN){{peId;IR4|uk9S>6yf&yNiZe}vftsPmY zUOVOC zGM-h9?P+kje$&fH9&)`Ya5_O~(S4=B|9(Go*-oK7PJBi_E>zGTwA1|HG<9=jV=?13 zcBH#D=Xa>m;n`1gwS4Lk3^}X-u^}I{fYsOM)b4=S_meY9xv3j7b#oXFH zrSj@)8~^z%w^BiG6u+C%(Ok)?>qThyb=cSm5<4l#j27;E1%8>_zl7PcKIv(N!Qy2_ zyumgLIFbSZ4}%HwOa`Rg*uTM(29h8JAPKsw<%-{F?Z?s6?n_8mvT%EQF2k?b$J_oO z?EL!^N(_C!<2OE4$IY0GpBS!BEa{(T*IsYS+!wJc>H$0G3AQ;8NT`2(S+JRF3ABtz zxN83{i|Y=Cb|SztpYg#@`_nm(0dwZ%mFV{Nq=`QaP$YJMBBhtPKeF)=d9Cz1eOk15 zJXCy0wrEd#T?I(O&|=%Wq9y1-mt(=l{?}KXjeBwa#X*O!1k0mXmB87sWs<<4$)(rR z(kDkl_5xEy7;dRnWuLGorw43eJL3~y?j7foYzAyvz3BuyXGBnI~fWdrEu*;z@J^5?#OJzDfmBLB~ayYL*iS zBmAIkulCZ^sFfN4>Ou29Yp%7KZOQb(_ii+l-s;&?5H}pGW8lR)K+<`)d^I4cFA39E zM#M?yrNT?vpjo?+zY`bHLYjng%Rb=OxxyFe*!@=e#wXa|aON_V67+_()hp_;rMMIk zGqZv)V|ilfK+{fyS}wkNP41%pq^E`dI6ayMS&@*oSe-X}HjLth9X{AUj_G-w;~f-x zvHmz6W{t-#Nz7wEw$r3i?nwLz0OLQrz>*tzg)|DFVar2psiLlXoWQ2Pl+IShf6+*L z8VKq>ZdqF~qciu~tT!ldZ!ESlf9fOYnSY%w2)J=-HPUJHG5O(n?q_o@%3!g_&x?QC z{y=x)uBlmZ4M5jYr2@=x>-HpLosl@*|7!2bznZ$Xa8(c^VpL=jNa}!Si-HfCWD*6` zqJp)`oG?`e%^(Odh7dp@6+|j%s4^-7b%1~j2~!e5CLtmsQVB96Ll}}k2uVnI_xf5( z|AY5K*E&C)weH#X?0eST`}@9q_bn82iBorQzjwI$W^1mtg0mQ*|W+4=3RUh_45^ZDf=8Vhsb+`oYMOdSOX0xb>mf)O&85+FH)V zxK|!}8nJORP=2G$FUlVlEr3 zQy=?W$IzDz9v-Mz`izN70{+5rn1S^Gh&!E{#YaX=43ev>DH2~z81bcx9Gta^{LvGz*nX4<9^Xw3b6D(8NJ3}%XN}@xhXud{d z&0r7^wHUsGG7z>%YZ{I(BEs}_z%{D4pLSXY8~Xe!?qu@{+L1 z@nE^M2=ws&o9_ov|<_&&++{gA6nLi;H<-L&K@?AJ;iJ$<`J zO1fW%t+5;x$7FG$q2Cj{dTq)awy=aa`t`)BiUQ_bW;Ct84M`%pR`1qJNd82PJjdN( zKipC>gu}?+KHN0YT3cJO6N4}95xuw$bKU2n6VBm%hD9#>vOk~l4H+wXSj!NObjz)E z@P$^*oKTKn{1`b&REz9K=*vl!;WMaOOs2oxTeBaxrLdj?tucJMvi)G+Lgt+ZZuF|h zN*`$4hE4PbYZ;jJ3el^m4)$9tnBX1rS?h;;w4Tuyby|DlCmK zWuE4I@v`ch$YrUXH^+{%OPzlv;Eh~XeMJQ|rv0?G_gQw|c|F;EX`k7p6mqVTjQHL^ zwQfC)SpLa{b?Mq4hGn6a!a_`ZXBx7vldNdxY=01F_Xd_8`kgj`-c_hlH5ZmsQyn^MU5ddSgv#Hh=!1U>Z{{b3cXZhedcV2woPcH{W}_ zCJnLWGnG-rY;g=|i1o40u~30L{|4k=Sto|JobcJIaL~7M^68nAT_PP%xQK2PCL+wE zvbBdOX-5s21{z7{NRp+w`Zu=MqPPlSgUxrayhj@2X@O0X(L;W`#>bh4*Gl>%T^EQ= zw)~seDNKJ~61C`o?V8#}9L`<>yxROWo7(9cb$_PD<(u`(ipWRw|x3nAHM} zHf`R6ItpAkX(^A6cOsHyE!0Ro9sIEN+6|@5emC#Z z{{m8;q1Lk<=)cmRHM$>Ow(eIBWJoh(B9D!horX2{@yiNmS?GQ^!kj`of|9`nJspI( z^4vn_J-Wwz)BwJ^c)jy?(3=V#s=v~zdU=1?22EG=Zq(l8{&Dw-)*sDeK3WV|B!wD% zG8>m#EZghs{;vLsMWV4QLTe*aaxPG|u)XF?5GOUOcQJ1?l6{J3WspS9Z^C=xnk?gW zorxY?J=oPZrAiVT2kuReLzn){@`EQF!hr0%>o^b>L#&=z?cSmp&5{>biJ$9Jx_-vU zyO1bZ{JoG3@L}Qo<5^0?r2HnWvQLWx}x-IMZq@^a%4Uflo-Ra0oPT6e$WP9{e9Z(4+Is)BxJlYMH&M`O^ z)Cg)9zMytdtlBu5!V2AN9t(9LPB^uyMdi>fM;>y*X*HvV8R4fF-+m~;EqR;spE!3t zNppzzyuni&Lcn33lOqx#hbd0)@K(Gtrf6z=WPJtMD&UEe>vEKBzRBH|wHsalzEk0n zCJQ_W$=tck)ypGly3{Nb5qkyHo76z-37yT?zm3ULWzm#2T5;X|=W-_3;$7tx{nFYz zI3P(yTKX*Pgm=uYGw4RyFS2@eizoSQ)}(9Wu8JWWPdLy$uwINLBT)?0fMd<2TL%Hz zJ;1&4#+0J=R0Ye(BjvP$Q6X)ZURd3kSqJo@{W&LZ-y8OX**c(+pLR3JB7ll>)`(T3Y5fe5WyBwxhVKYQ$u8ecTqrPu|`F!Y-~Q)?@N-HEOI*X(kE%XEG=$;Hi3l%8FFDhp!4H$-k|8vS8ima%3d z-iwgv84th#XPb}(dsuRnxG`^*{2{8-DiU%E`J0)!z}|Ccrnn^qtH z<23TJgL$~vtZrg9%FN)kD}i6Kf2&HD%FX2m_mh0t6t?fQ1pwl4^xUQDqi%$m%5$Bi zwv?fPvYI>N^JYw~)5JMJaWRR+LO#D}Yp-tmQw5;66gx8fZgDbrm{0pKCNG}p1j034 z0d^8#U5)`~dn7Xqb^y@*omO96@VOjedZYZ}XktS;Wj<|)a@LSqxm8)&yr_5&$$~FZ#*fsM^51#yXh-UD3x=ZNV5 zzee2lCL<24Bl|iUQ^54bYM7X1ivk?XTcg2)kG@|2MJhT7 zPRAPug7WCs0f_Cui7{|i)^J#H&xcp%g5l<1hK2G!4T4p}{&)}io)t>~J68dwa|hep z|7p+w$QCtQJL^CVf5py&Kt@9)5Rg<>-nKu8d)%_r_XBlDD|YU96qpV&4^#iA!GB%7 n(n-gC{&n^L>!}`CUUg`yu+=;@ZU@jd_?r_Br|pZ5_{9Df0X+J~ literal 0 HcmV?d00001 diff --git a/src/assets/toolz/icon_filled.svg b/src/assets/toolz/icon_filled.svg index 0e86fd0..35f016e 100644 --- a/src/assets/toolz/icon_filled.svg +++ b/src/assets/toolz/icon_filled.svg @@ -1 +1,7 @@ - \ No newline at end of file + + + + + + + \ No newline at end of file diff --git a/src/d3host.adblock b/src/d3host.adblock index 8717963..97bb345 100644 --- a/src/d3host.adblock +++ b/src/d3host.adblock @@ -7,8 +7,8 @@ ! This list cover all the tests on https://d3ward.github.io/toolz/adblock ! Type : Stable -! Entries : 137 -! Updated On: 12/3/2023 +! Entries : 136 +! Updated On: 10/2/2024 ! Created by: d3ward !============ Ads ============= @@ -48,7 +48,6 @@ !========= Analytics ========== ! --- Google Analytics -||app-measurement.com^ ||analytics.google.com^ ||click.googleanalytics.com^ ||google-analytics.com^ @@ -65,6 +64,9 @@ ! --- MouseFlow ||mouseflow.com^ +||cdn.mouseflow.com^ +||o2.mouseflow.com^ +||gtm.mouseflow.com^ ||api.mouseflow.com^ ||tools.mouseflow.com^ ||cdn-test.mouseflow.com^ @@ -185,7 +187,6 @@ ||data.mistat.rus.xiaomi.com^ ||sdkconfig.ad.xiaomi.com^ ||sdkconfig.ad.intl.xiaomi.com^ -||globalapi.ad.xiaomi.com^ ||tracking.rus.miui.com^ ! --- Oppo @@ -215,12 +216,14 @@ ! --- Apple ||advertising.apple.com^ -||tr.iadsdk.apple.com^ ||iadsdk.apple.com^ ||metrics.icloud.com^ -||metrics.apple.com^ ||metrics.mzstatic.com^ ||api-adservices.apple.com^ ||books-analytics-events.apple.com^ ||weather-analytics-events.apple.com^ ||notes-analytics-events.apple.com^ + +*$3p,domain=d3ward.github.io +@@*$redirect-rule,domain=d3ward.github.io +d3ward.github.io##.textads \ No newline at end of file diff --git a/src/d3host.txt b/src/d3host.txt index 55897e2..977bc2a 100644 --- a/src/d3host.txt +++ b/src/d3host.txt @@ -7,8 +7,8 @@ # This list cover all the tests on https://d3ward.github.io/toolz/adblock # Type : Stable -# Entries : 137 -# Updated On: 12/3/2023 +# Entries : 136 +# Updated On: 10/2/2024 # Created by: d3ward #============ Ads ============= @@ -48,7 +48,6 @@ #========= Analytics ========== # --- Google Analytics -0.0.0.0 app-measurement.com 0.0.0.0 analytics.google.com 0.0.0.0 click.googleanalytics.com 0.0.0.0 google-analytics.com @@ -65,6 +64,9 @@ # --- MouseFlow 0.0.0.0 mouseflow.com +0.0.0.0 cdn.mouseflow.com +0.0.0.0 o2.mouseflow.com +0.0.0.0 gtm.mouseflow.com 0.0.0.0 api.mouseflow.com 0.0.0.0 tools.mouseflow.com 0.0.0.0 cdn-test.mouseflow.com @@ -185,7 +187,6 @@ 0.0.0.0 data.mistat.rus.xiaomi.com 0.0.0.0 sdkconfig.ad.xiaomi.com 0.0.0.0 sdkconfig.ad.intl.xiaomi.com -0.0.0.0 globalapi.ad.xiaomi.com 0.0.0.0 tracking.rus.miui.com # --- Oppo @@ -215,10 +216,8 @@ # --- Apple 0.0.0.0 advertising.apple.com -0.0.0.0 tr.iadsdk.apple.com 0.0.0.0 iadsdk.apple.com 0.0.0.0 metrics.icloud.com -0.0.0.0 metrics.apple.com 0.0.0.0 metrics.mzstatic.com 0.0.0.0 api-adservices.apple.com 0.0.0.0 books-analytics-events.apple.com diff --git a/src/data/adblock_data.json b/src/data/adblock_data.json index a5be9df..840dcbe 100644 --- a/src/data/adblock_data.json +++ b/src/data/adblock_data.json @@ -34,7 +34,6 @@ }, "Analytics": { "Google Analytics": [ - "app-measurement.com", "analytics.google.com", "click.googleanalytics.com", "google-analytics.com", @@ -170,7 +169,6 @@ "data.mistat.rus.xiaomi.com", "sdkconfig.ad.xiaomi.com", "sdkconfig.ad.intl.xiaomi.com", - "globalapi.ad.xiaomi.com", "tracking.rus.miui.com" ], "Oppo": [ @@ -200,10 +198,8 @@ ], "Apple": [ "advertising.apple.com", - "tr.iadsdk.apple.com", "iadsdk.apple.com", "metrics.icloud.com", - "metrics.apple.com", "metrics.mzstatic.com", "api-adservices.apple.com", "books-analytics-events.apple.com", diff --git a/src/data/font_list.js b/src/data/font_list.js index 5bb611d..22a7fd8 100644 --- a/src/data/font_list.js +++ b/src/data/font_list.js @@ -1,247 +1,247 @@ export const font_list = [ - "Abadi MT Condensed Light", - "Albertus Extra Bold", - "Albertus Medium", - "Amazone BT", - "AmerType Md BT", - "American Typewriter", - "Andale Mono", - "Antique Olive", - "Arial", - "Arial Black", - "Arial MT", - "Arial Narrow", - "Arial Rounded MT Bold", - "Arial Unicode MS", - "Arrus BT", - "Aurora Cn BT", - "AvantGarde Bk BT", - "AvantGarde Md BT", - "Avenir", - "Avenir Next", - "Avenir Next Condensed", - "Bahnschrift", - "BankGothic Md BT", - "Baskerville", - "Bazooka", - "Benguiat Bk BT", - "BernhardFashion BT", - "BernhardMod BT", - "Big Caslon", - "BinnerD", - "Bodoni 72", - "Bodoni 72 Oldstyle", - "Bodoni 72 Smallcaps", - "Book Antiqua", - "Bookman Old Style", - "Boulder", - "Bradley Hand", - "Bremen Bd BT", - "Brush Script MT", - "CG Omega", - "CG Times", - "Calibri", - "Calisto MT", - "Calligrapher", - "Cambria", - "Cambria Math", - "Candara", - "CaslonOpnface BT", - "Century Gothic", - "Century Schoolbook", - "Cezanne", - "Chalkboard", - "Chalkboard SE", - "Chalkduster", - "Charlesworth", - "Charter", - "Charter BT", - "Charter Bd BT", - "Chaucer", - "ChelthmITC Bk BT", - "Clarendon Condensed", - "CloisterBlack BT", - "Cochin", - "Comic Sans MS", - "Consolas", - "Constantia", - "CopperplGoth Bd BT", - "Copperplate", - "Copperplate Gothic Bold", - "Copperplate Gothic Light", - "Corbel", - "Cornerstone", - "Coronet", - "Courier", - "Courier New", - "Cuckoo", - "DIN Alternate", - "DIN Condensed", - "Dauphin", - "Denmark", - "Didot", - "Ebrima", - "English 111 Vivace BT", - "EngraversGothic BT", - "Exotc350 Bd BT", - "Franklin Gothic Medium", - "Fransiscan", - "Freefrm721 Blk BT", - "FrnkGothITC Bk BT", - "Futura", - "Futura Bk BT", - "Futura Lt BT", - "Futura Md BT", - "Futura ZBlk BT", - "FuturaBlack BT", - "Gabriola", - "Gadugi", - "Galliard BT", - "Garamond", - "Geneva", - "GeoSlab 703 Lt BT", - "GeoSlab 703 XBd BT", - "Geometr231 BT", - "Geometr231 Hv BT", - "Geometr231 Lt BT", - "Georgia", - "Gill Sans", - "GoudyHandtooled BT", - "GoudyOLSt BT", - "Haettenschweiler", - "Heather", - "Helvetica", - "Helvetica Neue", - "Herald", - "Herculanum", - "Hoefler Text", - "HoloLens MDL2 Assets", - "Humanst 521 Cn BT", - "Humanst521 BT", - "Humanst521 Lt BT", - "Impact", - "Incised901 BT", - "Incised901 Bd BT", - "Incised901 Lt BT", - "Informal011 BT", - "Ink Free", - "Javanese Text", - "Jester", - "Kabel Bk BT", - "Kabel Ult BT", - "Kaufmann BT", - "Kaufmann Bd BT", - "Korinna BT", - "Leelawadee UI", - "Letter Gothic", - "Lithograph", - "Lithograph Light", - "Long Island", - "Lucida Console", - "Lucida Grande", - "Lucida Handwriting", - "Lucida Sans", - "Lucida Sans Unicode", - "Luminari", - "Lydian BT", - "MS Gothic", - "MS LineDraw", - "MV Boli", - "Malgun Gothic", - "Marigold", - "Marker Felt", - "Market", - "Marlett", - "Matisse ITC", - "Menlo", - "Microsoft Himalaya", - "Microsoft JhengHei", - "Microsoft New Tai Lue", - "Microsoft PhagsPa", - "Microsoft Sans Serif", - "Microsoft Tai Le", - "Microsoft YaHei", - "Microsoft Yi Baiti", - "MingLiU-ExtB", - "Monaco", - "Mongolian Baiti", - "Monotype Corsiva", - "Myanmar Text", - "News GothicMT", - "NewsGoth BT", - "Nirmala UI", - "Noteworthy", - "OCR A Extended", - "Old Century", - "Onyx BT", - "Optima", - "OzHandicraft BT", - "PTBarnum BT", - "Palatino", - "Palatino Linotype", - "Papyrus", - "Pegasus", - "Phosphate", - "Pickwick", - "Poster", - "PosterBodoni BT", - "Pythagoras", - "Ribbon131 Bd BT", - "Rockwell", - "Savoye LET", - "Sceptre", - "Segoe MDL2 Assets", - "Segoe Print", - "Segoe Script", - "Segoe UI", - "Segoe UI Emoji", - "Segoe UI Historic", - "Segoe UI Symbol", - "Serifa BT", - "Serifa Th BT", - "ShelleyVolante BT", - "Sherwood", - "SignPainter", - "Signboard", - "SimSun", - "Sitka", - "Skia", - "Snell Roundhand", - "Socket", - "Souvenir Lt BT", - "Staccato222 BT", - "Steamer", - "Storybook", - "Subway", - "Swis721 BlkEx BT", - "Swiss911 XCm BT", - "Sylfaen", - "Symbol", - "Tahoma", - "Technical", - "Teletype", - "Tempus Sans ITC", - "Times", - "Times New Roman", - "Times New Roman PS", - "Trattatello", - "Trebuchet MS", - "Tristan", - "Tubular", - "TypoUpright BT", - "Unicorn", - "Univers", - "Univers Condensed", - "Vagabond", - "Verdana", - "Webdings", - "Westminster\tAllegro", - "Wingdings", - "Yu Gothic", - "ZapfEllipt BT", - "ZapfHumnst BT", - "ZapfHumnst Dm BT", - "Zapfino", - "Zurich BlkEx BT", - "Zurich Ex BT" -] \ No newline at end of file + 'Abadi MT Condensed Light', + 'Albertus Extra Bold', + 'Albertus Medium', + 'Amazone BT', + 'AmerType Md BT', + 'American Typewriter', + 'Andale Mono', + 'Antique Olive', + 'Arial', + 'Arial Black', + 'Arial MT', + 'Arial Narrow', + 'Arial Rounded MT Bold', + 'Arial Unicode MS', + 'Arrus BT', + 'Aurora Cn BT', + 'AvantGarde Bk BT', + 'AvantGarde Md BT', + 'Avenir', + 'Avenir Next', + 'Avenir Next Condensed', + 'Bahnschrift', + 'BankGothic Md BT', + 'Baskerville', + 'Bazooka', + 'Benguiat Bk BT', + 'BernhardFashion BT', + 'BernhardMod BT', + 'Big Caslon', + 'BinnerD', + 'Bodoni 72', + 'Bodoni 72 Oldstyle', + 'Bodoni 72 Smallcaps', + 'Book Antiqua', + 'Bookman Old Style', + 'Boulder', + 'Bradley Hand', + 'Bremen Bd BT', + 'Brush Script MT', + 'CG Omega', + 'CG Times', + 'Calibri', + 'Calisto MT', + 'Calligrapher', + 'Cambria', + 'Cambria Math', + 'Candara', + 'CaslonOpnface BT', + 'Century Gothic', + 'Century Schoolbook', + 'Cezanne', + 'Chalkboard', + 'Chalkboard SE', + 'Chalkduster', + 'Charlesworth', + 'Charter', + 'Charter BT', + 'Charter Bd BT', + 'Chaucer', + 'ChelthmITC Bk BT', + 'Clarendon Condensed', + 'CloisterBlack BT', + 'Cochin', + 'Comic Sans MS', + 'Consolas', + 'Constantia', + 'CopperplGoth Bd BT', + 'Copperplate', + 'Copperplate Gothic Bold', + 'Copperplate Gothic Light', + 'Corbel', + 'Cornerstone', + 'Coronet', + 'Courier', + 'Courier New', + 'Cuckoo', + 'DIN Alternate', + 'DIN Condensed', + 'Dauphin', + 'Denmark', + 'Didot', + 'Ebrima', + 'English 111 Vivace BT', + 'EngraversGothic BT', + 'Exotc350 Bd BT', + 'Franklin Gothic Medium', + 'Fransiscan', + 'Freefrm721 Blk BT', + 'FrnkGothITC Bk BT', + 'Futura', + 'Futura Bk BT', + 'Futura Lt BT', + 'Futura Md BT', + 'Futura ZBlk BT', + 'FuturaBlack BT', + 'Gabriola', + 'Gadugi', + 'Galliard BT', + 'Garamond', + 'Geneva', + 'GeoSlab 703 Lt BT', + 'GeoSlab 703 XBd BT', + 'Geometr231 BT', + 'Geometr231 Hv BT', + 'Geometr231 Lt BT', + 'Georgia', + 'Gill Sans', + 'GoudyHandtooled BT', + 'GoudyOLSt BT', + 'Haettenschweiler', + 'Heather', + 'Helvetica', + 'Helvetica Neue', + 'Herald', + 'Herculanum', + 'Hoefler Text', + 'HoloLens MDL2 Assets', + 'Humanst 521 Cn BT', + 'Humanst521 BT', + 'Humanst521 Lt BT', + 'Impact', + 'Incised901 BT', + 'Incised901 Bd BT', + 'Incised901 Lt BT', + 'Informal011 BT', + 'Ink Free', + 'Javanese Text', + 'Jester', + 'Kabel Bk BT', + 'Kabel Ult BT', + 'Kaufmann BT', + 'Kaufmann Bd BT', + 'Korinna BT', + 'Leelawadee UI', + 'Letter Gothic', + 'Lithograph', + 'Lithograph Light', + 'Long Island', + 'Lucida Console', + 'Lucida Grande', + 'Lucida Handwriting', + 'Lucida Sans', + 'Lucida Sans Unicode', + 'Luminari', + 'Lydian BT', + 'MS Gothic', + 'MS LineDraw', + 'MV Boli', + 'Malgun Gothic', + 'Marigold', + 'Marker Felt', + 'Market', + 'Marlett', + 'Matisse ITC', + 'Menlo', + 'Microsoft Himalaya', + 'Microsoft JhengHei', + 'Microsoft New Tai Lue', + 'Microsoft PhagsPa', + 'Microsoft Sans Serif', + 'Microsoft Tai Le', + 'Microsoft YaHei', + 'Microsoft Yi Baiti', + 'MingLiU-ExtB', + 'Monaco', + 'Mongolian Baiti', + 'Monotype Corsiva', + 'Myanmar Text', + 'News GothicMT', + 'NewsGoth BT', + 'Nirmala UI', + 'Noteworthy', + 'OCR A Extended', + 'Old Century', + 'Onyx BT', + 'Optima', + 'OzHandicraft BT', + 'PTBarnum BT', + 'Palatino', + 'Palatino Linotype', + 'Papyrus', + 'Pegasus', + 'Phosphate', + 'Pickwick', + 'Poster', + 'PosterBodoni BT', + 'Pythagoras', + 'Ribbon131 Bd BT', + 'Rockwell', + 'Savoye LET', + 'Sceptre', + 'Segoe MDL2 Assets', + 'Segoe Print', + 'Segoe Script', + 'Segoe UI', + 'Segoe UI Emoji', + 'Segoe UI Historic', + 'Segoe UI Symbol', + 'Serifa BT', + 'Serifa Th BT', + 'ShelleyVolante BT', + 'Sherwood', + 'SignPainter', + 'Signboard', + 'SimSun', + 'Sitka', + 'Skia', + 'Snell Roundhand', + 'Socket', + 'Souvenir Lt BT', + 'Staccato222 BT', + 'Steamer', + 'Storybook', + 'Subway', + 'Swis721 BlkEx BT', + 'Swiss911 XCm BT', + 'Sylfaen', + 'Symbol', + 'Tahoma', + 'Technical', + 'Teletype', + 'Tempus Sans ITC', + 'Times', + 'Times New Roman', + 'Times New Roman PS', + 'Trattatello', + 'Trebuchet MS', + 'Tristan', + 'Tubular', + 'TypoUpright BT', + 'Unicorn', + 'Univers', + 'Univers Condensed', + 'Vagabond', + 'Verdana', + 'Webdings', + 'Westminster\tAllegro', + 'Wingdings', + 'Yu Gothic', + 'ZapfEllipt BT', + 'ZapfHumnst BT', + 'ZapfHumnst Dm BT', + 'Zapfino', + 'Zurich BlkEx BT', + 'Zurich Ex BT' +] diff --git a/src/index.ejs b/src/index.ejs index 3c6a788..4a8a564 100644 --- a/src/index.ejs +++ b/src/index.ejs @@ -20,21 +20,13 @@
- - - - - - - - - - - - + + + + +

Toolz

Collection of browser testing tools.

diff --git a/src/js/adblock.js b/src/js/adblock.js index 6f0ef52..1ed51d3 100644 --- a/src/js/adblock.js +++ b/src/js/adblock.js @@ -16,8 +16,9 @@ var TZ = new LocalStorageManager('toolz') const version = packageJSON.version const tzversion = TZ.get('version') if (tzversion !== version) { + console.log(version, tzversion) //Show changelog - //ch_dialog.show() + ch_dialog.show() //Set version TZ.set('version', version) } @@ -123,7 +124,13 @@ async function check_url(url, div, parent, k1, k2) { } div.appendChild(hostDiv) try { - await fetch('https://' + url, config, timeout, parent, div) + await fetch( + 'https://' + url + '/fakepage.html', + config, + timeout, + parent, + div + ) .then((response) => { console.log(response) if (response.type == 'basic' && response.status == 200) { @@ -240,30 +247,20 @@ function ad_script_test() { let log = document.createElement('div') const sfa1 = document.querySelector('#sfa_1') const sfa2 = document.querySelector('#sfa_2') - const sfa3 = document.querySelector('#sfa_3') abt.script.ads = typeof s_test_ads == 'undefined' abt.script.pagead = typeof s_test_pagead == 'undefined' abt.script.partnerads = typeof s_test_partnerads == 'undefined' sfa1.classList.add(abt.script.ads ? '_bg-green' : '_bg-red') sfa2.classList.add(abt.script.pagead ? '_bg-green' : '_bg-red') - sfa3.classList.add(abt.script.partnerads ? '_bg-green' : '_bg-red') - abt.blocked += - (abt.script.ads ? 2 : 0) + - (abt.script.pagead ? 2 : 0) + - (abt.script.partnerads ? 2 : 0) - abt.notblocked += - (abt.script.ads ? 0 : 2) + - (abt.script.pagead ? 0 : 2) + - (abt.script.partnerads ? 0 : 2) + abt.blocked += (abt.script.ads ? 1 : 0) + (abt.script.pagead ? 1 : 0) + abt.notblocked += (abt.script.ads ? 0 : 1) + (abt.script.pagead ? 0 : 1) test_log.appendChild(log) log.innerHTML = '
script_ads : ' + abt.script.ads + '
script_pagead : ' + abt.script.pagead + - '
script_partenrads : ' + - abt.script.partnerads + '

------------------------- ' set_liquid() } @@ -280,8 +277,8 @@ function cosmetic_test_static() { 'block' ? false : true - abt.blocked += abt.cosmetic_test.static ? 2 : 0 - abt.notblocked += abt.cosmetic_test.static ? 0 : 2 + abt.blocked += abt.cosmetic_test.static ? 1 : 0 + abt.notblocked += abt.cosmetic_test.static ? 0 : 1 document .querySelector('#ct_static') .classList.add(abt.cosmetic_test.static ? '_bg-green' : '_bg-red') @@ -312,8 +309,8 @@ function cosmetic_test_dynamic() { 'block' ? false : true - abt.blocked += abt.cosmetic_test.dynamic ? 2 : 0 - abt.notblocked += abt.cosmetic_test.dynamic ? 0 : 2 + abt.blocked += abt.cosmetic_test.dynamic ? 1 : 0 + abt.notblocked += abt.cosmetic_test.dynamic ? 0 : 1 test_log.appendChild(log) log.innerHTML = ' cosmetic_dynamic_ad : ' + @@ -333,14 +330,14 @@ async function startAdBlockTesting() { lt_cwrap.classList.add('start') let tests = [] if (settings['showCF'] == true) { - abt.total += 4 + abt.total += 2 tests.push(cosmetic_test_static()) tests.push(cosmetic_test_dynamic()) } else { document.querySelector('#cf_wrap').style.display = 'none' } if (settings['showSL'] == true) { - abt.total += 6 + abt.total += 2 tests.push(ad_script_test()) } else { document.querySelector('#sl_wrap').style.display = 'none' diff --git a/src/js/components/fontChecker.js b/src/js/components/fontChecker.js index 3978a9c..e15cd8c 100644 --- a/src/js/components/fontChecker.js +++ b/src/js/components/fontChecker.js @@ -16,7 +16,7 @@ export function fontChecker() { h.removeChild(s) } - this.detect = function(font){ + this.detect = function (font) { var detected = false for (var index in baseFonts) { s.style.fontFamily = font + ',' + baseFonts[index] // name of the font along with the base font for fallback. @@ -29,4 +29,4 @@ export function fontChecker() { } return detected } -} \ No newline at end of file +} diff --git a/src/js/fontlist.js b/src/js/fontlist.js index 1a5655e..aed4365 100644 --- a/src/js/fontlist.js +++ b/src/js/fontlist.js @@ -19,7 +19,7 @@ if (tzversion !== version) { //Show changelog //ch_dialog.show() //Set version - TZ.set('version', version) + //TZ.set('version', version) } var snackbar = new Snackbar({ topPos: '10px', diff --git a/src/js/index.js b/src/js/index.js index ee0a53a..f0a121f 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -16,7 +16,7 @@ if (tzversion !== version) { //Show changelog //ch_dialog.show() //Set version - TZ.set('version', version) + //TZ.set('version', version) } // Call the function when the DOM is loaded document.addEventListener('DOMContentLoaded', () => { diff --git a/src/js/partner.ads.js b/src/js/partner.ads.js deleted file mode 100644 index 0a8f420..0000000 --- a/src/js/partner.ads.js +++ /dev/null @@ -1,2 +0,0 @@ -var s_test_partnerads = 'https://youtu.be/dQw4w9WgXcQ' -console.log('s_test_partnerads : ', s_test_partnerads) diff --git a/src/js/units.js b/src/js/units.js index cb3d293..a510ffd 100644 --- a/src/js/units.js +++ b/src/js/units.js @@ -15,7 +15,7 @@ if (tzversion !== version) { //Show changelog //ch_dialog.show() //Set version - TZ.set('version', version) + //TZ.set('version', version) } // Call the function when the DOM is loaded diff --git a/src/partials/adblock/changelog.ejs b/src/partials/adblock/changelog.ejs index 1cadba3..3bb154a 100644 --- a/src/partials/adblock/changelog.ejs +++ b/src/partials/adblock/changelog.ejs @@ -2,7 +2,7 @@
-

Toolz 3.0.0

+

Toolz 3.1.0

-
-

Thank you! 🎉

-
-
-

More than 2 million tests so far

-
+
-
-

- I would like to take a moment to express my gratitude for your support of Toolz over the past 3 years.
- Your contributions have been invaluable, from sharing it with your communities to providing feedback that has helped me improve the project. -

-

- I'm pleased to announce the release 3.0.0 of Toolz with several new features that I believe will improve your experience even more.
-

#Changelog
+
+
#Changelog 10/02/2024
    -
  • Overall design improvement
  • -
  • Improved project structure and tooling
  • -
  • Adblock -
      -
    • New design , colors and animations
    • -
    • Cosmetic Filter and Script tests
    • -
    • Updated , cleaned and optimized host list
    • -
    • History and logs of tests (max 10)
    • -
    • Compatibility table
    • -
    -
  • -
  • Fontlist -
      -
    • New layout design
    • -
    • Added 200+ standard font test
    • -
    • New feature to preview the font and generate CSS
    • -
    -
  • -
  • Units -
      -
    • New desgin
    • -
    • Feature improvement with 5 CSS units
    • -
    • Live innerHeight value
    • -
    -
  • +
  • Updated hosts list
  • +
  • Added rules to .adblock file
  • +
  • Removed partner.ads script
  • +
  • Cosmetic and script tests set to 1 point each
  • +
  • Improved hosts test with fake 404 page
-

Thank you again for your support.

- Best regards,
- d3ward -

+
-
-
diff --git a/src/partials/adblock/faq.ejs b/src/partials/adblock/faq.ejs index 8eeb7ad..a95d4c1 100644 --- a/src/partials/adblock/faq.ejs +++ b/src/partials/adblock/faq.ejs @@ -171,7 +171,7 @@

Others test tools for your adblock

diff --git a/src/script/build_list.js b/src/script/build_list.js index 44ce47e..f5b02ce 100644 --- a/src/script/build_list.js +++ b/src/script/build_list.js @@ -92,6 +92,9 @@ function build(obj, comment, pre, post) { }) }) }) + if (pre == '||') + txt += + '\n*$3p,domain=d3ward.github.io\n@@*$redirect-rule,domain=d3ward.github.io\nd3ward.github.io##.textads' const date = new Date() const d = date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear()