summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorTodd Kjos <tkjos@android.com>2019-06-05 09:37:46 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2019-06-09 09:18:20 +0200
commitc2a035d7822ac8d2870cd6dbaadc1ab407713b83 (patch)
treeb3661ef34668c82c77a282946d0f220d6518e033 /drivers
parent046f1166fb7ed28e064b24c666aa7312e1d75a0e (diff)
downloadlinux-c2a035d7822ac8d2870cd6dbaadc1ab407713b83.tar.gz
linux-c2a035d7822ac8d2870cd6dbaadc1ab407713b83.tar.bz2
linux-c2a035d7822ac8d2870cd6dbaadc1ab407713b83.zip
binder: fix race between munmap() and direct reclaim
commit 5cec2d2e5839f9c0fec319c523a911e0a7fd299f upstream. An munmap() on a binder device causes binder_vma_close() to be called which clears the alloc->vma pointer. If direct reclaim causes binder_alloc_free_page() to be called, there is a race where alloc->vma is read into a local vma pointer and then used later after the mm->mmap_sem is acquired. This can result in calling zap_page_range() with an invalid vma which manifests as a use-after-free in zap_page_range(). The fix is to check alloc->vma after acquiring the mmap_sem (which we were acquiring anyway) and skip zap_page_range() if it has changed to NULL. Cc: Ben Hutchings <ben.hutchings@codethink.co.uk> Signed-off-by: Todd Kjos <tkjos@google.com> Reviewed-by: Joel Fernandes (Google) <joel@joelfernandes.org> Cc: stable <stable@vger.kernel.org> # 4.14 Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/android/binder_alloc.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/drivers/android/binder_alloc.c b/drivers/android/binder_alloc.c
index b9281f2725a6..e0b0399ff7ec 100644
--- a/drivers/android/binder_alloc.c
+++ b/drivers/android/binder_alloc.c
@@ -945,14 +945,13 @@ enum lru_status binder_alloc_free_page(struct list_head *item,
index = page - alloc->pages;
page_addr = (uintptr_t)alloc->buffer + index * PAGE_SIZE;
+
+ mm = alloc->vma_vm_mm;
+ if (!mmget_not_zero(mm))
+ goto err_mmget;
+ if (!down_write_trylock(&mm->mmap_sem))
+ goto err_down_write_mmap_sem_failed;
vma = binder_alloc_get_vma(alloc);
- if (vma) {
- if (!mmget_not_zero(alloc->vma_vm_mm))
- goto err_mmget;
- mm = alloc->vma_vm_mm;
- if (!down_write_trylock(&mm->mmap_sem))
- goto err_down_write_mmap_sem_failed;
- }
list_lru_isolate(lru, item);
spin_unlock(lock);
@@ -965,10 +964,9 @@ enum lru_status binder_alloc_free_page(struct list_head *item,
PAGE_SIZE);
trace_binder_unmap_user_end(alloc, index);
-
- up_write(&mm->mmap_sem);
- mmput(mm);
}
+ up_write(&mm->mmap_sem);
+ mmput(mm);
trace_binder_unmap_kernel_start(alloc, index);
>2}W޸[ӿwm츠#"y=5՟-n%yrnX/k8VL|hK M\Bw iY ͑"%:va CJ<tt D:[|H@w(K~#hJF͹tWdUUl3u8>Aq'j|3y d$/g熃|/Ŷ k \CCS Qz`wo`}5B` V@riͱf,C׸T7`5!wm""A3">ց@i>ooÔVc3 *"U k "fɨ71IU<&a"6Mj;($YD͂~b?s[yxlqÑTT$c}}ۖ跅=t_ۺyg}gnN푫a(Խ0mVUь+juRӦJDj\}tMMUFOGYWQF]~X[,#\'?d}[!486H^N09g8fra:[a#'*iVX!UjRmo!5ZL\ֺvF1WN{!+wxF~zUv)o;G3r~؎3ekGvXI:PkV3̷}+zsM<-w_d'[=[]m4:ֹ٪k}%|q|WW _\d?ƖavMg]BTy(~j":&|bo}W<0mD\szcI3;!;ݿ@T8O0 # C"Lr۾C~϶)/nuu2O`ms8}ao]WGaMRs&`h1D!cxt1>dbPFh YpSQ cx-ӗCdH~~yY/F pyl~reb2af <Oj9' 5X=}a\8a&Xɐp[1ie'#97=G@yݼ1։r;R X1[sNq>OdaI;"cϦU{]+*$jE9PDH^m *,n\GM;H@/ k5Z6鷫gWf޵~͌ GVqWџef4_fOٛ]Ka,?Ӽmw_ l,nez|?[Q}N}eΕmaB(޽01"DJ!xU>|9`N^5g]"p,n=ORG]G=&RJܭL;qBC)xяq1¬Ͷm? F*:*;*baōX#`F* DbjkUlAUITscm9ղP 5<\ګm[jmU[mslm>PMUxڴkmU HJ zpՎILFuI!q̏]S06#ݘtXdcc0s$nJ8mRq.HCѧ]3}}EfU(i?ĩMElt*ɜЋ{@*+G:k`[U䢜< TQibw۳_H(c<=I$I$Jyk&m_umwaA$Qm>/RFecфuNٛ ,̈́G^Ȱ4DA! LΌI L@ EFy\ "7QB8>z\ B@IӊI@XWN cճ`"ik|\s;۴.f͘=VFWʂ$A-C8כC 04h;f|_D@Ȍ"wQ%?/WK]EKpT,@'k'~7w.(9>"|*Z.?wdD#cnxƭel,Dd%nvyv8+ G31?d0e h>?q,:B@$Nu3m~7mT:]He%'ҏ2^/aA'EmXZl0ZmTJ-Q)q}Ub'cA#GIb 4m[b#N PJ=.;76Z;N)1hinXbcg,K]8Z6.7TE-{Ďq~%KQ7 սOϽ5~,oGМtdRh*Kz{h*@1P= kADA2(ɠh-@HHV4RpYyoggGmd`І%vMs4(Cz"_( #痣",k^8F e ͿZJD|mĀFyol#0C`C>|{*j\ TsMTqn(j~+ T{?mFzyA~?N/svSGl܁nvT}auwv5Fھ]r1Q!‚%\H1Ul;?;OX`,|(&CeY " 1ˋ$~\:2VM1av0~#_>t@۔pM"?GIh^#7˫ :U3wٗ^Ne42 ;")peaMrKS 5:^Z ?_D!upDCO8? 7XGؕ'{?j˅"(:A=ё|3Vg YEXOWQ8CHcbm"0,\9}\d#O۵}Gʧs@#M'nr9tEHt> '߿ AB+GW;X3຃˟"xCҕ O0AaҋADFz}uԁ zN T69_^D&(-*"jebվp[x_Zϩj!SŭK9t#9d'WsJ *}_/-@`=GCʫ>~\.?nYn_~uE۬6kj{?;g22XI" $r=F |#-gG?r@":_^z'ٚIn8^z~MX`yIA٥"6EDE=(WJUQCvf@CߣONVdi'vRG& L.9;zڱ5#[بyc5s(ǰYicmus)"̸[THNWL>>ÇW𖥅=̻;7ܴ;o6v׃%lnq|!NN52 F:KM;򝣮wݝ8w_ 4X([3wyѫ 2pA|ҪR㧡պԊ;({D1#\tø6S& 9p_ KtT0׋)[y8c,2. CW"Yµ,R@8 aag.#plssXĻUMi wpmXČY$3:mZ*V$ʞf?aa܈ɤl iuTAׇ Nb6y2Q%w錦QplIT į]sx#/uKgG=xcdNVXB@\6ln a ciP_:kW֡ $N.+ŀ8|YSaLfV (ݜ O#@ܡ$)@ tt2r6~_- wd?5[jMWj=_{ ߠpט1W'K\}PsQOH;+Ć=>fIn!v%e#>=Gmcek#ntۭ?~ ^rx|<:$>LcxA8A?GSFeH(!o5+G6UQwͲgx]{sl݆T:n6g(>;2_W'Ɲ{!zXYǜYPR·L* -_ʝM(a;v|GXm;m"hSҬ@~6y(N.Ƿw8w_Wx|\Ͷv9ky"pT=@mѳZzBBr6ν"}>"=#1(<ݒpҭyFzժktocԻnjnct B SF B98;p"ݪ:}5S A n(t]GGWf};Zã\ݷA8-4uF=] YfPp?V?_f|tV4FÄ:2ϏcÏ39,R}-Z"nfvl6.!*_/{Cf6#-'KLm\,#Z hE%=RરB́FJ1Q t=OV˹lJvڂSf(6i\xDQ%ɛOJucڛ0?eK6m8MјmCqVraxa谮{F d,egX,su]Ѕ"%<ꠦ<Tk+pMEoW*ب0 SpВQu8GΖ UR4!5śE ]բyŞ;nz9Wn]vڣ$LEsC{̠+w ˎ8vGiϖraB@ S"qBF~^z l%f oEBKN9dp4=cC\>.kx~Yڈ0#ZOٟwxoa=/RJ7s>piLIF{hX35SCm~3Y0ڌM@O'MEQjKwTXa>P!DJw[irvjZꤸ7x|G0AVжA.[Ǿ"`@ a<w*4fӇwD xVõ+Vc{#P坂l}˲5=DGb;1d ANYte<;W^[=祷!M4-ࠀ$P׹.#2"E / WʊWYAnǃRޏІ!VE, q_Moz;~W^r#utx 2-a,uQNgix.6ާ&$F*!)HPk)jG8XڂZw36YA8ND(ï 9:˪'m97 ڹ˷7CmVx(Ls  {Gq6,jXJMw9jFG^$Czt^BЂ6zXG޴^v{F{v\2`kbhGs-zZ@noKV乹Po)y@ղjn~2:t? 3Z% WcvJk|[FÃ'nz *:e%ͷ^=]=y_x(:q#(X. aAS(AlL5,莻 8T ";d)v^uxDŽ_hTˮv=z$FDov;҈^wL@U}y,]?Cw@x+ml >ΪtBD0ϔFb7xר=&~\\ RwaXТ^@3W_7W]N[0`HGPJ!"!K9ɱ{`;Dg/D%lQS) kGxxqi};X.`֨fDX?]h̊AwXJn/5DNQ/M0;d.ʐu:tg-1yuޝP?=ޏK[F3h ëo_F厝Rx;b aͦ/[s[yTm$W :1ױmBQPB?IDsl=}0PZ9x~o/3y8oz;߃~:j<Ʊyq*jsLN{ˆVݴ.] /1 i puY=:)@6ۊS"OWyJ'!s8LT!D۵U<G ru"yzesCOxtQ;rQfj$L ڠ8@ D@FM6 @SCPb5(\nlkHn[`(@iR%:QK/ܿG<?4( {>mK:@ͪ:vD6X rdq0fLYC_)/uꬓ?S@k8(~z]Z 7i]Q ̀sNS`@)0"za).7$UI[om%7Yyf,ˆ,rIzQ%FN6M>Yׄߢ bSn 鬌hP!$Y+ MݧGuѰ-(5{;.ɯrz?=p>K TU󃰉\;Y/z) ap<+~ C=v|MUF~No? *;窦EQQ2RNV(S7-MXFp~KGÞmw> -?clָ!4'g8PvX48?\([0BPE3MD4gg==ݔ49}/W;c?V[0^xkhWg'fk;bWlñBq#2~>OW.l i{l<@nUEZSȓIIn C-hm @: 4pznV;~k7٠x[DP>AGӹz:lƷpK<`'+mG!n iyI/lq00(ioDf } YfX |pnk\nD@KW2Kr@\'ϣƱN}8a?xa4 ,OGBNAb%WseD 5wD+L.$|#聆|P\[\zwP!syj;k]%s}`8}u Ɵ_0;Dî S`YxGtoEk>LJ!}>7 uAw(@>)վ8l9rkQ` H 2]e~kT.f7DzV@l۵PKt]]dLC C{xa;CQe:d"#*B]':^@bt gٴ&bf=pZxi!"qx>ՠ9Il]x _kɜ2,_+S)+k5tzϩ mJxk[ދ:QCwY6>׈^98o B? 4+8 W @չ]6_ iYެ$/ʪ`Q]k]`A6*lv];,]3w({54(J Ru".|ҹxF !9jzAedGw=v>քugk ϛу˪%3&}?2z0@Ӕn}Dl48lލ $ /M}c55UMۿ~<|Ls_oI g5>=×Cv vppwO_^h\O⬈L=@`i 5 qғInk@Ѻz5gl,;%,_V=máxif:*$P9;s/6676k9C*͸rnty^БC, 9eqMK㞾˩z &dI#:agNPCű@9X7R]l#vA v4,q܅FeRg8h `]Q1f37``*ODyPJ4vI@&G N#Σ[)3<;`֊ I v lĞH Tr O*kE^ᑼdF )Kz5;># uh6Q N"4ȆL74TzAÕnaG%CRhaj=Bw73}cQ%N0k HG W5E=ؗn]]v6deoD!U nR nG}'m*aƂX{, (&w\'e$(#dy [Wz׿ (wߡtٞr1>ϫr\RT*d<31@6qF ̏]G_OFeAS8qsk= eS]9 JisR>w}S5g$"-Õ~ͯܭq OV_^i^9$sq@n& .#2IJՄ2B7vD3aoWoF8pLjC UFO IlE ]Koo{/VYLHS}FrP,by$ǽ IT"/3f΂eJYolkXYU,F PEMbY|pvrl1 :7 Z=oBZvչPNgo1N h_ي[9߽`Aȍ6ܭr\wÄw(Vp 8e9}WSէN^y{~ʜ5z3­A>֧D&;cJ:̾c2n#xaۄ2CGQ]Ư|ܑ<i^/RpJRA"D_*6"]>aSфu߁n)s{u&nG\(0uIQKB&:b5i77H!r vNr!Wɫ-=EPs+]GJ9EOlaOGi+6 ,Pϳ`qO>[Н] ૲/=TlIO7's*c5$.] ZWGLv9{,v5㣬G8z1,sv7_v6۶r?\e?Ȉf%$AⱵ;8-ؽZJVبZ! (hCB% } *h l`!>1 >yڗg\ };Srq9#SuQte<];|vBBYoJV|#f;\wnY]N.? iI>;o;9倖s\|aDA&q#t"i^= ddc0Q/# w7cߧV 7;i "8;m(w\ֵ3St$!RO "eWE 5BEEAɉTnVWG[+dnw (}>N-ALS)to:8LY0qRA.[X%ɩ#tzU@? sUe20/2h3E XW-Yĥ{vFdq؋/'lfQK,g AAtU.Щ|cYgo+?(18yaxڷ̵au<&lF-|5#AڠY5Zvf3߄ oOdhUB߱w>LdJD!$DA7! lQab0 )Sw~!q#t_"fw!-k׿- %xl"t$ Vi{}x8Ǻ׺bَtй\^/9(4RH{ZaƲ5j2Tf4lw;qۺvV]pdm箨CE&hCq!t$5*g @A%EJNiXUJ kR7^Wffh2\Ff.s^CQeV!zѢɭ[1uM)5Q10g3k7$hƈY^59YJiө.&jN9\VԄzzffXU@$rawQİ4=7lծ4LUaQk .޳wmˆj+}or;+bu=QT8s>"{Ԇ8{_W|$^g!d-2ݸk(ù r}}cDOJKu f=Q\/v~8$Z.RVi۟/0P}rC}4JY5Te,&g 8]# 3v8u5զ~#[>?~iU:R6>7fkM(1$@L:AWC;,Cu[{M5(aҫYCdǼ? |>j}C099|S+e^_΍Ͷ龳ouۍ\YaSX)$s.8#=35Z,We"(J `2@vSMXSpvm> ZP9qW9`0߹9s㫢.hZC02% ΀p3j/S? [KVļ!߬`X!xNn`Z5vqSR:pd&~xca"!q 0fr!ZNÙp|.Gp@`a>6'H鞼\PLzVH2 m,M 핁Vdb~|]`RJs?0nPZܠz~e\T vܔN -]6Gq֔ <ײlAď,dv;:e-b7weϐ Ϋ899jȢPgH(v Ml敶[v2콅aQq?B1f;?6ZvQvoj~tTn7 q;{FwGhw9Ōx2Beh~DŽpfOgxWrmmd{H7q)8ADxo H;`xG7hp>mR>^~*\,J<{BӠ0M76}O-W =MGO4čTlt$&؊8 X)1 :CǙq_jVc0 HGL{vn,DݥWNK1XXZm l3h{!j/!n\-=8ӟ Bp窌CtDVyqDk=?y.a61 E}P`$:=.T "Hu,BÂ!7.eWQa<`?X5?f y0`1ґ r sxz^u7Td7J%7+El1bW4!5U?oua%U9,H D~{߭u`E*V~p=jzィkgC9-: A2:$(QÇ.΂,&H797j7WȈwySm k+C~MX#cJbq ڟ[|z*9"G0 $iespun:S@QSA-0 =qu{)b'acYMvŸ/T[IWWXw0!6b6RLydjYR:3,@{?#H-+jc}wqppj*}ڠk@ңu[Ŭ"ɘ%"KMv o9;י}!\2R)nC-E:a" yʟݨ3~iC_ۜ,+`2 )RP̳{ʾ9b9dCNRbc%3Yu[SP(^[kJMU]=! UOI"P:4P`Xk5Gz/?o|\5l Ж~:,Қ\Oq^P{yܘ~c>AdJPP7g.#_,*`8= l0VT7,"RSLK&Dp jgIdAeIvy Y ن}t _BFGX\ Irn2"X=jv>3C. _q!W1>nʏ楼Ҹs(랖8HcD>y}&!}I&;*e6;ߩP,vw"vIN̗ƫ3| 89TeRS=j>#KЖJX6?|2CnK^#}:7\偓0%o12~ʯ8B;jMi XZoEqց1} `؉-JK$}~7=$f&j| R{ȂwΌ_^DmT75Ҕa D]4zWJg:l#L":DV {7=T1֫tܲ 6%$\HU"D{+|]Z.^cX DRċ I|>!eH%Pᩅ|͎Yo=_=y66w-:z.Y[;(+}<+=wLw^Zs[ C8;tjm!չu-΋48jGGJrݒOO;aC緟l DK0Z`/ׯeqWmv}G&4ȕN˖+`$[2ٛ2yɩ 3sFB|ԯ.Ә'bPdyy;5bFo4俳Kݚ88g A]PDIPa W_!b/3{jWA9k-)Is{ e:G6g0f.ك''m/龱79Fn7Y><kL+ȠGiY(_=3Gt:f*LWjdC4wDe}$t61/7C_ {MLE'Pٟ s8Q:.x}/3# DCC2Oc% {KnI{v zTRwS,- d C"W#0sjզ6~lXKAϥٖ ij_VnN![zXe*(LCO~#,Lժj>Cmf`\[ME vA~7e_'T~IF1@u*=) 3rnYPci^RCsJIak0Gxrj?Ț΢-dNU>V ."}sz ?tFYbYni9"jKYuXp0f"0VAbC낌=W 2٩e;IP2a`T8-@R9aC |pH/ć$>^H IVU`Xc EFeT'Ϸ<uVt$3$ubUZNM*Ewm]A-n;.7ߴ%l{st]=Do~JP3m氇ɱKOAŮ@ 5T()9~(1'@,zJ]^}XB"A΀=^ ݴߌ}V!n*ͯ?v4%ҜGkF"HaL~P1qײ:%߳3MsmUϘz@dB' V|Kߜ#/~f 94KL"q1kzȞUz|euEh{۴ J`%dvQrs@ yu٘pJ#KVy&ɛt|O'DZ)̹.^o .?&V81k夑G2F5S 9ap,C#Xi. by_MnPEBZz:M,Tԉ:`ي߉0Hs=[D.g:;{nD%|09g$Yvjz fS3fLdlU-i`.щyd -Ub9ymFSG{׼ d=>w)`lGnYE"ExT@h[g.9G(Qo"|,sԒ 6|vqb,Z9S4 sJg7lY'y6=o|v3?S7@v+d9p?ÌEYnM Jɔ5cw:SG+1@|6wF_ WZAHٛ +NkN8z{[Q`YQ 6f]%89RʈƆ]Oǯ}FvSK _^Qf.2дJ4r6^Nf7t]ݏ?Jۃ\0PǦ˧EB&=bGtj'AG wh>$Bb%@ox{ަ/#^T]617>"d5j g~C?4h0ZI>G6].$9&A=I)nw>O (Do>` 5V*droҐ2XxRl&c~r~pM{ u ~AYue +h#?䆯Ι w<}%D$NY+,KidvEΗuUm߷~.Zs'p4fǞnϟ?T!^AAs,"ACH83^f}?FrPM.-T8LnkE( (| >pl ]Š5SRg"\C^{U=-= KwߏLdSz}غ1D2LWAՕZDRᝎ9`E8 j/Ok_LXRL0<>0a `؜ǩS#t1xp('ČLжbNʏZk'evݛvRQ6de6S:=-o30:;FS")̶H6*4)ۦg6QAph((+s2rD]"0\Y"|\S>2qq.E{aϿvzb좨r-k`fOؚݽ.PHepDΰKG8@QĤը:id G*%0D(d1 c^CE^.e9ͬ(zR#*_겯|*q$2B=Pp/ 'go7.X<V =J$-\ݥz5}=j DÜ=(!csE3Ey *Fؾ517u!p",bM}~aU_Oh-(^ 7"^E ֪i'kck߯&,hݥۊ:٤#o=Uzߧ-YJƥm(%l*jv"]w.S"w-F1'iEZvF^/6NX.NZ&T[R <30'LVÁNs2U&psxm} ^% pQǵY ; } bڣ!LVg72(zK~ ZdLF kEj/7I#.ҡ$D/,}kl}6Pz􆏶߅-Ч#>b{u ۮg*OU M8>ZI{՟ WJtKS)[3!RB}0TI˱5^6wOɺa0ɌM)BE1)akһ+[yQ pVt8Ża# @{C]Ŏe7]|O6vD _T0ɢѩvLJVA?m@%T襁T..htF?3QB}}x΋/O4q'"O_έ>CZp!#_+@E@^C|,* 6Ѣ~#v 0 9{9,'"^cغ=NF+HX}G89y?!=bxnQ(wu= 2?\BlhmZ ["5{ss-:B`B}nZX^6^#A~>"s4 HeBR?Y_10Ngk YE x`x.$l^^nT_¿*\s8Y/`TʔXs9Eh(=f +_sQαc#.M,gsY?׶ߖj!/ڨ,1K}Ws9? |5V%ю _Sڅͫ_s^ZYֺ&S~gD^ضoW޿ţ#*UG*hNؑQ9Vap5C/\?g^ z>; ֊]=3y1j8K=izYI}V 4DPj`fS9Et0v}[MSߔ$]-MFպ3aj:zmoP  ra\~].k%i``2' r j*CYG7 7GR HzB:qC\ʙ ЊY|!@퇈3x#ZV ,s8坑3"m / !v( bUs0Ȏ rWWP<9C~&뻩d 8%16*7o'eB%$zjBDԕ mJ YD,Ϯ!c1-y>M׭> oR HMss*Ids>L^5ۊ`h08 ȌhzlJ>|*p6\%e*!Ux-ZuwkB9Vߠi*L4gS0}̀נX *- u Hfwbْ>9bQ\=Kd퀲@1!BAR:מ(({OlJ]>6=mgb'-c a0 G+V؉ް!P:L[HK^p%[.e*ռ.1ӫ;8mTQk 絔"gy*Hu5vyW\Ϟ>oL kZ(q d "'X4$3\rwY[֘׶c4;MT ]4hM ѳ]qԽ:aەnejS/-͏>*)*p}D֬"XA!Qlx[IC_w2Թ&5Kig:ɟ_]*Ttm3ݣz&uCL>Z)V6*hkj> wur3ηdDW=CP0W\j#eYxA/pq 0^sj֬~T\Z=$LCJnePw<*R  FJGi`A:穢SQҨ[mIJ83f9йKbU@R OAb7"3NcZɬ[aI=G]M2 {{Jga1D3Ďw¢vُċ H˒[ (WU#j0;hR 5 u-V4%C*IChۻF7*M`u-2G|ONѢ)ʼn(Wg-s.P}_.ȻH;Dmt=̿/58EٞHm5jG|,GǓĖ@KWmT٬Jȵ<Ωe`X5Tqh {SވEsv]~si(&/\>u{6z5 Wfbe6ZDň F`/'-ThLؾC*RFĺH#?U;yQ+}eSDqcN\s? &US`pPs%"!P<[ۥгb833ZBCa +׾*uklFa\I$?xW/Pꤖ Ψ/[/2349\c/5/uC 7'6Ђ&Ck_ O3x\Z0Xi{A%n}z(D=6WOuE>@l>iUUɬc\W4tjc|~[[lre-U[ Ƞ]:aED3S lse66H 9ѴU-ځC?b~vPL]e,& FN2ηjXH5ҵ>Tg%(mYm[Y|7mZ99ЋSZsCz.`+8r͇7 O> i}\)emni£|h*h̖q0" ~hZ7i͔l(K+i/ g~{0^u2 VC, y=JZJU2w##z ]d*=a;&]]q@ nZ pp':Py9?ȓ7;oj)<OgLSws(+ɓmmu5]ܰJMrA =14]CEDI uԔr] C"巹x?:ݚZ1}nQ5Uĩ jP:EFPX!Vwlj߳R1ykrcgh-h<?e#w_sƵWǯ9:$Yrbsӗ=" OQ qDvFFCfi1 6_r]?WS>ȧr݊7Z;p@9t@ul]w4T\+¡2ep秥ҞRq܄xnj3597cU7l,#3lWy-{Fba&CٱaM1hK:wֻctGNGZf>{ hL׸v34lD HHnMTdWvtY)/cO[S柔t[[??ShhDzK8XU>h|I+)f\&̤Ã]!&_%F'hj.dN?45.olF!5L:?E?K(?/}]w+)@$w.5.&FM^*m1lO[NH;'j i8rlbGƁ;8G{y|4Ƶ2>KE,t`B=d[/>. Yxxl a敥w>!K,*q P|CCʈ7>*^qw6\dfճqLʼn3m28icBJ{ @cl1y^#OuKzrK^P]ݢt0p:>(]ky_&>,&md߂{nQ #arOv7_ièv[$Zm?D}>tTh1Bo TGoq@kЧOU1}nd(By0ػ:bHxܡ2!rueB"NhxGi{]*rpv*C p)5/q ||4Bx&!UG~)j ^\i,c3,_@<v #¦  ˢWyAF,APlCT5١D~^Uri{"*Q<&Hmg.F1h~Y=Eڍ~7v"3d1 nIHv7IoZajPMEkwXiIqY?5M@f_^[XzI]7:b{|l~R /y$Gߘ7`QuFG7ca8 'ڡRvy>h#u;?@!p&x:[6 ҂ٿۖCkILÒ;ouCfmD/Ďr gDT $`r}fϫu2оBq&1Ygu6NY[0K:8MC !Y(BhK1}ge@}:)dBfWbd~qXM֐نnr"G- |\ʗxQH vc_5VdM KV,jηhXT 9=W|'yG2?qZKGH_#%`PCOFReo˺eȿ.Z Gx^AS?O~ ݍ^w$aCpۈAWnzj#: Qi6;˺hՆ6e~t=7;pEk=# A#jz׉%^!?)멢'A ^>=*|U& -_Jdhwa~m^;=~ʈG4~~ws[P ۯBN&XaCD(v֏m.9ǁE\ sq`KF\UzC,Yn^BMYi(P2~T~n+y'E~X W}=8A'^a݂S`  ,7 ohJv@]ݸK]mѪ}PHCscnxĈX2u^8; XƒfB/?٘H G6 H߾nsF>vL~4 bҐOR{TH%\tdFYjE.lA_s$Nܲ_:7H\|3~7EǾ/y}~(;(>a w7"iO]KN3s0jmIӫPwڗ-2_Z Rz<9cfV"p,Rr}~U$ ՓCC(JBbBZְQE7l)5ee7i7ghv%٢=.wlNg5n-К9:(Rpdozm9m ]i[;'=#%68"tlؗ,zqSI qA1a3_TG`3]񏷘#JƠltiBiy3%I+I3OAw|+s: ǼyW<`L#JY8j;$jcTʌxH#F3>X8kc%$b,ߞLOxdR */4u=3扜GQС6XaSs;O$yq2۔ɐql:v%˾"c8Ogz9Xſ\St qtmmR> q4pΖ'g;9+RTq2xZVb(̅1" s- z +2U$1;mpžs/e*@7NP{Dլ]%*H>Ӳ wwK`]CwX4X =C^P)Ωݦ!6`d=̜Y|gu'h:CTȹHȎ"a,TOuїoNNHXF= su6q9E8J(V$|.n`~l9njcsWhn) ;:q8iLcUA8Pﵬ-#;<1rruۜ>㛦t[33@FY˰x;'& fPV/g3\L &'!,*ńcNvm3n+t7(ilň<C #Y/^Dg\Y1%޳Gozv$%٭g#M9N`ʷp Htr[[[ Iw:D}ɴys۟=V,.ɾuٯmʎ}Wr`ՇXkmsFƠ-cCOdf%:Dpi@xv|= <<N|sxetN4dO"ɤ0Α2BMUwCvĕj7mdx#[#lfZ^Sp⹠YzH_gN42ԚQN_H39lrxM1m# h}6a`jչ.|=sh7Rxdrz'*vQ{\g {>k ?Y0+>sm1oԛźp|yɚV< HXD vry)};8g7")L~m`+|c>y} _~Η}*%g~f犆$s+{Kl+|d}Fn hȹaNN*P8K%x׮ƇO]IO9iLpD\4Z*I%5 >qXS]tL_< gqZuɄ~3;ɉ\|WE}ҳ3ѝ%TPyh@JGMXȨ8;8-`& D2@ʊNƵ}"Pvd}ݤcOo CqDG3eQ{"ɫoIgdi'~ڡY|n wu~q3/i{ׅR8kp_N1K& .d,av(J{0/6XS{!EDZ.5%1)飘juGၞO{HGȳ&Nx{͋8h ;7qNT8(,/S1%񼰔G'.r2f=1,ys?Xz]ޢmI$t[5vNK<, &pt)._0"[‹L*X4~h=a݉+T&; ʜե/-C =o "4ܪspq\ㅻvQ7Ovm@|F]OZ]ߦ|g~>\c,A1y9_zѩ1}RxAi fWX6,,%g\@$o98ƛ<}l u{ s%"S>Of RǪl~ˍHPt-dFLV 1 h)9Z.,I>lS0lQ9A _Bbg_YE0ǝZ,Kْ $+wi&J߄A',v5F1%],g>[|¥sk4&l4ǣk)A'enqW(+XC(!F햰K/:97b>a=3w5k{6$<BYS&{10(*FʿE7f[[7GtF̓ 4fM}c$AQoF:`#ԜgdU3ڜb@J%V Y:CxuI#MVTQu"b-z;V%3]4x5jAfw\"" dtC.PJu=<Ξ܁L!27ǮIIR5pQd7F~H#PHwCE %!{i !uQȉ(_x<%q0A]!,nvO Q =:m\Wx)Fޚ~6c!]>ɳ戣s*U`p-[)&r..guF\ 20tLl^倩il/̙s$jifwO^G vs.p#Ж~u41<9xgsۉ{o"ӝ'ˤ#FX^jfb>郦4-j/jBoZ*Ĭ-#c VX~ۗ\q~>>g݊_ b8n;Qo͞6 Yc;% ,Hg2IGh?{3(V>=@QX'v7-a/)A1:!D:g4Z9z$>Y>>$&`mG`*/N"G^v"FF?傳cXxI,`tKe0wĔ=z ^z#UFL̵2Իcn^ KH\2I]*odhy Y[aT#Y!R7o^ g(>v;SpU \;b29`.>rvmXѾ7g'_d2)"I4tZZВ3k|kI:g?=ZoI>F$s(̫WHb8RTb!y==oL^Sі SK/WsȤ\B?~ '\KT޼j`n.cv?aV{qd1M}ctzOv ӚwVzd.Hv+~@7L9ރA  <]Ci|9Ǟpt ð;An"4AfRw1sg_2kؽֶմȫUT?x[يܫTptSD ilEDy}>P" :,lpclG5ER~nNu8/_Oc7PhP@_ANn}:K}Ld%4 4& HR:h Sr4LtJ`? "Ǒ<@Q-JB{'M!0jiZ?$'Z[cOo/%~‰~lcmgI5g>xފ7nҟv~Ƿ=G=|-PmViWU:^Zm¹R2UybAD=\oҜLVv d7]('dYL+TO~6_ϖG}cgBSy[Xl-r(vl~x/Rd?lώ~O=߻os5ey=rU3qb=:UIKWv:[k˖b9m);z%TR]nVQ]uzz3 y|/{Q a0fM;;_b^S/ׯ [ Û>^u֟{1ՕJze7Oau?3K;)OJk"%z8ţ kH@epP-r-]><٥cqŨ(Rye$$ASrS kЍA89//.B{W#{xsKü ,vnGggo˅ .0Zw[#li|: }6uyqwk:m H:xW86 PY}V g/Nř cƁ۲xd"9bw06XkLWvNirڗWe?Vn<~Pb^޼SÌ14 esǠw(K56=,KvOt+=`aa&䥂bB0؜]YmNuѱӜ:]zt9[t~RyD()d??ƿRM8DtdB"F LO.@ߥ{%Q;CB?1i!>5b"k/qf(8qOֱǰ)"VWO&7ݒm YO{}ÊCsbB.|Hױrb4O;?SA pxEa lqFԏdt3NMS8$D CNr!qv}ux:~۫feΩ 9ʚf~V=?Wfjղ~|oFۣyHya Ӥe3%DO!0x p o_8cDhpZ/7ܻxvPCQw FkeTb|;ngÝk[G]~{B|^ [+vߌewAd}0km}_;ȮykFIRέAoK{,lmzQY|pKhtN;vOEڀ|<}J^v?<>ͷSsb| 7+,WV?نph\~rܱ9);Lƅ,>A L`}ڗ Y]ңѾQ/mދ0YΟ@Փ MͰMyt0=R爔Qhrd4T8`˱"j`U0جj:/CqN{uz+``ر2 DkrCD_m&P]k=4{J9_?b_1S<ǹQi(YFhn7?pu²Qջ7~8!wKє@o|ⷅœY:= Ŝ\@;~.&vľGG\G#F [[/Sm?T`A_CO'c䤥{,5ެ? y5mqGx# xx%74b$GHH\)çuOC{1Vɿls4iM_&r*i%o )T3¯Mmۃiu8{1ڃ^ݨ:W绉aӳ,r~wkXRyҬ2T.,B (rݘqn:(}п /|%"c]':RJm,€T`/)l4?2 (RUUb?Թ`4].zV|*?h,-8@L H0i+aXd#G7ZqU~ }_oh/?׵,@=PpZ+bK 8A~=~^K&8j1SgS{l?ou,#F^G}߷govuzjk}a23w5C[`=;Hө~aeUŘBPzG6,Jn%#0xxca̜_I&&עQ5Y(L00#@_q@_,W/Og^G )^f]+t!\v( Am:|0m_ GHE@o&4sPoݿ`ǯj(G(ׂDLGg87]fˣJrQ9v?['?oiNd\0w9) 4L^,gY0Ȇp-xc8xq8 c<Ċ.) B!}:qQg@|Uw~ݼ8{atUAu.c1Pk?fgcpۣVxO%x&S]ΚԝKP ~_8~~m 6ŋw TA/~FϤ^쭻SfTq]WUO*ana'YdLH [cZgpK zv;s7,ڽA`RS dJ~ԾNBo8Jjj;x2]fzS4xy ٢~<465a+#̵L3'{(|LrnryCl@E-U "0Kn>πfZ5mӒ0@z Nx\ LJ{kF Q5cڢ 5r0_@}ߒDR' QwRIϻ[5tx jJp`J $ȉ`yAr$TafCpoۭZRڛчY˸"73,~/M!Ǫ u滈8/WM Z;EK܊Fiz(^\%xgaeF:sz͘z1.9 p-cbmIl2|^a9KŒ']xҾ|$~+K谛n CbI2)"sR8\\]X??GZ9TF9g-ױ}o ÷: (S:!`oX,z`!.lu@ /7EnG Zc;|?i@7:WxP%+~TnAcmBmjr+vogCO`}ɹQ\1!АaZ y3;SD;r6saT>8n;Qv~ 0{_R1ab=kD?5iN" $#XO@A6YMG,y}L5izz\X V2l!q:"wdzh=bQPR  `5<%UW<@_ŽB8G8IbVf/7 (>r D rf%fNIa{`CK_k4WHmC&$ "to`\\֗׸7ͤ3J+`xX:UC(ysaODN#U$^E8r(G/CUCd 9dxn+&.rZ3`ч?9~躏J9US75uR.jQ5*jO,-1mF ϓZ}6 09t+WHi3pW70VsUJOBy0X$ R>C%tuvrWG1.\wSaōnȏeubU[a5mS9*s4_I<”45Q.5w{6~ (Q',Q#|KT/.I1Ow;GsQ ŵ"D*ҶɸHARPkbI ?C" Dd\+zZBHì:,~_My ״{ʙw9TQRjvqD$5(h(K)CdEY/l11{=@A`p5MAʯq>c*ߗ#;R$d1d[X)IXX.?,j^  )>%)5(Õ0Cy6m6:ꮹ5BiTzO;HČ[X-6Gۊ7ohn*R9v!(eI%LI!*NJeq$A}eb?u[$pGwcB87 .ARC+zV1=hTIov͒GGdV976s6J2:^{n\(8QkVGFho,Ҳ|µ荏S)'@ɻ#oOc 1 9뢇߉`ur~??"){G˗6JЩ,UFWSa+,' E&E2Y36~ulǕg*'툁;SaW1.Y9m=' X;WyEs2msn,f&e dDI`"$[;㋈Ѿ.‾QXCmxZ*|"BBA8XN cqˍimӤljM0p9qx%9& 8:=7 )GݏBv3C<7UXgޱPb-AɒWy]G׹çsCg:1)bg &Ӳ6֏ )q>j9&_Y wtTk!Bg5Yo}/}qg2z;q1Gw~멫15Ԟ(z ?ѿְ!G=W_Sի"S5Q,a=e}4Ul=R.@[nGt 6*b悂GĽ=Cr Âr!j&ǀ\*mag-w&g+^*1PaWG$™[}*U qa_;^yQg&|4HP&w!X_U5u=KeJ?_9W|o 9\ژq,ؤ+?YaQDwOJ?z˃Jb֌XoPNĨًI!Vd 06A"ZkKiɂJrйg^mvN7: /2 sHǃDjx_ geWPWpC%W"Ic $A~^0AoU>9Lw!8:߲ml-z A sGwz nSϷЁb@/kBH ڹEР!i\%:2gK( fa➒F\п p;v^96HxP= H)Lv)E4ƑBh`3ijÉwr{>tIZ&\Hdr EY$ɶKbF1M2a"\gԚl|4zoi'郲vW5ߔkx:szNi7cM\ DbI`O*x#U! I"sAQV<?!uu^kp^VH >ޖ߯~Wz\ܷ}tzB (/pAצ>Y|F6.kTzÜ4EHu"ѭL.Z'w^45 Љ~Rl}6 891mW nvo0}ڕA$RW uz9$ȽFPKwNᮣK-~׵]͓sF\%V :%ϴF;f10fG$>/V~,\T!H]((9ׁaMP^QQ'ǿ ],t':5A@ jKMzhw/Hcy\Ʈhfvû/;r@,~fbJ=uewJzNJgƲw>YMx)(X~%;Z3gM0g9G{9Zw߄:htGNE5t+ghpǹf.L߾B%J^u-&o,u&1 ;N]'-&§tURaOjRTRIHf9, &"LlW6)*[Fx۶MĘ] u;Y"$X.H R&f9 -Ҥמ^8YTЀ)uoskf['޷s>enc'J7>,!WKGjmudZ,t~Tm N~b}(.Y]`Es4;YN@UY_ʂaT~owte/`\8tUqѿ>21 A!ci ŋ-V6\!Sq8~TmSf* !$mᚘ$Q:-e۠&]_W`y#~Yfceigﻍ@@+)/,\xm /5YvŚ[0B#tu 6FXl{"yvrTu#RtO0*kT=K-Ǯ)`͓/>z;Oߠk,`=v/]uq32_Sa,㷫?+vQ$׿ڇ]4E ,TIɠ(ZV bO 9ab-|I nVK]SEuyMٻ%6;Mw{XEW5z_j;EF"c՞wN/33/uwV䈊bul,:hvq΀[BEI@bcA \.M֬B)/t((*OeM28û.`@W.7%4_FJ9mqJk pU8I;==\w0^a cz9Mj  7_;qy#SGŰGow#fl%C8D̙EHITQDTQHQE QE QE%!TQCTQCTQH4PP4PPEIUUTPg}R̕nMc)ݢH[px\$*[#c߫"_`oRV^Н ᑑWcCP[5|;,,0MЏIfGtw`^O?@'^ɐovpO 3;|UH@AA@$eV!tXxxa\an97EFpY$T *E)JJVPF()!@x(Uڃ0Bf3L 卍+V64ܭPERJc Dr@R4/Npɶ62muĦBitBimqb1ڳcj6A+V6ՊL:tY U8%^N <])ᯝ~9eC-^ sпE \[>%e5"# Uopjmfo曨*e;(x9ob] v}XDs/^:d֨0N.K7z]Oj?&0Wjma iDPUmqk^{0@_5!;zVi~>p\ulT`잨+lQ/"Q2u07 y뿂B7dxKTc-4L Z[I]TATT@llP#A`lwOiZ7*4buz1ؐA;m5@FI#44V:a|^ߞN D|->nI?uo^ΠϔO"'f`tC~Sc  geqc˵pq5kAnZr #Xގ܏R1to%JdrnIﭳ24PW_g;Ո{t{Dh$59c6ۍͿqdGjL<-_vͦA4tx - ?M'\mjW;<8cpGC8׆GY|4, wnsd a+2װ.2$5C_<'v/{=R@)Z@)(hQ*U MRQ-%Tơ4І"$Utk$\D@;J!@"U Cah 2kZa!bP><]  PAD7ij.&/@=]lxzk{ҋQ@)&U]ۼp%(a2k7PyHz2*&ކR!H+H:j,<6^b#qAۗv+;n-N:r[x8g@t S%# Dx z87iG q*ﭚ! s,sOV=}ŞFVɄ|w,~D=T!~|O4g?<9·Zq˪Mo#e_뢪ߢeekfz.[$>s8o"g϶3!ג}զ%hW1W^{hc] "1H I2&gB< #m2,~ݍUߩ̀@2@Fd0k8(!-^#-ދɣJ_*Ce^(~l}!*D`<#E_>=/"?&Ϛ>HQiv9ҋPP0~q v1Pk紏/w!.\7o͏j!z;NEHGV5TDT6Oc (%19DqB)m * .B*:ށ`ysʉG"PG$3UIUxџ42ԗ C xЖH#aD:sPn$`* xՎ6at4humt21z*0=/hLU0i PG$O᫢PjGqRsf(QjyDzoㅴ^})6eVoj1x+nATڶ a} ՔP(TAWd噺Щ2cCۓՋf3.Z, (XݯٮKf;c|o`"/*???R#{?ܶKw/*wGό9q?o;-̻3MM`vrۜ% F2#OIn},+du;Ƒ9}SK?30S#gW9vJx7Y.g/n.H |5'Ȣ"}DP)_`E%TeG$_W!{ m?`5#05w aD ȣKqU0TXB*GT"^ߖDf{ 0Tc~;w +G#~O}uZyg鿑 p``R[+yeFd!0,#V.$0H.Pdz^} #Qߓ'}@=n@@_MYΒ430 ֓yD$!=L(5>LH`0;sts0F9%ܿO⁛,`oRE5Df̸PSR)$-vևzehjmʪ]rv)Ob3?˳x|My#)'NQ*vxh'Dz.kɝvMt,$>u葿ogV1U"7E[{&! ^vOzNjh&d.L{8Z(ljx{Ruնf{j0>0Ϯi|:e˧L}~r[G#I!5xSptKy=b#ܫIw2#2QR״7??M5Cc̄!σds|/|kOFֳYZP(0m𗩯466\')Hk Cd[)UJ.ڸh1%XlrΚL-<2ƀG-'sy-kG>[f=93n!HUspt'lpBwe )&ÕSewCoΧ~ ch$~ tFzCdr B7T  Ž>%KLPs9d=cW3QXp@0(O˼V$oE D}mÍWHȈ _+tۊjP|uf# u/v2ᡚ>QGY ;+dлJD?wBKY9f*E1x^G͕*!9IaXXwɮua g_2uwsu1x #?ͯ}Sy. `^x~Ӟ4m`bw>o D9k>ura [ҩvb$kfڼoх) d^'OW?wBC5NNzj#Ys JH,}P hk+è ;w .\&EjC}Vy[L<}5>ߑ0Z!#Yj#zztteV$J%bDŽU7qd;}%ܯ _I!kYBo[ןI+cc 0OYq9 G:.#]6MRꪋ('%6{Q4, AHC"ImOӥCrul`CB0Du1a(sl]?uMukV]~]UۡמE !W~$?W$bJ7 -X`tD{ ++ӳ&Blk꿵Q;3c@R'm*\5Z. @)?<[kl Zߖ7U;ڊ$.h] =} ġx¡Eȃ( h`+YQDCݗʨI>˿YwHV搴ޭ( x@fܒ?"OPm#_suAPR("!O˦+Z\H$RV yA}=.`e|4sBB" *?g25(Tq&u?~+ݭdU⧢K')|$p#iHc:1Y,C}5j /O_Ha]-/Pؚ֒GyTx\Y-2ll<'Sj ŜGupr}83ULQ+q;k{2Av^!ABRݛu\8s(%0*~|`o[y#/`M:Hc+kh^QwomE :\i[4Rc-7:+l(lBO*} ?W|!'L'"b(&u_nTa,X;gUˆJ{z(?cP,]x%[)seSE]# [/om- HEfX ne!$tDgZj:gi9]t5JA PUR=\[b7s"+Րlܷ6fM]m n\K#lcs jBrYzH[;iB_@pkOF %5i΋vTnBqP),n`)hY]EU֠KD3`2Xpv2o雸* 4jdK3 o4/"W = dL1m֠tƋGiaT\ddճ^΄d"v!/G|afCOzR׍>nP]z}G[3HT? Va į&'pDc;5Rmg="" LqV6\N44 QI{!FJ#6 @y~yptlps.l @i3y?jie["ZJ hXIhqcZ7R4\mvD) Sokwܝ/N -Za*R<.r/fc2-BPjꐍ/eLzt5SG؇Tib$C`90* '#&|r0ٝ5닌i V~Ԡ*[|a"j^@&Y[z>Yd&vk pzB0!7 +}p^r(a*V1 ޒ^Y]x?OxA*CU*TKX˅qou3@!ar4+tksłh 1e8B %JVWFWBZ.ugs[#NSa| {*zs2{ ^