ࡱ> :3456789@=3;shǙfKPWr&x] \TÀ y#j( PfjAyH ))Ϯ^ӛ|feYiinj--++98qH[9k쳏 b!6GHU[B!_#doڊ q7ޤp@P$w Gqv *1)K'[اC7i͒oHR 1_Jx;¶1ݕn,=H֥gzޢ[5pKdA~j!u-(Q#;ςxFƅB>mFrZRC*)ϧF{j#Skp ddw&q/Oi dSW Bit@!#ej˂r`^Z Pe% pl `^P~88X"m/-{tv?)L!I_ojgIXa6fSid4 ֦4*/İwv$ŋœH JmUYzzOkX%}z@q|2@h~ꤰ8bS_5Ĝ$N*#eHc1fWA;)|yIG2E~T >ǽT͹O5,'wz>LN^fn+IgTg 'K^cz렡ܝXgfZLX{Lxr/ s<kN-Ӭu%L{"bymsbrn2,Y@|v· qUm6o+Ig9{-d݉s9˧6ɮ} PGP31hwbPo y{:P7cCz[9Jҙ$D}t eŚJOQG`?yLOVS'XKwd~`s>/lʟ?6B)!"K,Czz[ZI8T_/I;!1[8`:gcȯm<cwfCfwa/o͆c*^Z*8{B^r|&S_sLK 5}yiTejB;L8h!q&Tl1wt9n=W~ӧb|vO{0Si(j0Ѭ/_6E=K_ |T/$C~&A|,O>9jh眚E2>(xDtj}~w?(-W'o MQm 87>&h*xi(kOn-mɃ=Ύ@Al=+ RF!4mԤzJgxAnBl滃$<@(dG@&GWa{h61 7Pꔡ>>?.L'W TхXg~tH1^{hJՏPWm/BB yd<*x2CIpm0||M"q7K'XXYN8)/@ua8>ݪtVGl1 i9+z!*[^ـ*bWIxFG?0/تGJM $IF(øe|* _$aHd;/#,qӅo`_<+hkTJUiH( 7Nt6T؎BpFJXYܙz+ĺ4β:`(}>Cz9xڦaOco+gk'Iem{8w_'Ͳ6 e܍umR{XdAP19㍄ <}܍yEt[|QW$nj'n=Sk4?oY>[^sߒ'W%ݶ-#Q)EN{kC_AaFkTw'eSl3mo9uڝ x$eS[ǶOU>]} GБZYy!jg`m[{z3^\?f ,qLo\ȧcB|,6-\Us@6VWZm9:ʵ%uڀ @Һ4.`ςzxhyixku@P{w6G|M8Y"pgǙ4-|#LoΥ֎L72RXN%s>ѐGCj$<.tu1o%5=w+G]I:{C|9Po/>|+ox'}K_AsNkA`o,ΥSF3<=~JSiJk@'gx^xTA<37u&@vxFYw$̀6 Ziͭ;Dk=B&k5p\{_ߛO |_zC7up='B<p^w<|~o"r$S8Fp6y6WkA(ڈ !+ËC@V6F Zh|\~`ׂ\tM=~⌟n8Y"fMml!Ӆץgۼ~0[gS>ca,ϩ@س]=gS4>hJx8?3x\uĹKN흜+#9 ުm(8W@ߔ-񼇇5>w`׸jeufKiuxwx {x~^񼗇yD|Wz{Njg]s\%sՅ>9n>񼏇R@3|ay]??tTtiyEE_ЬA[<ڿ D=\VW%wnnqz>gL^V<_=_ƣ-2w.3}~>o> % \D$ƭ ,o9Цs>gOOwI-.3u"seϟ+yxb\u28a_@_[dtx /}wNe{@Y9Љ$p[dr K߃_?vx~'ݨ}~ 9og$Jz@oOa{pc}dw;(cw{~ aH+G]I:.]^~Sb4?ߌw$)?VE'~ -a󀂶vccjnX %p ,qo{PA<ye9kXvoZW_:Gؕ#ǻx#/yӗ,~6@z2Z xyIRix=mx*Mxj7p 7\[XzC*z;5Tź>(/ XK,J`%{=A|BĒ+@ xe@y,QxiŒźpםU*{J(_ۿσuw{2c$%MbaZ~WMkO;A/^Eu[AM6|y|T4 IM+݊O ͜)õx'2n|NAx7c9Lgj)6FއQd%BT(~K旈skK߅/rbp%: !EP^^do78}M&>" fOzco)a~mTM6>ÇBb?9%55BUESv|\k} z1ݏ@~; <cyj7)/Rmh\4!=/'f&'7wO[tۛҋ|c9M,\}uۋž5M/xi|þ]`uK\_ߒ6q_cԽ/YXLtpܷh- SգcFoA"3ma8lYۥq!=| pYZJ/%u{ʵ{[|O'a 3~\vG74̉h@=ʉoS=ew(ٷN \GpX;\%c-.lcX zg nvu PFo]kыW\L[VҰ705U~,j -~r8r9k+bWR~4JZUَθ7Z-}s4qS| kα.ش/Wtkˑ{}(8ҟW}I w~=qOy/WcvDi웎.>k|a `XymBV{R`87QW4fKA'xoY7]~ޔ77' vv]Įr|o(=Gܔ~T'߳`~~W5{{nqgEZA<3γw!s<#sw9rsgrKg1Sv< 9"D=` :7c%꯺֎#;Ű`eS B@BK.`!'Q3 o`EpT8jxcdd`` @c112BYL%bpu vw4i۰[oV3ŎNDD NHQ|ς՟0Ґђk:ڟX jk-xAYgLI0b*c`vCIYD6pX%%W;bM-L9v_2%_C 璩>rZ,#LA9Ka'+Kozm@WT?^kɏoeOr_qTqgB{2t(ϲ) PHn&}H/2ި/ Ծ7v-9E_6(?'Z̊PP$1nQ@*~i0AQd <"2Qw+WcƓ`CVG ȑ~gb:VqeZJWG"/9;rԎܢWd8 9od!oL2헮ݗҶ;Q$\ȃbފE._'uw28JME419~Wp0|he]% ?oxT2v!p%V@4[??U|.o٫x|3)yqĒ<p7'KlĒH8lt <7b'Hq8>5wY$7c犙|A[1Pyf#F+xk@"=X>X. 1B,td , . t`\+>ȭu Ci} :7yh_Neޭ!~?uo"?v4i/t$V6& %"`xHĂ0ғѕkahůfs2oZRj'{j9Nse8w1mps>\HUO%<8F:̓bh#7ӹ<B<R7'?W 邓/B~ xGW GW7W& < VQ{ທ ) ºraaٮ2䣌aÄF.=(p2l\֊Ae{Ϳ 3DTQ~{C1>gš MkXV0QpqBfQy79u\j~_dz_fZ_ (ce6ۘoC{>9>7yL^07MM Iu2(frM%ʹ56-vՏف=[؁JQW "=, .>(){QKK1#;f\>0.m+N[[{#Wё(59©ȑPv O۠J`yݖc帷Gv@m@q%O)$=u>k/qi3'Ϫ`C?HxW!" X- G, YJ!eKBQF?˿-{epe,֐o]0pG&,  Ễwg2(K\!'i!;|1|' ]'ը_z!9U#„",†ƈx' #R\ke䣌KH#BS~0$O)bЇ\fKeCsy>ep>nLV"4y4o~*7=~D'GE> %#K]enQG&-uW?[zۈ) h-l5Cjq]3ġSCM]ţMJdvÿGxԇ~9#ڎI?9Y?~UϚ6*<,\ ښ6ucX]XzC]Fzpas#͡ |0ִ]kQ]ɋ}JTr^sA!悮`$ӔJ"`ע~%W>va'+Ko^^!E6i"e{[vd7~ƴ~s'A/qׯ-",uy@uz7 Y.y E^ՠ&*z2􆪳PUjk-uV~Hn(䃿򕵝R$q7ޞU'/aO69{Mξk_ζHçBsRΚJ9K,_r6 @FzCxn6MbRߛE5x{yum϶Ko̲e}N9]yZ5QSA1J>b;h;4f; O.R7ƴہYL|\O@͘ݫ ,O>P|崔Qj}@#dt|˭dʋ)>@!J{gǃ[:*ǃzu9uHC|t.`}?^66;Wo} poُ`bsimvmmo6{:9TiI~#&6N1C|gM6^h\7t4%zh8׵a,uAw:Xom|:nTwTsys]uW!J~Hb#ɉAMI=5jg=xmy?)yP[éŸ*2!^x/2-W2/:%=SC!xۢW &Mx;ޛBgV=tQأ-J9*5I{sQ;̮#Am졑N6FFa~=GB5_E:۲σ&f_]z&OoOȑXUݑ s~"$>a <ԟ մ8R3Ep Cϗr #=]YzC8N |w5f:4feq鏇iZjgDs.'ٸx?l>׾hB쏗@u .]<'nxLz2j/̡B/xM.Cigmk{ͽp?^?Շ?'z.t,yOO^#x'/IG!ɛЕ\M6{6{7zƸxՇ?mxM䏗@iR& \?ֺO6x-㵣2ۮ"q<}%l ?^x䷃ov(Zmܒ&ׄ?^ʦe菗m2{vr=r~i~ՠ|E->U~_mjK_g.Rl~QZ團AQ/џ>@jg&4cZl|AIxР4Ok>_F=a%Z)mO+OҾs[w<5JP1fxig#gmD<'qLLx6чWÙfx";꾦xNs$_4ҸF,o2T|:0j6 o-ˆ1d[%Pӆ3sYiPgԞczc:αOؘ*\"Ocڙq^:ɅVf,!N鄫Cv2*YJIE{qNql/Ą QIB0p5GZ0iRZ1i1'G6jC).{hѴqpnuk_{hmk`2}T"QC}%G\>z-<16M0D7μUhh>XJC15~{U'q=7yUl` xwN`h덟ji hᯝ§Cw8Yc6]cY:ey[+Asi_v?%o ]/N9ǂ/k3SN M s^3٣tJ^P7yф #,!ʊATF x0-'R=tɌ$h8lc1Q DE%0ǀmpw|}Z18Ľlp 8R1t?^N~cj5l} of1\1 { 艟$kd ^1`{o|+'۩1͟1@IMQq@q/g{1j)$[pp vH|N1Wt}Os]ciy#j3t6:J(@ޤpi7ɴ[B yc?Lu?TOUyov |Ruf;SH~D#[/aqlPs.1^´&?1_#O{[ a7c?H_`s3\0|^%h{/X;G}2nc 0|2je/pn|]/:10_0Nڹ =|)Ws_}_柯mbNn\o6_ Ep(߲K':[+:bIc /qŒ/\1r+h9l:BA:8{n=]a}2"=dnj =45v}u8 "ڧ-4 '3SDy+ɝ{V^숞D,ܟ;).1M}Y{~aFS HKBʖU6J7N J_B8]WQGBDž(~J'[Mߤ9s&$r$]UeoFZbYƆfW2bpWp1cU|YFw7_$6HXO~f MҦM5xf1H*m{qlihZf32Qx2yZfJ~9IL#-W)E=O_?-w-}eul5ݟ{Jv֗ k%?Q}ktjv Fa#6 n6ǰ#F1Z!fFZ@m II{a#1FmmspE[6Q;)I.KoXfGh4_`%{N49hC#3W!X@ G\29>5C CTC'̓^LHw^`dw In3ÛH=YrD~z*#]||t`t"-^9D*hWОYr\/ktaGʦQk*A[nsŸ4Cs^= 0:pKUC-'"`ߖ\"Ϝ#:AN2/vr jZ)?2d/]?ՐAy<xG]?Ihks^!ݦ|G3@F2hi! ukLq,91̇mo'(d9IgǺBԹgQQ*lr`ԋ$2L$N$3EZBݽdk8L'AO$[#ja8LLV?_\a>Гly;Kݞkcg2+)Oᛟ$P6fNQgeڶ(i<@-/˂>=Uv` -H!%n̸)_c?(*3cE9O͸bݶdRr[vI#`ۗŮQ<; ([62co !]3Wt.*B%'T ?ӌg2[vL+g7 Bh0*?g~,ϡ]ObNv\/p y7y fW8)!_hw>1Os?1z^4.g.EǴRxsu $>&Dc. GL+omP[0!}A#ٜV9i, *npOrZ*NMsAKcYMy iԥn}^_iNsk }b۔a{< hr*8_5RTnwyPv`|wG٦^LC$x 0:*H75> σp(W@y\ܴ8U2.#l>8ӗU}?@va3AoMrA6ؐ͗2RC?C 8. ˆ׆/ Ӽ4}ex=S=П3g):_8(>!O0w0f7zZC}7C0m kAнJ^thЭtϻ8 #M?Ԫ?DЛ'}@O(/;^RBxlQMrӗ8a-'OWIm4K;v'yl~MX|m@h^r uLűREVa6:Erq)mMoacm܏pk#;BQClJ80A/c0nhn{d< q|hKPI!{_.!ѲڇаE"n:Qq3 c-_׻oG#Ì{xbmH/,}oCydďw'~,7~#~!/qgyDH:(Apo4MFS~&w78j*໘d@0ezgGbVC sy}޼֚ߧk@~?}{'.}^g&|{5Cu/|>| ^T7- BÖte1}ԲY~ aK 8.ѯ__!_G5>H9Xgl<#ϲ,yʳfٚl2 hj<٬'ͪu=#-C`9UU)Uno6k)YkcВXVfmx-DԯdzL6WyU#ڍ_nûB(1iۢgy-]1TS!]Jgُz6Yloz#zv[-} g=,հ,Uw%36omlbM";\LKyOX߾y;(S8'|zu||*il[aA޳x Oɡ!MI{#&)"79^báJz}9`qJ)A@:ݟ<ސf5 O?QUZ~Aq yd{w<dWƍA+x ӷX7ևg:;&E~\۟l;l(CɶQ}ȗNҩ"ۇql|ڨw5I)yɻ6tvkþ*ÁŬn]e$N8Չ-01*8N=gRy,LVo)%k5Ƅ9xR8嘰$NG5DŽ-P]ܡFO0ctsOr{{Μ(c<&Z qN~Od+pxZ}8xlV<ڶF#d{Қxh=0jT1E<*x#w:th:E7띄*oU~DT*<ȱ^g"z&o oAORc?9NHI\ `ڄ2B yϦŸ̘j[fh7)213f?ITyR9ǰ9?;ԝ?gM9}l1Ɏ3K\X #?K|,8xVlξB7 *wzXX/R ٻSba܋tk=m5wz9yS=5jN-hk1@| SD7uzSkEL:w߶/'9K)+E?ə{Ae ָӛ^Li]%;X/ _ oi+'} ڎ蚎" 0v|X0G|)!Ӂe#QgpDmizoOB}߅r:}S#&o@=jMn`ڃ2yN(T75E`x\ pEٻMBL6L, l!8/jDK Q|؄WQԄDDJ!$ԩj-2BRޝ,$`Q&YR"0"1]} y0cG`Al0y "_4u^%P  @cv~dy@Y!VOouv5D@9A|#V0VRVYsu$,H_ͳmsf:uXc F=SWruurac4`hV.Pպ`af;DI)aSc >t5k~!a%ϋ )<uᾴ?m1pi!%O5Ġׁ^#gt?K`c>{WQ.xC^auc5-?V`yX7>>EDZK&?G)8̏!V5k>hhBpGho95ڊی|tGk>r?_J<OSe4us윯4v];f)p/gs+ Haw.he.P\@q <x;8 oK9ۄ}}]Řί4 ]*w-M?pe FQSԅ,dKy0m3YAzY(=z|eKncg?S.•ė>ܗmjZznF|SG$}"Hse9|)3" >}_>w6^`* f6!l>6㳄=OL :#\/ďkTFl~ń_mĵ߉MN6顸5Tx~9ր~_n p5`/s"o,H)\4ukZz³׀H YY5=k@7<$zpn8hyQ8ub'Ogn-L-S_r==)ƋESW'Щ1?Ƌstx1n<6O!| kUƽJ8EܦGU95Qc>Ľ}WxӸr/jV7wk_ ӧ S1QZ1щ'Z(Qzw1}&Lpa󴯋,j͇lw7im.J1Ԟa4]jH_i%_ZB#mdI۱_e3~i%{q)tI L1I8h8cJỸ[cQ컅٠h__1}]9a rGǼ9z~HbHf8KZkN'`8Iޑ4w#F{rP}G2#y:ǝ |G;խ發?8GR֚#,]H+A_ց~{:0˿5j<92A_=mi}Y~o@HPF\cM'HXS.ȧAHE=:gz yLrk~q. w>KsA. MotivationCertify all code in a single type system/program logic?Hard to combine all featuresweak vs. strong update, functions/exceptions vs. goto s, threads vs. thread contextsMay not be modularVery complex, hard to useDon t know how to design such a logicv8ZZUZTZZ8UT  sAn Open Framework?/ ChallengesMExtensibility and opennessnot designed for certain specific interoperations.P2P2gKOur contributionsOCAP: an open frameworkEmbedding of different systemsTAL, non-CPS Hoare-logic, A-G reasoning, & Open & ExtensibleModularity with first-class code pointers [Ni&Shao POPL 06]SoundnessType safety, & preservation of invariants in foreign systemsApplicationsTAL + memory allocation libs.Threads + SchedulerThe first time to modularly certify both sides& ZZ+ZXZ>ZZ2Z/ZZ+; >  2.,wG Outline0OCAP FrameworkCertifying Threads & Schedulers'OCAP : Overview" The Machine A1The OCAP Logic : Overview Hoare-style program logic for assemblyCPS-style reasoningAssign a precondition to each basic blockSimilar to TAL [Morrisett et al. POPL 98]@<+*<+w B0The OCAP Logic : Overview E3OCAP: Code pointers F4OCAP: Code Pointers  OCAP: Foreign Languages H6OCAP: Specifications  I7OCAP: Specifications  !Selected OCAP Rules P8Outline1OCAP FrameworkCertifying Threads & SchedulersQ9Threads and ScheduleriNScheduler in SCAP X>Scheduler in SCAP ZEEmbedding SCAP R:Threads: Assume-GuaranteejOCCAP embedding([?Certify the code\@Summary0It is simpler and natural to certify different modules using different logicsOCAP: framework for interoperationEmbeddingTAL: type systemSCAP: non-cps logic for assemblyCCAP: Assume-guarantee reasoningInteroperationTAL + newpairThreads + SchedulerTAL + GC (ongoing work by Lin, McCreight, et al.)\{ZSZZTZ{ST,4  ]A Future workExplore the applicability of OCAPInteroperation of different languagesCurrently just for assembly languageBut logics are at different levels (TAL, CCAP, & )May support C + inlined assemblyNI%2!I%2!fJ/1@CklP  0` 33PP` 13` 3333` Q_{` 333fpKNāvI` j@v۩ῑ΂H>?" dd@,?n<d@ `7 `2@`7``2 n?" dd@   @@``PR    @ ` ` p>>    (    <@"6"0C  T,d"6"0C  <"U_6"0C  Td">&6"0C  N8"P6"0C  <"p6"0C  C x?d?"bUv6"0C   < #" `  T Click to edit Master title style! !$   0 "  RClick to edit Master text stylesSecond levelThird levelFourth levelFifth level!   S   6t "]} `*0   6 "] }  H*0  60 "]T} H*0B  s *޽h ? 333380___PPT10.(г% default  S 0    (  T +  "+bb P@ # "Dwoh  s *"PP  Bd" P@bb P 0  # "Nyh  s *"P    Bd"P 0 z   <" a*h   s *"    f?d?"+)   B\ ?#" ` p T Click to edit Master title style! !  0 " `  W#Click to edit Master subtitle style$ $  6t "`p  d* 0  6 "`p  L*"0  6 "` L*"0B  s *޽h ? 333380___PPT10.(г%S0 | (    0E7 P   7P*    0dJ7    7\* d  c $ ?  7  0N7  0 7RClick to edit Master text stylesSecond levelThird levelFourth levelFifth level!   S  6pS7 _P  7P*    6DX7 _  7R*  H  0޽h ? 3380___PPT10.2B 2  R(    0tZ P   Z>*   0ȸZ    ZZ*   6$Z _P  Z>*   6dZ _  Z@* H  0޽h ? 3380___PPT10.2xhT 0#L0  6(  ~  s *7  7 x  c $7 `  7 H  0޽h ? ̙33y___PPT10Y+D=' d=@B +K6S 0[JL0 &pu(  p~ p s *l7   7  p 0P7@p.How to build fully certified software systems?H/ 2GGG p 0(7@ ,$0ESource-level code 2 p <>"`PP@,$D0l   &p ,$D0 p 6t7` ILibraries and runtime 2 p 6`7  5+ 2 p 0\7@ ,$0mReferences with weak upd. 2 p 0L7 @ ,$0yDynamic mem. alloc. 2, p 07 @ ,$0b0Functions, exceptions, &  2 p 07 @ ,$ 0= Concurrency 2   p 0t7 @ ,$ 05I/O 2 !p 0H7`  ,$0DGarbage collectors 2 "p 07 `  ,$0dmalloc() (strong update) 2 #p 07 `  ,$ 0GStacks, code pointers 2 $p 07 `  ,$ 0OContext switching & Scheduler 2 %p 07 ` ,$0@Device drivers 2H p 0޽h ? 3f& TIMINGl|13.5|1.2|6.4|3.5|3.1|4.2|10.2|7.2|2.1|4.6|2.7|1.5|7.1R&___PPT102&.~2i^+/D#' d=@B DY#' =@BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*p%(D' =%(D' =%(D3' =4@BB BB%(D' =1:Bvisible*o3>+B#style.visibility<*&p%(D' =-o6Bdissolve*<3<*&pDA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*p%(D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*!p%(D' =-o6Bdissolve*<3<*!pDA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*p%(D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*"p%(D' =-o6Bdissolve*<3<*"pDA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*p%(D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*#p%(D' =-o6Bdissolve*<3<*#pDA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*p%(D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*$p%(D' =-o6Bdissolve*<3<*$pDA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* p%(D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%p%(D' =-o6Bdissolve*<3<*%pD' =%(D' =%(Dg' =4@BBBB%()))D' =1:Bvisible*o3>+B#style.visibility<*p%(D' =-s6Bcircle(in)*<3<*p+h+0+p0 ++0+p0 ++0+p0 ++0+p0 ++0+p0 ++0+ p0 ++0+!p0 ++0+"p0 ++0+#p0 ++0+$p0 ++0+%p0 +S 0VL0 ] U  x(  xx x c $7   7  x 0(7 ' ` BAll concurrency verification assumes built-in concurrencyAssume-Guarantee (A-G) reasoningConcurrent Separation logic (CSL)& *:E:E% x 0P7   ,$0KContext switching, schedulerToo low-level to be certified in these logics*//l [P  x[P ,$D0 x 0LY Tz$[Yu&Shao, ICFP 04] 2   x2  `A ? ? [MP   7jl [ V x PV,$D 0  x BA ? ?[p V `2  x 0 @ 2 x <UjJ"` `p,$D0 x 07 ` ,$D0:Threads & schedulers have never been modularly certified!2::H x 0޽h ? 3333F TIMING*|20.5|34.2|40.5|4|9.9___PPT10.4P~9b+Xb DZ' =@B D' =@BA?%,( < +O%,( < +D' =%(D' =%(D3' =4@BB BB%(D' =1:Bvisible*o3>+B#style.visibility<*x%(D' =-o6Bdissolve*<3<*xD' =%(DH' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*x%(D' =+4 8?\CB#ppt_xBCB#ppt_xB*Y3>Bppt_x<*xD#' =+4 8?nCB!#ppt_y-#ppt_h/2BCB#ppt_yB*Y3>Bppt_y<*xD' =+4 8?\CB#ppt_wBCB#ppt_wB*Y3>Bppt_w<*xD' =+4 8?RCBBCB#ppt_hB*Y3>Bppt_h<*xD' =%(D' =%(D3' =4@BB BB%(D' =1:Bvisible*o3>+B#style.visibility<*x%(D' =-o6Bdissolve*<3<*xD' =%(D' =%(D3' =4@BB BB%(D' =1:Bvisible*o3>+B#style.visibility<*x%(D' =-o6Bdissolve*<3<*xD' =%(D' =%(D3' =4@BB BB%(D' =1:Bvisible*o3>+B#style.visibility<*x%(D' =-o6Bdissolve*<3<*x+AS 0L0 (  x  c $t7   7 r  S `     w  0   ,$0Certify modules using the most appropriate logic!Modules do not use all the features at the same timeIt is simpler to use specialized logic for each module*2l2lH  0޽h ? 3333& TIMING |42.2___PPT10b.4d+oD' d=@B D' =@BA?%,( < +O%,( < +D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*+8+0+0 +S 0<L0  5(  x  c $J      0?@u?Certify different modules using different verification systems!@ 2@ 0 TA \? ? p`4 \ H  0޽h ? 3333___PPT10i.2+D=' d=@B +|S 0L0 . &  (  x  c $Q    r  S Q 0    0Spp ,$0#But can we just use MLFs, e.g. Coq? $ 2$E V  0hX P0I Expressivenesstype safety, concurrency properties, partial correctness, & BP=PP=  0L`  0Q ,$0A general and uniform model of control flowAllow functions certified in different systems to call each otherthe key for modularity: separate verification & proof reuseB,P~PP,~X  0@i  0+,$0fPrincipled interoperation with clear meta-propertyproperties of the whole system composed of modulesB3P3PP33l    ,$D 0`B   0D> 0`B   0D>@`  0r0YNot readily supported in Coq!  2EH  0޽h ? 3333D TIMING(|37.6|11.2|22.9|25.4___PPT10j.4zd+D' z=@B DQ' =@BA?%,( < +O%,( < +D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*D' =%(DH' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =+4 8?\CB#ppt_xBCB#ppt_xB*Y3>Bppt_x<*D#' =+4 8?nCB!#ppt_y+#ppt_h/2BCB#ppt_yB*Y3>Bppt_y<*D' =+4 8?\CB#ppt_wBCB#ppt_wB*Y3>Bppt_w<*D' =+4 8?RCBBCB#ppt_hB*Y3>Bppt_h<*++0+0 ++0+0 ++0+0 +S 0`L0 0(  x  c $ȋ    x  c $    H  0޽h ? 3333___PPT10i.[3+D=' d=@B +iS 0 L0 h`@ (     `?"0@NNN?N`x  c $    x  c $\    H  0޽h ? 3333___PPT10i.[3+D=' d=@B +"9S 0-L0 @*>PPi(  P P <"`  ,$D0> OCAP Rules  l  `  6P ` ,$D0@ `  3P` t P 6"``  P 69M fLn. 2CK .P 0 0 ` P 8&  2x P c $    "  P <"`p P,$D0@OCAPSoundnessSl   1P ,$D0 P <D"`PqMechanized Meta-Logic (CiC) P <H"` PKModeling of the machine`  P 0   P 0 7TCB 2" P <"`  ,$D 09Soundl   2P ,$D0t  P 6"`  P 6 LL1. 2CKl   4P  ,$D 0 P 6  S( )L12 2ZB P s *D l    5P  ,$D 0 P 6|9  u( )Ln2 2ZB P s *D ` " "P <@"`  9Sound /P <`"`PqMechanized Meta-Logic (CiC) 0P <"` P,$D0KModeling of the machinel 0` >P`0,$D0z  P <"`0`lT   0  &P#   0  #P <"`  0 * TB %P c $D 0 .T   0  'P#  n (P 0"`  0 TB )P c $D 0  +P 3 BC DE(FAA D(P 0@  @   "`0 O Y ,P 3 BC DE(F D(P 0@  @   "`PZ -P 6  8&  2 9P 6JC1, 2AI :P 6@ @dCn, 2AIn +B#style.visibility<*0P%(D' =%(D' =%(Dc' =4@BB BB%()))D' =1:Bvisible*o3>+B#style.visibility<*1P%(D' =-o6Bdissolve*<3<*1PDA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*P%(D ' =%(D' =%(Dp' =A@BB BB0B%()))D' =1:Bvisible*o3>+B#style.visibility<* P%(D' =-o6Bdissolve*<3<* PD4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*2P%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*6P%(D' =%(D' =%(D3' =4@BB BB%(D' =1:Bvisible*o3>+B#style.visibility<*>P%(D' =-o6Bdissolve*<3<*>PD4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*4P%(D0' =%(D' =%(D' =A@BB BB0B%())))?D' =1:Bvisible*o3>+B#style.visibility<*P%(D' =-o6Bdissolve*<3<*PD' =%(D' =%(Dc' =4@BB BB%()))D' =1:Bvisible*o3>+B#style.visibility<*5P%(D' =-o6Bdissolve*<3<*5P++0+P0 ++0+ P0 ++0+P0 ++0+0P0 +#S 0\L0 "" %%4E"(  4~ 4 s *     4 <?"6@`NNN?N` H 0 C    4 B?"0@NNN?NV@ VI180 ck 4 0?"0@NNN?NV@Pkf1:L0( 2ckc 4 B4!?"0@NNN?N6@  VI280 ck 4 0<&?"0@NNN?N6@0 kf2:L0( 2ckc 4 B$?"0@NNN?N @ f VI380 ck  4 0/?"0@NNN?N `@ kf3:L0( 2ckc  4 04?"0@NNN?N @ D& &0( 2c  4 08?"0@NNN?N pc(code heap) C:0( 2 c  g  4 6<?"6@`NNN?N C0&0( 2c 4 6@?"6@`NNN?N Xr1:0( 2ck 4 0?"6@`NNN?N   4 6DE?"6@`NNN?N C1&0( 2c 4 0?"6@`NNN?N   4 68I?"6@`NNN?N C2&0( 2c 4 0?"6@`NNN?N   4 6 M?"6@`NNN?N D& &0( 2c 4 6?"6@`NNN?N  0 4 6P?"6@`NNN?N Xr2:0( 2ck 4 6U?"6@`NNN?N Xr3:0( 2ck 4 6Z?"6@`NNN?N  X& :0( 2ck 4 6t^?"6@`NNN?N 0 Xrn:0( 2ck 4 0b?"0@NNN?N` c(data heap) H:0( 2 c  g 4 0g?"0@NNN?N ` g(register file) R:0( 2c  g 4 0?"6@`NNN?N `  4 0l?"0@NNN?N 0 _ (state) S: 0( 2c  g 4 Bp?"0@NNN?NF& 8 addu & lw & sw & & j f0 ckckck>  4 0{?"0@NNN?N e(instr. seq.) I:0( 2c  g 4 0?"6@`NNN?N`@  4 0 ?"0@NNN?NpP a (program) P: 0( 2 c  g !4 0?"0@NNN?Np pm ::=(C,S,pc)$ 0( 2 C "4 0p?"0@NNN?N H::=(H,R)$ 0( 2 CD #4 0?"0@NNN?NP`0 J::={f I}*z 0( 2CC   CK $4 6?"6@`NNN?N pXpc:0( 2ckB %4  `D?"0@NNN?Np`H 4 0޽h ? 3333___PPT10i.OP(+D=' d=@B +S 0AL0 P0(  x  c $    x  c $l    H  0޽h ? 3333___PPT10i.5ީ+D=' d=@B +4S 0:L0 ))0+.D)(  ~  s *(      <?"6@`NNN?NPH 0 C     B?"0@NNN?NF@ VI180 ck  0T?"0@NNN?NF@@kf1:L0( 2ckc  Bx?"0@NNN?N& @ v VI280 ck  0x ?"0@NNN?N& @ kf2:L0( 2ckc  B?"0@NNN?N @ V VI380 ck   0?"0@NNN?N `@ kf3:L0( 2ckc   0d?"0@NNN?N @D& &0( 2c   0D?"0@NNN?Npzc(code heap) C:0( 2 c  g   64?"6@`NNN?N C0&0( 2c  6?"6@`NNN?N Xr1:0( 2ck  0?"6@`NNN?N   6?"6@`NNN?N C1&0( 2c  0?"6@`NNN?N   6?"6@`NNN?N C2&0( 2c  0?"6@`NNN?N   6?"6@`NNN?N D& &0( 2c  6?"6@`NNN?N 0   6?"6@`NNN?N Xr2:0( 2ck  6?"6@`NNN?N Xr3:0( 2ck  6(?"6@`NNN?N  X& :0( 2ck  6?"6@`NNN?N 0 Xrn:0( 2ck  0?"0@NNN?N` c(data heap) H:0( 2 c  g  0?"0@NNN?N ` g(register file) R:0( 2c  g  0?"6@`NNN?N P  0<?"0@NNN?N0 z_ (state) S: 0( 2c  g  B?"0@NNN?N68 addu & lw & sw & & j f0 ckckck>   0 ?"0@NNN?Nze(instr. seq.) I:0( 2c  g  0?"6@`NNN?N`0   00?"0@NNN?N`P a (program) P: 0( 2 c  g ! 0p?"0@NNN?N` pm ::=(C,S,pc)$ 0( 2 C " 0?"0@NNN?N zH::=(H,R)$ 0( 2 CD # 04!?"0@NNN?N@`0 :::={f I}*z 0( 2CC   CK $ 6(?"6@`NNN?Np pp Xpc:0( 2ckB %  `D?"0@NNN?Np`z p  & p ,$D0 ' 0.?"0@NNN?Nha1J0(2GO ( 043?"0@NNN?N ha2J0(2GO ) 0,8?"0@NNN?Nv p ha3J0(2GO * 0=?"6@`NNN?N ,$D0@*(spec) Y ::= {f a}*0( 2g   GG GG   GO# , 6I?"0@NNN?NF`@,$0Qa40(2GH  0޽h ? 3333 . TIMING|2.2|30.7E ___PPT10% .OP(+AQ^D ' =@B DD ' =@BA?%,( < +O%,( < +D' =%(D' =%(D3' =4@BB BB%(D' =1:Bvisible*o3>+B#style.visibility<*&%(D' =-o6Bdissolve*<3<*&D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*,%(D' =-o6Bdissolve*<3<*,D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<**%(D' =-o6Bdissolve*<3<**+p+0+*0 ++0+,0 +S 0L0   p9 j (  x  c $@V      0 Y@ .codeptr(f,a) Y(f) = a* 2A  R  0\?"6@`NNN?N *(Spec) Y ::= {f a}*n0( 2a  A AIZl  `p Y p  ,$D0t2   6>"`0 p   0e"`@`0G8Y 2   0ti"`9a 2   0l"` gYcodeptr 2ZB B s *D6fZB B s *DZB  s *D    0(s 0 ,$0KNot well-founded! 2E  NHv 8c?"6@ NNN?N]%Support of first-class code pointers:& 2&CH  0޽h ? 3333<. TIMING|24.4|2.5___PPT10.50K+ Y}Dz' =@B D5' =@BA?%,( < +O%,( < +D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*Dt' =%(D' =%(D' =4@BBBB%())))?D' =1:Bvisible*o3>+B#style.visibility<*%(+8+0+0 +['S 0!1L0 ![(  x  c $     hl @  !@ ,$D0  0`@ `XA generic specification:$ 2  0$?"6@`NNN?N $(CdSpec) q ::= & z0( 2a  aAA     0?"6@`NNN?N B(Assert) a Spec State Prop"0( 2a  aAA  A  v  0?"6@`NNN?N` *(Spec) Y ::= {f q}*0( 2a  aA AI   00?"6@`NNN?N@ (q) lY,S. & 0( 2e    &   0dF @,$0VNo interoperation between multiple systems&  , 2,G4F  `p  0t2  6>"`0 p  0("`@`0G8Y 2  0"`9a 2  0"` gYcodeptr 2ZB B s *D6fZB B s *DZB  s *D  z @    @w,$D0  6Kx"`0Ba   2t2  6>"` 0  0T"` w8Y 2  0"`@G@.Ycodeptr 2ZB B s *DZB  s *D&&  0"`w^Jq, 2  0@"`a H^(q)< 2ZB  s *DG@G  H?"6@`NNN?N X2   N?"6@ NNN?N0 ,$D 0H  0޽h ? 3333 8 TIMING|6.8|27.5|50.1___PPT10. 5 +T~DT' =@B D' =@BA?%,( < +O%,( < +D3 ' =%(DH' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* %(D' =+4 8?\CB#ppt_xBCB#ppt_xB*Y3>Bppt_x<* D#' =+4 8?nCB!#ppt_y-#ppt_h/2BCB#ppt_yB*Y3>Bppt_y<* D' =+4 8?\CB#ppt_wBCB#ppt_wB*Y3>Bppt_w<* D' =+4 8?RCBBCB#ppt_hB*Y3>Bppt_h<* D' =%(D3' =4@BB BB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*D' =%(D' =%(D3' =4@BB BB%(D' =1:Bvisible*o3>+B#style.visibility<*!%(D' =-o6Bdissolve*<3<*!D ' =%(D' =%(Dp' =A@BB BB0B%()))D' =1:Bvisible*o3>+B#style.visibility<* %(D' =-o6Bdissolve*<3<* +8+0+ 0 +^"S 0L0 TL`  (  x  c $<      0h?"6@`NNN?N@p'>(LangTy) L ::= CiC Terms Typet 0( 2 a  A ,  0?"6@`NNN?N`G<(CodeSpec) q ::= CiC Terms L0( 2 A A, l  0@ ,$0Inductive TalType : Type := T_int : TalType T_pair: TalType -> TalType-> TalType & lb 2 & <  0G  ,$0Inductive Tal2Type : Type := T2_int : TalType T2_pair: TalType -> TalType-> TalType & le 2 &P,   0D ?"6@`NNN?Ne l,$08L ::= TalType | Tal2Type | & j0( 2G   0$?"6@`NNN?NU,$0Vq1 ::= T_int | T_pair q1 q1 | & TalType(,0 2GG P   0#?"6@`NNN?NP ,$0Zq2 ::= T2_int | T2_pair q2 q2 | & Tal2Type(.0 2GG H  0޽h ? 3333H TIMING,|27.2|20.2|6.1|6.9|3.7B___PPT10".[3+4D' Z=@B D' =@BA?%,( < +O%,( < +D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<* %(D' =-o6Bdissolve*<3<* D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<* %(D' =-o6Bdissolve*<3<* D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<* %(D' =-o6Bdissolve*<3<* ++0+0 ++0+0 ++0+ 0 ++0+ 0 ++0+ 0 +$S 0L0 T(  ~  s *>      0PC?"6@`NNN?N@ ,$0`(OCdSpec) p ::= <L,( )L,q> SL.(L Assert)*Lj10 2 A AEE  E )  0pU?"6@`NNN?N   ,$0B(Spec) Y ::= {(f1,p1), & (fn,pn)}P"0 2a  aACAI AI AI  0e?"6@`NNN?N@ P' ,$0B(Assert) a Spec State Prop"0 2a  aAA  A   0o?"6@`NNN?NZAH8(Interp) ( )L L Assert0( 2a  aAAA  A    0|?"6@`NNN?NT >(LangTy) L ::= CiC Terms Type~ 0( 2a  aA ,   0$?"6@`NNN?N:n!<(CodeSpec) q ::= CiC Terms Ln0( 2 A A,   0pg,$0KNot well-founded: 2E l p   p,$D0t  6"`p 0 0z2  <>"`p  6P"` p 8Y 2  6h"`p `8p 2  6"` L( )L, 2`B  0D `B B 0D++`B  0D P   0T"`  9a 2ZB B s *D o oH  0޽h ? 3333L TIMING0|12.5|20.9|24.9|10.2|1.9A___PPT10!.[3мS+ĴsD' =@B D' =@BA?%,( < +O%,( < +D' =%(D)' =%(D' =A@BBBB0B%())))?D' =1:Bvisible*o3>+B#style.visibility<*%(D' =%(D)' =%(D' =A@BBBB0B%())))?D' =1:Bvisible*o3>+B#style.visibility<*%(D' =%(D)' =%(D' =A@BBBB0B%())))?D' =1:Bvisible*o3>+B#style.visibility<*%(D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*Dt' =%(D' =%(D' =4@BBBB%())))?D' =1:Bvisible*o3>+B#style.visibility<*%(++0+0 ++0+0 ++0+0 ++0+0 +-S 0L0 ;a(  ~  s *P      00?"6@`NNN?N@0 88(OCdSpec) p ::= <r,L,( )L,q>0 2 A Aj  0?"6@`NNN?Ne% B(Spec) Y ::= {(f1,p1), & (fn,pn)}L"0 2a  aACAI AI AI  0?"6@`NNN?N 4 B(Assert) a Spec State Prop"0 2a  aAA  A   0?"6@`NNN?N0>8(Interp) ( )L L Assert0 2a  aAAA  A   0?"6@`NNN?N0 >(LangTy) L ::= CiC Terms Type| 0 2a  aA ,   0?"6@`NNN?N<(CodeSpec) q ::= CiC Terms Ll0 2 A A,   0?"6@`NNN?N@ ' ,$0 <(LangID) r ::= n nat0 2a  aA ,>  0?"6@`NNN?N c,$0l(LangDict) D ::= {r1<L1,( )L1>,& , rn<Ln,( )Ln>} LangID (SL.L Assert)(i0 2 a  a    A    A P!f  0"`L p  )# P`n * 0"`p 0 0t2 + 6>"`p , 0<)"` p 8Y 2 - 0-"`p `8p 2 . 00"` L( )L, 2ZB / s *D ZB 0B s *D++ZB 1 s *D P  2 05"`  9a 2ZB 3B s *D o o   4# ,$D0 5 0 :<% 2  6 08>  <% 2 8l I   9I ,$D0ZB  s *D8cI  ~ZB 8 s *D8cI  H  0޽h ? 3333B TIMING&|5|7.1|8.6|9.5|19.1q___PPT10Q.[3мS+D' =@B Dp' =@BA?%,( < +O%,( < +D' =%(D' =%(D3' =4@BB BB%(D' =1:Bvisible*o3>+B#style.visibility<*4%(D' =-o6Bdissolve*<3<*4D' =%(D' =%(D3' =4@BB BB%(D' =1:Bvisible*o3>+B#style.visibility<*9%(D' =-o6Bdissolve*<3<*9D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*D' =%(D' =%(D1' =4@BB BB%(D' =-o6Bdissolve*<3<*D' =1:Bhidden*o3>+B#style.visibility<*%(+p+0+0 ++0+0 +S 0KdL0 0( *(  x  c $O       0S  :D1D2; Y1Y2% C1C2 : Y1 Y2  2ckccck    cRB   s *D>0  0LgBD1;Y1% C1:Y1   2ckccckc  0Q:04T(link)2 2c  0(yBD2;Y2% C2:Y2   2ckccckc  08&  2   0d  D% {a}jr rV 2cccRB ! s *D> 0 j " 0 p  T"Y,S.a Y S $p.(codeptr(S.R(r),p)a ) Y S f+ 2,  # 0 P 0J t(jr)2 2c $ 04  a = [[[ p ]]]Dn 2C CC K % 0$ p6codeptr(f,p) lY,S. Y(f)=p  2 ` & 0?"6@`NNN?Np,$0h[[[ p ]]]D lY,S.$ ( )L.(D(r)=<L, ( )L>)((q)L Y S) 50 2  AR * 04?"6@`NNN?N,$D0p = <r,L,q>N 0 2H  0޽h ? 33338& TIMING |72.6___PPT10.[3`؃+uDF' =@B D' =@BA?%,( < +O%,( < +D8' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*&%(D' =-o6Bdissolve*<3<*&D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<**%(D' =-o6Bdissolve*<3<**+p+0+&0 ++0+*0 +uS 0'L0 tl(     `?"0@NNN?N`  ~  s *    ~  s *    H  0޽h ? 3333___PPT10i.[3+D=' =@B +S 0ZL0   a (  ~  s *QD   D   0XqD ' ,$0Thread code C1,& ,CnCertified following CCAP [Yu&Shao, ICFP 04]Assume-Guarantee reasoningThread modularityDo not know about thread queuey CKCKN,X 0 TA ? ?  T   D2  NXx|DV"` 5G,$D06SCAP 2  B D8c"` @,$D06CCAP )  HtD ?"6@ NNN?N @,$0?+"( 2EP  0pD  ,$0Scheduler CSCertified in SCAP [Feng et al. PLDI 06]as sequential codeManages thread queue TQDo not touch H(' CKBBBBC BCH  0޽h ? 3333F TIMING*|16.2|4|27.5|1.3|22.3B___PPT10".4P~9b+D' =@B D' =@BA?%,( < +O%,( < +D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*++0+0 ++0+0 ++0+0 ++0+0 ++0+0 +t$S 0L0 TL #-(  ~  s *dD   D   0D"` PRyield: pick one word (pci) from TQ swap pci and r31 jr r31S 2   AIA>MF `   `   <D"`DdJH1,   BD DdIpc1*   BDD`dcpcn* `  0Dd  0DD+6&  2fr  6 `  0D0 4TQ 2  <D"` `t0   <D3f"` `$0 n  0"` t`  0D0P$Ir31* 2   0D0tHr0* 2  z `w  `w,$@ 0  <8D"`JH1,   BD Ipc1*   BD`cpcn* `  0  0D6&  2fr   6  `i ! 0D0w4TQ 2 " <D"` Z ` 0  # <|D"`  ` 0 n $ 0"`  `  % 0D0  Ir31* 2  & 0$D0  Hr0* 2  ' HDN"`0 `2 ( 0p   ) 0Np  8 & jal yieldct: & J 2 A EAI  + H N ?"6@ NNN?N;p"D Thread code:( 2A , HN ?"6@ NNN?NlP0@>ct ( 2C. - NN ?"6@ NNN?NP0,$0>ct ( 2CH  0޽h ? 3333 & TIMING |35.3z ___PPT10Z .+5\˂+pD ' N=@B D ' =@BA?%,( < +O%,( < +D' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =+4 8?\CB#ppt_xBCB#ppt_xB*Y3>Bppt_x<*D#' =+4 8?nCB!#ppt_y-#ppt_h/2BCB#ppt_yB*Y3>Bppt_y<*D' =+4 8?\CB#ppt_wBCB#ppt_wB*Y3>Bppt_w<*D' =+4 8?RCBBCB#ppt_hB*Y3>Bppt_h<*D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*-%(D' =-o6Bdissolve*<3<*-+8+0+-0 +&S 0L0 %  `+90 (  ~  s *TN   N   0!Np  [yield: (ps, gs) pick one word (pci) from TQ swap pci and r31 jr r31\ 2     bXr  0`   00N Zgs" 2 l )   9)  ,$D0  6:N)  gs ("r{r1,& ,r30}.[r]=[r] ) $Q, Q . "p . Q{[r31]} = Q {[r31] }&\ 2  ZT P  4# `  2 6A ? ? P  N  6\FNzP WFTQ(Q)*p R 2EEA  6LNz WFTQ(Q )*p f 2EEA  2 6A ? ?  P   N?8 `  2`   <@SN"`DdJH1,   B YN DdIpc1*   B]ND`dcpcn* `  0Dd  0bND+6&  2fr  6 `   0gN0 4TQ 2  <kN"` `t0   <nN3f"` `$0 n  0"` t` " 0rN0P$Ir31* 2  # 0|vN0tHr0* 2 m 8 `w 3`w $ <{N"`JH1,  % BЀN Ipc1*  & BN`cpcn* ` ' 0 ( 0N6&  2fr ) 6  `i * 0N0w4TQ 2 + <N"` Z ` 0  , <N"`  ` 0 n - 0"`  `  . 0N0  Ir31* 2  / 0@N0  Hr0* 2  0 HȢN"`0 `2 1 0p  6 H̦N ?"6@ NNN?NlP0@>ct ( 2C 7 NN ?"6@ NNN?NP0>ct ( 2Ct 8 0N P  ,$0,ps $Q.WFTQ(Q) * True~ 2 H  0޽h ? 3333I* TIMING|16.2|6___PPT10.+5\˂+7uD' Z=@B DF' =@BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*8%(D4' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*9%(+8+0+80 +-S 0@L0 ,(  x  c $PN   N   0\N?"6@`NNN?N "((p,g))Dscap & 0 2       0Np l0 ljr $ra( 2CdB  <D3><<XB  0D<XB @ 0D0 <0   0N0 Kg. 2E3M3  08DKp. 2E3M3  Z?"0@NNN?N @&  0(2dB   <D3>@ <<0 f ! 0"` " 0xN@`9D 2CX # 0P0  % <`NP0 ,$0: Soundness:  & 6QG A ,$0(&yscap%scap C:y scap 2ckcc c ,  ( 0Q  ,$0( Y (yscap)Dscap 2ccckkc  ) 0Q  ,$0N D Dscap,Y% C:Y  2ggggg  * 0Q,$0,$Y (y scap)Dscap 2ccckkc  + T 8c?"6@`NNN?N @0 ,$D 0` , 0)Q"`0 ,$D0FDscap {rscap <Lscap, (_)scap> } $ 2     HH  0޽h ? 3333F TIMING*|28.6|2.4|6.7|1.9|3.6___PPT10m.=5+<D' >Q=@B D' =@BA?%,( < +O%,( < +DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%%(D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*&%(D' =-o6Bdissolve*<3<*&DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*(%(D ' =%(D' =%(Dp' =A@BB BB0B%()))D' =1:Bvisible*o3>+B#style.visibility<**%(D' =-o6Bdissolve*<3<**D1 ' =%(DH' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*+%(D#' =+4 8?nCB!#ppt_x-#ppt_w/2BCB#ppt_xB*Y3>Bppt_x<*+D' =+4 8?\CB#ppt_yBCB#ppt_yB*Y3>Bppt_y<*+D' =+4 8?RCBBCB#ppt_wB*Y3>Bppt_w<*+D' =+4 8?\CB#ppt_hBCB#ppt_hB*Y3>Bppt_h<*+D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*)%(D' =-o6Bdissolve*<3<*)D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*,%(+P+0+%0 ++0+&0 ++0+(0 ++0+)0 ++0+*0 ++0+,0 + 7S 0mL0 .y(  ~  s *KQ   Q {l 0 p '0 p,$@0  <TMQp3S2  <@QQ"`0 `@p1" 2   <pVQ"` `@p2" ZB   s *D `ZB B s *D`l   $ ,$D 0  <[Q  6S `2  0P   0|`Q0 RSpec. for threads: (p, A, G) 2C  0SQ jp: State Prop0l 0  % 0 ,$D02  <iQ"`0 Dp 1" ZB  s *D  l   & ,$D02  <oQ"` PXp2 ?8ZB  s *D P  0DuQ 4A, G: State State PropJ  0zQF 0 ` ,$ 0RStability of p: pi S Ai S S pi S * 2C   0xQ  ,$0DG1& 2    0 Qp ,$ 0^ A2 8 2Cb # 6G; p ,$D  0P ( HQ ?"6@ NNN?NpW,$0fA1, G1D( 2AIAIP ) HQ ?"6@ NNN?Np W,$0fA2, G2D( 2AIAIH  0޽h ? 3333#l TIMINGP|27.1|7.9|4.7|5.6|10.1|6.5|11.7|1.5|27.67#___PPT10#. 54+߀D!' Q=@B D!' =@BA?%,( < +O%,( < +Df' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*'%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*(%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*)%(D' =%(DH' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*$%(D' =+4 8?\CB#ppt_xBCB#ppt_xB*Y3>Bppt_x<*$D#' =+4 8?nCB!#ppt_y-#ppt_h/2BCB#ppt_yB*Y3>Bppt_y<*$D' =+4 8?\CB#ppt_wBCB#ppt_wB*Y3>Bppt_w<*$D' =+4 8?RCBBCB#ppt_hB*Y3>Bppt_h<*$D' =%(D' =%(D3' =4@BB BB%(D' =1:Bvisible*o3>+B#style.visibility<*%%(D' =-o6Bdissolve*<3<*%D' =%(D' =%(D3' =4@BB BB%(D' =1:Bvisible*o3>+B#style.visibility<*&%(D' =-o6Bdissolve*<3<*&D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<* %(D' =-o6Bdissolve*<3<* D' =%(DH' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*#%(D' =+4 8?\CB#ppt_xBCB#ppt_xB*Y3>Bppt_x<*#D#' =+4 8?nCB!#ppt_y-#ppt_h/2BCB#ppt_yB*Y3>Bppt_y<*#D' =+4 8?\CB#ppt_wBCB#ppt_wB*Y3>Bppt_w<*#D' =+4 8?RCBBCB#ppt_hB*Y3>Bppt_h<*#DA' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(++0+0 ++0+0 ++0+ 0 ++0+(0 ++0+)0 +aS 0[L0 `X0 (  ~  s *Q   Q   0xQv p P(yccap%ccap Ci:y ccap 2ckcckc c ,    0Q : .Dall {rccap <Lccap, (_)ccap>, rscap <Lscap, (_)scap> }C 2          ~ $  0T   (Dall; YcYy% Ci: Y cB 2ggog6h   0@TLYy {yield <rscap ,Lscap,(ps, gs)>}Z' 2         > j  0Q&   "Yc (yccap) ccap 2,  T 8c?"6@`NNN?N  n  0 T&  &Y c (y ccap) ccap 2,   0+T?"6@`NNN?Np W.((p,A,G))ccap lY,S. & 0 2  H  0޽h ? 3333___PPT10i.=5@Cx+D=' Q=@B +, rscap <Lscap, (_)scap> }C 2          ~    0`sTa @[,$0l"Dall; Yy% Cs: Y y 2ggogX   0Ta [,$ 0(Dall; YcYy% Ci: Y cB 2ggog62  NXTV"``A,$D06SCAP 2  BT8c"`q,$D06CCAP 2  N?"6@ NNN?NA  ,$D 02  N?"6@ NNN?NA  ,$D 0l  ,$D  0  0Tjthe  link rule0 2cr  T 8c?"6@`NNN?N A  0T`,$ 02@Dall; YcYy% Ci Cs : Y c Y y! 2cgo o  g  o  k  c 6H  0޽h ? 3333d*B TIMING&|16.6|2.2|6|5.6|5.2*___PPT10).=5@Cx+dچD>(' T=@B D'' =@BA?%,( < +O%,( < +D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*D@ ' =%(DH' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =+4 8?\CB#ppt_xBCB#ppt_xB*Y3>Bppt_x<*D#' =+4 8?nCB!#ppt_y-#ppt_h/2BCB#ppt_yB*Y3>Bppt_y<*D' =+4 8?\CB#ppt_wBCB#ppt_wB*Y3>Bppt_w<*D' =+4 8?RCBBCB#ppt_hB*Y3>Bppt_h<*D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<* %(D' =-o6Bdissolve*<3<* Dp ' =%(Dx' =%(D ' =4@BBBB%()))D' =1:Bvisible*o3>+B#style.visibility<*%(D' =+4 8?\CB#ppt_xBCB#ppt_xB*Y3>Bppt_x<*D#' =+4 8?nCB!#ppt_y-#ppt_h/2BCB#ppt_yB*Y3>Bppt_y<*D' =+4 8?\CB#ppt_wBCB#ppt_wB*Y3>Bppt_w<*D' =+4 8?RCBBCB#ppt_hB*Y3>Bppt_h<*D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<* %(D' =-o6Bdissolve*<3<* D@ ' =%(DH' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =+4 8?\CB#ppt_xBCB#ppt_xB*Y3>Bppt_x<*D#' =+4 8?nCB!#ppt_y-#ppt_h/2BCB#ppt_yB*Y3>Bppt_y<*D' =+4 8?\CB#ppt_wBCB#ppt_wB*Y3>Bppt_w<*D' =+4 8?RCBBCB#ppt_hB*Y3>Bppt_h<*D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*++0+0 ++0+0 ++0+ 0 ++0+ 0 ++0+0 ++0+0 ++0+0 +S 0L0 0(  x  c $rZ   Z x  c $sZ   Z H  0޽h ? 3333___PPT10i.=5+D=' T=@B +S 0/L0 0(  x  c $Z   Z x  c $Z   Z H  0޽h ? 3333___PPT10i.=5쳯+D=' T=@B +OS 0L0 ^V(    0Z ?": H Thank you!" 0 2 c  (H  0޽h ? 3333y___PPT10Y+D=' T=@B +0  ,(  ^  S    7  c $ f7 @  7" H  0޽h ? ̙3380___PPT10.+.P"0  8,(  8^ 8 S    Z 8 c $tZ @  Z" H 8 0޽h ? ̙3380___PPT10.׹+0 t((  t^ t S    Z t c $*_"!KA,$4U*U,_iKCr5_Mt s8x(iPj#uϧ>ǨyXե@( D ZAu]"t[~3u8>.+EU}/(s$ ZR]Ps@*^W!9M}0#5'jXZ @+@k66HݖP;@{@## p' tt|Զ! HCڞ@@/@o@@_@?@BK"CC|@$ # PF! ixH PɀoS7W1F]}?WYo 8Q4>^-_k7`j.p4Ɩ/t鏌|fߙYـ9yEŀ%,R2r J?Vk9uM̀[[~vvv)]1I~ @4>0ppp pppp ppp@ \\\ppppaMwND?~jt1;WW4'G}ZzͨYBW#6P:̿օq&q߬fPS~0Z¥_=?e5cm\i.AYEl;T'>QW Q5#țhα5Rϋ7E*kwjVL=xJ W)!F Qbe( _ pA !3̸n b\6Ÿhq`1 Q 20i񋁘`'#`/c>"t?ac38jpVap1F?FꟌnT ËzLpe;-b)u+ÈO]?1QV0*(J2q"bܦLfܢ$3QP<@9 q8M2NQ|').̰:Ajugu":Mfu2%*"k5-m= JNii[UPhV(VUJYQU5/okGuCտ?`yڐ15@lr֯+ )jBl(#7z5 gb\Ӭw bt?.˞)4GT\bAY B"{诿B;wT~Dh$>r$ׯrQ˖-M_HQr'墽 QQRwѻ+RX9̧i>͊VqIqIUaU3Ca33+&Ad?ed!^ZS~B<^2)A?JNLBp:B'E ! z2qA "#'Hf Pa\T GbKiyɕ4l\J_N,WT+VT&*-NH+-+.]|X (l)Hsҽ Es'J-r\I+rǰ%h3iIa\B8a0Fh 蘩u@B3~'D.$,C䎸W!ަ1i1Љ,,LI[ fdBȂd ^j1tr!z>eL4( ZJCoO1t GJߖv<0f+F1SrTYd U>+sXf.JEo G|W{8ylku|m9Udk&Q25A42K7OJ7wnM7)Y`cD7Y7Y,,hcȂ.0Z`d*\;б%]L:I%%tw5$-LJKt7+n^ݢ{.V"$Juj:}Y<(T:.7F!-L{4'ILt4fؽW ]%2e,XP/ ,sȾY-o5Nl8Ћt7!lt)T)S Z<8x|3[ti!4ΨE̶,$wv%mV{τ[,EDE&7C1'Ci+W_ڻo.ft;aM8N8x RYc'ǞdvR}̋K xs=rq_~G4 !6\)˳gD7L@`-64h†6.Swtg2=:ln! :ik.0t>d̮cǥWsT.-"c+~ oI.sL xszq3mr]`f~زH1簷U~ڎMc'wQ)> LldWڿNH -S'?O--v̝}Wc.[U$…v?ʜIJ9 <]a<9HC 40dv/qXe!sH~jY%iHKeszDS:UƢIf#[,Pqvs;9 x[. ҞVcR<|f;NȮR;<3-2J׌qcRYvsg4|h^pJK{_>8ߧ?>i0ad蝐;!ӓ8%3֮sQ+tZ]%y%'C``~qƼU iR2gܹ/x<]A䱏c>t}dG_=V 0ѴҊҞe}7`]FTRv[C{Y; $8}*^E#yP^ɼ=PqfǀegGgdMZ85{av:qANvP%- A0kkRӣwqC\ď>&g$/X_pE\%>(Jnqr7 '@y%_ifA}Eo cKHIkwnDOvQ a⹲U2,W|A|GXL@@M,+I̔lLZtzR'E{i) WV hMBwjzT1K T35H>2fIOQ|jsg.a(8i^L=S2t],v7ﻸ|FS>8ap壢m?d-XBaL5o馩[ee'>g4X,8q"ݻwV9k,n]DDDL&k{9u_~ɮ )4F9Ts:ܧZ233% /_%/f(XZZBea_O`vv9u+<ndgnI_AঃæMXಖگBc4Vi蠁pri9ZS[|E C VbXq`dd$fNäQj>_'W8XgnͧZ@qKt{z>>sWr:z9uuN]:|% |Zzն fM KRZ^i^ShJH@ts9s&DLfn]LY LQ^)> ;XA[ίY7&' $8 0!!A-pY'Hêy#Mc@kZ۸ؑMbggxC60"0M:U[׍;+X؏a^ڥK+cuW4C دE&LOݼ==>dv훖0CۻzAEìʗV)P(MbS23351;n%xMx `(8|ٺ@O}0v}itP}+3<4x˺WڠAX|Shhee6p34u/uh`498;;&sMD󽽽uuSӧO&dܛ٠Pr `~}gm߾G<lFa)4pM`f8r۫zOjOVK=ͧ(H {T^ȅVwzUO`W;@BFi~nݠ6 iV?LQA[ԽJg! 4߼XW ȳA[JBxxC͘ЬL][SwqcMA0u^}Ԙ )+?L"؛ z›88lʺfOR(vTM`PpC{fdٴi{d^_0M*0P{ mY ھNAm!"}pO[Ji,wrΐ=ʟMkB@e-N:9z+Uu|9]n}t'lakٕ+W{SwnڅFJ{bbbPPЇwa4T֓}Fmz0|/o}{YqMլ'AkMM]/vQ4Ryq8XKqg L޷飆!CbE}Ao7iabGi-[hТU+t/瀗!x\8Wx{{5֏IQ\\\MSODw}M:I5'N}Hj{j&;\rMv&/zʇ_/э>p[\bR?}ۼSϛȏ `aiik7t3Ŝn/H;azVccml:2zh?w-4ETw5E^5Rqtbnh`CC4PO//+j~{;"""\}S8wX,RNx4>h8I vo]I+4 5k'^d>M hO5]wu:xxxQiݺJ{&Jw@,F"&uG7|)~u^]zOp5id8@pm۶"4(7y7`)$$$aYK`6A܈ @mx HOP'POa1l̢ӷ?w-S$EA/h,& ~sY}f.*MZTKJA` Hs/` B75VT^?_,,>3z DʟrSA]n#8u֚4bo)HH]/ф_x= 砮@_5JB`jzfzʦ^)?AM FDs~g\ٳwQ]Hif"ܦ^)A]y D5PSޏ#@zfMSP]["z޽{O)8hh"y٥^fDH֬hO)/9+{(;{( gSiK4t"]ӹ$UpZĆh[򕃵lf=nÇ ~[7p+]>-!j+?՚D0:ӧD4`!8 E?>UFu_4/  lhx|vysɧ JN]dd+/NHHxSzoo/-|A52uVtç ˗k^Rʯm;v,.INN־4?x,L5̄Va^loo׸M<צohiY9XY-3mz#l/j?+ FGѦ];#^!lyVDk [PMYA!_9QRE^bG}vչʙ/N>!j8{*tr/;n  뼸rj!OS{e8+_u B]n_9p/hyҾrWOrW W~볽2/~`='5+?7~HWԟu+FelGŎ|~_9Xiԍ~Z[lݚ秽&qW~isݹd}uo?_9i\A7Ƃ^'F&jpP+[r˒A :uegg.t~ 4Z}ޭۯb৑&aV^Ϳr-Zشii(b4rHS1? m;zq*٢zƃe=g뼸rjTYYillywCSOsve=o+' %=>%n}`'00pΜ9_x|6ּg6:*"" z~0Y*ΏFhy{/Qjˠ\g0c\ UdnedEqHAvFɸ]Sb}]1h|J<.?95|o5{|Yq(]@LK6gzK"CȉVg:\9y\AHY< wd\p>l3D⪡iyOWy.J[!J=Q!J@]AH~??K[H[KE;NB+!nfh&l)X%Wn8$H@kUօD%2k)WRȕ0 MNOBuG(\I+ %NW\݈dr$R2lrD,)mN⒵L#B%%&˕mJ Yʕ9dc*0?kUK<Eel\vWQћHͧHL:2lGɪ)J1^ٞA$ x&v8BX^te4 IcFgU1Ӂ*gffdK++?~X6666~lly\ ki7888P.p`>om@!.>@} < xP@) P<TOOn#?*z򘷙UYUs,c{>&GDݣw;DORxP*Jx0+I4 z#D{g2q\|40'+4Q"m:m)m6b Q|<:*A c SKG$QbGQ'ĊIMSq#Xף'QQcQ$V` &ƳFGŏ0g1mqхUE|NyHʗXJZI|8cFVr= ʕգY_^+WJ#p1&W>.J\ҍf)+G` aq caUfPi{E{9!QD :)EnɪrB-}/ӧBK1ݜhgAv:[|K|K%|KJ2I8g'<0H!je⟉/JMTZRy`X$_0 O5:c1Id/LJ&E)ЮN,oq,dVO$pBT B$}@l23:g@Uk@F`Ϟ\fYm$&In}g.f,W;ڍ4H?|m$|P1C,r; uyK[ZqT?P"P]7G&?UXڃ4'۰LX&+mvuv? 'q)TlĕJ EMRUbHhD$NTq1:*96JgQYObDX;ҶuyqIViaUDvrD̐+ t/fj_?8-;yE9Xޙ})~w-5SHwVѽJgj-ahHށؕ}x^.g6IDE.Ie˳Fhz4J[`l O ?c`-="Z˫;9Kv>\P۶=ں;3\AUU:n\9:;ETYm {b/lǣSyycGhGݡD<⒇c?:N?Cv.czL;K <CIPB!wB>DngugQ$ yp&^E9kz_Pg=]lcZF_cpMYqsLy8>3ZbyIg9sO[M[F?'Wy'gIlU#}M:!t͙묳V- b1$k ª}iEe9fE1b7TSo=[zQR_38;yt!kȘ7MJrrI?rL_¦N2ΏhT]y3)eF]z~N1!H cRU6$V0v Qh<#.iχ*GEœ^z$SV;ۦb{6Z; 1ZDŦ>#H -sCI F5'pT;hƃO,0>\;OW;6-]쑳DbBށ 9qr~T+Pe*U]E8~m[{`:Λ|ϷW [fZ׽\ &V?t}mɓʲI` n羁}w}wo[BX&k}7MC"JϝHZT3'nӫv#qbrNZ\\p%1M*oMZP{"D0f&~nNj'nd{|8N&sơm[XRoeP?,aV<0K1N8!-ftTR LrXdY Ww𴽿0&tJ2qnS+ܸ-[[e]j;!2;Bͤ(Lg:މKCs?ׇ*"x va"&#Ƿ86;'P24%6{h8%}/Pm'6ǔ6(g" 3gA3d|jZMYhb6.F`ExF *YQKƏ$etT lNJ$LeD7' IAr28($aKX/ +K)$''$ RQstC=b>a:2MkeUVCwLKSJN1U&6$jC7fǟ1iX6<Z0(qɤvO'zc$y}B̎<9Ώuj˜v}м̫qfIBx6plkw>90mF[K\",\W$PŞ[aI1d_G쟳nvg@"[зk)4Q ,wYTifXe|RBi^[UH"LL)4Km& ׁ ߲Țt:85 NCT?" FkTr卛OGc1 <%ڏB|Ob(U[L!⣚fm`tdPS2s:J?)r[Lu[sqf {jKHU&8C-OJߎfm>oP{gEe~-هBt'WvzVGA%]C|- J0)+;nfma&qR:C/\@@-Ej> hm.`!-B},00?lCo>u> `̙,,hς_ WU(w*alhO9-fgҴ+adyٟrehdZwBeii!Z6Ǵdg>œǸnYS X'4\=zԜMtk󪢓Bu-UѢj7sp-|ĺsao8py߻{iIjG0i0iDLi²+ .숫 I3>0Nf0Ϫf1xEcIܫjq*xEPk<@Cp@V4ai +Ywдj2@AsOL;,As՚Uf^'M][P+rvòj\iV<ͪZhҘfs-4ҴͶZG쪥4]@s&44}As43h kIZ)dFQK34e4Y;yVK4x-/!~;>= \u-0kiM-CҔC-s8Ґ4@]Kcoi4}ki@3.Ç&4 f h94Y4A& 4j hv՜ZiVf^74iƷf(hji&fhrjip{ݳ8 c4gAsh4w@w-C\mNp4ͣZiڂM+m@Pk|_MUVjk֒Ƣg?i&YjKmI=5RHs?Bm|kaf̫ۛQ:d`("DԬtDY3@@ܐ{<^o"~7jv/ִznA 0{TB56Ya^Xl>qFD ADk9ؼDR`h!4Ҧ=m8-6v q2շO$WB( ^ޒxQf ˶ Hpp72RQ3$mކsD}aV.5L,t'-qۂ׭^'o'{o8X\Xs)Ln\\˚qP`p('VE&bd:{ ,rSږ,6Y,gYt dY8fY,3fg)!DB^EdG%'( %'be#vdq #HV{dB؆f 95I*!e͝lk׺[+.|y0s )$2VN\X2͋ѥۮ?1°ۮrƦT\3 ac/݀[5wꁫW V$3^\ot$`so?9bQYT7{Pɾ/LJ1#R {C؈fJ-g0jX˕-re+6̟<ؐU} t,AȰɾQȰ{SH`(nFG0mؑb_B(z 3a'|PP&Î5(^DGCzRd7hTM JH iMg0mE.[8;A !(~pKg6dJ(dv3XtDNiv`7? PwNFujE.y(LJ@Ba )N*BQ- 7>-KL{Ĥ{I!{MMkĤI1%K!1&r忋L&rBCL<_s&^03J4+9阉\c6cgIg20h\Sh'u8%1Dm``1RB?Di^=_:v䔺Np|{^?ՏHҪcwJ:-ĽxCǀgl 6C*Ew֦ (y~1 ;6M# ?}nWZEsw.JwO{DYN)3PR}{Dmťo#ݾw"}q*GxsrAZ"Bd*;λgΥDׂA-CڭCa,eዅd{T#緑_OEEx+žk@*&Y,FRedQhΉ5e= _/Vy3r(9+- rpʱ'E ^ϋ*GGIBKP+);Wv4,fEh4A 9Xjv懬V9$-[9$b;pR2W-(ֻ*Lo3F~vL!:Z.xP֊s|J:z*#=ex [[^*vw!EF$;:n=gDr#zx3#yŜu?C5ep9o>\aOΰYGkSQu߼KuY5~O+9\ΠgGsţ샧GYfm F"#I;"[FI6rz3#GF'p$зC!3 H$IE|TmswD;p#dOy16R}5~&>.?p$]rڅy%'!.䪒Œ[Ό+$N oZ;3G,ZMNussr杰d;|`Љ,[zqo"jȡp 3[D;(| a'3,\&s` XmFHc;o-s}2*IZ8X9?wn;"[=m8!{+Yv8oϛ /6Ƿ52|n|t[M˿twO30ȵ5D޳Xlv'|C!ڎ6=E>G"~mycSޱ]g+B8AFA|!EI%FmڳFR~QNB8OvRI[ژ{:|.~sE~iL59#syϙ3_̒Lnyofe(dyҘY+fΗfde3q\_AGͻ}t*"e2HEnvr}thd|j6btI|OLl;1[W߮c]>_mƏ'.(wJcn<JcrheT_}eeG4d`R*S#=\.x?ܒ*f2; DŲ=2tMNy.9,>Qbbւ(}V= L( ?L~AY Tn.>ޘpMh}f^YNv4ĝhvrV6mc.zǷ_!Zyݾ33a;O>/=<`Dr6{lUP*{+G|fGN)3UBBvzRu]$7w@aAFu-WH{?#'m?5wzDka;z88dFtI/6-Jk]Z5=¥h=2Pзxsu uAI 2fN>.7\_po9\"qK.ӥE3X< M?y9+ fNdߟ݂?k,"m Oo㣲g llAom l)Aʾ?!.(RNiOڰصd-KK,X.ږgڥ{iUiӨ&m~/ld̹U2<%/ߕ/:P;,^=o}CfvF'd1X} Дo% KHIBDAbK[xWKLSS*b~Ϝ* _/#=)&}(UI/`27%ylL9UPVƚ Bj#is*eTVtTp!EbG[wRo2oN?'9KM8:8F3-yzFyhלż4$)4& Qas|yyIg2//8z]{[vLqy{h[L߮Q.vjlw[ũDEEgHGʌ崢#6{>x̰EJdT!b[Fnrbrާ D8Yw5mIfi! $ ր&qՀ]b߈X{ v"bYшv#؍Y7;|ooϻ{9g GKW[DZ^a+FBڪjj񝪏 ս^="Q5[Z7Tɺȕu^^TvԋR {9@]؏gu=T?JЃnʪ%Љ+.y9zgyPiusg"A%]վQYȞώMXwg(=oGAKa/#UDĥmpicF|o1zj ZVC#VcVÎ&OμИh\QGXKPV<y_XJLxZ>W5H[(Kdhh/3~)tѸPޟULf TQl>ii_ٱ(?,?ߙT6_-2ʲ,Nˀ{U .ʾˎXu1FmvV{`z鷺~nBJn⏻l|'ry||,gr8|U7z?o)=XV_'Ot;BLwd3M3eMнym2M,`{٤0:<3 )fæC<;úܱH }q06hv~EY)!"fu6H\ً=&^]YWI9_&oe_{Wq.Rz$yįzǓZS5@#2CجЬسplIȶ/\*ɯxf}&gHLQV7/ wd 0}Í c!gZޢ ̶@-{#TST5ՕDEP3%T*QaKڍhBuT V~>xzjv}\_mۗ; ? @cU]d޲Du,Zdd[edgdŲ':Y<*$.ߩ]9,o_Ur+Z*\=(4+@"CqTqAqW^!Px/rɦ%Ҥi|j!P0d[]%zmX,[auS~ڤ.S3Mc4]45jM&E"*1l78H1!Z`M<AK;T;Q;oAxK/-/@|UWgPs.Z'mwc VG wi[Aټ%d苃Uqܟ:Ξ{Ɣn=D?܂4\.=uwF֙';;g!,:?"Uz۳PZ[9>FJ{v ΣjW]" |U9*#,\2xe@9>7흑U6ޫj_-6{e}3b;csSRkon{?ӟ7ȟ.Xh_ Q266fͽZ~{ֲgV?ړ p{?R) FUw ULYPuwB1~2|HBt+sJ*H9x|Úmf[cT?\Ξeaؘ"nJRټgSBa_q8 FGH034N5.4>J401o"g5(w];L`Skev`iiLfGss7+5/5f1ub">k's*Ѣ䫲[ГaqP_VR[\g)?5g5BQ)_l񝧨|j6>ܒ?~j?>Xa\c6#2ll ̓.ўݐn6 kD!Xrܳak&ke+,0фE̴f۰°9}qWIda8d.㟒QvHxs'MwXwN,սнבz-upҕqM9Z_߬HWL4a6^j6a>BlP] !L7}`!K3d ,B]B*ʋ8mʡ5]f|dDyhY?3A2,4sNgYO-oW[CFgy9o`(5-;irU3{Z#Ϭ]YHU÷Xt?U8p:k ]ޙA!9osr2 -22wu[((eʧd-UfG;);;>n95Ϟ)VG;ݢ*`/~O~8.>C/8 wCF&RBӒd;e9;$0Rŝׅgrrsr3y|YA g^]vnx }5snA#:i>>w-)cbGRB76#*GEsBWGA;6}=8'\x:^^^F]>$Տ<{kBD'KfZZ?oy2vDs{B\P4kiɸ`=9q6G f]8{F#_vt9-%U;.GOFjڊ OqFg\} = ' QFrʙsF54֙1k/:JmP_@AL:3n9hN^= s06Wܰcc:'3Gw߫OlN؏g\@_&ڝm*0e0}ȿQ*b'2Oma3gM7hj3f6%fgkif>MЊzOu_+(tefk͠ź]cZpk_i;i:{Tۅsr/->32> yL;Jg"RbU/waUYH:Tm uZɬuԤlѭue%Sgݘ9XިާUk̚}gY!xѸj:hziR"YٮVsVLVp ]_]#8$Zl D>^)9JսWKW,Jղ]5[InVFS_Q\ƬU:rL2F>>'k&`3VB,!9-u]ZP.Ιc'wGɧɵ$Ny̭bs@5#Y S̼U LSRlURQS':rRUCTQ*0SU@*hrj4u[u1q30 Z.c=DP)\Inϖ \Cnf3mnTB^Kꀋ[CǨ:J{.1Wt)* pjj,wނlὁ}AMzk~}>W4;>'ǬPޥ[1"f;>XRp{s:>o'C':jt:@"fꑲb@RـګA)Glm(8Jb{C{ F!'Hyԇe^wٶ99V9`.i+@GC˗XeA)vmʦ{&CR: o$W޺jWW1Gߠ%]וmRLz*8EE*/$kFiiZkA w;\ WMPU-^W6Z.?/ŗWTwRﳀ\q$h煄\0{RBdnc 5U*;[srޑκr&2RjU7z:HYTT1}G}[DKE5l|ds԰)o<5%LJI1:KI_<ԣzC;A{d I.nKBK=ሷـ) Nu$`X63~F4.Mff&b.QCsDw5y,H;wֺX&Ei[Y%iK`s m֢tvQ.6*Zsl>.B>][tN᥌Ժq"WI~!軚1hfhgPB_f6~)PްCNO3cnjطQXE]zn38"J47JB|֔diΛ\ބ,oL0/9Mj|l2ߤj̈޲B1vK˨OУm >XΨ%Av㥔= Q`6LNSשk }}m$D7=uo#Kd^$형:0YVF&;,;'+2R"7$m}Ć$y'E9)*Ƃ)Vv5(+RoO(.+rXSz(' +5P2XMaR9wǂTXw@RuVP S_HT#B8lG }545xx-s>f򄎚~v]Zf@ni*44<ׂ ڹ+nvj]Q<3'J7S)o:*N!&}G}~~vswOz54VeX$A ?°ppiGAyWP]NƶƷ!(㶨fN}(-/.,)-+?hdİrXd$y~jL 9&?ht0FJsNafTur" QY- βʲSurRlybZѲ"϶T^hY4ʷXxjZ5dr)wV9!\g+(\ϯ d2?YYDtZ]QOQ^[doE2FʵsogRՄثSDNB'[wUÓcuc)=*me7Ϛyn{M샒x#DuT v ܛȍڙ4".~|93&e-Flќ-M3֠˟L9Wp?܃_9cƐ!.PP  ¥CX=}&tЏկqcgR%Ꮛ w^~z/Q/ՃbMXw1$(dfZ#L{dV˫w ԥ?R6OXQ]5& 6}Ȯ*B.89|e_fe&?u-发I+z&UC(hٍF~p%&m=uރ3&9/e%cO^ ,b(` g/7M(c-PœoN3?NwL>żڶO0{o\cۡ*f.O>m m_}~"ctǡr0\^#_ g!vQ TA~+}>ZgecA] 03,S_ܧU]S=RU`#KYM o!z5MgWxu%͑Hw`yaaԽ54`d<7>׀wBRO7RTg󵏴efXhy,,κeεؼEǰj[ }WV=VW$7ijtPf1 J'>Ÿ ƯdcQcHthx[mO޷Vvy׿ƙ JGiæsR {i-͍Ʀhsy|21w>YԐJo˒>=SU',qU~kBj RWY9괖Jw~u{nkԷ/Kh7;|`(Pm×wWeY&p"! E2Q[%tH> WZTZVZ;+ J_ivlީڹڥ!һH''ĕVv}jP|$u @mSP!t*ji^ %?ʸh LzϮ#tͺv @ \M&}M 6>(ѹ,{f>aRx^/jJ+ydzpљɊ  ST$1{^B1e_p#b(F4N-)i xNltmŽkWzA]05Gop9 X>}S1q$8[;ςA/j\-!r9 8|GXm]ܙ[moDФ/:Wi!9uʬVZCBf гJJkYi]JWcu:UZodWcmAJ|̨_98ĮpT5Pnf&Nt( z%HfZ&HYi\GY'TB,$Z0RN[ zPM,7u@>ˏQA|̠)A ! :G <AC31OOPlvNřS}ag65!2xâ94xH5kC؆F4\־u1cO6g8F[5,W{@ ^_-xYvn1ꪩV. Y%%8x 9s<{W^yf7h0p@K'''z|X`j`~oyy& ΄) |Q5o\Xl \Vi|SzZ8aFwʸy V1TTKY@f]L̘w4e Ӣ47*؁` }r$w8sAؤic]QL4ɪA-!JEuE5sr}Q3BD eP;C/N+-}Qƴ 8p&0ZƯz#|Z@sG?W2%dz!߶~AwbA=syNxbiջbqZV牌)!VG5 $K@8ٖ=T"G"$^‰pK d[-E Υs2N].i<[vlۊSj?ٖ;-:M<[' $7䅨ؔzl: `|@-)\EVKhvB۲-i؃0C@xG*O>y ?Z2A|Pfl[֝gKKx /^b/;x0^b/g\$xy>6PUo֞6pUo7gQUo X5jP*DX}mUoᢪޒUk%NQ0:XblVd[酖K0!;E+(sREݬP{bVh7Hq=&}yJ h4x4lhiho.7L!4,1zT1V3Yݬ>FOSnx?UWonmLn ڴ}wQh i+& #O(og01^Q F794ƀ2qK9姲 ͈#"wjl&̹_k3LMj:H#cg2a7j.MǨyL~ʎY;eC8usб1rjO7ukS1igꡌ 4 AAa=4]+c}T_N5Q?wX7L~:VL<4TM.h美7mWcG?gx[]CIcO3NWе>^VQghs@%]o*o]z l0!4T3D9` LhQWX~.4ԀGt'Ghj<^MmC|&9/f9?dZ|VX,;W71 P !""Օp }hpyC V'>k?*CBrC?oݺEo#?r~)~fro߾ݻu+(͙S'J\\~DӧOoܦ /Iju4۷ڟG3 TAJ~D0zk48lذ6Sw33?9a:7 :ȱWXCw¡a !{0FtFƟ;_8L+fWq*! s؈s2qqq84.v<;9^]ណ%x[[=W:}+𡎕WxG >ъr¿vƗ6K'f .b5D|d}֞ϳ࿻npxWDo*\)\%}Vcx3|y{x\Z^Ós6i|[L<[ǏI7ISUQ?+KgҩxtyiXBXt /택vnjT}'ŽIݰlfaDcwiRt+^CU+h?%T)J/W:G1:":: :::ױU:ѶQOgc%hEŎ(;BǑAܯ![aZ5g|?Z/TBp̶my>C"! A0`/<f[yx 0FF҈"d=2l% d+dH*l# G,R#I$"gI9O~upio/;d9|?'/<"ȽL&IM+d!HDJ@;Oȗ,Y n&PD^W|p<ΒA.y#,r/Gf 2l#TrБ`$`.A \F+~X \8+gpVzd='$ oE,>;e$з" @DYns!zEwvQ1,RE IdkE' Q6X$:sD;AH6qT0V t DV 2Yt-E ]DZF o8;A60`db[y&sʳ:̫I<ȳt< &u}p"0N杅.©"x6gg+8{x4Eq"<{"OxnMr ykT|+yPNǦ bcӑtG\li>R|ѡKi~c5P5 V{yJ|mC5pKt9y4\kgje;wXh]5 `,LϥfT2r27viGqo?6| P s;U & H0ВblK'p!<f wkhXܦʞ!?gƾc6 l('RҰB8=0N18Nr9]E@b%ǟHt 6p9m NKb?ǝ8G9D.ǎa&GSX{CN^ƹssN>^9dOcgr4vamsN +,8 9=tgV‰LePqcQts i%r<wlqb9ͰGlͱ8ll NcKb;`+َX6`bSͱqlOl 6 a`X/vg;[ub|5{(0g$̉=gD션 mޅ4rq8ٗq!2܉wf[p7v-flevDwыLg!0vb =1݁'fyDݝHb+M "^v0?9I_*/~*95!6 K]~ׄy_yzW)D2Z%֔Zb2h"r *'c "\r`(%7S Dr`%PG#\A8'P`'it#K[oPN T@0B/x҄j%^!xş h 2A.Po v%4$،_ k< _0  hAFc@th$axo>7 OEx_cxa)xOxqxwx'"ܗo[=xq7^ۍ;\ŅWWoK?O/wqJ8qm̿_x>uoϫ6xOdžy_CW1):৛5YIJjXSüym~_ᤒ2T*5 2p?χwZŒ%=Nǧ|<~O??yD줱F6L< 9K;D1qsx)"s8ל='\=FÄ{pwNtBL4'Zrˈv\-͍#|1?wёErG4z4Au`,[v֡P_sԛkFqoEhK%9*BP 7 r7pQ݊l@_sWoU#rg ZI@/qI<43ωCwr[hn\ttXƃt.X)`:|p @:dA`?d Nrpm.^Qw`Fe9 ~@: ԣ9& @ &H"$BbwGx-mZB`3҉`7}ab8F pGxp3@1 -bC=bx@聙ǚoe%(!͂bZ*&-"N`"H2^$EB0tV“\xf] ^0 N 7Cȑ5X22J%sIrp2Krp9CF 3Y®4g x0!Ƨ nT#>IhG <)!)8!7`-r^8Q?㨏syy'uwNE]QGUy w^bsQy&Z/ՠoS*KTޗFoJGפBi8jAIi([ "$%я!kq8J< }*>Fou%4_<=%֠3,\x!)^WĉFq*^MD׊Yrqt؈.G&T+.E_Ѱ4a'ވBq6"e|_.k/D_/7?,"]b؎;);/nI\!-q؟x*$^݈bK) "D ;ȣ!{ȣ!yP 篔/kߊWFe/`E??[@*~ S>ck~>$2%oo:"&H%]ӑ܍Ђx8xAD~|:9Mޯn=Oj>UoPIfEjJ4XWm8O; RNڭπa 0bN, W8ªX[aWgU,`j j$j;P,pG塋U~I+hKi e~ps }QmMJ W'vryxxQ kNBCEgR/]6PX$7Ofn ̝$g^?VNϵ]1uRPhmZMJ[FmoW"XZp/8ϡAђ*wO+<[~c|:_Q5ty{OKH8dͻXVvA;o=r j9[,.n, vpS0Ƈ)\TJey nȋc`ler ׫Z?O%ߖ#+`鷵n/Tw+|+%skk"kۇϤB$h'5Bu(*(^"P54&TQ!]o5g̙s}_\sF08&RRǁqLdn[ vH(ų%W V %=~MF)ӑYtW.g9*Dug[Z!t$\$O2ciºBD{U YXmbsӶ'G>6:on nR(N`]@]D̓c}bHζ Eͣ9¦-]|Q%ƣPv^PGXđQ by"u@ϡ7ʯ*V'Wr ,ei`\)oл*@G8&H_ջYD؀,Qָ%vR6s4>c뼎+8y1ȕ7ާvy.M{R.tH~pa0C'<"+,z }6/@Gmְ_n"Z CA} HxGؠIKEJ\$@!# ˺mQBkjd@1~2;fjxS~U͚a6k Uݝ-!H}Ek+)ij?/3(mA[B[Q + "\MBr:TBd##~}ǃ)lV* v{A-՝ `PtJ2dfv]cj׫5֕RΪavAңn* K#e ט.EF1DP)=6V|s:U^@L5?mH[pF%\0J}BުjPxE1d|Q;pbŝ ^ox5 #SdUQ ٯ"V2CDd'E-LcqEK?O\Qՠhh۵dJW^-CHU̔\hk/lsp\bl@7U[3H:ةfDRfBld62ၐ{j::5 ) Ԇ UX %yEI7TP; miD ":tBFxIf6ӌlcNu4Gƚe:$ĜD2&!Q1(+BJS=J_(UXT+cxbl̢d]$>ž𶊳ʼnD (6ҥlc$vbpJ g& ѨEphWN^B1BsL#R;$48lQf͉:! T4M]YYcDg'XB Έ30םL'1+O̼WQt-ĴO~ti7w]gMf%GE]IW=]P{h\a'8x-1Uuvsݵ]ա^ʍ|i0@2qN8b1WAf(h3I2>" <( Gz3q\ƒ/^H;OW|f,81bQu-|߮WOi݃}7i!͜(%mvY&8+1x%v/oy>=d%j< 2rp DS:!B |g7O6Kl(%(cGZeͶCn']c -s(L5͚ ` 5.i x͑B@Li35˹5_hۡ]_"|=>5kk8nr 7K=*l cbgAW: 땬Oa(gCa k;c( OJ)zUS~ eu[&WV7#M-šUƒy-`uAAm'T6!Ț pD`&-28Nlɟ#:pҷDnit8ufe=*Pi#@"#DK"} XQG'E cC()Pw}kB~yF>1@6Q_/)Y?)O< zO@KB<߷PSR4ww!BY2TIbn ]()C0fXOPN.C1 ?(db=荣R WPЛ-mT^]iU#G6 9 &^5VBԦGzѥ)o8_󆓆nי(5-jA6;[i"tbN)$z";1.h3#Hv=]뺙wg.2x:97 lu?7ǾGd0la.fCgm]I{{oǐ;5|C&8)s'k1to#+-0^F1"Y{av)vEXڍ&mj^{aûl4e}DN1܅"~\JEfbI_ Dk̝olZ8>2_Pm'[o^ƂR0ҥ009K6"vjjq/=#1jɁ 2 /xsN[GXżY2܅8,A2܅4s=.H 4 GousEξi(N.@Ťڮ߹8/iG>`8 (yxjrz`4&H̼)77"x lyÚ c7 '^$yGc^O1@Ү !pz)IDv8[Hxzu5qFx/=@ibB\(?4w { ǪYK;e6 du \װ\x[ -?E- B|i#>~+YQET 582D>J~WaX; W^ea`O>j_5s_:gpo*ouJͣ5_tzU|6@·[e {ZԴ-L.'twν%L  =tnʿ$ BM$'P3: ɿWa2ж4WCȲ&VI:L;k7YBS -'X L ik`]` +L 56z\*qn}8slJ\@@ֳU#9+`7ӏsH`&8'ԝ zLeL^*^.\$JLZi=ҭq7P;ֻg-'ṏ-s5}vNfHٮ"%%gTNJw&4q\ owtG` x x/XH:q$SR|Vdnq ӥ*s SM8ɀA 8 I7.hB6Zxφ?y-Z-bqQلlQ\wظ% :[$3d8)3$Ȩ$щelq[\%NH8 2i "D:FtrrE{;ݭ=c؋I< R %1fMpCO*}aw BpcM-7^gcH1KlUwLՕBHɀLS!؃džy&A̦L$Ff&{L0&$Db 0˘6$aJc/3ק@>K(!Eށb/72*'t&nP﯌ uHҬi1~~^}&PnPF9pxGݐ7&!KאJk^Q&Lm3VoMrP+=,d+uX p4L 3H[IΔcr] "xLUIk(MM-& \0Dv~7:=uzu3cjU//W~Exw^D'E;/R{B^y}!ThwZi" @2$ĹRńIIBv |su!f`w3MJrj94d-3%"fxvښ]N)CAuN6Uf)^La"htmtjTp\2YC_e/.OE|31Q|x\ʰհEley@\:q5(uТ3"ikw9%LnN<r蔭Dڮ0{.=s[זּr)AP# g+^(^9TJa"uC&xP]VV,^(I7$X9 De:Ȳ(röTn|dtEt%q]L Gx|AOBu F+@SPlO/:w^ٱ/p?7rG 4P̮},+\< JbE>PU׾)^(.yL|W**G%SgHFbnf2Zz2[PYuC1t \$b4Eв'֟_aYQk2&#(ɔE$H,'\SvyW:ŊycPW6oHC6r/*AQNe[_1r2 9f#8@$g#nPNn #zDG;P8.;=rZlnPKPw&fLƫ.>jYjNj*L3%w_*|{6}+_ׁxy+mmY|`4es_UpsǠH^pJu!vSمKiIGmt)BKZ3.֦oa{SSq}Ml;Y,L.'$[P;=~$9-+E'krjůV@r Aɯ_ѷmּ~E~p![Cf"6\d|,_pOזs#t`Cd)0ृ$a+^gHC?4"0P;NqGOT wpcUll9 5H3|s7xޘ]0hHD؊~&) z{XƇ,C"} #*`p9\_g1nD+r`+ av͚jM3}](iElLHfM7~rh,]oYU$~P+'kh9Z4@={[Uyv=Nu ~+mu#\0sؘ0Wa?w%>G\.N\W~&!G?B1?b1Yo¡kfKX篈M6{"6 mԊ WbE!>1Cd0D", Dd@d]_Y6H]_={C_dHs?$"~VCr @[?"x?D W1D,!!Aĺ"vtCxчG?";f@dyI;Y~5g@$"!9ۯ93yGA_hDe@c2!Q?d5D!{!RR&D! r"C^CR'yamWF""Cf o~A/ R4'7ACLMY"$$AYEH'bWDY#Az栯 MPo$Kď#cciL:ʺ*>;2_>R%C4dDB^QJJgOjZՒVsV;)%@1DcDVk^n9qsljIݓY>XmsBWuiC:#]s{jj~##j 5NMͤ#2R8=eHKJeLS:^a1|dX"(eӢ4ïr7(ADYC:G\͚U=ƛA3Øsc !K4mn?l|>2wX4kk m@ۆ+0g]m*O#ml7^0 tpa| azFCfH¬zK q`cN¬O@*@qD3` H UJAD |6 HacaYcND}93!`wpf1adx-3K%"ǁUGgxZ̄YqsF28_^wH3:͙< f`3&'$r%DxD^M Awt5LÀIksԈ*Uc8c8ǝkOtn*Octcc1ll!D4k>fs]5[f~-;C˴ 'أY)DG7kFp9c\Wmᐍ5kB j,W}'hemL:VvNHLeT+Էgr;gӨ8?:fДN:,r:o7' @F=HkwX!WZ8O!gޝ&FAzt8'X3\g.H7kb5r^66.c G KӢ">^i҅ E@&5tgwT-tJ~Pg5d޼a-7o/:jwD|Q-U$|gp4UGꐡ_(=Ƙ*@)*ث nIWMiQ{ LRC#[QDzc~nTWL=z~lJ>,juIZ`W+Dub6V(vb=g->QM,>t4nZ󺀢xtlYAa ]PAwiF9<@^\klηL.}UY 5lu:|gv6g(nڳ)Znw# !c39c6^Hn0-@uƺM]0pd3yԮ lߟ |:sp&[{E?%̯1>6b;ݟl71϶k[+L27*+<%-< "a$6==D* 6-~I Siׂ-H͔Giڌ*:C5w;/ʠ+v^l=sW,?-0Z6PgE@B{Aw=̚_1M@V36&ݏ &Dy-ch<2+Hqv\Y&Q03ct@gƜ%|N`zҡRSmZUqړM>x*SSfU0DO#u L(ɫ{)hH+ ~._/f;.R5$[DՂsƼTAW 5A F.  g9}ߨ<=z}2x:+{t['6LX$!4z"|/"_[7JF 92R$eF7?\DȧNp48_%F"IQs(|Ek$ЕSn\LUx.[mMrQT{HrQ%])H(GH@*&IKwJJ/KREʗNڞjVqFnqUYRV-k[l̨ܿM;+,\]"kߩ^TWɷO˯cy]8Q }! ?b|FxE;vPt]2&5mSΏ:c?$0彤VQְLU6*0M5OJSmWΫKpVj} y,880i˧Ցp#|\~kVmCϺ!qRecS$mZgO^ tTa|^-߽)ow{l 3ŚCX.T!1端5NYǫw6ˇ^? 9Nh̯}iAi}«jUXP]{]ozcԽ`MV~* m,i%|/g)h\jS?\;._.y)\RS҉zH,;n3ܚua]+e'' xpÂX7zӃߌ,1[Mʨݱ۱za-A`````\ -{9@q   W O AۆFZ)Cvb,9K+Il}W`1YBWJHt|I2$yi%%%.n-XIf^)h fi^)xH7c~ |׆Qz2Sded{dS pC "9H'*n _(T!@{ bPTp'G0Vkr2jYFv(0(TWQT~PjFห樖4kTYwϹg} &c!t9ҌS}V1B=RԑFJ)MMq <ppq5Aw<Щ(@_(hF5Ba&$Nd.cpvUVQC[$uƱL)1r=gs(hbLjV=Ik,# |J iyʅC%PRCo\iˆAwi Z7vhV]cbuwKoOKIڬO7.'uhTPb-/5X2o5$͔rouNڤS3;ہu}{m6Ls;ڼ+{qrwH_<̄X-;mt|Y@I}:^xG0EqTp[h$${\i,U ۅ[U*FVƿ mrٜ;wT>iO|YQlB; ??,5cS5f//MzrOl߫n;ei 蚶pHsƆCpgݞNT@֙]ĎPq1h7_#V}'mLk?t$-.ldB|;t@ 9wd"څe R%[$X]*d/޳ Oy<}nkRL:y'C~Kr) W})s}FSEVU7aE2=~܃hnV"֓n4G`R(1 "/^OSV촊y{AIq.8o$!glAצle,:٪}yY?c0K.]F|BHq b@At#BwԎ­xΌC\BֿZ"j=*{.JZp2Ew<*< _+YnB߉O/ߕYQQZsYK긊"׫YXE^>jpbugBR!RwHY?=-/MGJ2 ]b8)MjQ;M ^<X|j/2/+bcVdt\*_`QkzjŁ+gV-(6<$}y)rrbΏG'P|1 ^eVBI赪@ \o)NS]#ZY|d|k-wlonGvkz/4/Oo$+k s JGy85Ԕ}(L (JN$v'&ИvLzvS6dӀa]ՁSIk9 J8n.nV u?z815|7+m]O`Ż Mê0*0Dbā#k"Ec; "uSStW rԄUrqKcJznHStɱ G b$5"٤ɥ`džX~Ħ͂S :tyz KJ1V³O Q.Ϯ J6Y):e> ;ĵKbF# 4$S%s%`$[r'cA &>6I"5=M{Q"ə~ݑy}' ;m $A26lێyF!x/;.*T pp8LP .yv#iUbd%UH9K|$EUCK?XVBWKF8ux2bzU~6t^p~h2{W2)/_?^paQɉKEݼ:>yX[|@_ g|@*~"l̀JgcgзOZ_u_i%Ui}r:LnAkGZ.K|xbɋ::`v~hXW1GTFQد8x~U?c3m`*=SawMr&%+b:A **Z;UfcuZzXzzs6Yj= z wԩ?VNZd<;O] cW0t1\7` JE`3 YQЄRY,+V%C8_ :LxM9_-2eޞ/LqcpL-EL1[dp{ սEXޚz#vSROls -K0R떮/P!9&4;^/[[ܰn\νyTZ"΅R(2G1w!H bm9yVm4οҌ6l_WPQ-0fk=7Q-NF?,(vʫ$/njNz\G?-MGZ=mJ _1s=ESp#mt?F? rp$5۔&ss>-' BяI!1nw6jtJزRO5Tx*OU*J\Iuʞ`VpXSԳKԔ񖰅F68xJݢ178&WgΔZpvq;ׯUbv~3*0@Y(pB4]SB-}~FgF 0AYX٬s۬Cb]|h 6mGWd{B#y#GX??MK+;@K[Җ-73h$Z7P:W_Mo>gAvkPİ7(/4A68GNӦi^hcary}Cigiw*~)C7uYG]ӯ7.S@k0xI3VS_|0h>5J}l*r#`%L\F o#i>m t\G\Oa/<iy}#yysϝS;\Se5^nfz"n9Gи%>fvly|L^yc"=~g?ɂIW&B{<YPb̡0G熳!["gV[[JHKߎfՇdg'^֮ڸٶ4l<i\]2CX(U7~i2vA5}nmso8 wl~no;]G YR#"wpL~Ě %AFt5$c+/fݚ00_99i__!IegegF79ȐkT555>bU?d"ʢyv#yPӘXƓx7xXAQ+l @qFQH{hTĶ`,R%\YI<:,Sv=S6*xHvÍăRbzVnQTrUꑊXg-꿓pz Gĭ=6R-pp_:BRGJA I>JH!q(]پRL-+C9aN̛5D/ @}Dj/کBk]+\=c'ՏjR'/ 6w sR_lBC1[,B+o_+]b+ɔNΖ}SDb^VITvTduQǨHIUi;ut)mU4*Vڱy%U:S&bBV+c:WY"c/2th$Qrk&IB^!#:B1A񫯰t+*r'Yr|g nqʙJ2Aq@$=Qq;s==jޭ6W:E?Ԫ76f+{@x<| 5}TU87xo)Yvݛn@wPp͒Ǣ}>o@-~zWObE6NvHJ@-xnU M-IxټsR:~h+O+:[Q{nﵱ "!()FƼ&$WeQť$W㣟g9$NxA!S/O:QU]j5N/8H]dw>~bIao0cWMY s0X;x$R[uioWp;ߑ!`1 6'$X@cْ آ9!^T^ab,߉,F-I bud;5hO)bO p,6Y,OT,:)WDEkc*\/_&kybICk9@u~hB~Fj~X6TѢ􎊹`![뽟ZʯkP,[ 1py?b0 %x)Ab.⫕#(Q:& Qy",0λ9w@%za~`xY &788lf[@aɚ5 l(z ^99T"(V1wȢl#Όu=!d#wdd|ZyT{"LD Qmy6YkpLY0y9{a:),crbN6bJvi)__߾K;7 t 4n^ a[啱[GK(D;QsLaaW7:]M v2[ uI}⃄ Z -HaH;vE\pV0mwoW[;!uIŕ"PlͲj^O/*)^h+ʙ˿Thj2ϙ>,=r XfqwJRҤX4{lc,c{,7,y{!0Kf.J\*,̍idAFʞG:ŒdmSRuh†PJ(jOF/Y}+1zD]u m` HZ<23ZC7̽1Sc!#Iu%WF$֎×YO>jݞ,%%õָmxc(YT̵4k UXE j큗繓~CyAU7{jߺeuxs< ~94Aum2y4-|"Pb}:W!Xl,$ڃ#?ֈL>)򲉧#ܙ5}՚jZ3vWSkujH&Pǝ1 Vksg8@@8?o7f"?@K@XŮ:PŃڂ_$.@x*t(2JMɞpnclFy@{P*Ҭ衉U.4ͩKFBA_2RgZlc~.yK,8Ha&nN4t+!g|iP[^0Bn Lc{c0iP7A <ͪqޠ1eӎ06}^6p<Vkk<0 74 Kl"!.!pETc}E4MTgVol՚34Zz/ 5jMDY7r'~sZS \ԚG8CG>Ԛ񂣧5j0P0zSVkBN_* b{3<G_5QwT.Ѓ-Uu{c;0Ohvj0UpmG~g EjD?N3w|/mV%,٦՛^[3GJO!b3GCm@ iOOM{GN0NiR5u_~Ǻ{)aArixLpdiLdh]V)aFϩ&O+Ol-cv .Z]Kv9A J}Dg4O 9pQu+6p?fķP"8|xF\x]@qaW рG/T10*Ɓ{čѺjZQQ%ߺu4K.}{.*g1QeЋ%BlxeEAL@*2#eFdI/ ? hԋbV&M[{[y?|}Mu2\K7y49} !CZJ1E ]oE巃EP4˷iB~x4&Q"8G6W_ hgNy]MAg @5 :~G!9놐:&.u.W@=xZO>F_@c@@S@3@s@ @K@+@k@Dm"B-?2# -3  =zzzzĀ0@8  #a `  Y9 ⑁G D@  GhX8xp(! KPBCo˿M /?J Pp(yՁߕd"-l9t{ZzqG*QV~ZcwtaNױ>wnK(/C;kXΞADG a@|$4$Om''hI~yv#K~)_4?SNqa) I g4VJ$H\W,es41A (IrD~r֖mύ+AA{nX%Ŀ[W~ݑ`FE:ru˨zEy]yL>Xn }o; w*/7\7a`?=u ϵ£C/>{`n1|5{U\\!Tp34Tt/* c k8,he72v>:\h*s67WeQZ(Fy QrooO]|" UϗO<1g/ּ5_>|Q>9r_?;eɼڵixˇBfyG@1#޿e<^GL#_a0Fbgo>s+C'/ѵ˷YZ6oc}_ 'FTQ|G|`#_"ˇ#_ȗ5e 8W87a0Fbgb<~4>.|1>|(q|j#۷ .̛7Z WRJPO]w[ x)ɮ.BGhM.k֬$;wNbbb5>>Z  *͛ CҵKQqQyvVXTҩS'GGG!dii{G h k|"F.]S`IzJʜ߻^:&"y`Ycff&BD_8&gd)@A|"QijtmJD. 0|>|k9SɗZ50%|y+$bkS&M#G0W[h J[а^\]c#C/S|y|I$LaFKΝ` Ȏ峞K!2XaC=RrQȗȿ) VP f0tIv412i3%1n_~U Xhrcǎ>M`{d2X^7m6;ԙ/^aӿzXX-'k`oj\<*VVWc*YQDC[doDZ/9 P{1>:VyiMo~a/t_| OP ta80vgrA0,ީۿFoxW]>cƌx'~}BӨQիUޑ/0G&O dY×WAI9R~b̻ _8tl՟3(JO@[c_V/=$L,^1mx{]>UˠѮu6zWVϕKZ588/sq1#jբFG}ĊN>EQf9cU󥓰%妿pɗW*c,xO򥉠>${{}FY9O~TxG W _^V\/0l εj&//o _++grYr|yƗw=.-'؅P(^Z**uZHXxv__@QrptpkU꿕6#_|1uߣFbȗDZb˻F]5G/#_;c䋑/FXٴicGmXȗ3 1x"8*K*A+F_`4{,/h+v_U~|?{|)**8q ʿ>B`Ջ{!Ϸ/ _)P+/|$\t)88!=/o?^vh}Z.or>}18O=yɗ?>_``XǿG^)F|86=J1É/0#_.F&{#_|Q #_|y_{x hNՕp#WǗo||1eUnW||9KQQҥKp#_ylKUTu֠yUOy.POKȗ7///o#_^#_ _8_ V#??*M)oWė//Iz K*J*|M|bKbk|op#駊Io+" _#_.bQE>4_lRTTpqhʕ+vXy/v@ywDoӿ|uĉo!88^(=ާڟ@s zroؾ3Y}nywM녪h(_$vTА6PB|>Һuk5b3T&81CZZ ~>|B"##:0F٠ʁQqCZJ `?MO.:4ShD<)G$(ȗ_W9A+4DU*䆏՚O+GOK@JȻ`G(95+yeJ2_վr !'wB&*g(> <`_|b޷WNVOп|P+m?LyUUu+@! *.bQE|1ʻ/FyBptt(o>/9rDiU-s|zy=T选Iɀ)i?~@339yEN?J   X XXX(N`|A0M>n'p#F&H%=bc% #bBVpG@iCo~DqGkXaSTo, 7A|@05\GxK:cl(; )xP ':+-@SSسR9T eee!z oh֭ZpBgR@Kի[cyOK5:Pg4U:qs?(SPWja(3I;$Ylٕ2{FD!\ ]hוeJaQ$ Ii̖,d1>jh$4NpY\+e#*$vht"k45M24|z(dhaa?ab]`;) 0cDH G'DDUt,Xw z 9aq4}{Rkov(ۓ[Xv b 3PDPRkt,i&bktz2L5:3itG6bb(,ƞacuc03Q_Xw  ojOsGv0%Jr&nG{{;slaooӓeD=g`k9&BFsM)OZšjϲdm5`kyY6ht5T7O*i:T[cACz!4;T{pX6l̸6Nf'HSX۟46K7OXj_-՞jojojojoj(T$L|,շ2VYL<ӟNV]:}fY*?:&6>g;d;XdͺS`.jnd!~?`sLfVB"{l|^74}j7ZY-gDZ3jBb\fǙ̎3gp+ǖ:r a3f9C5a Ş+P0r zwȖ1&Բj˭XM)õt1$kf\UtHtAt[d%⻈EECn&lރzO܃",9dŴC3g@ʎGȦ6ɔӲF92ﴅzH>=RÝ^p!r%M34=|m owm|Cnq7[f@)!ՍR)Bj#Qכh[!X[g+1wvKFrx<EF5 OHDrbS:&6jfdff5[ P?0ژ`'r?UQQ.&ِ<*$1kǡMK)_)fXTg@X0\dPRtll`_aeVٔꜷ -lX6ug`[6afK[yYMf`e&ܝ\xcX7ဃ9サ?X>ю /.IooWwaًbfK8=o O'": :>÷f]JTֶCHB܆|¼q$J wɋ6,* y}g;2r&,|~A!37ODϸS::UѮ l}z.C.u=,',0| l.-p1Q%Y=|@IJF e'M2EdggN6.c9F^?YEИIYs娕"Pja(ңuE7WG}Q,Zlw')C\kX-F/SkG;sMq1a~ԍУX.?Ǹկ?t]hv]`C16@YL>?g7?P#1R̫4Iռc˼{d9P@hP'3& cxX=*QR%(AH9F2!ٟ#sQ_-$Ѩ?ruʼnƋfVaESQ51_H^zcģKś(_\*6 DBI7IHHJ6JINII%:J=]ai͕%I2[&JXe,F6Z6]TY_e2SyMyCPM))}SkSr\quVExJz;*JZ0;1bH( HESE5%_H+{(cӕK2_Y4UT5T UTaQBFj?y&5H%"7?U*SuM5j))jO}J}M]ƵZOmk-&hӵsk"űV(?<n'igȻ]oLMPh+r"uzpQ+n WΝܫ\-\yx<4]t8wwn,< T0HF ,(قdB $LFd- 7*2,""Ģ 9L%2bwS\r-1EMbKĄIR_FDpXM̓Ԟ0aaNeKʍ?ΎQ%ì.&ҎmCb'>gCbyfVViCY2!Sh"1zeq-K&ZTY&W(Q;k,!H xp>ꐨK\ڿ"-qO"DRGY#Q !+SFr|9j$o/!O/os|yTQSP!Tn(Ebbq0+ foNF F̆(~,rktOa~n)7Yy'~8r,r [pH&9B.(),`e;`%ZɎ,Vo^ ;jqZ=*376]UPfJj![/=!t5 :.\walr&=ޡ##HYFlgkAʒ. UT2ix,Ed8"R9UF>țcmMjBBΡ&R&OaR:Y:ꦀuƥQg?ceE 쑮/Dahri2bt5Hć5]WLJzR0(iAD~#]D\r4':~bLx<:(4vXTldxRDEJL%%<ןs:{CI4:S+ |C^a Y 0^W?Z04:Z{P(41viQ|GQ+٧ȠMM0Lj’MY"-XVfe&T++:S1ڑjj0AX3V61kk뾶S1V(,CGڰ=g NlذY %ڂ>`ݏdng^c5A0\i/cT]e5Lq`mRw$>VX/wCG~THݥŀ FjWյDY~`DaŞHy5>Mx>k\ Sqdu"vH$NL9ɳvF(?.8v&!4}֩cX]1x m;Cαf_ѧA#j2Ւ6˯yأr,uMqy]6=Bu^>e%MYNxW:~`;s8*>r߯EFYjc6Lٷٱ("D PWg$Qm5]~)HZ/jH -pq'ea;U!_#+?X٬tC,=k/÷Wz]Ib1Y U㺲XASdM;&YqI& 5:0-a wjVV2B$۾O[E7bGbڻex`C-Z\4$Bꁨ<1s{V='Kݱn&+a!;ud}maO5Ul"D4;ݱ2lZBy  gf9(";֮[100zL]X\!۰l!ybqJ ZΙѹkt ;nj>uWb2iF :ѭ*sj!!"it%njx_ BASLt_Mi3o&NWћ = {Γv:1;n'3+@1ZfA3;N.w̰sl8i̱TRC Mmw"!y( d`X;^(o#b".0",±Vsm9&e/ ?e#4/[KG*rrVg`0~~JvO͌Vu~uᨳGYu.wj}Ë^{.sO |#^ϖAFenge)pqieZ5:\=V0fdRYq5:g+OZ`7ƇEXjJqv7KsU4v7V4δLn6gC!>0N$ -t-cf{} c \B )LU!qb$*8A qA<XDN wwݾƻO*†}u{}2BkK$D2Prxi9i2KMmE |%/I-\5KV%7l"}خvIh~ud/?AA qiUu=]֦vNOÛ mP]{8#vyv|ljNcX>6;%ul} YI#ēRp4Ye]M#Yyj;/,o&2AwisFl;Jbcˮn&0TۧVJJIj%NZ6!)\^zх?2N<.]N.U8}G,[ &F/`["Joa})YʚP'YZ6OΔPmΖt|Vn"BG׏U rR!<[~V~Cp*Qr j55Cn4zい^x\zu-?Co^Q1D\x)QD(w+v˲_j`~w5_ x0SzĘ`M:['ܥ~Jry,rΝq EݛqsA+۵+stTvi֏[G-(w|i2cyt q.>VEuE6u6Hv!ag+o}7gpW-A/x8 Y֛EuWF+G(*)7)RiSG"]P]VV-U!rs(2,R-$m'S1:F=Z=]TmQPWT?Rikkm~k܅:fO^(HQ-=8^@˜s#Ii:+O+!4 JVۊwúOa^[̭ *u]MujVEiڝcڮM7G Ӧzm .j$I@%$:QF6כۖM9j՗Mh糠CuzX)qo6z-1")+h[?P$Do4qD0[g2:۴4N[=~h2+"$[7;xr™5 ]9'}ںnN Bξ"mEгױNtnGٮ[swʆn^|S>%A_FM=:xw*wm*y.s❙<&nko30֟Bi$/VyZ&X8}(GNLj)HqBG 纐S(9H!wO$ȳHH[\DMDD󔤄NkEϴ]S߉3kĿǻXÕs]tTHl&%H$%4B2UHI"Q$%CЉ-IZ_F*kt.x2,Rzza ^v;䐵j?'R Ym,MHZSVi۝m>6>)l,Y0CvTݕ\uhbĖj-r5(":<vG]EAC\+<]ت8\PV pJ_;VlVUJfA_PZڤRNPDEm.d%WWUQ ,]ZsxnueSWhySY &`OJ{R:QqxjFџvZT5}ͮIE~?ZKI/JG1$o7c6ft;%`JRE[R>=8o@4G+ɋ:PƸx}<o354i7>vVxBiJH%8SzvhV/đ(R^,_ Us:A$-uNS]y|bWJHAe*j((Ie2R,H$#CIj= 2X0V~,,C`5DOE<ʝ;ThF Bz(VUK4X4Vq{:Gz")ʹ{BwXN1e=1%"YL%虄+5(4'DQCuT)ExnU8W61x{.#3Ξˡo'=;hCR'-w$xa;ٝ*uܩgQ4_Q9iY/k+V[CB:nhf}o -$wu bбa!m<03{gߘd9s=g}$0ΐ>+TuJRLZf@-StNϥc/$}}AXfZZ|w{o64Cv Ĭ2B-]7t4đc<cy !M!zeݱ [\8!$ B!] D!*HGYN>64ַ JW o{s`6˻=7lY5CM]+rd\i ݰ oEܰPYZR?߄>xWDh *ydd}Җq,g ]ûPèjXƘ?L{k 0e4q& CuP9ʮ?` 'a1[E&P wxGŸ(:<]x'p6s6@>Lq 9L!x$ފ8 cxޅ8(`@</Ot?@YO !`H$C~à/%П:; {2\I~HC &苽:̧{_T/`?_L,_Agbog/П_W7˿۽,5٭WE0"` 6gaMUwN-axs"X|HcxG07[@ +@| ^u'|i4jqmJ\fs?8L #bSx hW'Z5Vx-5u .w%B~M˱];߲x\>kw{zP(Lk5`%`E9'n Zadpvޏ;C1ܞ}V吲CXX|+00 cX?Yqi0'Yd;50Xt;@@Za/yg-jʒX ({>>5 u LaƓIP^"kll;{ϖE^=ӆ 8 [pHЁ0t$L9v",JXb3V'D {IhǩOX K8քcK,9G8A,$sj9@{@[NSBiBF7!K<Mq/@&cr 5LtIФ1'.g8il$r0}4bL㿚&{&LـAv291bMr(5irp'|Gxloow0wygӹx%KNg&;'RCmxf`6!N`0c&}}܋П?`ѯ=9=0X0>^#4 ?fҠ^kП_RPwҒ^Kel #(>2=i{O-p"߯A'2B޳$12 {1މo=vF0( 6h=:awGF C_w.2Z=WLx? 8S,6(6c-h+_̇!xUmXk׎T9tظŦibӎ8߂}|ϟi}m[C?}2_-̪xӪOkdvYSنqWG_7JM{zր2,|@M{zܫ Oe=x'f118M1(t }/9ћ۔gv`^XNt]&fˉl=p)W6OijFQX &ztKFB,M`x]@wIBHT4aT +mEtV(58qG@[mpKkgDpĚokڟ}˻{{wWP*6B@Z>6X@(ZuY(b(<a߆H $7*x+lxw{Wo?$:@ke_=Ui)}8 ޷/aP}5xQxS@2lG Sa:Hz7PR{^ҀWۿw8-P6ӵ-I&nf@gX@Bm.]@ށOmnL`6#P:ACa@q +7(P:CaBJW(ݠxBEOP|B%J(=J(}: J (C A;`(P@P(aPA@ tsPp2((28(| % J X(qPt3aP$@эPLE%Q*4(P2L2t(<,(Ae4(BxB؊ XMMeݜ~7W' ka-Ǣ$Ȝuut 6~c߯==Ѐ4C"FB6-}m|zW{e+L@n{tSp5</\ӝ:;ӑ:[1y:#b%o#m)Qo϶Ό' ܤԴ8~vz>vim#yat|vҏ{۰/F`b@f$9'6O0bR0sP_Ӣ^𼆵նsk+LwNȐ!#ٿ9,0*dX`Xpֶ2~=4t'AC/y/~^ۛ"[Zʉڙ޶?y="G|\d=%@/}$$׹fGz򗜴AôW3 FH@C!??ذ{ቲͯ;6 ;/ښkJztîGon^cƟy|~Gr5fc/ 0p / 0p / 0p / 0p / 0p / 0p hDT({xo~~?H)IxRaüa)?wxaㅁO~̙[MLL$ɇ-ЫgX:ī<ݻd?!a!#KKK^?2>>~Ŋ ̀N\Ϟ=!WkxP( aT*߱j' apZ^d2q8d^W ۷Q?lΝ:uÊ6p轮C 1o\b>Ag;<-›Fχ,۞/4iTc,dS`=~#oi|*w髀9vvKB|РAY/'}WwX^^8s l0ja-}3ః= Ԡp~`1~7a9 o%mK[DJym|Ϟ=ဃs >_{8t׿QP?7jԨ?=pCŮ p@{XpfCYݻH?[?ҁ|C! ?{>5߽{!,;rb^w޻AoS^@!80\;n{.ʽ 8=ߪK7ܿ;|=Kj7i&&H[<Ϳ{_^7'ð7 ;)ީˢދ+^',qнi;_4 5otJw+{q?lUO߈gO!?WS#p7Uo7^o7p63~8~乁_WPv~(nXMIY rsˆl~"ѫ/2p],'q?5ڼ+}^pı;VYz?S/Y]ѧd_k^QRR7wuq~ƿ/к|'ׯ_OOO5gSޞv&pL)BÉ*/{XKorRSm0r {}M侹-- 0.$9}r.ẞ߆{ܳ<͚mE7-5po徹xSWrwX[71ݱ~}T]͛6+2o>?Ą o羗O9l+U޼?Ż[%; /uχހ5+aν~&{ó1~Y̿n`uހ~53pdkgCC aB 0p /s//D"?H X1`|,X6࿇gp-y0%JPrAYe!EPC(PBYJ!Pt/^ eP@Y ePt+F(lkV6(ۡ쀲.(y~;8D@&frÏTapB:cDBZʟ4PC9^dAZi;ú^_軛 xA~ d!mfgi԰#~SxS^DcԂ#Y>QIMSp*gLr٨a$p Q Sia|#R8qXTuO*iHT֎A3 @, 2山Jݫ?DjGxo2mg8ޫ/ҝJ;!wUFՋjC#uO<6Ca(ʆWtiDs't!T*JcҞhҘ/,TKf̪e(A/9J1PXP-J4բ~1f">]h^L=*gfa F9Y壮lmma0֖6XĶFb[d3eԩ4,XO6I1"G *AlKFN`7j<ɰn+CSiװvv0r4fIiٽnn{XNtM,&fN>L֙6"LGnöǂj.m'!ےŶVb[J-UlKS6=#u jAW*RxQR]CH!F!V862,3xHtUW*8K-X/!v!VYKR8=@[gkB׈ 6;&}3I31#lu51/+4`؊Q;N%v$8Ř\wٱ,tYٲD7aM%Y5X.K[-gaW.aX7na ;< YHU-V!Ywྚ,D asssCpy89CRFg.>]w^~i-At$OF["\$6V0jU|be.j4ڦ]ۭ„͉]vٹeZ@(rۋm;mŶdCǜr\NwP TvQV7yECbP;)5gfL7b'0G,!IvϻvőnHWU~&6FLn:죬nBrZ+!_خ>,'0'Q-ʴL=<3s+\~@"9So2VC`\3*+󕫮fZm걨\YQNnQUKזaى0ᰤ;x$Os.kWodms^A{SW𸺅H zȬUs>gRҽvai8;LF,닢e} ej)k$ogE.<[͊x<ùuX¢gւ-zvo9C$cN:ȝU'SQ?dj[p?`ǛL#$B+cxNL2:B/L F&f$},YOXp;B 7C9wŞ$HKRhV86*3X5HBO1DF~8͹yyʱ1x>`-]^ LؑⰅ8!*~-SH^W~\.k-r3TD)*rx|:/!{cA=ELݕle2N9U\ܥ_++o+Fj{uu_5VY#74O0rIEV.]ZkdMHgU8؉x%^vd2C#)yBr10|K&#tݍރJdwϦKW> ݂Egy,0%cc]bUYybb| vbG1Vc$xpp8ږHMJGN Lv>BCۢ5d1W,4W5puVmf=z@g\*tSPYTߘ^1Dm7t3C+Ҋ!+%r=dHq-'Ҷ]:~DFLl|f~.Ak$Y8JB펓p/y8ٰpH"N!MsҪ98 % X@*"ƋBFzLOt{Rh}Z+HKch[51OdiMFZ5"+P젞C :"rk0 Z1GyAC%.5B];mGwag vŲ2ܚ2S<ٹd3z0]->=NEQP7J˶IV1oЮh16iBwrYƒX%fMɉXD j!*r,!:E"zuY; kz*$'6i HN)UDVEtj(+#J QC?_M|瘃³0D|EygA&VlWϻb40mMs7MPjA0A]ɉDA(6܉NFv>>Q8m|bU-@LN;t~GwoOP.r+!\OMN&xuSnixBDA>=-!hK|~'n,A.FHȊ{ ViU .ky&{坁.*;KLeSbZuWyy[܃w#y>ps!`'D\SiRi4ޯ[C[ oFaI]R~Bbܫh>yi[6C?jUJ f" 7]<^!ں`>! ‘*|Rj~Uiי>lŏ/M9&)JCUit6ZKVDF/H$u蹙tiV~ph桕gX]tfe1J/rO"Co Aw椢AfIZuiQCOMM6lVҟxTLpc;";T3Xnܼ_qE9\ &8Kr[Z$$735 `9ii_|lI("xL;ӵ:3BP(SF\%҆KV z˅ 6rqBB06cUJͪ-dh .\BttA\]Rv s[휍R\];"hT..]`/ £uc9UsXn[9,[KCEvu]Rqgݶ 6!j @"[)DSV?Dgp^~@,-J|~[\fgÖ xqDOSH{"Ŵ<ęQ>`U b9)dUŒBټAi`}Qjun]6U`*6ՆV暞tkCA/boN9F?b8RňG£(,F izN>@X?p$^^mV~3G@6r e1c/7~fs.bM]quAй<pHu17p(4J~+G6R;tn3B=H] 8Nuqqy7-D;DŽ}mBNGݹ˓O$͍ >uL)D/Q!i[#}{Fm)i@wofMmYʹPELOI,gvN[sI^a{p+0/bnFjB%ګ{t<=px:?]1dh%p*)& t<# +XbjPQ%6׮˜{mɑ.:,IFks kxAvގ-V%4($zjFS7lFQїͥc R\M)sv-_U ˌbI>n n,m3D$ .x3Җ`7B.BtBԼp; i='sk',M9yx|-SZ##hV8# f :ND}C\*F[oc6LN\Dj4;IȆT>;ޟɝfh}dYUgAUb-3Y6zP eh!iP5!\ ||22 DQQK%JLQ;(X3t:qA2[!嶧d8dƙI х`\F:rIVz-].Ap D<-^+рd ~vszہZ+]Ju=U#N-1WL`gEZ26ʼnh7~ΈbGgpM|ђ19EDiLeTэJW4F:qiFӇjvACQ #'/qR@(, ř uG4Um*7>Lag]/ݨ̮.7wi,ɸ$ӍyF&Ĵ64ֽkOm {;>HD \V%m}eUZz*?!IŰ8-Pմܡ,Qp7*Baֻ'FU-,SrGti27uk^tWY{Ztk= 'y ^cMp‰`?#O2b'kM.,huscd&4??s̘%.㿤%2fW5vh6sd^`ս; A@x0D*?+A7n-ݠ;+2EwK '$$YC<F&@elK,P_\+bcgsJ'[6V 탎Qv bj|gSrC)SwQ[hZBBh#ۂfaa h!p4:H|$5%Ds8_pNr~@;eyv ^109blL$˗=r ?IMtOޜ^]1c Q8Gx9gQׅ0;;zCzp\Zcnk*_d}@TA)DX8Adg򞧿i[Qp U2Jc"O&Jv+ZUX+Iܔ?%?2mWqd.(I_=gjNY~ҭ|ӭbRo ;sORypB/{U #WhT~_6S;HujPknC '_A]S bIDj*K5f?Մ߽[y]dSE'6C!ƓV,^=lJ˥?Kq)E"vhesdKdee1Af$w0y`gdR9}g/d L$y``t#s:i20ZK"ҽwg04.<%hN`J//72qcxIPx=uq*n{}08ۓ-L\N30Ujhꭣ"[3+c&_#? ?%[]; Ѿ3|ч@ϱBJ,레k|:qt~AHϝ+DE_)EO@6X^BIDGsiA"°e ;Pv6rRgoz\6[Uquɱ|;vW0ߏ.Osj#|nʨcv7arVŨVa@Z-E{{N"66^9\6ExsrMC@@D>tFRDž/^!/R׶jb_`0qlGSa/p6eww(8gKfͽdAvGK)q)#x2G[WO1ھ苧lO=:1.@}ɧ\`zkz}zZ|U}_Dmqo|Ýڥ \%Ԅ|-=;s^UOQv "qO:'.UlČ'ѷ㤌qr+L_IFq4)4eaˀqKw̜w2wPþ7.)O"80b{:0g?NiKMix>HX\$Ew*u=z>p_;3;\!Y$0>^m K6s؝7lzi{[!0WrqgQ+ɱoC"wNm!uƟ7A7b$J,6jniQ膝onXukyǠ8BnEväF٨€k+ 뜮t4Zr EvE\3B&7MM͚v|#ué}dWr5܀k}\ׂZ֏raZV"p{gn_:d? 2{Iէ%14j Z]2z:MBe{_xyޛ#k0 n?wÏa[X~pS{v}x.(9E:nl(=>I2vcO!ڜ~D5&O*= 6\ؕ\welzo)q|n~%(emX*X 'Q)uBp3--x-sdGoY]ȽX&{{&Ã2s\\iO ɼBnc5OSDgӹ6_0LW+(9EmnO#s;cᾭf'v7im i#ɻsV1a~\Y8>:dN)Z6O@dawk?ϾrҺ~͡u]"}/z~᳐$;`2.g}/# LCB Yr|? gcWhnrdha9~nox"H=H(-Xبد8T K%C VP+Le.WWr]tLd=T9K NR'kC*A't߿)6}zwh׬ړ+d]gD`~p"[\-)O N}:կ"!ЋђErԎ u䘄}IR-iJ;H=WQ).PI#ՍHER/ݴ*iߪ ҇RZA'(%$L>ɾ)ivr|FY2H.o?Qn]vm ,)z(BcS"E1$ibK9-FP )ec!q$l-`eE;RmvV?@($gE/Ԍ\jcu''ֲ` CYptwC8m흯=Y0.]qU=fusxKSJיط:dcvHwp;E+dflLWz_,8\ށIX=z c|8!Sά W2EeIfL&R2nIJB$X߰nXcn'*£w4g|S>8>Ax0N4'P:%d8ʳz8GCiORAPF{J]?VilTŭ7x${ v  (vܕ|ƞm7 wyݢuMe#\?bD9mWIUo!P3}^\=WGmtH+K\USښt9ea\XG>/rtzX*ƼWo&jjkH2I;CFq|iӊ'+&ڵ-!# 7zPks-D~"OPmuDJH7]Ȁ ȣiM;n'^5U-!h#2MFn'h끨xA0-Ο(wAt<#U(LbOo;$[,KRj2(H6m?bm qBzFLԄO3 S^|!H$I DAר#_$_&^oao´?飯 ?:0)=AMT[Zm;޶ӿfT f\t˚Dmrܘs?D2~Ss}4(_hl%v/s1_/ˉ9W/?&T4"g-!9~s˗9a/r_m=߫ns"pz~0rœ)03M9 ~ytC\K_޺ժkWu}S3 *iޯjKn=(v'{wbյn"&r$gCD{ҋ3u{Q,zI۠6B|3d6UJ \HxDbjk9lXD`oIU$L׌kC{[Eo~еp-WZho;uݍkUB\w8]Wk&L4\( k=Y$ wZ "+Mr~TaUtաQO(1hB zKz_nAz;cevFHB+4J*uc,e@cq8򧘽8ɂ~y-N&nYapiO` ᆜ:Mb^z:>o yJ)ȧƏ@%J]/: S6#E1̴}Lhp!(5혃_=^57+x|ץOo=x>+@H+\qfȗRɨ!0uܤFZiSZTRop[z5՛pKbp\oV5b>nk ͯjp'K3]BȇTl!eY/[qg75m5|+u 娅rԩEtx},Ԁ}Kw 'r>E6XDa#h( -o (P@`%́\2i1OBrRna3J8gN C.x';0 q)%.q!l(9Pgp: S 'kxD8Xž>"];J$<;KC9VQ$7}lD8,ӒiY2ӲH}gRTYßܤxy=P+h V6-V|$O׊F&6nG. ׆O:?Fn=5ڿE=:Dט]=Uerqx]@wI 4a-KPц= ]gpPV^mEE5 CP#ȟ T-_{9.s|%%0'$P::@qXEJg#/|l#ZI ~& Fk65,Xi߷|v:}=aY|"Hu8THS)xu~A# o<4fѺA#A2pkX4{^q-ڎtXGktCm jSf kmj;VP**T[vP:@uNP;CjWݠr8p'T/ݡzC'^P{C **~PC:uP@ uPG@@6@ PGB :8_B jPaPáF@%ZBh1Pc^9jԉP㡊&%AM5$NJiPCk3JjmmWcz0є6X]n?5 ~&A Buܗ-<~S| vRdRrl)ӆu\HZ“&k뒏uQ0/NDdtRd$'BW6 MJM?06"K;Mꎼuu\[wmumm_vGQ8op_Ez ߀ ᾁ }#}O~1^7B@_F.v;u$JEpF&NJ8B'G#ppcB)'S[[]n^Ǟķ7oZ|^T*[`;T>yؘ \`AHHH*ܹsB.]\?ӡf@u.L·ΟA] U 5 K.Jy6o*uPCA5Fn u ԭ@NwPw@ uT9PўC= ŖPzPAUq'z igzy^;ƿM10CVLCn "mV/O"/"O%bZ/:?x^ЈD^zo2Ghtm-\+u~Ja"6w8gZ]=AwÊׁKoI0 30[ x,Ԣ}꿷 `ץyD.j ̡[|dH+-/bҊqK+-/bҊqK+-/bҊqK+-/bҊqK+XڼҊ[Ewsns7IZ1~4yZ1~g"7NnܸQYYټm[1nt\޼m[1nd2A5oVW68eoooVΝӰ+Wog+Ư[_C!gϞ/2a9^TeИaz8N0bJ@Po6m$''7o[qttacݘ@-'.[11&,o U_zzWAI(cܤ BUt`ڿM=ܺm_1nRi+ƍ81b,L7o ƺklŸCwbѶ|+ƍƸ!̍c]a}{Ï7bښfwh~Տ{޳ Ώc\괸wPpKW8e[V?(%׭7c8ǁwb|d?c ssr#V? ~&/gqbt}aøO ɪE; ޺o^79uthX˗;?@Gv+0qƠAt?4"˝jeʔ);1<4oJ<_x{{óGӋ׻po7cX D~>Ng \,êM l!ao^I>_1ݍ^frݝϳgBtŵwa0Con=aVcbb 0yBB_hŸD%0 ᘊ` d!叒Aat9l͠z-pw>)` [d;.s0RK4B9j@+C0 ̍I?`[1 E s tb4$Џ72ԼWs6|_/oq* Lȑ_ E4 Vca 4)`H6;tx$Z[Ĉo1*?øI\m9iÛu&unkFb\V7ƭ~AX7F7o1oyC(X74ܾ'?~ŏ_In7 `;o86x`eaPuކqz&aaƕ˧~މqO c]tk=Kz(bnΛ+0|먴wbHnCa$d0n@ьxa[7[Z1`,r-=7 cY㯩6%[FMYfeez;#ˋ,5WK565qq㳻7^^n?+o͎L1...65c׎]T/W?ny{b g ڟRൃ?{o}އcRQ~Il08YaXV3|`|0Xggkss`PYc`&'1DB {:b|ƈ+W-t'1^ 3k7۠|74?MiŸ㖗V[^Z1nyiŸ㖗cM`:ފqHf?(4TƢh}_SI#Ԥr|gomɺ%C'X2++c ָU6\_-0|KP`O!]t==Flme1ns?Xk7ZZ1nyiŸ߈+m7>qQƕO7m0nޱ+x'h:uu~/~{fc o~>?󚁱~oΛz1~{ʚq qD[Sn~>dbac c EgnŸ㖗b* wИ /o BŻ{47n|KzҘc 424:3G[N+>:f؍GQ1֡դGXQ&iqaM)~TuM1mcϖ*~~~="xbZ1wE>ޔf?7I_&-N~ kyfq_nf͚y:-6^KCts]fk.8?aX޼.}6A3.GkkkmС677P4fڰǒ7O. Y[q}cNZmn+Z^Z1nyiqs[H^=ǻy-*ϣo Ci/#2269Vq މ?)trl|=.~#MtAV PqvJax >R$,8Hp_>0]WXhRMWò4KڝOEUmJ4)\).g(Qi #]Fp/J %{Aۉz8Dq;l<1GZƯ7s%xBc^&&C!QTș>Q+ 3ph$J= *2ᙱB/7_~5uPlRN]K"c<=6ܻx9AA3w?"N*@-66OBhOiasn{-q07=Eiyܓ\j{CH"=}<Vu1ۓp3!ӀT7/F@rXyB?(z㋫붼,0 s3 y/ qw:+EN68tJ$ip͍\#lz<2/."K LvVύ6K8R R3 S__>j@ۃ:Syة~夏Y4+ԗV z挔]3( 5pQ}03,XL\< n6\H D;,G 깩KK"<|?|hYX_T2|iq y/FO+Cn})X6rEؘ|]@p~>9"74*gvzC v PM$sԧZi4\`d|ʔ,0D6 姂O`ǹQ#mUu@$ݑvs;7ygz"[ Dsؕh"+X5_>U s/&KD@t)#\t<f^YR! SkAN/[WH$;8̞w!{C(_e4VЎhlS ې "2qǩ!#R|Nᴅ5cR33"a<0Ap|⸕fB=T3dRL2ԮvGʎv[,W(YS0~~c=?k ޯa!h8}a-,u,j޾ Dy0 YLOA#!BPf̼9?Z'8iziL2*g˵&E (+¿}UOE7'|'5/i*S:Ւ 'h'\w6y '8z-r~.$}ٔ#+ul_K8dlO=N=A8ً %{`{ג=N=A8+p5Ap#\_GXmV#Ҡ:%{ z7B@U՗/]ױLkC8mw}T ))4*mmzu}2!4E^+(Z_ {.t;|5dЭWP; 7|e$F̋975f4bgWߏpx#Sɥ`ͱ]ڑ"YNy?ֆ™IZ&_C_S3\&*~ g [F,2g|^S=:k] H`;9oW\KGSfe]*s{랏,%c6|Br`?B` ݑ.9]rض`k'OMC^bRQSŵ jrR<QkHr&|dJD|Y\:}ӼaJGo=,+/V8AV o a5 I+HY|h;wu`@"wjy%dEWdc2xAX[McNyE O#tWe@/HnU%趸'3m1-IC(z%M6&d'+|䛵$\oI2go%Y>A0r#31/qf|I.02H-vb@*LQ1B*> >} KGضaL۶M 1F]# WhȠjdP]YŮ~43x"UVcpSc52f0 7je WI(TKaw:Ȉ \YU%ĥ!h4L,3%*j62JYh߁VAlf!,!xXD94cCAm1)o6^Kۜwm 4152C7ٍ8)))8œ"9bԤ0ۏ@5ɑɈYjQ2 JYV2A1?H,Z|6ؤ$\"Ś ZHh(ua~O~?y&譺~-ӃYtXލZ `j>IU0PI@R ?S!s6O^ԵLcB A"A%th̑A ɍE`N_-D#T5uwCHcc[ &'|U;o{Bߗd偐ƦSTę~'Ԙa`R> ioW3]F=(Fݶ%4o$H81HC Dmc6fG$Iw5q}tD@_JJLSv` 9d\ #!{OX3k`>! Grܤf!{~٣ͪc1#6G1qvrTWL[:f"̕ p;9F!mOaٜACɇX d0·X%lȚoФpRnv`ʤ Хafgc^*Ɖ'gt&4$ 6@7a!4ea}a]_l ;0/'څFE"(rJ _E ~ds2) mXӈ)F:: L MG0$33qb8_dR@'J M5? $$F5ui)ۥG>r?{H[4qqqzr㸲s]pqѥy no G LW}9~׺ّ dŲAȎ٥muX:N K(eVJ^1Bɻ|Td۞kAc4q*H|j d.HؠSY^cI5}ڇEiJ4mƄؚe~ړE*NNruɵE!"nc/rI)SdvzzeԠ&oEuTee'W;Yb~ 5%biΐS^gQNj;bhv1lz1||KMBJuk#0ǐOdY*!o۳ ;Ʃ.AHy5"IB+HEvꃌi`_E6yḭOݶqFHMҿ7)3lWCږ{{6AG^V~n-˝~~Vi7v6t9BX)29[~"!m9mOM~y 2Hlr6 cN/lJa,[ET7.4f65_|9o< Ӗ'z O(dGW_NZƪ;6Zt`KL1upmnO$&wµ<'Mw:v_?E2ޘ#?{kET)0sO|2>#:ﲐd/>/w||ϊwIۖddZv;gSRypn.>yV;)\Nn^v|/0vk*7.\7Rn"5;ph!`wi>ؤtg,$m!OZX֦-|e3=f<~3i/}jp֯w/&E?k^4 96"Yl9|F(59 OpM'FƧ8Nj`r쀨Dp89TU{nfﹹfk]9"؜hOCk)hZákQKDxKGv'MK/EĴ( QnMT]"Vu+7b%}{f>/.PS=ydp`v+ઈŮH%ɟj3 x;zZ~ ;,W40 #T'!JC\zkHu'=QΛQ6hY. eC5s+w>Žx޻3{^?(ܿnnJK4Y&U1/LQGV(jކncp| <0܎Eae__Ƀڦ32 >r>س`?=kC\_ƒui,3`:`+V~Ě}5B=7N%+wC/1(.PهqE.B_Z[S 8_Y=t0hȴj灕\i3f.F@Q\лvc-D;#ݻQ%K[Pb}" &&{EQDU 6e!IDȩe yTJ\v7ڇe|qac.u{חez?+=^T#k%;\C#癉? 1MW#1Aepa+c +\\R$Jނ%$N8KJ ܩ #<]S ,%\A%|L wڑXMhz 6n'i%nrnbF0+*a 3ىX!;u%ᧀX+pa,\q CHW>NG&scA;\;zID2\|/CvJȇc,w]|OM ȑj g h>ϥkU!J؜# 2YBAE ^&Z,I+{r7ڤ8c8g6ԯv-i<3#`$aǜh jWDtL7A}{~kmBoSx#čb׉sm>OЭ v7oK) Vn]4 _ ))NLvS>Qm]jn@T'/C|ͼܵ7'N>a?y$B~pCg(69r0S=s ):׃g=VT+dP+wo>\oe*V~sҹWtf.oQJ/f?4bZ.Eb{9! 1񫿌^xqq,ׂM;W<~~''۞dz=.&!+($6OIƙ~ׯʽJG{Rt)+n'R`eL 1') mR=ɮ77RHdpm[n¾&@"5sj&O,Ś)k6Gr /o y@ًDD9'vG?5)~_hHCtّgc/z!2L4߁ E|1OgW)/A-suv$gtWj# TҾ\5O LerOL)S8eEd3`ӗqgܤ2~U{Q_N\ARePqݣ2iAaF;=+,۶KnFURǪ~XFywG.θL(yLxI(A7&+ch4/8PL㖍H6Z?/5Z)í"ؙؓl}"16֓\M^tfݒ\p[}%c(5k/}<^^S`1[nYo; Ml\__ NyPH 0F4M#MO+V{MR؈ ?*% Or9Eh)4[ .#1Hwm*KQOuFC|L wbBY[:B BIt7KAWja [C;ʂy~T2Jܑx\e!ƃ^!\~!Ւzף?E~PTv gE_geBDW*HKg>:H3+(cv0%HQ7GyJy]PI~~*X+%.2U# \mg(͟?ȗ?*VdVx;hmokML` L9+[H2Lm_2l 8'E܊ݕ ʞ=puapt]vH<Ϟ/"1UaKܻ\/ƪ~<#mT5Ws|u*U &~Y-qzVcKrn=GRi44za1!ƲalEl8w?^>#A{Wi`߶D L`1S5P3r佂aG^;/ "F>4'ag =E,W"z:em%pREDFO']> qɸxX\~V! !/-Ϙ0mT Til;RޑI)2sY'Y/plpw<[uMò2o2 l)st ʃy } ol\b+k'P|NB}pRQ~ȮKd ٥l2W!#:%ꋀEG$E"{O"HIrP)<_+Nx+~ThQJk#JWF*'+)fP"eR_-MDTۿn"JP Wџ"*DG"I&f5DO>J F=;CB #ҟi1ҝlA햂/e*2Y *S){G#BW~Z~CH^s+د?8;&`_c2E;H4*Ă%r(jem/?pڰ`m.\?zPy"}˫Oa]x5 qf@Dt]) g__[կeu1g?q)k(*ҹ!mi"=Hč/GvDx%y}١x8T\P9^p!pE'^41WƊYɓ :&KF8R3~HmJb ct_1I}[X8k*I;͏<,;V1{5k@ZitOԪe5AAkfi/jOP]:mH3%::X4^-ޑۙ9:zna΂R%CJ塇дoݼ׷|]J3u%q 45ЩSjts, YWnĹ9`:i?]&`Кū;jQxOV{ݠ jىdj_jL|þ~$vgiMnQ1D9tu+[g Ҽ+ls(|/^iXK :\Z]㈳)"f7aUݧ/x~Ne*ՓUhPz/}[} 83a`züv#\]sN35xZF-0Ӡܼ|рV8g5{ƗFD t?vv+f(/ Tz(}N1K핃QQe"Ilٖ{ʗJnVG`\qHSg.q5g.Q6TTn7ׄ^e3}#$:[h8S(hN% {vNW['ՁN>h|TŨRoW8=Kv\f}ily,7G۞5H[ OOU}./pЀƮks c'dE׼G1Mg 1k,5&P4]2-2֜zDjcr3(7^⡉c|h}+J9Lv'?s&kzԋ1x%ɲbɴӝ\ܩ<9tEH7Ӂ4GS%Fzf=_5!P`9\Hn nityK $&c}Pdu%+f`dWw\N>P2XPAg>2R;]g9KuF~]}._-핽(:;>j9o"@рs:M}Pr7Oj&PSTMY5h:^qF9zɻ^ԳgwO헣$HBWj]#-Z2^2KRO1:n.Ugtu}^ݬɗ=Sӗ+wiVIݓG8[Zz<hJ4L5n08$~bVÏn&f(~&beָxh2642-ڿ^GrB''OfS)niSMKLMu]RyɨfYebN0ok^ki>fOu0疈h&RVz}dN2LzɗYR- ][ -,$]1FI@fZO?5Ѥ'sl ryi3O>#A)i) IzJl]%I D#H0TCO6@V+OgHHKu#Bo\t;[HZUg:+CvNCӼ;rrbj9E kj֣rc6<~b|qAB,:g{ͨ}?5!oB㪭ܩi:^d`[0՘jUŵuC104cPӐmaB%e|J́sURza̘Su}Zt:+,Y֢S WR)%%SG|81w.^е:?w޺&\.~;}֘p3s[#RejHޟh/%=" ,7L LLͯpQ,NjZ\=M; BzN8E^#'nr.l{NhfrG6 vy#\l`v'?+1FS^{/ov\# 4դg֘6[Z)z:dssw3h.$W7ϚorŶVYtlUKk @Dڟѓhlt}~>f3`?y ߘߏRcFazxn|tG\x/?*+vU;o\e+傾]>Oe co{4 sYBG#ĞY?"*tĦg>p4z&䌍"7"y6؜6ciƕmЉ!G6m`o@K~Ɲ#?RV_U:x{ߛ!pXľG/G0ᶏ8~nyj~Av;뗏z޼DNW:1O#5MɁd&,XAiyMZ2CCk]Ԓ4-5_K` ~J@W3j_3InK҆Ҏ`Z:}9Hnޔ1R וQ#:{'?I7Y#_(:QNHv~ V:۷T!A]0PNR撛hpSr"RUP#`z:=cKoP\gI&c V.t`:6r5Ev_?il~h~eԶubK,9ilyhyekRtˤz>!MiKߥKidRIH2׬!GdLXn#\H@ddw -ELҕ"=N㣥aC#ϔmȔ,͗L[=ƠۓʛT1kx+H`,{U( ..+n\WJf^bIޛ[2s%xCkb^jB%sqNj^􀞵sHmg7+iHC"ԣDUK vZ._c.rtUvu13g9>2q501KSPf]E{PaWN2rS<[8FYSteWf~shPsCe/*չb(vȚefdfyDI奰J9| kJ3Bn;䱼3}_Se4LuL6 ^lYsc2w=K6?*Lw͸dvJV%ߍ~yL9[ #U`QZtNe5au8OLNS9<(u[ÿi:aYiC3hg_PsyyyYqo%Aw%rSj"=tR1")d/1,gh#|sgf̾;}ֺM7xUKZ귥=G|e`R#C2;gRmj!A)_Cp=#ݍ%G$%fI1Š:5YC,1ȣ/l=]w[z;w=wNWKWF[r;/fgHMsNr{EZT7e2 g נ@=[L?3/Y[s_39kh \0n8M_]^grhgZge*0s:p6_3gX_:F.z3HA'ikʹRC cp[B>}0*.QhEun(}Bۅa Fw{o}߱Q^Xm/F1f=t@'ʰ[v*,f0[@7k/B[*[ta^0ʺݥ}ž{_e q VP%%",[exEpRamυW*ro{؜I#DW0@ʁtT0zB EhO)Za'>#2bIKcou8p;gM"OG5-r@MqPycx57]ڐ /N." C3Pg!uj0bhM!ã4Cla>`E 1dd->֠2AY[R>~ }F5:&qaѱ0X'Ii}vn|nUGkmw@A[B}+db|NBf$E{FN9tDB-QYEC"GW46~DEBݣ'MH*._ {kig}eQ +kee1%_![ 1>O6SL)5j)mGliz@p[miFCO( e']r9HynJE+`|By )>܃By )/mϷª6aԂ[R<#>R>@JHὧ@JO(C!E){THQ~BY )>삔1QH ̎!e'|J EQvtUz&>h@p+* ?≤89@8dSuv6mE lR 6e;<~.[_p%aaSf|)a_[Ms;g=hf=gfk"ʷ^%_F>}kS`uO|@y1̎6VubDHR@˰5^=yߺ,&ְM2D>Lo.TCWIf)7EQ7:cÇa0P'.hN{b9p c0*6`nŷ ʰ{x쏗% G k[X4?NdX"¢`;"a!1"D«Ev?[a^yp2HHt<^Xtw+(dӝ\[NeؕgaQ,L|2RLŧ/X \JxحqX!eFuSF{j;84+, aжl) -jM>q|w϶ tlGDQGU?"Eijhp7֋օ~cCV]IXA?qA>.8Vag͂BwD{f2wŁ *f)L6/gDF+@x)>èTCM6*?zvT~ñ3A݂p ጨ<+KD[V|&SW P8ձj ^[gΈ\OK 7TUjtaZ}M14&A7&n#`ފbBt.YYY34&j :(kw 7c0=|.8Ac2 {*`?1O $}!TD:у0BA";VBFl&zƒp!$1 H 2|$&Jp5G!E<û~!ZB A'ӹ0@>L;N0u܃7&ra_93 qWx_C!FBDx*Lυ!5zw od+4$K8ak/nU“F4"CI ZB'n~. =өaho$?IPnP~(-P\@.r^ =I !b엑Jڋ_|^{^^Ƒ[82.D@߳g*R-^~jz$Jnzƶ'ј5g>81oMZ9hC&M8x>@M>w B I4Ov-678 D>#~cxmpW-^h&w:I-!+]dwg7kW!E;Ws`S|w|Q ~o6CBl ~?2;!Cldmc!N@qg ܅^} "4)ϸ#!Z`‡VB,X Ç#Y ѬX ςgsayZ|{< c,ªjޯUÝ@K_'A鬙T|2DXD <#ڄDzBHG@|GӉ0t N{ a|p:AAC JdQТDAE%"L&A 4? G@+ԗ@|98"b8DlPD k?pj9nD"ӒPpZrN3DS/e sM !܇-x ;ތ[˸xS :Ǟqǎ\CaI\`Vùc#q#OܣI1<{" 'OpsQH1|(׌C܄hExݎV⁼xDW[}b o#{ =r!B]iwWCb'o;Rx;X綰y:o˛x3FV >tg"ms _{>΄gLϨŚbs~4rna>c|𹔓&,D@$)?H)BJ?*rb#7$5S\b!+k砳ZkI!,k0_z)^H>);y} T6 VKоh{Ѓ&Vm03{գm@i>ߵxZ|a+6%_O%`;+AÊbmizۣcUז% ܝU]f}}[_k6rk}m1q6 ~3_nWkK_UףK=X$JY܌iRm 8X/g‘giOoRñb>D|Papé[O+8u! O$+|Pb%oDŽ IP􆉀j*7ڳXXjFr&C9Br1gG W_UX؆m4ig{ W뱾@pQ (|3[ZcN{M?ݟ㈝bVC/(ͷŦNr]}4JQ+mEeLWN~_\dv=xXkSQ?#/Pl)RZ:8((%4yMNNN." 88N?Bb9#+/,)={9n6? lTka!5a~.=Vj eH_p kCMg}͹zS 6P%P)R[1`~A|Љ/[v1Ωl?N.8A{c6dHeH`" !oO|jF:$땔6*T7JA[H*z,R'VC[%T15.P!mtF>θJgRZU>ƄŒ3p'bOێ{+b+{sپj}~.'CgZRsUN|B7l=D+篖1̷wtB?!5vP#Ee^0蔝K2n)& :T~omx~[ƐHa`@yESI}B~!%.^ Q 8/(:mn5uFo{JM7۰Nno?Ca옃H?@9N׼ߡAcPxoc򴏣T`ʃՁ8Ep_wsK1/MX_hb5&u<7G!-D˶B8wSs-gblΈҍ"z-MȻiaa8ER#$1=i΋Pcĝ<aj1Ӄֈ٬3]r#ukt&$`(ʋ'w1x󬱺EO~[T}]%o?3!%i9*y׵U\5aea}}BθU'W`2 (P^wP~H_K:(۲{kv(-_.Wy'dBJ$iSgcr^Uخ_ }'OM`x]@wIBHT4aT +mEt&( 8Qpkpԁ6:j5abBԿ4^]Tl,X ~)0z%}. P8PPp5xEw7€@Io*KUFB-jyo[x7OuQo!z׼^=1HM!@~ 3"s(E`d؎0u6P|AP@ Po%JAPe(P(à|e80(#pC5H(QPPFAe PAeP>ƒ%J,8(0 d(PfT(PAI" (Jt(PCe&jeO| e.Q4(B{!lEAЮ p떲nM`}NSa ~]^ osQdNg]:`_w,S_Nc8$Oo/t+i[:G{w۫zvZtѺWdI'PKl:ݩ:+:;"z[ryvކlOX~MJ.HMKHc:Xns7?Y>繺OK?n~ޛ<ކx1SF0#&9ѵydBʏ9Gץ_?{=_W۟3]xCy!BCF8<*$rD`TȈmeN{x舏Gm_:^߫MEo+rumQKzŸE4|^d=@/{%$׹fG9'0 8C6Xwp5x9k6p(rxڱPC`'??L;~m|+bs5xO(iI_oQ4`Å?\paÅ?\paÅ?\paÅ?\paÅ?\paÅ?\paH /?/P{)ŀ? ET*}E'?hr; 0p3g<{-&&&k_ճ'{,?zj z޽UАð~VVVѐx^^^rwR f@'wސ{ȫ5dU(׏CP*oY0c׮]c2o2+hXgg.]aj8^!٘?> CA| 44tBMɛ}8x`bldK=<{7"G_d%Xt07p >>=!aϙSK0pO ܏!aB|WM_;<K0pO mg7 ylɉSg~2k֍{{ކ7ֽezon5mΕyz_MOOM?Ұɽd'poҺ7wr7 un ZSiO?G`cc#?4Uv%?}{ZZ"ǸY"ћ:އ;p87lq"miԞnNeٜ8~QՉJzoܫ~;-/C\xqo  2lСp>bܻw/>>~̙0_HLrr{|x+ 6^ZZOa477/Xd\Rx/3cibbboogf,۟/4iTc*d.۟q?N>SPU{;%{>dȐ_-}rœ>+;,|'={6.58ph NpSjP8^W?0g1C°Zv] %-ّp@߻wo8Z1p.qoԁ3uiO_=\P_W<\0x4p/V8\кC6/R3p/qt ߐu[/ŽK`wo_?{C|C;=n8v۔W?P?{= ߌv_ ro.h×jR;9[{C54O opRakZo$=L/q/0JLeQˇϕ.o9~kӻ_4 5oto f~gĽsHTU?M?{ :o7r ^UI&.}o{7*3O%{q_^)?=TA^wm/oX,zZ: $'_[/_s2u<~d8c<5+c>^gӿ8{??oY7}{zך555f9U]]ߦ=/߉u7_܎7=/ӿB ?=·V}qgWSm(r {}M侹= 0.$~r6἞_{ܳ<{̙mpEoߺ| ෆ{wߺك[%AfE&܇}0ﺽG ɴse~?½yշ7LgAɆe\(yPBYe1%P>"J>ePC)Re݋WAYePAYeNJl f([ڲ-(;삲({g-x ^ZG}9e]GXBl0M8)1*!-ANHH (pߨБF@O/x~ ]ٴa=@CSXx`FyL vz+u?%>%t|PT?#- O֖( 8(++5558o`͚5N@ &&0;RQyNoJih8Cz߯`Lv W>i}XPAA@3.G`5G!n6HcWu6#VHOJ0FNg4# YbD6v} xT4AcN'fa U]A?@GF3ЌAHAj$L{b`/`u8ZF8 c{LUE4λ@_/!&V]h^lC*ggaF9Y壮Clmma 0֖6XĶFb[d e ԩ4(,XO5M1"G *AlKFN}o7j<Ɉԫ CSiײq_3r4f)=Kh]XNvM,{Y&fN>B֙6"LGǂj. )ےŶVb[J7-UlKS=#u"jaw*RxQS݊CH!F!V862"3tXtUw*8K-X/!v!VYR8/@[w{((B+I6|=I31l51(/4`؊Q:O'v&8Ř\wٹ^AâUi+@t$OVG"\$6V0jUbenj%4;ݶw۹mV@(r;m;mŶd#܉rc\tT TQVn:108͠*\wQjυ oޥz9{NHaX8K;?Bw#"LmwtCOY݄V5WLqC$AeC-s9Sӻ6Y$OaO$[ }i=D7{y U+4YyTֶrxmm1+((aC:/ 4N倌tUO"z~>o]V $jpYѕS X1ƼuU ["Y`gbpp6xw볎jϞ89mm~S"6 U F6H3rRY䇪.GAh?4k8BFfŦNBH 6YZGYKGBUmQ:XFϑ%S@qG|٩bE!sus2N,b2уm:ZE-HJ2D1I "PqHD\=e4Hd&lD#[x':`q$QfB8: 1I1(A s͌x&h-<:*rrǻꬺ>B"wWJEItnJh2\xz |ѻ L3`+^NSX.,˚%amdgZ}zʲ7&jN8u肸#-T$4@^x&F ıdVƫAz`" $rrr6qpuCNǒy`/7wwjx-<3agF `0WF[ADnhQ(KV$|lJ|h/Qxlb> "H̤ҞR4R ӥүwtL탄?_VvΦ&1e/kj;ClYAȈ벇6!`(y||||\[f GEO[SLW*(v+@Č^B0%Nǂ{5Q z*Her2WF[ R^PQ6(nj0BNUgW9?mmqz?nf4/˩8)q ?+J'dЏFSɅb2#YMF4=6.o履_t &,"zuuUjfSaXe` 0ۅX%V8v 8)BN1LQHi:fxky{x@λȫ5Ba-\)!R%9 J`dQQq*G*+ce|R2:UMECDƊ%v`,r)gI&iͻ7ϜPԺ_ķ& V_)+a$9T&@_0(5ldd4i ia2v-4S.8!x^<*Mo멚[y=3"K)C |Qxlb>)8!"Hd2 Dde5[> 0#D>> x/wp{DOIOΒkOuA< Tc;l G".jY~[pכI-ʰ<~N4 בt1XZ9"iK3KYM!DXt:rrd¤wZ Il5 83jqަqE>ۘm7GF:CRqg:J BƔX}E1&j3~PǨpƠ[^ZV6HZkF"ŵXNcm?uG5$9<͂\HpɅ'g_#&qDq DFU3rp,hN(2^"TdӅxC̟,6W_V+HKch[51̍OeiMFZYfovXj46H< OM` //_F$LMaRO#91q=(*q=ScM獌; .k=֍@_ B"6yoSJ#Nsl`bPZy{-k܉GOR"!^ʶ1yy,mdG[c'Y]#;U:8vM)rYBU3}|Cg &$蓸"#z/"Քfk^4bXsf u-f;Zw|=D2!}f$QBn oswp!u/?N?IB#٪]Nee]A3c>i-GsHxn >?v- DL 2ǁ@&O<|ЦGP\UBY@-V4[nN* FU-őVh5DfbnְEIo{03fmxTLpc滹";T3Tvb)nEo8" GAZ$ss%--\\Lʜ4 +--њ\@LFMxXlf1r 6$7]<;Zdxc>h!#GYk0ItN鞱 S[5zO׹x'0錘D=t&%3R1@$R4i4-#\/G뱶F(DtOg㥙#:U`|Gdz?a;pޟUL3G%Fyaa?L^?p53F@D爠Dd퓪(}-r'MTqje1,"ğ2VhR?TR:`fY zFЩ@(.a1B{jjcKlE!p#vƳMfۙӹ02bEr8-6^R`[/^k:"M2&VVlq%Ck]v(L F&;a2̭B{ns6JKsu\R?uI}25 ͥ <>~v8>.Y: ᖿŧ:`kK]tV;6f8a@$zkSۨ !:g=oQ36; #ҟ(crO:$ gV@fFFrs;d NkVK!TteF3Nmչ!ā&Vzlk! 25='9!7^ޜrNqjyc7GQX@$aG.fzaThۢjf;"l8>nC9j[\̛j1나"&u&*7sL!c_pdEAa[i6Wl vwvG$jp(<͹`So* 1[v G"ۄ:L{' u!La}&4A`SQ_i҆QG.N'cS>)3Ҡo_ϙ>ֲi11.VU2(Žv`_i##ՄhKnWϨxzt~(cv8-JUR8.HMyF"?hW9ԠL1Jl]9䝒9\yȣꬾіpw?(H4ްq(86%=q/繏h,2g/S@?.6-ȴ^}g~ q ӮJIc [Os[e5MJL\ 2|uX!>|켝[J'i<9aq H6Ռ.Jo,28?A;KlpJSdL[d3t;|½ A܁XVg7)H5&\f-'8o 5]0tE>EvzQoL& /2_Xrh-[F"FѮtq:KkG,Bm*ۯԡ-;IȆt>;џfhd]UgR+AUb-31Y6zX h!iH5!| ||22' DQQ%KLQ滾(Xt&0qA2[#嶧d$di х`\F:JI֎MVz-ݮ|Np D<->t)~nszZ]Ju?]#N=1ؗl`gC[26O'h7~ʈbGgpM|ɒ)9yDy\eRtJWc4AqmFӏjvQCY &O '/uZ@(, %uSG5Um.?>Las\/̮߬!6wk,ɸ$MO{F&Ĵc6<޽km  =DL \^%m}mUZz*?!Ið8#Tմک,Qp7+Ba{EU-,GRrtyr7u[>tWY{Z5tk='y0k>cM]p`?#^O3bGmL.,huscd&4??s̘.뿴%2^g?glrꝭɼv?̓a #T~엂e=b?Y*3{@7(v*#V8m )$L4OJH:"x>zL -9@2OYD?^%NǯxKΖNN?˷:mNLA:׫6pNjx˵|adz}3ϥ䆂A2'-bJ34FY9w-„#=C5:el;0Ъ4`py l |0>CL`é>ݿRi&{ `}xY]: ƀfK3-0bS7< Z9Arq{Rs~gVvU J\ٍvE*|z"j0>Eσ:FD+ pePڣ Zw߯TiH`(U`m+UOAJ+2OfM rBq`ثOX(Ҭ9=TiA\Ʊ+C.n|Ӿ߻>4&\6mOj6@L-܏|Y^|(ںYdsĘԸ)_ww8tQ{<,3zXMApm.P|Q חa6NDDo'"8G0cBIB(;WX l l lMwؚZZRFD";gvk91u`4v`= Uc!NMA0iLVQI"gRhyitA˖F#\˂n_z'=o3Ӹ .-lE8E6 mtςSJ(u'Z0Tg*OQ+hWdfT#^@VLJ}jRٻ&]F L| _2uޕOÌ0C;BcpBWvf7tG܀G)uH((HU# +mːG(/ߒZBGQtf+ƾ+EF6ۍnnWbDѪYYCl{3S˽ohv#zQS@={}QII$$guy3$gT s b*5|(lP#DE"џ[jݨ8JyEf&/Z5k%m5f{,>xL))1U^l!99)$ʭ0Ea+f(v5]v J Wsx;OV er~37O!6]}]6O;Ϋ/WoUK<1>x0> l|1߇@\lߝЁȱq u;vuD/@JCO ''m7<.!I#K`wFyĘ"ħˤ# z}-=z]NHG?l0ޝnL4nٽդ"Y@pIYXX'XWX5,2t7>Lǀ4p{^X"]?.Ilbg"S99G@.'nW;sΨ/&ewf"]o3fVW̬>?8!H:qN|AYaԡ*aC.6ލx;x+,4uy0Q(mP$ ٕ$EC`6T1RBQ$육Sɒ=C֊Ò%$%@:gOv[avzK|3oN'o,@KcVMV1%7_ݹD_8W}6*+c=lu:N5e5SwšÅk'_A]eӚsbIdj߉*5f?ք߻WyCdSEŚ3SO 6ùk#SV.Y#lJ˥?Iq)E"vheseKeddg1Af$wyGD\L|9/u<@!sCcSɟ'z=<"'x(ȕDfT"j؏l[֏nul7?M'%wMt*}_MY4J@z̿ђ`Y`+5J1$7/tE%kpdKf~'I%/kqOCqRBM&/BxA7䋄GyQQ# mLa_pB,N^ &d8-&O"[4HM4i<|U um$sm]"&:t1KFKFH*%,Ɋ"k֪uvJS䞤Ub.,ita=itppT/njq+̏ht Ofy r_a(p#}|F/v" ٫cW%cTㅔn9A9tfA:&;AWv}+R@>X^BIDGkY״!#"° ;Xv6z2go'6[Uq}ٱ|;vW0?Npj#|~ژ`s4a rVŘ%V3aA:E{{Nm"7|jl$GiA[YYc謲e0n _*C@`CoX-ž[~Φ#vI^ ӑlNQIւ-[Dɂ6ΏLaR2=RF.f&fc+ʱN۞~PurBߞSmw^:m ik֏Cn0toB.OT&NFf M?T'K)JsqFj2?^R=沼ZgY.F´>?xܜwIl'uŦDD$GRx+~(G]J_%mded"E_=aWllK0rKD(3;Ȼ9r_S?P?U[t0X<R͢WG6ܒ! wk~F['DIovnbl-h;׳}Xvm glsRB􌻳=3n|;,䑱CIt1b} c\@]&uW;mؕtm;րy›߱?lutvI>,i>۰sdn,7X3yZs6a F3.bGEWhMv rVtw?Gl|0o-7>i}vDdN9-,w^@k'wPS6nxU?F1K|R9>t ?wTA%f3&G~ f|O2 ʭ|3%x'3ДդG|ScRmOL/6y/R0{Av!ܲ>x84r/4w,'aqa쓜3,S_<$)?pq DRrLde^ 70_=Qya?e,ݨ9hwHQkYXg@7'E}&k:mǤ6x\aVZgy|Ls[B7Bt'_S;ݰ'wuw4k7NY}* r&(JGӠɱ́.ΨPdwĥ:.֛ir3{dԬ7R[Xn-yҨUX4j)vټ뙜"$6 u/}yɾ'nɧ/f}?/Zcd>JyJds؍SYp#L{6ճ24y`$;L?-ks]Ԙ<[.rqw Mc;IYHRLlv^|D|ĉyJTeڰTqKANANHSrgZZe[l͎<05޲"4>pmGe #y_ݼkڂSD?oq9radw>*Prs%&- %y "s;k᾽fv7e iɻW3a~A\]4>:d.8)Z6O@dSw8rҺ͡u"/y~s5$;`2.g/ Ѯ J#CBS 9%rIUV509}*c?Bۿ]Kw$VU,UlRPQT*CERP(J0[٢'7?)?Zw_6r2tIdEedAr99)|L.;O4t/;6i "8B]BX2q0er!{2vSZR;zzzg"j)u.g牺Sj'g`xckYS0zAfա,B8a˶ׯ,ܩn|Tݸ:̞v9w%)MD_}ci=)dDT;SKb2;6&+P/RAlitxw>Ld`JDcz,>:p>5)g$+ɢ$l|!%rZ%!ìYXY~[17~;O]K)`vN @c Lu-/e#?jD9gICU/!P3^=GmtH+ˠ\USڛt9~Aøn^~q~#[8hmi"7qMQ>wr6HK'V<Нqw6AԮ2,6GZۢ\OGLK&]QÓtڍ؇ ADd0?x̗0r`I909?Ys29aN960eG0g9D[j߭aΰWsx?+g8̙s:i"Y0e *ZtҭV][tk]эNgPЀNtAMU T|\juA+߻u1P'A)ԫ.L rۋb[mj]o0bOTZD{mm U{PA6`{:g&/PXEDx(f1پGOJ msnz͈v 3\ Bge2[xy0y U{%2sxzqZ*6Ӟrl'بkYf{U{&^WoJ3JTS?v݅_;U{ ܳK! 2>iF#0qJjX]5BԌ遯1DQ 4b׌864Ƞ:D)9f=8߹tE8]A-uQloIt>wN Ѷ.=Mpl}wrM=Xp֮MiP*$z8a?Id磵$D NWtm-\۫CYPbЄ22u2( vxy^IJ]ϵ%"_;]9k_YX"#܂6ccNמg_8t5\vJb;?5?3hYy1R^aʲrx*HKY߬]j1Ŝ6c灤׊|%쌐_[9…Wh9%UVQ}q== 4Y$2dI㠧qO1{)q5I[ÝMݲH͟A9u^|#`)tx}()xߗf ~k9پj?=]"W=dY^IN DO6q9bd0LN_c_b;a˒;mCP4?rٕgg?=^\aتi=CFP#rrvX%C,Yy}~5SO>K @xˁSOקWKkT֯ 7ߦ5ln;#" |^2t6!6#!mFG3*ci5Q3&GCP6jj1/z:~koVK{|VW ͐/5QCNah3 IEt浨ޢᦷk7K-\'/f*j |_|i!Nfb,r- ?C^*%>nk `keWQ S끟X5n>5/kOg }'l1$F:6$()PD[4ޤPH3fJi!dbxVOwlirEw] al>+gXTRV<f+u8ܭ4$X(m`T:@T:thCle}=l5 n&E: i?H+\$g<9 -~ rN:8Fjr}*R fR =hǕp' 0-.&\'N8waR؃K#\ B،PsgA΄58VtX@>NÉ q *}}D"~wH8xywZ#—Fs"H,o>"2npNYY%ӲeeuK;&(.6&㳆?5)nIލzVѼXmZJkI1aMm*6\6Aԯt~n-{j<#_/zt1"Ur R)X c\ oqg0tJ!s"1i; _U>`&k=L@mE uH@v[YEO`%S=@_AbX`-d_qbd@8~Gei@\or@l1Oh+'07 hp   ,8@8An Open Framework for Foundational Proof-Carrying Code Xinyu Feng Xinyu Feng151Microsoft Office PowerPoint@@@s}2@a+9G5;  9  y--$xx--'33--$,4 4 ,,--'-::--$ , 5 5 , ,--ff--$ , 55, ,----$,55,,----$,55,,----$,55,,----$,55,,---'--$4<<44--'---$3<<33--X--$3<<33--݌--$3<<33----$3<<33----$3<<33----$3<<33----$3<<33---'9A  2(ss]]GG22||ffPP;;ooYYxx*+,-./01"#$%&'() !  '--$ * = = * *--'---$89988-- --$89988--"""--$89988--$$$--$89 9 88--&&&--$ 8 9 9 8 8--)))--$ 8 9 9 8 8--+++--$ 8 9 9 8 8-------$ 8 998 8--000--$89988--222--$89988--444--$89988--666--$89988--888--$89988--:::--$89988--===--$89988--???--$89988--AAA--$89988--CCC--$89988--EEE--$89988--HHH--$89988--JJJ--$89988--LLL--$89988--NNN--$89988--QQQ--$89988--SSS--$89 9 88--UUU--$ 8 9!9!8 8--WWW--$!8!9"9"8!8--YYY--$"8"9#9#8"8--[[[--$#8#9$9$8#8--]]]--$$8$9%9%8$8--___--$%8%9&9&8%8--aaa--$&8&9'9'8&8--ddd--$'8'9(9(8'8--fff--$(8(9)9)8(8--hhh--$)8)9*9*8)8--jjj--$*8*9+9+8*8--lll--$+8+9,9,8+8--nnn--$,8,9-9-8,8--ppp--$-8-9.9.8-8--sss--$.8.9/9/8.8--uuu--$/8/90908/8--www--$0809191808--zzz--$1819292818--|||--$2829393828--~~~--$3839494838----$4849595848----$5859696858----$6869797868----$7879898878----$8889999888----$9899:9:898----$:8:9;9;8:8----$;8;9<9<8;8----$<8<9=9=8<8----$=8=9>9>8=8----$>8>9?9?8>8----$?8?9@9@8?8----$@8@9A9A8@8----$A8A9B9B8A8----$B8B9C9C8B8----$C8C9D9D8C8----$D8D9E9E8D8----$E8E9G9G8E8----$G8G9H9H8G8----$H8H9I9I8H8----$I8I9J9J8I8----$J8J9K9K8J8----$K8K9L9L8K8----$L8L9M9M8L8----$M8M9N9N8M8----$N8N9O9O8N8----$O8O9P9P8O8----$P8P9Q9Q8P8----$Q8Q9S9S8Q8----$S8S9T9T8S8----$T8T9V9V8T8----$V8V9W9W8V8----$W8W9Y9Y8W8----$Y8Y9Z9Z8Y8----$Z8Z9[9[8Z8----$[8[9]9]8[8----$]8]9^9^8]8----$^8^9`9`8^8----$`8`9a9a8`8----$a8a9c9c8a8----$c8c9d9d8c8----$d8d9f9f8d8----$f8f9h9h8f8----$h8h9j9j8h8----$j8j9l9l8j8----$l8l9n9n8l8----$n8n9p9p8n8----$p8p9r9r8p8----$r8r9t9t8r8----$t8t9w9w8t8----$w8w9y9y8w8----$y8y9{9{8y8----${8{998{8----$89988----$89988----$89988----$89988----$89988----$89988---'@"Tahoma-. 33(2 )An Open Framework for . "System(;-@"Tahoma-. 33"2 4Foundational Proof.-@"Tahoma-. 33 2 4[-<.-@"Tahoma-. 332 4]Carrying Code.-@"Tahoma-. 2 JC Xinyu Feng.-@"Tahoma-. 2 R?Yale University.-@"Tahoma-. 2 cJoint work with .-@"Tahoma-. 2 c> Zhaozhongk.-@"Tahoma-. *2 cTNi (Yale, now at MSR), .-@"Tahoma-. 2 h:Zhong).-@"Tahoma-. 2 hGShao.-@"Tahoma-. 2 hR (Yale) and.-@"Tahoma-.  2 nBYu .-@"Tahoma-.  2 nGGuo.-@"Tahoma-. 2 nQ(USTC).-՜.+,08   On-screen ShowYale University|  .ArialTahoma WingdingsComic Sans MSMonotype CorsivaImpactSymbol Courier NewTimes New Roman Helvetica Wingdings 3 Wingdings 2Lucida Sans UnicodedefaultMicrosoft Visio DrawingMicrosoft Equation 3.07An Open Framework for Foundational Proof-Carrying Code Motivation Motivation MotivationAn Open Framework ChallengesOur contributionsOutlineOCAP : Overview The MachineThe OCAP Logic : OverviewThe OCAP Logic : OverviewOCAP: Code pointersOCAP: Code PointersOCAP: Foreign LanguagesOCAP: Specifications OCAP: Specifications Selected OCAP RulesOutlineThreads and SchedulerScheduler in SCAPScheduler in SCAPEmbedding SCAPThreads: Assume-GuaranteeCCAP embeddingCertify the codeSummary Future work Slide 29  Fonts UsedDesign TemplateEmbedded OLE ServersSlide Titles"_ȳ Xinyu FengXinyu Feng  !"#$%&'()*+,./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     !"$%&'()*,-./012;Root EntrydO)PicturesXCurrent User+SummaryInformation(D7PowerPoint Document(-DocumentSummaryInformation8#