From 68b9d53fb10d3ab01c176801e09addb9c06ff7bb Mon Sep 17 00:00:00 2001 From: Radek Czajka Date: Wed, 18 Apr 2012 13:45:10 +0200 Subject: [PATCH] multiple minor cover fixes --- apps/cover/views.py | 29 ++++++++++++------ .../templates/wiki/tabs/summary_view.html | 6 +++- lib/librarian | 2 +- redakcja/static/css/summary.css | 2 +- redakcja/static/img/sample_cover.png | Bin 2819 -> 11750 bytes 5 files changed, 27 insertions(+), 12 deletions(-) diff --git a/apps/cover/views.py b/apps/cover/views.py index 19d81c22..0f341ad7 100644 --- a/apps/cover/views.py +++ b/apps/cover/views.py @@ -1,7 +1,7 @@ # Create your views here. import os.path from django.conf import settings -from django.http import HttpResponse, Http404 +from django.http import HttpResponse, HttpResponseRedirect, Http404 from catalogue.models import Chunk from django.views.decorators.http import require_POST from django.views.decorators.csrf import csrf_exempt @@ -10,6 +10,7 @@ from django.shortcuts import render PREVIEW_SIZE = (216, 300) + def preview(request, book, chunk=None, rev=None): """Creates a cover image. @@ -31,8 +32,11 @@ def preview(request, book, chunk=None, rev=None): if revision is None: raise Http404 xml = revision.materialize().encode('utf-8') - - info = BookInfo.from_string(xml) + + try: + info = BookInfo.from_string(xml) + except: + return HttpResponseRedirect(os.path.join(settings.STATIC_URL, "img/sample_cover.png")) cover = WLCover(info) response = HttpResponse(mimetype=cover.mime_type()) image = cover.image().resize(PREVIEW_SIZE, Image.ANTIALIAS) @@ -51,7 +55,10 @@ def preview_from_xml(request): from librarian.dcparser import BookInfo xml = request.POST['xml'] - info = BookInfo.from_string(xml.encode('utf-8')) + try: + info = BookInfo.from_string(xml.encode('utf-8')) + except: + return HttpResponse(os.path.join(settings.STATIC_URL, "img/sample_cover.png")) coverid = sha1(etree.tostring(info.to_etree())).hexdigest() cover = WLCover(info) @@ -74,17 +81,21 @@ def flickr(request): html = urlopen(url).read() match = re.search(r'Some rights reserved', html) - if match: + try: + assert match license_url = match.group(1) - - re_license = re.compile(r'http://creativecommons.org/licenses/([^/]*)/([^/]*)/.*') - m = re_license.match(license_url) - if m: + re_license = re.compile(r'http://creativecommons.org/licenses/([^/]*)/([^/]*)/.*') + m = re_license.match(license_url) + assert m license_name = 'CC %s %s' % (m.group(1).upper(), m.group(2)) + except AssertionError: + license_name = 'NIEZNANA LICENCJA' m = re.search(r'By ([^<]*)', html) if m: author = m.group(1) + else: + author = "NIEZNANY AUTOR" url_size = url.rstrip('/') + '/sizes/o/' html = urlopen(url_size).read() diff --git a/apps/wiki/templates/wiki/tabs/summary_view.html b/apps/wiki/templates/wiki/tabs/summary_view.html index 3eff0fb3..9a2c7423 100644 --- a/apps/wiki/templates/wiki/tabs/summary_view.html +++ b/apps/wiki/templates/wiki/tabs/summary_view.html @@ -5,7 +5,11 @@

+ {% if revision %} + src="{% url cover_preview chunk.book.slug chunk.slug revision %}" + {% else %} + src="{% url cover_preview chunk.book.slug chunk.slug %}" + {% endif %}>

diff --git a/lib/librarian b/lib/librarian index cdc27335..fed2483b 160000 --- a/lib/librarian +++ b/lib/librarian @@ -1 +1 @@ -Subproject commit cdc273354769f4add5f2a6e01d5526a6130a517d +Subproject commit fed2483b39e23ecd91ec2d04495a4caac208e94c diff --git a/redakcja/static/css/summary.css b/redakcja/static/css/summary.css index 1520c36b..5111ad5b 100644 --- a/redakcja/static/css/summary.css +++ b/redakcja/static/css/summary.css @@ -14,7 +14,7 @@ #summary-view .book-cover { height: 300px; - width: 212px; + width: 216px; } #summary-view p { diff --git a/redakcja/static/img/sample_cover.png b/redakcja/static/img/sample_cover.png index eb7e7d13725c5dcbd8a4f0c18373619472c8414e..f7a678e495b55f92834c03bdb50315068bd6a97b 100644 GIT binary patch literal 11750 zcmW++c|6nqAD?Smt{lThNLloqb8@sO6`3<-l_TU6Ida5MsoY02pWIiXzP>D#n_?6; z*@)aJXEG$Ya+I6j$L|l1+40!k=j(aB9$mCB65u_+i$EX*OpMQw;KzOhfsYe>*wLPJP>VJwh_E&VT=@ zLy4;k)|qvk}ICzjp8AIDTZ2NQrBs}&ovJ2QWo}+~?;e@a&vylsqzG!I2 z>zUy9>o?L5A5tzu+yjsBKthP|mYp^MB0eHXnX8Ix!T;0287{{-)){F}~xYU_)U9iWo$6m&YCBCie0h?1#oCQ3o4pt-mA&wfyG9 z${rGcuv}PfM!ynhe-QDm0lXVL_YWP-fj9k}9#+m5CVY&ZnR)#<;D7`!tyV}uLOfV| zSq(uV_eBOl>2CKm<-}(oHx_t>fJ*iO4uP4^WPj%S^6w34$Nw;X=|uUXb~>xXTn3u* zk;dRVyuc6O@G(Z9nx_|dgo8+<_ZzxNo}_2m$m{LyS{8XYfk(IiBgDfTKm5F7wg8mF zNv!=*Ee5UFn6T*Rvv@zJsE5!&Q1cUB7RvWJz1}JC!f>ZP?F%Tvi9JV;mE2n^5IKHr zh(iN7%Yns2suRFMfFJ|q7Xb`3OXk8Ie6l3;4?Py*mVss$i2ET7cV0sptA!$bJsMZ0 zhOK%y!Z0?$6O#z1>P>^f$Yx=}5Xjvhf4GnXdn{nVK%u(l5S^e`?-%rW=ZyW#sm;=P z4q|9}5=qf4JSm>Pj;mp;)3?E z&SUD_c%bn%(0usA-^0s{K&yTgaJC&hA_fhnnautui7b}@?EzqVEyBchVu(&SZ3WeU zQ8RWYLpx+four{h!2l;CBRmN)=FC0rdwEF(Jab^#pt14#1-coA3ltWsZ2JfEpr6LzB|mxhxGbTkqVzZ1#H zx-yb+v(l0)k1xWq<5+LlWH_0WK-ioRcH@WAP3yU_xUcsC=zY_93H2T@`#jjhw`7HH zJsdax;V1cx8w$%!@0Vl{%0w(r0NrTT_NApbUfIHl^t}nTy#7}R;p|JVZNB$un;Fbx z5Ao2Anc(Mm!YB{+GCIM5oz@Vo_L^2=$4OBc_*f0N#D9E>`s|rh5{*Bd%3}`8YgJLX1Gpi8_sPRKLs%0Px4(HbGFbOIR06eLLPpRye zPcRvQ_a~$F-3O&F<2OQ6&r^nu4JW8vq9~!9>oF2YY?u#U0X;LBEfObKV^kxn-$S=i zWZE*|b@*CncT)(2Ovob8zY*#R%mKRl%YcdS#pg$vk6&X7>ipHtc&4z022IE>M5pBW zpim16*JNv|7WygXxYY3e4K9-X^MfV+b^UPyb1fE>JNS4fd4l5Y&FLg#-$>zeX~8_8 ztOp9)P;q=M;z5!5$3m@*&NIE^mDzF}c=yA~&5i+TKR9#%S+m%o?K6`E+015(5w?2BSY3gwb zHw;tG^(vnd2^C*p;M8qnG{g6FS}u0`BcbWmcdh*kM&+EAU3nl~vTR}Uc5)M&++ z)i{YqZAXnLLkG;rLWyj-L(+9I4)ejfqX_|D6Z_1_N5rQ?HzqqPL|>dVonC)3n#va0 zEK9H{OpSog(44`ay4gn!tBE-mZu;ZvRhTuO{l-NR*aM7zsDx8O(|nH9p0!oUijz3O zYbk8|`_V5W$yRhiWHNb51*c(9yDtyFV`Mt> zE!%3tr}G6UrUdxs)6Ncb?QF*=a}#mQ=_+4G95cLqnh;~oHSX|azZqFdmwhBN^=SOA zNu~KC;}M` z1Icv)098dgg?-=ZQMDO)pQnd&nhPJ$>3FarT6b-#Az;-R+^-QurFAQXPo8sEI2PK_ zS_26{*Kr*jTS^bT;){T@VMz;Z#7fN9sgtrqeTS2)F5>uKq~R^K0~I=UwBsh^t?s0s zVRK3;Y2m_R`2P-s{tFMA-f*L3mSleb@)LL+sZOrZWybW-10^)q>&0S7jZ&_`f=h?;|$k(5L^Fc-?z9)Y!9~spvLvQ)*&u%e60F*Bg>c2O7V(_e`+v33ZP7Sm$Z+0dF5XDa>@_3Id~cGVQ*g&!f(*cCie@(tWzcm?Y>A&H3&EF;J$B@z$2g;1tsejEW8sA4wm6(Sz zV_9NYWIk;rW+7FrS^-ybDVZIjb>lEjkbW??#`bu}R=f~rUP#l4r}+fE%bOKr5+-Dy zNOe`_WLWorlPm$~e%e#9!NCdDVqzF=<6IvWe|M=c>m+j52m>YePtCUl>C)uG>mtv8jBlYe9}lGdHfdCY)}oY951eM3@LT#&&(;a2}HU z(R8sNtEq*L_iEv{Fye;_GUa7Y6{fMPUZdM{3Hp^gE@l*|Pr=mSRqQLYG7>*;l_8% zAuNc0kx$E1DKa5Hy_?YZslG?cgskNcMVOFrI8`L;T%~mAGi5pH`J%IC_^MPko|Cxa zXlLY}KEhm*)6~KV_F+4?MS{a8U|#D}v+D9QTzxVmyOeq}O2Nv|{aY|~2E~7<&w9{t z@Q+8-k0V}VKf@MRR-~Z#C#cnplG#|%)cX`c)^V)nLVb@)A!S>=tp|JqR}yiVI=_Hd z@_hl}UhBtjsuEB!R`c{@*M2GCtdEcV)#$O7cs*Rby!Z8y?XWP+Y9YG4e#xTB<(#`I zo`u!SaWVZGQT|E1!-Uetkyl(AFv4#KZ;T7cepp<4?!!ZVywfGT2gx3Q<~B^f%8|8K z)1LJ`xYjSOUA2Uc6mAEj%<+CWRRQ9Bh!+!{!$akQ(l>&vL`=*b!$aIe5wIwY-HO#b z0SM0uXALgp%~RVeE^c1l`$WcMfH7W247!86<&}xKyUW4=3#K6eQrU%%Vs{!ZKt6j5;H~i(}?m zM<#*+3U;(h^p~q?x0IOMypZQH{pBKU!;%COlQo$p1LMQ^cn=twWFP*Jh+uz;ACf$!ET+hv2dK$t1J!pu2>#ku5?ZPq1V^}+%0b>zONmn%N2Ki zC4Q{$aZhIdZL|t_cpHg#Qh*U{s|0fwW~W|b#kNlmX4piws)j#(Rr-d@H0{MR2bdbt zGQG!4%A<{(qg>4?%M5~o*O(op@bUF&Ub_2&Qcgc%Kf_iWKXm7O9L9Gec6=W*RuKM+o_n<>{EAess*J1gW_MPw84j`7FN=<1po@GGhnjF)9AZQ zoJ{@5evF}gLvn*;0zv%}Ww{iLQ?Y+;vSs0T(^*9DA&9`YK0jqsR5sS}U{;#a-am;8&CYISJ zAfd(WY)olGTkQ)M{seM!uD4%uBjX@iN+%t15^TG!yJY366I=Q{Nx4>^AhimsZ-uysSl)V0H{np-AJ;(ceeFaxUoHfo|pWbi`dJ$r<=bhv|fO5^V4bEvl&9M%v|5o$ivKHry=|m zF0$xyz82tv>#)h<4ex#xqb35$lcZtgBLz5}pmpsv53^|FlUU7M zA!z5a@8aCQciMJDK^Sl{4>L{hUsQiA%V}Qv|601Ie^|9!P3(>X&;3#7eW&vNHA!02 ztmh8?@;P^p2j=iS@NLf6`lO&#$Usu+mOztl(_K4VMA&>A=qxs_Uud9vQ2)u)B661 zgSk&oEdBz62x0TIt$vDSt?V5;f+NLK!=Bp{#y+8cY^K4_yjJ@>DL_k?uE$rp%~58} z*L;EpNvkLUhVHynxgVb&X}q>3Nkhf?v{aRBEK{YAh$%BXb3W>Y7<84PsPjR*+^xG$ zQwdnkr(pp9;e=PyzH={C61t?ntC7(zX>1V_f<_p2^U78m zRRb3fEnwDvYp$9k}w&vx%a+01mQP~6t`kEUZJz+ z9S=aeHx-$0+r>*9Tb#$y=Sc=%dyTRmf@!@Ov61RlA6HK&wr{&T^Hoch*j@LO$h~=r zy>jI3N@ zzZp5lgktyPvz4BG=SUKg_3DuRGSd0k=5;}<6U9fI_-vmbyffHeh{9P}n6K=$=iFs0 z^*wgu^*!a-jvF!c7{F-njLr}Jqu=Z3G2VBfB197Am=4-N`2nbU^ZKoHQO>+e40yr& zh8q3z#GG2hcMKhG%0QN$9zru!cfdEY}j9cv0n!td?Emc_k6;wW%k+ck5UhBMq>&h$=+qlrbh1nozVB^3!r{XVy`LNIlVo% zdti{!UkGyN(gnhmD$h|W4c%|`B?#Dhk6k1U8|^!{p*^Qmmm>cw!1w!HU{6Qe)^8#2 ze@v;gqX2_ze7i&C*F(4YOM~J+3fePea&56p7af_aor%5MN*sA@oLEQqY|?Pg?8{@R zn4_}qb2vx1RfMy&NcJlSs~l%``c!iqX!SG#Y*4^@#eT{liKgahLcUssZ!jPIsieZl z?2pMoJ-&%og?XVV*^?OMy57d47nglX8roU3AFc zGX77{iR1Oha29c0_I(Cvm!n+ufZYm(v99soG9uu)6iiGzl~x-~l(oFDolmDo~1ef-A$A8%v3lxrT`E)usD&7HPhdIj&P|ATU> zh{?9txZ+mRVKnh88kU|Vsy%H_u$s#$Y<4i!j7rB(#K7gMs< z1;vH^vUN`|5-=f3VgF|wP_)qXH}F51x(fJ`&^9?P!YBIF)`8uK6TqBsR*0DP5oY@p zlKq5M#b5JIfjO4q`T@Yx>$+s_v>Ewr!u}k-=S%2z1}68F3HkEjJzh14WQA-X&4Kcr!- zbsD7mH%(*cFAd!VPp7btwencOkVSZz$Zl=3MArmU;kdvfN&)6X(zy7}im2YPP^Jh} zJ^T0b?IXaDDS49XZ}#Y6JV^mKp*|QU%mqS%nO=W)gzawfMl3quN&-SojXsHdsk#S# z>bMRX`CI9cfsAupc|rJ6dkVG^li@f&X(WF?N;c~3M62O<;}O>u*$b*+J+09aKT2DCbIRxYz|&3!J7PKwyDxe zOE_z4vKod(?tI$Rcbc4Cf0uHzAn_e0qbmA?a2EA$#d~!7K)<}N6_s}33}yU*$^R|M z7ukYJfcHG=Ob*7{I@j^Ba8}_7p_|A4rd>6?rPUpn zmufs1ol}3a>Y(V#C$&L{5tRFjn`<)Y^)Vw~)@uG1*Tp?KZ=(PYKk9NBMKqMYk0`+d zUnIM=YwDy+_^SA>&zq*zDQuB;zkK4I4@U%8ck>C>!)nZMbBbL>GMglvRSdhgu;%*D znTxO!beRFGCivF7RQY}@=S7WYr(xW9oRx6#Q84an9=d(L_KQv?cix?031prjWr$&O zhvozWU?CkQf*Jf)(_(lFML-MJAxMnFRExWA+t^ zeJ~*}9&mn!IsSx7fVpF&`aOxGE*6J|?>)!iNd|U+p};ZJqgCCM*e?4|!dc#XsnJGN znU%P<{Mc-`ZBs|+Ul%t?V8&~#*1A*w$TM(d>Kx3W9|JH)d%b4}8OTlV+`j!^2G(I( zxdG`s7Z<4x6LVvV!C#YaiR>4da=wmj+^hcP-$xX@jk0ljG9yw^`5|Z08!i)1$LR~s zd*$y)W+PYCOHlf=VaVV%dZ>{~vj5hWjydkOvd2Shy~b`Vq`BQQ<{GaVt*DWOed(f* z)cO}cf~iL}0Be88n|wgtC?lnjJLLVxN+(wySVBl}Ip0$0euj}iIoneh8i(t(bdoYq@{z| zm+>CK)H%|yKe}d*E4wBcV+%*`k%qGmGq?5hHHNKgS>n$O(Qd|+O=3R5xl&pd3Z$xe zo9c!IFD?Cwc@u4YSR~cR{l`k$vtyg4mxLfIoM0sbNN1ai#3NZ6-?-DfsVCW~onG0F z*~{Nv)nSe@0z<@i!Nk$FXZIjKqo3AG&LnAhMyyfOGuhmAfg?;wq%x9aStM{_;K@SX zgfqtXX6BgbXmIB^qS%Deo9(dPaX3N!0%iOH!UWGwYBpBjBPfmuy%W@eGsCmbHpk+) zbDa3vKKEL_n((YDyF%gPkt?!mSnz4@_|`0^dm zD*U6owx)`mtqAA7gyn>VD<{vhZw5vs(2R1f%mof@CZo?&!jdBBy>gloDJqaK-cQ5T zbyI~@x#t_qwru=UBdiB}++4=-vNpqKj$WIO3k#9Xebh=8e3VNF#b(g~$BE~g$8S8a zyfM&-;dVY2;($yf4HjNv5IFt;xna=57$w+g zCKXn|Z3fr&dI6gMJNau0wlE@um$D{Th-tijiGuITkfn5BYP_{C&PtBz~NA5UMM#&SqfS~U>U9S zzz&}qd}%5_0@gZ*$F+`r`3D#i*>^GZ#63oHdL$9t@4 z{E*V}Y%2tgrGSb{2QyBKGTgA@bh1PJC#KrR?-*cWxQNy zBZ1~enb#G7^ZN~==rs8Rf)?Hh0WHP)>;Cc+fiCj1c7YW35`6ALz|Y%sW&D95&KNq4 zqYT^Ohd0G_$P`#@m6jX2J6$|d7D?8KNcyiW;SFZ$xq_<4g;?SLPT|$}5l=pI&u=ym z1$eM{JV^xN?kreNy0SErPv8Trv4Ay#xt$1RM{FKj3W-$Utflo{=g7NsP(|NmJ)D8< z=;LOs|BeY&Vva~jnMaVd!(gom8$I*7`jt^!*9LwL+bl2#2*9eR(Y(v|TCwJl{Sr3n z^&{5zQQxx5ow)zWU`yL&M$>`0TT$$_ZWLDUbDBN=KNKe|1-iM3 z4wP}8!ar-`dum@T1%xo6E-$g8_YMu`9DIp}iyRU+a} zu#i`R!)0kG3p2$@8U~WsR+*R_$)>PR8I2@0W*rwRRb`9YxgvcnNWnUy`;o0Hmvav0 zIDOLCTf~4xS1A7(FG5*Q~*pH^=P&51tjM(KhgyXBbe zwxr=@6TeY$z1@Wa{yJN~nEQx#`CCP`ad`b3OgKH$I7zhBxiORX+L8+nmfb3&tH){D zxA+ze#AWc;I?n!acNU4;x{B-YYqH(QDviESr^3GvUn}7?7S(%LqXTw&ki?8VXUvX^ zl-Cm8=tBewM_-4#xgh}D_=dCZm1fCK2}avsVsq~!6h8bl;f=s;YTx!$-m5_=;o zsYLTq=&mcuc{AfnUYi)4P*Q2?Xd>^9y*XvGDMxUJnHIS?@C0S}2R8ZwUFgbHzJh=m zm2k|A{K&BRpJ#qW9C;c8jRl(=Y62;{w%I0>%7I3B+Sij*vVC=slbwzbm`WN>muEii z*7Ybn;hNBupO2ZM^K5pQ;zLB+5`=)f)v`ae^Hya!Vx58b4-~zT4z(yd91-CSym!m0+=I7tFL}o0+_UYTiW}f>~vq%1Om3g>Fgh%J8y?q=VM3#uVKYww?m6L#rVnH%mo1rsy%ojVq72 zZLA}+qZJt0T^jNe3@ForyCMv_4dpZ~pNut>MZ+1AnYU5~0$9JC!;CEPrqaIfC0H;o z(Mnf-*J9k@9al(J^-Awne-M}!hy>(hSTV;4jqhvoIR4LkNE`=j%ga83~5nFtPZf<^wP*@k01cMljYqZUdQBNpE@@5h`#@G7s)~w z0q6tYUVDT}Ro9n%8Xkyw0lp!+Ka&WV_#VE{y{@eL?ta^H1<$u+_OAr{K|^<#rEVS4 z*H9dDZx?b2ow`OoZ8a8hu?i!>nWsE3@kP+i(0xg_Q!SrhP${j9#9|^Wn|nne=R1=h zaPRW|3TNHHSt!{=Qwhs@v%_6KB9h|$d|qKt&CN|=n5lRx|1a;pAh0tcYZg&2WT46u z`n?O{zer!Hvq}8n5m(G`f&wIaR9=>VoLl4ir9Z-1+PL^*dqGApPSw)vy)4e4JaBd4 z;!{Otaj7X8El6B5LnN0J=T=_cTR|XIM9Eu-C>jLX11Pq|hRt&trcwAYujVC2r;FQ+-iV;A_Sv#eMM zdf@0ZvfV{T6Y+y`n)fzmv-4?L=<|gbYd1clh3gu+O6ezNa!o^QD3Nlw5ge|}{=Iy*RZjDR%UBhhgY}=ux4sjV6by{6{RmfY z7XNzz<$=|7A=#Tmx$;A9O{Agvo}2gsS(E1ckZ%~d4UuO*;R#NVvc+?6qV^KwZ`L|U zV!QYk@pU+d?bS1nSUh>*ZA4P1-H7-Xtmaw%Cj!uIIGlw8zI>XzNUklWNdKz@%+V-e zu%qp*PuYa!Q2_qS-?aJA9_#yp=iEgAF^+H7w(A)`!i6LI68`QD$eqckgRK_!o-n>m+GZUTD+Dk%W`@os!ZwNY=4ctgzsn zJJ%+_iMI=)kWh{bEQ(Qi2V++*%qlr3z%42-24wcZZGP|Puk9xW%0MthcjtuD%&%ha zWZ}HzM?gP)&3-fuHqPKA+9gV1)HG(pwDd8R=A#XqKOyshg9t?|UQe6v3JR(NjMa}v*o%wpRY6fn^Mwl2{oGZ}>BmM{CPQRl7 literal 2819 zcmcImS2UcB7X5TaiD)APlRw%ZY7!AdbR#jNMXy0bw22lXdiN{IXo(s!Vu()2jLuKW zU?xn2(fLImL`lXd*S#+fcZw<8kP{>X0sw#$W~66+h9m%> zlVd$=fMSMT#xtM`G&j@%YKJebo(*hBBild#VCVg3(E<5|f@dU45X?lMh0Mqel41H3 zIq~s~x)7vq6Qt|!>+9hc1n35MxCVK+L!NjAJ%kv-OiZm~xWE7aLc;X4Eknth)8UpR z57Cc1s+Tb-3lf}VsP>$<@-zFPgzZLLZje9z%jOTYrG^8{`x{QW`xNvF zqxxe?IXt9wFMKggRL=fix0qQ?8MjkvQoyWJ=t=3@+6=kLPvNxeV>oYB04DzOzC2(p z`N?FA6U^|jMSzZFYFO7)KHC|<*4H_R`M1lIHd^ne##T2xRy<573lk3co8P3cLY&M$a~%Q~}9&gMsu1?zHe%*P?<( zV`LwwON$+b@v@KMdPV)zs;UW{juU)W?qZBFwp|)c*Lmda1qdwXt?S(dy>mN2wEl&} z)&y-V_Z2G`eIT?y#kD!GvYUddjSQsv6#t#}9`OG{tJLzst&r{D-laGzc@OnkW6;xy* zl9R>S)XQclR`}LTRVNRD)UCveNSu~a-t*r1G+3*jUDRhnf6Bh-ZzWfQy(T%K`OUw1 z%MLgllRI(OIwRV5WSVI?xsK)r4XFpPfRmsj%S+b9*|J@?&aRdC>%_b8-@=l%n1g?S zQ^b6wTf?krrzMR~`hE=A-?u6b|8}9|uqBQ>jbqqnxz0R7fGoXp?Y1o14H&>olcH8% zp3qHQ`OZN;{K(*>Bu8%!SNGYOxLveUX!q>#LR_#dBgf^v7p1yKy|W>p>}IZf=U|)} zLq$nRpr{HlFQFtiDjs zxE6f(%EakWpM;msY2%Ctz$>Nq{QCR;cy2&h;K*itzStnT#n)&fJbZv8i732kATjku zx|-c5uX%BR^@H;l&}DI|8R51?K;07{99`25f(dac)ffwaPU}@SOWPFU4p4gn_Gr58 z4DqFO_JTqx0Io2qjEhM~D$pMJ?0 zW5KJF{o)HNRfs-&%rwd&*tHNHsi=d>)iyG)ZHf9IzG(t6>F<~ihGHcH(HlQVkgC{sB3vK9RwG8!(%!Wqo6r7bh`?zR8&sWm@OWA+B;FIXgHD~O8hD{so;>`B4jk? zKIe>D@TTM?>b5^|G|qa^ht{55p7}}r?8b;S1?)#5WtkNsbnXlV#qkn~d@fMZCTG*1 zF4BXqS|;17Lhn$KwswxMwKW;HE_tU{BK#$+-2(-(g9Cz3FPu3JeH zxS{ea8tEW-`#fv?bS%jB`4)4OU7o1} z|AV8S6F*;t=jm+c6WSlAQxkTPUdInN9ra3heSka=(Ch2jp^nBlyw)rXWpd(3`bO*u z>sFF+h4(XL=K1OOxM`}w4mrk~Rv$x!n1|DcD2%G*8K_%;vhxwU5TWL4 z;f9iDgh*h6t)q_!Zw_zHjiXoz^!3z_!@kdW{`HaPyqV{Ysx|@!a-PrB+mk-~uW1cH zjT6kSsB}?GkNw-TbIV>08?JrG=)C7)!cPqg0{tby`KqSMUIsa+^iGvDyJlje>~C2cGoQ z$=^_)bi^BU#C5!FlwL2MKIyhzr5pf-(-&-9`z^PFP@3OI7 z^;Y{2em6JB)Zjew%)x}*@*105k}!#Nymm}l-Q>*EWopof0H$%{{GIimk@wVS2phbY zIk$^!LzB1{?bVN>B~RRO{sQ0CWB?40*7yqPwNPb(c$>ore-L(MG|L4mq_!NkA}yGg z(nRn5{wjA$ma^0c`}%1K*gYKHIA%^5)mm#3HeTPUTZ+uxJMmUkJdT`Mp%FVqaia1c zR773|Z^kL9#8TyD+pYPVgKF1HvGQj-_6`HdU|X~RQyY1GJ+$M9B(;1?;(Ot0)g9EgMD5GpNGt2;y?N~NgkqXKOj7V<%S}x=S)=(!k}-DI%le%agt)Uk^VI5kgiVjzzu{RQ!u2`*mJc~ rtwTfQeppDIVB20juibwLb^BUnP)$6JaasQ?paL*`xL&P}OYA=Y%)?K} -- 2.20.1