ࡱ> `!#zz3/h~0 ! 4DxڕW tWJoԒ *KevvZuc_IXB:"F2Qs )2E{~93;sw)̊DT|(PekU)e+Y˓aZZ<УOO#\nO3Gsu1An^vxlE_^vyo E6zm uwRol=k^I]vQZ׍zn>km]g}׵ѮFvɮǽnzMѫ#-.E }2wEr>=V8ʱ=Jxk\ص*^+>{w8HNssWȻ"7O/%^Uq^W) tä+/E.Z&],uM47Rv~/\9ZKk*߻Rĕ2\jz< ,.D>B{o|1`L< yk%P E*?%)3H!YQul%$J?:Gj[ 6h2~M7҃ynKuռ_ًkHC-0!M/`6,C{ ekK:tBw>d*Xji hP.~\p^'V{Pe*@"n&UZTkSmnApj1 gJMCG<Q=NPkw/81;FnRWD 4N2h$2e(%I/Z+!Q͢H*H4 ֟ͦF酵 9$JE,RSPgH}&[hWI62Oe:|~W~h75xl]E4"tM94IhN5;̞uZh-Z5iVH+2?mTT*M@Ga>#g57!**LۡX;=mDdkdO=;iXE^xpVWRD׵jwRHCIAXbDDv=4((t9t馍a+]:dc,uϰ>\Z9Vi>t0.G1][cT.P*`*B{і >[^˩7ē&s}.{T] |M=e ,)FB)Çh6 HML"Ԟ-dVZ35Nl2OIf;[ϷHS.0ͣMC8koZPH`ڦ hc@wM#P P;X| PfTs-#N^Zzy,@9 (pAjt[;BPAhz5>=8u uy!"qNS˔ކHŷXsX󘊳ў Wf`0;00JRι؅8lV!,b\㘍јh߱fO"md؀R87?k  cYdhgtS6^3tEH+F~'bN0C켿K\M,ab! dգ9˔ֆM>mx{+i7o'SS?oϯ65_jqnX"{3S5D}m4h WD>zp{};DS鶮%+UV m+3UP(*2Y!HAx"I9ϙ6kR,cT]cnAJ,1Ymi鷾lFƻcTQ = *HVA\RqIQӬY!/PdJA5o:MfӮ+u~$=kwkV/nF )s4ޚcS.* |WB襎Xuu# ԔQEQEQEQEQERQEQKEQEQEQEQEQE! s[څF@3ɯWNjˢ^L|9M$K^ៀk3ϖzk <9SI 9MvQQ5EQ( s2f&K>ҷTr rEr4_^Z fmX6%2J:״+2#"z6ycOh[jtj?k:"ߺox~4Etrkc9unp?*xE2q(@¹:mkrQy"jo⻟@#mOS^V~iVQ@qL4H/`[$6+3Q4Z&K(f ܼu~$*inֳu5!a? H4(r%4xNt5]>34ף2K]6Pۆmkw:FCoT4gr=+pjxU ?*? 6#^%1׬xR.4EB2Mp+*Q GtR1G,O#c ¾CQ>'%7A|XQkpf=6V%*E|.'PӭnapTs򯡭mm*U=MZxA)@-nI#+ſ 5 3M-sj"X S<'K]l 2E} 7ɝb }* -QEQEQEQEQEQEQEQEQEQEQHzkM+̲(rs_9ǚߍ/v4 8?`{}м/xr R%hw2Xڤvq 'sIK5FH6*? h^'RW!~VV+|-]E1&=mR5E(WcIh/޵? $ 6%ٌD}*Oxz/ecm:r1{׿ibL$J +ʾngC^5TWxݲSRJ'K?4b\۵} {-GCӂ fAWVj]/ڍ66~5|;:3I+:Mg3sonMڑ׌pmoZq\\JҊJul&]!qYfXSpѱ#XHG*9,/_In|^ xs_nFJk< 1i }­u-%!J(((((((((()@Ҽ[/;Lr(9 4sZKoF7}31uy2^: ڕWnaZQ^cxZC5 #{y~hq4n٬|\qҾw+M\S ⾗VWPAdyYzݨom2W+/jZ]QX(uiؽ*иL ̺ cg+0$5~{y Oz'58𽿊=qg"5Ah xxKIJxgX-}_5b:aՁR2=k>3,>p%F>Z|%`4 ָd ƼoZ?!62GAaKM m^Sy>w ѥHc]Er3 7w{pCQO^:ϊ5+^M>/0dtm졊_:UP}kGc4; rTaG"y #gdJ<UmY_Mcźglub@~e5QEQEQEQEQEQEQEQEQEQTyG c+築?Z]+CdI0<ҹ_;|ev;0ْgJc|3`}G+TA'.xͯkHۡDoG9h$<+q;(P9$N/\jVf;N/zNWUC۹\U#+7^O|S tqGnk`Mn$#pZOKi V׊m*(/. 0ֹ/2ҼW($^IPbxcږi>%ɶ&|xᯌ5kUKłMqs^yYV5@ 1׼[Y4rVQ7c!ul)?_TcYۅ%\~:QLwTFf` OJoֱI}M{4<9[i n u5cmj6ڎ!Jx|H|\ RyWDktG2^5 j:,k ,с+t_[.2A4M 6(VE"'EQEQEQEQEQEQEQEQETI.%_ďW$M7Nш$dsĒǩjHir_Iime)HEhqA/jmnOGc/Դ<hM ނo豓yBU5ɏ31oՎfV7 4L:ҴW?&owSђ E|cZtMnTNA_FitW$jq*ʹwVA.J:=NgúLq9,qQ?P)䢂IP=jڥ􂩟9n>2<xӓŚ [fufwI?-AZ r#XڃW7xcKuK۸CMlۑȮc-yŏp#9S{xP?ɯl"F5u'/ v Si^ɵCv7G$;hZY3tg'WUËXıj 2y]k"d=W?~!YRi_x-QEQEQEQEQEQEQEQEV+hi$H2OJĩCw.R3`>|/_T)`*>}'imvGP8W;yhPy o#I]G{k%˺9)5ZvSO^ZIc#]W¦r~lk-;6ifx*e7EWv]wJmcJNNVF@kZ,g&YFI5*F bczou(UUk>9Xh]:\o];I"~|G՜5+১Vu1;ո~ig៼9?_?AQyWj{|j|Fmu˸{U)>xMoxWQ;3?5Vm>4jk<@}E?һⷅu;ՂCq]ݽbKyD=5ltV>{e,S"-mo 5"ws)נs66g+cw>0Ք~[ts./ ߵaש5R2[A!yz54k.xMP\%` #_zr=ih((((((()ŘI=oyt-&l@HJ]l?j xE$U\|qikCPbWMq'Éj]#4NUМ0?Jk6:=7w1ƈ3 7ѧvhaֿ|su=^OX8~wpk>LBVJ5k51x퍬.+on<;Isr"f[>2ibŚt|0+i+6yzyjsJѰSWjռ5OFBmZkTExr.b xVγa+ح-" (UQLu m6K(MxcǖX+CYaxn7ۻRpG;źd*#k;Pռ P4St9WEb^6yv^4jvu2W`: Z(#{Zi=C[xDbPng5-B)μTQv j2Ǵ V|;r{[xKKv?ZmB.-fIbq)Yx $QeB"Ny-*[ǜk&Ծ+kei-?t+Yxke孔A#D k7'|}us:Hϧ^t/hOhf");s׵E4w,0daa^Ucz&a]B >7o<-@[d5}gjvƟ C iEQEQEQEQEQEQEQA\|UoMk\y"%'MFR}p3_Wx3С X֝a][NpvƤ?GS-k)m.Y!qiMgƫ.M*M?ƻ߃VΟ& f2r^8mj;\_؆kHzG_ʽӌgj6]^Lă%׊jF7IvKZC_k5?wr8ׅEp~;e2u'A\1)xOvmq^[ë~ex!;H6yG>64=Bb-?,~( QEQEQEQEQEQEQET,$N)UWcelB}kվ t-uP-{;tƋ[]_HLVk,q^OA9mm2yS]+?R-uk)m/"YaU|  5'KM'=Sǚd6̻nf샽z<e8E.fiRkK~(3p>T,k?|]9B7 ? _K͒X@||konfQOݦm97$}szP !x6UK(sYk C\\n>|Q}lBMGQף 59j4 㷒:v ?Wc]FCQ^y^yOxYG\֦Mrpj# BےU-x1oK"_\wqDeQɌ4RZσ|U%,,pƀҼCڼ/Ֆf ~t.g^<ϳ lo/m|95M( | [_ ev/3LܜoKQk]: 6a <]K"RH=kt5K lPZVƛrq a 8+WŚ LRosGu &hyCjMT^/Zkvicf?vOŲxwB֙7ן5 NwjW_;uJ%vEx-rY3<֨'d3EX: }S!8ߎi~EaԠ>~7\S:W|]ާ}&Ny3e#'"+^0l>6X4Y=֡r  ~'x#ðJv^=/ÏKPcS m+~(x:?jcYlr}x)ܲ }}yaAYCwT UҊ((((((+?SMn/ep…M|}}f>-nvM/^3_M;~1;y[kc:s UI=Myx#Ŗ7(;3;RxŖקMfϛIpzޥkdrSE"vq^[=JӮ6ڽ2AJqO3_^:F XWiVgW7ţ߻ ^img[Ek(EV^Mze!#0 s6UI֋ˤOBӚ]kD3ۈ|C:/DRk !7?fn/dDu x'Ě*3(2޽VWW+o>&_~U/.'7:&n?y]~i^{URh>QTGV-nzQ1yfdGkz(u+s~*_vZ1j#[f;vX:Ljt.|< tq3zwzrּMߋ>(}X-V[DqJG&| r+>Q%eP1jk^:&uKhktrp8VW~ݦs&f((((((+ž;;HMLMs̀\? k {O}>v^mmحTVC7e^Mж:vuj.-2F E<|?eˋ-6dl4,zUi_j`;r {W=sV<o4f6M"9x Az$#FrTJox [٣ҭ+oz֑i}{oy6rYi#{ƛnEBKWm_^7G'oagmuM 89>DvO F+f?d/Ү^T]cP_WWk:**yoa^ QM.IB[۞ M{-EtH֬69Q0S}k%BH-,,dAֻxŚ$w! X5*") ⻋%9{ 3';Ew𭷄? 4c'dҞE|;tgz*Vg%Ք4L35DƓ,;Gn=+%_QU4]f8U#=E'҉C&Q^ڕ9o5 Qx87ľ#ƻ0Ѯam)Z7enດw? ~2k,o-ﬡ*R 6->."VI>(oheT$^?,M;I,Y#A]Ox~oQrbg^ooa!Qs1Vy]h@;5zKíLhp3W@(((((;W^~ Tkݧ5 |: "n_[*(*N:dSrsw a|z0kzkP)+wc j/kiu,Mz~>$&pAjτ~Q~Ɉ8=kXeX~j> oI$:5Ǽ^)vi5Myxwz&c]-n[|n6{\/&aBB=Hz$Y۴Hkbz X Yz'~G3$2s[KGtE+s=V#EyKu$W"P$ՏbToTsФ ߻aSGҵQel?rLӴ֯Nb? 鱎_Nv%_4ؚ- t\*1f{!{?LXՏirkǩ&vgZ4>yMr@C]Ay4Z>ﬥVGySW"w0Ĩ6[hk1dV81!QߏtZ_5/j knLH-8"^W%e#K(фF}%Cj񯆡O,Am-w \?Kg4\g"HhڂF"cĖߠndӝ*_ ƕzy|358q8WXZKs1csjfk1Z˾\wſsw4qn<Wďː]4((((((ȯ~<{XV˒]R꒡ܷԵ-A46_ #ֲ-o1@Uw n~{Qǵ~=-<3b |ώ벽7&!Tu5kWpxn.$A+حn`gD6 "J,(WzbG?`Yrl)e2Mx_O{ wO by^XxCL /v5q+[98Y~ /GN q]ei/)*?xu';xl攅 I^T|7 D1f}9 "{q^Vw,-C&@$WTkAhV׿h7Q>S3}\qkKm:[$1.I'mͦY6UP*;Wf&0Vms[Iӄs;Ivt71=OL,ed0 SE⏴[B~A蠚'Stom\4R`G8{z֯cv0tP`ڇ CF9ci յQjr#$g> ^&ݶ*A?<9;SlOWZ:k |'2c`2]<][:"NNϯJF>'jwTbdcJZ }+w^~H"81Iף\4|5{Tm#_UxXMw}X+((((({tvS9ƌğa_2Ɠ6Kg_^xgLO21!u gqt.Akw|7Ϧ]m/<,::g~h4&m%aҺ~(xk"[ubGL}+o̺,&7OjZZ//@=)9תM㒅8Y/qs\<xɺPa$AcO5$o[hsK/$.z2[r|yZ~+x]>)j7ggAx" i+5n$#VW0oåj*lH77/^ Ct9t_|Ga#}?k?ɑ_Z]#DAw+WVZ%׊_ 0zQ⻏j;TcҺxW^*Ok?-Nr[WuԺ圂n<;x#7EƯoho4Oפ͢xFfc$W1O~$6icbGZkZƐuy9*IT o h;+!\>2hZeÍ0q,uO4%hB:W7xO[8O/8HsM?H!FyW>> o>O 9A^Z0Ad\V Iq3Xx^cpV~:f/[rZωP}Α>Y+!c!|Wզ6C=@)8Eb{Ӊ:lrzҮ~am3!Ҋ(((((;W SV]#n_<%=) uvG?6@h~+>WYSOgWxh63i,:\3_AVKaZ"E? ڃ:bKO 2^[gHm`|s^p4_|D?M?MȀFp\d^ii:jZķ ~3\Kf|c]p‰EgP3X$ sN,jpsڼᖉ?YRG]7Voi887z.j=SF"⧃naDwVH|gz~G]qOV.{MgVY Zb8'ں1rV&uuv>bȥȮG)>κ 'A_?WIc\+a׺!k3-.Ogm/ XG,5tWK4p^GTP9,p+>!i_c_<}ki#TϨ!=sR J,>&h h(O#41*i\j|#h|,{)7fH¬CK<w5~2xj-gmoRO_ŤwSr c"/x'9 :g-OW{cvZb%B+_Km+~Cgۏ]d-!a¾9wQ| n5 yzd5}?zYMRg^pȬ"4Ka!w}kh&}-@9eɮុ/eLA?Ȯƚ%V"ϭpƋw:/%-u h֟'R=4j~ĖX[lW :j7V0_3>3Z.~!x Z[wH98ֽ+V#4 s^;*]D,:׹+Fu4\<-xՉ+5!NJJKwbo-4F܋z{ױk"/6R(_j._[C 2Fps\2ַ$<s槬$ 7@.HX5T[լfᢶm Wfuow-lFckc$sϪ1777kM͌m9]L^H@XmUyo|cOMw kgivpo[x\5Xƪ}gO e{-]lF_h}(=+E}i|C! 9gְu?M񞋪rZZkmb:|$~5ƟHGae(J|Cڴq[Of?o/.bU x{u+ ϮYC= ƣ<'}eiMRqXc3V]Fw[|qsZ~jFDxf_ƻQR{ K]o$.]hlC_ײl*0BY:|?VCd2|J%w2 Cl/SPXDW`;א3;/W&;RW.ZҊ(#}3vczWkVڷkvϦ6d3Wg4, }*ޟ=LU[m6qܦMjX]B"AYAk;kUD=@}寏:x*OI$׭|&&*(((((V <&,_s('}[@ +ɭjGNh.%&GpHֶ<j\w:%ܗ+k)sI{Q7Z߇NםKzgXXm1)obkpX ]7Qeq `oEݤcuxiö pť0%#j4 ~`n-bF4 ?SL46GEe#FA?Ox]ktGF03^-'$=X6*Ww4:\N]q?V!Q}*iffvZFWڹ/Bκ (#LAwn"ZRzW|OHH FT)ָ C㟉/1٪[„?G?B@j(]T8;Nq^&7ާ'^0á{X״]?R1 gV gmD\&~aڕp}___񭶏ak s-ܻ0thpZd=xIs^EQEQEQEQEQT'1 6`x|ů_i٨K8#QW|{eMJb@In;] ;/ʚ?UKIMJطt@J#Xy5@kx#1so@!A5'孚H(,~_ c }*x>ɩ]%ˮ'r? ZytZOl[Kp~ +_o)-ZR.bŝٷq9>"i{!i{\cQې> Ȭhb!\v<W"tmƖ'k'V{--Լ~VKn/n)cR:&p-杇ʋް'sɫf6ZW{yLTqNԾ%\i#%u/ @ ^c,Xy91S+]F!Zf Y*-IA|u ݵw pqZGXլ@p=EYv_Gko9!PxSҼKkxLK8dY𷇾xqVC{kup:!'v‚8KdU* q?‘HPژ~*xETy{"֎m+ReKApP9t;1ιoN:4vc&s9+L-gW]B8ܟ¼Tx|%!oN-kʷfb[yzcpuO]Y^Ǧ&-\O+~:Ϣ%4c<r8p5;d {eku^>+)Ͻm?oJCs*ך(}kmѫzkh}Nq9ʻ5H^EQEQEQEQEQYz>5} /t{bYg k=Yi UpdE|}Fhn]O`븏_ᶳ]cJ!km5ŶE9#\U*+ {-4WxOZf]>_¼ ߎ:̬ ~D׼y)kd1z5?4Iav֤Vgw{{Zܐ; ʒjNw-q`p \gl#݆FbA OR?:jI{-A~&k5[y#0u,$cH]mVjpN%aj};z[!x;~ė c03of1+(՗崻no5IE61Ut[MSM2I ]^0*Oxm`uijey4KN:H85ھ}iq{B_'yŚ ]>w_QBkY.KAk<()ҡt,+h-l0e@**c6x:C'4W '>0k}&5KZWg[klcm#ci'EtT(?j|5X|rndB- T]ڶZl"P8~n%wd8x/tM2OJJt#T hœ85l^'>it?Q^X*HG<:'Yg"^]}XGѣm='+OuI5G@9et}+>>6k5Ze,OWxƱ<,pRMq%cSr׾1#1+׮bZmD)ɵWX7𯞙wcZSOM,H0H@NL1JFU8k ҷAں}n1LH5(Q+!Tui8Ȳ?V#vB3A1sJ|9g^^E}]׃|l֯t/iW#>Kḳ~_ t?-pan᫧mATsَ+zZn/|Ă㬨< 9qWoP?#Hʺ#)dW#xC՝/٧<`;Nk ìFվn~چ{6I\#~nT~/q7! _X4)"m$y4mNKh$91 ?/ _}yMwQw[y3tV_P8 :(((((u-ꎦF9nzA}t*U.=B-Ṿ* 7FӴ87}jZa|15xW`sWA=cgDg^iiS-ĐD+~}Y5Mnw8xNs=›:PxWKi=F'`ɭU`2 xg[7 pg_ֽcږ}iQ;W|⼔ F1sk *0ʀ7Z{M99)H KVV+"I\b?X/m[ܸHFf'\?<˫iM=:_.+MzaF1ʳ-nY?UZ MxŶ!Vo%U:4O |,V15C gGT|* 4'V_ \nfZe5dQ:^݁ƹ$w.}JUXC+jvOAζ#TsFK;KƔȏ^޼㴅C7//zސNfq"xHxiT3u=EuY[EooQTp*;Ra}/j?Ez;sVG⟿[?}EQEQEQEQEQU̲OFKׯ4]C +P oFnjkbTMWN5s~5=P,?wy&~'1ku} 5Qx1_v~ ߘlKk wFxsI#dL?y׈>I 跗8W++Y 0A'-vӯ [57@e ?VӴ:5=svv[¹\o7Qz \U?o5EC o8n Hs^\ l69o!-CY./[tyKimMqg>HSMsTPӬDKҘ=ƩikVEp/=i$ Ecs.~&w;ִ5[]^%ôI_硫nZ?!!(;dk#z4Bg=t񖣯_^LdXPFW :oH״?GՃNneHӖ栓UѴ3@l kޡqx#IA<5yiEDY#w~w |c,;NCDV/>u` =㵌 $Oeow@:|?Gf{M+kAE ºG!v6?_^ 1PҼg/|=umS^w70^jQGjܼ8zV=īH2YOvq뫲IfYbnC)ȫhɶåEnZYx((((()2z/d*s -I9y*_jMzFZ(Z¾Ծ$K6^J9#$~ k>H\<%IJ6y?{WvvV:[İkZ9h^g2Ӄ`G^ WosT_/G? u/daH;|Q Ed:ɎGhզGyg(x~^Ƽ㝳K 5^Ch67L"gVC`z8-kz_PH@Mx>9^,?/zy6[ꗑ M&q־q2.;D_ݏmf˦<3[Ն8W'eˢk:4MxҴz](7kh wQgt+m8EvatCJORj|2lpXJ;kᯇZ+#37Ax~NV2uh汴_6m^]K}7):jv7GeҐ ~Oҍ T/9Kg}|/=}b|;ahiS)rƼ~{K2/kVZ|k׭kU!N2Pvc.+OWlb^lVJ#}F[Kּ?OoexgF H$WSZ|SM9eSM3Ym{ J%Mѣ_n?_XLӦ-4}2i H >Cފ~\zF]Z ['^@j&ut# @7t=GX2ʻw?ZuDŽ|{uᕙ?6;C|C^x=Cfa,s^EQEQEQEQEQA_$k6^?|af]5 uOv9tOš 4'5|7f*(&t=r87~,JM.n$epp^k 3oks/2R λ\B[ysA)OQֺ?u1TާXc90=L1Pƣy '̈Bi~ eaxv֬Eq,j)Wx#$;4[͍ # ٹ W9S]7m6fHb^y-Ċ3JkǚΦZ\;|ipG] wjz{Wu)ΈARď]:g@R1q^iJ"1ҩg ;Dd690`z 8|E!Tui8Ȳ KI)qHG/Z~R$HH ǿ5zu4s\"Wz>'i>" mrMFolנRQX^'F.3+>\.+; ⦭seᆲ25S\FSVʹ6$.#DuPda$8"o!xNg}*ki,@Xбx{v~ kE?t=wQoᑴ@mgaOXtI{hMy ] B66d%jNYb2I^W^oWkezq^?|> !9XF07~QEQEQEQEQE|C5]?Pa?t'Չ9xdHbϴ, bsMkUY ႀݓ] 2YCWKa *#nâvOQXZ74;:fomkv,W AٲZ0knb͞ED25ZVw kjЬC]F23Uiz֭}b&kч!y׫>wt,˂پ|_cPl=9fҬ y ~_ʴx8bDOEyUTdڼK?^ yY&^7Ω~\s+)RxkźՍIF,j$;H cAxԧTFy"GR`7/ݶehMK|#7/*kAOӭ#Pz™D;#!5=?tʩ*;tPp7 OPsjKVp+>4jS >mqn7_+oVn(^Upd#ǂ3@yl)"Xھ2麲yEp?Ǻ^$w H-9+$cwجjP Pyeş=Zu#3G_K֗2ZȞa3<I|w=`Fz~yo3i [AݹwwFi5':X6$8FA xMg y⻽7K,$*cc? [?|헐uj&`V<"?|Kruݹ%뭃}}!c> Q٢(((((& kgx^w W[O`ͅN=}9ڠwyQn9l f{maiR4fc+̼CD{{{N~7n:fv'N_N,Y,W{QҼ#4 _zg`bpֽ?k?\2"주̄1^x[(/>d⭷/yږW|NԡlM^:]x.'< c X}narq]G_ IJ7e 2خN{BD$^C]_<A-pw4-֮9*zfVMEE^ (> yV>*#HبX0yeJ~ʠ7-ԛm{Pk-ɾz ԑRIX4ڌo4gL&'*sqo@Mb8k!:/Dnu"H*58K6Lc"X j4K?g~l]bڬM] mHͥۂɽQQaSK/jh-׬FR2j6qrcKg=kƾ^*NE״wO<=+l>i:5yIخ_he bD*/#יW1Ck <70s-oC}HͻnH UMka.+>:xYXihiWEᏎaVD_O4Mn :2g` oAKQ|q J>[Z{;ۦٱ)QEQEQEQEQEL: B/#M͜1\yo?¾͂d9ǥxſZxWG/vɰ< M-b7!MzlVV;x@r)ml>hf`*x}Zm?P'BżsޛOÃDy =qx¿Bok2ko--[<lEmI/EQRM,pHʨ$9&U5YGFk?FQyeq( 86(_0ޕxCZ悗{7SW޼_%-ofK .y5^,A ۆG+dI|RGgI;mLK,jLI +2V༷`J_D-LW(q\y#~dE?5<32ohu^únyj7;Z-[Ð?;6~vjO~1\V}Zus%,sj/+zW]x.ħZOHb ʨo/B Hq^q| 4^Nqʦ fE>"+y+)k>24[cfNޣҽxQ+>cZlm~Gq4qs+I+nZ((((()0kω<*lfewvW$j#qJ xO"=W⎹^|k) qs^E&xL?[xy2L֯g4'GPU(O^6Rnzku^GҸOn,$=^uK{[ 5&?>0Lӭ~+g|QMcp,#cjo> o A^#$WRr+uռcx>^M= { <9]7b pB>f>qcW7Kcה.Tާ'Zo~ E$ ˌhI}8UπlGjٟYw0^/^GA bebF\}?W<\m~>d?6zZxn%Z/:>,C9S\7Q&t9=z W|PvI[~UTh]_;CJ_R٘rSXxvkHn_b;^[u 4,̮ x&f%t.yZVo^[8hPC#Hl:@ׅmmvbWPs]x#RъLJ{h.P$Pk| 㛽n("p? Ofu_Ih]) 'q:m9J((((((xOlӘ3FC>x8+ȴwyM렂Km? hO4粑gk 鷚Ov Xu&cy_ I׸\^Z~6*{O8܊HSGZƩ[=֛pۧN}EUimt<g\|ALjk}>& WA vQT@Ҧ#">kA0s\<{s^ t2|~+L!<2659#it$մ>!x[4m=sGQ;{xG¨y]7v3]H ]<73mb.Ҝu5EiX=uF𽍒.ݑ ܊:~l um9/K"2BTÊP3Qqd5>/c.Tvt5nM[×9Y!rUM{5E}+7k7ˣ˟n碷{Ҳ-*T1\*WW7xZ[ɎF:Wl^)e ,R2@A\ΡGREc+):<+/Bk,7vAJXֶ~7bX$l~WꚔF=˅$,rk<c?}q[&Ȅ7JSW6Ǧ[sll MFfI#;WJk6\ Z6]#}\׊&.y~d+{ uqߌ}GivֈXc VQEQEQEQEQEPzW;5 X:/+WZq1%^m3_cj:|d O|O3f9;z_xJ-o퓄9${> zd>(i$;brGZ>giYıƒIu}mcN;Wsc& ex믇^=VrQd^ݤ֙ UV쌛yc?ʬ)R0x,|ahTCz1̽s^sx\{ 1%;b9}kb״}:Y%LVt2 *-^,{k_#nN:Wzcx5umlʷwUJ=K:8A {XPxFeж\qu{^/6"]?i_z%+mz|:T`b8ѝ?uaV%KC|dpNkH#hC Ic]{ęT~Bׯ* 8S>(^:3\2 x~ |27:hjv]i+G$T8+ςEΖK%?ѼoO5Ő9|muGKm`}IT1NEղ1^kFSaN7_@ O߉ɥCW1k֦BRa2;Ҁ t((((()|Ÿ$т=|W|A<>t{5aXf[;UmooP51\?>!Cn:qs^ox%:05 bx@>t$t> /~x+; 9;(xgM%j"c_=,znrp>xO2ގ$f7zteXȘWSA:|v;cƶ3\?iZ}3^ڼM<7ƕ+;#>v:$܏{V4]HxpE]gtp*0>W=O]͎"CMyƯ/MtptȯG_Í/‘1qxF^w9AKER1WKgMkKWߨ܍"T*M6ٵUwj76[תqҗ`T34r"2+[sCU,YrC'BkuxcO쯶lE {/ 1H?[ԍK1>?qOYZO.!gῇÞ)CqMvQEQEQEQEQEQE|L70$y㜊 ^/g܊ys)}yeyWhP5JdH|[^OS /y\] +Wm<7e>m#K';N3y[v(j+1+.Z'."m9q4.Fes\ÏOouD^ I(p})C( W⟅ݥ}%c$?K}FNN+WK,-IMg( wx:*jz+ⲷhFk G+c^ rCklుa#F pcڗ42`GRxŶ^dUQ5ugU"H GYzvcOq V;KAY?k"l;^-,>)~/Oo+UUT` ?0Ўm 7\6*_|&VI= WJ1ҝEQEQEQEQEQEQE5*As_,dFڅx;FKoq^H*y_>|Ix/?oA'{|9\P𪂀k;N43dص~ϺaCԝ~y'Wꚵf7 H9,kt?C':-ܘ,A*=s^oq)4.7PGz󯈿VYxߊ4?Pq E: 񦕪&y߀v u(Ԁ3ßĒh"_&4R ^W FG=iJ =+U𾏭!}5j7u!զ~Y"m#ēEflLtjTҾ/.j%k&_֝_5/)µ>i*VMJNGuOp^&DB;jiMJLbº;_@~35yn}iͽ1oV6k.x%}k<9ͤhZM3*[ [?z[<.,Ƽz+C2鱶b#Z=œ2 > ~<-O4&y74>`lཷKyVHd25x:w"+veITa]T}4ifKnmީAܾBĚŚό|[$2ģ5Ï -onT y[k(((((((ҹOfxvDaRbltjVPOnh :dfοoM PpC3i۬c ؊ƨ 㟴Ӂ;8R*| r}쩹 ,xt xj^&Kk xKº,)hl>Z:Զ;hQ.^Gj+ 6hڎ>ϪE#/4CpbLf%7WF A=+|y;Bkk YU1mF㻵k4I!u"AxQЭIR2qW>|A SXp4ZF>o<ѵl#nrXhCKMN1FGQ(ڎFOݱYZϋI҈\f<[X Ge$vVcJiu=sƞ#[FK=*7,J~fi=>_د3O׼OizYeaL0{΂PIF\l`mҸoEӼ%fM|G מxkߏu/[=ۢnvXGoo4UQwTFa7{o?yi+ >Ycq |WφӅ?,L3Ǩ⺻OXK [v=&//Gq /[.,)b(,l4Rvڳ/cc5e&Jj^َ/ֺ?4zZvIP?|UYE·G&㪹zJՎ`|)Y;$r=EbxEYk4xj5kbڗb[FŋN+WZNEu4riv8B ziwt]:]Z1Z|-k-E[?xHEq^ݵCCsq -,*F,q?|ZyNX1FB7d_&M&-{qq"U?QH@$l4h IDSn\+\6l* k~,(,"5|צ[gCQWpGA_0}U) }k I>".l/Tc;=+ڻW -,"snJ-QEi6Zū[0Wk _6)+Wß]7Ķct)r0 S!IgXd`j(hʞbTM^n!cf,7dj%\e.Z'`R1>][ԏ6rx5ү7 O<1YOq"+k!w"["(9=Mz_è5I1n7_#FWogkuq|jO NծSCb*_4{cY\|GY|ɷֻmk4N8hZvA%Q2H_|Nм4\]tX993e+&ߌ/|>)ngIuS8v t(K2k^P^y?ɱ-hv\N0+ۆ6Yޱk]ȫ`OZ+>%@]џd1¾W4𾊗WHGz`Җ(((((((J|S_X]v>9S_'ZV?4/nxLq([Y[޽jZ(3Epk/_Dq*5yρ|iu纶>Kp+OGַ|rdہ}'Ś.cR 4[kyABۢcՂWDӓQ{i\a&ܖЬj͸W8v+B3Q-gr[@FXcPԬ#/ws*W`+2hN,zd~> ;X_MӛxcHzB^ 1A*"Q*P-dQEZ$ #V'|1aI G.G$ֹFs1=fNVRl(}k9-uXs~((((((()O-`9W'A๷~Wa_Ox6~2ҖU%%<]#(UZXU@',EC'Y(x[G"x-[pk_Ф~bB fŧo _0F]H>F4RSmֶM>Tw`9}ϊx9o'`lZ|%+`[iֺ**P>(]ZY-۪@-_&x]ֵ }tI_ |DZ¸ˮ{קTnbAh2ǁ_<|Tɣ貕^%O/X x/oQӐ嘏}+ >L!Q@QEQEQEQEQEQEQEQEQE!+;"9}oèF27{[[/-aoa_Exem`TN7}+҇AKHyx3Kִ{á+&>l1߅fGf9o0pGTy /zt[Wyr -<+V,*<I? iX|t(=*դ7qIꧡ+Ŀ5}KKm(g +# H aT 7 A(d;xY̋$%1ι^y;Ld ' ^\B"l2=qEQQIrEǰZ,+x"pP3}+KX@6ƁGSH8ERMxz׶ZeshP:R(x6N@!W|(oNuWrDC{WјA5_W?'gBT̥C޻/|EC4 lTQG5?yncVSE gŽsIlmInWx͗.E_f=5)  `:~5reܟE$t ( TQETM,,qVc+ǼwK2X.n@~Umwq#{?;Y#!+֕* ?QEQEQEQEQEQEQEQEQEQER`TSC4Rtad|Ԍ*nycx#V$'F]gE%i|:ne[W1 [5KEW^ֿ vQ$_/7.$|ڽss^2xk×Z?: 5b牙RcNъQKᆭHZXW׾x7^_fSd_{դ K$mXdi:zp<Ҿvau~9V`ׯ,2A#}XHS&kĶ2Ga]Gmj>(EsdEe w(4 )$+gĽвp3HpFNO֭x/6YR6',9j'Ҽ+nX[(`>iHqREQEQEQEQEQEQEQEQEQEQER0x wW^PI>9x_4z+zG s^6E=ū#s{m)oBc~>_tf%)ʶ◵QY!+) O^νn#/`8'Ʃy:5ɂ|ֽy2}G?fh[yQ}=v[u".2ɞ^{~hGu}J((T Q*J((((((((((((R0kt?}f#0>( {h^CϋzH5'#<[QR^g+м3rme>: \`{S$8q\εh?ڵ8wk̵-ѥzIҼ\oV[U_99Ğ%rڼ1&Y<+KH.5/˅i(5p6,QT`U8((((((((((((1H@KEHW֑N̼כFO%<:f\)}-FqH|57KFQEQEQEQEQEQEQEQEQEQEQEQEQEQE*JZC0?L%|%K9j5?NiD}뗿6Pʽ;uw6_/Ys=up1U-86zgя?Y<5/Ɣh,'gԿ?zz\WK?[6Wr}pKښN0u\N_KHYs]$qh4U_E&((((((((((((((((QE`S4QO"ȣȋy'*LQ(((((((((((((((((((((((((((((4( &/ 0DTimes New Romanttl. 0DTahomaew Romanttl. 0" DArialew Romanttl. 00DWingdingsRomanttl. 0@DVerdanasRomanttl. 0"PDHelveticaRomanttl. 0 "`DSymbolcaRomanttl. 0 A .  @n?" dd@  @@``    /'     ( %,-o%, ""R p  $-(F &8OcV+   .0<<Uk    0m -+0&% '-'*6H?D$2$#zz3/h~0$$$$$$$$$$$$$$$$R$Nт۳ Y*2 AA1?Pf3ff@8()dg4VdVd ; 0ppp@  S ʚ; v3ʚ;<4dddd@l 0@<4BdBd@l 0@%0___PPT10 ___PPT9nnIt>"ՌPNG  IHDR +tsRGB PLTEfffm cmPPJCmp0712 7tRNS@fIDATWc`  SP1H $XLIENDB`?  O =j?Cooperative Task Management without Manual Stack Management or Event-driven programming is not the opposite of thread programming6; E"A. Adya, J. Howell, M. Theimer, W. Bolosky and J. Douceur Microsoft Research, Redmond Appears in USENIX ATC 2002 Presented by: Fabin E. Bustamante* 6|      W   qTask ManagementuWork of a program A set of tasks, each encapsulating a control flow All tasks access some common shared state Strategies Preemptive task management Execution of tasks can interleave/overlap on uni/multiprocessors Serial task management Each task runs to completion before starting next No conflict on shared state Problems if you want to exploit multiprocessor parallelism \ A\  A `Cooperative Task Management Executing task has  lock on shared state Concurrency considered only at well defined points, commonly when needing to wait for I/O Task must re-validate state after resuming May need to be done even with multi-threading, e.g., mutex released before calling high-latency opn Allows I/O concurrency but not CPU concurrency Need to wrap I/O calls to yield instead of blockingV.dc.dc  drStack Management?Manual Stack Management (MSM) Common approach to achieve cooperative task mgmt Forces programmer to abandon basic programming language features Control flow for a single conceptual task * Task specific state are broken across several language procedures Automatic Stack Management (ASM) Allows natural code structure rn!rn! fa<Issues we re NOT talking about$ zI/O Management Synchronous vs. asynchronous Concurrent I/O does not affect shared state Conflict Management Serial task mgmt  task is an atomic operation on shared state Preemptive task mgmt  need synchronization primitives Pessimistic (mutexes/locks) vs. optimistic (abort/retry) Cooperative task mgmt  large atomic operations  between yields Data Partitioning Monolithic vs. partitioned Each partition independently sets task mgmt strategyIv9APIv  9  AP^ ContributionsSeparate out concerns of task and stack mgmt Argue for not discarding automatic stack mgmt Allow interactions between manual and automatic stack mgmt code styles s<Stack Management  pros & consAutomatic stack management (ASM) Each complete task as a single procedure Procedures may call functions that block on I/O While blocked, state is kept on procedure program stack Manual stack management (MSM) Programmer must rip code for a task into event handlers that run to completion w/o blocking To initiate I/O, event handler E1 registers a continuation w/ scheduler Continuation bundles State indicating where E1 left off working on the task & Reference to another handler E2 to work once I/O is completed!w!|   =   > tAutomatic to Manual Stack MgmtFrom ASM in-memory to on-diskdManual Stack Mgmt (MSM)o Related Work2 Event-driven to reduce concurrency bugs (Ousterhout 96) Cooperative task management conflated with MSM  Event-driven model for performance Popular for web servers [Flash, Jaws, StagedServer, Seda] Inter-stage: each task reads as in MSM Equivalence of  procedure-oriented and  message-oriented systems [Lauer & Needham 79] Different equivalence than ASM and MSM Cooperative task management not considered:/%bXR:/%b  XR+ eeMSM: Poor Software StructurefMSM: Poor Software StructuregMSM: Poor Software StructurehMSM: Poor Software StructureiSoftware EvolutionjDetecting I/O Yields with MSMkDetecting I/O Yields with ASMmMSM code calls ASM codenMSM code calls ASM codep ConclusionsSeparate concerns of task & stack mgmt MSM leads to poor code structure Code evolution exacerbates problem ASM: natural code structure MSM and ASM code can co-exist For legacy code or != programmer preferencesNH#;-H#;- /       (   0` .T3f` T3f3f` 999MMM` lff3f3޲` eoHff33Ҷ` ff!` T3f3f___>?" dd@$?nPd@ d " @ ` n?" dd@   @@``PR   @ ` `(p>>  H@ (    s *ħ "0@  T Click to edit Master title style! !  c $ "0j  RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S  Nff??"?  Nff??"? F  "  Nff??"  Nff??"   Nff??"  Nff??"?  c $D "`  b*(2Z  B޽h))? ? T3f3f___ 0___PPT10.[p1q___PPT92p22 aqualab01o   0  ](  ~  Hff??"A  0rz "cG` z ,   <Xuz "  z T Click to edit Master title style! ! T    "p  Tyzff??"  @   TT|zff??"  @ ~  Hff??"A~  Hff??"A  RA)\ :?nwu-seal-gray"@)i%   # lȀz 1?"g: NCS 443 Advanced OS (2 f3  # lz 1?"3 !Fabin E. Bustamante, Spring 20052" 2 f' fZ  B޽h))? ? T3f3f___80___PPT10.[p1q 0 zP( "   0  P     R*    0       T*  d  c $ ?     0(z  @   RClick to edit Master text styles Second level Third level Fourth level Fifth level!     S  6 ‡  `P    R*    6LŇ  `    T*  H  0޽h ? ̙3380___PPT10.[Na 0  p(  r  S z  z x  c $zcG` z >    f0z1? @ >* Some slides from Adya et al. presentation at Usenix ATC 2002? 2?, H  0޽h ? T3f3f______PPT10i.@1+D='  = @B +}  0 0 $(  r  S *0@   r  S +0j  H  0޽h ? T3f3f______PPT10i.D+D='  = @B +    0L0     + (       6, f c"$` 0@  ,  r   S , 0j ,  `   s *"`|   0, oB  <Task A0   <l ,   <Task B0`2   s *"`x=XB   0DfpB 2   <0, f"`  \I/O1<0f ff`   s *"` r B   T?Dfp?"0?@NNN?N 5    fx, ? ?"6?@`NNN?N' a I/O1 done< 0f ffXB   0Dfp.    <, ] T} \I/O2<0f ff`2   s *"``2   s *"`n H   0޽h ? 33___PPT10i.X @+D='  = @B +}  0 @ $(  r  S 1, 0@  ,  r  S 6, 0j ,  H  0޽h ? T3f3f______PPT10i.D`t+D='  = @B +   0L0 0 <(  ~  s *;, 0@  ,  ~  s *<, 0j ,  H  0޽h ? 33___PPT10i.Q *+D='  = @B +8   0@NL0  $U(  2  # l1?"`H  2  # l1?"`I2  # l1?"` C~  s *lR, 0@  ,  x  c $DS, + j ,  ,   fT, Ԕ?"0@NNN?NJ: ^" multi- threaded  0   ZY, Ԕ?"0@NNN?N g  X event-driven  0 "   f^, Ԕ?"0@NNN?Nd J T sweet spot  0   8 A 0  A 0 B  ZDԔ?"0@NNN?N= 0 B  ZDԔ?"0@NNN?N4 4 !   fb, Ԕ?"0@NNN?N    KTask Management 0 4   3 rf, Ԕ?"6@`NNN?NA Z  LStack Management 0    Zj, Ԕ?"0@NNN?N M 4  G cooperative 0      fm, Ԕ?"0@NNN?NhM 04  F preemptive 0  -   3 r@r, Ԕ?"6@`NNN?N` y # E automatic 0  *   3 rv, Ԕ?"6@`NNN?Nt ) ! ;  Bmanual 0    Zy, Ԕ?"0@NNN?N Z A  Bserial 0 B @  `D8c?T* B   `D8c?b    f}, 1?E8 Y#Conventional concurrent programming$(2$ B    fD1?FVX !  fx, 1?R br  MTraditional alternative(2 B "@  fD1?x /,  #  ft, 1?q7  F This paper (2  B $  fD1?/H  0޽h ? 3fffj TIMINGN|1.1|8.3|4.9|4.7|10.3|4.6|11.9|18.6|6.8___PPT10i.b+D='  = @B +}  0 p $(  r  S l, 0@  ,  r  S D, 0j ,  H  0޽h ? T3f3f______PPT10i.DX"V+D='  = @B +v/  0 ]L0 PH #G0 (  ~  s *P, 0@  ,  r . S (, 0j ,  H8 z  -g{   <, ?"0@NNN?N)  XInfo* GetInfoBlocking(ID id) {0   <, ?"0@NNN?Nz  [! Info *info = LookupTable(id);"0"   <l, ?"0@NNN?N0  ;}0  <, ?"0@NNN?Np` J return info;0u 8 P V  ,k '   <, ?"0@NNN?N wg Q if (info != NULL) {0   <, ?"0@NNN?N 4/$  T InsertTable(id, info);0  <, ?"0@NNN?NP f V  ? }0 " <, ?"0@NNN?N  XInfo* GetInfoBlocking(ID id) {0 % <о, ?"0@NNN?N  [! Info *info = LookupTable(id);"0" & <, ?"0@NNN?N 5% J return info;0 ' <, ?"0@NNN?N s  ? }0 ) <, ?"0@NNN?N K P info = new Info();0 * <$, ?"0@NNN?N yi s DiskRead(id, info);0   + <, ?"0@NNN?N   J return info;0l 2 @  : s,$D 0( 0 B, ?"0@NNN?Nj Bu  v void *returnValue;"0f  3 B, ?"0@NNN?N2 z  RClass Continuation {"0f 4 B$, ?"0@NNN?Nl @  g) void (*function) (Continuation cont);"*0*f 5 B, ?"0@NNN?N&C 3  j,void *arg1, *arg2, &  "0f 6 BL, ?"0@NNN?NZ   ?}"0fl    >  ,$D 0 <  fd, 1? ?  g3Function call when continuation is scheduled to run4 24 B =  fD1?:  4l  ` F` ,$D 0 @ # l, 1?` p<Return value set by I/O operation and passed to continuation= 2= B A # lD1? fl k_ Ek_,$D 0 C # l, 1?k DBundled up state 2 B D # lD1?_^ G  fc 1? P p$ 0<4___PPT9 P To MSM & " nP H  0޽h ? 3fffx TIMING\|24.6|19.5|15.6|22.7|20.6|21.9|4.5|3.1|6.2|9.4.___PPT10. ^+tDD'  = @B De' = @BA?%,( < +O%,( < +D' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*G%(D' =-o6Bdissolve*<3<*GD' =%(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' =%(D3' =4@BB BB%(D' =1:Bvisible*o3>+B#style.visibility<*F%(D' =-o6Bdissolve*<3<*FD' =%(D' =%(D3' =4@BB BB%(D' =1:Bvisible*o3>+B#style.visibility<*E%(D' =-o6Bdissolve*<3<*E+8+0+G0 +Rz  0 ]L0  ,(  ,L , <c ?"0@NNN?N~ ,$ 0 t SchedDiskReadAndYield(id, info);!0!  , 0c X ,$ 0 rSchedDiskRead(id, info, cont);0 , 0c  Y w,$ 0 Yvoid GetInfo1(ID id, Cont *c) { 0  , 0x#c  w,$ 0 Pvoid GetInfo1(ID id) {0~ , s *0&c 0@  c   , <(c ?"0@NNN?N} m XInfo* GetInfoBlocking(ID id) {0 , <,c ?"0@NNN?N#  Q if (info != NULL) {0  , <|0c ?"0@NNN?NQxA [! Info *info = LookupTable(id);"0"$  , <4c ?"0@NNN?N x $ SchedDiskReadAndYield(id, info);%0%   , <9c ?"0@NNN?N  T InsertTable(id, info);0  , <0>c ?"0@NNN?Nh X  ;}0  , <`Bc ?"0@NNN?NX  J return info;0 , <Ec ?"0@NNN?N  N return info;0 , <Jc ?"0@NNN?NMp= ? }0Q , ZMc Ԕ?"6@`NNN?N ,$  0 Uvoid GetInfo2(Frame *f) { 0 , NQc Ԕ?"6@`NNN?N8 &,$ 0 bID id = (ID) farg1; Info *info = (Info*) farg2;Z20 x ,  `HYc Ԕ?"6@`NNN?N I,$  0 0(cfunc)(cframe, info);\0   , 6`c "` ",$ 0 PInsertTable(id, info);0 , <Hec ?"0@NNN?N ,$ 0 F return info; 0  , 0ic "`2 ",$ 0 {Frame *f = new Frame(id, info); 0   , <nc ?"0@NNN?NL ,$ 0 ;}0 , 0rc L ,$$ 0 D (cfunc)(cframe, info); return;v#0  z , Nzc Ԕ?"6@`NNN?N ,,$ 0 0Cont *c =(Cont*) farg3;>0 x$ , 0c "` ,$ 0 &Cont *cont = new Cont(&GetInfo2, f); '0'  , 0c "`2 ",$ 0 ~"Frame *f = new Frame(id, info, c);#0#  , Z@c Ԕ?"0@NNN?N0 f0,$D  0 Stack frame manually maintained by programmer Task yields by unrolling stack to the scheduler Result returned to caller via a continuation function call"1` H , 0޽h ? 3fffZx TIMING\|24.6|19.5|15.6|22.7|20.6|21.9|4.5|3.1|6.2|9.4LZ___PPT10,Z. ^+a98DS' c = @B DR' = @BA?%,( < +O%,( < +DQ(' =%(D"' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*,%(D' =A@BB?BB0B%()?)?D>' =.7 BBBBB3M 0.0 0.0 L 0.25 0.0 E*3>*B ppt_xB ppt_y=0BB<*,)D' =A@BB#BB0B%()?)?D0' =.7 BBBBB5M 0.0 0.0 L -0.25 0.0 E*3>*B ppt_xB ppt_y=0BB<* ,D' =A@BB#BB0B%()?)?D0' =.7 BBBBB5M 0.0 0.0 L -0.25 0.0 E*3>*B ppt_xB ppt_y=0BB<*,D' =A@BB#BB0B%()?)?D0' =.7 BBBBB5M 0.0 0.0 L -0.25 0.0 E*3>*B ppt_xB ppt_y=0BB<*,D:' =A@BB#BB0B%()?)?D' =.I7 BBBBB[M -3.33333E-6 2.59259E-6 L -0.25 2.59259E-6 *3>*B ppt_xB ppt_y=@0BBAApBBB<*,D' =A@BB#BB0B%()?)?E<' =1B B`BPB1:Bhidden*3>+B#style.visibility= `B<* ,%(D' =.Q7 BBBBBaM 0.0 0.0 L -0.2401 0.00741 L -0.25556 0.09722 *3>*B ppt_xB ppt_y=B0BB AAApBB.BrG=<* ,D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*,%(D' =A@BB+BB0B%()?)?E<' =1B B`BPB1:Bhidden*3>+B#style.visibility= `B<* ,%(D' =.m7 BBBBB}M 3.33333E-6 -3.7037E-7 L 0.20173 0.00579 L 0.22413 -0.10694 *3>*B ppt_xB ppt_y=B0BB FFFpBBUU=BO<* ,D' =A@BB8BB0B%()?)?E<' =1B B`BPB1:Bhidden*3>+B#style.visibility= `B<* ,%(D' =.i7 BBBBByM 3.33333E-6 -3.7037E-7 L 0.23541 -0.00046 L 0.23559 -0.05 *3>*B ppt_xB ppt_y=B0BB AAApBB=B̼<* ,D>' =A@BB BB0B%(D' =-o6Bdissolve*<3<*,D' =1:Bhidden*o3>+B#style.visibility<*,%(D' =A@BB#BB0B%()?)?D0' =.7 BBBBB5M 0.0 0.0 L -0.25 0.0 E*3>*B ppt_xB ppt_y=0BB<* ,D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*,%(D>' =A@BB#BB0B%()?)?D' =.=7 BBBBBOM 0.00156 -0.00509 L -0.25694 0.03588 *3>*B ppt_xB ppt_y=@0BBAApBBqBߦ<<*,)DD' =A@BB#BB0B%()?)?D' =.C7 BBBBBUM -0.02448 7.40741E-7 L -0.25 7.40741E-7 *3>*B ppt_xB ppt_y=@0BBAApBBr罐B<*,)D' =%(D' =A@BBBB0B%(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' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*,%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*,%(D7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*,.%(D' =-s6Bwipe(left)*<3<*,.D6' =%(D' =%(D@' =A@BB BB0B%(D' =1:Bvisible*o3>+B#style.visibility<*,%(D' =-o6Bdissolve*<3<*,D>' =A@BB BB0B%(D' =-o6Bdissolve*<3<*,D' =1:Bhidden*o3>+B#style.visibility<*,%(D' =%(D' =%(D7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*,.^%(D' =-s6Bwipe(left)*<3<*,.^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<*,D' =A@BBBB0B%(D' =1:Bhidden*o3>+B#style.visibility<*,%(D' =%(D_' =%(D' =A@BBBB0B%(D' =1:Bhidden*o3>+B#style.visibility<*,%(Dp' =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<*,D>' =A@BB BB0B%(D' =-o6Bdissolve*<3<*,D' =1:Bhidden*o3>+B#style.visibility<*,%(D' =%(D7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*,^%(D' =-s6Bwipe(left)*<3<*,^Df' =%(D' =%(D>' =A@BB BB0B%(D' =-o6Bdissolve*<3<*,D' =1:Bhidden*o3>+B#style.visibility<*,%(Dp' =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 ++0+,0 ++0+,0 ++0+ ,0 ++0+ ,0 ++0+ ,0 ++0+ ,0 ++0+ ,0 ++0+,0 ++0+,0 ++0+,0 ++0+,0 ++0+,0 ++0+,0 ++0+,0 ++0+,0 ++0+,0 ++0+,0 ++0+,0 ++0+,0 ++0+,0 ++0+,0 ++0+,0 ++0+,0 ++0+,0 ++0+,0 +  0pgL0  $(  r  S pc 0@  c  r  S |z0j z H  0޽h ? 33___PPT10i. 3m+D='  = @B +  0L0 +# 4 (  4~ 4 s *c 0@  c   4 Hc  ?"6@ NNN?Nek D ASM Style 0  4 T8c?"6@`NNN?NB6 4  fXc Ԕ?"0@NNN?Ns CF()$0  4 0Dy  0 }9Function scoping: 2+ language function for one conceptual:: "nz   x 4   x,$@ 0 4 T8c?"6@`NNN?N  x  4  fxy Ԕ?"0@NNN?NP r   DF2()$0 nz  x   4  x ,$@ 0  4 T8c?"6@`NNN?N x   4  fy Ԕ?"0@NNN?NP "B DF1()$0 .  4 H y  ?"6@ NNN?N{,$ 0 D MSM Style 0 z Th  4 h? ,$@ 0`B 4 0DpT0   4 <y h  9I/O0B 4 0Dp r ,$D  0 4 <y  ,$ 0 >I/O done 0 H 4 0޽h ? 3350 TIMING|11.4|10.5___PPT10.Y z+[|Dq' y = @B D,' = @BA?%,( < +O%,( < +Dc' =%(D ' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* 4%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* 4%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*4%(D?' =4@BB#BB%()?)?D' =.K7 BBBBB]M -3.33333E-6 3.54958E-6 L -0.41666 -0.02039 *3>*B ppt_xB ppt_y=@0BBAApBBUUUB['<*4)D?' =4@BB#BB%()?)?D' =.K7 BBBBB]M -3.33333E-6 -3.24374E-6 L -0.41666 0.07808 *3>*B ppt_xB ppt_y=@0BBAApBBUUUBo=<* 4)Dt' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*4%(D' =4@BBBB%())))?D' =1:Bvisible*o3>+B#style.visibility<*4%(D' =4@BBBB%())))?D' =1:Bvisible*o3>+B#style.visibility<*4%(+8+0+ 40 +ܚ  0L0 OO &&<O(  < < T8c?"6@`NNN?Nuz / O  <  Cc ,$@   0 < ZԔ?"6@`NNN?N/ O  <  fD%y Ԕ?"0@NNN?NT (  EI/O&0 ~ < s *'y 0@  y   < H)y  ?"6@ NNN?N p& D ASM Style 0 ! < <.y  ?"6@ NNN?N<\,$ 0 C MSM Style 0   < T8c?"6@`NNN?Nf ,$@ 0  < T8c?"6@`NNN?N? Dd ,$@ 0  < T8c?"6@`NNN?Ny Cc9,$@   0B  <  fDԔ?"0@NNN?N  ,$@ 0  < T8c?"6@`NNN?NCc,$D  0B <  fDԔ?"0@NNN?N,$@ 0B <  fDԔ?"0@NNN?N ? ,$@ 0< <      BCODELF$ Ԕ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||O$ m>i/!icU?N@      "0e@`     @ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN 5%  N 5%  N    5%    !"?N@ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abC,$@  0 < T8c?"6@`NNN?N f,$@ 0 < T8c?"6@`NNN?Nk& + ,$@ 0 <      B8CDE(F Ԕ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E|| `` P8 ` ` @   "0e@`     @ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN 5%  N 5%  N    5%    !"?N@ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `ab p,$D  0 < T8c?"6@`NNN?N&Pp,$@ 0 < T8c?"6@`NNN?N  ,$@ 0 < T8c?"6@`NNN?N ~ ,$@ 0uz / O  < k f ,$@ 0 < ZԔ?"6@`NNN?N/ O  <  f9y Ԕ?"0@NNN?NT (  EI/O&0  < T8c?"6@`NNN?N  ,$@ 0B <  fDԔ?"0@NNN?N+  ,$@"  0B <  fDԔ?"0@NNN?N j ,$@#  0 <  f>y Ԕ?"0@NNN?NFMBf CF()$0 F <  fBy Ԕ?"0@NNN?Nk,$ 0 DF1()$0 F <  fxFy Ԕ?"0@NNN?N ) ,$ 0 DF2()$0 F  <  fPJy Ԕ?"0@NNN?N ,$ 0 DF3()$0   !<      B=CDE(F Ԕ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E|| *^3=95I @   "0e@`     @ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN 5%  N 5%  N    5%    !"?N@ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `ab G ,$@$  0 "<      BCDEF Ԕ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E|| m2@  "0e@`     @ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN 5%  N 5%  N    5%    !"?N@ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abzd,$@!  0 #<      BrCtDEF Ԕ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||h\mr.Gt@  "0e@`     @ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN 5%  N 5%  N    5%    !"?N@ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abv } ,$D%  0 $< 0Oy  i qControl structures: Every basic block reachable from a continuation must be a separate function e.g., while loopsrr "B %<  fDԔ?"0@NNN?N h ,$@   0< &<      BC0DELF$ Ԕ 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||0g$L {I&JooKgED@      "0e@`     @ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN 5%  N 5%  N    5%    !"?N@ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `ab  :,$@   0H < 0޽h ? 33J0 TIMING|11.4|10.5J___PPT10J.Y z+rDyI' ry = @B D4I' = @BA?%,( < +O%,( < +D' =%(D' =%(DC' =4@BBB%B%(D' =-6B%barn(outVertical)*<3<*<D' =1:Bhidden*o3>+B#style.visibility<*<%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* <%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*<%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*<%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* <%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* <%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*<%(Dc' =4@BBBB%()))D' =1:Bvisible*o3>+B#style.visibility<* <%(D' =-o6Bwipe(up)*<3<* <D3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*<%(D' =-o6Bwipe(up)*<3<*<D3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%<%(D' =-o6Bwipe(up)*<3<*%<D3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* <%(D' =-o6Bwipe(up)*<3<* <D' =4@BBBB%())))?D' =1:Bvisible*o3>+B#style.visibility<* <%(D' =%(D7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*<%(D' =-s6Bwipe(down)*<3<*<D3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*<%(D' =-o6Bwipe(up)*<3<*<Dn,' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*<%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*<%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*<%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*<%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*<%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*<%(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' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* <%(D1' =4@BB#BB%()?)?D' =.=7 BBBBBOM 5.E-6 -5.00463E-7 L -0.4198 0.09175 *3>*B ppt_xB ppt_y=@0BBAApBBVBF;=<*<)D?' =4@BB#BB%()?)?D' =.K7 BBBBB]M -4.44444E-6 -3.32715E-6 L -0.41736 0.02479 *3>*B ppt_xB ppt_y=@0BBAApBB[UB1I<<*<)D;' =4@BB#BB%()?)?D' =.G7 BBBBBYM 1.94444E-6 -4.59685E-6 L -0.41754 0.0248 *3>*B ppt_xB ppt_y=@0BBAApBBUB1I<<*<)D=' =4@BB#BB%()?)?D' =.I7 BBBBB[M -1.66667E-6 4.94903E-6 L -0.41771 0.01251 *3>*B ppt_xB ppt_y=@0BBAApBBUBd;<*<)D=' =4@BB#BB%()?)?D' =.I7 BBBBB[M -2.77778E-7 3.36423E-6 L -0.50851 0.19462 *3>*B ppt_xB ppt_y=@0BBAApBB8BK=<*<)D?' =4@BB#BB%()?)?D' =.K7 BBBBB]M 4.44444E-6 -2.19648E-6 L -0.42223 -0.03035 *3>*B ppt_xB ppt_y=@0BBAApBB-XBz<*<)D~' =%(D7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*&<%(D' =-s6Bwipe(down)*<3<*&<Dg' =4@BBBB%()))D' =1:Bvisible*o3>+B#style.visibility<*"<%(D' =-s6Bwipe(left)*<3<*"<Dc' =4@BBBB%()))D' =1:Bvisible*o3>+B#style.visibility<*<%(D' =-o6Bwipe(up)*<3<*<Dc' =4@BBBB%()))D' =1:Bvisible*o3>+B#style.visibility<*<%(D' =-o6Bwipe(up)*<3<*<Dc' =4@BBBB%()))D' =1:Bvisible*o3>+B#style.visibility<*!<%(D' =-o6Bwipe(up)*<3<*!<D7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*#<%(D' =-s6Bwipe(left)*<3<*#<++0+<0 ++0+<0 ++0+<0 ++0+ <0 +WB  0L0 && DQ&(  D~ D s *` 0@    D 0b  0 }3Automatic variables gone - stack frames on the heap44PB"H8X D Hl  ?"6@ NNN?N D ASM Style 0  D T8c?"6@`NNN?NB6# D  fo Ԕ?"0@NNN?Ns  UF() a = 17 Use a "0 nz   x D   x,$@ 0 D T8c?"6@`NNN?N  x  D  f(u Ԕ?"0@NNN?NP r   DF2()$0 nz  x   D  x ,$@ 0  D T8c?"6@`NNN?N x   D  fdy Ԕ?"0@NNN?NP "B DF1()$0 .  D H\}  ?"6@ NNN?N ,$ 0 D MSM Style 0 z T  D  ,$@ 0`B D 0DpT0   D <ԁ   =I/O0B D 0Dp r ,$@  0 D <  ,$ 0 BI/O done 0 2 D ZԔ?"0@NNN?NAp ,$@  0P D T~ Ԕ?"6@`NNN?N0 0 ,$@  0 Za: 17 & 00 B D  f?Dp?"6?@@NNN?N `  D Hl ?"6@`NNN?N @  AI/O"0P D H ?"6@`NNN?N { `  FI/O done" 0P B D@  `Dp?"0@NNN?N K   D      BCDE(F p 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E|| -$]0*I'h @   "0e@`     @ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN 5%  N 5%  N    5%    !"?N@ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `ab4wP ,$@   0  D      B%CDE(F p 8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E|| % 5AC @   "0e@`     @ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN 5%  N 5%  N    5%    !"?N@ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `ab p ,$D 0 D  f엄 Ԕ?"0@NNN?N@0'  GFrame&0 B D  fd Ԕ?"0@NNN?Np0,$@  0 @Heap 0 H D 0޽h ? 33&___PPT10. V+'填Db'  = @B D' = @BA?%,( < +O%,( < +DT' =%(D ' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* D%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* D%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*D%(D?' =4@BB#BB%()?)?D' =.K7 BBBBB]M -3.33333E-6 3.54958E-6 L -0.41666 -0.02039 *3>*B ppt_xB ppt_y=@0BBAApBBUUUB['<*D)D?' =4@BB#BB%()?)?D' =.K7 BBBBB]M -3.33333E-6 -3.24374E-6 L -0.41666 0.07808 *3>*B ppt_xB ppt_y=@0BBAApBBUUUBo=<* D)De' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*D%(D' =A@BBBB0B%())))?D' =1:Bvisible*o3>+B#style.visibility<*D%(D' =4@BBBB%())))?D' =1:Bvisible*o3>+B#style.visibility<*D%(D' =4@BBBB%())))?D' =1:Bvisible*o3>+B#style.visibility<*D%(D' =4@BBBB%())))?D' =1:Bvisible*o3>+B#style.visibility<*D%(D' =4@BBBB%())))?D' =1:Bvisible*o3>+B#style.visibility<*D%(D7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*D%(D' =-s6Bwipe(left)*<3<*DD9' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*D%(D' =-u6Bwipe(right)*<3<*D+p+0+ D0 ++0+D0 +7  0L0 -y- L-(  L~ L s * 0@   / L 0   qLoss of debugging stack: Debugger not aware of stack frames on the heap Some frames optimized way for convenience0  Y Y ":F   x L  E p  L T8c?"6@`NNN?N  x L  f Ԕ?"0@NNN?NP r  DF2()$0 :F  x  L  E K  L T8c?"6@`NNN?N x   L  fĄ Ԕ?"0@NNN?NP %.  DF1()$0   L HHȄ  ?"6@ NNN?N @ C MSM Style 0   L <PƄ ` ` Z  =I/O0  L <˄    BI/O done 0 2  L ZԔ?"0@NNN?N`00 L T0Ԅ Ԕ?"6@`NNN?N  nF1 s cont frame40 :F  x  L    L T8c?"6@`NNN?N x  L  fل Ԕ?"0@NNN?NE % DH1()$0 :F  x  L  L T8c?"6@`NNN?N x  L  f݄ Ԕ?"0@NNN?NE "+  DK1()$0 0 L T Ԕ?"6@`NNN?NK   nH1 s cont frame40 0 L T Ԕ?"6@`NNN?N i nK1 s cont frame40 B L TDp?"0@NNN?N!B L TDp?"0@NNN?N@@ B L TDp?"0@NNN?N7 5 B L ZZDp?"0@NNN?N  L      BOCTDEF   8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E|| 2OO4OT@  "0e@`     @ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN 5%  N 5%  N    5%    !"?N@ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abK$  L      BOCTDEF   8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E|| 2OO4OT@  "0e@`     @ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN 5%  N 5%  N    5%    !"?N@ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `ab\ O  L < R@r <Heap0 L      BCDEF   8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E||1lX'e@  "0e@`     @ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN 5%  N 5%  N    5%    !"?N@ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `ab ,$@  0H L 0޽h ? 33(  ___PPT10 . V+{D'  = @B DW' = @BA?%,( < +O%,( < +D' =%(D6' =%(D3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*L%(D' =-o6Bwipe(up)*<3<*LD' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<*L%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<*L%(D' =A@BBBB0B%(D' =1:Bhidden*o3>+B#style.visibility<*L%(+8+0+L0 +  0:L0 e.].0 ,,T-(  T[ T N, ?"6@`NNN?NP(  ,$D 0 kGetInfo() Yield control8 0HF08P T ZDm Ԕ?"6@`NNN?Nx  H"0(2  T Z0m Ԕ?"6@`NNN?NP  H"0(2 ~ T s *8m 0@  m  : T Nm ?"6@`NNN?N3p ,$@  0 J GetInfo1()$ 08P2 B T TDp?"0@NNN?NPB T@  fDp?"0@NNN?N]  B  T@  fDp?"0@NNN?N  x :  T N m ?"6@`NNN?Np,$@  0 J GetInfo2()$ 08P2 4  T Hm ?"6@`NNN?No ,$  0 J Schedule I/O" 0P B  T TDp?"0@NNN?N|H<B  T Z?Dp?"6?@@NNN?NP,$D  0B T Z?Dp?"6?@@NNN?NP p,$D  0B T@  `?Dp?"6?@@NNN?N0=,$@  0B T  f?Dp?"6?@@NNN?N00,$@  0B T@  f?Dp?"6?@@NNN?N 0,$@   0B T@ Z?Dp?"6?@@NNN?N% @ ,$D"  0B T@ Z?Dp?"6?@@NNN?N P 0 ,$D#  00 T Hm ?"6@`NNN?NB ` ,$  0 FI/O done" 0P  T Hm ?"6@`NNN?N( G Proc Call" 0P  T H< m ?"6@`NNN?N P@  I Proc Return" 0P 8 T T$m Ԕ?"6@`NNN?N P  ,$@ 0 BF2()"0(22 T N`(m ?"6@`NNN?NX pd ,$@ 0 BH2()"0(2B T  f?Dp?"6?@@NNN?NE0  ,$@  0B T@  `Dp?"0@NNN?N% 0 ,$@  09 T T,m  ?"6@ NNN?N` , ,$  0 C ASM Style 0 9 T TX1m  ?"6@ NNN?N` D ,$   0 C MSM Style 0 B T@  `?Dp?"6?@@NNN?NP ,$@  0 T H85m  ?"6@`NNN?N P4,$  0 IStack Ripping: Software evolution exacerbates MSM code structure problems<J0;K T H:m ?"6@`NNN?N,=%,$  0 a Sched I/O" 0P 0  T Hx?m ?"6@`NNN?NPM$,$!  0 FI/O done" 0P  !T TlCm Ԕ?"6@`NNN?NP AF()"0(2 "T TGm Ԕ?"6@`NNN?Nx AH()"0(2z  P  #T  P ,$@ 0 $T ZLm Ԕ?"6@`NNN?N P  H"0(2  %T  `Nm Ԕ?"6@`NNN?N P  BF1()"0(2z p  &T pP,$@ 0 'T Z4Tm Ԕ?"6@`NNN?Np  H"0(2  (T  `Vm Ԕ?"6@`NNN?Np BH1()"0(2J )T  `[m Ԕ?"6@`NNN?No P ,$D 0 H"0(2 J *T  `d_m Ԕ?"6@`NNN?NpP,$D 0 H"0(2   +T T,cm Ԕ?"6@`NNN?Nd x  H"0(2   ,T Tfm Ԕ?"6@`NNN?N P  H"0(2 H T 0޽h ? 330Z TIMINGj|24.6|5.1|7.9|16.5|3.9|13.8|5.8|8.7|18.4|6.8|9.2|12.2Y___PPT10zY. p+C?DU' }m = @B DU' = @BA?%,( < +O%,( < +D@ ' =%(D' =%(DD' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*T%(D' =-s6Bwipe(left)*<3<*TD3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*T%(D' =-o6Bwipe(up)*<3<*TD@' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* T%(D' =-o6Bwipe(up)*<3<* TD' =%(Di' =4@BBBB%()))D' =1:Bvisible*o3>+B#style.visibility<*T %(D' =-u6Bwipe(right)*<3<*T D+' =%(D' =%(D3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*T%(D' =-o6Bwipe(up)*<3<*TD@' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*T%(D' =-o6Bwipe(up)*<3<*TD' =%(D' =%(D!' =4@BBBB%(D' =,54*3>Bfillcolor=@BPB<*+TD' =1:B solid*a3>Bfill.type<*+TD' =1:B true*]3>Bfill.on<*+TD!' =4@BBBB%(D' =,54*3>Bfillcolor=@BPB<*,TD' =1:B solid*a3>Bfill.type<*,TD' =1:B true*]3>Bfill.on<*,TD$' =%(D' =%(Dt' =A@BBBB0B%()))D' =1:Bvisible*o3>+B#style.visibility<*T%(D' =-s6Bwipe(left)*<3<*TDR' =%(D' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*T%(D<' =A@BB?BB0B%()?)?D' =.K7 BBBBB]M -0.50416 0.13334 L -3.33333E-6 -3.33333E-6 *3>*B ppt_xB ppt_y=@0BBAApBB>B<*TD' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* T%(D,' =A@BB*BB0B%()?)?Ds' =.;7 BBBBBMM -0.50416 0.06667 L -3.33333E-6 0.0 *3>*B ppt_xB ppt_y=@0BBAApBB>B<* TDB' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*&T%(D+' =4@BB?BB%()?)?D' =.G7 BBBBBYM -0.4875 0.10802 L -3.33333E-6 4.21698E-6 *3>*B ppt_xB ppt_y=@0BBAApBBy>Bs]<*&TD' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*T%(D:' =A@BB?BB0B%()?)?D' =.I7 BBBBB[M -0.4875 0.05972 L -3.33333E-6 -2.22222E-6 *3>*B ppt_xB ppt_y=@0BBAApBBy>BJ<*TD`' =%(D' =%(D' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*#T%(D' =4@BB?BB%()?)?Dm' =.57 BBBBBGM -0.475 0.05251 L 0.0 8.16563E-7 *3>*B ppt_xB ppt_y=@0BBAApBB33s>Bؼ<*#TD' =A@BBBB0B%())))?D' =1:Bvisible*o3>+B#style.visibility<*T%(D*' =A@BB?BB0B%()?)?Dq' =.97 BBBBBKM -0.47917 0.05069 L 0.0 1.11111E-6 *3>*B ppt_xB ppt_y=@0BBAApBBUUu>Bм<*TD' =%(D' =%(DD' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*T%(D' =-s6Bwipe(left)*<3<*TDD ' =%(D' =%(D3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*T%(D' =-o6Bwipe(up)*<3<*TD' =%(D3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* T%(D' =-o6Bwipe(up)*<3<* TD' =%(D3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*T%(D' =-o6Bwipe(up)*<3<*TD3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*T%(D' =-o6Bwipe(up)*<3<*TD ' =%(D' =%(D3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*T%(D' =-o6Bwipe(up)*<3<*TDF' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<**T%(D' =-u6Bwipe(right)*<3<**TD' =%(D3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*T%(D' =-o6Bwipe(up)*<3<*TDF' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*)T%(D' =-u6Bwipe(right)*<3<*)TD+' =%(D' =%(D3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*T%(D' =-o6Bwipe(up)*<3<*TD@' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* T%(D' =-o6Bwipe(up)*<3<* TDv' =%(D' =%(D3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*T%(D' =-o6Bwipe(up)*<3<*TD' =%(D3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*T%(D' =-o6Bwipe(up)*<3<*T++0+T0 ++0+T0 ++0+ T0 ++0+ T0 ++0+ T0 ++0+T0 ++0+T0 ++0+T0 ++0+T0 ++0+T0 ++0+T0 ++0+T0 ++0+T0 ++0+ T0 ++0+)T0 ++0+*T0 +)2  0@L0 ##P &&\F#(  \ \ NLm ?"6@`NNN?NP(   VGetInfo(& )& 0P  \ Zm Ԕ?"6@`NNN?Nx  H"0(2  \ Zpm Ԕ?"6@`NNN?NP  H"0(2 ~ \ s *m 0@  m  ^ \ Nm ?"6@`NNN?N30  ,$D  0 n*GetInfo1(& , Cont * & )(08P2B \ TDp?"0@NNN?NPB \@  fDp?"0@NNN?N]  B  \@  fDp?"0@NNN?N  x   \ Nm ?"6@`NNN?N0  J GetInfo2()$ 08P2 B  \ TDp?"0@NNN?N|H<B  \ Z?Dp?"6?@@NNN?NPpB  \ Z?Dp?"6?@@NNN?N B \@  `?Dp?"6?@@NNN?N0pB \  f?Dp?"6?@@NNN?N0`B \@  f?Dp?"6?@@NNN?N `B \@ Z?Dp?"6?@@NNN?N% p B \@ Z?Dp?"6?@@NNN?N  \ Hm ?"6@`NNN?N( G Proc Call" 0P  \ Hm ?"6@`NNN?N P@  I Proc Return" 0P  \ TXm Ԕ?"6@`NNN?N   BF2()"0(2 \ N(m ?"6@`NNN?NX pd  BH2()"0(2B \@  `?Dp?"6?@@NNN?N D o \ Hm  ?"6@`NNN?N ,$  0 9Signature change guarantees programmer aware of yielding0:0H 9 \ Hm ?"6@`NNN?N, a Sched I/O" 0P  \ H8m ?"6@`NNN?N<l FI/O done" 0P  \ Tm Ԕ?"6@`NNN?NP AF()"0(2 \ Tm Ԕ?"6@`NNN?Nx AH()"0(2F  P  \   \ Z|m Ԕ?"6@`NNN?N P  H"0(2  \  `Pm Ԕ?"6@`NNN?N P  BF1()"0(2F p   \  pP !\ Z@m Ԕ?"6@`NNN?Np  H"0(2  "\  `m Ԕ?"6@`NNN?Np BH1()"0(2 #\  ``m Ԕ?"6@`NNN?No  H"0(2  $\  `m Ԕ?"6@`NNN?N pP H"0(2   %\ Tm Ԕ?"6@`NNN?Nd x  H"0(2   &\ T|m Ԕ?"6@`NNN?N P  H"0(2 H \ 0޽h ? 33, TIMING|24.|30. ___PPT10 . p+/DC '  = @B D ' = @BA?%,( < +O%,( < +D' =%(D' =%(D7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*\%(D' =-s6Bwipe(left)*<3<*\DF ' =%(D' =%(D!' =4@BBBB%(D' =,54f*3>Bfillcolor=@BPB<*\D' =1:B solid*a3>Bfill.type<*\D' =1:B true*]3>Bfill.on<*\D!' =4@BBBB%(D' =,54f*3>Bfillcolor=@BPB<*\D' =1:B solid*a3>Bfill.type<*\D' =1:B true*]3>Bfill.on<*\DD' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*\%(D' =-s6Bwipe(left)*<3<*\+8+0+\0 +XB  0НL0 p d,(  d~ d s *Hw 0@  w  [ d Nw ?"6@`NNN?NP 3 ,$@  0 kGetInfo() Yield control8 0P08P d Z w Ԕ?"6@`NNN?Nh  F 0(2 B d TDp?"0@NNN?N d Zw Ԕ?"6@`NNN?N@ 2  F 0(2 B d@  fDp?"0@NNN?N 2 B d@  fDp?"0@NNN?N @ B  d TDp?"0@NNN?N  ,$D  0B  d TDp?"0@NNN?N d,$@  0B  d@  `Dp?"0@NNN?N  ,$@   0  d <w  ?"6@`NNN?N  ,$@  0 [Must verify changed semantics but no stack ripping Static check allows same benefits as MSM"\1@\p  d s BA?SY00732_[1]"`m $D  0f4 d H(w ?"6@`NNN?N h,$  0 J Schedule I/O" 0P 0 d H #w ?"6@`NNN?N ,$   0 FI/O done" 0P  d T&w Ԕ?"6@`NNN?Nh AF()"0(2 d T*w Ԕ?"6@`NNN?N@  AH()"0(2  d Td/w Ԕ?"6@`NNN?N h  H"0(2   d T,3w Ԕ?"6@`NNN?N @ 2  H"0(2 H d 0޽h ? 33L.` TIMINGD|7.3|7.9|18.|5.7|6.9|6.7|15.7|18.8-___PPT10-. `y'+XD -'  = @B D,' = @BA?%,( < +O%,( < +D' =%(Dy' =%(D!' =4@BBBB%(D' =,54f*3>Bfillcolor=@BPB<*dD' =1:B solid*a3>Bfill.type<*dD' =1:B true*]3>Bfill.on<*dD^' =%(Do' =%(D' =4@BBBB%(D' =1:Bhidden*o3>+B#style.visibility<* d%(D' =4@BBBB%()))D' =,54f*3>#Bstroke.color=@BPB<* dD' =1:B true*a3>Bstroke.on<* dD' =%(D7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* d%(D' =-s6Bwipe(left)*<3<* dD ' =%(D ' =%(Dg' =4@BBBB%()))D' =1:Bvisible*o3>+B#style.visibility<*d %(D' =-s6Bwipe(left)*<3<*d Dg' =4@BBBB%()))D' =1:Bvisible*o3>+B#style.visibility<* d%(D' =-s6Bwipe(left)*<3<* dDt' =A@BBBB0B%()))D' =1:Bvisible*o3>+B#style.visibility<*d%(D' =-s6Bwipe(left)*<3<*dDg' =4@BBBB%()))D' =1:Bvisible*o3>+B#style.visibility<* d%(D' =-s6Bwipe(left)*<3<* dDt' =A@BBBB0B%()))D' =1:Bvisible*o3>+B#style.visibility<*d%(D' =-s6Bwipe(left)*<3<*dD' =%(Dy' =%(D!' =4@BBBB%(D' =,54f*3>Bfillcolor=@BPB<*dD' =1:B solid*a3>Bfill.type<*dD' =1:B true*]3>Bfill.on<*dD%' =%(D' =%(Du' =4@BB BB%()))D' =1:Bvisible*o3>+B#style.visibility<* d%(D' =-6B%slide(fromBottom)*<3<* dD' =%(Dy' =%(D!' =4@BBBB%(D' =,54*3>Bfillcolor=@BPB<*dD' =1:B solid*a3>Bfill.type<*dD' =1:B true*]3>Bfill.on<*dD' =%(D' =%(D7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* d3%(D' =-s6Bwipe(left)*<3<* d3D!' =4@BBBB%(D' =,54*3>Bfillcolor=@BPB<*dD' =1:B solid*a3>Bfill.type<*dD' =1:B true*]3>Bfill.on<*dD' =%(D' =%(D7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* d3\%(D' =-s6Bwipe(left)*<3<* d3\+p+0+d0 ++0+d0 +:[  0L0  t(  t~ t s *Hw 0@  w  6 t NLw ?"6@`NNN?Nlg,$@ 0 F 0(2 B t TDp?"0@NNN?N8 ,$D  0B t@  fDp?"0@NNN?N H ,$@ 0B t@  `Dp?"0@NNN?N-` ,$@ 0[ t HRw  ?"6@`NNN?N t ,$  0 q5Expects to call GetInfo(id, contF2) and unroll stack 606A t NTw ?"6@`NNN?N l ,$@ 0 QExtract Info from f"0(2C  t <LYw  ?"6@`NNN?N w ,$ 0 e)Expects to be scheduled when GetInfo done *0*9  t Bd_w ?"6@`NNN?N  ,$@   0 UYield control Process I/O 0B  t TDp?"0@NNN?N ;,$@  02  t H`w  ?"6@ NNN?Nb\,$  0 H Schedule I/O 0 /  t HPdw  ?"6@ NNN?N ,$ 0 E I/O done  0 < t Hhw  ?"6@ NNN?N [ ,$ 0 RExpects to return Info 0B t TDp?"0@NNN?N l,$D  0B t Hlw  ?"6@ NNN?N D,$  0 XDoes not expect continuation 0B t@ TDp?"0@NNN?N ` ,$D  0* t Hqw  ?"6@ NNN?N,$  0 @F1() 04 t HHnw  ?"6@ NNN?N s ,$   0 J F2(Frame *f)" 0(2 N t Hyw  ?"6@ NNN?N ,$   0 dGetInfo(Id id) 0 B t HDp?"0@NNN?N  ,$D  0, t Hxw  ?"6@ NNN?NM a6m,$  0 BMSM Code 0 , t Hw  ?"6@ NNN?N@ K`,$   0 BASM Code 0  t Zw Ԕ?"0@NNN?Nt z,$  0 FOne stack (fiber) for MSM code One stack (fiber) per task for ASM codeG0 GH t 0޽h ? 33?b TIMINGF|16.4|14.6|8.3|8.3|2.4|5.2|1.6|36.9c?___PPT10C?. 0ʊ+*AD;'  = @B D;' = @BA?%,( < +O%,( < +Dd ' =%(D ' =%(D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*t%(DD' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*t%(D' =-s6Bwipe(left)*<3<*tDD' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*t%(D' =-s6Bwipe(left)*<3<*tDD' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*t%(D' =-s6Bwipe(left)*<3<*tD7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*t%(D' =-s6Bwipe(left)*<3<*tD ' =%(D' =%(DF' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* t%(D' =-u6Bwipe(right)*<3<* tD' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*t%(DD' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*t%(D' =-s6Bwipe(left)*<3<*tD9' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*t%(D' =-u6Bwipe(right)*<3<*tD ' =%(Dk ' =%(DD' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*t%(D' =-s6Bwipe(left)*<3<*tDD' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* t%(D' =-s6Bwipe(left)*<3<* tD@' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*t%(D' =-o6Bwipe(up)*<3<*tD3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*t%(D' =-o6Bwipe(up)*<3<*tD3' =%(D' =%(DD' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*t%(D' =-s6Bwipe(left)*<3<*tD7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*t%(D' =-s6Bwipe(left)*<3<*tDr' =%(D' =%(D7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* t%(D' =-s6Bwipe(left)*<3<* tDD' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* t%(D' =-s6Bwipe(left)*<3<* tD7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* t%(D' =-s6Bwipe(left)*<3<* tD7' =%(D' =%(D9' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*t%(D' =-u6Bwipe(right)*<3<*tDF' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* t%(D' =-u6Bwipe(right)*<3<* tDv' =%(D' =%(D7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* t%(D' =-s6Bwipe(left)*<3<* tD9' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*t%(D' =-u6Bwipe(right)*<3<*tDF' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*t%(D' =-u6Bwipe(right)*<3<*tD' =%(D' =%(DD' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*t%(D' =-s6Bwipe(left)*<3<*t+H+0+t0 ++0+t0 ++0+t0 ++0+ t0 ++0+ t0 ++0+ t0 ++0+ t0 ++0+t0 ++0+t0 ++0+t0 ++0+t0 ++0+t0 ++0+t0 ++0+t0 ++0+t0 +)  0fL0 ** ))|*(  | | B?"6@`NNN?N}@ e,$@  0 | B?"6@`NNN?N}]9 e,$@  06 | Nw  Ԕ?"6@`NNN?N= b ,$@ 0 F 0 ~ | s *w 0@  w   | Z ^ =MSM0 | H  ?"6@ NNN?N> ^ =ASM03 | Hw  ?"6@ NNN?N ,$  0 I M2A-Adapter() 0- | H  ?"6@ NNN?N> {^,$   0 C (Fiber 1) 0 / | H  ?"6@ NNN?N>  ^,$  0 E (MainFiber) 0 K  | H  ?"6@ NNN?N,$(  0 a%One code style unaware of other style &0&B !|@ NDp?"0@NNN?N  ,$@% 0. "| <  ?"6@`NNN?N e : ,$$ 0 P F2 scheduled( 0P G.z @ }^ #| }@ ^,$D#  0B $|  f?DԔ?"6?@@NNN?N@ }^B %|  `DԔ?"0@NNN?N@ }^  &| T Ԕ?"6@`NNN?N>. H"0(2   '| Td$ Ԕ?"6@`NNN?Nzj H"0(2 0 (| H' Ԕ?"6@`NNN?N b ,$@ 0 F 0 0 )| H+ Ԕ?"6@`NNN?N8 b (,$D 0 F 0 H | 0޽h ? 33-o TIMINGh|7.6|13.1|5.|6.1|2.8|2.5|15.2|4.9|6.|5.7|5.2|3.8|5.1n___PPT10yn. 0ʊ+fD=k'  = @B Dj' = @BA?%,( < +O%,( < +D3' =%(D' =%(D7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*|%(D' =-s6Bwipe(left)*<3<*|DD' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*|%(D' =-s6Bwipe(left)*<3<*|DD' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*|%(D' =-s6Bwipe(left)*<3<*|D7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*|%(D' =-s6Bwipe(left)*<3<*|D!' =4@BBBB%(D' =,54*3>Bfillcolor=@BPB<*|D' =1:B solid*a3>Bfill.type<*|D' =1:B true*]3>Bfill.on<*|DD' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*|%(D' =-s6Bwipe(left)*<3<*|D' =%(DV' =%(D7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*|%(D' =-s6Bwipe(left)*<3<*|Ds' =4@BB BB%())))?D' =1:Bvisible*o3>+B#style.visibility<*|%(D' =-o6Bdissolve*<3<*|DD' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*|%(D' =-s6Bwipe(left)*<3<*|Dh' =%(Dy' =%(D!' =4@BBBB%(D' =,54*3>Bfillcolor=@BPB<*|D' =1:B solid*a3>Bfill.type<*|D' =1:B true*]3>Bfill.on<*|D ' =%(D!' =4@BBBB%(D' =,54*3>Bfillcolor=@BPB<*|D' =1:B solid*a3>Bfill.type<*|D' =1:B true*]3>Bfill.on<*|D7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*|%(D' =-s6Bwipe(left)*<3<*|D' =A@BBBB0B%())))?D' =1:Bvisible*o3>+B#style.visibility<*|%(DD' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*|%(D' =-s6Bwipe(left)*<3<*|D' =A@BBBB0B%())))?D' =1:Bvisible*o3>+B#style.visibility<*(|%(D' =A@BBBB0B%())))?D' =1:Bvisible*o3>+B#style.visibility<*)|%(D' =%(D' =%(D7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*|%(D' =-s6Bwipe(left)*<3<*|D3' =%(D' =%(D7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* |%(D' =-s6Bwipe(left)*<3<* |DD' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* |%(D' =-s6Bwipe(left)*<3<* |D* ' =%(D' =%(D7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* |%(D' =-s6Bwipe(left)*<3<* |D' =%(D!' =4@BBBB%(D' =,54*3>Bfillcolor=@BPB<*|D' =1:B solid*a3>Bfill.type<*|D' =1:B true*]3>Bfill.on<*|D!' =4@BBBB%(D' =,54*3>Bfillcolor=@BPB<*|D' =1:B solid*a3>Bfill.type<*|D' =1:B true*]3>Bfill.on<*|D' =%(D9' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*|%(D' =-u6Bwipe(right)*<3<*|D' =%(Dy' =%(D!' =4@BBBB%(D' =,54*3>Bfillcolor=@BPB<*|D' =1:B solid*a3>Bfill.type<*|D' =1:B true*]3>Bfill.on<*|D ' =%(D' =%(D9' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*|%(D' =-u6Bwipe(right)*<3<*|D!' =4@BBBB%(D' =,54*3>Bfillcolor=@BPB<*|D' =1:B solid*a3>Bfill.type<*|D' =1:B true*]3>Bfill.on<*|DF' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* |%(D' =-u6Bwipe(right)*<3<* |D' =%(D' =4@BBBB%())))?D' =1:Bvisible*o3>+B#style.visibility<* |%(D7' =%(D' =%(D9' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*|%(D' =-u6Bwipe(right)*<3<*|DF' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*|%(D' =-u6Bwipe(right)*<3<*|D' =%(D' =%(DF' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*|%(D' =-u6Bwipe(right)*<3<*|D9' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*|%(D' =-u6Bwipe(right)*<3<*|Dy' =%(D!' =4@BBBB%(D' =,54*3>Bfillcolor=@BPB<*|D' =1:B solid*a3>Bfill.type<*|D' =1:B true*]3>Bfill.on<*|D' =%(D' =%(Dc' =4@BBBB%()))D' =1:Bvisible*o3>+B#style.visibility<*#|%(D' =-o6Bwipe(up)*<3<*#|D ' =%(D' =%(DF' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*"|%(D' =-u6Bwipe(right)*<3<*"|D9' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*!|%(D' =-u6Bwipe(right)*<3<*!|D!' =4@BBBB%(D' =,54*3>Bfillcolor=@BPB<*|D' =1:B solid*a3>Bfill.type<*|D' =1:B true*]3>Bfill.on<*|D' =%(D7' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<* |%(D' =-s6Bwipe(left)*<3<* |D' =%(D' =%(DD' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<* |%(D' =-s6Bwipe(left)*<3<* |++0+|0 ++0+ |0 ++0+ |0 ++0+|0 ++0+|0 ++0+|0 ++0+|0 ++0+|0 ++0+|0 ++0+|0 ++0+ |0 ++0+"|0 ++0+(|0 ++0+)|0 +L  00L0 7$/$ 5#(  ~  s *e 0@     s *k p j<$D  0    f^2   `o 8c?"6@`NNN?ND{,$ 0 \" Multi- threaded 0X2   `$t 8c?"6@`NNN?N ? ,$ 0 V Event-driven 0B @  `D?"0@NNN?NT? ,$D 0B @ ZD?"0@NNN?N %,$@  0v2   `x 8c?"6@`NNN?N  ,$  0 t Coroutines  0         BC DE4F   8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E|| <$ DL $>v' @    "0e@`     @ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN 5%  N 5%  N    5%    !"?N@ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `ab ,$D  0       BC DE4F   8c8c     ?1 d0u0@Ty2 NP'p<'pA)BCD|E|| <$ DL $>v' @    "0e@`     @ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `abN 5%  N 5%  N    5%    !"?N@ABC DEFGHIJK5%LMNOPQRSTUWYZ[ \]^_ `ab" ,$D  0  # lG<1?"` s ,$@ 0  # l1?"`y%,$@ 0 F A 0  , p  B - ZDԔ?"0@NNN?N= 0 B . ZDԔ?"0@NNN?N4 4 ! /  f Ԕ?"0@NNN?N    KTask Management 0 4 0 3 r Ԕ?"6@`NNN?NA Z  LStack Management 0  1 Z Ԕ?"0@NNN?N M 4  G cooperative 0   2  f Ԕ?"0@NNN?NhM 04  F preemptive 0  - 3 3 r Ԕ?"6@`NNN?N` y # E automatic 0  * 4 3 rt Ԕ?"6@`NNN?Nt ) ! ;  Bmanual 0   5 ZL Ԕ?"0@NNN?N Z A  Bserial 0 H  0޽h ? 33'B TIMING&|3.2|22.7|20.6|10.1'___PPT10{'. *+D&'  = @B Db&' = @BA?%,( < +O%,( < +D' =%(D' =%(D3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*'%(D' =-o6Bwipe(up)*<3<*'D' =%(De' =%(D3' =4@BB BB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*D' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D9' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-u6Bwipe(right)*<3<*D1' =%(D' =%(D3' =4@BB BB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bdissolve*<3<*DF' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-u6Bwipe(right)*<3<*D' =%(D' =%(D3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*'H%(D' =-o6Bwipe(up)*<3<*'HD3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*Hk%(D' =-o6Bwipe(up)*<3<*HkDr' =%(D' =%(D3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*k%(D' =-o6Bwipe(up)*<3<*kD9' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-u6Bwipe(right)*<3<*DF' =A@BBBB0B%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-u6Bwipe(right)*<3<*D ' =%(D' =%(D3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bwipe(up)*<3<*D3' =4@BBBB%(D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bwipe(up)*<3<*DG' =4@BBBB%()?D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-s6Bwipe(down)*<3<*D' =%(DC' =4@BBBB%()?D' =1:Bvisible*o3>+B#style.visibility<*%(D' =-o6Bwipe(up)*<3<*++0+0 ++0+0 ++0+0 +^ 0  ((  ^  S      c $ʇ  0    H  0޽h ? 3380___PPT10.E3-` 0  ((  ^  S      c $L  0    H  0޽h ? 3380___PPT10.|  B&a 0 @ 6(  ^  S      c $  0   , HH  0޽h ? 3380___PPT10. V/d 0  0((  0^ 0 S     0 c $  0    H 0 0޽h ? 3380___PPT10.ve 0  8((  8^ 8 S     8 c $  0    H 8 0޽h ? 3380___PPT10. if 0  @((  @^ @ S     @ c $  0    H @ 0޽h ? 3380___PPT10. ig 0  H((  H^ H S     H c $l  0    H H 0޽h ? 3380___PPT10. ph 0  P((  P^ P S     P c $<  0    H P 0޽h ? 3380___PPT10. pi 0 @ X((  X^ X S     X c $  0    H X 0޽h ? 3380___PPT10. j 0 ` `((  `^ ` S     ` c $%  0    H ` 0޽h ? 3380___PPT10. k 0  h((  h^ h S     h c $*  0    H h 0޽h ? 3380___PPT10.  m 0  x((  x^ x S     x c $0  0    H x 0޽h ? 3380___PPT10. pbwn 0  ((  ^  S      c $h6  0    H  0޽h ? 3380___PPT10.  \Bo 0  R(  ^  S      c $4C  0   H HH  0޽h ? 3380___PPT10. pլp 0  ((  ^  S      c $I  0    H  0޽h ? 3380___PPT10. pZOt 0  ((  ^  S      c $7  0    H  0޽h ? 3380___PPT10.vr&CJ( 4@jMPf Vcİ-Mw*a5@_׺+U ģ2RrҴ 2RTGa~F?1Oh+'0Ux   , 8 D P\dWelcomeDistributed SystemsFabian E. Bustamante AquaLab05Fabian E. Bustamante64Microsoft PowerPoint@1Y@}@ OQ@EGSg  )'    """)))UUUMMMBBB999|PP3f333f3333f3ffffff3f̙3ff333f333333333f33333333f33f3ff3f3f3f3333f33̙33333f333333f3333f3ffffff3f33ff3f3f3f3fff3ffffffffff3ffff̙fff3fffff3fff333f3f3ff3ff33f̙̙3̙ff̙̙̙3f̙3f333f3333f3ffffff3f̙3f3f3f333f3333f3ffffff3f̙3f3ffffffffff!___wwwSett4'A x(xKʦ """)))UUUMMMBBB999|PP3f3333f333ff3fffff3f3f̙f3333f3333333333f3333333f3f33ff3f3f3f3333f3333333f3̙33333f333ff3ffffff3f33f3ff3f3f3ffff3fffffffff3fffffff3f̙ffff3ff333f3ff33fff33f3ff̙3f3f3333f333ff3fffff̙̙3̙f̙̙̙3f̙3f3f3333f333ff3fffff3f3f̙3ffffffffff!___wwweeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮϮ՜.+,0    0On-screen ShowEast Texas Data Servicef? Times New RomanTahomaArial WingdingsVerdana HelveticaSymbol aqualab01Cooperative Task Management without Manual Stack Management or Event-driven programming is not the opposite of thread programmingTask ManagementCooperative Task ManagementStack ManagementIssues were NOT talking aboutContributionsStack Management pros & consAutomatic to Manual Stack MgmtManual Stack Mgmt (MSM) Related WorkMSM: Poor Software StructureMSM: Poor Software StructureMSM: Poor Software StructureMSM: Poor Software StructureSoftware EvolutionDetecting I/O Yields with MSMDetecting I/O Yields with ASMMSM code calls ASM codeMSM code calls ASM code Conclusions  Fonts UsedDesign Template Slide Titles,_0Fabian E. BustamanteFabian E. Bustamante  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root EntrydO)PicturesCurrent UserSummaryInformation(DUPowerPoint Document(RDocumentSummaryInformation8