$NetBSD: hlfsd.ps,v 1.1.1.2 1997/10/26 00:03:50 christos Exp $ %!PS-Adobe-2.0 %%Creator: dvips 5.47 Copyright 1986-91 Radical Eye Software %%Title: hlfsd.dvi %%Pages: 15 1 %%BoundingBox: 0 0 612 792 %%EndComments %%BeginProcSet: /usr/local/lib/tex/ps/psfig.pro /TeXscale { 65536 div } def /DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap currentlinejoin currentdash currentgray currentmiterlimit ] cvx def /startTexFig { /SavedState save def userdict maxlength dict begin currentpoint transform DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix itransform moveto /ury exch TeXscale def /urx exch TeXscale def /lly exch TeXscale def /llx exch TeXscale def /y exch TeXscale def /x exch TeXscale def currentpoint /cy exch def /cx exch def /sx x urx llx sub div def % scaling for x /sy y ury lly sub div def % scaling for y sx sy scale % scale by (sx,sy) cx sx div llx sub cy sy div ury sub translate /DefFigCTM matrix currentmatrix def /initmatrix { DefFigCTM setmatrix } def /defaultmatrix { DefFigCTM exch copy } def /initgraphics { DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix DefFigCTM setmatrix } def /showpage { initgraphics } def /erasepage { initgraphics } def /copypage {} def } def /clipFig { currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto } def /doclip { llx lly urx ury clipFig } def /endTexFig { end SavedState restore } def %%EndProcSet %%BeginProcSet: tex.pro /TeXDict 200 dict def TeXDict begin /N /def load def /B{bind def}N /S /exch load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{ isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale Resolution VResolution vsize neg mul TR matrix currentmatrix dup dup 4 get round 4 exch put dup dup 5 get round 5 exch put setmatrix}N /@letter{/vsize 10 N}B /@landscape{/isls true N /vsize -1 N}B /@a4{/vsize 10.6929133858 N}B /@a3{ /vsize 15.5531 N}B /@ledger{/vsize 16 N}B /@legal{/vsize 13 N}B /@manualfeed{ statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail} B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128 ch-data dup length 3 sub get sub}B /ch-yoff{ ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]{ch-image} imagemask restore}B /D{/cc X dup type /stringtype ne{]}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0 moveto}N /eop{clear SI restore showpage userdict /eop-hook known{eop-hook}if}N /@start{userdict /start-hook known{start-hook}if /VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for}N /p /show load N /RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V statusdict begin /product where{pop product dup length 7 ge{0 7 getinterval(Display)eq}{pop false}ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /a{ moveto}B /delta 0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{ S p tail}B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w }B /q{p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p a}B /bos{/SS save N}B /eos{clear SS restore}B end %%EndProcSet %%BeginProcSet: special.pro TeXDict begin /SDict 200 dict N SDict begin /@SpecialDefaults{/hs 612 N /vs 792 N /ho 0 N /vo 0 N /hsc 1 N /vsc 1 N /ang 0 N /CLIP false N /BBcalc false N /p 3 def}B /@scaleunit 100 N /@hscale{@scaleunit div /hsc X}B /@vscale{ @scaleunit div /vsc X}B /@hsize{/hs X /CLIP true N}B /@vsize{/vs X /CLIP true N}B /@hoffset{/ho X}B /@voffset{/vo X}B /@angle{/ang X}B /@rwi{10 div /rwi X} B /@llx{/llx X}B /@lly{/lly X}B /@urx{/urx X}B /@ury{/ury X /BBcalc true N}B /magscale true def end /@MacSetUp{userdict /md known{userdict /md get type /dicttype eq{md begin /letter{}N /note{}N /legal{}N /od{txpose 1 0 mtx defaultmatrix dtransform S atan/pa X newpath clippath mark{transform{ itransform moveto}}{transform{itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}{{closepath}}pathforall newpath counttomark array astore /gc xdf pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{ PaintBlack}if}N /txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 -1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 S TR}if} ifelse scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S TR}if}N /cp{pop pop showpage pm restore}N end}if} if}N /normalscale{Resolution 72 div VResolution 72 div neg scale magscale{ DVImag dup scale}if}N /psfts{S 65536 div N}N /startTexFig{/psf$SavedState save N userdict maxlength dict begin /magscale false def normalscale currentpoint TR /psf$ury psfts /psf$urx psfts /psf$lly psfts /psf$llx psfts /psf$y psfts /psf$x psfts currentpoint /psf$cy X /psf$cx X /psf$sx psf$x psf$urx psf$llx sub div N /psf$sy psf$y psf$ury psf$lly sub div N psf$sx psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub TR /showpage{}N /erasepage{}N /copypage{}N /p 3 def @MacSetUp}N /doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto closepath clip newpath moveto}N /endTexFig{end psf$SavedState restore}N /@beginspecial{SDict begin /SpecialSave save N gsave normalscale currentpoint TR @SpecialDefaults}N /@setspecial{CLIP{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate BBcalc{rwi urx llx sub div dup scale llx neg lly neg TR}if /showpage{}N /erasepage{}N /copypage{}N newpath}N /@endspecial{grestore clear SpecialSave restore end}N /@defspecial{SDict begin}N /@fedspecial{end}B /li{lineto}B /rl{rlineto}B /rc{rcurveto}B /np{/SaveX currentpoint /SaveY X N 1 setlinecap newpath}N /st{stroke SaveX SaveY moveto}N /fil{fill SaveX SaveY moveto}N /ellipse{/endangle X /startangle X /yrad X /xrad X /savematrix matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc savematrix setmatrix}N end %%EndProcSet TeXDict begin 1000 300 300 @start /Fa 2 117 df<3E0006000C000C000C000C00180019 E01E30183038303030303030306060606460C460C4C0C8C0700E147E9313>104 D<02000600060006000C00FF800C000C001800180018001800300031003100320032001C000912 7F910D>116 D E /Fb 5 116 df<001FC0001FC0001FC00001C00001C00001C00001C00001C000 01C001F1C007FDC00FFFC01E0FC03C07C07803C07001C0E001C0E001C0E001C0E001C0E001C0E0 01C0E001C07003C07003C03807C03E0FC01FFFFC07FDFC01F1FC161E7E9D1A>100 D<0007E0001FF0003FF800787800F03000E00000E00000E00000E0007FFFF0FFFFF0FFFFF000E0 0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0 0000E0003FFF807FFFC03FFF80151E7F9D1A>102 D104 D108 D<07FB801FFF807FFF80780780E003 80E00380E003807800007FC0003FFC0007FE00003F800007806001C0E001C0E001C0F003C0FC07 80FFFF00EFFE00E3F80012157C941A>115 D E /Fc 13 118 df<000180000180000380000380 000780000780000B800013800013800023C00021C00041C000C1C00081C00101C001FFC00201C0 0201C00401C00801C00801C01801C0FE0FF815177E961A>65 D<03FFFE00E00E00E00400E00400 E00401C00401C00401C10001C10003820003820003FE000386000704000704080704080700100E 00100E00300E00200E00601C01C0FFFFC017177E9618>69 D<03F0003F8000F000780000B80078 0000B800B80000B80138000138017000013802700001380270000138047000023808E000021C08 E000021C10E000021C10E000041C21C000041C41C000041C41C000041C81C000081D038000081D 038000080E038000080E038000180C070000FE083FE00021177E9620>77 D<03F00FE000F0030000F0020000B8020000B80200011C0400011C0400011C0400010E0400020E 0800020E080002070800020708000403900004039000040390000401D0000801E0000800E00008 00E0000800E00018004000FE0040001B177E961A>I<03FFE000E03800E01C00E01C00E01C01C0 1C01C01C01C01C01C0380380700381C003FF000381800700C00700E00700E00700E00E01C00E01 C00E01C20E01C21C00C4FF807817177E961A>82 D<007C400182800301800601800601800C0100 0C01000C00000E00000FC00007F80003FC00007C00000E00000E00000600200600400C00400C00 600800601000D8600087C00012177D9614>I<7FC1FC1C00601C00401C00401C00403800803800 80380080380080700100700100700100700100E00200E00200E00200E00200E00400E00800E008 006030003040001F8000161779961A>85 D<007C00180018001800180030003000300030076008 E018E0306030C060C060C060C0C180C188C1884388659038E00E177C9612>100 D<030706000000000000384C4C4C8C18181830326262243808177D960B>105 D<078018C0304060606060C060C060C06080C080C08180C10046003C000B0E7B8D12>111 D<38F04518463846308C000C000C000C001800180018001800300030000D0E7D8D0F>114 D<07800C4018E018E038001E001F8007C000C060C0E0C0C180C3003E000B0E7D8D0F>I<1C0826 184618461886300C300C300C30186018621862186208E407380F0E7D8D13>117 D E /Fd 25 127 df<60F0F0600404798312>46 D<0018003800380070007000E000E001C001C0 01C003800380070007000E000E001C001C001C003800380070007000E000E000C0000D1A7E9612 >I<07C00FE01C703838701C701CE00EE00EE00EE00EE00EE00EE00EE01E701C701C38381C700F E007C00F147F9312>I61 D<3F807FC070E0207000700FF03FF07870E070E070E07070F03FFE1F3E0F0E7E8D12>97 DI<07F01FF8383870106000E000E000E000E0006000703838381FF007E00D0E 7E8D12>I<00F800F8003800380038003807B81FF8387870386038E038E038E038E03860387078 38781FFE0FBE0F147F9312>I<07801FE0387070706038E038FFF8FFF8E0006000703838381FF0 07C00D0E7E8D12>I<007E00FF01C70382038003807FFEFFFE0380038003800380038003800380 0380038003803FF83FF81014809312>I104 D<06000F000F00060000000000 0000FF00FF000700070007000700070007000700070007000700FFF0FFF00C157D9412>I107 DIII<0F803FE038E07070E038E038E038E038E0 38F078707038E03FE00F800D0E7E8D12>II114 D<1FF03FF06070C070E0007F003F E00FF000786018E018F030FFE0DFC00D0E7E8D12>I<06000E000E000E007FF8FFF80E000E000E 000E000E000E000E000E380E380E3807F003C00D127F9112>III<3FFC7FFC7038707000E001C0038007000E001C1C38 1C701CFFFCFFFC0E0E7F8D12>122 D<18403CE0E78043000B047D9312>126 D E /Fe 64 125 df<00FCF807839C0E079C1C07081C07001C07001C07001C07001C0700FFFFE0 1C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF1FE0 1617809615>11 D<00FC000782000E07001C07001C02001C00001C00001C00001C0000FFFF001C 07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF1FE013 17809614>I<00FC7E000703C1000E0783801C0703801C0701001C0700001C0700001C0700001C 070000FFFFFF801C0703801C0703801C0703801C0703801C0703801C0703801C0703801C070380 1C0703801C0703801C0703801C070380FF1FCFF01C1780961D>14 D<60F0F07010102020404004 0A7D960A>39 D<0102040C1818303070606060E0E0E0E0E0E0E0E0E0E060606070303018180C04 020108227D980E>I<8040203018180C0C0E060606070707070707070707070606060E0C0C1818 3020408008227E980E>I<60F0F070101020204040040A7D830A>44 DI< 60F0F06004047D830A>I<0008001800300030003000600060006000C000C000C0018001800180 030003000600060006000C000C000C00180018001800300030003000600060006000C000C0000D 217E9812>I<03000700FF00070007000700070007000700070007000700070007000700070007 000700070007007FF00C157E9412>49 D<0F8030E040708030C038E03840380038007000700060 00C00180030006000C08080810183FF07FF0FFF00D157E9412>I<0FE030306018701C701C001C 00180038006007E000300018000C000E000EE00EE00EC00C401830300FE00F157F9412>I<0030 0030007000F001F001700270047008701870107020704070C070FFFE0070007000700070007003 FE0F157F9412>I<01F00608080C181C301C70006000E000E3E0EC30F018F00CE00EE00EE00E60 0E600E300C3018183007C00F157F9412>54 D<40007FFE7FFC7FF8C00880108020004000800080 0100010003000200060006000E000E000E000E000E0004000F167E9512>I<07E018302018600C 600C700C78183E101F600FC00FF018F8607C601EC00EC006C006C004600C38300FE00F157F9412 >I<07C0183030186018E00CE00CE00EE00EE00E601E301E186E0F8E000E000C001C7018701860 3020C01F800F157F9412>I<60F0F06000000000000060F0F07010102020404004147D8D0A>59 D<001000003800003800003800005C00005C00005C00008E00008E00008E000107000107000307 8002038002038007FFC00401C00401C00800E00800E01800E03800F0FE03FE17177F961A>65 DI<00 FC100383300E00B01C0070380030300030700010600010E00010E00000E00000E00000E00000E0 0000E000106000107000103000203800201C00400E008003830000FC0014177E9619>II70 D72 DI76 DII<00FC00030300 0E01C01C00E0380070300030700038600018E0001CE0001CE0001CE0001CE0001CE0001CE0001C 7000387000383000303800701C00E00E01C003030000FC0016177E961B>II82 D<0FC4302C601C400CC004C0 04C004E00070007F003FE00FF801FC001C000E0006800680068006C004E008D81087E00F177E96 14>I<7FFFF8603818403808403808803804803804803804003800003800003800003800003800 00380000380000380000380000380000380000380000380000380000380007FFC016177F9619> III88 D91 D93 D<1FC0386038301038003803F81E3830387038E039E039E07970FF1F1E100E7F8D12> 97 D I<07F01838303870106000E000E000E000E000600070083008183007C00D0E7F8D10>I<007E00 000E00000E00000E00000E00000E00000E00000E00000E0007CE001C3E00300E00700E00600E00 E00E00E00E00E00E00E00E00600E00700E00301E00182E0007CFC012177F9614>I<0FC0186030 307038E018FFF8E000E000E000600070083010183007C00D0E7F8D10>I<03E006700E701C201C 001C001C001C001C00FF801C001C001C001C001C001C001C001C001C001C001C001C00FF800C17 80960B>I<0F9E18E33060707070707070306018C02F80200060003FE03FF83FFC600EC006C006 C006600C38380FE010157F8D12>II<183C3C1800000000007C1C1C1C1C1C1C1C1C1C1C1C1CFF081780 960A>I107 DIII<07C018303018600C600CE00EE00EE00EE00EE00E701C30181830 07C00F0E7F8D12>II<07C2 001C2600381E00700E00600E00E00E00E00E00E00E00E00E00600E00700E00301E001C2E0007CE 00000E00000E00000E00000E00000E00007FC012147F8D13>II<1F4060C0C040C040E000FF007F801FC001 E080608060C060E0C09F000B0E7F8D0E>I<080008000800180018003800FF8038003800380038 0038003800380038403840384038401C800F000A147F930E>IIIIII124 D E /Ff 10 58 df<1F00318060C04040C060C060 C060C060C060C060C060C060404060C031801F000B107F8F0F>48 D<0C003C00CC000C000C000C 000C000C000C000C000C000C000C000C000C00FF8009107E8F0F>I<1F00618040C08060C06000 60006000C00180030006000C00102020207FC0FFC00B107F8F0F>I<1F00218060C060C000C000 8001800F00008000400060C060C060804060801F000B107F8F0F>I<0300030007000F000B0013 00330023004300C300FFE003000300030003001FE00B107F8F0F>I<20803F002C002000200020 002F0030802040006000600060C06080C061801F000B107F8F0F>I<0780184030C060C06000C0 00CF00F080E040C060C060C060406060C030801F000B107F8F0F>I<40007FE07FC08080808001 000200040004000C0008000800180018001800180018000B117E900F>I<1F00318060C060C060 C071803F000F00338061C0C060C060C060404060801F000B107F8F0F>I<1F00318060C0C040C0 60C060C06040E021E01E600060004060C0608043003E000B107F8F0F>I E /Fg 10 58 df<0F0030C0606060604020C030C030C030C030C030C030C030C030C030402060 60606030C00F000C137E9211>48 D<0C001C00EC000C000C000C000C000C000C000C000C000C00 0C000C000C000C000C000C00FFC00A137D9211>I<1F0060C06060F070F0306030007000700060 00C001C00180020004000810101020207FE0FFE00C137E9211>I<0FC030707038703870380038 003000E00FC0007000380018001C601CF01CF018E03860701FC00E137F9211>I<006000E000E0 0160026006600C600860106020606060C060FFFC0060006000600060006003FC0E137F9211>I< 60607FC07F8044004000400040004F0070C040E0006000700070E070E070E06040E021C01F000C 137E9211>I<07C00C201070207060006000C000CF00D0C0E060C020C030C030C0304030602020 6010C00F000C137E9211>I<40007FFC7FF8401080108020004000800100010003000200060006 000E000E000E000E000E0004000E147E9311>I<0FC0107020186018601870183C303F600F800F E031F06078C01CC00CC00CC00C601830300FC00E137F9211>I<0F00308060404060C020C030C0 30C0304030607030B00F30003000200060E040E08041003E000C137E9211>I E /Fh 59 122 df<183C3C3C0404080810204080060C779C0D>39 D<1838783808081010204040 80050C7D830D>44 DI<3078F06005047C830D>I<003C0000C60001 83000303000603000603800E03800C03801C03801C0300380700380700380700380700700E0070 0E00700E00700E00E01C00E01C00E01C00E03800E03800E03000C06000E0600060C0007180001E 0000111D7B9B15>48 D<00020006000C001C007C039C0038003800380038007000700070007000 E000E000E000E001C001C001C001C003800380038003800780FFF00F1C7C9B15>I<003C0000C3 000101800201800201C00441C00441C00841C00841C00841C01083801083801107000E0600000C 0000180000300000C0000100000600000800001001001002002002004006007E0C00C7F80083F8 0080E000121D7C9B15>I<0001800001C000038000038000038000030000070000070000060000 0E00000C00001C0000180000180000300000300000600000400000C600018E00010E00020E0006 1C000C1C00181C003F1C0040F800803F0000380000380000700000700000700000700000E00000 600012247E9B15>52 D<00C06000FFC001FF8001FE000100000100000200000200000200000200 00047800058C00060600040600080600000700000700000600000E00000E00700E00700C00E01C 0080180080380040300040600021C0001F0000131D7C9B15>I<09C04017E0801FE0803C610030 2700601A00400600400400800C0080080000180000100000300000600000600000600000C00000 C00001C0000180000380000380000300000700000700000700000E00000E00000C0000121D799B 15>55 D<001E000061000081800180800300C00300C006018006018006018007030007860003CC 0003F00001F000037800063C00081E00180E00300E00600600600600600600C00C00C00C00C018 0060100060200030C0000F0000121D7C9B15>I<003C0000C6000183000303000603000E03000C 03801C03801C03001C0300380700380700380700380F00380E00181E00181E000C6C00079C0000 1C00001800003800003000006000E0C000E0C0008180008600007C0000111D7B9B15>I<060F0F 06000000000000000000003078F06008127C910D>I<0000180000001800000038000000380000 007800000078000000B8000001B800000138000002380000023C0000041C0000041C0000081C00 00181C0000101C0000201C0000201C00007FFC0000401C0000801C0001801C0001001C0002001C 0002001C0004000E000C000E001C001E00FF00FFC01A1D7E9C1F>65 D<01FFFE00003C07800038 03C0003801C0003801C0003801C0007001C0007003C0007003C00070078000E0070000E00E0000 E03C0000FFF80001C01C0001C00E0001C00F0001C00F0003800F0003800F0003800F0003800F00 07001E0007001C0007003C00070078000E01E000FFFF80001A1C7D9B1D>I<0003F020001E0C60 003002E000E003C001C001C0038001C0070000C00E0000801E0000801C0000803C0000803C0000 00780000007800000078000000F0000000F0000000F0000000F0000000F0000400F0000400F000 0400F0000800700008007000100038002000180040000C0180000706000001F800001B1E7A9C1E >I<01FFFE00003C0780003801C0003801C0003800E0003800E0007000F0007000700070007000 7000F000E000F000E000F000E000F000E000F001C001E001C001E001C001E001C001C0038003C0 03800380038007800380070007000E0007001C0007003800070070000E01C000FFFF00001C1C7D 9B1F>I<01FFFFE0003C00E0003800600038004000380040003800400070004000700040007020 400070200000E0400000E0400000E0C00000FFC00001C0800001C0800001C0800001C080000381 0100038001000380020003800200070004000700040007000C00070018000E007800FFFFF0001B 1C7D9B1C>I<01FFFFC0003C01C0003800C0003800800038008000380080007000800070008000 7020800070200000E0400000E0400000E0C00000FFC00001C0800001C0800001C0800001C08000 03810000038000000380000003800000070000000700000007000000070000000F000000FFF000 001A1C7D9B1B>I<0003F020001E0C60003002E000E003C001C001C0038001C0070000C00E0000 801E0000801C0000803C0000803C000000780000007800000078000000F0000000F0000000F001 FFC0F0001E00F0001C00F0001C00F0001C00F0001C00700038007000380038003800180078000C 0090000707100001F800001B1E7A9C20>I<01FFCFFE003C01E0003801C0003801C0003801C000 3801C00070038000700380007003800070038000E0070000E0070000E0070000FFFF0001C00E00 01C00E0001C00E0001C00E0003801C0003801C0003801C0003801C000700380007003800070038 00070038000F007800FFE7FF001F1C7D9B1F>I<01FFC0003C0000380000380000380000380000 700000700000700000700000E00000E00000E00000E00001C00001C00001C00001C00003800003 80000380000380000700000700000700000700000F0000FFE000121C7E9B10>I<007FF0000780 000700000700000700000700000E00000E00000E00000E00001C00001C00001C00001C00003800 00380000380000380000700000700000700000700060E000E0E000C0C00081C000838000470000 3C0000141D7B9B16>I<01FFC0FF003C003C003800300038004000380080003801000070020000 700400007010000070200000E0400000E0C00000E1C00000E5C00001C8E00001D0E00001E0E000 01C07000038070000380700003803800038038000700380007001C0007001C0007001C000F001E 00FFE0FF80201C7D9B20>I<01FFE0003C00003800003800003800003800007000007000007000 00700000E00000E00000E00000E00001C00001C00001C00001C000038008038008038008038010 0700100700300700600700E00E03C0FFFFC0151C7D9B1A>I<01FE0007F8003E000780002E000F 00002E001700002E001700002E002700004E002E00004E004E00004E004E00004E008E00008E01 1C00008E011C00008E021C00008E021C0001070438000107043800010708380001071038000207 107000020720700002072070000207407000040740E000040780E000040700E0000C0700E0001C 0601E000FF861FFC00251C7D9B25>I<01FC03FE001C0070003C0060002E0040002E0040002E00 40004700800047008000470080004380800083810000838100008181000081C1000101C2000101 C2000100E2000100E2000200E4000200740002007400020074000400380004003800040038000C 0018001C001000FF8010001F1C7D9B1F>I<0007F000001C1C0000700E0000E0070001C0038003 800380070003800E0003C01E0003C01C0003C03C0003C03C0003C0780003C0780003C0780003C0 F0000780F0000780F0000780F0000F00F0000F00F0000E00F0001E00F0003C0070003800700070 007800E0003801C0001C0380000E0E000003F800001A1E7A9C20>I<01FFFC00003C0700003803 80003801C0003801C0003801C0007003C0007003C0007003C00070038000E0078000E0070000E0 0E0000E0380001FFE00001C0000001C0000001C000000380000003800000038000000380000007 0000000700000007000000070000000F000000FFE000001A1C7D9B1C>I<01FFF800003C0E0000 38070000380380003803800038038000700780007007800070078000700F0000E00E0000E01C00 00E0700000FFC00001C0C00001C0600001C0700001C07000038070000380700003807000038070 000700F0000700F0400700F0400700F0800F007880FFE0790000001E001A1D7D9B1E>82 D<000F8400304C00403C00801801001803001803001806001006001006000007000007000003E0 0003FC0001FF00007F800007C00001C00001C00000C00000C02000C02000C06001806001806003 00600200F00400CC180083E000161E7D9C17>I<1FFFFFC01C0701C0300E00C0200E0080600E00 80400E0080401C0080801C0080801C0080001C0000003800000038000000380000003800000070 000000700000007000000070000000E0000000E0000000E0000000E0000001C0000001C0000001 C0000001C0000003C000007FFE00001A1C799B1E>I<7FF0FF800F001C000E0018000E0010000E 0010000E0010001C0020001C0020001C0020001C00200038004000380040003800400038004000 70008000700080007000800070008000E0010000E0010000E0010000E0020000E0020000E00400 00E00400006008000030300000104000000F800000191D779B1F>I87 D<01FF81FE001E00F0001C0060001E 0080000E0180000E0100000F02000007040000070800000790000003A0000003C0000001C00000 01C0000001E0000002E0000004E0000008F0000010700000207000006038000040380000803C00 01001C0002001C0006001E001E001E00FF80FFC01F1C7E9B1F>I<00FFFF8000F0070001C00E00 01801E0001001C0001003800020070000200E0000201C0000001C0000003800000070000000E00 00001C0000001C0000003800000070000000E0080001C0100001C0100003801000070020000E00 20001C0060003C00C0003801C00070078000FFFF8000191C7D9B19>90 D<03CC063C0C3C181C38 38303870387038E070E070E070E070E0E2C0E2C0E261E462643C380F127B9115>97 D<3F00070007000E000E000E000E001C001C001C001C0039C03E60383038307038703870387038 E070E070E070E060E0E0C0C0C1C0618063003C000D1D7B9C13>I<01F007080C08181C38383000 70007000E000E000E000E000E000E008E010602030C01F000E127B9113>I<001F800003800003 80000700000700000700000700000E00000E00000E00000E0003DC00063C000C3C00181C003838 00303800703800703800E07000E07000E07000E07000E0E200C0E200C0E20061E4006264003C38 00111D7B9C15>I<01E007100C1018083810701070607F80E000E000E000E000E000E008601060 2030C01F000D127B9113>I<0003C0000670000C70001C60001C00001C00003800003800003800 00380000380003FF8000700000700000700000700000700000E00000E00000E00000E00000E000 01C00001C00001C00001C00001C000038000038000038000030000030000070000C60000E60000 CC00007800001425819C0D>I<00F3018F030F06070E0E0C0E1C0E1C0E381C381C381C381C3838 30383038187818F00F700070007000E000E0C0C0E1C0C3007E00101A7D9113>I<0FC00001C000 01C0000380000380000380000380000700000700000700000700000E78000E8C000F0E000E0E00 1C0E001C0E001C0E001C0E00381C00381C00381C00383800703880703880707080707100E03200 601C00111D7D9C15>I<01800380010000000000000000000000000000001C002600470047008E 008E000E001C001C001C0038003800710071007100720072003C00091C7C9B0D>I<0FC00001C0 0001C0000380000380000380000380000700000700000700000700000E0F000E11000E23800E43 801C83001C80001D00001E00003F800039C00038E00038E00070E20070E20070E20070E400E064 00603800111D7D9C13>107 D<1F800380038007000700070007000E000E000E000E001C001C00 1C001C0038003800380038007000700070007000E400E400E400E40068003800091D7C9C0B>I< 3C1E0780266318C04683A0E04703C0E08E0380E08E0380E00E0380E00E0380E01C0701C01C0701 C01C0701C01C070380380E0388380E0388380E0708380E0710701C0320300C01C01D127C9122> I<3C3C002646004687004707008E07008E07000E07000E07001C0E001C0E001C0E001C1C00381C 40381C40383840383880701900300E0012127C9117>I<01E007180C0C180C380C300E700E700E E01CE01CE01CE018E038E030E06060C031801E000F127B9115>I<07870004D98008E0C008E0C0 11C0E011C0E001C0E001C0E00381C00381C00381C00381800703800703000707000706000E8C00 0E70000E00000E00001C00001C00001C00001C00003C0000FF8000131A7F9115>I<3C3C26C246 8747078E068E000E000E001C001C001C001C0038003800380038007000300010127C9112>114 D<01F006080C080C1C18181C001F001FC00FF007F0007800386030E030C030806060C01F000E12 7D9111>I<00C001C001C001C00380038003800380FFE00700070007000E000E000E000E001C00 1C001C001C00384038403840388019000E000B1A7D990E>I<1E0300270700470700470700870E 00870E000E0E000E0E001C1C001C1C001C1C001C1C003838803838801838801839001C5900078E 0011127C9116>I<1E06270E470E4706870287020E020E021C041C041C041C0818083808181018 200C4007800F127C9113>I<1E01832703874703874703838707018707010E07010E07011C0E02 1C0E021C0E021C0E04180C04181C04181C081C1C100C263007C3C018127C911C>I<070E001991 0010E38020E38041C30041C00001C00001C000038000038000038000038000070200670200E704 00CB04008B080070F00011127D9113>I<1E03270747074707870E870E0E0E0E0E1C1C1C1C1C1C 1C1C38383838183818381C7007F00070007000E0E0C0E1C0818047003C00101A7C9114>I E /Fi 5 104 df<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFFFF7FFE7FFE3FFC1FF80FF003 C010107E9115>15 D<0000030000000003000000000180000000018000000000C0000000006000 7FFFFFF000FFFFFFF8000000000E00000000070000000001E0000000007800000001E000000003 8000000006000000001C00FFFFFFF8007FFFFFF0000000006000000000C0000000018000000001 80000000030000000003000025187E952A>41 D<0000600000600000C00000C000018000018000 0180000300000300000600000600000C00000C0000180000180000180000300000300000600000 600000C00000C0000180000180000300000300000300000600000600000C00000C000018000018 0000300000300000300000600000600000C0000040000013287A9D00>54 D<003C00E001C00180038003800380038003800380038003800380038003800380038003000700 1C00F0001C00070003000380038003800380038003800380038003800380038003800380018001 C000E0003C0E297D9E15>102 DI E /Fj 57 123 df<3803807C07C0FE0FE0FF0FF0FF0FF07F07F03B03B00300300300300700700600600600600C 00C01C01C018018070070020020014117EA21D>34 D<387CFEFFFF7F3B03030706060C1C187020 08117C8610>44 DI<387CFEFEFE7C3807077C8610>I<00FE00 07FFC00F83E01F01F03E00F83E00F87C007C7C007C7C007CFC007CFC007EFC007EFC007EFC007E FC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C7C007C3E00F8 3E00F81F01F00F83E007FFC000FE0017207E9F1C>48 D<00180000780001F800FFF800FFF80001 F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001 F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8007FFFE07F FFE013207C9F1C>I<03FC000FFF003C1FC07007E07C07F0FE03F0FE03F8FE03F8FE01F87C01F8 3803F80003F80003F00003F00007E00007C0000F80001F00003E0000380000700000E01801C018 0380180700180E00380FFFF01FFFF03FFFF07FFFF0FFFFF0FFFFF015207D9F1C>I<00FE0007FF C00F07E01E03F03F03F03F81F83F81F83F81F81F03F81F03F00003F00003E00007C0001F8001FE 0001FF000007C00001F00001F80000FC0000FC3C00FE7E00FEFF00FEFF00FEFF00FEFF00FC7E01 FC7801F81E07F00FFFC001FE0017207E9F1C>I<0000E00001E00003E00003E00007E0000FE000 1FE0001FE00037E00077E000E7E001C7E00187E00307E00707E00E07E00C07E01807E03807E070 07E0E007E0FFFFFEFFFFFE0007E00007E00007E00007E00007E00007E00007E000FFFE00FFFE17 207E9F1C>I<1000201E01E01FFFC01FFF801FFF001FFE001FF8001BC000180000180000180000 18000019FC001FFF001E0FC01807E01803E00003F00003F00003F80003F83803F87C03F8FE03F8 FE03F8FC03F0FC03F07007E03007C01C1F800FFF0003F80015207D9F1C>I<001F8000FFE003F0 7007C0F00F01F81F01F83E01F83E01F87E00F07C00007C0000FC0800FC7FC0FCFFE0FD80F0FF00 F8FE007CFE007CFC007EFC007EFC007EFC007E7C007E7C007E7C007E3C007C3E007C1E00F80F00 F00783E003FFC000FF0017207E9F1C>I<6000007800007FFFFE7FFFFE7FFFFC7FFFF87FFFF87F FFF0E00060E000C0C00180C00300C00300000600000C00001C0000180000380000780000780000 F00000F00000F00001F00001F00001F00003F00003F00003F00003F00003F00003F00003F00001 E00017227DA11C>I<00FE0003FFC00703E00E00F01C00F01C00783C00783E00783F00783F8078 3FE0F01FF9E01FFFC00FFF8007FFC003FFE007FFF01E7FF83C1FFC7807FC7801FEF000FEF0003E F0001EF0001EF0001CF8001C7800383C00381F01F00FFFC001FF0017207E9F1C>I<01FE0007FF 800F83E01E01F03E00F07C00F87C0078FC007CFC007CFC007CFC007EFC007EFC007EFC007E7C00 FE7C00FE3E01FE1E037E0FFE7E07FC7E00207E00007C00007C1E007C3F00F83F00F83F00F03F01 E01E03C01C0F800FFE0003F80017207E9F1C>I<07FC001FFF00380F807007C0F807E0FC07E0FC 07E0FC07E07807E0000FC0001F80001F00003C0000780000700000E00000E00000C00000C00000 C00000C00000C00000C00000000000000000000000000000000001C00003E00007F00007F00007 F00003E00001C00013237DA21A>63 D<000070000000007000000000F800000000F800000000F8 00000001FC00000001FC00000003FE00000003FE00000003FE00000006FF000000067F0000000E 7F8000000C3F8000000C3F800000183FC00000181FC00000381FE00000300FE00000300FE00000 600FF000006007F00000E007F80000FFFFF80000FFFFF800018001FC00018001FC00038001FE00 030000FE00030000FE000600007F000600007F00FFE00FFFF8FFE00FFFF825227EA12A>65 DI<0003FE0080001FFF818000FF01E38001F8 003F8003E0001F8007C0000F800F800007801F800007803F000003803F000003807F000001807E 000001807E00000180FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000 FE00000000FE000000007E000000007E000001807F000001803F000001803F000003801F800003 000F8000030007C000060003F0000C0001F800380000FF00F000001FFFC0000003FE000021227D A128>IIII72 DI76 DI<0007FC0000003FFF800000FC07E00003F001F80007E0 00FC000FC0007E001F80003F001F80003F003F00001F803F00001F807F00001FC07E00000FC07E 00000FC0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0FE00000FE0 FE00000FE0FE00000FE07E00000FC07F00001FC07F00001FC03F00001F803F80003F801F80003F 000FC0007E0007E000FC0003F001F80000FC07E000003FFF80000007FC000023227DA12A>79 DI82 D<01FC0407FF8C1F03FC3C007C7C003C78001C78001CF8000CF8000CFC00 0CFC0000FF0000FFE0007FFF007FFFC03FFFF01FFFF80FFFFC03FFFE003FFE0003FF00007F0000 3F00003FC0001FC0001FC0001FE0001EE0001EF0003CFC003CFF00F8C7FFE080FF8018227DA11F >I<7FFFFFFF807FFFFFFF807E03F80F807803F807807003F803806003F80180E003F801C0E003 F801C0C003F800C0C003F800C0C003F800C0C003F800C00003F800000003F800000003F8000000 03F800000003F800000003F800000003F800000003F800000003F800000003F800000003F80000 0003F800000003F800000003F800000003F800000003F800000003F800000003F800000003F800 000003F8000003FFFFF80003FFFFF80022227EA127>II87 D<0400400E00E0180180380380300300600600600600E0 0E00C00C00C00C00DC0DC0FE0FE0FF0FF0FF0FF07F07F03E03E01C01C014117AA21D>92 D<07FC001FFF803F07C03F03E03F01E03F01F01E01F00001F00001F0003FF003FDF01FC1F03F01 F07E01F0FC01F0FC01F0FC01F0FC01F07E02F07E0CF81FF87F07E03F18167E951B>97 DI<00FF8007FFE00F83 F01F03F03E03F07E03F07C01E07C0000FC0000FC0000FC0000FC0000FC0000FC00007C00007E00 007E00003E00301F00600FC0E007FF8000FE0014167E9519>I<0001FE000001FE0000003E0000 003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E00 01FC3E0007FFBE000F81FE001F007E003E003E007E003E007C003E00FC003E00FC003E00FC003E 00FC003E00FC003E00FC003E00FC003E00FC003E007C003E007C003E003E007E001E00FE000F83 BE0007FF3FC001FC3FC01A237EA21F>I<00FE0007FF800F87C01E01E03E01F07C00F07C00F8FC 00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C00007E00003E00181F00300FC07003 FFC000FF0015167E951A>I<003F8000FFC001E3E003C7E007C7E00F87E00F83C00F80000F8000 0F80000F80000F80000F8000FFFC00FFFC000F80000F80000F80000F80000F80000F80000F8000 0F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80007FF8007FF800 13237FA211>I<03FC1E0FFF7F1F0F8F3E07CF3C03C07C03E07C03E07C03E07C03E07C03E03C03 C03E07C01F0F801FFF0013FC003000003000003800003FFF801FFFF00FFFF81FFFFC3800FC7000 3EF0001EF0001EF0001EF0001E78003C7C007C3F01F80FFFE001FF0018217E951C>II<1C003E007F007F007F003E001C 000000000000000000000000000000FF00FF001F001F001F001F001F001F001F001F001F001F00 1F001F001F001F001F001F001F001F00FFE0FFE00B247EA310>I107 DIII<00FE0007FFC00F83E01E00F03E00F87C007C7C00 7C7C007CFC007EFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C3E00F81F01F00F83 E007FFC000FE0017167E951C>II114 D<0FF3003FFF00781F0060 0700E00300E00300F00300FC00007FE0007FF8003FFE000FFF0001FF00000F80C00780C00380E0 0380E00380F00700FC0E00EFFC00C7F00011167E9516>I<018000018000018000018000038000 0380000780000780000F80003F8000FFFF00FFFF000F80000F80000F80000F80000F80000F8000 0F80000F80000F80000F80000F80000F81800F81800F81800F81800F81800F830007C30003FE00 00F80011207F9F16>IIIII I<7FFFF07FFFF07C03E07007C0600FC0E01F80C01F00C03E00C07E0000FC0000F80001F00003F0 3007E03007C0300F80701F80703F00603E00E07C03E0FFFFE0FFFFE014167E9519>I E /Fk 44 127 df34 D<00C00001C00001C00001C00007F0001FFC003FFE007DCF0071C780E1C380E1C780E1C780F1C3 0079C0003FC0001FF00007FC0001FE0001CF0001C70061C380F1C380F1C380E1C38071C70079DF 003FFE001FF80007E00001C00001C00000C00011207E9C16>36 D<00E001E0038007000E001C00 1C0038003800700070007000E000E000E000E000E000E000E000E000E000700070007000380038 001C001C000E000700038001E000E00B217A9C16>40 DI45 D<70F8F8F8700505788416>I<000180000380000380000700000700000E00000E00001C00001C 0000380000380000700000700000E00000E00001C00001C0000380000380000700000700000E00 000E00001C00001C0000380000380000700000700000E00000E00000C0000011207E9C16>I<03 E0000FF8001FFC001E3C00380E00780F00700700700700E00380E00380E00380E00380E00380E0 0380E00380E00380F00780700700700700780F003C1E001E3C001FFC000FF80003E00011197E98 16>I<70F8F8F870000000000000000070F8F8F8700512789116>58 D<7FFF00FFFF80FFFF8000 0000000000000000000000000000FFFF80FFFF807FFF00110B7E9116>61 D<00F80003FC0007FE000F07001C3F80387F8078FF8071C3C071C3C0E381C0E381C0E381C0E381 C0E381C0E381C0E381C071C38071C38078FF00387E001C3C000F03C007FFC003FF0000FC001219 7E9816>64 D<00E00001F00001F00001B00001B00003B80003B80003B800031800071C00071C00 071C00071C00071C000E0E000E0E000FFE000FFE001FFF001C07001C07001C07007F1FC0FF1FE0 7F1FC013197F9816>I<7FFFC0FFFFC07FFFC01C01C01C01C01C01C01C01C01C00001C00001C1C 001C1C001FFC001FFC001FFC001C1C001C1C001C00001C00E01C00E01C00E01C00E01C00E07FFF E0FFFFE07FFFE013197F9816>69 D<7F1FC0FFBFE07F1FC01C07001C07001C07001C07001C0700 1C07001C07001FFF001FFF001FFF001C07001C07001C07001C07001C07001C07001C07001C0700 1C07007F1FC0FFBFE07F1FC013197F9816>72 D77 D<7FE000FFF8007FFC001C1E001C0F 001C07001C07001C07001C07001C0F001C1E001FFC001FF8001FFC001C1C001C0E001C0E001C0E 001C0E001C0E201C0E701C0E707F07E0FF87E07F03C014197F9816>82 D<07E3001FFF003FFF00 781F00F00700E00700E00700E00000F000007800003F80001FF00007FC0000FE00000F00000700 000380000380600380E00380E00700F80F00FFFE00FFFC00C7F00011197E9816>I<7F07F0FF8F F87F07F01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01 C01C01C01C01C01C01C01C01C00E03800E038007070007FF0003FE0000F8001519809816>85 D89 D<1FE0003FF0007FF800783C00300E00000E00000E0003FE001FFE003E0E00700E00 E00E00E00E00E00E00783E007FFFE03FE7E00F83E013127E9116>97 D<7E0000FE00007E00000E 00000E00000E00000E00000E3E000EFF000FFF800F83C00F00E00E00E00E00700E00700E00700E 00700E00700E00700E00E00F01E00F83C00FFF800EFF00063C001419809816>I<03F80FFC1FFE 3C1E780C7000E000E000E000E000E000F000700778073E0E1FFC0FF803F010127D9116>I<003F 00007F00003F0000070000070000070000070003C7000FF7001FFF003C1F00780F00700700E007 00E00700E00700E00700E00700E00700700F00700F003C1F001FFFE00FE7F007C7E014197F9816 >I<03E00FF81FFC3C1E780E7007E007FFFFFFFFFFFFE000E000700778073C0F1FFE0FFC03F010 127D9116>I<001F00007F8000FF8001E78001C30001C00001C0007FFF00FFFF00FFFF0001C000 01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0003FFE007FFF00 3FFE0011197F9816>I<03E3C007F7E00FFFE01C1CC0380E00380E00380E00380E00380E001C1C 000FF8001FF0001BE0003800001800001FFC001FFF003FFF807803C0E000E0E000E0E000E0E000 E07001C07C07C03FFF800FFE0003F800131C7F9116>I<7E0000FE00007E00000E00000E00000E 00000E00000E3C000EFE000FFF000F87800F03800E03800E03800E03800E03800E03800E03800E 03800E03800E03800E03807FC7F0FFE7F87FC7F01519809816>I<018003C003C0018000000000 000000007FC07FC07FC001C001C001C001C001C001C001C001C001C001C001C001C07FFFFFFF7F FF101A7D9916>I<7E0000FE00007E00000E00000E00000E00000E00000E7FE00E7FE00E7FE00E 0F000E1E000E3C000E78000EF0000FF0000FF8000FBC000F1E000E0E000E07000E07807F87F0FF CFF07F87F01419809816>107 DI I<7E3C00FEFE007FFF000F87800F03800E03800E03800E03800E03800E03800E03800E03800E03 800E03800E03807FC7F0FFE7F87FC7F01512809116>I<03E0000FF8001FFC003C1E00780F0070 0700E00380E00380E00380E00380E00380F00780700700780F003C1E001FFC000FF80003E00011 127E9116>I<7E3E00FEFF007FFF800F83C00F00E00E00E00E00700E00700E00700E00700E0070 0E00700E00E00F01E00F83C00FFF800EFF000E3C000E00000E00000E00000E00000E00000E0000 7FC000FFE0007FC000141B809116>I114 D<0FEC3FFC7FFCF03CE01CE01C70007F801FF007F8003C600EE00EF00EF81EFFFCFFF8C7E00F12 7D9116>I<0300000700000700000700000700007FFF00FFFF00FFFF0007000007000007000007 000007000007000007000007010007038007038007038007870003FE0001FC0000F80011177F96 16>I<7E1F80FE3F807E1F800E03800E03800E03800E03800E03800E03800E03800E03800E0380 0E03800E03800E0F800FFFF007FBF803E3F01512809116>I<7F1FC0FF1FE07F1FC01C07001E0F 000E0E000E0E000E0E00071C00071C00071C00071C0003B80003B80003B80001F00001F00000E0 0013127F9116>II<7F1FC07F3FC07F1FC0 0F1C00073C0003B80003F00001F00000E00001E00001F00003B800073C00071C000E0E007F1FC0 FF3FE07F1FC013127F9116>I<7F1FC0FF9FE07F1FC01C07000E07000E0E000E0E00070E00071C 00071C00039C00039C0003980001B80001B80000F00000F00000F00000E00000E00000E00001C0 0079C0007BC0007F80003F00003C0000131B7F9116>I<3FFFC07FFFC07FFFC0700780700F0070 1E00003C0000780001F00003E0000780000F00001E01C03C01C07801C0FFFFC0FFFFC0FFFFC012 127F9116>I<1C303F78FFF8F7E061C00D057C9816>126 D E /Fl 86 125 df<007E1F0001C1B1800303E3C00703C3C00E03C1800E01C0000E01C0000E01C0000E01C0000E 01C0000E01C000FFFFFC000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C000 0E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0007F87FC 001A1D809C18>11 D<007E0001C1800301800703C00E03C00E01800E00000E00000E00000E0000 0E0000FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0 0E01C00E01C00E01C00E01C00E01C07F87F8151D809C17>I<007FC001C1C00303C00703C00E01 C00E01C00E01C00E01C00E01C00E01C00E01C0FFFFC00E01C00E01C00E01C00E01C00E01C00E01 C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07FCFF8151D809C17 >I<003F07E00001C09C18000380F018000701F03C000E01E03C000E00E018000E00E000000E00 E000000E00E000000E00E000000E00E00000FFFFFFFC000E00E01C000E00E01C000E00E01C000E 00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C00 0E00E01C000E00E01C000E00E01C000E00E01C000E00E01C007FC7FCFF80211D809C23>I20 D<60F0F0F0F0F0F0F06060606060606060606060606000000000 0060F0F060041E7C9D0C>33 D<6060F0F0F8F86868080808080808101010102020404080800D0C 7F9C15>I<0080008007E01898308460824081C087C08FC08FC086E080F0807E803FC01FF00FF8 03FC00BE008E00876087F083F083E0838082408240842088189007E00080008010217E9E15>36 D<00E0000001900000030800000308000007080000070800000708000007080000071000000710 0000072000000740000003C03FE003800F00038006000380040005C0040009C0080010E0100030 E010006070200060702000E0384000E03C4000E01C8000E00F0020E0070020700780403009C040 1830E18007C03E001B1F7E9D20>38 D<60F0F8680808081010204080050C7C9C0C>I<00400080 0100020006000C000C0018001800300030007000600060006000E000E000E000E000E000E000E0 00E000E000E000E000E000600060006000700030003000180018000C000C000600020001000080 00400A2A7D9E10>I<800040002000100018000C000C0006000600030003000380018001800180 01C001C001C001C001C001C001C001C001C001C001C001C0018001800180038003000300060006 000C000C00180010002000400080000A2A7E9E10>I<60F0F0701010101020204080040C7C830C> 44 DI<60F0F06004047C830C>I<00010003000600060006000C000C00 0C0018001800180030003000300060006000C000C000C001800180018003000300030006000600 0C000C000C00180018001800300030003000600060006000C000C00010297E9E15>I<03C00C30 1818300C300C700E60066006E007E007E007E007E007E007E007E007E007E007E007E007E00760 066006700E300C300C18180C3007E0101D7E9B15>I<030007003F00C700070007000700070007 00070007000700070007000700070007000700070007000700070007000700070007000F80FFF8 0D1C7C9B15>I<07C01830201C400C400EF00FF80FF807F8077007000F000E000E001C001C0038 0070006000C00180030006010C01180110023FFE7FFEFFFE101C7E9B15>I<07E01830201C201C 781E780E781E381E001C001C00180030006007E00030001C001C000E000F000F700FF80FF80FF8 0FF00E401C201C183007E0101D7E9B15>I<000C00000C00001C00003C00003C00005C0000DC00 009C00011C00031C00021C00041C000C1C00081C00101C00301C00201C00401C00C01C00FFFFC0 001C00001C00001C00001C00001C00001C00001C0001FFC0121C7F9B15>I<300C3FF83FF03FC0 20002000200020002000200023E024302818301C200E000E000F000F000F600FF00FF00FF00F80 0E401E401C2038187007C0101D7E9B15>I<00F0030C06040C0E181E301E300C700070006000E3 E0E430E818F00CF00EE006E007E007E007E007E007600760077006300E300C18180C3003E0101D 7E9B15>I<4000007FFF807FFF007FFF0040020080040080040080080000100000100000200000 600000400000C00000C00001C00001800001800003800003800003800003800007800007800007 8000078000078000078000030000111D7E9B15>I<03E00C301008200C20066006600660067006 780C3E083FB01FE007F007F818FC307E601E600FC007C003C003C003C00360026004300C1C1007 E0101D7E9B15>I<03C00C301818300C700C600EE006E006E007E007E007E007E0076007700F30 0F18170C2707C700060006000E300C780C78187010203030C00F80101D7E9B15>I<60F0F06000 00000000000000000060F0F06004127C910C>I<60F0F0600000000000000000000060F0F07010 10101020204080041A7C910C>I<7FFFFFC0FFFFFFE00000000000000000000000000000000000 000000000000000000000000000000FFFFFFE07FFFFFC01B0C7E8F20>61 D<003F800000C0600003001800040004000800020010000100201F00802070808040E0404040C0 384041C038408180382083803820838038208380382083803820838038208180382041C0382040 C0384040E0784020709880201F0F00100000000800000004000000030001E000C01F80003FF000 1B1D7E9C20>64 D<000600000006000000060000000F0000000F0000000F000000178000001780 00001780000023C0000023C0000023C0000041E0000041E0000041E0000080F0000080F0000180 F8000100780001FFF80003007C0002003C0002003C0006003E0004001E0004001E000C001F001E 001F00FF80FFF01C1D7F9C1F>II<001F808000E0618001801980 070007800E0003801C0003801C00018038000180780000807800008070000080F0000000F00000 00F0000000F0000000F0000000F0000000F0000000F00000007000008078000080780000803800 00801C0001001C0001000E000200070004000180080000E03000001FC000191E7E9C1E>II< FFFFFC0F003C0F000C0F00040F00040F00060F00020F00020F02020F02000F02000F02000F0600 0FFE000F06000F02000F02000F02000F02010F00010F00020F00020F00020F00060F00060F000C 0F003CFFFFFC181C7E9B1C>II<001F808000E061800180198007 0007800E0003801C0003801C00018038000180780000807800008070000080F0000000F0000000 F0000000F0000000F0000000F0000000F000FFF0F0000F80700007807800078078000780380007 801C0007801C0007800E00078007000B800180118000E06080001F80001C1E7E9C21>III<1FFF00F8007800780078007800780078 00780078007800780078007800780078007800780078007800787078F878F878F878F0F040E021 C01F00101D7F9B15>IIIII<003F800000E0E0000380380007001C000E000E001C 0007003C00078038000380780003C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0 F00001E0F00001E0F00001E0F00001E0700001C0780003C0780003C0380003803C0007801C0007 000E000E0007001C000380380000E0E000003F80001B1E7E9C20>II82 D<07E0801C1980300580700380600180E00180E00080E00080E00080F00000 F800007C00007FC0003FF8001FFE0007FF0000FF80000F800007C00003C00001C08001C08001C0 8001C0C00180C00180E00300D00200CC0C0083F800121E7E9C17>I<7FFFFFC0700F01C0600F00 C0400F0040400F0040C00F0020800F0020800F0020800F0020000F0000000F0000000F0000000F 0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000 0F0000000F0000000F0000000F0000001F800003FFFC001B1C7F9B1E>IIII<7F F0FFC00FC03E000780180003C0180003E0100001E0200001F0600000F0400000788000007D8000 003D0000001E0000001F0000000F0000000F8000000F80000013C0000023E0000021E0000041F0 0000C0F8000080780001007C0003003C0002001E0006001F001F003F80FFC0FFF01C1C7F9B1F> II<7FFFF07C01F07001E06003C06003C0400780400F80400F00401E00001E00003C00007C00 00780000F00000F00001E00003E00003C0100780100780100F00101F00301E00203C00203C0060 7800E0F803E0FFFFE0141C7E9B19>II<0808101020204040404080808080 8080B0B0F8F8787830300D0C7A9C15>II<1FC000307000783800781C0030 1C00001C00001C0001FC000F1C00381C00701C00601C00E01C40E01C40E01C40603C40304E801F 870012127E9115>97 DI<07E00C301878307870306000E0 00E000E000E000E000E00060007004300418080C3007C00E127E9112>I<003F00000700000700 00070000070000070000070000070000070000070000070003E7000C1700180F00300700700700 600700E00700E00700E00700E00700E00700E00700600700700700300700180F000C370007C7E0 131D7E9C17>I<03E00C301818300C700E6006E006FFFEE000E000E000E0006000700230021804 0C1803E00F127F9112>I<00F8018C071E061E0E0C0E000E000E000E000E000E00FFE00E000E00 0E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE00F1D809C0D>I<0003 8003C4C00C38C01C3880181800381C00381C00381C00381C001818001C38000C300013C0001000 003000001800001FF8001FFF001FFF803003806001C0C000C0C000C0C000C06001803003001C0E 0007F800121C7F9215>II<18003C003C00180000000000 00000000000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C 001C001C00FF80091D7F9C0C>I<00C001E001E000C000000000000000000000000000000FE000 E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0 60E0F0C0F1C061803E000B25839C0D>IIII< FC7C001C87001D03001E03801C03801C03801C03801C03801C03801C03801C03801C03801C0380 1C03801C03801C03801C0380FF9FF014127F9117>I<03F0000E1C001806003003007003806001 80E001C0E001C0E001C0E001C0E001C0E001C06001807003803003001806000E1C0003F0001212 7F9115>II<03C1000C3300180B00300F00700700700700E00700E00700E00700 E00700E00700E00700600700700700300F00180F000C370007C700000700000700000700000700 000700000700000700003FE0131A7E9116>II<1F9030704030C010C010E010F8007F80 3FE00FF000F880388018C018C018E010D0608FC00D127F9110>I<04000400040004000C000C00 1C003C00FFE01C001C001C001C001C001C001C001C001C001C101C101C101C101C100C100E2003 C00C1A7F9910>IIII<7F8FF00F03800F030007020003840001C80001D80000F00000 700000780000F800009C00010E00020E000607000403801E07C0FF0FF81512809116>II<7FFC70386038407040F040E041C003C0038007000F040E041C043C0C380870087038FF F80E127F9112>III E /Fm 42 127 df<00C00000C00007F0001FFC003CCE0070C30060C300E0C780E0CF80E0CF80F0 CF80F8C700FEC0007FE0007FF8003FFC001FFE000FFF0003FF0000DF8020CF8070C780F8C380F8 C380F0C380C0C30060C70070C60038DE001FF80007E00000C00000C00011217D9E18>36 D45 D<000180000380000380000700000700000700000E0000 0E00001C00001C00001C0000380000380000380000700000700000E00000E00000E00001C00001 C00001C0000380000380000380000700000700000E00000E00000E00001C00001C00001C000038 0000380000700000700000700000E00000E00000C0000011297D9E18>47 D<00600001E0000FE000FFE000F3E00003E00003E00003E00003E00003E00003E00003E00003E0 0003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E0007FFF 807FFF80111B7D9A18>49 D<00038000000380000007C0000007C0000007C000000FE000000FE0 00001FF000001BF000001BF0000031F8000031F8000061FC000060FC0000E0FE0000C07E0000C0 7E0001803F0001FFFF0003FFFF8003001F8003001F8006000FC006000FC00E000FE00C0007E0FF C07FFEFFC07FFE1F1C7E9B24>65 DI<001FE02000FFF8E003F80FE007C003E00F8001E01F00 00E03E0000E03E0000607E0000607C000060FC000000FC000000FC000000FC000000FC000000FC 000000FC000000FC0000007C0000607E0000603E0000603E0000C01F0000C00F80018007C00300 03F80E0000FFFC00001FE0001B1C7D9B22>III73 D76 DI80 D82 D<07F8201FFEE03C07E07801E07000E0F000E0F00060F00060F80000FE0000 FFE0007FFE003FFF003FFF800FFFC007FFE0007FE00003F00001F00000F0C000F0C000F0C000E0 E000E0F001C0FC03C0EFFF0083FC00141C7D9B1B>I<7FFFFFE07FFFFFE0781F81E0701F80E060 1F8060E01F8070C01F8030C01F8030C01F8030C01F8030001F8000001F8000001F8000001F8000 001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80 00001F8000001F800007FFFE0007FFFE001C1C7E9B21>I86 D<7FFFFC7FFFFC7E01F87803F87003F0E007E0E007E0C00F C0C01FC0C01F80003F00007F00007E0000FC0000FC0001F80003F80603F00607E0060FE0060FC0 0E1F800E1F801C3F001C7F003C7E00FCFFFFFCFFFFFC171C7D9B1D>90 D<0FF8001C1E003E0F80 3E07803E07C01C07C00007C0007FC007E7C01F07C03C07C07C07C0F807C0F807C0F807C0780BC0 3E13F80FE1F815127F9117>97 DI<03FC000E0E001C1F00 3C1F00781F00780E00F80000F80000F80000F80000F80000F800007800007801803C01801C0300 0E0E0003F80011127E9115>I<000FF0000FF00001F00001F00001F00001F00001F00001F00001 F00001F00001F001F9F00F07F01C03F03C01F07801F07801F0F801F0F801F0F801F0F801F0F801 F0F801F07801F07801F03C01F01C03F00F0FFE03F9FE171D7E9C1B>I<01FC000F07001C03803C 01C07801C07801E0F801E0F801E0FFFFE0F80000F80000F800007800007C00603C00601E00C00F 038001FC0013127F9116>I<007F0001E38003C7C00787C00F87C00F83800F80000F80000F8000 0F80000F8000FFF800FFF8000F80000F80000F80000F80000F80000F80000F80000F80000F8000 0F80000F80000F80000F80000F80007FF8007FF800121D809C0F>I<03F8F00E0F381E0F381C07 303C07803C07803C07803C07801C07001E0F000E0E001BF8001000001800001800001FFF001FFF C00FFFE01FFFF07801F8F00078F00078F000787000707800F01E03C007FF00151B7F9118>II<1E003F003F003F003F001E00000000000000000000000000 FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FFE0FFE00B1E7F 9D0E>I107 DIII<01FC000F07801C01C03C01E07800F07800F0F800F8F800F8F800F8F8 00F8F800F8F800F87800F07800F03C01E01E03C00F078001FC0015127F9118>I I114 D<1FD830786018E018E018F000FF80 7FE07FF01FF807FC007CC01CC01CE01CE018F830CFC00E127E9113>I<03000300030003000700 07000F000F003FFCFFFC1F001F001F001F001F001F001F001F001F001F0C1F0C1F0C1F0C0F0807 9803F00E1A7F9913>III120 DI<3FFF803C1F00303F00303E00607C0060FC0060F80001F00003F00007E00007 C1800F81801F81801F03803E03007E07007C0F00FFFF0011127F9115>I<1E023FFC7FF880F00F 047C9C18>126 D E /Fn 32 123 df<0E1E1E1E1E02020404080810204080070F7D840F>44 D<0000030000000300000007000000070000000F0000000F0000001F0000002F0000002F000000 4F0000004F80000087800000878000010780000207800002078000040780000407800008078000 080780001007800030078000200780007FFF80004007C0008007C0008003C0010003C0030003C0 020003C0040003C0040003C00C0003C03C0007C0FF003FFC1E237DA224>65 D<00007F00800003808100000E00630000380027000070001F0000E0000E0001C0000E00038000 0E000700000E000F000004000E000004001E000004003C000004003C0000080078000000007800 0000007800000000F000000000F000000000F000000000F000000000F000000000E000000000E0 00002000E000002000E000004000E000004000F000008000700000800070000100003800020000 18000400001C0008000006003000000381C0000000FE000000212479A223>67 D<00FFFFF000000F003C00000F000E00000F000700001E000380001E000380001E0001C0001E00 01C0003C0001C0003C0001E0003C0001E0003C0001E000780001E000780001E000780001E00078 0001E000F00003C000F00003C000F00003C000F00003C001E000078001E000078001E000070001 E0000F0003C0000E0003C0001C0003C0003C0003C00038000780007000078000E000078001C000 07800700000F801C0000FFFFF0000023227DA125>I<00FFFFFF80000F000780000F000180000F 000180001E000180001E000180001E000100001E000100003C000100003C000100003C01010000 3C01000000780200000078020000007806000000780E000000FFFC000000F00C000000F00C0000 00F00C000001E008000001E008000001E008040001E000080003C000080003C000080003C00010 0003C000100007800020000780006000078000C000078001C0000F8007C000FFFFFF800021227D A121>I<00FF800007FC000F80000F80000F80001780000F80001780001780002F000013C0002F 000013C0004F000013C0008F000023C0009E000023C0011E000023C0011E000023C0021E000043 C0043C000043C0043C000043C0083C000041E0083C000081E01078000081E02078000081E02078 000081E04078000101E040F0000101E080F0000101E100F0000101E100F0000200F201E0000200 F201E0000200F401E0000200F801E0000400F803C0000400F003C0000400F003C0000C00E003C0 001E00C007C000FFC0C07FFC002E227DA12C>77 D<00FFFFC0000F0070000F003C000F001C001E 000E001E000E001E000F001E000F003C001E003C001E003C001E003C003C007800380078007000 7801E00078078000FFFC0000F00E0000F0070000F0038001E003C001E003C001E003C001E003C0 03C0078003C0078003C0078003C0078007800F0007800F0107800F01078007020F800702FFF803 8C000000F020237DA124>82 D<0001F020000E0C40001802C0003001C0006001C000E0018000C0 018001C0018001C0018003C0010003C0010003C0000003C0000003E0000001F8000001FF000000 FFE000007FF000001FF8000003FC0000007C0000003C0000001E0000001E0000001E0020001C00 20001C0020001C00200018006000380060003000700060007000C000C8018000C607000081FC00 001B247DA21B>I<1FFFFFF81E03C0381803C0183003C018200780182007801840078010400780 10400F0010800F0010800F0010000F0000001E0000001E0000001E0000001E0000003C0000003C 0000003C0000003C00000078000000780000007800000078000000F0000000F0000000F0000000 F0000001E0000001E0000001E0000001E0000003E00000FFFF00001D2277A123>I<3FFE03FF03 C0007803C0006003C00020078000400780004007800040078000400F0000800F0000800F000080 0F0000801E0001001E0001001E0001001E0001003C0002003C0002003C0002003C000200780004 0078000400780004007800040070000800F0000800F00010007000100070002000700040003000 400038018000180200000E0C000003F00000202377A124>I<007FFFFE007E001E0078003C0060 007800C000F000C001E0008003E0008003C00100078001000F0001001E0000003C0000007C0000 0078000000F0000001E0000003C00000078000000F8000000F0000001E0000003C004000780040 00F0008001F0008001E0008003C00100078001000F0003001E0006001E0006003C001E0078007C 00FFFFFC001F227DA11E>90 D<00F8C00185C00705C00E03800E03801C03803C03803807007807 00780700780700F00E00F00E00F00E00F00E10F01C20701C20703C20305C40308C400F07801415 7B9419>97 D<03C03F8003800380038007000700070007000E000E000E000E001C001CF81D0C1E 0E3C0638073807380F700F700F700F700FE01EE01EE01EE03CE038E038607060E031C01F001023 7BA216>I<007E0001C1000301800703800E07801C07803C0000380000780000780000780000F0 0000F00000F00000F00000F00100700100700200300C001830000FC00011157B9416>I<00003C 0003F80000380000380000380000700000700000700000700000E00000E00000E00000E00001C0 00F9C00185C00705C00E03800E03801C03803C0380380700780700780700780700F00E00F00E00 F00E00F00E10F01C20701C20703C20305C40308C400F078016237BA219>I<00F803840E021C02 3C0238027804F018FFE0F000F000E000E000E000E000E002E0026004701830600F800F157A9416 >I<001F180030B800E0B801C07001C0700380700780700700E00F00E00F00E00F00E01E01C01E 01C01E01C01E01C01E03800E03800E0780060B8006170001E700000700000700000E00000E0000 0E00701C00F01800F0300060E0003F8000151F7E9416>103 D<00C001E001C001C00000000000 00000000000000000000001C002300430043008700870087000E000E001C001C001C0038003800 3840708070807080710032001C000B217BA00F>105 D<00F0000FE00000E00000E00000E00001 C00001C00001C00001C0000380000380000380000380000700000701E0070210070C700E10F00E 10F00E20600E40001D80001E00001FC0001C7000383800383800381C00381C2070384070384070 3840701880E01880600F0014237DA216>107 D<01E01FC001C001C001C0038003800380038007 000700070007000E000E000E000E001C001C001C001C0038003800380038007000700070007100 E200E200E200E200640038000B237CA20C>I<1C0F80F8002610C10C0047606606008780780700 8780780700870070070087007007000E00E00E000E00E00E000E00E00E000E00E00E001C01C01C 001C01C01C001C01C01C001C01C038203803803840380380704038038070803803803080700700 31003003001E0023157B9428>I<1C0F002631C04740C08780E08780E08700E08700E00E01C00E 01C00E01C00E01C01C03801C03801C03801C0704380708380E08380E103806107006203003C016 157B941B>I<007E0001C3000381800701C00E01C01C01E03C01E03801E07801E07801E07801E0 F003C0F003C0F00380F00780700700700E00700C0030180018700007C00013157B9419>I<01C1 F002621804741C08780C08700E08700E08701E00E01E00E01E00E01E00E01E01C03C01C03C01C0 3C01C07803807003807003C0E003C1C0072380071E000700000700000E00000E00000E00000E00 001C00001C00001C0000FFC000171F7F9419>I<1C1F002620804741C08783C08703C087018087 00000E00000E00000E00000E00001C00001C00001C00001C000038000038000038000038000070 000030000012157B9415>114 D<00FC000183000200800401800C03800C03000C00000F00000F F00007FC0003FE00003E00000F00000700700700F00600F00600E004004008002030001FC00011 157D9414>I<00C001C001C001C001C003800380038003800700FFF8070007000E000E000E000E 001C001C001C001C003800380038003810702070207040708031001E000D1F7C9E10>I<1E0060 2300E04380E04381C08381C08701C08701C00703800E03800E03800E03801C07001C07001C0700 1C07081C0E10180E101C0E101C1E200C262007C3C015157B941A>I<1E03802307C04387C04383 C08381C08700C08700C00700800E00800E00800E00801C01001C01001C01001C02001C02001C04 001C08001C08000C300003C00012157B9416>I<03C1E0046210083470103CF02038F020386020 380000700000700000700000700000E00000E00000E00000E02061C040F1C040F1C080E2C10044 6200383C0014157D9416>120 D<1E00302300704380704380E08380E08700E08700E00701C00E 01C00E01C00E01C01C03801C03801C03801C03801C07001C07001C07001C0F000C3E0003CE0000 0E00000E00001C00601C00F03800F03000E0600080C0004380003E0000141F7B9418>I<01E020 03F06007F8C0041F80080100080200000400000800001000002000004000008000010000020000 0400800801001003003F060061FC0040F80080700013157D9414>I E /Fo 23 119 df<00038000000380000003800000038000001FF00000FFFE0003FFFF0007E38FC00F03 83E01E0380F03C0380703C038038780380F8780381FCF80383FCF80387FCF80387FCFC0387FCFC 0387FCFE0383F8FF0381F0FFC380007FFB80007FFFC0003FFFF8003FFFFE001FFFFF000FFFFF80 07FFFFC003FFFFE001FFFFF0007FFFF0000FFFF80003FFF800038FF8000383FC3E0381FC7F0380 FCFF8380FCFF83807CFF83807CFF83807CFF03807CFE0380787C038078700380F8780380F03803 80E01C0381E00F0387C007E39F8003FFFF0000FFFC00001FE00000038000000380000003800000 0380001E3A7BB529>36 D<1F003F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F00000000000000 00000000000000000000000000001F003F807FC0FFE0FFE0FFE0FFE0FFE07FC03F801F000B207A 9F17>58 D68 DII72 D76 DI<00000FFE0000000000 FFFFE000000007FFFFFC0000001FFC07FF0000003FE000FF800000FF80003FE00001FF00001FF0 0003FE00000FF80007FC000007FC0007FC000007FC000FF8000003FE001FF8000003FF001FF000 0001FF003FF0000001FF803FF0000001FF803FF0000001FF807FE0000000FFC07FE0000000FFC0 7FE0000000FFC0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE00000 00FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FFE0000000FFE0FF E0000000FFE07FE0000000FFC07FE0000000FFC07FF0000001FFC07FF0000001FFC03FF0000001 FF803FF0000001FF801FF8000003FF001FF8000003FF000FFC000007FE000FFC000007FE0007FE 00000FFC0003FF00001FF80001FF80003FF00000FFC0007FE000003FE000FF8000001FFC07FF00 000007FFFFFC00000000FFFFE0000000000FFE00000033317BB03E>79 D<001FF0018000FFFF03 8003FFFFC78007F00FFF800F8001FF801F00007F803F00001F803E00000F807E00000F807E0000 0780FE00000780FE00000780FE00000380FF00000380FF00000380FF80000000FFE00000007FFC 0000007FFFE000007FFFFE00003FFFFFC0001FFFFFF0001FFFFFF8000FFFFFFC0003FFFFFE0001 FFFFFF00007FFFFF80001FFFFF800000FFFFC0000007FFC0000000FFE00000003FE00000003FE0 0000001FE06000001FE0E000000FE0E000000FE0E000000FE0E000000FC0F000000FC0F000000F C0F800001F80FC00001F80FF00003F00FFC0007E00FFFC01FC00F1FFFFF800E03FFFE000C007FF 000023317BB02E>83 D89 D<007FF8000003FFFF000007FFFFC0000FE01FE0 001FF007F0001FF003F8001FF003FC001FF001FE000FE001FE0007C001FE00010001FE00000001 FE00000001FE000001FFFE00003FFFFE0001FFF1FE0007FE01FE000FF001FE001FC001FE003F80 01FE007F8001FE00FF0001FE00FF0001FE00FF0001FE00FF0001FE00FF0003FE007F8003FE007F C00EFE003FF03CFF000FFFF87FF807FFF03FF800FF800FF825207E9F28>97 D<0007FC0000003FFF800000FFFFE00003FC07F00007F801F8000FE000FC001FE0007E003FC000 7E003FC0003F007FC0003F007F80003F007F80003F80FF80003F80FF80003F80FFFFFFFF80FFFF FFFF80FFFFFFFF80FF80000000FF80000000FF800000007F800000007F800000003FC00000003F C00003801FC00003801FE00007800FF0000F0007F8001E0003FE00FC0000FFFFF800003FFFE000 0003FF000021207E9F26>101 D<001FF007E000FFFE3FF001FFFF7FF807F83FF1F80FE00FE1F8 0FE00FE0F01FC007F0601FC007F0003FC007F8003FC007F8003FC007F8003FC007F8003FC007F8 001FC007F0001FC007F0000FE00FE0000FE00FE00007F83FC00007FFFF000006FFFE00000E1FF0 00000E000000001E000000001E000000001F000000001F800000001FFFFFC0000FFFFFF8000FFF FFFE0007FFFFFF0003FFFFFF8007FFFFFFC01FFFFFFFE03F00007FE07E00000FF0FC000007F0FC 000003F0FC000003F0FC000003F0FC000003F07E000007E03F00000FC01FC0003F800FF801FF00 07FFFFFE0000FFFFF000001FFF8000252F7E9F29>103 D<01C00007F0000FF8000FF8001FFC00 1FFC001FFC000FF8000FF80007F00001C000000000000000000000000000000000000000000000 00000001F800FFF800FFF800FFF8000FF80007F80007F80007F80007F80007F80007F80007F800 07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800 07F80007F80007F80007F800FFFF80FFFF80FFFF8011337DB217>105 D<01F800FFF800FFF800 FFF8000FF80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800 07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800 07F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F800 07F80007F80007F80007F80007F800FFFFC0FFFFC0FFFFC012327DB117>108 D<03F007F8000FF000FFF03FFF007FFE00FFF07FFF80FFFF00FFF0F03FC1E07F800FF1C01FE380 3FC007F3000FE6001FC007F6000FFC001FE007FE000FFC001FE007FC000FF8001FE007FC000FF8 001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000F F0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F800 0FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8 000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE007F8000FF0001FE0FF FFC1FFFF83FFFFFFFFC1FFFF83FFFFFFFFC1FFFF83FFFF40207D9F45>I<03F007F80000FFF03F FF0000FFF07FFF8000FFF0F03FC0000FF1C01FE00007F3000FE00007F6000FF00007FE000FF000 07FC000FF00007FC000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F800 0FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF000 07F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F800 0FF00007F8000FF000FFFFC1FFFF80FFFFC1FFFF80FFFFC1FFFF8029207D9F2E>I<0007FE0000 003FFFC00000FFFFF00003FC03FC0007F000FE000FE0007F001FC0003F803FC0003FC03FC0003F C07F80001FE07F80001FE07F80001FE0FF80001FF0FF80001FF0FF80001FF0FF80001FF0FF8000 1FF0FF80001FF0FF80001FF0FF80001FF07F80001FE07F80001FE07F80001FE03FC0003FC03FC0 003FC01FE0007F800FE0007F0007F801FE0003FE07FC0001FFFFF800003FFFC0000007FE000024 207E9F29>I<03F03F00FFF07FC0FFF1FFE0FFF3C7F00FF38FF807F70FF807F60FF807FE0FF807 FC07F007FC03E007FC008007F8000007F8000007F8000007F8000007F8000007F8000007F80000 07F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F8000007F800 0007F80000FFFFE000FFFFE000FFFFE0001D207E9F22>114 D<00380000380000380000380000 380000780000780000780000F80000F80001F80003F80007F8001FF800FFFFFEFFFFFEFFFFFE07 F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007F80007 F80007F80007F80007F80707F80707F80707F80707F80707F80707F80703F80E03FC0E01FE1C00 FFF8007FF0000FE0182E7EAD20>116 D<01F80003F000FFF801FFF000FFF801FFF000FFF801FF F0000FF8001FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007 F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000F F00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007F8000FF00007 F8000FF00007F8001FF00007F8001FF00003F8003FF00003F8006FF00001FE03CFF80000FFFF8F FF80007FFF0FFF80000FFC0FFF8029207D9F2E>II E end %%EndProlog %%BeginSetup %%Feature: *Resolution 300 TeXDict begin %%EndSetup %%Page: 1 1 bop 193 216 a Fo(HLFSD:)26 b(Deliv)n(ering)h(Email)g(to)h(Y)-7 b(our)28 b($HOME)280 336 y Fn(Er)n(ez)17 b(Zadok,)g(Computer)h(Scienc)n(e)h (Dep)n(artment,)e(Columbia)h(University)482 394 y(A)o(lexander)h(Dupuy,)e (System)h(Management)h(AR)l(TS)841 541 y Fm(ABSTRA)o(CT)241 628 y Fl(W)m(e)12 b(consider)h(the)g(problem)e(of)h(enabling)g(users)i(to)e (access)i(their)f(mailb)q(o)o(x)d(\014les)i(from)f(an)o(y)h(host)179 678 y(on)k(our)h(lo)q(cal)f(net)o(w)o(ork,)h(and)f(not)h(only)f(on)g(one)h (designated)g(\\home)f(mac)o(hine".)25 b(W)m(e)16 b(require)h(a)179 728 y(solution)11 b(whic)o(h)g(will)f(not)i(in)o(tro)q(duce)g(an)o(y)f(new)h (single)g(p)q(oin)o(ts)f(of)g(failure,)g(force)h(us)g(to)g(mo)q(dify)d(mail) 179 778 y(transfer)16 b(agen)o(ts)f(and)g(user)i(agen)o(ts,)e(or)g(require)h (c)o(hanges)g(to)f(the)h(op)q(erating)f(system)g(k)o(ernels.)22 b(In)179 828 y(other)15 b(w)o(ords,)g(minim)o(ize)e(the)i(amoun)o(t)e(of)h(w) o(ork)h(needed)h(b)o(y)e(system-administrators)g(and)g(users.)179 877 y(Our)i(solution)e(is)h(to)h(deliv)o(er)f(mail)e(in)o(to)h(the)i(users')h (home)d(directories,)i(whic)o(h)g(are)f(exp)q(orted)i(via)179 927 y(NFS[20)o(,)g(25])f(to)i(all)e(of)h(the)h(mac)o(hines)e(on)h(our)h(net)o (w)o(ork.)29 b(W)m(e)17 b(wrote)h(a)f(small)e(user-lev)o(el)j(NFS)179 977 y(serv)o(er)d(implemen)o(ting)c(a)j(single)f(sym)o(b)q(olic)f(link)h (that)h(references)j(the)e(home)e(directory)h(of)g(a)g(user,)179 1027 y(either)h(the)g(one)g(who)f(accessed)j(it,)c(or)i(b)o(y)f(name,)f(with) h(a)g(fallbac)o(k)f(reference)k(in)d(case)h(of)f(failures.)179 1077 y(This)d(enables)h(electronic)g(mail)d(to)i(b)q(e)h(deliv)o(ered)g (directly)g(in)o(to)e(the)i(user's)g(home)f(directory)m(,)g(whic)o(h)179 1126 y(is)f(already)h(accessible)h(from)d(an)o(y)h(mac)o(hine)g(on)h(the)g (net)o(w)o(ork.)17 b(Although)10 b(w)o(e)i(ha)o(v)o(e)e(used)i(our)f(serv)o (er)179 1176 y(primarily)f(for)i(mail)e(deliv)o(ery)j(redirection,)g(it)f (can)h(b)q(e)g(used)h(to)e(redirect)i(sp)q(o)q(oled)f(faxes,)g(access)h(to) 179 1226 y Fk(/tmp)p Fl(,)e(etc.)75 1345 y Fj(1)56 b(In)n(tro)r(duction)175 1420 y Fl(Electronic)16 b(mail)e(has)i(b)q(ecome)g(one)g(of)f(the)i(ma)r(jor) d(applications)h(for)h(man)o(y)e(computer)i(net)o(w)o(orks,)g(and)75 1470 y(use)k(of)f(this)g(service)h(is)f(exp)q(ected)j(to)d(increase)h(o)o(v)o (er)f(time,)g(as)g(net)o(w)o(orks)h(proliferate)f(and)g(b)q(ecome)g(faster.) 75 1520 y(Pro)o(viding)10 b(a)h(con)o(v)o(enien)o(t)h(en)o(vironmen)o(t)f (for)g(users)i(to)e(read,)h(comp)q(ose,)f(and)g(send)h(electronic)h(mail)c (has)i(b)q(ecome)75 1570 y(a)j(requiremen)o(t)f(for)h(systems)g (administrators)e(\(SAs\).)175 1644 y(Widely)j(used)j(metho)q(ds)d(for)i (handling)e(mail)f(usually)h(require)j(users)f(to)g(b)q(e)g(logged)e(in)o(to) h(a)g(designated)75 1694 y(\\home")e(mac)o(hine,)f(where)k(their)e(mailb)q(o) o(x)e(\014les)i(reside.)23 b(Only)15 b(on)g(that)h(one)f(mac)o(hine)f(can)i (they)f(read)h(newly)75 1744 y(arriv)o(ed)i(mail.)28 b(Since)19 b(users)g(ha)o(v)o(e)f(to)g(b)q(e)h(logged)e(in)o(to)g(that)h(system)g(to)g (read)h(their)f(mail,)e(they)j(often)f(\014nd)75 1794 y(it)h(con)o(v)o(enien) o(t)h(to)g(run)g(all)f(of)g(their)h(other)g(pro)q(cesses)j(on)c(that)h (system)f(as)h(w)o(ell,)g(including)f(memory)e(and)75 1844 y(CPU-in)o(tensiv)o(e)j(jobs.)34 b(F)m(or)19 b(example,)g(in)g(our)g (departmen)o(t,)h(w)o(e)g(ha)o(v)o(e)f(allo)q(cated)g(and)g(con\014gured)h (sev)o(eral)75 1893 y(m)o(ulti-pro)q(cessor)11 b(serv)o(ers)i(to)e(handle)g (suc)o(h)i(demanding)c(CPU)q(/memory)f(applications,)j(but)g(these)i(w)o(ere) f(under-)75 1943 y(utilized,)k(in)g(large)g(part)g(due)h(to)f(the)g(incon)o (v)o(enience)i(of)d(not)h(b)q(eing)g(able)g(to)g(read)h(mail)c(on)j(those)h (mac)o(hines.)75 1993 y(\(No)h(home)e(directories)j(w)o(ere)g(lo)q(cated)f (on)f(these)i(designated)g(CPU-serv)o(ers,)h(since)f(w)o(e)e(did)h(not)f(w)o (an)o(t)h(NFS)75 2043 y(service)g(for)f(users')g(home)f(directories)i(to)f (ha)o(v)o(e)f(to)h(comp)q(ete)g(with)f(in)o(tensiv)o(e)h(jobs.)27 b(A)o(t)17 b(the)g(same)f(time,)g(w)o(e)75 2093 y(discouraged)e(users)i(from) c(running)h(demanding)g(applications)f(on)i(their)g(home)f(mac)o(hines.\))175 2167 y(Man)o(y)k(di\013eren)o(t)h(solutions)f(ha)o(v)o(e)h(b)q(een)h(prop)q (osed)f(to)f(allo)o(w)f(users)j(to)f(read)g(their)g(mail)d(on)i(an)o(y)g (host.)75 2217 y(Ho)o(w)o(ev)o(er,)d(all)e(of)i(these)h(solutions)f(fail)e (in)h(one)h(or)g(more)f(of)g(sev)o(eral)i(w)o(a)o(ys:)137 2328 y Fi(\017)21 b Fl(they)14 b(in)o(tro)q(duce)h(new)f(single)g(p)q(oin)o(ts)f (of)h(failure)137 2409 y Fi(\017)21 b Fl(they)14 b(require)h(using)f (di\013eren)o(t)g(mail)e(transfer)i(agen)o(ts)h(\(MT)m(As\)[15)o(])e(or)h (user)h(agen)o(ts)g(\(UAs\))137 2490 y Fi(\017)21 b Fl(they)16 b(do)f(not)g(solv)o(e)g(the)h(problem)e(for)h(all)f(cases,)i(i.e.)22 b(the)16 b(solution)e(is)h(only)g(partially)e(successful)k(for)e(a)179 2539 y(particular)e(en)o(vironmen)o(t.)175 2650 y(W)m(e)e(ha)o(v)o(e)h (designed)g(a)f(simple)g(\014lesystem,)g(called)h(the)g Fh(Home-Link)h(File)f (System)p Fl(,)g(to)g(pro)o(vide)f(the)i(abilit)o(y)75 2700 y(to)d(deliv)o(er)h(mail)d(to)i(users')h(home)e(directories,)j(without)e(mo)q (di\014cation)f(to)h(mail-related)e(applications.)16 b(W)m(e)10 b(ha)o(v)o(e)p eop %%Page: 2 2 bop 75 42 a Fl(endea)o(v)o(ored)15 b(to)e(mak)o(e)f(it)i(as)f(stable)h(as)g (p)q(ossible.)k(Of)c(great)g(imp)q(ortance)f(to)g(us)h(w)o(as)g(to)f(mak)o(e) g(sure)h(the)h(HLFS)75 91 y(daemon,)10 b Fk(hlfsd)o Fl(,)h(w)o(ould)g(not)g (hang)g(under)h(an)o(y)f(circumstances,)h(and)f(w)o(ould)f(tak)o(e)i(the)g (next-b)q(est)h(action)d(when)75 141 y(faced)16 b(with)g(problems.)24 b(Compared)15 b(to)g(alternativ)o(e)h(metho)q(ds,)g Fk(hlfsd)f Fl(is)h(a)g(stable,)g(more)f(general)h(solution,)75 191 y(and)g(easier)h(to)f (install/use.)25 b(In)16 b(fact,)g(in)g(some)f(w)o(a)o(ys,)i(w)o(e)f(ha)o(v)o (e)g(ev)o(en)h(managed)e(to)h(impro)o(v)o(e)e(the)j(reliabilit)o(y)75 241 y(and)d(securit)o(y)h(of)e(mail)e(service.)175 315 y(Our)k(serv)o(er)i (implemen)o(ts)c(a)i(small)e(\014lesystem)i(con)o(taining)f(a)h(sym)o(b)q (olic)f(link)g(to)h(a)g(sub)q(directory)i(of)d(the)75 365 y(in)o(v)o(oking)c (user's)j(home)e(directory)m(,)i(and)f(named)e(sym)o(b)q(olic)h(links)g(to)h (users')h(mailb)q(o)o(x)c(\014les.)18 b(An)13 b(example,)d(using)75 415 y(pathnames)j(from)f(our)i(en)o(vironmen)o(t,)e(is)i(depicted)h(in)f (Figure)g(1.)1128 400 y Fg(1)p 75 477 1800 5 v 75 1424 a @beginspecial 0 @llx 0 @lly 599 @urx 311 @ury 4320 @rwi @setspecial %%BeginDocument: hlfs-flowchart.eps /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /l {lineto} bind def /m {moveto} bind def /s {stroke} bind def /n {newpath} bind def /gs {gsave} bind def /gr {grestore} bind def /clp {closepath} bind def /graycol {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul setrgbcolor} bind def /col-1 {} def /col0 {0 0 0 setrgbcolor} bind def /col1 {0 0 1 setrgbcolor} bind def /col2 {0 1 0 setrgbcolor} bind def /col3 {0 1 1 setrgbcolor} bind def /col4 {1 0 0 setrgbcolor} bind def /col5 {1 0 1 setrgbcolor} bind def /col6 {1 1 0 setrgbcolor} bind def /col7 {1 1 1 setrgbcolor} bind def end /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def $F2psBegin 0 setlinecap 0 setlinejoin -4.0 329.0 translate 0.900 -0.900 scale 0.500 setlinewidth n 319 19 m 312 19 312 32 7 arcto 4 {pop} repeat 312 39 350 39 7 arcto 4 {pop} repeat 357 39 357 26 7 arcto 4 {pop} repeat 357 19 319 19 7 arcto 4 {pop} repeat clp gs col-1 s gr /Times-Roman findfont 12.00 scalefont setfont 317 34 m gs 1 -1 scale (START) col-1 show gr /Times-Roman findfont 18.00 scalefont setfont 269 360 m gs 1 -1 scale (".") col-1 show gr /Times-Roman findfont 18.00 scalefont setfont 254 335 m gs 1 -1 scale (Return) col-1 show gr n 256 320 m 249 320 249 358 7 arcto 4 {pop} repeat 249 365 302 365 7 arcto 4 {pop} repeat 309 365 309 327 7 arcto 4 {pop} repeat 309 320 256 320 7 arcto 4 {pop} repeat clp gs col-1 s gr n 274 100 m 199 100 l 199 170 l gs col-1 s gr n 201.000 162.000 m 199.000 170.000 l 197.000 162.000 l gs 2 setlinejoin col-1 s gr n 394 100 m 479 100 l 479 120 l gs col-1 s gr n 481.000 112.000 m 479.000 120.000 l 477.000 112.000 l gs 2 setlinejoin col-1 s gr n 139 210 m 124 210 l 124 320 l gs col-1 s gr n 126.000 312.000 m 124.000 320.000 l 122.000 312.000 l gs 2 setlinejoin col-1 s gr n 479 200 m 479 220 l gs col-1 s gr n 481.000 212.000 m 479.000 220.000 l 477.000 212.000 l gs 2 setlinejoin col-1 s gr n 539 260 m 569 260 l 569 320 l gs col-1 s gr n 571.000 312.000 m 569.000 320.000 l 567.000 312.000 l gs 2 setlinejoin col-1 s gr n 334 40 m 334 60 l gs col-1 s gr n 336.000 52.000 m 334.000 60.000 l 332.000 52.000 l gs 2 setlinejoin col-1 s gr n 334 60 m 274 100 l 334 140 l 394 100 l 334 60 l gs col-1 s gr n 199 170 m 139 210 l 199 250 l 259 210 l 199 170 l gs col-1 s gr n 479 120 m 419 160 l 479 200 l 539 160 l 479 120 l gs col-1 s gr n 479 220 m 419 260 l 479 300 l 539 260 l 479 220 l gs col-1 s gr n 326 319 m 319 319 319 357 7 arcto 4 {pop} repeat 319 364 467 364 7 arcto 4 {pop} repeat 474 364 474 326 7 arcto 4 {pop} repeat 474 319 326 319 7 arcto 4 {pop} repeat clp gs col-1 s gr n 419 159 m 364 159 l 364 179 l gs col-1 s gr n 366.000 171.000 m 364.000 179.000 l 362.000 171.000 l gs 2 setlinejoin col-1 s gr n 306 179 m 299 179 299 212 7 arcto 4 {pop} repeat 299 219 427 219 7 arcto 4 {pop} repeat 434 219 434 186 7 arcto 4 {pop} repeat 434 179 306 179 7 arcto 4 {pop} repeat clp gs col-1 s gr n 491 319 m 484 319 484 357 7 arcto 4 {pop} repeat 484 364 662 364 7 arcto 4 {pop} repeat 669 364 669 326 7 arcto 4 {pop} repeat 669 319 491 319 7 arcto 4 {pop} repeat clp gs col-1 s gr n 11 319 m 4 319 4 357 7 arcto 4 {pop} repeat 4 364 237 364 7 arcto 4 {pop} repeat 244 364 244 326 7 arcto 4 {pop} repeat 244 319 11 319 7 arcto 4 {pop} repeat clp gs col-1 s gr n 259 210 m 279 210 l 279 320 l gs col-1 s gr n 281.000 312.000 m 279.000 320.000 l 277.000 312.000 l gs 2 setlinejoin col-1 s gr n 419 259 m 389 259 l 389 319 l gs col-1 s gr n 391.000 311.000 m 389.000 319.000 l 387.000 311.000 l gs 2 setlinejoin col-1 s gr /Times-BoldItalic findfont 12.00 scalefont setfont 399 90 m gs 1 -1 scale (No) col-1 show gr /Times-BoldItalic findfont 12.00 scalefont setfont 254 90 m gs 1 -1 scale (Yes) col-1 show gr /Times-BoldItalic findfont 12.00 scalefont setfont 259 200 m gs 1 -1 scale (Yes) col-1 show gr /Times-BoldItalic findfont 12.00 scalefont setfont 124 200 m gs 1 -1 scale (No) col-1 show gr /Times-BoldItalic findfont 12.00 scalefont setfont 399 150 m gs 1 -1 scale (Yes) col-1 show gr /Times-BoldItalic findfont 12.00 scalefont setfont 489 215 m gs 1 -1 scale (No) col-1 show gr /Times-BoldItalic findfont 12.00 scalefont setfont 544 250 m gs 1 -1 scale (Yes) col-1 show gr /Times-BoldItalic findfont 12.00 scalefont setfont 404 250 m gs 1 -1 scale (No) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 459 280 m gs 1 -1 scale (Writable?) col-1 show gr /Times-Roman findfont 18.00 scalefont setfont 102 335 m gs 1 -1 scale (Return) col-1 show gr /Times-Roman findfont 18.00 scalefont setfont 547 335 m gs 1 -1 scale (Return) col-1 show gr /Times-Italic findfont 12.00 scalefont setfont 454 164 m gs 1 -1 scale (uid) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 474 164 m gs 1 -1 scale (== 0?) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 192 215 m gs 1 -1 scale (==) col-1 show gr /Times-Roman findfont 18.00 scalefont setfont 369 335 m gs 1 -1 scale (Return) col-1 show gr /Times-BoldItalic findfont 18.00 scalefont setfont 487 355 m gs 1 -1 scale (~USER) col-1 show gr /Courier-Bold findfont 18.00 scalefont setfont 549 354 m gs 1 -1 scale (.mailspool/) col-1 show gr /Courier-Bold findfont 18.00 scalefont setfont 542 354 m gs 1 -1 scale (/) col-1 show gr /Courier findfont 11.00 scalefont setfont 461 264 m gs 1 -1 scale (.mailspool/) col-1 show gr /Courier findfont 12.00 scalefont setfont 459 263 m gs 1 -1 scale (/) col-1 show gr /Times-Italic findfont 12.00 scalefont setfont 424 264 m gs 1 -1 scale (~USER) col-1 show gr /Courier findfont 12.00 scalefont setfont 207 215 m gs 1 -1 scale (home) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 239 215 m gs 1 -1 scale (?) col-1 show gr /Times-Italic findfont 12.00 scalefont setfont 155 215 m gs 1 -1 scale (NAME) col-1 show gr /Times-Roman findfont 18.00 scalefont setfont 341 194 m gs 1 -1 scale (Return) col-1 show gr /Times-Italic findfont 12.00 scalefont setfont 284 102 m gs 1 -1 scale (gid) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 302 103 m gs 1 -1 scale (== HLFS_GID?) col-1 show gr /Times-Roman findfont 12.00 scalefont setfont 474 249 m gs 1 -1 scale (Is) col-1 show gr /Courier-Bold findfont 18.00 scalefont setfont 322 354 m gs 1 -1 scale (/var/alt_mail/) col-1 show gr /Times-BoldItalic findfont 18.00 scalefont setfont 189 354 m gs 1 -1 scale (NAME) col-1 show gr /Times-BoldItalic findfont 18.00 scalefont setfont 6 353 m gs 1 -1 scale (~NAME) col-1 show gr /Courier-Bold findfont 18.00 scalefont setfont 69 353 m gs 1 -1 scale (/) col-1 show gr /Courier-Bold findfont 18.00 scalefont setfont 73 353 m gs 1 -1 scale (.mailspool/) col-1 show gr /Courier-Bold findfont 18.00 scalefont setfont 300 214 m gs 1 -1 scale (/.mailspool/) col-1 show gr $F2psEnd %%EndDocument @endspecial 371 1515 a Fl(Figure)g(1:)j Fk(Hlfsd)c Fl(resolving)h(the)g Fh(NAME)g Fl(comp)q(onen)o(t)f(of)h Fk(/mail/)p Fh(NAME)p 75 1565 V 175 1707 a Fl(The)c Fk(hlfsd)f Fl(serv)o(er)j(\014nds)f(out)f(the)h Fh(uid)782 1692 y Fg(2)810 1707 y Fl(of)f(the)h(pro)q(cess)h(that)e(is)g (accessing)h(its)g(moun)o(t)d(p)q(oin)o(t,)i(and)g(resolv)o(es)75 1756 y(the)j(pathname)e(comp)q(onen)o(t)g Fk(home)g Fl(as)i(a)f(sym)o(b)q (olic)e(link)h(to)h(a)g(sub)q(directory)h(within)f(the)h(home)e(directory)h (giv)o(en)75 1806 y(b)o(y)18 b(the)h Fh(uid)p Fl('s)f(en)o(try)h(in)e(the)i (passw)o(ord)g(\014le.)30 b(See)19 b(T)m(able)f(1.)30 b(If)18 b(the)h Fh(gid)f Fl(of)f(the)i(pro)q(cess)h(that)e(attempts)g(to)75 1856 y(access)c(a)f(mailb)q(o)o(x)d(\014le)i(is)h(a)f(sp)q(ecial)h(one)g (\(called)f(HLFS)p 976 1856 13 2 v 16 w(GID\),)f(then)j(the)f(serv)o(er)h (maps)d(the)j(name)d(of)h(the)h(next)p 1795 1863 80 2 v 75 1906 a(pathname)h(comp)q(onen)o(t)h(directly)h(to)g(the)g(user's)g(mailb)q(o) o(x)d(\(T)m(able)i(2\).)23 b(This)15 b(is)h(necessary)h(so)f(that)g(access)h (to)75 1956 y(a)d(mailb)q(o)o(x)e(\014le)i(b)o(y)h(users)h(other)f(than)g (the)g(o)o(wner)g(can)f(succeed.)23 b(The)15 b(serv)o(er)h(has)f(safet)o(y)f (features)i(in)e(case)i(of)75 2006 y(failures)d(suc)o(h)i(as)f(h)o(ung)g (\014lesystems)g(or)g(home)e(directory)j(\014lesystems)f(that)g(are)g (inaccessible)h(or)f(full.)175 2080 y(On)20 b(most)f(of)g(our)h(mac)o(hines,) g(mail)e(gets)j(deliv)o(ered)f(to)g(the)h(directory)f Fk(/var/spool/mail)p Fl(.)1720 2065 y Fg(3)1772 2080 y Fl(Man)o(y)75 2130 y(programs,)12 b(including)g(UAs,)i(dep)q(end)h(on)e(that)h(path.)k Fk(Hlfsd)12 b Fl(creates)k(a)d(directory)h Fk(/mail)p Fl(,)f(and)g(moun)o(ts)f(itself)75 2180 y(on)18 b(top)h(of)f(that)h(directory)m(.)32 b Fk(Hlfsd)18 b Fl(implem)o(en)o(ts)f(the)i(path)g(name)e(comp)q(onen)o(t)h(called)g Fk(home)p Fl(,)h(p)q(oin)o(ting)e(to)75 2230 y(a)f(sub)q(directory)j(of)d (the)h(user's)h(home)e(directory)m(.)27 b(W)m(e)16 b(ha)o(v)o(e)h(made)e Fk(/var/spool/mail)f Fl(a)i(sym)o(b)q(olic)f(link)h(to)75 2280 y Fk(/mail/home)p Fl(,)d(so)i(that)g(accessing)h Fk(/var/spool/mail)c Fl(actually)i(causes)i(access)h(to)e(a)g(sub)q(directory)h(within)e(a)75 2329 y(user's)h(home)e(directory)m(.)175 2404 y(The)20 b(rest)h(of)f(this)g (pap)q(er)g(is)g(organized)g(as)g(follo)o(ws.)35 b(Section)21 b(2)e(discusses)j(in)e(detail)f(the)i(problems)75 2454 y(and)e(limitations)d (of)j(other)h(home-mai)o(l-deli)o(v)o(ery)d(metho)q(ds.)34 b(Section)19 b(3)g(detail)g(the)h(design)f(of)g(the)h Fh(Home-)p 75 2488 720 2 v 121 2515 a Ff(1)139 2527 y Fe(In)10 b(Figure)g(1,)h Fd(~)p Fc(NAME)h Fe(is)f(the)g(home)f(directory)e(of)j(the)g(user)f(whose)h (user-name)d(is)j Fc(NAME)p Fe(;)i Fd(~)p Fc(USER)e Fe(is)h(the)e(home)g (directory)75 2566 y(of)h(the)g(user)g(with)g(user-id)f Fc(uid)p Fe(.)121 2594 y Ff(2)139 2606 y Fe(NFS)h(uses)g(e\013ectiv)o(e)e Fc(uids)p Fe(.)121 2634 y Ff(3)139 2646 y Fe(Other)i(directories)f(used)h (for)g(this)h(purp)q(ose)e(are)h Fd(/var/mail)f Fe(on)h(SVR4,)h Fd(/usr/mail)d Fe(on)j(other)f(System)f(V-based)h(op)q(erating-)75 2685 y(systems,)f(and)g Fd(/usr/spool/)o(mai)o(l)f Fe(on)i(BSD-based)e (systems.)965 2825 y Fl(2)p eop %%Page: 3 3 bop 75 4 1800 5 v 229 58 a Fl(Conditions:)17 b Fh(uid)p Fl(=)p Fk(ezk)p Fl(,)c Fh(gid)p Fi(6)p Fl(=HLFS)p 828 58 13 2 v 16 w(GID,)f(and)i Fk(/users/ezk/.mailsp)o(ool/)c Fl(is)k(writable.)p 157 77 1636 2 v 156 127 2 50 v 165 127 V 190 112 a Fm(Resolving)p 453 127 V 1088 127 V 1784 127 V 1793 127 V 156 177 V 165 177 V 190 162 a(comp)q(onen)o(t)p 453 177 V 58 w(P)o(athname)g(left)p 1088 177 V 337 w(V)l(alue)h(if)g(sym)o(b)q(olic)f(link)p 1784 177 V 1793 177 V 157 179 1636 2 v 157 189 V 156 238 2 50 v 165 238 V 190 223 a Fk(/)p 453 238 V 267 w(var/mail/)p Fh(NAME)p 1088 238 V 1784 238 V 1793 238 V 157 240 1636 2 v 156 290 2 50 v 165 290 V 190 275 a Fk(var)p Fl(/)p 453 290 V 202 w Fk(mail/)p Fh(NAME)p 1088 290 V 1784 290 V 1793 290 V 157 291 1636 2 v 156 341 2 50 v 165 341 V 190 326 a Fk(mail)p Fl(@)p 453 341 V 169 w Fk(/mail/home/)p Fh(NAME)p 1088 341 V 265 w Fk(mail)p Fl(@)g Fi(\))f Fk(/mail/home)p 1784 341 V 1793 341 V 157 343 1636 2 v 156 393 2 50 v 165 393 V 190 378 a(/)p 453 393 V 267 w(mail/home/)p Fh(NAME)p 1088 393 V 1784 393 V 1793 393 V 157 394 1636 2 v 156 444 2 50 v 165 444 V 190 429 a Fk(mail)p Fl(/)p 453 444 V 180 w Fk(home/)p Fh(NAME)p 1088 444 V 1784 444 V 1793 444 V 157 446 1636 2 v 156 496 2 50 v 165 496 V 190 481 a Fk(home)p Fl(@)p 453 496 V 169 w Fh(NAME)p 1088 496 V 507 w Fk(home)p Fl(@)h Fi(\))f Fk(/users/ezk/.mailsp)o(ool)p 1784 496 V 1793 496 V 157 497 1636 2 v 156 547 2 50 v 165 547 V 190 532 a(/)p 453 547 V 267 w(users/ezk/.mailsp)o(ool/)o Fh(NAME)p 1088 547 V 1784 547 V 1793 547 V 157 549 1636 2 v 156 599 2 50 v 165 599 V 190 584 a Fk(users)p Fl(/)p 453 599 V 158 w Fk(ezk/.mailspool/)p Fh(NA)o(ME)p 1088 599 V 1784 599 V 1793 599 V 157 600 1636 2 v 156 650 2 50 v 165 650 V 190 635 a Fk(ezk)p Fl(/)p 453 650 V 202 w Fk(.mailspool/)p Fh(NAME)p 1088 650 V 1784 650 V 1793 650 V 157 652 1636 2 v 156 702 2 50 v 165 702 V 190 687 a Fk(.mailspool)p Fl(/)p 453 702 V 48 w Fh(NAME)p 1088 702 V 1784 702 V 1793 702 V 157 703 1636 2 v 156 753 2 50 v 165 753 V 190 738 a(NAME)p 453 753 V 1088 753 V 1784 753 V 1793 753 V 157 755 1636 2 v 290 829 a Fl(T)m(able)g(1:)18 b(Resolving)13 b Fk(/var/mail/)p Fh(NAME)f Fl(to)h Fk(/users/ezk/.mailspo)o (ol/)p Fh(NAME)p 75 879 1800 5 v 75 1000 a(Link)19 b(File)f(System)h Fl(and)f(Section)g(4)g(describ)q(es)i(the)f(implemen)o(tation)c(of)i Fk(hlfsd)o Fl(.)31 b(Section)19 b(5)f(ev)n(aluates)g(our)75 1050 y(implemen)o(tatio)o(n.)e(Related)d(systems,)h(conclusions,)g(future)g (directions,)g(and)g(alternativ)o(e)g(uses)h(are)f(describ)q(ed)75 1100 y(in)f(Sections)i(6)f(and)f(7.)75 1208 y Fj(2)56 b(Bac)n(kground)175 1283 y Fl(This)16 b(section)h(pro)o(vides)f(an)g(in-depth)g(discussion)h(of)f (wh)o(y)g(a)o(v)n(ailable)d(metho)q(ds)j(for)g(deliv)o(ering)g(mail)d(to)75 1333 y(home)g(directories)i(are)f(not)g(as)g(go)q(o)q(d)f(as)h(the)h(one)f (used)h(b)o(y)e Fk(hlfsd)o Fl(.)75 1441 y Fj(2.1)56 b(Single-Host)17 b(Mail)h(Sp)r(o)r(ol)g(Directory)175 1516 y Fl(The)d(most)e(common)f(metho)q (d)i(for)g(mail)e(deliv)o(ery)i(is)h(for)f(mail)e(to)i(b)q(e)h(app)q(ended)h (to)f(a)f(mailb)q(o)o(x)e(\014le)i(in)g(a)75 1566 y(standard)d(sp)q(o)q(ol)f (directory)h(on)f(the)h(designated)g(\\mail)c(home")i(mac)o(hine)g(of)h(the)h (user.)17 b(The)11 b(greatest)h(adv)n(an)o(tage)75 1616 y(of)i(this)h(metho)q (d)f(is)g(that)h(it)f(is)h(the)g(default)f(metho)q(d)g(most)g(v)o(endors)h (pro)o(vide)g(with)f(their)h(systems,)g(th)o(us)g(v)o(ery)75 1665 y(little)h(\(if)g(an)o(y\))g(con\014guration)g(is)h(required)g(on)f(the) i(SA's)e(part.)26 b(All)16 b(they)h(need)h(to)e(set)i(up)e(are)h(mail)d (aliases)75 1715 y(directing)g(mail)c(to)j(the)h(host)g(on)f(whic)o(h)g(the)h (user's)h(mailb)q(o)o(x)10 b(\014le)k(is)f(assigned.)18 b(\(Otherwise,)d (mail)10 b(is)j(deliv)o(ered)75 1765 y(lo)q(cally)m(,)f(and)h(users)j(\014nd) e(mailb)q(o)o(xes)d(on)j(man)o(y)e(mac)o(hines.\))175 1840 y(As)k(users)i(b)q(ecome)e(more)f(sophisticated,)i(and)f(aided)g(b)o(y)g (windo)o(wing)f(systems,)i(they)f(\014nd)h(themselv)o(es)75 1890 y(logging)12 b(in)i(on)g(m)o(ultiple)e(hosts)j(at)f(once,)g(p)q (erforming)f(sev)o(eral)i(tasks)g(concurren)o(tly)m(.)k(They)c(ask)f(to)g(b)q (e)h(able)f(to)75 1939 y(read)g(their)h(mail)c(on)j(an)o(y)f(host)h(on)g(the) g(net)o(w)o(ork,)g(not)g(just)g(the)g(one)g(designated)h(as)f(their)g(\\mail) d(home.")75 2047 y Fj(2.2)56 b(Cen)n(tralized)18 b(Mail)g(Sp)r(o)r(ol)f (Directory)175 2122 y Fl(A)f(p)q(opular)g(metho)q(d)f(for)h(pro)o(viding)f (mail)f(readabilit)o(y)h(from)g(an)o(y)h(host)g(is)g(to)h(ha)o(v)o(e)f(all)f (mail)e(deliv)o(ered)75 2172 y(to)18 b(a)g(mail)e(sp)q(o)q(ol)i(directory)h (on)f(a)g(designated)h(\\mail-serv)o(er")e(whic)o(h)h(is)g(exp)q(orted)h(via) f(NFS)g(to)h(all)e(of)g(the)75 2222 y(hosts)f(on)g(the)g(net)o(w)o(ork.)24 b(Con\014guring)15 b(suc)o(h)h(a)f(system)h(is)f(relativ)o(ely)g(easy)m(.)24 b(On)16 b(most)e(systems,)i(the)g(bulk)g(of)75 2272 y(the)i(w)o(ork)f(is)h(a) f(one-time)f(addition)g(to)i(one)f(or)h(t)o(w)o(o)f(con\014guration)g (\014les)h(in)f Fk(/etc)p Fl(.)28 b(The)17 b(\014le-serv)o(er's)i(sp)q(o)q (ol)75 2322 y(directory)d(is)f(then)h(hard-moun)o(ted)e(across)i(ev)o(ery)g (mac)o(hine)e(on)h(the)h(lo)q(cal)e(net)o(w)o(ork.)22 b(In)16 b(small)d(en)o(vironmen)o(ts)75 2371 y(with)f(only)g(a)g(handful)g(of)g (hosts)h(this)f(can)h(b)q(e)g(an)f(acceptable)i(solution.)i(In)d(our)f (departmen)o(t,)h(with)f(a)g(couple)h(of)75 2421 y(h)o(undred)j(activ)o(e)f (hosts)h(and)f(thousands)g(of)g(mail)d(messages)j(pro)q(cessed)j(daily)m(,)13 b(this)i(w)o(as)g(deemed)g(completely)75 2471 y(unacceptable,)g(as)f(it)f(in) o(tro)q(duced)i(sev)o(eral)f(t)o(yp)q(es)h(of)e(problems:)137 2587 y Fi(\017)21 b Fm(Scalabili)o(t)o(y)12 b(and)i(P)o(erformance)p Fl(:)h(as)d(more)g(and)h(more)f(mac)o(hines)g(get)h(added)g(to)g(the)g(net)o (w)o(ork,)g(more)179 2637 y(mail)7 b(tra\016c)j(has)g(to)g(go)f(o)o(v)o(er)h (NFS)g(to)g(and)g(from)e(the)j(mail-serv)o(er.)k(Users)c(lik)o(e)f(to)f(run)i (mail-w)o(a)o(tc)o(hers[2)n(,)f(7)o(])179 2687 y(and)g(read)i(their)f(mail)d (often.)17 b(The)11 b(stress)i(on)d(the)i(shared)g(infrastructure)g (increases)g(with)f(ev)o(ery)g(user)h(and)965 2825 y(3)p eop %%Page: 4 4 bop 179 42 a Fl(host)14 b(added;)f(loads)g(on)h(the)g(mail)d(serv)o(er)k(w)o (ould)e(most)f(certainly)i(b)q(e)g(high)f(since)i(all)d(mail)f(deliv)o(ery)j (go)q(es)179 91 y(through)i(that)h(one)g(mac)o(hine.)672 76 y Fg(4)715 91 y Fl(This)g(leads)g(to)f(lo)o(w)o(er)g(reliabilit)o(y)f(and)h (p)q(erformance.)26 b(T)m(o)16 b(reduce)i(the)179 141 y(n)o(um)o(b)q(er)11 b(of)g(concurren)o(t)j(connections)f(b)q(et)o(w)o(een)g(clien)o(ts)f(and)g (the)h(serv)o(er)g(host,)f(some)f(SAs)i(ha)o(v)o(e)e(resorted)179 191 y(to)16 b(automoun)o(ting)e(the)j(mail-sp)q(o)q(ol)c(directory)m(.)26 b(But)17 b(this)g(solution)e(only)h(mak)o(es)f(things)h(w)o(orse:)24 b(since)179 241 y(users)15 b(often)e(run)h(mail)d(w)o(atc)o(hers,)j(and)f (man)o(y)e(p)q(opular)i(applications)g(suc)o(h)h(as)f Fk(trn)p Fl(,)g Fk(emacs)p Fl(,)f Fk(csh)g Fl(or)i Fk(ksh)179 291 y Fl(c)o(hec)o(k)h(p)q(erio)q(dically)f(for)g(new)h(mail,)d(the)j(automoun)o (ted)e(directory)i(w)o(ould)f(b)q(e)h(e\013ectiv)o(ely)h(p)q(ermanen)o(tly) 179 340 y(moun)o(ted.)g(If)c(it)g(gets)i(unmoun)o(ted)d(automatically)e(b)o (y)k(the)g(automoun)o(ter)e(program[3)n(],)h(it)g(is)g(most)f(lik)o(ely)179 390 y(to)17 b(get)h(moun)o(ted)e(shortly)i(afterw)o(ards,)g(consuming)e(more) h(I/O)g(resources)j(b)o(y)d(the)h(constan)o(t)g(cycle)h(of)179 440 y Fk(mount)13 b Fl(and)g Fk(umount)g Fl(calls.)137 523 y Fi(\017)21 b Fm(Reliabil)o(i)o(t)o(y)p Fl(:)16 b(the)f(mail-serv)o(er)f (host)h(and)f(its)h(net)o(w)o(ork)f(connectivit)o(y)h(m)o(ust)f(b)q(e)h(v)o (ery)g(reliable.)k(W)m(orse,)179 573 y(since)g(the)g(sp)q(o)q(ol)f(directory) h(has)f(to)g(b)q(e)h(hard-moun)o(ted,)1117 558 y Fg(5)1153 573 y Fl(man)o(y)d(pro)q(cesses)21 b(whic)o(h)d(access)i(the)f(sp)q(o)q(ol) 179 623 y(directory)f(\(v)n(arious)e(shells,)i Fk(login)p Fl(,)f Fk(emacs)p Fl(,)f(etc.\))30 b(w)o(ould)16 b(b)q(e)i(h)o(ung)f(as)g(long)g(as) g(connectivit)o(y)g(to)g(the)179 672 y(mail-serv)o(er)9 b(is)h(sev)o(ered.)19 b(T)m(o)10 b(impro)o(v)o(e)f(reliabilit)o(y)m(,)f(SAs)j(ma)o(y)e(c)o(ho)q (ose)i(to)f(bac)o(kup)h(the)g(mail-serv)o(er's)e(sp)q(o)q(ol)179 722 y(partition)16 b(sev)o(eral)h(times)g(a)f(da)o(y)m(.)27 b(This)17 b(ma)o(y)e(mak)o(e)g(things)i(w)o(orse)h(since)f(reading)g(or)g (deliv)o(ering)g(mail)179 772 y(while)e(bac)o(kups)h(are)g(in)f(progress)i (ma)o(y)d(cause)j(bac)o(kups)f(to)f(b)q(e)i(inconsisten)o(t;)f(more)f(bac)o (kups)h(consume)179 822 y(more)d(bac)o(kup-media)f(resources,)k(and)d (increase)j(the)e(load)f(on)h(the)g(mail-serv)o(er)f(host.)75 946 y Fj(2.3)56 b(Distributed)17 b(Mail)h(Sp)r(o)r(ol)g(Service)175 1022 y Fl(Despite)d(the)f(existence)i(of)e(a)g(few)g(systems)h(that)f(supp)q (ort)h(deliv)o(ery)f(to)h(users')g(home)e(directories,)1763 1007 y Fg(6)1797 1022 y Fl(mail)75 1071 y(deliv)o(ery)18 b(to)f(home)g (directories)i(hasn't)e(caugh)o(t)h(on.)29 b(W)m(e)17 b(b)q(eliev)o(e)i(the)f (main)d(reason)k(is)e(that)h(there)h(are)f(to)q(o)75 1121 y(man)o(y)12 b(programs)h(that)h(\\kno)o(w")g(where)h(mailb)q(o)o(x)c(\014les)k(reside.)20 b(Besides)15 b(the)g(ob)o(vious)f(\(the)h(deliv)o(ery)f(program)75 1171 y Fk(/bin/mail)9 b Fl(and)i(mail)e(readers)k(lik)o(e)d Fk(/usr/ucb/Mail)p Fl(,)f Fk(mush)p Fl(,)h Fk(mm)p Fl(,)h(etc.\),)h(other)g (programs)e(that)h(kno)o(w)g(mailb)q(o)o(x)75 1221 y(lo)q(cation)g(are)g Fk(login)p Fl(,)g Fk(from)p Fl(,)g(almost)e(ev)o(ery)j(shell,)g Fk(xbiff)p Fl(,)e Fk(xmailbox)p Fl(,)g(and)h(ev)o(en)h(some)f(programs)f(not) i(directly)75 1271 y(related)h(to)g(mail,)c(suc)o(h)14 b(as)f Fk(emacs)e Fl(and)i Fk(trn)p Fl(.)k(Although)12 b(some)f(of)h(these)i (programs)e(can)h(b)q(e)g(con\014gured)g(to)g(lo)q(ok)75 1320 y(in)18 b(di\013eren)o(t)h(directories)g(with)f(the)g(use)h(of)e(en)o (vironmen)o(t)g(v)n(ariables)h(and)g(other)g(resources,)j(man)o(y)16 b(of)i(them)75 1370 y(cannot.)g(The)d(o)o(v)o(erall)d(p)q(orting)i(w)o(ork)f (is)h(signi\014can)o(t.)175 1445 y(Other)g(metho)q(ds)f(that)g(ha)o(v)o(e)g (y)o(et)g(to)g(catc)o(h)h(on)f(require)h(the)g(use)g(of)e(a)h(sp)q(ecial)h (mail-reading)c(serv)o(er,)k(suc)o(h)75 1495 y(as)g(IMAP[16)o(])f(or)h(POP)q ([17)o(].)j(The)d(main)e(disadv)n(an)o(tage)h(of)g(these)i(systems)f(is)f (that)h(UAs)g(need)h(to)e(b)q(e)h(mo)q(di\014ed)75 1545 y(to)i(use)h(these)g (services)h(|)d(a)h(long)f(and)h(in)o(v)o(olv)o(ed)f(task.)24 b(That)16 b(is)g(wh)o(y)f(they)i(are)f(not)g(p)q(opular)g(at)g(this)g(time.) 75 1594 y(See)f(Section)f(6.1)f(for)h(more)e(details.)175 1669 y(Sev)o(eral)h(other)i(ideas)e(ha)o(v)o(e)h(b)q(een)g(prop)q(osed)h(and)e(ev) o(en)h(used)h(in)e(v)n(arious)g(en)o(vironmen)o(ts.)k(None)d(of)f(them)75 1719 y(is)g(robust.)18 b(They)c(are)g(mostly)d(v)o(ery)j(sp)q(ecialized,)f (in\015exible,)g(and)g(do)g(not)g(extend)h(to)f(the)h(general)f(case.)19 b(Some)75 1769 y(of)13 b(the)i(ideas)f(are)g(plain)f(bad,)g(p)q(oten)o (tially)g(leading)g(to)h(lost)f(or)h(corrupt)h(mail:)137 1885 y Fi(\017)21 b Fm(automoun)o(ter)o(s)p Fl(:)14 b(using)f(an)f(automoun)o(ter) f(suc)o(h)i(as)g Fk(amd)p Fl([13)n(])f(to)g(pro)o(vide)g(a)g(set)i(of)d(sym)o (b)q(olic)g(links)h(from)179 1935 y(the)h(normal)e(sp)q(o)q(ol)i(directory)g (to)g(user)h(home)d(directories)j(is)f(not)g(su\016cien)o(t.)18 b(UAs)13 b(rename,)f(unlink,)g(and)179 1985 y(recreate)20 b(the)f(mailb)q(o)o (x)c(as)k(a)f(regular)g(\014le,)h(therefore)g(it)f(m)o(ust)f(b)q(e)i(a)f (real)g(\014le,)h(not)f(a)g(sym)o(b)q(olic)e(link.)179 2034 y(F)m(urthermore,)d(it)g(m)o(ust)f(reside)j(in)e(a)g(real)g(directory)i(whic) o(h)e(is)g(writable)g(b)o(y)h(the)g(UAs)g(and)f(MT)m(As.)18 b(This)179 2084 y(metho)q(d)c(ma)o(y)g(also)h(require)h(p)q(opulating)e Fk(/var/spool/mail)e Fl(with)j(sym)o(b)q(olic)f(links)h(and)g(making)e(sure) 179 2134 y(they)j(are)g(up)q(dated.)24 b(Making)15 b Fk(amd)g Fl(manage)f(that)i(directory)g(directly)g(fails,)f(since)i(man)o(y)c(v)n (arious)i(lo)q(c)o(k)179 2184 y(\014les)g(need)g(to)g(b)q(e)g(managed)e(as)h (w)o(ell)g(\(see)i(Section)f(4.6\).)k(Also,)14 b Fk(amd)g Fl(do)q(es)h(not)g (pro)o(vide)f(all)g(of)g(the)h(NFS)179 2234 y(op)q(erations)f(whic)o(h)g(are) g(required)h(to)f(write)g(mail)d(suc)o(h)k(as)f Fh(write)p Fl(,)e Fh(cr)n(e)n(ate)p Fl(,)h Fh(r)n(emove)p Fl(,)g(and)g Fh(unlink)p Fl(.)137 2317 y Fi(\017)21 b Fm($MAIL)p Fl(:)15 b(setting)g(this)h(v)n(ariable)e(to)h(an)h(automoun)o(ted)e(directory)i(p)q (oin)o(ting)e(to)h(the)h(user's)g(mail)d(sp)q(o)q(ol)179 2367 y(host)g(only)f(solv)o(es)i(the)f(problem)f(for)h(those)g(programs)f(whic)o (h)h(kno)o(w)f(and)h(use)h($MAIL.)f(Man)o(y)f(programs)179 2416 y(don't,)j(therefore)i(this)e(solution)g(is)g(partial)g(and)g(of)g (limited)e(\015exibilit)o(y)m(.)21 b(Also,)15 b(it)g(requires)i(the)f(SAs)g (or)179 2466 y(the)e(users)i(to)d(set)i(it)f(themselv)o(es)g(|)f(an)h(added)g (lev)o(el)f(of)h(incon)o(v)o(enience)g(and)g(p)q(ossible)g(failures.)p 75 2501 720 2 v 121 2528 a Ff(4)139 2539 y Fe(Deliv)o(ery)8 b(via)i(NFS-moun)o(ted)e(\014lesystems)h(ma)o(y)g(require)g(usage)h(of)g Fd(rpc.lockd)e Fe(and)i Fd(rpc.statd)d Fe(to)k(pro)o(vide)d(distributed)g (\014le-)75 2579 y(lo)q(c)o(king,)j(b)q(oth)g(of)i(whic)o(h)f(are)g(widely)f (regarded)g(as)h(unstable)f(and)g(unreliable.)16 b(F)m(urthermore,)10 b(this)i(will)h(degrade)d(p)q(erformance)o(,)75 2618 y(as)h(lo)q(cal)g(pro)q (cesses)e(as)i(w)o(ell)h(as)f(remote)f Fd(nfsd)g Fe(pro)q(cesses)g(are)h(k)o (ept)f(busy)m(.)121 2646 y Ff(5)139 2658 y Fe(No)h(SA)h(in)f(their)g(righ)o (t)f(minds)g(w)o(ould)h(soft-moun)o(t)e(read/write)g(partitions)g(|)j(the)f (c)o(hances)e(for)i(data)g(loss)g(are)g(to)q(o)f(great.)121 2686 y Ff(6)139 2697 y Fe(AIX)i(1.2's)e Fd(bellmail)f Fe(for)i(the)g(IBM)h (PS/2)p Fc(s)p Fe([9)n(],)f Fd(/bin/mail)e Fe(on)i(SunOS)f(for)h(the)g(Sun)f (386i)h(mac)o(hines,)e(and)h Fd(zmailer)p Fe([27)m(].)965 2825 y Fl(4)p eop %%Page: 5 5 bop 137 42 a Fi(\017)21 b Fm(/bin/mail)o Fl(:)h(using)17 b(a)g(di\013eren)o (t)h(mail)d(deliv)o(ery)i(agen)o(t)g(could)g(b)q(e)h(the)g(solution.)27 b(One)18 b(suc)o(h)g(example)179 91 y(is)h Fk(hdmail)p Fl([6)n(].)34 b(Ho)o(w)o(ev)o(er,)21 b Fk(hdmail)d Fl(still)h(requires)h(mo)q(difying)d (all)h(UAs,)j(the)f(MT)m(A's)f(con\014guration,)179 141 y(installing)c(new)i (daemons,)e(and)i(c)o(hanging)e(login)h(scripts.)27 b(This)16 b(mak)o(es)g(the)h(system)f(less)h(upgradable)179 191 y(or)f(compatible)f (with)i(others,)h(and)e(adds)h(one)g(more)f(complicated)f(system)h(for)h(SAs) g(to)f(deal)h(with.)26 b(It)179 241 y(is)14 b(not)g(a)g(complete)g(solution)g (b)q(ecause)i(it)e(still)f(requires)j(eac)o(h)f(user)g(ha)o(v)o(e)g(their)f ($MAIL)h(v)n(ariable)e(setup)179 291 y(correctly)m(,)h(and)g(that)g(ev)o(ery) g(program)e(use)j(this)f(v)n(ariable.)75 415 y Fj(2.3.1)55 b(Wh)n(y)19 b(Deliv)n(er)e(In)n(to)i(the)f(Home)f(Directory?)175 490 y Fl(There)g(are)f(sev)o(eral)g(ma)r(jor)e(reasons)j(wh)o(y)f(SAs)g(migh) o(t)e(w)o(an)o(t)h(to)h(deliv)o(er)g(mail)d(directly)j(in)o(to)f(the)i (users')75 540 y(home)c(directories:)137 656 y Fi(\017)21 b Fm(Lo)q(cation)p Fl(:)16 b(man)o(y)c(mail)g(readers)j(need)g(to)f(mo)o(v)o(e) e(mail)f(from)h(the)j(sp)q(o)q(ol)e(directory)i(to)f(the)g(user's)h(home)179 706 y(directory)m(.)j(It)13 b(sp)q(eeds)h(up)f(this)g(op)q(eration)g(if)e (the)j(t)o(w)o(o)e(are)h(on)g(the)g(same)f(\014lesystem.)18 b(If)12 b(for)g(some)g(reason)179 756 y(the)19 b(user's)g(home)e(directory)i (is)g(inaccessible,)h(it)e(isn't)g(that)g(useful)g(to)h(b)q(e)g(able)f(to)g (read)h(mail,)d(since)179 806 y(there)f(is)e(no)g(place)h(to)f(mo)o(v)o(e)f (it)i(to.)737 791 y Fg(7)773 806 y Fl(In)f(some)g(cases,)i(trying)e(to)g(mo)o (v)o(e)f(mail)f(to)i(a)h(non-existen)o(t)g(or)f(h)o(ung)179 856 y(\014lesystem)g(ma)o(y)f(result)j(in)f(mail)d(loss.)137 939 y Fi(\017)21 b Fm(Distrib)o(uti)o(on)o Fl(:)27 b(ha)o(ving)19 b(all)f(mail)f(sp)q(o)q(ol)j(directories)h(spread)f(among)e(the)i(man)o(y)e (more)h(\014lesystems)179 988 y(minim)o(izes)14 b(the)j(c)o(hances)h(that)f (complete)f(en)o(vironmen)o(ts)g(will)f(grind)h(to)g(a)g(halt)g(when)h(a)f (single)g(serv)o(er)179 1038 y(is)e(do)o(wn.)19 b(It)c(do)q(es)g(increase)g (the)g(c)o(hance)h(that)e(there)i(will)d(b)q(e)i(someone)f(who)g(is)g(not)g (able)g(to)h(read)g(their)179 1088 y(mail)d(when)j(a)g(mac)o(hine)e(is)i(do)o (wn,)f(but)h(that)g(is)g(usually)f(preferred)j(to)d(ha)o(ving)g(no)h(one)g(b) q(e)g(able)g(to)f(read)179 1138 y(their)j(mail)e(b)q(ecause)k(a)d(cen)o (tralized)i(mail)d(serv)o(er)k(is)d(do)o(wn.)28 b(The)17 b(problem)f(of)h (losing)f(some)g(mail)e(due)179 1188 y(to)i(the)h(\(presumably\))f(higher)g (c)o(hances)i(that)e(a)g(user's)i(mac)o(hine)d(is)h(do)o(wn)g(is)g(minimi)o (zed)e(in)i(HLFS)h(as)179 1237 y(describ)q(ed)e(in)f(Sections)h(4.3)d(and)i (4.4.)137 1320 y Fi(\017)21 b Fm(Securit)o(y)p Fl(:)e(deliv)o(ering)d(mail)d (to)j(users')g(home)f(directories)i(has)f(another)h(adv)n(an)o(tage)e(|)g (enhanced)i(se-)179 1370 y(curit)o(y)e(and)g(priv)n(acy)m(.)21 b(Since)15 b(a)g(shared)h(system)f(mail)d(sp)q(o)q(ol)j(directory)h(has)f(to) g(b)q(e)h(w)o(orld-readable)e(and)179 1420 y(searc)o(hable,)376 1405 y Fg(8)407 1420 y Fl(an)o(y)d(user)i(can)f(see)i(whether)f(other)f (users)h(ha)o(v)o(e)f(mail,)d(when)k(they)f(last)g(receiv)o(ed)h(new)f(mail,) 179 1470 y(or)j(when)h(they)g(last)f(read)h(their)g(mail.)k(Programs)14 b(suc)o(h)i(as)g Fk(finger)e Fl(displa)o(y)g(this)i(information,)c(whic)o(h) 179 1520 y(some)f(consider)i(an)f(infringemen)o(t)f(of)h(priv)n(acy)m(.)k (While)c(it)g(is)g(p)q(ossible)g(to)g(disable)g(this)h(feature)g(of)e Fk(finger)179 1570 y Fl(so)16 b(that)f(remote)g(users)j(cannot)d(see)i(a)f (mailb)q(o)o(x)c(\014le's)k(status,)g(this)g(do)q(esn't)g(prev)o(en)o(t)h(lo) q(cal)e(users)i(from)179 1619 y(getting)d(the)g(information.)i(F)m (urthermore,)e(there)h(are)g(more)e(programs)g(whic)o(h)h(mak)o(e)e(use)j(of) f(this)g(infor-)179 1669 y(mation.)24 b(In)17 b(shared)h(en)o(vironmen)o(ts,) e(disabling)f(suc)o(h)j(programs)d(has)i(to)g(b)q(e)g(done)g(on)g(a)f (system-wide)179 1719 y(basis,)i(but)g(with)g(mail)d(deliv)o(ered)j(to)g (users')h(home)e(directories,)i(users)h(less)e(concerned)i(with)d(priv)n(acy) 179 1769 y(who)f Fh(do)g Fl(w)o(an)o(t)f(to)h(let)g(others)h(kno)o(w)f(when)g (they)h(last)f(receiv)o(ed)h(or)f(read)g(mail)e(can)i(easily)f(do)h(so)g (using)179 1819 y(\014le)e(protection)i(bits.)k(Lastly)m(,)14 b(on)g(systems)h(that)g(do)f(not)h(exp)q(ort)g(their)g(NFS)g(\014lesystem)f (with)h Fk(anon=0)p Fl(,)179 1868 y(sup)q(erusers)f(are)e(less)g(lik)o(ely)d (to)j(sno)q(op)f(around)g(others')h(mail,)d(as)i(they)h(b)q(ecome)f(\\nob)q (o)q(dies")g(across)h(NFS.)175 1985 y(In)j(summary)m(,)e(deliv)o(ering)i (mail)d(to)k(home)e(directories)j(pro)o(vides)f(users)h(the)f(functionalit)o (y)e(sough)o(t,)h(and)75 2034 y(also)e(a)o(v)o(oids)g(most)g(of)g(the)i (problems)e(discussed)i(in)f(Section)g(2.2.)75 2142 y Fj(3)56 b(Design)175 2218 y Fl(W)m(e)16 b(named)f(our)h(\014le)h(system)f(the)h Fh(Home-Link)h(File)e(System)p Fl(,)h(b)q(ecause)h(that's)f(all)e(it)h(do)q (es)h(|)f(pro)o(vide)75 2267 y(sym)o(b)q(olic)11 b(links)g(to)i(\014les)f (and)h(directories)g(in)f(a)g(user's)i(home)d(directory)m(.)18 b(The)13 b(soft)f(link)f(has)i(a)f(\014xed)h(name,)e(but)75 2317 y(unlik)o(e)16 b(regular)h(soft)g(links,)f(what)h(it)f(p)q(oin)o(ts)h (to)f(is)h(\\dynamic")e(dep)q(ending)i(on)f(who)h(accesses)i(the)f(sym)o(b)q (olic)75 2367 y(link.)25 b(The)18 b(ideas)e(that)h(this)g(\014lesystem)f (represen)o(ts)k(are)d(not)f(limited)f(just)i(to)f(handling)g(electronic)h (mail)d(|)75 2417 y(that)g(is)g(only)f(one)h(application)e(of)i(this)g (\014lesystem.)j(See)e(Sections)g(7.1)e(and)g(7.2)g(for)h(other)g(ideas.)175 2491 y(Our)g(k)o(ey)g(goals)f(in)g(designing)h(HLFS)g(w)o(ere:)p 75 2526 720 2 v 121 2553 a Ff(7)139 2565 y Fe(This)e(assumes)f(that)h(they)g (can)g(login)f(to)i(a)f(di\013eren)o(t)f(host.)18 b(Some)11 b(systems,)g(suc)o(h)h(as)h(HP-UX,)h(do)e(not)g(allo)o(w)g(login)g(if)g(they) 75 2604 y(cannot)e Fd(chdir)g Fe(to)h(the)g(user's)f(home)g(directory)m(.)121 2632 y Ff(8)139 2644 y Fe(System)g(V)i(has)g(the)f(mail)g(sp)q(o)q(ol)f (directory)g(only)h(group)f(writable)h(but)g(that)g(mak)o(es)f(it)i(more)f (di\016cult)g(to)g(install)g(other)f(UAs)75 2683 y(or)h(MT)m(As.)965 2825 y Fl(5)p eop %%Page: 6 6 bop 126 42 a Fl(1.)20 b(T)m(o)13 b(pro)o(vide)h(ev)o(ery)g(user)h(with)f(the) g(abilit)o(y)e(to)i(read)h(mail)c(from)h(an)o(y)h(host.)126 125 y(2.)20 b(T)m(o)14 b(ensure)j(that)f(all)e(MT)m(As)h(and)g(UAs)h(in)f (use,)h(as)f(w)o(ell)g(as)g(an)o(y)g(other)h(utilities)f(whic)o(h)g(dep)q (end)h(on)f(the)179 174 y(standard)f(mail)d(sp)q(o)q(ol)i(directory)m(,)g (face)h(no)g(problems)e(from)g(the)i(c)o(hange)g(in)f(the)h(underlying)g (\014lesystem.)126 257 y(3.)20 b(T)m(o)13 b(minim)o(ize)e(the)k(p)q (ossibilit)o(y)e(of)g(mail)e(b)q(eing)j(lost)g(or)f(b)q(ouncing)h(bac)o(k)g (to)g(the)g(sender.)126 340 y(4.)20 b(T)m(o)13 b(pro)o(vide)h(more)e(priv)n (acy)i(for)f(users')i(mail)d(\014les.)175 457 y(Since)g(most)f(sites)i(pro)o (vide)f(access)i(to)e(users')i(home)c(directories)k(from)c(an)o(y)i(host,)g (it)g(made)f(sense)j(to)e(store)75 506 y(incoming)f(mail)g(there)k(as)f(w)o (ell.)j(That)c(w)o(a)o(y)m(,)f(as)i(long)f(as)g(users)i(could)f(log)e(in)o (to)h(a)h(host)f(and)h(access)h(their)f(home)75 556 y(directories)f(via)e (NFS,)h(their)g(mail)d(w)o(ould)i(b)q(e)h(accessible)h(as)f(w)o(ell.)17 b(This)11 b(solv)o(ed)h(the)g(\014rst)h(problem.)j(Also,)11 b(since)75 606 y(users)16 b(m)o(ust)e(login)f(in)i(order)g(to)g(read)g(their) g(mail,)d(causing)i(their)i(home)d(directories)j(to)f(b)q(e)g(automoun)o (ted,)e(no)75 656 y(extra)h(moun)o(ts)f(are)h(required)h(in)f(order)g(to)g(b) q(egin)g(reading)f(mail.)175 731 y(The)f(second)g(problem)f(w)o(as)g(solv)o (ed)h(b)o(y)f(making)e(sure)k(that)f(the)g(\014nal)f(access)j(of)d(the)h (mail)d(sp)q(o)q(ol)i(directory)75 780 y(remains)17 b(a)g(\\real")h (directory)g(\(not)g(a)g(read-only)f(pseudo-\014lesystem)i(pro)o(vided)f(b)o (y)f(an)h(automoun)o(ter\).)29 b(All)75 830 y(UAs)20 b(access)h(the)f(sp)q(o) q(ol)f(directory)h(for)f(reading)g(and)h(writing)e(the)i(user's)h(mail)16 b(\014le)k(and)f(create)i(lo)q(c)o(k)e(\014les)75 880 y(there.)178 865 y Fg(9)217 880 y Fl(That)14 b(means)f(that)h Fk(/var/spool/mail)d Fl(needs)16 b(to)e(b)q(e)g(readable,)g(writable,)g(and)g(searc)o(hable)h(for) e(UAs)75 930 y(and)i(MT)m(As)g(so)g(that)g(lo)q(c)o(k)f(\014les)h(can)g(b)q (e)h(written)f(and)g(remo)o(v)o(ed.)20 b(See)c(also)e(Section)i(4.6.)k(F)m (or)14 b(the)i(purp)q(ose)g(of)75 980 y(writing)g(the)i(mail)c(and)j(lo)q(c)o (k)g(\014les,)g(a)g(sub)q(directory)h(inside)f(the)h(user's)g(home)e (directory)i(is)e(su\016cien)o(t,)i(since)75 1029 y(it)d(is)f(already)h(o)o (wned)g(b)o(y)g(that)g(user.)22 b(Ensuring)15 b(that)g(users)i(cannot)e (access)i(other)e(users')h(\014les)g(can)f(easily)f(b)q(e)75 1079 y(ac)o(hiev)o(ed)g(b)o(y)g(protecting)g(this)g(sub)q(directory)m(.)175 1154 y(In)h(order)i(not)f(to)g(c)o(hange)g(the)g(b)q(eha)o(vior)g(of)f (programs)g(lik)o(e)g Fk(comsat)p Fl([21)m(,)h(23)o(],)g Fk(from)f Fl(or)g Fk(finger)p Fl(,)g(whic)o(h)75 1204 y(are)j(designed)g(to)g(read)g (an)o(y)f(user's)h(mail,)e(w)o(e)i(implem)o(en)o(ted)e(a)h(sp)q(ecial)h(c)o (hec)o(k)h(for)e(a)g(designated)h(group.)29 b(If)75 1254 y(the)17 b(e\013ectiv)o(e)g Fh(gid)f Fl(of)g(the)g(pro)q(cess)i(is)e(the)h(designated) g(group,)f(w)o(e)g(assume)g(that)g(suc)o(h)h(a)e(sp)q(ecial)i(program)d(is)75 1303 y(executing,)20 b(and)e Fk(hlfsd)f Fl(arranges)i(to)f(do)g(the)h(lo)q (okup)f(not)g(only)g(of)f(the)i(real)g(sp)q(o)q(ol)f(directory)m(,)h(but)g (of)e(the)75 1353 y(mailb)q(o)o(x)f(itself.)34 b(See)20 b(T)m(able)e(2.)33 b(Note)20 b(that)f(this)g(metho)q(d)g(only)f(supp)q(orts)i(read)g(access)h (without)d(lo)q(c)o(king;)p 75 1415 1800 5 v 607 1469 a(Conditions:)f Fh(gid)p Fl(=HLFS)p 1027 1469 13 2 v 15 w(GID)d(for)f(an)o(y)h Fh(uid)p Fl(.)p 206 1487 1538 2 v 205 1537 2 50 v 214 1537 V 239 1522 a Fm(Resolving)p 502 1537 V 919 1537 V 1735 1537 V 1744 1537 V 205 1587 V 214 1587 V 239 1572 a(comp)q(onen)o(t)p 502 1587 V 58 w(P)o(athname)g(left)p 919 1587 V 120 w(V)l(alue)g(if)h(sym)o (b)q(olic)f(link)p 1735 1587 V 1744 1587 V 206 1589 1538 2 v 206 1599 V 205 1648 2 50 v 214 1648 V 239 1633 a Fk(/)p 502 1648 V 267 w(var/mail/)p Fh(NAME)p 919 1648 V 1735 1648 V 1744 1648 V 206 1650 1538 2 v 205 1700 2 50 v 214 1700 V 239 1685 a Fk(var)p Fl(/)p 502 1700 V 202 w Fk(mail/)p Fh(NAME)p 919 1700 V 1735 1700 V 1744 1700 V 206 1701 1538 2 v 205 1751 2 50 v 214 1751 V 239 1736 a Fk(mail)p Fl(@)p 502 1751 V 169 w Fk(/mail/home/)p Fh(NAME)p 919 1751 V 48 w Fk(mail)p Fl(@)f Fi(\))g Fk(/mail/home)p 1735 1751 V 1744 1751 V 206 1753 1538 2 v 205 1803 2 50 v 214 1803 V 239 1788 a(/)p 502 1803 V 267 w(mail/home/)p Fh(NAME)p 919 1803 V 1735 1803 V 1744 1803 V 206 1804 1538 2 v 205 1854 2 50 v 214 1854 V 239 1839 a Fk(mail)p Fl(/)p 502 1854 V 180 w Fk(home/)p Fh(NAME)p 919 1854 V 1735 1854 V 1744 1854 V 206 1856 1538 2 v 205 1906 2 50 v 214 1906 V 239 1891 a Fk(home)p Fl(@)p 502 1906 V 169 w Fh(NAME)p 919 1906 V 290 w Fk(home)p Fl(@)g Fi(\))g Fk(.)p 1735 1906 V 1744 1906 V 206 1907 1538 2 v 205 1957 2 50 v 214 1957 V 239 1942 a(.)p Fl(/)p 502 1957 V 246 w Fh(NAME)p 919 1957 V 1735 1957 V 1744 1957 V 206 1959 1538 2 v 206 1969 V 205 2019 2 50 v 214 2019 V 239 2004 a(NAME)p Fl(@)p 502 2019 V 919 2019 V 547 w Fh(NAME)p Fl(@)h Fi(\))f Fk(~)p Fh(NAME)p Fk(/.mailspool/)p Fh(NAME)p 1735 2019 V 1744 2019 V 206 2020 1538 2 v 205 2070 2 50 v 214 2070 V 239 2055 a Fk(~)p Fh(NAME)p Fl(/)p 502 2070 V 119 w Fk(.mailspool/)p Fh(NAME)p 919 2070 V 1735 2070 V 1744 2070 V 206 2072 1538 2 v 205 2122 2 50 v 214 2122 V 239 2107 a Fk(.mailspool)p Fl(/)p 502 2122 V 48 w Fh(NAME)p 919 2122 V 1735 2122 V 1744 2122 V 206 2123 1538 2 v 205 2173 2 50 v 214 2173 V 239 2158 a(NAME)p 502 2173 V 919 2173 V 1735 2173 V 1744 2173 V 206 2175 1538 2 v 243 2249 a Fl(T)m(able)g(2:)18 b(Sp)q(ecially)13 b(resolving)h Fk(/var/mail/)p Fh(NAME)e Fl(to)h Fm(~)p Fh(NAME)p Fk(/.mailspool/)p Fh(NAME)p 75 2299 1800 5 v 75 2440 a Fl(ho)o(w)o(ev)o(er,)k(this)g(is)f(su\016cien)o(t)h(for)f(all)g (programs)f(that)i(need)g(to)g(access)h(other)f(users')h(mailb)q(o)o(xes.)24 b(All)15 b(that)i(is)75 2490 y(required)e(is)f(to)f(set)i(these)g(programs)e (to)h(b)q(e)g Fh(setgid)g Fl(to)g(the)g(designated)h(group.)p 75 2525 720 2 v 121 2552 a Ff(9)139 2563 y Fe(Note)e(that,)g(in)g(order)g(to) g(allo)o(w)g(mail)g(deliv)o(ery)e(to)i(NFS)q(-moun)o(ted)d(mail)j(sp)q(o)q (ol)g(directories,)e(most)h(v)o(endors)g(ha)o(v)o(e)h(mo)q(di\014ed)75 2603 y(the)d Fd(/bin/mail)e Fe(program)g(to)j(set)f(its)g Fc(uid)h Fe(to)g(that)f(of)g(the)g(recipien)o(t)e(when)j(deliv)o(ering)d(mail.)13 b(If)e(a)g(lo)q(cal)e(deliv)o(ery)g(agen)o(t)g(\(LD)o(A\))i(on)75 2642 y(a)g(system)f(do)q(es)g(not)g(pro)o(vide)f(this)i(b)q(eha)o(vior,)d (the)j(MT)m(A)i(m)o(ust)d(arrange)f(to)i(in)o(v)o(ok)o(e)e(it)i(with)g(the)f Fc(uid)i Fe(of)f(the)f(recipien)o(t)f(|)j(this)e(can)75 2682 y(b)q(e)h(done)f(b)o(y)h(a)h(wrapp)q(er)e(C)i(program.)965 2825 y Fl(6)p eop %%Page: 7 7 bop 175 42 a Fl(The)14 b(third)h(problem)d(is)j(solv)o(ed)f(b)o(y)g(ensuring) g(that)h(all)e(op)q(erations)h(whic)o(h)g(migh)o(t)f(hang)g Fk(hlfsd)h Fl(are)g(p)q(er-)75 91 y(formed)e(in)h(the)h(bac)o(kground,)f (while)g(still)g(pro)o(viding)f(service)j(in)e(the)h(paren)o(t)g(or)g(c)o (hild)f(pro)q(cess.)20 b(F)m(urthermore,)75 141 y(if)12 b Fk(hlfsd)f Fl(is)i(not)g(running)f(an)o(ymore,)f(or)i(if)f(the)h(user's)h(home)d (\014lesystem)i(is)f(full,)f(mail)f(gets)k(deliv)o(ered)f(to)f(an)h(al-)75 191 y(ternate)f(directory)g(\(See)g(also)f(Section)g(4.3\).)16 b(A)11 b Fk(cron)f Fl(job)h(\(running)g(sev)o(eral)g(times)g(a)f(da)o(y)h(in) f(our)i(departmen)o(t\),)75 241 y(lo)q(oks)h(at)h(the)h(alternate)g (directory)m(,)f(and)g(attempts)f(to)h(resend)i(messages)e(in)g(it)f(to)h (their)h(righ)o(tful)e(o)o(wners.)19 b(All)75 291 y(that)12 b(is)h(incurred)g(is)g(a)f(dela)o(y)g(in)g(mail)d(deliv)o(ery)m(,)j(whic)o (h,)g(in)g(most)f(cases,)j(is)e(no)g(longer)h(than)f(the)h(length)f(of)g (time)75 340 y(b)q(et)o(w)o(een)j(consecutiv)o(e)h(in)o(v)o(o)q(cations)d(of) g(the)h(lost-mail)d(remailing)h(script.)175 415 y(Ha)o(ving)h(a)h(sp)q(ecial) g(mail-sp)q(o)q(ol)e(sub)q(directory)j(o)o(wned)g(and)f(con)o(trolled)g(b)o (y)g(the)h(user)g(also)f(addresses)i(the)75 465 y(last)c(problem,)f(that)i (of)f(priv)n(acy)m(.)k(Users)e(can)f(c)o(hange)g(the)g(protection)g(bits)g (on)f(their)h(mailb)q(o)o(x)d(directory)j(inside)75 515 y(their)g(home)f (directory)i(so)f(that)g(it)f(is)h(readable)g(and)g(searc)o(hable)h(only)e(b) o(y)h(the)g(o)o(wner.)18 b(An)o(y)13 b(other)h(program)d(or)75 565 y(user,)16 b(unless)f(running)g(as)g(the)g(sup)q(eruser)j(on)c(the)i (same)e(host,)1091 549 y Fg(10)1141 565 y Fl(w)o(ould)g(not)h(b)q(e)g(able)g (to)f(\014nd)h(out)g(whether)h(a)75 614 y(user)f(has)f(new)g(mail,)d(ho)o(w)j (m)o(uc)o(h)e(of)i(it)f(there)i(is,)f(or)f(when)i(it)e(w)o(as)h(last)g(read.) 75 722 y Fj(4)56 b(Impleme)o(n)n(tation)16 b(of)j Fb(hlfsd)175 797 y Fl(W)m(e)f(used)i(a)f(protot)o(yp)q(e)h(NFS)f(serv)o(er,)j(and)d (implem)o(en)o(ted)e(only)i(the)g(op)q(erations)h(that)f(w)o(ere)h(needed.)75 847 y(W)m(e)14 b(generated)i(NFS)e(stubs)i(using)e Fk(rpcgen)p Fl(.)k(The)d(serv)o(er)h(w)o(as)e(dev)o(elop)q(ed)h(\014rst)g(under)h(SunOS)f (v)o(ersion)f(4.1.2.)75 897 y(This)g(serv)o(er)i(w)o(as)e(incorp)q(orated)h (in)o(to)e(the)i Fk(amd)e Fl(source)j(tree,)f(and)f(w)o(e)g(used)h(some)e(of) h Fk(amd)p Fl('s)f(sources)j(as)e(utilit)o(y)75 947 y(functions,)k(since)g (they)g(are)g(w)o(ell-written)f(to)h(handle)f(a)g(v)n(ariet)o(y)g(of)g(arc)o (hitectures)j(and)d(op)q(erating)g(systems.)75 997 y(\(See)e(Section)f(4.7)f (for)h(source)h(co)q(de)g(a)o(v)n(ailabil)o(it)o(y)l(.\))75 1105 y Fj(4.1)56 b(The)18 b(\\Home-Link")d(File)j(Service)175 1180 y Fl(This)10 b(subsection)i(includes)g(tec)o(hnical)f(details)f(of)h (the)g(NFS)g(op)q(erations)g(and)g(ma)o(y)e(b)q(e)i(skipp)q(ed.)18 b(Ho)o(w)o(ev)o(er,)75 1230 y(it)13 b(pro)o(vides)g(an)g(example)e(of)i(the)g (design)h(and)f(implem)o(en)o(tation)d(of)i(a)h(small)e(sp)q(ecial-purp)q (ose)j(NFS)g(serv)o(er)g(and)75 1279 y(ma)o(y)e(b)q(e)i(of)g(use)g(to)g (others.)175 1354 y(HLFS)j(is)g(a)g(read-only)g(\014lesystem,)g(and)g(as)h (suc)o(h,)g(all)e(op)q(erations)i(that)f(require)h(write)g(access)h(return)75 1404 y(the)d(error)h(co)q(de)f(NFSERR)p 522 1404 13 2 v 14 w(R)o(OFS)g(\(\\Read-Only)f(Filesystem"\):)20 b Fh(setattr,)c(write,)f(cr)n (e)n(ate,)h(r)n(emove,)g(r)n(ename,)75 1454 y(link,)g(unlink,)g(symlink,)g (mkdir,)f Fl(and)g Fh(rmdir)p Fl(.)21 b(T)m(rivially)13 b(implemen)o(ted)g(w) o(ere)j(the)g Fh(nul)r(l)p Fl(,)f Fh(r)n(o)n(ot)p Fl(,)g(and)g Fh(write)n(c)n(ache)75 1504 y Fl(op)q(erations.)i(W)m(e)11 b(decided)h(to)e(ha)o(v)o(e)h Fh(statfs)f Fl(return)i(some)e(v)n(alue)h (\(all)e(zeros)k(in)d(most)g(cases\).)18 b(The)11 b Fh(r)n(e)n(ad)g Fl(op)q(eration)75 1553 y(simply)h(returns)j(NFSERR)p 524 1553 V 15 w(A)o(CCES)f(\(\\P)o(ermission)f(Denied"\).)175 1628 y(The)e(remaining)e (op)q(erations)i(are)h(the)f(heart)h(of)e(this)h(\014lesystem:)17 b Fh(r)n(e)n(addir)p Fl(,)10 b Fh(getattr)p Fl(,)g Fh(lo)n(okup)p Fl(,)i(and)f Fh(r)n(e)n(ad)r(link)p Fl(.)175 1703 y(Our)j(serv)o(er)h(m)o (ust)d(distinguish)h(b)q(et)o(w)o(een)i(the)f(directory)g(and)g(the)g(link,)e (so)i(w)o(e)f(assigned)h(them)f(di\013eren)o(t)75 1753 y(in)o(tegers)f(to)f (serv)o(e)i(as)f(\014lehandles.)17 b(Note)12 b(that)f(these)i(need)g(not)e(b) q(e)h(as)f(complicated)g(as)g(the)h(\014lehandles)g(usually)75 1802 y(generated)j(b)o(y)f(NFS.)k(They)c(need)h(only)e(to)h(b)q(e)h(unique,)e (and)h(their)g(v)n(alue)f(is)h(meaningful)d(only)i(to)h(the)h(serv)o(er.)75 1910 y Fj(4.1.1)55 b(The)19 b(readdir)f(Op)r(eration)175 1985 y Fl(Op)q(ening)h(this)g(directory)h(returns)h(the)f(\\.")33 b(and)19 b(\\..")33 b(directories,)21 b(and)e(one)g(sym)o(b)q(olic)e(link,)i Fk(home)p Fl(.)75 2035 y(A)o(ttempting)e(to)g(readdir)h(on)g(the)g(sym)o(b)q (olic)e(link)h(results)i(in)f(an)f(NFSERR)p 1326 2035 V 15 w(NOTDIR.)g(An)o(ything)g(else)i(is)e(a)75 2085 y(stale)d(\014lehandle.)75 2193 y Fj(4.1.2)55 b(The)19 b(getattr)e(Op)r(eration)175 2268 y Fh(Getattr)h Fl(returns)i(r-xr-xr-x)e(for)h(the)g(\\.")32 b(and)18 b(\\..")32 b(directories.)h(The)19 b(link)f(itself,)h(named)e Fk(home)h Fl(b)o(y)75 2318 y(default,)d(is)h(protected)h(as)f(rwxrwxrwx.)23 b(It)16 b(do)q(es)g(not)g(matter)f(for)g(the)h(link)f(that)h(it)f(is)g(w)o (orld-writable.)23 b(The)75 2368 y(mo)q(di\014cation)10 b(and)j(creation)f (times)g(for)g(the)h(link)e(and)i(directories)g(are)g(the)g(startup)g(time)e (of)h(the)h(serv)o(er.)19 b(If)12 b(the)75 2418 y(e\013ectiv)o(e)k Fh(gid)f Fl(of)f(the)h(pro)q(cess)h(is)f(HLFS)p 721 2418 V 15 w(GID,)e(then)j(some)d(\014xed)i(v)n(alid)e(attributes)j(are)f(returned.) 22 b(An)o(y)14 b(other)75 2467 y(\014lehandle)i(giv)o(en)f(to)g Fk(hlfsd)g Fl(is)g(considered)i(stale)f(and)f(the)i(NFSERR)p 1227 2467 V 14 w(ST)m(ALE)f(\(\\Stale)f(Filehandle"\))g(result)75 2517 y(co)q(de)g(is)e(returned.)p 75 2544 720 2 v 106 2571 a Ff(10)139 2582 y Fe(Or)e(as)h(the)f(sup)q(eruser)e(elsewhere,)h(if)h(the)g (\014lesystem)e(is)i(NFS-exp)q(orted)e(with)j Fd(anon=0)p Fe(.)965 2825 y Fl(7)p eop %%Page: 8 8 bop 75 42 a Fj(4.1.3)55 b(The)19 b(lo)r(okup)e(Op)r(eration)175 117 y Fl(Ob)o(viously)m(,)c(w)o(e)i(only)f(allo)o(w)f(lo)q(oking)g(up)h(in)h (the)g(\\.")20 b(and)14 b(\\..")20 b(directories,)15 b(b)q(oth)g(of)f(whic)o (h)g(return)i(the)75 166 y(same)e(v)n(alues.)22 b(T)m(rying)15 b(to)g(lo)q(okup)f(\\in")h(the)g(link)g(results)h(in)f(an)g(NFSERR)p 1312 166 13 2 v 15 w(NOTDIR)f(\(\\Not)i(a)f(Directory"\))75 216 y(error)k(co)q(de.)32 b(An)o(y)18 b(link)g(not)g(kno)o(wn)g(to)g(the)h (serv)o(er)g(returns)h(an)e(NFSERR)p 1338 216 V 15 w(NOENT)h(\(\\No)f(Suc)o (h)h(En)o(try"\))75 266 y(error,)f(unless)f(the)g Fh(gid)g Fl(of)e(the)j(requesting)f(pro)q(cess)h(is)f(HLFS)p 1088 266 V 15 w(GID)f(and)g(the)h(name)e(corresp)q(onds)k(to)d(a)h(v)n(alid)75 316 y(user.)i(In)12 b(this)g(case)h(the)g Fh(username)f Fl(for)g(that)g(user) h(is)f(used)h(in)f(the)g(returned)i(\014lehandle,)e(allo)o(wing)e(the)i (readlink)75 366 y(op)q(eration)i(to)f(return)j(the)e(correct)i(link.)h(An)o (ything)c(else)i(is)e(a)h(stale)g(\014lehandle.)75 474 y Fj(4.1.4)55 b(The)19 b(readlink)e(Op)r(eration)175 549 y Fl(This)d(is)h(the)g(most)f(imp) q(ortan)o(t)e(op)q(eration,)j(the)g(cen)o(tral)g(p)q(oin)o(t)f(of)g(this)h(w) o(ork.)20 b(W)m(e)15 b(get)g(the)g Fh(uid)g Fl(n)o(um)o(b)q(er)75 599 y(from)c(the)j(creden)o(tials)g(sen)o(t)g(with)e(the)i(RPC)f(op)q (eration.)k(W)m(e)c(mak)o(e)e(sure)j(that)f(Unix)g(Authen)o(tication)g(or)g (DES)75 648 y(is)h(used)h(or)e(else)i(w)o(e)f(return)h(the)g(NFSERR)p 774 648 V 14 w(PERM)f(\(\\Not)g(Owner"\))h(co)q(de.)175 723 y(If)j(the)h Fh(gid)g Fl(of)f(the)h(accessing)h(pro)q(cess)g(is)f(not)g(HLFS) p 1064 723 V 15 w(GID,)e(the)i(v)n(alue)f(w)o(e)h(return)h(for)f(the)g(sym)o (b)q(olic)75 773 y(link)13 b(named)g Fk(home)379 758 y Fg(11)427 773 y Fl(is)h(a)g(string)g(represen)o(ting)i(the)f(home)e(directory)i(of)e (the)i(user)g(whose)g Fh(uid)f Fl(w)o(e)h(just)f(found,)75 823 y(concatenated)g(with)e(a)h(\014xed)g(comp)q(onen)o(t)e(name)h(represen)o (ting)i(a)e(sub)q(directory)i(within)e(it.)17 b(W)m(e)c(used)g(a)f(binary)75 873 y(searc)o(h)h(on)e(the)h(lo)q(okup)e(table)h(to)h(quic)o(kly)e(get)i(the) g(righ)o(t)f(pathname.)16 b(Di\013eren)o(t)c(home)e(directories)i(for)f(m)o (ultiple)75 922 y(passw)o(ord)i(database)f(en)o(tries)h(with)f(the)h(same)e Fh(uid)i Fl(n)o(um)o(b)q(ers)f(ma)o(y)e(return)j(an)o(y)f(of)g(the)h(home)e (directories.)18 b(Only)75 972 y Fh(uid)c Fl(0)g(is)f(guaran)o(teed)i(to)f (return)h(\\)p Fk(/)p Fl(".)i(See)e(also)e(Section)h(5.3.)175 1047 y(If)h(the)h(sym)o(b)q(olic)e(link)g(is)i(named)e Fk(home)h Fl(and)g(the)h Fh(gid)g Fl(is)f(HLFS)p 1206 1047 V 15 w(GID,)g(w)o(e)h (return)g(a)g(link)e(to)i(\\.",)e(whic)o(h)75 1097 y(causes)19 b Fk(hlfsd)d Fl(to)h(b)q(e)h(used)g(to)f(resolv)o(e)h(the)g(next)g(pathname)e (comp)q(onen)o(t.)27 b(This)17 b(is)h(designed)g(to)f(main)o(tain)75 1147 y(functionalit)o(y)c(of)i(programs)f(suc)o(h)i(as)f Fk(from)p Fl(.)20 b(If)15 b(the)h(sym)o(b)q(olic)d(link)h(is)h(not)g(named)f Fk(home)g Fl(and)h(the)h Fh(gid)f Fl(of)f(the)75 1196 y(accessing)j(pro)q (cess)g(is)e(HLFS)p 553 1196 V 16 w(GID,)f(w)o(e)i(return)g(a)f(v)n(alue)g(p) q(oin)o(ting)g(to)g(the)h(user's)h(mailb)q(o)o(x)12 b(\014le)k(in)f(their)h (mail)75 1246 y(sp)q(o)q(ol)c(directory)m(.)18 b(T)m(o)12 b(do)g(this,)g(w)o (e)h(extract)g(the)h Fh(username)e Fl(from)f(the)i(\014lehandle,)f(whic)o(h)h (w)o(as)f(returned)i(b)o(y)e(the)75 1296 y(lo)q(okup)h(op)q(eration.)18 b(See)d(T)m(able)e(2.)175 1371 y(T)m(rying)c(to)i(readlink)f(on)h(one)g(of)f (the)i(t)o(w)o(o)e(directories)i(results)g(in)e(an)h(NFSERR)p 1426 1371 V 15 w(ISDIR)f(\(\\Is)h(a)f(directory"\))75 1421 y(error.)19 b(An)o(ything)13 b(else)i(is)f(a)f(stale)h(\014lehandle.)75 1528 y Fj(4.2)56 b(Execution)17 b(Flo)n(w)175 1604 y Fl(A)o(t)12 b(initialization)d(time,)i Fk(hlfsd)g Fl(creates)j(a)e(UDP)g(service,)i(and)e (forks)g(a)g(c)o(hild.)17 b(The)c(c)o(hild)e(builds)h(the)h Fh(uid)75 1653 y Fl(lo)q(okup)h(table,)g(sets)i(up)e(signal)g(handlers,)h (and)f(in)o(terv)n(al)g(timers.)19 b(The)c(signal)e(handlers)i(are)g(mean)o (t)f(to)g(reload)75 1703 y(the)i(lo)q(okup)f(table)g(at)g(expiration)g(time)f (of)h(the)h(in)o(terv)n(al)f(timer,)f(or)i(when)g(a)f(SIGHUP)g(is)h(sen)o(t)g (to)f(the)h(serv)o(er)75 1753 y(\(presumably)11 b(b)o(y)h(a)f(sup)q (eruser\).)20 b(A)12 b(sp)q(ecial)g(clean)o(up)h(handler)f(is)f(setup)i(for)f (SIGTERM,)f(to)g(ensure)j(the)e(serv)o(er)75 1803 y(terminates)i(cleanly)m(.) j(Then)d(the)h Fk(svc)p 682 1803 14 2 v 15 w(run\(\))e Fl(routine)h(is)f(in)o (v)o(ok)o(ed.)175 1878 y(Mean)o(while)i(the)i(paren)o(t)g(w)o(aits)f(for)f (the)i(c)o(hild)f(to)g(initialize.)23 b(When)16 b(it)g(do)q(es,)h(the)g (paren)o(t)f(moun)o(ts)f(the)75 1927 y(serv)o(er)g(on)f(the)g(moun)o(t)e(p)q (oin)o(t.)18 b(Of)c(utmost)e(imp)q(ortance)h(is)h(to)g(mak)o(e)e(sure)j(the)f (attribute)g(cac)o(he)h(is)f(turned)g(o\013.)75 1977 y(If)h(the)g(attribute)h (cac)o(he)f(is)g(not)g(turned)h(o\013,)f(successiv)o(e)i(accesses)g(to)e Fk(/mail/home)e Fl(w)o(ould)h(return)i(previously)75 2027 y(computed)f (pathnames)g(p)q(oin)o(ting)f(to)i(another)g(user's)g(mail,)d(resulting)j(in) f(mail)e(loss)i(or)h(misdeliv)o(ery)m(.)21 b(If)15 b(it)g(is)75 2077 y(not)d(p)q(ossible)g(to)g(turn)h(o\013)e(the)i(attribute)g(cac)o(he,)f Fk(hlfsd)f Fl(will)g(exit.)17 b(Ho)o(w)o(ev)o(er,)c(the)f(SA)g(has)h(the)f (option)g(to)f(force)75 2127 y Fk(hlfsd)j Fl(to)h(con)o(tin)o(ue)g(running)g (and)g(set)h(the)f(attribute)h(cac)o(he)g(to)f(as)g(short)g(an)g(in)o(terv)n (al)f(as)h(p)q(ossible)h(\(See)g(also)75 2176 y(Section)e(5.3\).)j(A)o(t)d (this)g(p)q(oin)o(t)g(the)g(paren)o(t)h(terminates,)e(lea)o(ving)f(the)j(c)o (hild)e(to)h(run.)175 2251 y(When)j(an)f(in)o(terv)n(al)g(timer)g(go)q(es)h (o\013)g(\(SIGALRM\))f(or)h(a)f(SIGHUP)h(is)g(sen)o(t)g(to)g(the)h(serv)o (er,)g(the)f(serv)o(er)75 2301 y(forks)d(a)g(c)o(hild)g(that)g(con)o(tin)o (ues)h(serving,)f(while)g(the)h(paren)o(t)g(reloads)f(the)h(lo)q(okup)f (table.)19 b(When)14 b(the)h(paren)o(t)g(is)75 2351 y(\014nished)f(loading,)d (it)i(sends)i(a)e(SIGKILL)g(to)g(the)h(c)o(hild)e(pro)q(cess,)j(and)e (resumes)h(serving.)k(When)c(a)f(SIGTERM)75 2401 y(is)h(receiv)o(ed,)h(the)g (serv)o(er)g(forks)f(a)g(c)o(hild)g(that)g(con)o(tin)o(ues)g(serving,)g (while)g(it)g(tries)g(to)g(unmoun)o(t)f(the)i(\014lesystem.)75 2450 y(If)f(and)f(when)i(that)f(succeeds,)i(b)q(oth)e(paren)o(t)g(and)g(c)o (hild)f(exit.)175 2525 y(As)i(mail)d(service)k(is)e(v)o(ery)h(imp)q(ortan)o (t,)d(w)o(e)j(w)o(an)o(ted)g(to)f(mak)o(e)g Fk(hlfsd)f Fl(as)i(robust)g(as)g (p)q(ossible.)20 b(W)m(e)14 b(could)75 2575 y(ha)o(v)o(e)k(designed)g(it)f (as)h(another)g Fk(amd)g Fl(\\\014lesystem)f(t)o(yp)q(e",)h(but)g(decided)h (that)f(a)f(separate)i(daemon)e(pro)o(vides)75 2625 y(b)q(etter)i(reliabilit) o(y)c(and)j(faster)g(service.)29 b(In)18 b(general,)g(w)o(e)f(try)h(to)f(do)g (as)h(m)o(uc)o(h)e(as)h(p)q(ossible:)25 b(w)o(e)18 b(mak)o(e)e(sure)p 75 2659 720 2 v 106 2686 a Ff(11)139 2698 y Fe(The)11 b(name)f(of)h(the)g (sym)o(b)q(olic)e(link)i(is)g(con\014gurable.)965 2825 y Fl(8)p eop %%Page: 9 9 bop 75 42 a Fl(\014lesystems)10 b(are)h(accessible)h(and)e(con)o(tain)f(some) h(disk)g(space)h(to)f(ha)o(v)o(e)g(mail)e(deliv)o(ered)j(there.)18 b(Where)11 b(directories)75 91 y(are)j(exp)q(ected)h(w)o(e)f(mak)o(e)d(sure)k (there)f(are)g(no)f(\014les)h(b)o(y)f(these)h(names;)f(where)h(sym)o(b)q (olic)d(links)i(are)h(exp)q(ected,)h(w)o(e)75 141 y(mak)o(e)f(sure)i(there)h (are)e(no)g(real)h(\014les)f(or)h(directories)g(with)f(the)h(same)e(name.)21 b(Whenev)o(er)c(p)q(ossible,)e(w)o(e)g(create)75 191 y(directories,)f(with)f (prop)q(er)i(o)o(wnership)f(and)f(p)q(ermissions.)k(W)m(e)c(ev)o(en)h(c)o (hec)o(k)h(that)e(the)h(moun)o(t)e(p)q(oin)o(t)h(for)g Fk(hlfsd)75 241 y Fl(is)h(w)o(orld)f(readable)h(and)g(executable,)h(since)f(if)f(it)h (isn't,)f Fk(getwd\(".."\))e Fl(migh)o(t)h(fail.)75 349 y Fj(4.3)56 b(Alternate)17 b(Mail)h(Sp)r(o)r(ol)g(Directories)175 424 y Fk(Hlfsd)e Fl(tries)i(to)g(ensure)h(that)f(the)g(user's)g(home)f(directory)h (is)f(accessible.)31 b(P)o(erio)q(dically)16 b(it)i(also)f(tests)75 474 y(that)i(it)f(can)h(b)q(e)g(written)g(in)o(to)f(\(Section)h(4.5\).)31 b(If)18 b(for)h(an)o(y)f(reason)h(a)f(failure)g(o)q(ccurs,)j Fk(hlfsd)c Fl(rep)q(oin)o(ts)i(the)75 523 y(sym)o(b)q(olic)11 b(link)h(for)g(that)h(user)h(to)f(an)f(alternate)h(lo)q(cal)f(directory)m(,)h (whic)o(h)g(is)g(presumably)e(highly)h(a)o(v)n(ailable.)j(W)m(e)75 573 y(use)g Fk(/var/spool/alt)p 457 573 14 2 v 13 w(mail)e Fl(in)g(our)h(en)o(vironmen)o(t.)j(See)e(T)m(able)e(3.)1167 558 y Fg(12)p 75 636 1800 5 v 238 690 a Fl(Conditions:)k(An)o(y)d Fh(uid)p Fl(,)g Fh(gid)p Fi(6)p Fl(=HLFS)p 829 690 13 2 v 15 w(GID,)f(and)g Fk(~)p Fh(USER)p Fk(/.mailspool/)f Fl(is)i(not)p 1479 697 60 2 v 14 w(writable.)p 343 710 1265 2 v 342 759 2 50 v 351 759 V 376 744 a Fm(Resolving)p 629 759 V 1083 759 V 1598 759 V 1607 759 V 342 809 V 351 809 V 376 794 a(comp)q(onen)o(t)p 629 809 V 47 w(P)o(athname)g(left)p 1083 809 V 157 w(V)l(alue)h(if)g(sym)o(b) q(olic)f(link)p 1598 809 V 1607 809 V 343 811 1265 2 v 343 821 V 342 871 2 50 v 351 871 V 376 856 a Fk(/)p 629 871 V 256 w(var/mail/)p Fh(NAME)p 1083 871 V 1598 871 V 1607 871 V 343 872 1265 2 v 342 922 2 50 v 351 922 V 376 907 a Fk(var)p Fl(/)p 629 922 V 191 w Fk(mail/)p Fh(NAME)p 1083 922 V 1598 922 V 1607 922 V 343 924 1265 2 v 342 974 2 50 v 351 974 V 376 959 a Fk(mail)p Fl(@)p 629 974 V 158 w Fk(/mail/home/)p Fh(NAME)p 1083 974 V 85 w Fk(mail)p Fl(@)g Fi(\))f Fk(/mail/home)p 1598 974 V 1607 974 V 343 975 1265 2 v 342 1025 2 50 v 351 1025 V 376 1010 a(/)p 629 1025 V 256 w(mail/home/)p Fh(NAME)p 1083 1025 V 1598 1025 V 1607 1025 V 343 1027 1265 2 v 342 1077 2 50 v 351 1077 V 376 1062 a Fk(mail)p Fl(/)p 629 1077 V 169 w Fk(home/)p Fh(NAME)p 1083 1077 V 1598 1077 V 1607 1077 V 343 1078 1265 2 v 342 1128 2 50 v 351 1128 V 376 1113 a Fk(home)p Fl(@)p 629 1128 V 158 w Fh(NAME)p 1083 1128 V 327 w Fk(home)p Fl(@)h Fi(\))f Fk(/var/alt)p 1476 1113 14 2 v 14 w(mail)p 1598 1128 2 50 v 1607 1128 V 343 1130 1265 2 v 342 1180 2 50 v 351 1180 V 376 1165 a(/)p 629 1180 V 256 w(var/alt)p 811 1165 14 2 v 15 w(mail/)p Fh(NAME)p 1083 1180 2 50 v 1598 1180 V 1607 1180 V 343 1181 1265 2 v 342 1231 2 50 v 351 1231 V 376 1216 a Fk(var)p Fl(/)p 629 1231 V 191 w Fk(alt)p 723 1216 14 2 v 15 w(mail/)p Fh(NAME)p 1083 1231 2 50 v 1598 1231 V 1607 1231 V 343 1233 1265 2 v 342 1282 2 50 v 351 1282 V 376 1268 a Fk(alt)p 445 1268 14 2 v 15 w(mail)p Fl(/)p 629 1282 2 50 v 88 w Fh(NAME)p 1083 1282 V 1598 1282 V 1607 1282 V 343 1284 1265 2 v 342 1334 2 50 v 351 1334 V 376 1319 a(NAME)p 629 1334 V 1083 1334 V 1598 1334 V 1607 1334 V 343 1336 1265 2 v 380 1410 a Fl(T)m(able)g(3:)18 b(Resolving)13 b Fk(/var/mail/)p Fh(NAME)f Fl(to)i Fk(/var/alt)p 1323 1410 14 2 v 14 w(mail/)p Fh(NAME)p 75 1460 1800 5 v 175 1600 a Fl(When)f Fk(hlfsd)f Fl(starts)i(up,)f(and)g(b)q(efore)h(it)f(moun)o (ts)f(itself)h(on)f(top)i(of)e(the)i(moun)o(t)d(p)q(oin)o(t,)i(hiding)f(an)o (ything)75 1650 y(that)k(is)f(underneath,)i Fk(hlfsd)e Fl(creates)i(a)f (\014xed)g(sym)o(b)q(olic)e(link)g(to)i(the)g(alternate)g(sp)q(o)q(ol)g (directory)g(\(if)f(it)g(do)q(es)75 1700 y(not)e(exist)g(already\).)k(This)c (is)g(done)g(so)g(that)f Fk(/var/spool/mail)e Fl(w)o(ould)i(not)h(b)q(e)g(a)g (\\dangling")d(sym)o(b)q(olic)h(link,)75 1750 y(and)j(p)q(oin)o(ts)g(to)f(a)h (real)g(directory)h(at)f(all)e(times,)h(ev)o(en)i(after)f Fk(hlfsd)f Fl(terminates.)18 b(When)c Fk(hlfsd)f Fl(runs,)h(it)g(hides)75 1799 y(this)h(sym)o(b)q(olic)e(link,)h(and)h(pro)o(vides)g(our)g(\\dynamic")e (sym)o(b)q(olic)g(link.)20 b(This)15 b(tric)o(k)g(at)g(least)g(pro)o(vides)g (us)g(with)75 1849 y(an)f(alternate)g(place)g(to)g(deliv)o(er)g(mail)d(when)j (things)g(go)f(wrong,)h(rather)g(than)g(b)q(ounce)h(or)f(drop)g(the)g(mail.) 175 1924 y(A)g(cron)h(job)e(on)h(our)h(systems)f(c)o(hec)o(ks)i(the)f (alternate)f(mail)e(sp)q(o)q(ol)i(directory)h(sev)o(eral)g(times)e(a)h(da)o (y)m(.)k(An)o(y)75 1974 y(messages)12 b(found)g(there)i(are)f(resen)o(t)g(to) g(their)f(righ)o(tful)f(o)o(wners.)19 b(The)12 b(remailing)e(script)j(can)g (b)q(e)g(run)f(as)h(often)f(as)75 2024 y(needed.)19 b(Eac)o(h)14 b(in)o(v)o(o)q(cation)e(of)h(the)g(script)h(deals)g(only)e(with)h(newly)g (lost)g(mail)e(since)j(the)g(previous)g(in)o(v)o(o)q(cation;)75 2073 y(the)f(script)g(lo)q(c)o(ks)g(and)f(renames)h(the)g(lost)f(mailb)q(o)o (x)e(\014le)i(to)h(a)f(unique)h(name,)e(b)q(efore)i(parsing)f(and)h (remailing)d(it.)175 2148 y(Similar)j(to)k Fk(amd)p Fl(,)f Fk(hlfsd)f Fl(can)i(log)e(debugging)h(and)h(v)n(arious)e(status)j (information)13 b(to)k(a)f(designated)h(log)75 2198 y(\014le)e(or)h(using)f (the)h Fk(syslog)p Fl([22)n(])f(facilit)o(y)m(.)21 b(The)16 b(SA)f(ma)o(y)f(c)o(ho)q(ose)i(to)g(w)o(atc)o(h)f(these)i(log)e(\014les)g (and)h(facilities)e(and)75 2248 y(b)q(e)h(noti\014ed)e(when)i(serious)f (problems)f(o)q(ccur)i(suc)o(h)g(as)f(a)g(full)e(\014lesystem.)75 2356 y Fj(4.4)56 b(Av)n(oiding)18 b(Hangs)175 2431 y Fl(As)10 b(describ)q(ed)i(in)e(Section)h(4.2,)e Fk(hlfsd)g Fl(forks)i(a)e(c)o(hild)h (at)g(an)o(y)g(p)q(oin)o(t)g(where)h(w)o(e)g(susp)q(ect)h(that)e(an)g(op)q (eration)75 2481 y(migh)o(t)h(hang.)17 b(If,)12 b(for)h(example,)e(the)j (home)e(mac)o(hine)f(of)i(the)g(user)h(is)f(do)o(wn,)g(and)f(the)i (\014lesystem)f(on)f(a)h(clien)o(t)g(is)75 2530 y(hard-moun)o(ted,)h Fk(hlfsd)f Fl(will)h(hang)g(un)o(til)g(the)i(remote)e(serv)o(er)i(is)f(bac)o (k)g(up.)21 b(P)o(erforming)13 b(these)j(op)q(erations)f(in)75 2580 y(the)f(bac)o(kground)g(pro)o(vides)g(added)h(reliabilit)o(y)m(,)c(an)i (idea)h(tak)o(en)g(from)e Fk(amd)p Fl(.)p 75 2615 720 2 v 106 2642 a Ff(12)139 2653 y Fe(In)f(the)f(conditions)f(for)i(T)m(able)g(3,)g Fd(~)p Fc(USER)h Fe(is)g(the)f(home)f(directory)f(of)i(the)g(user)f(with)i (user-id)e Fc(uid)p Fe(.)965 2825 y Fl(9)p eop %%Page: 10 10 bop 75 42 a Fj(4.5)56 b(Disk)18 b(Space)g(Problems)175 117 y Fk(Hlfsd)13 b Fl(c)o(hec)o(ks)j(if)e(the)h(user's)h(home)e(directory)h(is)g (full)e(or)i(they)g(exceeded)i(their)e(quota.)20 b(It)15 b(attempts)f(to)75 166 y(create)i(and)e(then)h(remo)o(v)o(e)e(a)h(simple)f(nonzero-length)i (\014le)f(in)g(the)h(user's)g(sp)q(o)q(ol)f(directory)m(,)h(with)f(the)h (e\013ectiv)o(e)75 216 y Fh(uid)j Fl(set)g(to)f(that)h(of)f(the)h(user.)30 b(If)17 b(that)g(fails,)g(it)g(instead)h(returns)h(bac)o(k)e(the)h(name)e(of) h(the)h(alternate)g(sp)q(o)q(ol)75 266 y(directory)d(as)f(the)g(v)n(alue)f (of)h(the)g Fk(home)f Fl(sym)o(b)q(olic)f(link.)17 b(Otherwise)f(mail)11 b(migh)o(t)h(b)q(e)i(dropp)q(ed)h(or)f(b)q(ounce.)175 341 y(An)o(y)j(success) k(or)d(failure)f(state)h(is)g(recorded)i(in)d Fk(hlfsd)o Fl(.)30 b(It)18 b(is)g(left)g(there)h(for)e(a)h(sp)q(eci\014ed)h(n)o(um)o(b)q(er)f (of)75 391 y(seconds,)k(after)f(whic)o(h)e(the)i(en)o(try)g(\\times)d(out")i (and)g(a)f(new)i(actual)e(bac)o(kgrounded)i(lo)q(okup)e(is)g(required.)75 440 y(Otherwise,)14 b(the)g(cac)o(hed)g(result)g(is)f(used)g(and)g(no)g(exp)q (ensiv)o(e)h Fk(fork)e Fl(is)h(required.)19 b(This)13 b(simple)e(cac)o(hing)i (feature)75 490 y(of)g Fk(hlfsd)g Fl(has)h(greatly)g(impro)o(v)o(ed)e(its)i (p)q(erformance)g(and)f(reliabilit)o(y)m(.)j(See)f(also)e(Section)h(5.3.)75 598 y Fj(4.6)56 b(Lo)r(c)n(k)17 b(Files)175 673 y Fl(An)12 b(alternativ)o(e)h(design)g(for)f Fk(hlfsd)f Fl(is)i(to)f(ha)o(v)o(e)h(it)f (moun)o(t)f(on)h(top)h(of)f(the)h(mail)d(sp)q(o)q(ol)i(directory)i(directly)m (,)75 723 y(instead)d(of)f(ha)o(ving)f(the)j(mail)c(sp)q(o)q(ol)i(directory)h (b)q(e)g(a)g(sym)o(b)q(olic)e(link)g(to)i(another)g(link)e(\()p Fk(home)p Fl(\))h(within)g(the)h(HLFS,)75 773 y(whic)o(h)k(p)q(oin)o(ts)g(to) g(a)f(real)h(sub)q(directory)i(of)d(the)i(user's)g(home.)k(With)15 b(some)f(mo)q(di\014cations)f(to)i(the)g(serv)o(er,)i(w)o(e)75 823 y(could)d(ha)o(v)o(e)g(made)f(all)h(of)f(the)i(user's)h(mailb)q(o)o(x)11 b(\014les)k(p)q(oin)o(t)f(to)g(the)h(righ)o(t)f(place,)g(but)g(it)g (su\013ered)j(from)12 b(serious)75 873 y(dra)o(wbac)o(ks:)137 977 y Fi(\017)21 b Fl(The)15 b(sp)q(o)q(ol)f(directory)i(w)o(ould)d(no)i (longer)f(b)q(e)h(a)g(regular)f(directory)m(.)21 b(It)14 b(w)o(ould)g(ha)o(v) o(e)h(to)f(b)q(e)h(managed)e(b)o(y)179 1027 y Fk(hlfsd)o Fl(.)18 b(This)c(w)o(ould)f(require)h(the)h(implemen)o(tatio)o(n)c(of)i(more)g(NFS)h (op)q(erations.)137 1105 y Fi(\017)21 b Fl(The)e(user's)h(sp)q(o)q(ol)f (\014le)g(w)o(ould)g(not)g(b)q(e)g(a)g(regular)g(\014le,)h(but)f(a)g(sym)o(b) q(olic)e(link)h(to)h(suc)o(h.)35 b(Some)18 b(mail)179 1155 y(programs)e(remo)o(v)o(e)g(that)h(\014le,)g(not)g(c)o(hec)o(king)g(if)f (it's)h(a)f(sym)o(b)q(olic)g(link.)26 b(Therefore)18 b(the)g(sym)o(b)q(olic)d (link)179 1205 y(w)o(ould)10 b(b)q(e)i(remo)o(v)o(ed.)k(W)m(e)10 b(w)o(ould)h(ha)o(v)o(e)g(had)f(to)h(c)o(hange)h(the)f(serv)o(er)i(so)e(that) g(remo)o(ving)e(the)j(sym)o(b)q(olic)d(link)179 1255 y(w)o(ould)14 b(\014rst)i(follo)o(w)d(it)i(and)g(remo)o(v)o(e)f(the)i(\014le)f(it)g(w)o(as) g(p)q(oin)o(ting)f(to.)22 b(The)16 b(same)e(go)q(es)i(for)f(all)f(op)q (erations)179 1304 y(whic)o(h)g(require)g(access)i(to)e(the)g(user's)h(mail)c (sp)q(o)q(ol)j(\014le.)137 1383 y Fi(\017)21 b Fl(The)11 b(w)o(orst)f (problem)f(w)o(as)h(that)h(di\013eren)o(t)g(UAs)g(and)f(MT)m(As)g(use)h (di\013eren)o(t)h(metho)q(ds)d(for)h(lo)q(c)o(king)g(the)h(mail)179 1432 y(\014le.)17 b(Some)12 b(of)g(them)h(create)h(temp)q(orary)e(\014les)h (named)f Fk($)p Fi(f)p Fk(USER)p Fi(g)p Fk(.lock)p Fl(,)e(others)k(use)g(the) f Fk(mktemp)f Fl(library)179 1482 y(call)17 b(to)h(generate)i(unique)e (names.)31 b(Our)19 b(metho)q(d)e(a)o(v)o(oids)h(the)g(need)i(to)e(\014gure)h (out)f(all)f(the)i(di\013eren)o(t)179 1532 y(metho)q(ds)13 b(used)i(in)e(lo)q(c)o(king)g(mail)e(\014les,)j(and)g(usage)g(of)g(temp)q (orary)f(\014les.)175 1636 y(An)g(alternate)h(w)o(a)o(y)e(to)h(a)o(v)o(oid)f (the)i(need)g(for)f(lo)q(c)o(k)g(\014les)h(is)f(to)g(deliv)o(er)g(mail)e(one) i(message)g(p)q(er)h(\014le)f(using)g(a)75 1686 y(di\013eren)o(t)i(system)g (suc)o(h)g(as)f(with)h(INN[19)o(])f(and)g(NNTP[10];)f(ho)o(w)o(ev)o(er,)i (this)f(w)o(ould)g(require)h(mo)q(di\014cations)e(to)75 1736 y(all)g(UAs)h(and)g(MT)m(As.)75 1844 y Fj(4.7)56 b(Source)18 b(Co)r(de)g(Size,)g(Av)m(ailabilit)n(y)-5 b(,)16 b(and)k(P)n(ortabilit)n(y) 175 1919 y Fk(Hlfsd)c Fl(is)h(less)h(than)f(2500)f(lines)h(of)f(C)h(co)q(de,) i(including)d(commen)o(ts)f(and)i(white-spaces.)29 b(Ho)o(w)o(ev)o(er,)18 b(it)75 1969 y(mak)o(es)13 b(use)h(of)g(almost)e(4000)h(lines)g(of)h(co)q(de) g(from)f(the)h Fk(amd)f Fl(distribution)h(itself.)175 2044 y Fk(Hlfsd)g Fl(is)h(a)o(v)n(ailable)e(in)i(source)i(form)c(as)j(part)f(of)g (a)g(sp)q(ecial)h(distribution)e(of)h Fk(amd)p Fl(.)22 b(It)15 b(can)h(b)q(e)g(retriev)o(ed)75 2094 y(via)d(anon)o(ymous)f Fk(ftp)h Fl(from)f Fk(ftp.cs.columbia.edu)e Fl(in)k(the)g(directory)h Fk(/pub/amd)p Fl(.)175 2168 y Fk(Hlfsd)h Fl(is)i(built)f(as)g(part)h(of)f (the)h(sp)q(ecial)g(distribution)f(of)g Fk(amd)g Fl(a)o(v)n(ailable)f(from)g (our)h(ftp)h(serv)o(er.)30 b(It)18 b(is)75 2218 y(almost)12 b(as)j(p)q(ortable)f(as)g Fk(amd)g Fl(is.)k(It)c(is)h(only)e(the)i(lac)o(k)e (of)h(access)i(to)e(certain)h(mac)o(hines)e(that)h(stopp)q(ed)h(us)g(from)75 2268 y(p)q(orting)d Fk(hlfsd)f Fl(to)i(the)g(n)o(umerous)f(platforms)e Fk(amd)i Fl(runs)h(on.)k(A)o(t)c(the)g(writing)f(of)f(this)i(pap)q(er,)g Fk(hlfsd)e Fl(has)i(b)q(een)75 2318 y(successfully)h(p)q(orted)g(and)e (running)h(on)f(SunOS)i(4.1.3,)c(HP-UX)k(9.0.1,)d(and)h(Solaris)g(2.2.)17 b(Those)c(represen)o(t)i(the)75 2367 y(3)h(main)e(system)i(t)o(yp)q(es)h Fk(amd)e Fl(runs)i(on)f(and)f(span)i(most)e(Unix)g(\015a)o(v)o(ors:)22 b(a)16 b(BSD-st)o(yle)g(system,)g(an)g(SVR-BSD)75 2417 y(h)o(ybrid,)d(and)h (a)f(system)h(v)o(ery)g(close)h(to)e(SVR4,)g(resp)q(ectiv)o(ely)m(.)75 2525 y Fj(5)56 b(Ev)m(aluation)175 2600 y Fl(This)11 b(system)h(is)g(implem)o (en)o(ted)e(and)i(has)g(b)q(een)h(in)e(use)i(on)e(a)h(n)o(um)o(b)q(er)f(of)g (mac)o(hines)g(for)h(more)e(than)i(a)g(y)o(ear)75 2650 y(no)o(w.)20 b(F)m(or)14 b(the)h(\014rst)g(nine)g(mon)o(ths)e Fk(hlfsd)h Fl(w)o(as)g(in)g(exp)q(erimen)o(tal)g(use.)21 b(W)m(e)14 b(ha)o(v)o(e)h (since)g(deplo)o(y)o(ed)g(it)f(on)g(most)75 2700 y(pro)q(duction)g(mac)o (hines)f(in)h(our)f(departmen)o(t,)h(spanning)f(o)o(v)o(er)h(a)g(100)f(hosts) h(and)g(3)g(di\013eren)o(t)g(arc)o(hitectures.)954 2825 y(10)p eop %%Page: 11 11 bop 175 42 a Fl(The)11 b(goal)f(of)h(this)g(w)o(ork)g(is)f(to)h(expand)h(the) f(accessibilit)o(y)g(of)g(electronic)h(mail,)d(impro)o(v)o(e)g(o)o(v)o(erall) h(reliabilit)o(y)75 91 y(and)i(stabilit)o(y)f(of)g(this)h(vital)f(service,)j (while)d(at)h(the)h(same)e(time)g(main)o(tain)e(the)k(sanit)o(y)f(of)f(our)h (SAs)h(\(y)o(ours)f(truly)75 141 y(included\).)18 b(F)m(or)c(this)g(to)g (really)f(w)o(ork,)g(it)g(m)o(ust)g(ha)o(v)o(e:)126 257 y(1.)20 b(V)m(ery)14 b(high)f(a)o(v)n(ailabilit)o(y)l(.)126 340 y(2.)20 b(Little)13 b(o)o(v)o(erhead.)126 423 y(3.)20 b(Little)14 b(hassle)g(for)g (users)i(and)e(administrators)e(as)i(the)h(system)f(is)g(b)q(eing)g(used)h (or)f(installed)g(for)f(the)i(\014rst)179 473 y(time.)75 598 y Fj(5.1)56 b(P)n(erformance)175 673 y Fl(W)m(e)15 b(ha)o(v)o(e)g(carried)h (out)g(some)e(measuremen)o(ts)h(to)h(quan)o(tify)e(the)i(ab)q(o)o(v)o(e)f (requiremen)o(ts)h(and)g(more.)22 b(The)75 723 y(tests)15 b(w)o(ere)g(p)q (erformed)f(on)f(a)h(Sun)g(SP)m(AR)o(Cstation-2)f(running)g(SunOS)i(4.1.3.) 175 797 y(Accessing)20 b(a)f(lo)q(cal)g(sp)q(o)q(ol)g(\014le)g(via)f Fk(stat)h Fl(normally)d(tak)o(es)k(180)e(msec)h(without)g Fk(hlfsd)o Fl(.)34 b(If)19 b Fk(hlfsd)f Fl(is)75 847 y(running)g(and)g(has)g(the)h (user's)h(en)o(try)e(already)g(cac)o(hed,)i(it)e(tak)o(es)h(60)f(msec)g(more) f(to)h(access)i(the)f(\014le.)31 b(This)75 897 y(o)o(v)o(erhead)19 b(is)f(attributed)h(to)f(the)h(fact)g(that)f(the)h(k)o(ernel)g(has)g(to)f (access)i(a)e(user-lev)o(el)h(NFS)g(serv)o(er,)h(making)75 947 y(sev)o(eral)14 b(con)o(text)h(switc)o(hes.)175 1022 y(If)h(the)h(en)o (try)h(is)e(not)h(cac)o(hed,)h Fk(hlfsd)e Fl(forks)g(a)h(c)o(hild)f(to)h(p)q (erform)f(op)q(erations)h(whic)o(h)f(ma)o(y)f(cause)j(it)e(to)75 1071 y(hang.)21 b(The)16 b(o)o(v)o(erhead)f(of)f(that)i Fk(fork)e Fl(and)h(other)g(c)o(hec)o(ks)i(is)e(an)f(additional)g(70)g(msec)h(\(or)g (130)f(msec)h(o)o(v)o(er)g(the)75 1121 y(regular)d(lo)q(okup)f(not)g(using)h Fk(hlfsd)o Fl(\).)17 b(Ho)o(w)o(ev)o(er,)12 b(this)g(o)o(v)o(erhead)g(is)g (incurred)h(only)d(once)j(in)e(5)h(min)o(utes,)e(b)q(ecause)75 1171 y(the)k(result)h(of)e(eac)o(h)i(c)o(hec)o(k)g(is)e(cac)o(hed)i(for)f (that)g(long)f(b)o(y)g(default.)175 1246 y(The)f(ab)q(o)o(v)o(e)g(times)f (are)i(somewhat)e(signi\014can)o(t,)g(but)i(not)e(b)o(y)h(m)o(uc)o(h,)f (considering)h(the)h(use)g(of)f(a)f(user-lev)o(el)75 1296 y(\014le-serv)o (er.)19 b(\(By)12 b(comparison,)e(in)h(our)h(en)o(vironmen)o(t)f(it)g(tak)o (es)h(ab)q(out)g(0.5)e(seconds)k(to)d(access)j(a)d(new)h(\014lesystem)75 1345 y(using)h Fk(amd)p Fl(.\))18 b(Giv)o(en)13 b(the)h(b)q(ene\014ts)i(of)d Fk(hlfsd)o Fl(,)g(w)o(e)h(feel)g(that)g(a)f(minima)o(l)e(access)k(slo)o(wdo)o (wn)e(is)h(a)f(small)f(price)i(to)75 1395 y(pa)o(y)m(.)j(In)d(practice,)g(o)o (v)o(er)g(12)g(mon)o(ths)e(of)i(usage)g(w)o(e)g(ha)o(v)o(e)g(noticed)g(no)g (visible)f(degradation)g(of)h(service.)1734 1380 y Fg(13)175 1470 y Fl(The)h(in)o(ternal)g(data)h(structures)h(\(tables)f(and)f(cac)o (hes\))i(require)g(50)e(b)o(ytes)h(p)q(er)g(user)g(on)g(the)g(system.)22 b(In)75 1520 y(our)16 b(en)o(vironmen)o(t,)e(with)i(750)f(users,)i(that)f (translates)g(to)g(ab)q(out)f(37KB)h(|)f(rather)i(insigni\014can)o(t)e(giv)o (en)g(that)75 1570 y(w)o(orkstations)f(these)h(da)o(ys)f(come)f(installed)g (with)h(at)f(least)i(16-32MB)e(of)g(RAM.)75 1677 y Fj(5.1.1)55 b(Remailing)16 b(Lost)i(Mail)175 1753 y Fl(The)h Fk(hlfsd)f Fl(distribution)h(con)o(tains)g(a)f Fk(perl)p Fl([26)o(])g(script)i(called)f Fk(lostaltmail)p Fl(.)31 b(Remailing)16 b(a)i(single)75 1802 y(message)c(with)g(a)g(b)q(o)q(dy)g(size)h(of)f(1KB,)g(tak)o(es)h(an)f(a)o(v) o(erage)g(of)g(1.2)f(seconds)j(\(total)d(time\).)18 b(In)c(our)h(departmen)o (t,)75 1852 y(resending)g(an)e(a)o(v)o(erage)h(mailb)q(o)o(x)d(\014le)j(tak)o (es)h(ab)q(out)e(20)h(seconds.)175 1927 y(Initially)f(w)o(e)j(ran)g(the)h (script)f(once)h(a)e(da)o(y)m(,)g(but)h(found)g(ha)o(ving)f(to)g(w)o(ait)g (up)h(to)g(24)f(hours)i(for)e(lost)h(mail)75 1977 y(redeliv)o(ery)f(to)q(o)g (long.)k(W)m(e)14 b(then)i(exp)q(erimen)o(ted)f(with)f(running)g Fk(lostaltmail)f Fl(once)i(an)f(hour.)21 b(Ho)o(w)o(ev)o(er,)15 b(w)o(e)75 2027 y(found)c(that)g(frequency)h(to)q(o)f(fast.)17 b(The)12 b(most)e(lik)o(ely)f(situation)i(in)g(whic)o(h)g Fk(hlfsd)f Fl(will)f(rep)q(oin)o(t)j(its)f(sym)o(b)q(olic)e(link)75 2076 y(to)14 b(the)g(alternate)g(sp)q(o)q(ol)g(directory)g(is)g(when)g(the)g (user's)h(\014lesystem)f(is)f(full.)k(A)d(full)e(\014lesystem)i(is)g(a)f(p)q (ersisten)o(t)75 2126 y(situation)18 b(that)h(in)f(most)f(cases)j(tak)o(es)f (some)f(time)f(to)h(get)h(\014xed,)h(as)e(it)h(requires)g(h)o(uman)e(in)o (terv)o(en)o(tion.)32 b(If)75 2176 y(the)19 b(situation)f(that)h(causes)h Fk(hlfsd)e Fl(to)g(use)i(the)f(alternate)g(sp)q(o)q(ol)g(directory)g(is)g (lik)o(ely)e(to)i(p)q(ersist,)h(running)75 2226 y(the)15 b Fk(lostaltmail)e Fl(script)i(will)f(consume)g(unnecessary)j(resources,)g (only)d(to)h(redeliv)o(er)g(the)h(mail)c(bac)o(k)j(to)f(the)75 2276 y(alternate)f(sp)q(o)q(ol)f(directory)m(.)18 b(W)m(e)12 b(\014nally)g(settled)h(on)g(running)f Fk(lostaltmail)e Fl(b)q(et)o(w)o(een)k (6)e(and)h(12)f(times)f(a)h(da)o(y)m(.)75 2325 y(Dep)q(ending)i(on)g(the)g (amoun)o(t)e(of)i(lost)f(mail)e(exp)q(ected,)16 b(the)e(script)h(could)f(b)q (e)g(run)h(more)d(or)i(less)h(often.)75 2433 y Fj(5.1.2)55 b(Reliabilit)n(y)175 2509 y Fl(W)m(e)11 b(ha)o(v)o(e)h(sim)o(ulated)f(w)o (orst-case)i(scenarios)g(b)o(y)f(\014lling)e(up)i(a)g(user)h(\014lesystem)f (and)g(letting)g Fk(hlfsd)f Fl(decide)75 2558 y(to)k(redirect)i(mail)12 b(to)j(the)h(alternate)g(sp)q(o)q(ol)e(directory)m(.)22 b(A)o(t)16 b(this)f(p)q(oin)o(t)f(w)o(e)i(\014lled)f(up)g(that)g(\014lesystem)g(as)g(w)o (ell.)p 75 2593 720 2 v 106 2620 a Ff(13)139 2632 y Fe(The)g(SAs)h(group)e (felt)h(so)g(con)o(vinced)e(that)i Fd(hlfsd)f Fe(w)o(as)i(w)o(orking)e(w)o (ell,)j(that)d(w)o(e)i(w)o(ere)g(the)f(\014rst)g(to)g(use)g(it)g(on)g Fc(our)i Fe(home)75 2671 y(mac)o(hines.)954 2825 y Fl(11)p eop %%Page: 12 12 bop 75 42 a Fk(Hlfsd)16 b Fl(k)o(ept)i(on)e(p)q(oin)o(ting)g(to)h(the)h (alternate)g(sp)q(o)q(ol)f(directory)g(during)g(the)h(cac)o(hed)g(en)o(try)g (in)o(terv)n(al,)e(but)i(w)o(e)75 91 y(observ)o(ed)d(no)g(mail)c(lost.)19 b(Instead,)c(the)g(sending)g(side)f(detected)j(that)d(the)h(\014lesystem)f(w) o(as)h(full,)d(and)j(k)o(ept)f(the)75 141 y(message)g(in)f(the)i(remote)e (\(priv)n(ate\))h(sp)q(o)q(ol)g(directory)m(.)k(This)c(is)f(the)i(default)e (b)q(eha)o(vior)h Fk(sendmail)p Fl([1)n(])f(pro)o(vides.)175 216 y Fk(Hlfsd)d Fl(do)q(es)i(not)g(in)o(tro)q(duce)g(an)o(y)f(new)h (problems;)f(that)h(is,)f(if)g(a)h(\014lesystem)f(is)g(completely)g(full,)f (whatev)o(er)75 266 y(b)q(eha)o(vior)j(y)o(our)g(curren)o(t)h(LD)o(A)f(pro)o (vides)g(is)g(main)o(tained.)j(Since)e Fk(hlfsd)e Fl(uses)i(b)q(oth)f(the)h (user's)g(\014lesystem)f(and)75 315 y(an)18 b(alternate)h(sp)q(o)q(ol)f (directory)m(,)h(it)f(actually)g(increases)i(the)f(a)o(v)n(ailabili)o(t)o(y)c (of)j(mail)e(services,)21 b(b)o(y)d(\\virtually")75 365 y(increasing)c(the)h (disk)e(space)i(a)o(v)n(ailable)d(for)h(mail)f(sp)q(o)q(oling.)175 440 y(Once)g(space)g(has)f(b)q(een)h(freed)g(in)f(the)g(user's)h (\014lesystem,)f(and)g(the)h(cac)o(hed)g(en)o(try)f(expired,)h Fk(hlfsd)e Fl(p)q(oin)o(ted)75 490 y(its)h(sym)o(b)q(olic)f(link)h(bac)o(k)g (to)g(the)h(user's)h(home)d(directory)m(.)18 b(The)12 b(next)g(time)e(the)i (remailing)d(script)j(ran,)f(all)g(\\lost")75 540 y(mail)g(got)j(resen)o(t)h (to)f(its)g(o)o(wners.)175 614 y(Since)f(the)g(installation)d(of)i Fk(hlfsd)f Fl(in)h(our)h(pro)q(duction)f(en)o(vironmen)o(t,)f(w)o(e)i(ha)o(v) o(e)f(seen)i(a)e(few)h(cases)g(of)f(lost)75 664 y(mail)i(b)q(eing)i(resen)o (t,)i(mostly)c(due)j(to)f(full)f(\014lesystems.)25 b(W)m(e)16 b(kno)o(w)g(of)g(no)g(case)h(where)g(mail)d(w)o(as)i(completely)75 714 y(lost.)75 822 y Fj(5.2)56 b(Installation)175 897 y Fl(Since)13 b Fk(hlfsd)e Fl(w)o(as)i(written)g(b)o(y)f(SAs)h(for)f(other)h(SAs,)g(w)o(e)g (ha)o(v)o(e)f(pro)o(vided)h(it)f(with)g(sev)o(eral)h(command-li)o(ne)75 947 y(options)f(to)h(use)g(at)g(startup)g(time,)e(enabling)h Fk(hlfsd)g Fl(to)g(b)q(e)h(tailored)g(for)f(a)g(particular)h(en)o(vironmen)o (t.)j(Needless)75 997 y(to)g(sa)o(y)m(,)g(a)g(man)e(page)i(is)h(pro)o(vided,) f(as)g(w)o(ell)g(as)g(complete)g(source)h(co)q(de.)26 b(F)m(urthermore,)16 b(w)o(e)h(included)f(a)g(few)75 1046 y(scripts)f(written)f(in)f Fk(sh)g Fl(and)h Fk(perl)e Fl(whic)o(h)i(w)o(e)g(use)g(in)f(our)h(en)o (vironmen)o(t)e(to)i(re/start)h Fk(hlfsd)o Fl(,)e(test)h(for)g(p)q(ossible)75 1096 y(con\014guration)f(anomalies,)f(and)h(resend)j(\\lost")d(mail.)175 1171 y(The)e(most)f(signi\014can)o(t)h(w)o(ork)f(that)i(SAs)f(need)h(to)f(do) g(is)g(iden)o(tify)f(programs)g(that)h(need)h(to)f(access)i(mailb)q(o)o(x)75 1221 y(\014les)18 b(of)f(other)i(users,)h(and)d(\\)p Fh(setgid)p Fl(")h(them)f(to)g(HLFS)p 967 1221 13 2 v 15 w(GID.)g(In)h(our)g(en)o (vironmen)o(t)e(w)o(e)i(had)g(to)g(do)f(that)h(for)75 1271 y Fk(comsat)p Fl(,)f Fk(from)p Fl(,)g Fk(finger)g Fl(and)g(a)h(few)g(others.) 30 b(Our)19 b(en)o(vironmen)o(t)d(uses)j(the)g Fk(rdist)p Fl([5)n(])e (automatic)f(soft)o(w)o(are)75 1320 y(distribution)i(program,)g(and)g(th)o (us)h(these)h(c)o(hanges)f(w)o(ere)h(required)f(only)f(in)g(one)h(place)f(|)g (the)i(top)e(of)g(our)75 1370 y Fk(rdist)13 b Fl(tree.)75 1478 y Fj(5.3)56 b(Problems)175 1553 y Fl(There)15 b(are)f(a)g(few)g(problems,)e (some)h(of)g(whic)o(h)h(cannot)g(b)q(e)h(easily)e(resolv)o(ed:)137 1670 y Fi(\017)21 b Fl(Some)15 b(programs)g(need)i(to)f(b)q(e)h Fh(setgid)g Fl(to)f(the)h(sp)q(ecial)f(HLFS)p 1181 1670 V 15 w(GID)g(group.)25 b(There)17 b(is)g(no)f(easy)g(w)o(a)o(y)g(to)179 1719 y(lo)q(cate)f(them)g(other)h(than)g(kno)o(wing)e(ahead)i(of)f(time)f (what)h(they)h(do.)23 b(Note)16 b(that)f(if)g(the)h(programs)f(are)179 1769 y(not)c Fh(setgid)p Fl(,)g(the)h(only)f(consequence)i(is)e(that)h(these) g(programs)f(are)g(unable)g(to)g(\014nd)h(mailb)q(o)o(xes.)j(Ho)o(w)o(ev)o (er,)179 1819 y(with)e(other)i(metho)q(ds,)e(if)g($MAIL)h(is)f(not)h(used,)g (mail)e(is)h(not)h(deliv)o(ered.)137 1902 y Fi(\017)21 b Fl(It)12 b(is)f(p)q(ossible)h(that)g(the)h(status)f(of)g(a)f(home)g(directory)h (access)i(will)c(c)o(hange)j(during)e(the)i(time)d(that)i Fk(hlfsd)179 1952 y Fl(cac)o(hes)17 b(this)g(information.)23 b(Pic)o(king)15 b(a)h(smaller)f(cac)o(he)i(expiration)f(time)f(can)i(alleviate)e(this)i (problem,)179 2002 y(but)d(it)g(increases)h(the)g(resources)h(tak)o(en)e(b)o (y)g Fk(hlfsd)f Fl(and)h(slo)o(ws)f(do)o(wn)h(access)i(to)e(mail.)h(It)f(is)g (left)g(for)f(the)179 2051 y(individual)f(SAs)i(to)g(c)o(hange)g(this)g (default)f(v)n(alue.)137 2134 y Fi(\017)21 b Fl(An)o(y)14 b(logins)e(with)i (the)h(same)e Fh(uid)h Fl(and)f(a)h(di\013eren)o(t)h(home)e(directory)h(ma)o (y)e(ha)o(v)o(e)i(mail)d(deliv)o(ered)k(or)e(read)179 2184 y(from)c(an)o(y)i(of)f(their)h(home)f(directory)i(pathnames.)k Fk(Hlfsd)10 b Fl(stores)j(pathnames)d(in)g(an)h(in)o(ternal)g(hash)g(table) 179 2234 y(k)o(ey)o(ed)i(b)o(y)g(the)g Fh(uid)p Fl(;)g(therefore,)h(it)f(is)g (unde\014ned)h(whic)o(h)f(pathname)f(is)g(returned)j(in)d(the)i(case)g(of)e (m)o(ultiple)179 2284 y(users)k(with)e(the)h(same)f Fh(uid)h Fl(and)g(di\013eren)o(t)g(home)f(directories.)21 b(W)m(e)14 b(pro)o(vide)h(a)f(script)i(whic)o(h)e(c)o(hec)o(ks)i(for)179 2334 y(this)e(situation)f(and)h(w)o(arns)g(the)g(SAs.)137 2417 y Fi(\017)21 b Fl(On)16 b(systems)g(that)g(cannot)g(turn)g(o\013)g(the)g(NFS) g(attribute)g(cac)o(he,)h(the)g(k)o(ernel)f(migh)o(t)d(return)k(the)g(same) 179 2467 y(sym)o(b)q(olic)8 b(link)h(name)f(for)i(t)o(w)o(o)f(di\013eren)o(t) i(users)g(who)f(access)h(the)g(sp)q(o)q(ol)e(directory)i(consecutiv)o(ely)m (,)f(p)q(ossibly)179 2516 y(resulting)17 b(in)f(mail)e(getting)i(deliv)o (ered)h(to)g(the)g(wrong)g(mailb)q(o)o(x!)23 b(On)17 b(these)h(systems,)f Fk(hlfsd)f Fl(will)f(not)179 2566 y(run)h(unless)g(started)g(with)f(a)h(sp)q (ecial)f(option.)22 b(In)16 b(that)f(case)i(it)e(will)f(set)i(the)g (attribute)g(cac)o(he)g(v)n(alue)f(to)179 2616 y(the)f(shortest)i(p)q (ossible)e(in)o(terv)n(al,)e(but)i(it)g(ma)o(y)e(not)i(b)q(e)g(su\016cien)o (t.)954 2825 y(12)p eop %%Page: 13 13 bop 75 42 a Fj(6)56 b(Related)17 b(W)-5 b(ork)175 117 y Fl(The)18 b(idea)f(of)h(dynamic)e(or)h(v)n(ariable)g(pathname)g(comp)q(onen)o(ts)g(is)h (not)g(new.)30 b(HP-UX)18 b(do)q(es)g(this)g(with)75 166 y(con)o(text-dep)q (enden)o(t)g(\014les[8],)d(and)g(Mac)o(h)h(with)f(the)h(\\)p Fk(@SYS)p Fl(")f(v)n(ariables[4)n(].)23 b(Both)16 b(of)f(these)i(implemen)o (tations)75 216 y(supp)q(ort)11 b(replacemen)o(t)f(of)f(pathname)g(comp)q (onen)o(ts)h(b)o(y)g(k)o(ernel)g(v)n(ariables.)16 b(Ap)q(ollo's)9 b(DOMAIN/OS)i(supp)q(orted)75 266 y(a)20 b(more)g(sophisticated)h(system)f (where)i(arbitrary)e(user)i(en)o(vironmen)o(t)d(v)n(ariables)h(could)g(b)q(e) h(referenced)i(in)75 316 y(pathnames[11)n(,)12 b(12].)k(On)d(the)g(issue)g (of)e(ha)o(ving)g(a)h(user's)i(home)d(\014les)h(and)g(mailb)q(o)o(x)e(\014le) i(reside)h(in)f(one)g(lo)q(cation,)75 366 y(Plan)h(9's)h Fh(attach)g Fl(op)q(erator)h(can)f(b)q(e)g(used)h(to)f(unify)f(sev)o(eral)h(\014le)g (serv)o(ers)i(in)o(to)d(one)h(user)h(name)e(space[14].)175 440 y(What)f(is)h(new)g(ab)q(out)g(our)g(idea)g(is)g(that)g(w)o(e)g(do)f(not) h(require)h(an)o(y)f(c)o(hange)g(to)g(an)o(y)f(part)h(of)g(the)g (\014lesystem)75 490 y(implemen)o(tatio)o(n)c(in)i(the)i(k)o(ernel.)18 b(All)10 b(that)i(is)g(required)h(are)f(RPC)f(and)h(NFS,)f(making)f(the)i (system)f(m)o(uc)o(h)g(more)75 540 y(widely)i(applicable.)175 615 y(Though)i(at)h(\014rst)h(it)e(ma)o(y)f(app)q(ear)i(that)g Fk(amd)f Fl(can)i(do)e(what)h(hlfsd)f(do)q(es,)i(it)f(can't.)24 b Fk(Amd)15 b Fl(cannot)h(return)75 665 y(di\013eren)o(t)d(pathnames)f(as)g (a)g(v)n(alue)g(of)g(a)g(sym)o(b)q(olic)f(link)g(dep)q(ending)i(on)f(who)g (accessed)j(it.)i(See)c(also)f(Section)h(2.3)75 714 y(for)h(more)e(details)i (on)g(v)n(arious)f(w)o(a)o(ys)g(in)h(whic)o(h)g Fk(amd)f Fl(cannot)h(help)g (the)g(w)o(a)o(y)g Fk(hlfsd)e Fl(can.)75 822 y Fj(6.1)56 b(Mail-reading)17 b(Serv)n(ers)175 897 y Fl(The)11 b(future)g(of)g(mail)d(reading)i(and)h (sending)g(ma)o(y)e(b)q(e)i(similar)e(to)h(that)h(used)h(b)o(y)f(the)g(NNTP)g (proto)q(col)g(used)75 947 y(for)g(managing)d(NetNews[10)q(,)j(19)o(].)17 b(That)11 b(is,)g(a)g(sp)q(ecial-purp)q(ose)h(serv)o(er)h(whic)o(h)e(pro)o (vides)h(net)o(w)o(ork)f(connections)75 997 y(for)j(reading)f(and)h(writing)f (mail)e(remotely)m(.)175 1072 y(Sev)o(eral)19 b(suc)o(h)g(programs)f(exist,)i (most)e(notably)g(IMAP[16])g(and)h(POP[17].)32 b(Ho)o(w)o(ev)o(er,)20 b(use)g(of)f(these)75 1122 y(serv)o(ers)14 b(is)e(limited)e(at)i(this)g(time) e(b)q(ecause)k(most)d(MT)m(As)h(and)g(UAs)h(ha)o(v)o(e)f(not)g(b)q(een)h(con) o(v)o(erted)g(to)f(use)h(them,)e(or)75 1171 y(they)i(require)h(sp)q(ecial)f (en)o(vironmen)o(ts)f(\(the)i Fh(A)o(ndr)n(ew)f(Message)i(Delivery)e(System)p Fl([18)o(])g(requires)h(AFS\).)e(P)o(orting)75 1221 y(those)18 b(applications)f(for)h(most)e(p)q(opular)i(en)o(vironmen)o(ts)f(is)g(not)h (going)f(to)g(b)q(e)i(an)e(easy)h(task.)30 b(Nev)o(ertheless,)75 1271 y(the)15 b(b)q(ene\014ts)h(of)d(suc)o(h)i(services)h(o)o(v)o(er)e(that)g (of)g Fk(hlfsd)f Fl(w)o(ould)g(include)h(faster)h(and)f(more)f(reliable)h (service,)h(plus)75 1321 y(greatly)e(expanded)h(functionalit)o(y)e(\(p)q (ossibly)h(pro)o(viding)f(threads)i(information)c(for)j(threaded)i(mail)10 b(readers\).)75 1429 y Fj(7)56 b(Conclusion)175 1504 y Fl(W)m(e)16 b(ha)o(v)o(e)h(describ)q(ed)i(the)f(b)q(ene\014ts)h(of)d(deliv)o(ering)h (mail)d(to)j(users')h(home)e(directories,)j(the)e(traditional)75 1554 y(w)o(a)o(ys)10 b(to)f(do)h(that)g(and)g(wh)o(y)f(w)o(e)i(think)e(they)h (are)h(inadequate,)f(and)g(the)g(design,)h(implemen)o(tatio)o(n,)d(p)q (erformance,)75 1604 y(and)14 b(con)o(v)o(enience)h(of)e(our)h(alternativ)o (e.)175 1678 y(The)i(main)f(con)o(tribution)g(of)h(our)g(w)o(ork)g(is)h(the)g (idea)f(mail)d(can)k(b)q(e)g(reliably)e(deliv)o(ered)i(to)f(user's)h(home)75 1728 y(directories)12 b(for)e(easy)h(access)i(with)d(v)o(ery)h(little)f(o)o (v)o(erhead,)h(user)g(hassle,)h(or)e(the)i(need)f(for)f(extensiv)o(e)i(in)o (terv)o(en)o(tion)75 1778 y(on)i(the)g(part)g(of)f(SAs.)175 1853 y(A)h(w)o(orking)f(protot)o(yp)q(e)i(v)o(ersion)f(of)g Fk(hlfsd)f Fl(w)o(as)h(written)h(in)f(one)g(w)o(eek)o(end.)20 b(Ho)o(w)o(ev)o(er,)15 b(the)f(ideas)h(repre-)75 1902 y(sen)o(ted)e(in)e(the) i(w)o(ork)e(span)h(sev)o(eral)h(y)o(ears)f(of)f(exp)q(erience)j(in)d(net)o(w) o(ork)h(programming)c(\(esp)q(ecially)13 b(RPC)o(\),)f(NFS,)75 1952 y Fk(amd)p Fl(,)h(and)g(mail)f(systems.)75 2060 y Fj(7.1)56 b(F)-5 b(uture)18 b(W)-5 b(ork)175 2135 y Fl(It)15 b(w)o(ould)e(b)q(e)j(p)q (ossible)f(to)g(in)o(tegrate)g(some)f(of)g Fk(hlfsd)o Fl('s)g(functionalit)o (y)g(in)o(to)g Fk(amd)p Fl(,)g(b)o(y)g(pro)o(viding)g(sp)q(ecial)75 2185 y(k)o(eyw)o(ords)g(lik)o(e)f Fk($)p Fi(f)p Fk(home)p Fi(g)p Fl(,)f Fk($)p Fi(f)p Fk(user)p Fi(g)g Fl(and)i Fk($)p Fi(f)p Fk(group)p Fi(g)e Fl(for)i(use)h(in)e Fk(amd)p Fl('s)g(maps.)175 2260 y(W)m(e)e(plan)g(on)g(making)e(sure)k Fk(hlfsd)d Fl(is)h(as)h(p)q (ortable)g(as)f Fk(amd)g Fl(is,)g(and)h(impro)o(ving)d(its)i(p)q(erformance)h (as)f(m)o(uc)o(h)75 2310 y(as)j(p)q(ossible.)k(An)c(RPC)g(in)o(terface)g(for) g(querying)g Fk(hlfsd)o Fl('s)f(status)i(is)f(needed)h(as)f(w)o(ell.)75 2418 y Fj(7.2)56 b(Alternativ)n(e)17 b(Uses)175 2493 y Fk(Hlfsd)o Fl('s)g(primary)e(use)j(is)f(that)h(of)e(a)h(mail-sp)q(o)q(ol)e(redirector.) 29 b(Ho)o(w)o(ev)o(er,)18 b(it)f(can)h(b)q(e)g(used)g(to)f(p)q(erform)75 2543 y(other)e(tasks.)j(All)13 b(it)h(tak)o(es)g(are)g(the)h(righ)o(t)e (command-li)o(ne)f(options:)137 2650 y Fi(\017)21 b Fk(Hlfsd)10 b Fl(can)h(manage)e(the)j Fk(/var/tmp)d Fl(directory)m(.)17 b(Th)o(us)12 b(ev)o(ery)f(user)h(who)f(uses)h Fk(/var/tmp)e Fl(w)o(ould)g(actually)179 2700 y(b)q(e)j(using)e(a)h(sub)q(directory)i (within)d(their)i(o)o(wn)e(home)g(directory)m(,)i(rather)g(than)f(taking)f (from)f(system-wide)954 2825 y(13)p eop %%Page: 14 14 bop 179 42 a Fl(resources.)137 124 y Fi(\017)21 b Fl(Other)13 b(t)o(yp)q(es)g(of)e(user-sp)q(eci\014c)k(\014les)d(whic)o(h)g(get)h(sp)q(o)q (oled)f(to)g(a)g(particular)g(host,)g(suc)o(h)h(as)f Fh(Se)n(cr)n(et)h(Mail)p Fl([24)n(])179 173 y(or)h(electronic)h(faxes)f(can)g(also)f(b)q(e)h (redirected)i(for)e(sp)q(o)q(oling)f(in)o(to)g(home)g(directories.)75 296 y Fj(8)56 b(Ac)n(kno)n(wledgmen)n(ts)175 371 y Fl(Sp)q(ecial)10 b(thanks)h(go)e(to)i(Daniel)e(Duc)o(hamp)g(for)h(his)g(in)o(v)n(aluable)f (commen)o(ts)f(on)i(the)h(pap)q(er,)h(to)e(James)g(T)m(anis)75 421 y(who)g(wrote)h(the)f(remailing)e(script)j(and)f(pro)o(vided)g(useful)g (feedbac)o(k,)h(and)f(to)g(all)f(mem)o(b)q(ers)g(of)g(the)i(tec)o(hnical)g (sta\013)75 471 y(who)e(help)q(ed)h(in)f(stress-testing)i Fk(hlfsd)o Fl(.)17 b(W)m(e)9 b(also)f(thank)h(man)o(y)f(mem)o(b)q(ers)g(of)g(the)i Fk(amd-workers@acl.lan)o(l.gov)75 520 y Fl(mailing)h(list)i(for)h(pro)o (viding)e(v)n(aluable)h(discussion)h(on)g(the)g(sub)r(ject.)175 595 y(This)f(w)o(ork)h(w)o(as)f(supp)q(orted)i(in)e(part)h(b)o(y)f(a)h (National)e(Science)j(F)m(oundation)d(CISE)i(Institutional)f(Infras-)75 645 y(tructure)j(gran)o(t,)d(n)o(um)o(b)q(er)g(CD)o(A-90-24735.)175 720 y(As)i Fk(hlfsd)f Fl(uses)i(parts)f(of)f(the)i Fk(amd)e Fl(distribution,)g(it)h(is)f(distributed)i(under)g(the)f(same)f(restrictions) i(and)75 769 y(licenses)f(that)f Fk(amd)f Fl(is.)75 877 y Fj(9)56 b(References)75 952 y Fl([1])20 b(E.)14 b(Allman.)k(SENDMAIL)d({)f(An)h(In)o (ternet)o(w)o(ork)h(Mail)d(Router.)21 b(In)14 b Fh(UNIX)i(System)f(Manager's) h(Manual.)140 1002 y Fl(Univ)o(ersit)o(y)d(of)h(California,)d(Berk)o(eley)m (,)j(1986.)75 1084 y([2])20 b(F.)g(C.)g(Baran.)39 b(MW:)20 b(Mail-W)m(atc)o(h.)37 b(An)21 b(unpublished)g(man)o(ual)d(page,)k(Academic)e (Systems)h(Group,)140 1134 y(Colum)o(bia)11 b(Univ)o(ersit)o(y)i(Cen)o(ter)i (for)f(Computing)e(Activities,)h(1987.)75 1216 y([3])20 b(B.)12 b(Callaghan)f(and)h(T.)g(Ly)o(on.)j(The)e(Automoun)o(ter.)i(In)e Fh(Pr)n(o)n(c.)g(1989)h(Winter)g(USENIX)g(Conf.)p Fl(,)e(pp.)g(43{51,)140 1266 y(Jan)o(uary)h(1989.)75 1348 y([4])20 b(M.)13 b(N.)g(Condict.)18 b(Con\014guring)13 b(and)g(Building)g(Mac)o(h)h(3.0.)i(OSF)e(Researc)o(h)h (Institute,)f(Grenoble,)g(F)m(rance.)140 1398 y(Unpublished)g(notes)g(a)o(v)n (ailable)e(via)h(ftp)h(from)e Fk(mach.cs.cmu.edu:d)o(oc/no)o(tes/k)o(ernel)p 1595 1398 14 2 v 12 w(build.doc)p Fl(.)75 1480 y([5])20 b(M.)13 b(A.)g(Co)q(op)q(er.)18 b(Ov)o(erhauling)13 b(Rdist)g(for)h(the)g('90s.)j Fh(L)n(ar)n(ge)d(Instal)r(lation)h(System)g(A)n(dministr)n(ators)e(Work-)140 1530 y(shop)i(Pr)n(o)n(c)n(e)n(e)n(dings)p Fl(,)e(pp.)h(1-8,)f(USENIX,)h (Long)f(Beac)o(h,)h(CA,)g(Octob)q(er)h(19-June)f(23,)f(1992.)75 1612 y([6])20 b(A.)13 b(J.)h(Findla)o(y)m(.)i(The)e(Home-Directory)f(Mail)g (System.)18 b(In)13 b Fh(EUUG)i(News)p Fl(,)e(Autumn)g(1988.)75 1694 y([7])20 b(J.)13 b(F)m(ulton.)k(MIT)d(X)g(Consortium.)j(X11R5)12 b(Reference)k(Man)o(ual)d(P)o(ages,)h(Section)g(1:)k(\\xbi\013\(1\)",)12 b(1988.)75 1776 y([8])20 b(Hewlett-P)o(ac)o(k)n(ard)14 b(Compan)o(y)m(.)j (HP-UX)e(Release)g(9.0)e(Reference)j(Man)o(ual,)d(Section)i(4:)k (\\cdf\(4\)",)13 b(August)140 1826 y(1992.)75 1908 y([9])20 b(IBM)11 b(Corp.)j(AIX)e(Comma)o(nds)d(Reference,)k(V)m(olume)d(1,)h(\\b)q (ellmail\(1\)")o(,)e(pp.)i(1-84|1-87,)e(Decem)o(b)q(er)i(1989.)75 1990 y([10])19 b(B.)14 b(Kan)o(tor)g(and)g(P)m(.)f(Lapsley)m(.)k(Net)o(w)o (ork)e(News)f(T)m(ransfer)h(Proto)q(col.)j(RF)o(C)13 b(977,)f(F)m(ebruary)j (1986;)d(27)h(p.)75 2073 y([11])19 b(P)m(.)14 b(J.)h(Leac)o(h,)g(P)m(.)f(H.)g (Levine,)h(B.)f(P)m(.)g(Douros,)h(J.)f(A.)h(Hamilton,)c(D.L.)j(Nelson,)g(and) h(B.)g(L.)f(Stumpf.)19 b Fh(The)140 2122 y(A)o(r)n(chite)n(ctur)n(e)14 b(of)j(an)f(Inte)n(gr)n(ate)n(d)g(L)n(o)n(c)n(al)g(Network.)22 b Fl(In)15 b Fh(IEEE)i(Journal)f(on)h(Sele)n(cte)n(d)f(A)o(r)n(e)n(as)g(in)g (Communi-)140 2172 y(c)n(ations,)d Fm(SA)o(C-1)p Fl(\(5\),)g(pp.)h(842-856,)e (No)o(v)o(em)o(b)q(er)h(1983.)75 2254 y([12])19 b(P)m(.)12 b(H.)f(Levine.)16 b Fh(The)d(Ap)n(ol)r(lo)g(DOMAIN)g(Distribute)n(d)g(File)f (System.)k Fl(In)c Fh(NA)m(TO)g(ASI)i(Series:)j(The)n(ory)c(and)140 2304 y(Pr)n(actic)n(e)k(of)i(Distribute)n(d)f(Op)n(er)n(ating)g(Systems,)g Fl(Y.)g(P)o(ak)o(er,)g(J-P)m(.)g(Banatre,)h(M.)e(Bozyi\024)-21 b(git,)18 b(pp.)f(241-260,)140 2354 y(editors,)d(Springer-V)m(erlag,)f(1987.) 75 2436 y([13])19 b(J.)14 b(S.)g(P)o(endry)h(and)f(N.)g(William)o(s.)j Fh(A)o(md)e(-)g(The)g(4.4)g(BSD)h(A)o(utomounter)p Fl(.)k(Imp)q(erial)12 b(College)i(of)g(Science)140 2486 y(T)m(ec)o(hnology)f(and)g(Medicine,)h (London.)f(Marc)o(h)h(1991.)75 2568 y([14])19 b(R.)14 b(Pik)o(e,)g(D.)f (Presotto,)i(K.)f(Thompson,)f(and)h(H.)g(T)m(ric)o(k)o(ey)m(.)19 b Fh(Plan)d(9)f(fr)n(om)g(Bel)r(l)g(L)n(abs)p Fl(.)k(In)c Fh(Pr)n(o)n(c)n(e)n (e)n(dings)g(of)140 2618 y(the)g(Summer)f(1990)i(UKUUG)f(Conf.)p Fl(,)e(London,)g(July)m(,)f(1990,)h(pp.)g(1-9.)75 2700 y([15])19 b(J.)14 b(B.)g(P)o(ostel.)k(Simple)12 b(Mail)h(T)m(ransfer)h(Proto)q(col.)k (RF)o(C)13 b(821,)g(August)h(1982;)f(68)g(p.)954 2825 y(14)p eop %%Page: 15 15 bop 75 42 a Fl([16])19 b(J.)14 b(Rice.)k(In)o(teractiv)o(e)d(Mail)d(Access)k (Proto)q(col.)i(RF)o(C)c(1203,)e(F)m(ebruary)i(1991;)f(49)g(p.)75 125 y([17])19 b(M.)14 b(Rose.)k(P)o(ost)c(O\016ce)h(Proto)q(col.)j(RF)o(C)13 b(1225,)f(Ma)o(y)i(1991;)e(16)h(p.)75 208 y([18])19 b(J.)f(Roseneb)q(erg,)h (C.)f(F.)f(Ev)o(erhart,)i(and)f(N.)g(S.)f(Borenstein.)32 b Fh(A)o(n)19 b(Overview)f(of)g(the)h(A)o(ndr)n(ew)f(Message)140 257 y(System)p Fl(.)i(In)15 b Fh(Pr)n(o)n(c)n(e)n(e)n(dings)h(of)f(the)h(A)o (CM)f(SIGCOMM)h('87)g(Workshop)p Fl(,)g(Sto)o(w)o(e,)e(V)m(ermon)o(t,)f (August)j(11-13,)140 307 y(1987,)c(pp.)h(99-108.)75 390 y([19])19 b(R.)d(Salz.)24 b Fh(InterNetNews:)e(Usenet)17 b(tr)n(ansp)n(ort)g(for)f (Internet)h(sites)p Fl(.)24 b(In)17 b Fh(Pr)n(o)n(c.)f(1992)i(Summer)f (USENIX)140 440 y(Conf.)p Fl(,)c(pages)h(93{98,)e(June)j(1992.)75 523 y([20])k(R.)14 b(Sandb)q(erg)h(et)g(al.)k(Design)c(and)f(Implemen)o (tation)e(of)i(the)h(Sun)f(Net)o(w)o(ork)h(Filesystem.)20 b(In)14 b Fh(Pr)n(o)n(c.)h(1985)140 573 y(Summer)g(Usenix)g(Conf.)p Fl(,)e(pages)h(119-130,)e(June)i(1985.)75 656 y([21])19 b(Sun)13 b(Microsystems,)f(Inc.)k(SunOS)d(Reference)h(Man)o(ual,)e(V)m(olume)e(I,)i (Section)h(1:)k(\\bi\013\(1\)",)12 b(Septem)o(b)q(er)h(9,)140 706 y(1987.)75 789 y([22])19 b(Sun)11 b(Microsystems,)f(Inc.)j(SunOS)e (Reference)i(Man)o(ual,)d(V)m(olume)e(I)q(I,)i(Section)h(3:)16 b(\\syslog\(3\)",)10 b(Septem)o(b)q(er)140 839 y(9,)j(1987.)75 922 y([23])19 b(Sun)g(Microsystems,)f(Inc.)33 b(SunOS)19 b(Reference)h(Man)o (ual,)e(V)m(olume)f(I,)h(Section)h(1:)27 b(\\comsat\(8c\)",)18 b(and)140 971 y(\\in.comsat\(8c\)",)11 b(Septem)o(b)q(er)k(9,)e(1987.)75 1054 y([24])19 b(Sun)14 b(Microsystems,)f(Inc.)k(SunOS)d(Reference)h(Man)o (ual,)d(V)m(olume)f(I,)i(Section)h(1:)j(\\xsend\(1\)",)d(\\xget\(1\)",)140 1104 y(and)f(\\enroll\(1\)",)g(Septem)o(b)q(er)h(9,)f(1987.)75 1187 y([25])19 b(Sun)f(Microsystems,)g(Inc.)31 b(NFS:)18 b(Net)o(w)o(ork)g (File)g(System)f(Proto)q(col)h(sp)q(eci\014cation.)31 b(RF)o(C)17 b(1094,)h(1989)140 1237 y(Marc)o(h;)13 b(27)h(p.)75 1320 y([26])19 b(L.)c(W)m(all)f(and)h(R.)f(L.)h(Sc)o(h)o(w)o(artz.)23 b Fh(Pr)n(o)n(gr)n (amming)16 b(Perl)p Fl(.)22 b(O'Reilly)14 b(&)h(Asso)q(ciates,)i(Inc.,)e (Sebastop)q(ol,)h(CA)140 1370 y(\(1991\).)75 1453 y([27])j(R.)d(S.)g(Zac)o (hariassen.)26 b Fh(ZMOG:)18 b(The)f(ZMailer)g(Op)n(er)n(ations)f(Guide)p Fl(.)26 b(Av)n(ailable)15 b(via)g(ftp)i(as)f(part)h(of)e(the)140 1503 y(ZMailer)e(distribution)h(from)e Fk(ftp.uu.net:/netwo)o(rkin)o(g/mai)o (l/zma)o(iler)p Fl(.)75 1627 y Fj(10)56 b(Author)19 b(Information)175 1702 y Fm(Erez)f(Zadok)e Fl(is)g(an)f(MS)h(candidate)g(and)g(full-time)d (Sta\013)k(Asso)q(ciate)f(in)g(the)g(Computer)g(Science)h(De-)75 1752 y(partmen)o(t)11 b(at)h(Colum)o(bia)d(Univ)o(ersit)o(y)m(.)16 b(His)c(primary)e(in)o(terests)k(include)e(op)q(erating)f(systems,)h(\014le)g (systems,)g(and)75 1802 y(w)o(a)o(ys)j(to)g(ease)h(system)f(administration)e (tasks.)23 b(In)15 b(Ma)o(y)g(1991,)f(he)i(receiv)o(ed)g(his)f(B.S.)g(in)g (Computer)g(Science)75 1852 y(from)g(Colum)o(bia's)f(Sc)o(ho)q(ol)i(of)g (Engineering)h(and)f(Applied)h(Science.)28 b(Erez)18 b(came)e(to)g(the)i (United)f(States)g(six)75 1902 y(y)o(ears)d(ago)e(and)i(has)f(liv)o(ed)g(in)g (New)g(Y)m(ork)g(\\Sin")g(Cit)o(y)f(ev)o(er)j(since.)j(In)c(his)f(rare)h (free)g(time)e(Erez)j(is)e(an)g(amateur)75 1951 y(photographer,)h(science)h (\014ction)f(dev)o(otee,)h(and)e(ro)q(c)o(k-n-roll)g(fan.)175 2026 y(Mailing)h(address:)25 b(500)16 b(W)m(est)h(120)747 2011 y Fa(th)797 2026 y Fl(Street,)h(Colum)o(bia)c(Univ)o(ersit)o(y)m(,)i(New)h(Y) m(ork,)g(NY)f(10027.)25 b(Email)75 2076 y(address:)19 b Fk (ezk@cs.columbia.edu)o Fl(.)175 2151 y Fm(Alexander)10 b(Dupuy)g Fl(has)h(b)q(een)h(a)e(Senior)h(Researc)o(h)i(Sta\013)e(Asso)q(ciate)h(for)e (the)i(Distributed)f(Computing)75 2200 y(and)i(Comm)o(uni)o(cations)d(Lab)j (in)f(the)i(Computer)e(Science)i(Departmen)o(t)f(at)f(Colum)o(bia)e(Univ)o (ersit)o(y)j(for)g(the)g(last)75 2250 y(7)h(y)o(ears.)21 b(He)16 b(has)f(recen)o(tly)g(tak)o(en)g(a)f(p)q(osition)h(at)f(System)g(Managemen)o (t)g(AR)m(TS,)f(a)i(small)d(startup)k(compan)o(y)75 2300 y(dev)o(eloping)e (net)o(w)o(ork)h(and)g(systems)g(managemen)o(t)d(tec)o(hnology)m(.)20 b(A)15 b(nativ)o(e)g(b)q(orn)g(and)g(bred)g(New)h(Y)m(ork)o(er,)e(he)75 2350 y(insists)g(that)g(w)o(orking)f(in)h(the)g(suburbs)h(is)f(not)g(the)g (\014rst)h(step)g(to)o(w)o(ards)f(living)e(there.)175 2425 y(Mailing)h(address:)23 b(System)15 b(Managemen)o(t)f(AR)m(TS,)g(199)h(Main)g (Street,)h(Suite)g(900,)f(White)g(Plains,)g(NY)75 2474 y(10601.)i(Email)11 b(address:)20 b Fk(dupuy@smarts.co)o(m)p Fl(.)954 2825 y(15)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF