Re: 2nd gen Io
Scott Solmonson <[email protected]> Sun, 9 Mar 2014 14:58:47 -0700
| Newsgroups | gmane.comp.lang.io |
|---|---|
| Message-ID | <CAOBv=xAc=d4=G__7Lk-fjaz86gnFmzh23xKhf34QuFiaTQGyzA@mail.gmail.com> |
--089e0153852e6d642104f4339784 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable To make it actually robust, the verification has to happen at the execution layer, not at the packaging layer- I'll try to work though a state diagram, but for now my first blush at the model looks like: an object is signed and spawned with its methods encrypted by a single secret key known only to the Lobby- a keypair specific to that Object is generated- that Object is given the public Lobby key and of course its own private part of the generated keypair specific to it. Upon the first usage-attempt of any of its slots, it sends the Lobby its list of methods (that it doesn't even know about yet) and the Lobby verifies that it did in fact spawn that object (via the generated private key given to he object) decrypts the methods using it's internal single secret key, and if it approves of what that object wants to do, it generates a new single key modulated by its own secret key, shares it with the object, and that object's decrypts its own methods/slots they're now usable. Then, the entire process repeats on an interval to handle any "stale-credential" issues. -SS -- NUNQUAM NON PARATUS =E2=98=A4 INCITATUS =C3=86TERNUS =E3=83=BD(=C2=B4=E2=97= =87=EF=BD=80)=E3=83=8E V/T: 00.1.408.718.6290 Skype: Scott Solmonson On Sat, Mar 8, 2014 at 6:40 PM, William Tanksley, Jr <[email protected]>wrote: > > > Startup time might be manageable if the root instance seed signed an imag= e > containing a group of objects rather than one object at a time (the other > objects would be signed too, but they would be marked as trusted due to > their inclusion). > > > On Thu, Mar 6, 2014 at 11:51 PM, Scott Solmonson <[email protected]>wrote= : > >> >> >> Why stop there? >> >> Why not sign every object from a root instance seed from the initial >> Lobby? Startup time would be increased hilariously, but in the "reusable >> object" paradigm once they're up, they're up. And a chain of authorizati= on >> can then exist that effortlessly overflows across cores, systems, and >> distance automagically. >> >> -SS >> >> -- >> >> NUNQUAM NON PARATUS =E2=98=A4 INCITATUS =C3=86TERNUS =E3=83=BD(=C2=B4=E2= =97=87=EF=BD=80)=E3=83=8E >> >> V/T: 00.1.408.718.6290 >> >> Skype: Scott Solmonson >> >> >> On Thu, Mar 6, 2014 at 4:28 PM, Steve Dekorte <[email protected]> wrote: >> >>> >>> I=E2=80=99d like to make the things that tend to be re-implemented in t= ypical >>> projects part of the language - security, persistence, concurrency, >>> distribution and user interaction. All of these could be seen as mappin= g >>> problems and their solution as adding explicit mapping boundaries. >>> >>> The first idea (which was probably already done in Smalltalk in 1980s) >>> is to add a pointer to each object in the system to it=E2=80=99s =E2=80= =9Cowner=E2=80=9D and have >>> object ownership domains where the domain leader is an actor/process wh= ose >>> execution thread is used for processing all messages sent to objects wi= thin >>> it=E2=80=99s domain. Any object can become a domain of the objects belo= w it in the >>> ownership graph. Domain boundaries are used to solve the problems of >>> security (tracking and verifying authority to invoke behaviors), >>> concurrency (avoid unexpected state changes, closely associate executio= n >>> with the state it will be working on), distribution and persistence >>> (boundaries determine the state which needs to be persisted or moved). >>> >>> Part of the persistence component is to support the indexing and lazy >>> loading of individual objects and standard representations that can be >>> externally manipulated and returned and merged with an optimistic locki= ng >>> mechanism. >>> >>> The user interaction part involves extending slots to have metadata and >>> a standard set of properties which are used for the interface mapping. >>> >>> This would be a big project but hopefully there will be time in the >>> future to take a stab at it. >>> >>> Sorry for the delay in responding, >>> Steve >>> >>> On Feb 24, 2014, at 6:06 AM, [email protected] wrote: >>> > Come on Steve, there are Io fans who wanna hear about it! Let us chat= . >>> > >>> > Selon Steve Dekorte <[email protected]>: >>> >> >>> >> On Feb 19, 2014, at 1:28 AM, [email protected] wrote: >>> >>> Hi all, >>> >>> >>> >>> When there's no matching slot, the "forward" slot is activated. >>> >>> >>> >>> I have this idea about a "before" slot: >>> >>> >>> >>> If "before" doesn't exist, everything works as usual. >>> >>> >>> >>> If "before" exists, it is always activated (and it receives the >>> message) >>> >> before >>> >>> the slot lookup. Then, it produces a message (possibly the same) >>> which will >>> >> be >>> >>> treated as usual. >>> >>> >>> >>> This could be used to test whether the sender as the "right" to >>> access a >>> >>> particular slot, for example. >>> >> >>> >> Hi Julien, >>> >> >>> >> I like the idea. On my list for a 2nd gen Io is some form of support >>> for >>> >> rights on all objects. >>> >> >>> >>> Is there already a way to do this at user level? >>> >> >>> >> You can get the same effect using a proxy to forward message to the >>> real >>> >> object. >>> >> Io uses proxies for futures and supports turning all references of >>> one object >>> >> to another. >>> >> >>> >>> Also, would anybody have a little constructive criticism about Io? >>> >> >>> >> Always welcome! :) >>> >> >>> >> Steve >>> >>> >>> >>> >>> >>> ------------------------------------ >>> >>> Yahoo Groups Links >>> >>> >>> >>> >> >> >> > > >=20 > --089e0153852e6d642104f4339784 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/htm= l4/strict.dtd"> <html> <head> </head> =20 <body style=3D"background-color: #fff;"> <span style=3D"display:none"> </span> <!--~-|**|PrettyHtmlStartT|**|-~--> <div id=3D"ygrp-mlmsg" style=3D"position:relative;"> <div id=3D"ygrp-msg" style=3D"z-index: 1;"> <!--~-|**|PrettyHtmlEndT|**|-~--> <div id=3D"ygrp-text" > =20=20=20=20=20=20 =20=20=20=20=20=20 <p><div dir=3D"ltr">To make it actually robust, the verification has = to happen at the execution layer, not at the packaging layer-<div><br></div= ><div>I'll try to work though a state diagram, but for now my first blu= sh at the model looks like: an object is signed and spawned with its method= s encrypted by a single secret key known only to the Lobby- a keypair speci= fic to that Object is generated- that Object is given the public Lobby key = and of course its own private part of the generated keypair specific to it.= </div> <div>Upon the first usage-attempt of any of its slots, it sends the Lobby i= ts list of methods (that it doesn't even know about yet) and the Lobby = verifies that it did in fact spawn that object (via the generated private k= ey given to he object) decrypts the methods using it's internal single = secret key, and if it approves of what that object wants to do, it generate= s a new single key modulated by its own secret key, shares it with the obje= ct, and that object's decrypts its own methods/slots they're now us= able. Then, the entire process repeats on an interval to handle any "s= tale-credential" issues.</div> <div><br></div><div><br></div><div>-SS=C2=A0</div></div><div class=3D"gmail= _extra"><br clear=3D"all"><div><div dir=3D"ltr"> <p>--</p><p>NUNQUAM NON PARATUS =E2=98=A4 INCITATUS =C3=86TERNUS =E3=83=BD(= =C2=B4=E2=97=87=EF=BD=80)=E3=83=8E</p><p>V/T: 00.1.408.718.6290</p><p>Skype= : Scott Solmonson</p></div></div> <br><br><div class=3D"gmail_quote">On Sat, Mar 8, 2014 at 6:40 PM, William = Tanksley, Jr <span dir=3D"ltr"><<a href=3D"mailto:[email protected]"= target=3D"_blank">[email protected]</a>></span> wrote:<br><blockquo= te class=3D"gmail_quote" style=3D"border-left:1px #ccc solid;"> =20=20=20=20=20=20=20=20 <div> <br><br> <div dir=3D"ltr">Startup time might be manageable if the root instance seed= signed an image containing a group of objects rather than one object at a = time (the other objects would be signed too, but they would be marked as tr= usted due to their inclusion).</div> <div><div class=3D"h5"> <div class=3D"gmail_extra"><br><br><div class=3D"gmail_quote">On Thu, Mar 6= , 2014 at 11:51 PM, Scott Solmonson <span dir=3D"ltr"><<a href=3D"mailto= :[email protected]" target=3D"_blank">[email protected]</a>></span> wrot= e:<br> <blockquote class=3D"gmail_quote" style=3D"border-left:1px #ccc solid;"> =20=20=20=20=20=20=20=20 <div> <br><br> <div dir=3D"ltr">Why stop there?<div><br></div><div>Why not sign every obje= ct from a root instance seed from the initial Lobby? Startup time would be = increased hilariously, but in the "reusable object" paradigm once= they're up, they're up. And a chain of authorization can then exis= t that effortlessly overflows across cores, systems, and distance automagic= ally.</div> <div><br></div><div>-SS</div> </div><div class=3D"gmail_extra"><br clear=3D"all"><div><div dir=3D"ltr"> <p>--</p><p>NUNQUAM NON PARATUS =E2=98=A4 INCITATUS =C3=86TERNUS =E3=83=BD(= =C2=B4=E2=97=87=EF=BD=80)=E3=83=8E</p><p>V/T: 00.1.408.718.6290</p><p>Skype= : Scott Solmonson</p></div></div><div><div> <br><br><div class=3D"gmail_quote">On Thu, Mar 6, 2014 at 4:28 PM, Steve De= korte <span dir=3D"ltr"><<a href=3D"mailto:[email protected]" target=3D"= _blank">[email protected]</a>></span> wrote:<br><blockquote class=3D"gma= il_quote" style=3D"border-left:1px #ccc solid;"> <br> I=E2=80=99d like to make the things that tend to be re-implemented in typic= al projects part of the language - security, persistence, concurrency, dist= ribution and user interaction. All of these could be seen as mapping proble= ms and their solution as adding explicit mapping boundaries.<br> <br> The first idea (which was probably already done in Smalltalk in 1980s) is t= o add a pointer to each object in the system to it=E2=80=99s =E2=80=9Cowner= =E2=80=9D and have object ownership domains where the domain leader is an a= ctor/process whose execution thread is used for processing all messages sen= t to objects within it=E2=80=99s domain. Any object can become a domain of = the objects below it in the ownership graph. Domain boundaries are used to = solve the problems of security (tracking and verifying authority to invoke = behaviors), concurrency (avoid unexpected state changes, closely associate = execution with the state it will be working on), distribution and persisten= ce (boundaries determine the state which needs to be persisted or moved).<b= r> <br> Part of the persistence component is to support the indexing and lazy loadi= ng of individual objects and standard representations that can be externall= y manipulated and returned and merged with an optimistic locking mechanism.= <br> <br> The user interaction part involves extending slots to have metadata and a s= tandard set of properties which are used for the interface mapping.<br> <br> This would be a big project but hopefully there will be time in the future = to take a stab at it.<br> <br> Sorry for the delay in responding,<br> Steve<br> <br> On Feb 24, 2014, at 6:06 AM, <a href=3D"mailto:[email protected]" targe= t=3D"_blank">[email protected]</a> wrote:<br> > Come on Steve, there are Io fans who wanna hear about it! Let us chat.= <br> ><br> > Selon Steve Dekorte <<a href=3D"mailto:[email protected]" target=3D= "_blank">[email protected]</a>>:<br> >><br> >> On Feb 19, 2014, at 1:28 AM, <a href=3D"mailto:omenvironment@free.= fr" target=3D"_blank">[email protected]</a> wrote:<br> >>> Hi all,<br> >>><br> >>> When there's no matching slot, the "forward" slo= t is activated.<br> >>><br> >>> I have this idea about a "before" slot:<br> >>><br> >>> If "before" doesn't exist, everything works as u= sual.<br> >>><br> >>> If "before" exists, it is always activated (and it r= eceives the message)<br> >> before<br> >>> the slot lookup. Then, it produces a message (possibly the sam= e) which will<br> >> be<br> >>> treated as usual.<br> >>><br> >>> This could be used to test whether the sender as the "rig= ht" to access a<br> >>> particular slot, for example.<br> >><br> >> Hi Julien,<br> >><br> >> I like the idea. On my list for a 2nd gen Io is some form of suppo= rt for<br> >> rights on all objects.<br> >><br> >>> Is there already a way to do this at user level?<br> >><br> >> You can get the same effect using a proxy to forward message to th= e real<br> >> object.<br> >> Io uses proxies for futures and supports turning all references of= one object<br> >> to another.<br> >><br> >>> Also, would anybody have a little constructive criticism about= Io?<br> >><br> >> Always welcome! :)<br> >><br> >> Steve<br> <br> <br> <br> <br> <br> ------------------------------------<br> <br> Yahoo Groups Links<br> <br> <*> To visit your group on the web, go to:<br> =C2=A0 =C2=A0 <a href=3D"http://groups.yahoo.com/group/iolanguage/" target= =3D"_blank">http://groups.yahoo.com/group/iolanguage/</a><br> <br> <*> Your email settings:<br> =C2=A0 =C2=A0 Individual Email | Traditional<br> <br> <*> To change settings online go to:<br> =C2=A0 =C2=A0 <a href=3D"http://groups.yahoo.com/group/iolanguage/join" tar= get=3D"_blank">http://groups.yahoo.com/group/iolanguage/join</a><br> =C2=A0 =C2=A0 (Yahoo! ID required)<br> <br> <*> To change settings via email:<br> =C2=A0 =C2=A0 <a href=3D"mailto:[email protected]" target= =3D"_blank">[email protected]</a><br> =C2=A0 =C2=A0 <a href=3D"mailto:[email protected]" ta= rget=3D"_blank">[email protected]</a><br> <br> <*> To unsubscribe from this group, send an email to:<br> =C2=A0 =C2=A0 <a href=3D"mailto:[email protected]" tar= get=3D"_blank">[email protected]</a><br> <br> <*> Your use of Yahoo Groups is subject to:<br> =C2=A0 =C2=A0 <a href=3D"https://info.yahoo.com/legal/us/yahoo/utos/terms/"= target=3D"_blank">https://info.yahoo.com/legal/us/yahoo/utos/terms/</a><br= > <br> </blockquote></div><br></div></div></div> <br> <br> <div width=3D"1" style=3D"color:white;"></div> </div></blockquote></div><br></div> <br> <br> </div></div><div width=3D"1" style=3D"color:white;"></div> </div></blockquote></div><br></div> </p> </div> =20=20=20=20=20 <!--~-|**|PrettyHtmlStart|**|-~--> <div style=3D"color: #fff; height: 0;">__._,_.___</div> =20=20=20=20=20=20=20=20=20=20 =20=20 =20=20=20=20 <div style=3D"clear:both"> </div> <table cellspacing=3D4px style=3D"margin-top: 20px; margin-bottom: 10px= ;"> <tbody> <tr> <td style=3D"font-size: 12px; font-family: arial; font-weight: bo= ld; padding: 7px 5px 5px; color: #FFF; background-color: #F2F2F2; border: 1= px solid #EAEAEA " > <a style=3D"text-decoration: none; color: #2D50FD= " href=3D"https://groups.yahoo.com/group/iolanguage/post;_ylc=3DX3oDMTJxZTZ= pZHVyBF9TAzk3MzU5NzE0BGdycElkAzY2Nzc0NzYEZ3Jwc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAz= EzMzU4BHNlYwNmdHIEc2xrA3JwbHkEc3RpbWUDMTM5NDQwMjMyOQ--?act=3Dreply&messageN= um=3D13358">Reply via web post</a> </td> <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p= x 5px; color: #FFF; background-color: #F2F2F2; border: 1px solid #EAEAEA; "= > <a href=3D"mailto:[email protected]?subject=3DRe%3A%20%5BIo%5D%= 202nd%20gen%20Io" style=3D"text-decoration: none; color: #2D50FD;"> Reply to sender </a>=20 </td> <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p= x 5px; color: #FFF; background-color: #F2F2F2; border: 1px solid #EAEAEA; "= > <a href=3D"mailto:[email protected]?subject=3DRe%3A%20= %5BIo%5D%202nd%20gen%20Io" style=3D"text-decoration: none; color: #2D50FD"> Reply to group </a>=20 </td> <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p= x 5px; color: #FFF; background-color: #F2F2F2; border: 1px solid #EAEAEA; "= > <a href=3D"https://groups.yahoo.com/group/iolanguage/post;_ylc= =3DX3oDMTJlNGNzdWVkBF9TAzk3MzU5NzE0BGdycElkAzY2Nzc0NzYEZ3Jwc3BJZAMxNzA1MDA2= NzY0BHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTM5NDQwMjMyOQ--" style=3D"text-decorat= ion: none; color: #2D50FD">Start a New Topic</a> </td> <td style=3D"font-size: 12px; font-family: arial; padding: 7px 5p= x 5px; color: #2D50FD; background-color: #F2F2F2; border: 1px solid #EAEAEA= ; " > <a href=3D"https://groups.yahoo.com/group/iolan= guage/message/13345;_ylc=3DX3oDMTM2aTNjZTYwBF9TAzk3MzU5NzE0BGdycElkAzY2Nzc0= NzYEZ3Jwc3BJZAMxNzA1MDA2NzY0BG1zZ0lkAzEzMzU4BHNlYwNmdHIEc2xrA3Z0cGMEc3RpbWU= DMTM5NDQwMjMyOQR0cGNJZAMxMzM0NQ--" style=3D"text-decoration: none; color: #= 2D50FD;">Messages in this topic</a> (10) </td> </tr> </tbody> </table> =20=20=20=20=20=20=20=20 <!------- Start Nav Bar ------> <!-- |**|begin egp html banner|**| --> <!-- |**|end egp html banner|**| --> =20 <!-- |**|begin egp html banner|**| --> <div id=3D"ygrp-vital" style=3D"background-color: #f2f2f2; font-family: Ver= dana; font-size: 10px; margin-bottom: 10px; padding: 10px;"> <span id=3D"vithd" style=3D"font-weight: bold; color: #333; text-transf= orm: uppercase; "><a href=3D"https://groups.yahoo.com/group/iolanguage;_ylc= =3DX3oDMTJlNDc4ODJuBF9TAzk3MzU5NzE0BGdycElkAzY2Nzc0NzYEZ3Jwc3BJZAMxNzA1MDA2= NzY0BHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTM5NDQwMjMyOQ--" style=3D"text-decorat= ion: none;">Visit Your Group</a></span> <ul style=3D"list-style-type: none; margin: 0; padding: 0; display: in= line;"> </ul> </div> <div id=3D"ft" style=3D"font-family: Arial; font-size: 11px; margin-top: 5p= x; padding: 0 2px 0 0; clear: both;"> <a href=3D"https://groups.yahoo.com/;_ylc=3DX3oDMTJkZWRtMGptBF9TAzk3NDc2N= TkwBGdycElkAzY2Nzc0NzYEZ3Jwc3BJZAMxNzA1MDA2NzY0BHNlYwNmdHIEc2xrA2dmcARzdGlt= ZQMxMzk0NDAyMzI5" style=3D"float: left;"><img src=3D"http://l.yimg.com/ru/s= tatic/images/yg/img/email/new_logo/logo-groups-137x15.png" height=3D"15" wi= dth=3D"137" alt=3D"Yahoo! Groups" style=3D"border: 0;"/></a> <div style=3D"color: #747575; float: right;"> • <a href=3D"https://i= nfo.yahoo.com/privacy/us/yahoo/groups/details.html" style=3D"text-decoratio= n: none;">Privacy</a> • <a href=3D"mailto:iolanguage-unsubscribe@yahoo= groups.com?subject=3DUnsubscribe" style=3D"text-decoration: none;">Unsubscr= ibe</a> • <a href=3D"https://info.yahoo.com/legal/us/yahoo/utos/terms/= " style=3D"text-decoration: none;">Terms of Use</a> </div> </div> <!-- |**|end egp html banner|**| --> </div> <!-- ygrp-msg --> =20 <!-- Sponsor --> <!-- |**|begin egp html banner|**| --> <div id=3D"ygrp-sponsor" style=3D"width:160px; float:right; clear:none; m= argin:0 0 25px 0; background: #fff;"> <!-- Start Recommendations --> <div id=3D"ygrp-reco"> </div> <!-- End Recommendations --> </div> <!-- |**|end egp html banner|**| --> <div style=3D"clear:both; color: #FFF; font-size:1px;">.</div> </div> <img src=3D"http://geo.yahoo.com/serv?s=3D97359714/grpId=3D6677476/grpspI= d=3D1705006764/msgId=3D13358/stime=3D1394402329" width=3D"1" height=3D"1"> = <br> <div style=3D"color: #fff; height: 0;">__,_._,___</div> <!--~-|**|PrettyHtmlEnd|**|-~--> </body> <!--~-|**|PrettyHtmlStart|**|-~--> <head> <style type=3D"text/css"> <!-- #ygrp-mkp { border: 1px solid #d8d8d8; font-family: Arial; margin: 10px 0; padding: 0 10px; } #ygrp-mkp hr { border: 1px solid #d8d8d8; } #ygrp-mkp #hd { color: #628c2a; font-size: 85%; font-weight: 700; line-height: 122%; margin: 10px 0; } #ygrp-mkp #ads { margin-bottom: 10px; } #ygrp-mkp .ad { padding: 0 0; } #ygrp-mkp .ad p { margin: 0; } #ygrp-mkp .ad a { color: #0000ff; text-decoration: none; } #ygrp-sponsor #ygrp-lc { font-family: Arial; } #ygrp-sponsor #ygrp-lc #hd { margin: 10px 0px; font-weight: 700; font-size: 78%; line-height: 122%; } #ygrp-sponsor #ygrp-lc .ad { margin-bottom: 10px; padding: 0 0; } #actions { font-family: Verdana; font-size: 11px; padding: 10px 0; } #activity { background-color: #e0ecee; float: left; font-family: Verdana; font-size: 10px; padding: 10px; } #activity span { font-weight: 700; } #activity span:first-child { text-transform: uppercase; } #activity span a { color: #5085b6; text-decoration: none; } #activity span span { color: #ff7900; } #activity span .underline { text-decoration: underline; } .attach { clear: both; display: table; font-family: Arial; font-size: 12px; padding: 10px 0; width: 400px; } .attach div a { text-decoration: none; } .attach img { border: none; padding-right: 5px; } .attach label { display: block; margin-bottom: 5px; } .attach label a { text-decoration: none; } =20=20 blockquote { margin: 0 0 0 4px; } .bold { font-family: Arial; font-size: 13px; font-weight: 700; } .bold a { text-decoration: none; } dd.last p a { font-family: Verdana; font-weight: 700; } dd.last p span { margin-right: 10px; font-family: Verdana; font-weight: 700; } dd.last p span.yshortcuts { margin-right: 0; } div.attach-table div div a { text-decoration: none; } div.attach-table { width: 400px; } div.file-title a, div.file-title a:active, div.file-title a:hover, div.fi= le-title a:visited { text-decoration: none; } div.photo-title a, div.photo-title a:active, div.photo-title a:hover, div= .photo-title a:visited { text-decoration: none; } div#ygrp-mlmsg #ygrp-msg p a span.yshortcuts { font-family: Verdana; font-size: 10px; font-weight: normal; } .green { color: #628c2a; } .MsoNormal { margin: 0 0 0 0; } o { font-size: 0; } #photos div { float: left; width: 72px; } #photos div div { border: 1px solid #666666; height: 62px; overflow: hidden; width: 62px; } #photos div label { color: #666666; font-size: 10px; overflow: hidden; text-align: center; white-space: nowrap; width: 64px; } #reco-category { font-size: 77%; } #reco-desc { font-size: 77%; } .replbq { margin: 4px; } #ygrp-actbar div a:first-child { /* border-right: 0px solid #000;*/ margin-right: 2px; padding-right: 5px; } #ygrp-mlmsg { font-size: 13px; font-family: Arial, helvetica,clean, sans-serif; *font-size: small; *font: x-small; } #ygrp-mlmsg table { font-size: inherit; font: 100%; } #ygrp-mlmsg select, input, textarea { font: 99% Arial, Helvetica, clean, sans-serif; } #ygrp-mlmsg pre, code { font:115% monospace; *font-size:100%; } #ygrp-mlmsg * { line-height: 1.22em; } #ygrp-mlmsg #logo { padding-bottom: 10px; } #ygrp-msg p a { font-family: Verdana; } #ygrp-msg p#attach-count span { color: #1E66AE; font-weight: 700; } #ygrp-reco #reco-head { color: #ff7900; font-weight: 700; } #ygrp-reco { margin-bottom: 20px; padding: 0px; } #ygrp-sponsor #ov li a { font-size: 130%; text-decoration: none; } #ygrp-sponsor #ov li { font-size: 77%; list-style-type: square; padding: 6px 0; }=20 #ygrp-sponsor #ov ul { margin: 0; padding: 0 0 0 8px; } #ygrp-text { font-family: Georgia; } #ygrp-text p { margin: 0 0 1em 0; } #ygrp-text tt { font-size: 120%; } #ygrp-vital ul li:last-child { border-right: none !important;=20 }=20 --> </style> </head> <!--~-|**|PrettyHtmlEnd|**|-~--> </html> <!-- end group email --> --089e0153852e6d642104f4339784--