%!PS-Adobe-2.0 %%Creator: dvips by Radical Eye Software %%Pages: 8 1 %%BoundingBox: 0 0 612 792 %%EndComments %%BeginDocument: tex.pro /TeXDict 200 dict def TeXDict begin /bdf{bind def}def /bop-aux{}bdf /@rigin{ /@page-height exch def /@page-width exch def 72 Resolution div dup neg scale translate}bdf /@letter{Resolution dup -10 mul 8.5 11 @rigin}bdf /@landscape{[ 0 1 -1 0 0 0]concat Resolution dup 8.5 11 @rigin}bdf /@a4{Resolution dup -10.6929133858 mul 21 2.54 div 29.7 2.54 div @rigin}bdf /@legal{Resolution dup -13 mul 8.5 14 @rigin}bdf /@11x17{statusdict /11x17tray known{statusdict begin 11x17tray end}if Resolution dup -16 mul 11 17 @rigin}bdf /@manualfeed{ statusdict /manualfeed true put}bdf /@copies{/#copies exch def}bdf /@draft{ /bop-aux{gsave initmatrix 72 dup scale @page-width 2 div @page-height 2 div translate @page-height @page-width atan rotate /Helvetica-Bold findfont 2 scalefont setfont(DRAFT)dup stringwidth pop 2 div neg -1 moveto .95 setgray show grestore}bdf}bdf /@FontMatrix[1 0 0 -1 0 0]def /@FontBBox[0 0 0 0]def /dmystr(ZZf@@@)def /newname{dmystr cvn}bdf /df{/fontname exch def dmystr 2 fontname cvx(@@@@)cvs putinterval newname 7 dict def newname load begin /FontType 3 def /FontMatrix @FontMatrix def /FontBBox @FontBBox def /BitMaps 256 array def /BuildChar{CharBuilder}def /Encoding IdentityEncoding def end fontname{/foo setfont}2 array copy cvx def fontname load 0 dmystr 6 string copy cvn cvx put}bdf /dfe{newname dup load definefont setfont}bdf /ch-image{ ch-data 0 get}bdf /ch-width{ch-data 1 get}bdf /ch-height{ch-data 2 get}bdf /ch-xoff{ch-data 3 get}bdf /ch-yoff{ch-data 4 get}bdf /ch-dx{ch-data 5 get} bdf /CharBuilder{save 3 1 roll exch /BitMaps get exch get /ch-data exch def ch-data null ne{ch-dx 0 ch-xoff ch-yoff neg ch-xoff ch-width add ch-height ch-yoff sub setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-height ch-yoff sub .1 add]{ch-image}imagemask}if restore}bdf /dc{/ch-code exch def /ch-data exch def newname load /BitMaps get ch-code ch-data put}bdf /bop{gsave /SaveImage save def /bop-aux load exec 0 0 moveto}bdf /eop{clear SaveImage restore showpage grestore}bdf /@start{/Resolution exch def /IdentityEncoding 256 array def 0 1 255{IdentityEncoding exch 1 string dup 0 3 index put cvn put}for}bdf /p{show}bdf /RuleMatrix[1 0 0 -1 -.1 -.1]def /BlackDots 8 string def /v{gsave currentpoint translate false RuleMatrix{ BlackDots}imagemask grestore}bdf /a{moveto}bdf /delta 0 def /tail{dup /delta exch def 0 rmoveto}bdf /b{exch show tail}bdf /c{show delta 4 sub tail}bdf /d{ show delta 3 sub tail}bdf /e{show delta 2 sub tail}bdf /f{show delta 1 sub tail}bdf /g{show delta 0 rmoveto}bdf /h{show delta 1 add tail}bdf /i{show delta 2 add tail}bdf /j{show delta 3 add tail}bdf /k{show delta 4 add tail} bdf /l{show -4 0 rmoveto}bdf /m{show -3 0 rmoveto}bdf /n{show -2 0 rmoveto} bdf /o{show -1 0 rmoveto}bdf /q{show 1 0 rmoveto}bdf /r{show 2 0 rmoveto}bdf /s{show 3 0 rmoveto}bdf /t{show 4 0 rmoveto}bdf /w{0 rmoveto}bdf /x{0 exch rmoveto}bdf /y{3 2 roll show moveto}bdf /bos{/section save def}bdf /eos{clear section restore}bdf end %%EndDocument TeXDict begin 300 @start /fa df[<00030004000800100020006000C00180010003000600 06000C000C001C0018001800380030003000700070006000600060006000E000E000E000E000E0 00E00060006000600060006000300030001000180008000C00040002000100>16 46 4 12 18] 40 dc[<008000C000600020003000180018000C000C000C000E00060006000600060006000600 060006000600060006000E000E000E000C000C001C001800180038003000300060006000C000C0 01800100030006000C001800300060008000>15 46 1 12 18]41 dc[<00000400000C00000C00 00180000180000300000300000600000600000C00000C000018000018000030000030000060000 0600000C00000C0000180000180000300000300000600000600000C00000C00001800001800003 00000300000600000600000600000C00000C0000180000180000300000300000600000600000C0 0000C00000800000>22 45 2 11 23]47 dc[<07FC0000FFC0007C0000F800003C00017800003C 00017800004E0002F000004E0002F000004E0004F000004E0004F000004E0008F000004E0008F0 0000870011E00000870011E00000870021E00000870021E00000870041E00000838041E0000103 8083C00001038083C00001038103C00001038203C0000101C203C0000101C403C0000201C40780 000201C80780000201C80780000201D00780000200F00780000600E00780000600E00F00000F00 C00F8000FFE0C1FFF800>42 31 2 0 42]77 dc[<07F8000C0C001E06001E07001C0700000700 00070000070000FF0007C7001E07003C0E00780E00F00E10F00E10F00E10F01E10F02E20784F40 1F8780>20 20 3 0 23]97 dc[<01FC07060E0F1C0F380E78007000F000F000F000F000E000E0 00E000E000F0027004300818300FC0>16 20 4 0 20]99 dc[<00F800070E000E07001C070038 0380780380700380F00380F00380FFFF80F00000E00000E00000E00000E00000F0010070020030 04001C180007E000>17 20 3 0 20]101 dc[<0007800018C00031E00061E000E1C000C00001C0 0001C00001C00001C00001C0000380007FF8000380000380000380000380000700000700000700 000700000700000700000E00000E00000E00000E00000E00000E00001C00001E0000FFE000>19 32 2 0 14]102 dc[<00E00007E00001E00000E00000E00001C00001C00001C00001C00001C000 01C000038000038F800390E003A0E003C0600380600780E00700E00700E00700E00700E00700E0 0E01C00E01C00E01C00E01C00E01C00E01C01C03801E03C0FFCFF8>21 32 2 0 25]104 dc[<01 C003E003E003E001C000000000000000000000000003801F800780038003800700070007000700 070007000E000E000E000E000E000E001C001E00FF80>11 31 1 0 12]105 dc[<0387C07C001F 9861860007A072070003C034030003803803000780780700070070070007007007000700700700 070070070007007007000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E 001C01C01C001E01E01E00FFCFFCFFC0>34 20 2 0 38]109 dc[<038F801F90E007A0E003C060 0380600780E00700E00700E00700E00700E00700E00E01C00E01C00E01C00E01C00E01C00E01C0 1C03801E03C0FFCFF8>21 20 2 0 25]110 dc[<00FC000387000E01801C00C03800E03800E070 00F0F000F0F000F0F000F0F000F0E001E0E001E0E001C0E003C0F00380700700380E001C1C0007 E000>20 20 3 0 23]111 dc[<00E3E007EC3800F01C00E01E00E00E01C00E01C00F01C00F01C0 0F01C00F01C00F03801E03801E03801C03803C0380380380700740E00721C0071F000700000700 000700000E00000E00000E00000E00001E0000FFC000>24 29 0 9 25]112 dc[<038E001FB380 07C78003C7800383000780000700000700000700000700000700000E00000E00000E00000E0000 0E00000E00001C00001E0000FFE000>17 20 2 0 18]114 dc[<01F2060E080618061802380438 001E001FE00FF003F8003C401C400C400C600C6018E010D0608FC0>15 20 2 0 18]115 dc[<00 80010001000100030007000F001E00FFF80E000E000E000E001C001C001C001C001C001C003800 38203820382038203840384018800F00>13 28 4 0 18]116 dc[<1C0380FC1F803C07801C0380 1C0380380700380700380700380700380700380700700E00700E00700E00700E00701E00701E00 703C00305E001F9FC0>18 20 5 0 25]117 dc dfe /fb df[<0C003C00CC000C000C000C000C 000C000C000C000C000C000C000C000C00FF80>9 16 2 0 15]49 dc dfe /fc df[<03000700 FF00070007000700070007000700070007000700070007000700070007000700070007007FF0> 12 21 2 0 18]49 dc dfe /fd df[<7F8FE07F9FE07F8FE00E07000F0700070E00078E00039C 0003DC0001F80001F80000F00000F00000700000F00000F80001F80001DC00039E00038E00070F 000707000E07800E03801E03C07F07F0FF8FF87F07F0>21 28 1 0 24]88 dc[<01FE0007FF00 1FFF803E0780380300700000700000E00000E00000E00000E00000E00000E000007000007001C0 3801C03E03C01FFF8007FF0001FC00>18 20 3 0 24]99 dc[<01F00007FC001FFE003E0F0038 0780700380700380E001C0E001C0FFFFC0FFFFC0FFFFC0E000007000007001C03801C03E03C01F FF8007FF0001FC00>18 20 3 0 24]101 dc[<001F80007FC000FFE000E1E001C0C001C00001C0 0001C0007FFFC0FFFFC0FFFFC001C00001C00001C00001C00001C00001C00001C00001C00001C0 0001C00001C00001C00001C00001C0007FFF007FFF007FFF00>19 28 1 0 24]102 dc[<7E0000 FE00007E00000E00000E00000E00000E00000E00000E3E000EFF800FFFC00FC1C00F80E00F00E0 0E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E07FC3FCFFE7FE 7FC3FC>23 28 0 0 24]104 dc[<7FE000FFE0007FE00000E00000E00000E00000E00000E00000 E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000 E00000E00000E00000E0007FFFC0FFFFE07FFFC0>19 28 2 0 24]108 dc[<7E3E00FEFF807FFF C00FC1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00 E00E00E07FC3FCFFE7FE7FC3FC>23 20 0 0 24]110 dc[<07F7003FFF007FFF00780F00E00700 E00700E007007C00007FE0001FFC0003FE00001F00600780E00380E00380F00380F80F00FFFF00 FFFC00E7F000>17 20 3 0 24]115 dc[<0180000380000380000380000380007FFFC0FFFFC0FF FFC00380000380000380000380000380000380000380000380000380000380400380E00380E003 80E001C1C001FFC000FF80003E00>19 25 1 0 24]116 dc[<7E07E0FE0FE07E07E00E00E00E00 E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E01E00F03E007FF FC03FFFE01FCFC>23 20 0 0 24]117 dc[<7F8FF0FF8FF87F8FF00E01C00E03800E0380070380 070700070700038700038600038E0001CE0001CE0000CC0000CC0000DC00007800007800007800 00700000700000700000F00000E00079E0007BC0007F80003F00001E0000>21 30 1 10 24] 121 dc dfe /fe df[<387CFEFEFE7C38>7 7 4 0 16]46 dc[<00180000780001F800FFF800FF F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001 F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8007F FFE07FFFE0>19 32 4 0 28]49 dc[<03FC000FFF003C1FC07007E07C07F0FE03F0FE03F8FE03 F8FE01F87C01F83803F80003F80003F00003F00007E00007C0000F80001F00003E000038000070 0000E01801C0180380180700180E00380FFFF01FFFF03FFFF07FFFF0FFFFF0FFFFF0>21 32 3 0 28]50 dc[<0000E00001E00003E00003E00007E0000FE0001FE0001FE00037E00077E000E7E001 C7E00187E00307E00707E00E07E00C07E01807E03807E07007E0E007E0FFFFFEFFFFFE0007E000 07E00007E00007E00007E00007E00007E000FFFE00FFFE>23 32 2 0 28]52 dc[48 34 2 0 53]77 dc[<7FFFFFFF807FFFFFFF807E03F80F807803F807807003F803 806003F80180E003F801C0E003F801C0C003F800C0C003F800C0C003F800C0C003F800C00003F8 00000003F800000003F800000003F800000003F800000003F800000003F800000003F800000003 F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8000000 03F800000003F800000003F800000003F8000003FFFFF80003FFFFF800>34 34 2 0 39]84 dc[ <7FFFC1FFF07FFFC1FFF003FC000C0001FE00180000FE00380000FF007000007F806000003F80 C000003FC1C000001FE38000000FE30000000FF700000007FE00000003FC00000003FC00000001 FE00000000FE00000000FF00000000FF80000001FFC0000001BFC00000031FE00000070FF00000 0E0FF000000C07F800001803FC00003803FC00003001FE00006000FF0000E000FF0001C0007F80 0180003FC0FFFC03FFFEFFFC03FFFE>39 34 1 0 42]88 dc[<07FC001FFF803F07C03F03E03F 01E03F01F01E01F00001F00001F0003FF003FDF01FC1F03F01F07E01F0FC01F0FC01F0FC01F0FC 01F07E02F07E0CF81FF87F07E03F>24 22 2 0 27]97 dc[26 35 2 0 31]98 dc[<00FF8007FFE00F83F01F03F03E03F07E03F07C 01E07C0000FC0000FC0000FC0000FC0000FC0000FC00007C00007E00007E00003E00301F00600F C0E007FF8000FE00>20 22 2 0 25]99 dc[<00FE0007FF800F87C01E01E03E01F07C00F07C00 F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C00007E00003E00181F00300FC0 7003FFC000FF00>21 22 2 0 26]101 dc[<003F8000FFC001E3E003C7E007C7E00F87E00F83C0 0F80000F80000F80000F80000F80000F8000FFFC00FFFC000F80000F80000F80000F80000F8000 0F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F8000 7FF8007FF800>19 35 1 0 17]102 dc[26 35 2 0 31]104 dc[<1C003F007F007F007F003F001C0000000000000000000000000000 00FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00 1F00FFE0FFE0>11 36 2 0 16]105 dc[26 35 2 0 30]107 dc[11 35 2 0 16]108 dc[43 22 2 0 48]109 dc[26 22 2 0 31]110 dc[<00FE0007FFC00F83E01E00F03E00F87C 007C7C007C7C007CFC007EFC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C3E00F81F 01F00F83E007FFC000FE00>23 22 2 0 28]111 dc[26 32 2 10 31]112 dc[19 22 2 0 23]114 dc[<0FF3003FFF00781F00600700E00300E00300F00300FC00007FE0007FF8003FFE00 0FFF0001FF00000F80C00780C00380E00380E00380F00700FC0E00EFFC00C7F000>17 22 2 0 22]115 dc[<0180000180000180000180000380000380000780000780000F80003F8000FFFF00 FFFF000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F8180 0F81800F81800F81800F81800F830007C30003FE0000F800>17 32 1 0 22]116 dc[27 22 1 0 30]118 dc dfe /ff df[<007E1F8001C170400703C060060380E0 0E0380400E0380000E0380000E0380000E0380000E038000FFFFFFE00E0380E00E0380E00E0380 E00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E00E0380E00E03 80E00E0380E07F8FE3FC>30 26 0 0 32]14 dc[<60C0F1E0F9F068D008100810081010201020 2040C180>12 11 1 -15 19]34 dc[<00800100020004000C0008001800300030003000600060 0060006000E000E000E000E000E000E000E000E000E000E0006000600060006000300030003000 180008000C000400020001000080>9 38 3 10 15]40 dc[<8000400020001000180008000C00 060006000600030003000300030003800380038003800380038003800380038003800300030003 0003000600060006000C00080018001000200040008000>9 38 2 10 15]41 dc[<60F0F07010 101020204080>4 11 3 7 11]44 dc[10 2 0 -7 13]45 dc[<60F0F060>4 4 3 0 11]46 dc[<0004000C00180018001800300030003000600060006000C000C000C0018001800180 0300030003000600060006000C000C000C00180018001800300030003000600060006000C000C0 00>14 37 2 9 19]47 dc[<078018603030303060186018E01CE01CE01CE01CE01CE01CE01CE0 1CE01CE01CE01CE01C601860187038303018600780>14 24 2 0 19]48 dc[<0F801060203040 38803CC01CE01C401C003C003800380070006000C001800100020004040804100430083FF87FF8 FFF8>14 24 2 0 19]50 dc[<0F8010E02070607870382038007800700070006000C00F8000E0 00700038003C003CE03CE03CC03C4038407030E00F80>14 24 2 0 19]51 dc[<30183FF03FE0 3FC02000200020002000200027C03860203000380018001C001C401CE01CE01C80184038403030 E00F80>14 24 2 0 19]53 dc[<40007FFE7FFC7FFC4008801080108020004000400080018001 80010003000300030003000700070007000700070007000200>15 25 2 0 19]55 dc[<078018 60303070306018E018E018E01CE01CE01C601C603C303C185C0F9C001C00180018003870307060 604021801F00>14 24 2 0 19]57 dc[<000C0000000C0000000C0000001E0000001E0000003F 000000270000002700000043800000438000004380000081C0000081C0000081C0000100E00001 00E00001FFE000020070000200700006007800040038000400380008001C0008001C001C001E00 FF00FFC0>26 26 1 0 29]65 dc[22 26 2 0 27]66 dc[<003F0201C0C603002E0E001E1C 000E1C0006380006780002700002700002F00000F00000F00000F00000F00000F0000070000270 00027800023800041C00041C00080E000803003001C0C0003F00>23 26 2 0 28]67 dc[24 26 2 0 29]68 dc[20 26 2 0 25]70 dc[11 26 1 0 14]73 dc[30 26 2 0 35] 77 dc[24 26 2 0 29]78 dc[<007F000001C1C000070070000E0038001C001C003C001E00 38000E0078000F0070000700F0000780F0000780F0000780F0000780F0000780F0000780F00007 80F000078078000F0078000F0038000E003C001E001C001C000E0038000700700001C1C000007F 0000>25 26 2 0 30]79 dc[21 26 2 0 26]80 dc[25 26 2 0 28]82 dc[<0FC21836200E6006C006C002C002C002E0 0070007E003FE01FF807FC003E000E00070003800380038003C002C006E004D81887E0>16 26 2 0 21]83 dc[<7FFFFF00701C0700401C0100401C0100C01C0180801C0080801C0080801C008000 1C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C0000 001C0000001C0000001C0000001C0000001C0000001C0000001C000003FFE000>25 26 1 0 28] 84 dc[24 26 2 0 29]85 dc[36 26 1 0 39]87 dc[< FF801FE01E0007000E0006000F000400070008000780080003C0100001C0300001E0200000F040 00007040000078800000388000001D0000001F0000000E0000000E0000000E0000000E0000000E 0000000E0000000E0000000E0000000E0000000E000000FFE000>27 26 1 0 29]89 dc[<1830 204040804080810081008100B160F9F078F03060>12 11 5 -15 19]92 dc[<3F8070C070E020 700070007007F01C7030707070E070E071E071E0F171FB1E3C>16 16 2 0 19]97 dc[18 26 1 0 21]98 dc[<07F80C1C381C30087000E000E000E000E000E000E0007000300438080C1807E0 >14 16 1 0 17]99 dc[<007E00000E00000E00000E00000E00000E00000E00000E00000E0000 0E0003CE000C3E00380E00300E00700E00E00E00E00E00E00E00E00E00E00E00E00E00600E0070 0E00381E001C2E0007CFC0>18 26 1 0 21]100 dc[<07C01C3030187018600CE00CFFFCE000E0 00E000E0006000300438080C1807E0>14 16 1 0 17]101 dc[<01F0031807380E100E000E000E 000E000E000E00FFC00E000E000E000E000E000E000E000E000E000E000E000E000E000E007FE0 >13 26 0 0 12]102 dc[<0FCE187330307038703870387038303018602FC02000600070003FF0 3FFC1FFE600FC003C003C003C0036006381C07E0>16 24 1 8 19]103 dc[18 26 1 0 21] 104 dc[<18003C003C001800000000000000000000000000FC001C001C001C001C001C001C001C 001C001C001C001C001C001C001C00FF80>9 26 0 0 10]105 dc[<018003C003C00180000000 0000000000000000000FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C0 01C001C001C001C041C0E180E3007E00>10 33 -2 7 12]106 dc[18 26 1 0 20]107 dc[< FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C 001C001C001C001C001C00FF80>9 26 0 0 10]108 dc[29 16 1 0 32]109 dc[18 16 1 0 21]110 dc[<07E01C38300C700E6006E007E007E007E007E007E0076006700E381C1C3807E0>16 16 1 0 19]111 dc[18 23 1 7 21]112 dc[<03C2000C2600381E00300E00700E00E00E00E00E00E00E00E00E00E00E00E0 0E00700E00700E00381E001C2E0007CE00000E00000E00000E00000E00000E00000E00007FC0> 18 23 1 7 20]113 dc[12 16 1 0 15]114 dc[<1F2060E04020C020C020F0007F003FC01FE000F080708030 C030C020F0408F80>12 16 1 0 15]115 dc[<0400040004000C000C001C003C00FFC01C001C00 1C001C001C001C001C001C001C201C201C201C201C200E400380>11 23 1 0 15]116 dc[18 16 1 0 21]117 dc[17 16 1 0 20]118 dc[25 16 1 0 28]119 dc[18 16 1 0 20]120 dc[17 23 1 7 20]121 dc dfe /fg df[<001F83E000F06E3001C078780380F8 780300F03007007000070070000700700007007000070070000700700007007000FFFFFF800700 700007007000070070000700700007007000070070000700700007007000070070000700700007 007000070070000700700007007000070070000700700007007000070070007FE3FF00>29 32 0 0 27]11 dc[<003F0000E0C001C0C00381E00701E00701E0070000070000070000070000070000 070000FFFFE00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E0 0700E00700E00700E00700E00700E00700E00700E07FC3FE>23 32 0 0 25]12 dc[<003FE000 E0E001C1E00381E00700E00700E00700E00700E00700E00700E00700E00700E0FFFFE00700E007 00E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E007 00E00700E00700E00700E07FE7FE>23 32 0 0 25]13 dc[<001F81F80000F04F040001C07C06 000380F80F000300F00F000700F00F000700700000070070000007007000000700700000070070 00000700700000FFFFFFFF00070070070007007007000700700700070070070007007007000700 700700070070070007007007000700700700070070070007007007000700700700070070070007 0070070007007007000700700700070070070007007007007FE3FE3FF0>36 32 0 0 38]14 dc[ <7038F87CFC7EFC7E743A040204020402080408041008100820104020>15 14 2 -18 23]34 dc [<0F0000301880003030600060703001C0602C06C06013F980E0100300E0100300E0100600E010 0C00E0100C00E01018006010300060203000702060003040C0001880C0000F018000000300E000 0303100006060800060604000C0C0400180C0400181C0200301C0200601C0200601C0200C01C02 01801C0201801C0203000C0406000C04060006040C00060818000310080000E0>31 37 3 3 38] 37 dc[<70F8FCFC74040404080810102040>6 14 4 -18 13]39 dc[<00200040008001000200 06000C000C00180018003000300030007000600060006000E000E000E000E000E000E000E000E0 00E000E000E000E0006000600060007000300030003000180018000C000C000600020001000080 00400020>11 46 3 12 18]40 dc[<800040002000100008000C00060006000300030001800180 018001C000C000C000C000E000E000E000E000E000E000E000E000E000E000E000E000C000C000 C001C001800180018003000300060006000C0008001000200040008000>11 46 3 12 18]41 dc [<0006000000060000000600000006000000060000000600000006000000060000000600000006 00000006000000060000000600000006000000060000FFFFFFF0FFFFFFF0000600000006000000 060000000600000006000000060000000600000006000000060000000600000006000000060000 000600000006000000060000>28 32 3 5 35]43 dc[<70F8FCFC74040404080810102040>6 14 4 9 13]44 dc[10 2 1 -9 15]45 dc[<70F8F8F870>5 5 4 0 13]46 dc[<000100 030003000600060006000C000C000C00180018001800300030003000600060006000C000C000C0 0180018001800300030003000600060006000C000C000C00180018001800300030003000600060 006000C000C000C000>16 45 3 11 23]47 dc[<03F0000E1C001C0E0018060038070070038070 0380700380700380F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F0 03C0F003C0F003C07003807003807003807807803807001806001C0E000E1C0003F000>18 31 2 1 23]48 dc[<018003800F80F38003800380038003800380038003800380038003800380038003 800380038003800380038003800380038003800380038007C0FFFE>15 30 4 0 23]49 dc[<03 F0000C1C00100E00200700400780800780F007C0F803C0F803C0F803C02007C00007C000078000 0780000F00000E00001C0000380000700000600000C0000180000300000600400C004018004010 00803FFF807FFF80FFFF80>18 30 2 0 23]50 dc[<03F0000C1C00100E00200F00780F807807 80780780380F80000F80000F00000F00000E00001C0000380003F000003C00000E00000F000007 800007800007C02007C0F807C0F807C0F807C0F00780400780400F00200E001C3C0003F000>18 31 2 1 23]51 dc[<000600000600000E00000E00001E00002E00002E00004E00008E00008E00 010E00020E00020E00040E00080E00080E00100E00200E00200E00400E00C00E00FFFFF0000E00 000E00000E00000E00000E00000E00000E0000FFE0>20 30 1 0 23]52 dc[<1803001FFE001F FC001FF8001FE00010000010000010000010000010000010000011F000161C00180E0010070010 07800003800003800003C00003C00003C07003C0F003C0F003C0E0038040038040070020060010 0E000C380003E000>18 31 2 1 23]53 dc[<007C000182000701000E03800C07801C07803803 00380000780000700000700000F1F000F21C00F40600F80700F80380F80380F003C0F003C0F003 C0F003C0F003C07003C07003C07003803803803807001807000C0E00061C0001F000>18 31 2 1 23]54 dc[<4000007FFFC07FFF807FFF8040010080020080020080040000080000080000100000 200000200000400000400000C00000C00001C00001800003800003800003800003800007800007 8000078000078000078000078000078000030000>18 31 3 1 23]55 dc[<03F0000C0C001006 003003002001806001806001806001807001807803003E03003F06001FC8000FF00003F80007FC 000C7E00103F00300F806003804001C0C001C0C000C0C000C0C000C0C000806001802001001002 000C0C0003F000>18 31 2 1 23]56 dc[<03F0000E18001C0C00380600380700700700700380 F00380F00380F003C0F003C0F003C0F003C0F003C07007C07007C03807C0180BC00E13C003E3C0 000380000380000380000700300700780600780E00700C002018001070000FC000>18 31 2 1 23]57 dc[<70F8F8F8700000000000000000000070F8F8F870>5 20 4 0 13]58 dc[<00010000 0003800000038000000380000007C0000007C0000007C0000009E0000009E0000009E0000010F0 000010F0000010F00000207800002078000020780000403C0000403C0000403C0000801E000080 1E0000FFFE0001000F0001000F0001000F00020007800200078002000780040003C00E0003C01F 0007E0FFC03FFE>31 32 1 0 34]65 dc[26 31 2 0 32]66 dc[<000FC0 40007030C001C009C0038005C0070003C00E0001C01E0000C01C0000C03C0000C07C0000407C00 004078000040F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8 000000780000007C0000407C0000403C0000401C0000401E0000800E0000800700010003800200 01C0040000703800000FC000>26 33 3 1 33]67 dc[29 31 2 0 35]68 dc[27 31 2 0 31]69 dc[25 31 2 0 30]70 dc[<00 0FE0200078186000E004E0038002E0070001E00F0000E01E0000601E0000603C0000603C000020 7C00002078000020F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8007F FCF80003E0780001E07C0001E03C0001E03C0001E01E0001E01E0001E00F0001E0070001E00380 02E000E0046000781820000FE000>30 33 3 1 36]71 dc[29 31 2 0 34] 72 dc[14 31 1 0 16]73 dc[<0F FFC0007C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C00003C0000 3C00003C00003C00003C00003C00003C00003C00003C00003C00003C00203C00F83C00F83C00F8 3C00F0380040780040700030E0000F8000>18 32 2 1 23]74 dc[30 31 2 0 35]75 dc[23 31 2 0 28]76 dc[37 31 2 0 42] 77 dc[<001F800000F0F00001C0380007801E000F000F000E0007001E0007803C0003C03C0003 C07C0003E0780001E0780001E0F80001F0F80001F0F80001F0F80001F0F80001F0F80001F0F800 01F0F80001F0F80001F0780001E07C0003E07C0003E03C0003C03C0003C01E0007800E0007000F 000F0007801E0001C0380000F0F000001F8000>28 33 3 1 35]79 dc[25 31 2 0 31]80 dc[30 32 2 1 33]82 dc[<07E0800C19801007 80300380600180600180E00180E00080E00080E00080F00000F000007800007F00003FF0001FFC 000FFE0003FF00001F800007800003C00003C00001C08001C08001C08001C08001C0C00180C003 80E00300F00600CE0C0081F800>18 33 3 1 25]83 dc[<7FFFFFE0780F01E0600F0060400F00 20400F0020C00F0030800F0010800F0010800F0010800F0010000F0000000F0000000F0000000F 0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000 0F0000000F0000000F0000000F0000000F0000000F0000001F800007FFFE00>28 31 2 0 33] 84 dc[29 32 2 1 34]85 dc[31 32 1 1 34]86 dc[44 32 1 1 47]87 dc[<7FF83FF80FE00FC007C0070003C0020001E0040001F0 0C0000F0080000781000007C1000003C2000003E4000001E4000000F8000000F80000007800000 03C0000007E0000005E0000009F0000018F8000010780000207C0000603C0000401E0000801F00 01800F0001000780020007C0070003C01F8007E0FFE01FFE>31 31 1 0 34]88 dc[32 31 1 0 34]89 dc[7 45 4 11 13]91 dc[<0804100820102010 40204020804080408040B85CFC7EFC7E7C3E381C>15 14 5 -18 23]92 dc[ 7 45 1 11 13]93 dc[<1FE000303000781800781C00300E00000E00000E00000E0000FE00078E 001E0E00380E00780E00F00E10F00E10F00E10F01E10781E103867200F83C0>20 20 2 0 23] 97 dc[<0E0000FE00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00 000E3E000EC3800F01C00F00E00E00E00E00700E00700E00780E00780E00780E00780E00780E00 780E00700E00700E00E00F00E00D01C00CC300083E00>21 32 1 0 25]98 dc[<03F80E0C1C1E 381E380C70007000F000F000F000F000F000F00070007000380138011C020E0C03F0>16 20 2 0 20]99 dc[<000380003F8000038000038000038000038000038000038000038000038000038000 038003E380061B801C0780380380380380700380700380F00380F00380F00380F00380F00380F0 03807003807003803803803807801C07800E1B8003E3F8>21 32 2 0 25]100 dc[<03F0000E1C 001C0E00380700380700700700700380F00380F00380FFFF80F00000F00000F000007000007000 003800801800800C010007060001F800>17 20 1 0 20]101 dc[<007C00C6018F038F07060700 070007000700070007000700FFF007000700070007000700070007000700070007000700070007 00070007000700070007007FF0>16 32 0 0 14]102 dc[<0000E003E3300E3C301C1C30380E00 780F00780F00780F00780F00780F00380E001C1C001E380033E000200000200000300000300000 3FFE001FFF800FFFC03001E0600070C00030C00030C00030C000306000603000C01C038003FC00 >20 31 1 10 23]103 dc[<0E0000FE00000E00000E00000E00000E00000E00000E00000E0000 0E00000E00000E00000E3E000E43000E81800F01C00F01C00E01C00E01C00E01C00E01C00E01C0 0E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C0FFE7FC>22 32 1 0 25]104 dc[<1C001E003E001E001C000000000000000000000000000E007E000E000E000E000E000E000E 000E000E000E000E000E000E000E000E000E000E000E00FFC0>10 31 0 0 12]105 dc[<00E001 F001F001F000E0000000000000000000000000007007F000F00070007000700070007000700070 007000700070007000700070007000700070007000700070007000706070F060F0C061803F00> 12 40 -2 9 14]106 dc[<0E0000FE00000E00000E00000E00000E00000E00000E00000E00000E 00000E00000E00000E0FF00E03C00E03000E02000E04000E08000E10000E30000E70000EF8000F 38000E1C000E1E000E0E000E07000E07800E03800E03C00E03E0FFCFF8>21 32 1 0 24]107 dc [<0E00FE000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00 0E000E000E000E000E000E000E000E000E000E000E000E00FFE0>11 32 0 0 12]108 dc[<0E1F 01F000FE618618000E81C81C000F00F00E000F00F00E000E00E00E000E00E00E000E00E00E000E 00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E000E00E00E00 0E00E00E000E00E00E000E00E00E00FFE7FE7FE0>35 20 1 0 38]109 dc[<0E3E00FE43000E81 800F01C00F01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01 C00E01C00E01C00E01C0FFE7FC>22 20 1 0 25]110 dc[<01F800070E001C03803801C03801C0 7000E07000E0F000F0F000F0F000F0F000F0F000F0F000F07000E07000E03801C03801C01C0380 070E0001F800>20 20 1 0 23]111 dc[<0E3E00FEC3800F01C00F00E00E00E00E00F00E00700E 00780E00780E00780E00780E00780E00780E00700E00F00E00E00F01E00F01C00EC3000E3E000E 00000E00000E00000E00000E00000E00000E00000E0000FFE000>21 29 1 9 25]112 dc[<03E0 800619801C05803C0780380380780380700380F00380F00380F00380F00380F00380F003807003 807803803803803807801C0B800E138003E3800003800003800003800003800003800003800003 80000380003FF8>21 29 2 9 24]113 dc[<0E78FE8C0F1E0F1E0F0C0E000E000E000E000E000E 000E000E000E000E000E000E000E000E00FFE0>15 20 1 0 18]114 dc[<1F9030704030C010C0 10C010E00078007F803FE00FF00070803880188018C018C018E030D0608F80>13 20 2 0 18] 115 dc[<020002000200060006000E000E003E00FFF80E000E000E000E000E000E000E000E000E 000E000E000E080E080E080E080E080610031001E0>13 28 1 0 18]116 dc[<0E01C0FE1FC00E 01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E 01C00E03C00603C0030DC001F1FC>22 20 1 0 25]117 dc[21 20 1 0 24]118 dc[30 20 1 0 33]119 dc[<7FC3FC0F01E00701 C007018003810001C20000E40000EC00007800003800003C00007C00004E000087000107000303 800201C00601E01E01E0FF07FE>23 20 0 0 24]120 dc[21 29 1 9 24]121 dc[<3FFF380E200E201C40384078407000E001E001C00380078007010E011E011C0338 027006700EFFFE>16 20 1 0 20]122 dc[22 1 0 -12 23]123 dc dfe /fh df[<00 7E0001C1800301800703C00E03C00E01800E00000E00000E00000E00000E0000FFFFC00E01C00E 01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E 01C00E01C07F87F8>21 29 0 0 23]12 dc[<0F0000C0188000C030600380703807006027FB00 E0100600E0100C00E0100C00E0101800E0101800E0103000E0106000602060007020C000304180 00188180000F0303C00006062000060C10000C1C08001818080018380400303804006038040060 380400C0380400C03804018038040300180803001C0806000C100C000620040003C0>30 33 2 2 35]37 dc[<60F0F8680808081010204080>5 12 4 -17 12]39 dc[<60F0F07010101010202040 80>4 12 4 8 12]44 dc[11 2 0 -8 14]45 dc[<60F0F060>4 4 4 0 12]46 dc[< 03C00C301818300C300C700E60066006E007E007E007E007E007E007E007E007E007E007E007E0 07E00760066006700E300C300C18180C3007E0>16 29 2 1 21]48 dc[<030007003F00C70007 000700070007000700070007000700070007000700070007000700070007000700070007000700 070007000F80FFF8>13 28 4 0 21]49 dc[<07E01830201C201C781E780E781E381E001C001C 00180030006007E00030001C001C000E000F000F700FF80FF80FF80FF00E401C201C183007E0> 16 29 2 1 21]51 dc[<000C00000C00001C00003C00003C00005C0000DC00009C00011C00031C 00021C00041C000C1C00081C00101C00301C00201C00401C00C01C00FFFFC0001C00001C00001C 00001C00001C00001C00001C0001FFC0>18 28 1 0 21]52 dc[24 28 2 0 29]66 dc[<001F808000E0618001801980070007800E0003801C0003801C000180380001807800 00807800008070000080F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0 000000700000807800008078000080380000801C0001001C0001000E0002000700040001800800 00E03000001FC000>25 30 2 1 30]67 dc[27 28 2 0 32]68 dc[12 28 1 0 15]73 dc[33 28 2 0 38]77 dc[<003F800000E0E0000380380007001C000E000E001C0007003C0007803800 0380780003C0780003C0700001C0F00001E0F00001E0F00001E0F00001E0F00001E0F00001E0F0 0001E0F00001E0700001C0780003C0780003C0380003803C0007801C0007000E000E0007001C00 0380380000E0E000003F8000>27 30 2 1 32]79 dc[23 28 2 0 28]80 dc[ <07E0801C1980300580700380600180E00180E00080E00080E00080F00000F800007C00007FC0 003FF8001FFE0007FF0000FF80000F800007C00003C00001C08001C08001C08001C0C00180C001 80E00300D00200CC0C0083F800>18 30 2 1 23]83 dc[26 29 2 1 31]85 dc[40 29 1 1 43]87 dc[<7FF0FFC00F C03E000780180003C0180003E0100001E0200001F0600000F0400000788000007D8000003D0000 001E0000001F0000000F0000000F8000000F80000013C0000023E0000021E0000041F00000C0F8 000080780001007C0003003C0002001E0006001F001F003F80FFC0FFF0>28 28 1 0 31]88 dc[ <1FC000307000783800781C00301C00001C00001C0001FC000F1C00381C00701C00601C00E01C 40E01C40E01C40603C40304E801F8700>18 18 2 0 21]97 dc[19 29 1 0 23]98 dc[<07E00C301878307870306000E000E000E000E000E000E0006000700430041808 0C3007C0>14 18 2 0 18]99 dc[<003F00000700000700000700000700000700000700000700 00070000070000070003E7000C1700180F00300700700700600700E00700E00700E00700E00700 E00700E00700600700700700300700180F000C370007C7E0>19 29 2 0 23]100 dc[<03E00C30 1818300C700E6006E006FFFEE000E000E000E00060007002300218040C1803E0>15 18 1 0 18] 101 dc[<00F8018C071E061E0E0C0E000E000E000E000E000E00FFE00E000E000E000E000E000E 000E000E000E000E000E000E000E000E000E000E007FE0>15 29 0 0 13]102 dc[<00038003C4 C00C38C01C3880181800381C00381C00381C00381C001818001C38000C300013C0001000003000 001800001FF8001FFF001FFF803003806001C0C000C0C000C0C000C06001803003001C0E0007F8 00>18 28 1 9 21]103 dc[20 29 1 0 23]104 dc[<18003C003C0018 000000000000000000000000000000FC001C001C001C001C001C001C001C001C001C001C001C00 1C001C001C001C001C00FF80>9 29 1 0 12]105 dc[19 29 1 0 22] 107 dc[9 29 1 0 12]108 dc[33 18 1 0 36]109 dc[20 18 1 0 23]110 dc[<03F0000E1C00180600300300700380600180E001C0E001C0E001C0E001C0E001C0 E001C06001807003803003001806000E1C0003F000>18 18 1 0 21]111 dc[19 26 1 8 23] 112 dc[13 18 1 0 16]114 dc[<1F9030704030C010C010E010F8007F803FE00FF000F880388018C0 18C018E010D0608FC0>13 18 1 0 16]115 dc[<04000400040004000C000C001C003C00FFE01C 001C001C001C001C001C001C001C001C001C101C101C101C101C100C100E2003C0>12 26 1 0 16]116 dc[20 18 1 0 23]117 dc[19 18 1 0 22]118 dc[27 18 1 0 30]119 dc[<7F8FF00F03800F0300070200038400 01C80001D80000F00000700000780000F800009C00010E00020E000607000403801E07C0FF0FF8 >21 18 0 0 22]120 dc[19 26 1 8 22]121 dc dfe /fi df[<00038000000380000007C0 000007C0000007C000000FE000000FE000001FF000001BF000001BF0000031F8000031F8000061 FC000060FC0000E0FE0000C07E0000C07E0001803F0001FFFF0003FFFF8003001F8003001F8006 000FC006000FC00E000FE00C0007E0FFC07FFEFFC07FFE>31 28 2 0 36]65 dc[<0FF8001C1E 003E0F803E07803E07C01C07C00007C0007FC007E7C01F07C03C07C07C07C0F807C0F807C0F807 C0780BC03E13F80FE1F8>21 18 1 0 23]97 dc[23 29 1 0 27]98 dc[<03FC000E0E001C1F003C1F00781F00780E00F80000F80000F80000F80000F80000F8000078 00007801803C01801C03000E0E0003F800>17 18 2 0 21]99 dc[17 18 1 0 20]114 dc[<1FD830786018E018E018F000FF807FE07FF01FF807FC007C C01CC01CE01CE018F830CFC0>14 18 2 0 19]115 dc[<0300030003000300070007000F000F00 3FFCFFFC1F001F001F001F001F001F001F001F001F001F0C1F0C1F0C1F0C0F08079803F0>14 26 1 0 19]116 dc dfe /fj df[<1C3C3C3C3C040408081020204080>6 14 3 9 14]44 dc[<70F8 F8F0E0>5 5 5 0 14]46 dc[<000F800030E000E07001C0700380300380380700380F00780F00 780E00781E00781E00703C00F03C00F03C00F03C00F07801E07801E07801E07801C07003C0F003 C0F00380F00780F00700700700700E00701C003038001870000FC000>21 31 4 1 23]48 dc[< 000200020006000E003C00DC031C001C0038003800380038007000700070007000E000E000E000 E001C001C001C001C003800380038003800780FFF8>15 30 5 0 23]49 dc[<001F0000618000 80E00100E00200700220700420700410700820F00820F00820F00840E00881E00703C000038000 0700000C000018000060000080000300000400000800401000401000802001807E030047FF0041 FE0080FC00807800>20 31 4 1 23]50 dc[<001F0000718000C0C00180C00380E00700E00F00 E00F01E01E01E01E01E01E01E01E01C01C03C01C03C01C03C01C07C01C0F800C0F8006378003C7 00000F00000E00000E00001C00601C00F03800F07000E0600080C0004380003E0000>19 31 5 1 23]57 dc[<0001FC0000060300001800C00060002000800020010000100201E00804061808040C 080808180408103007041070070420E0070420E0070841C00E0841C00E0841C00E0841C00E0841 C01C1081801C1081C01C1081C03C2041C0382040C0F84040619880403E0F002000000010000000 100001C00C000F000300F80000FF8000>30 32 6 0 35]64 dc[<000002000000060000000600 00000E0000001E0000001E0000003F0000002F0000004F0000004F0000008F0000010F0000010F 0000020F0000020F0000040F00000C0F0000080F0000100F0000100F0000200F80003FFF800040 078000C007800080078001000780010007800200078002000780060007801E000F80FF807FF8> 29 32 2 0 34]65 dc[<0000FE0200078186001C004C0038003C0060003C00C0001C01C0001803 800018070000180F0000181E0000101E0000103C0000003C000000780000007800000078000000 78000000F0000000F0000000F0000000F0000000F0000080700000807000008070000100380001 0038000200180004000C001800060020000381C00000FE0000>31 33 6 1 33]67 dc[<01FFFF FE001E001C001E000C001E0004001E0004003C0004003C0004003C0004003C0004007808080078 0800007808000078180000F0300000FFF00000F0300000F0300001E0200001E0200001E0200001 E0001003C0002003C0002003C0004003C00040078000800780018007800100078007000F001F00 FFFFFE00>31 31 3 0 31]69 dc[<01FFFFFC001E0038001E0018001E0008001E0008003C0008 003C0008003C0008003C00080078001000780800007808000078080000F0100000F0300000FFF0 0000F0300001E0200001E0200001E0200001E0200003C0000003C0000003C0000003C000000780 00000780000007800000078000000F800000FFF80000>30 31 3 0 30]70 dc[<01FFF0001F00 001E00001E00001E00003C00003C00003C00003C0000780000780000780000780000F00000F000 00F00000F00001E00001E00001E00001E00003C00003C00003C00003C000078000078000078000 0780000F8000FFF800>20 31 3 0 18]73 dc[<01FFF800001F0000001E0000001E0000001E00 00003C0000003C0000003C0000003C00000078000000780000007800000078000000F0000000F0 000000F0000000F0000001E0000001E0000001E0000001E0008003C0010003C0010003C0030003 C00200078006000780060007800C0007801C000F007800FFFFF800>25 31 3 0 29]76 dc[<01 FE00007FC0001E0000FC00001E0000F80000170001780000170001780000270002F00000270004 F00000270004F00000270008F00000470009E00000470011E00000470021E00000470021E00000 870043C00000838043C00000838083C00000838083C00001038107800001038207800001038207 80000103840780000203840F00000203880F00000203900F00000203900F00000401E01E000004 01E01E00000401C01E00000C01801E00001C01803E0000FF8103FFC000>42 31 3 0 41]77 dc[ <01FF007FE0001F000F00001F0004000017800400001780040000278008000023C008000023C0 08000023C008000041E010000041E010000041F010000040F010000080F0200000807820000080 782000008078200001003C400001003C400001003C400001001E400002001E800002001E800002 000F800002000F800004000F0000040007000004000700000C000700001C00020000FF80020000 >35 31 3 0 34]78 dc[<0001FC0000070700001C01C0003000E000E0006001C0007003800070 07800038070000380E0000381E0000381C0000383C0000383C0000387800007878000078780000 7878000078F00000F0F00000F0F00000E0F00001E0F00001C0F00003C070000380700007007800 0F0038001E0038003C001C0070000E00E0000783800001FC0000>29 33 6 1 35]79 dc[<01FF FF80001E00E0001E0070001E0038001E003C003C003C003C003C003C003C003C003C0078007800 780078007800F0007800E000F003C000F00F0000FFFC0000F0000001E0000001E0000001E00000 01E0000003C0000003C0000003C0000003C00000078000000780000007800000078000000F8000 00FFF00000>30 31 3 0 31]80 dc[<0007E040001C18C0003005800060038000C0038001C001 80018001000380010003800100038001000380000003C0000003C0000003F8000001FF800001FF E000007FF000001FF0000001F80000007800000078000000380000003800200038002000380020 00300060007000600060006000E0007000C000E8038000C606000081F80000>26 33 3 1 26] 83 dc[<0FFFFFF01E0780E0180780201007802020078020200F0020600F0020400F0020400F00 20801E0040001E0000001E0000001E0000003C0000003C0000003C0000003C0000007800000078 0000007800000078000000F0000000F0000000F0000000F0000001E0000001E0000001E0000001 E0000003E00000FFFF0000>28 31 8 0 33]84 dc[<7FFC1FF807C003C0078001000780010007 8001000F0002000F0002000F0002000F0002001E0004001E0004001E0004001E0004003C000800 3C0008003C0008003C00080078001000780010007800100078001000F0002000F0002000F00020 00F0004000F0004000700080007001000030020000380400000C18000007E00000>29 32 9 1 34]85 dc[41 32 9 1 45]87 dc[<00FFF07FE0000F801F00000F001C00000F801000000780300000 078020000007C040000003C080000003C100000003E200000001E400000001EC00000001F80000 0000F000000000F800000000F800000000F8000000017C000000023C000000063C000000043E00 0000081E000000101E000000201F000000400F000000800F000001800F80000100078000070007 80001F000FC000FFC07FF800>35 31 2 0 34]88 dc[<00F1800389C00707800E03801C03803C 0380380700780700780700780700F00E00F00E00F00E00F00E20F01C40F01C40703C40705C4030 8C800F0700>19 20 4 0 23]97 dc[<07803F8007000700070007000E000E000E000E001C001C 001CF01D0C3A0E3C0E380F380F700F700F700F700FE01EE01EE01EE01CE03CE038607060E031C0 1F00>16 32 5 0 21]98 dc[<007E0001C1000300800E07801E07801C07003C02007800007800 00780000F00000F00000F00000F00000F0000070010070020030040018380007C000>17 20 4 0 21]99 dc[<0000780003F80000700000700000700000700000E00000E00000E00000E00001C000 01C000F1C00389C00707800E03801C03803C0380380700780700780700780700F00E00F00E00F0 0E00F00E20F01C40F01C40703C40705C40308C800F0700>21 32 4 0 23]100 dc[<007C01C207 010E011C013C013802780C7BF07C00F000F000F000F0007000700170023804183807C0>16 20 4 0 21]101 dc[<00007800019C00033C00033C000718000700000700000E00000E00000E00000E 00000E0001FFE0001C00001C00001C00001C000038000038000038000038000038000070000070 0000700000700000700000700000E00000E00000E00000E00000C00001C00001C0000180003180 007B0000F300006600003C0000>22 41 -2 9 14]102 dc[<003C6000E27001C1E00380E00700 E00F00E00E01C01E01C01E01C01E01C03C03803C03803C03803C03803C07003C07001C0F001C17 000C2E0003CE00000E00000E00001C00001C00301C00783800F0700060E0003F8000>20 29 2 9 21]103 dc[<01E0000FE00001C00001C00001C00001C000038000038000038000038000070000 070000071E000763000E81800F01C00E01C00E01C01C03801C03801C03801C0380380700380700 380700380E10700E20700C20701C20700C40E00CC0600700>20 32 3 0 23]104 dc[<00C001E0 01E001C000000000000000000000000000000E003300230043804300470087000E000E000E001C 001C001C003840388030807080310033001C00>11 31 4 0 14]105 dc[<01E0000FE00001C000 01C00001C00001C0000380000380000380000380000700000700000703C00704200E08E00E11E0 0E21E00E40C01C80001D00001E00001FC00038E000387000387000383840707080707080707080 703100E03100601E00>19 32 3 0 21]107 dc[<03C01FC0038003800380038007000700070007 000E000E000E000E001C001C001C001C0038003800380038007000700070007100E200E200E200 E20064003800>10 32 4 0 12]108 dc[<1C0F80F0002630C318004740640C004780680E004700 700E004700700E008E00E01C000E00E01C000E00E01C000E00E01C001C01C038001C01C038001C 01C038001C01C0708038038071003803806100380380E100380380620070070066003003003800 >33 20 4 0 37]109 dc[<1C0F802630C04740604780604700704700708E00E00E00E00E00E00E 00E01C01C01C01C01C01C01C03843803883803083807083803107003303001C0>22 20 4 0 26] 110 dc[<007C0001C3000301800E01C01E01C01C01E03C01E07801E07801E07801E0F003C0F003 C0F003C0F00780F00700700F00700E0030180018700007C000>19 20 4 0 23]111 dc[<01C1E0 02621804741C04781C04701E04701E08E01E00E01E00E01E00E01E01C03C01C03C01C03C01C038 0380780380700380E003C1C0072380071E000700000700000E00000E00000E00000E00001C0000 1C0000FFC000>23 29 0 9 23]112 dc[<1C1E002661004783804787804707804703008E00000E 00000E00000E00001C00001C00001C00001C0000380000380000380000380000700000300000> 17 20 4 0 19]114 dc[<00FC030206010C030C070C060C000F800FF007F803FC003E000E700E F00CF00CE008401020601F80>16 20 3 0 19]115 dc[<018001C0038003800380038007000700 FFF007000E000E000E000E001C001C001C001C003800380038003820704070407080708031001E 00>12 28 4 0 15]116 dc[<0E00C03300E02301C04381C04301C04701C08703800E03800E0380 0E03801C07001C07001C07001C07101C0E20180E20180E201C1E200C264007C380>20 20 4 0 24]117 dc[<0E03803307802307C04383C04301C04700C08700800E00800E00800E00801C0100 1C01001C01001C02001C02001C04001C04001C08000E300003C000>18 20 4 0 21]118 dc[<0E 00C1C03300E3C02301C3E04381C1E04301C0E04701C060870380400E0380400E0380400E038040 1C0700801C0700801C0700801C0701001C0701001C0602001C0F02000C0F04000E13080003E1F0 00>27 20 4 0 30]119 dc[<0383800CC4401068E01071E02071E02070C040E00000E00000E000 00E00001C00001C00001C00001C040638080F38080F38100E5810084C600787800>19 20 3 0 21]120 dc[<0E00C03300E02301C04381C04301C04701C08703800E03800E03800E03801C0700 1C07001C07001C07001C0E00180E00180E001C1E000C3C0007DC00001C00001C00003800F03800 F07000E06000C0C0004380003E0000>19 29 4 9 22]121 dc[<01C04003E08007F1800C1F0008 02000004000008000010000020000040000080000100000200000401000802001002003E0C0063 FC0041F80080E000>18 20 3 0 19]122 dc[20 1 4 -12 23]123 dc dfe /fk df[< 0E1E1E1E1E02020404080810204080>7 15 3 10 15]44 dc[<70F8F8F0E0>5 5 6 0 15]46 dc [<000F800030C000E06001C0700380700300700700700F00700E00701E00701E00701C00F03C00 F03C00F03C00F07801E07801E07801E07801E0F003C0F003C0F003C0F00380E00780E00780E007 00E00F00E00E00E01C00E01C00E0380060700030E0001F0000>20 34 6 1 25]48 dc[<000100 0300030006001E002E03CE001C001C001C001C0038003800380038007000700070007000E000E0 00E000E001C001C001C001C003800380038003800780FFFC>16 33 6 0 25]49 dc[<000FC000 106000603800801800801C01001C02201E02101E04101E04101E04101E08203C08203C08403808 40780880F00700E00001C000030000060000180000200000C00001000002000004001008003010 00202000605F80C063FFC040FF80807F00801E00>23 34 4 1 25]50 dc[<000FC000307000C0 1801001C02001C04000C04401C08201C08201C08201C08403808C0380700700000600001C00007 0000FC000007000003800003800001C00001C00001C00003C06003C0F003C0F00380E007808007 00800E00801C0040380020F0001F8000>22 34 5 1 25]51 dc[<00400400703800FFF000FFE0 00BF80008000010000010000010000010000020000020000023E0002C3000501800601C00401C0 0001E00001E00001E00001E00001E00001E07003C0F003C0F003C0E00780800700800F00800E00 401C0040380030E0000F8000>22 34 5 1 25]53 dc[<00000300000003000000070000000700 00000F0000000F0000001F0000002F0000002F0000004F0000004F800000878000008780000107 80000207800002078000040780000407800008078000080780001007800030078000200780007F FF80004007C0008007C0008003C0010003C0030003C0020003C0040003C0040003C00C0003C03C 0007C0FF003FFC>30 35 3 0 36]65 dc[<00FFFFE0000F0038000F001C000F001E001E000E00 1E000F001E000F001E000F003C000E003C001E003C001E003C003C00780078007800F0007801E0 0078078000FFFF8000F001E000F000F000F0007801E0007801E0003801E0003C01E0003C03C000 7803C0007803C0007803C000F0078000F0078001E0078003C0078007000F801E00FFFFF000>32 34 3 0 34]66 dc[<00007F00800003808100000E00630000380027000070001F0000E0000E00 01C0000E000380000E000700000E000F000004000E000004001E000004003C000004003C000008 00780000000078000000007800000000F000000000F000000000F000000000F000000000F00000 0000E000000000E000002000E000002000E000004000E000004000F00000800070000080007000 010000380002000018000400001C0008000006003000000381C0000000FE000000>33 36 7 1 35]67 dc[<00FFFFFF000F000F000F0003000F0003001E0003001E0003001E0002001E0002003C 0002003C0002003C0102003C010000780200007802000078060000780E0000FFFC0000F00C0000 F00C0000F00C0001E0080001E0080001E0080001E0000003C0000003C0000003C0000003C00000 078000000780000007800000078000000F800000FFFC0000>32 34 3 0 32]70 dc[<00007F00 800003808100000E00630000380027000070001F0000E0000E0001C0000E000380000E00070000 0E000F000004000E000004001E000004003C000004003C00000800780000000078000000007800 000000F000000000F000000000F000000000F000000000F0003FFC00E00001E000E00001E000E0 0001E000E00003C000E00003C000F00003C000700003C0007000078000380007800018000F8000 1C0013800006002300000381C1000000FE000000>33 36 7 1 38]71 dc[<00FF800007FC000F 80000F80000F80001780000F80001780001780002F000013C0002F000013C0004F000013C0008F 000023C0009E000023C0011E000023C0011E000023C0021E000043C0043C000043C0043C000043 C0083C000041E0083C000081E01078000081E02078000081E02078000081E04078000101E040F0 000101E080F0000101E100F0000101E100F0000200F201E0000200F201E0000200F401E0000200 F801E0000400F803C0000400F003C0000400F003C0000C00E003C0001E00C007C000FFC0C07FFC 00>46 34 3 0 44]77 dc[<00FF000FFC000F8001E0000F800180000FC000800013C001000013 C001000011E001000011E001000021E002000020F002000020F002000020F00200004078040000 40780400004078040000403C040000803C080000803E080000801E080000801E080001001F1000 01000F100001000F10000100079000020007A000020007A000020003E000020003E000040003C0 00040001C000040001C0000C0001C0001E00008000FFC0008000>38 34 3 0 36]78 dc[<00FF FFE0000F0038000F001E000F000E001E0007001E0007001E0007001E0007003C000F003C000F00 3C000F003C001E0078001E0078003C00780078007800E000F003C000FFFE0000F0000000F00000 01E0000001E0000001E0000001E0000003C0000003C0000003C0000003C0000007800000078000 0007800000078000000F800000FFF80000>32 34 3 0 33]80 dc[<00FFFFC0000F0070000F00 3C000F001C001E000E001E000E001E000F001E000F003C001E003C001E003C001E003C003C0078 003800780070007801E00078078000FFFC0000F00E0000F0070000F0038001E003C001E003C001 E003C001E003C003C0078003C0078003C0078003C0078007800F0007800F0107800F0107800702 0F800702FFF8038C000000F0>32 35 3 1 36]82 dc[<0001F020000E0C40001802C0003001C0 006001C000E0018000C0018001C0018001C0018003C0010003C0010003C0000003C0000003E000 0001F8000001FF000000FFE000007FF000001FF8000003FC0000007C0000003C0000001E000000 1E0000001E0020001C0020001C0020001C00200018006000380060003000700060007000C000C8 018000C607000081FC0000>27 36 3 1 27]83 dc[<3FFE03FF03C0007803C0006003C0002007 8000400780004007800040078000400F0000800F0000800F0000800F0000801E0001001E000100 1E0001001E0001003C0002003C0002003C0002003C000200780004007800040078000400780004 0070000800F0000800F00010007000100070002000700040003000400038018000180200000E0C 000003F00000>32 35 9 1 36]85 dc[32 35 10 1 36]86 dc[<00F8C00185C00705C00E03800E03801C03803C0380380700780700 780700780700F00E00F00E00F00E00F00E10F01C20701C20703C20305C40308C400F0780>20 21 5 0 25]97 dc[<03C03F8003800380038007000700070007000E000E000E000E001C001CF81D0C 1E0E3C0638073807380F700F700F700F700FE01EE01EE01EE03CE038E038607060E031C01F00> 16 35 5 0 22]98 dc[<007E0001C1000301800703800E07801C07803C00003800007800007800 00780000F00000F00000F00000F00000F00100700100700200300C001830000FC000>17 21 5 0 22]99 dc[<00003C0003F80000380000380000380000700000700000700000700000E00000E000 00E00000E00001C000F9C00185C00705C00E03800E03801C03803C038038070078070078070078 0700F00E00F00E00F00E00F00E10F01C20701C20703C20305C40308C400F0780>22 35 5 0 25] 100 dc[<00F803840E021C023C0238027804F018FFE0F000F000E000E000E000E000E002E00260 04701830600F80>15 21 6 0 22]101 dc[<00003E0000470000CF00018F000186000380000380 000380000700000700000700000700000700000E0000FFF0000E00000E00000E00001C00001C00 001C00001C00001C00003800003800003800003800003800007000007000007000007000007000 00E00000E00000E00000E00000C00001C00001C000718000F18000F300006200003C0000>24 45 -2 10 15]102 dc[<001F180030B800E0B801C07001C0700380700780700700E00F00E00F00E0 0F00E01E01C01E01C01E01C01E01C01E03800E03800E0780060B8006170001E700000700000700 000E00000E00000E00701C00F01800F0300060E0003F8000>21 31 2 10 22]103 dc[<00F000 0FE00000E00000E00000E00001C00001C00001C00001C000038000038000038000038000070000 071F0007218007C0C00F00E00F00E00E00E00E00E01C01C01C01C01C01C01C01C0380380380380 380380380704700708700E08700E10700610E006206003C0>22 35 3 0 25]104 dc[<00C001E0 01C001C0000000000000000000000000000000001C002300430043008700870087000E000E001C 001C001C00380038003840708070807080710032001C00>11 33 5 0 15]105 dc[<01E01FC001 C001C001C0038003800380038007000700070007000E000E000E000E001C001C001C001C003800 3800380038007000700070007100E200E200E200E20064003800>11 35 4 0 12]108 dc[<1C0F 80F8002610C10C00476066060087807807008780780700870070070087007007000E00E00E000E 00E00E000E00E00E000E00E00E001C01C01C001C01C01C001C01C01C001C01C038203803803840 38038070403803807080380380308070070031003003001E00>35 21 5 0 40]109 dc[<1C0F00 2631C04740C08780E08780E08700E08700E00E01C00E01C00E01C00E01C01C03801C03801C0380 1C0704380708380E08380E103806107006203003C0>22 21 5 0 27]110 dc[<007E0001C30003 81800701C00E01C01C01E03C01E03801E07801E07801E07801E0F003C0F003C0F00380F0078070 0700700E00700C0030180018700007C000>19 21 5 0 25]111 dc[<01C1F002621804741C0878 0C08700E08700E08701E00E01E00E01E00E01E00E01E01C03C01C03C01C03C01C0780380700380 7003C0E003C1C0072380071E000700000700000E00000E00000E00000E00001C00001C00001C00 00FFC000>23 31 1 10 25]112 dc[<1C1F002620804741C08783C08703C08701808700000E00 000E00000E00000E00001C00001C00001C00001C00003800003800003800003800007000003000 00>18 21 5 0 21]114 dc[<00FC000183000200800401800C03800C03000C00000F00000FF000 07FC0003FE00003E00000F00000700700700F00600F00600E004004008002030001FC000>17 21 3 0 20]115 dc[<00C001C001C001C001C003800380038003800700FFF8070007000E000E000E 000E001C001C001C001C003800380038003810702070207040708031001E00>13 31 4 0 16] 116 dc[<1E00602300E04380E04381C08381C08701C08701C00703800E03800E03800E03801C07 001C07001C07001C07081C0E10180E101C0E101C1E200C262007C3C0>21 21 5 0 26]117 dc[< 1E03802307C04387C04383C08381C08700C08700C00700800E00800E00800E00801C01001C0100 1C01001C02001C02001C04001C08001C08000C300003C000>18 21 5 0 22]118 dc[<1E003023 00704380704380E08380E08700E08700E00701C00E01C00E01C00E01C01C03801C03801C03801C 03801C07001C07001C07001C0F000C3E0003CE00000E00000E00001C00601C00F03800F03000E0 600080C0004380003E0000>20 31 5 10 24]121 dc dfe /fl df[<000E00001E00007E0007FE 00FFFE00FFFE00F8FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE 0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE 0000FE0000FE0000FE0000FE0000FE0000FE007FFFFE7FFFFE7FFFFE>23 39 5 0 34]49 dc[< 00FF800003FFF0000FFFFC001F03FE003800FF007C007F80FE003FC0FF003FC0FF003FE0FF001F E0FF001FE07E001FE03C003FE000003FE000003FC000003FC000007F8000007F000000FE000000 FC000001F8000003F0000003E00000078000000F0000001E0000003C00E0007000E000E000E001 C001C0038001C0070001C00FFFFFC01FFFFFC03FFFFFC07FFFFFC0FFFFFF80FFFFFF80FFFFFF80 >27 39 3 0 34]50 dc[<007F800003FFF00007FFFC000F81FE001F00FF003F80FF003F807F80 3F807F803F807F801F807F800F007F800000FF000000FF000000FE000001FC000001F8000007F0 0000FFC00000FFF0000001FC0000007E0000007F0000007F8000003FC000003FC000003FE00000 3FE03C003FE07E003FE0FF003FE0FF003FE0FF003FC0FF007FC07E007F807C007F003F01FE001F FFFC0007FFF00000FF8000>27 39 3 0 34]51 dc[<00000E0000001E0000003E0000007E0000 00FE000000FE000001FE000003FE0000077E00000E7E00000E7E00001C7E0000387E0000707E00 00E07E0000E07E0001C07E0003807E0007007E000E007E000E007E001C007E0038007E0070007E 00E0007E00FFFFFFF8FFFFFFF8FFFFFFF80000FE000000FE000000FE000000FE000000FE000000 FE000000FE000000FE00007FFFF8007FFFF8007FFFF8>29 39 2 0 34]52 dc[<0C0003000F80 3F000FFFFE000FFFFC000FFFF8000FFFF0000FFFE0000FFFC0000FFE00000E0000000E0000000E 0000000E0000000E0000000E0000000E7FC0000FFFF8000F80FC000E003E000C003F0000001F80 00001FC000001FC000001FE000001FE018001FE07C001FE0FE001FE0FE001FE0FE001FE0FE001F C0FC001FC078003F8078003F803C007F001F01FE000FFFF80003FFF00000FF8000>27 39 3 0 34]53 dc[<00003FF001800003FFFE0380000FFFFF8780003FF007DF8000FF8001FF8001FE0000 7F8003FC00003F8007F000001F800FF000000F801FE0000007801FE0000007803FC0000007803F C0000003807FC0000003807F80000003807F8000000000FF8000000000FF8000000000FF800000 0000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF80000000007F 80000000007F80000000007FC0000003803FC0000003803FC0000003801FE0000003801FE00000 07000FF00000070007F000000E0003FC00001E0001FE00003C0000FF8000F800003FF007E00000 0FFFFFC0000003FFFF000000003FF80000>41 41 4 0 50]67 dc[22 41 2 0 26]73 dc[58 41 3 0 65]77 dc[39 41 3 0 47]80 dc[48 41 3 0 52]82 dc[<007F 806003FFF0E007FFF9E00F807FE01F001FE03E0007E07C0003E07C0001E0FC0001E0FC0001E0FC 0000E0FE0000E0FE0000E0FF000000FFC000007FFE00007FFFE0003FFFFC001FFFFE000FFFFF80 07FFFFC003FFFFE000FFFFE00007FFF000007FF000000FF8000007F8000003F8600001F8E00001 F8E00001F8E00001F8F00001F0F00001F0F80003F0FC0003E0FF0007C0FFE01F80F3FFFF00E0FF FE00C01FF000>29 41 4 0 38]83 dc[46 41 3 0 53]85 dc[ <7FFFF81FFFF07FFFF81FFFF07FFFF81FFFF001FF0000780000FF8000F000007FC001E000007F C001C000003FE003C000001FF0078000000FF80F0000000FF80E00000007FC1E00000003FE3C00 000003FE7800000001FF7000000000FFF0000000007FE0000000007FC0000000003FE000000000 1FF0000000001FF0000000001FF8000000001FFC000000003FFE000000007BFE00000000F1FF00 000000E0FF80000001E0FFC0000003C07FC0000007803FE0000007001FF000000F001FF000001E 000FF800003C0007FC0000380003FE0000780003FE0000F00001FF0000E00000FF80FFFF801FFF FEFFFF801FFFFEFFFF801FFFFE>47 41 2 0 52]88 dc[<01FF800007FFF0000F81F8001FC07E 001FC07E001FC03F000F803F8007003F8000003F8000003F8000003F80000FFF8000FFFF8007FC 3F800FE03F803F803F803F003F807F003F80FE003F80FE003F80FE003F80FE003F807E007F807F 00DF803F839FFC0FFF0FFC01FC03FC>30 27 2 0 33]97 dc[<001FF80000FFFE0003F01F0007 E03F800FC03F801F803F803F801F007F800E007F0000007F000000FF000000FF000000FF000000 FF000000FF000000FF000000FF0000007F0000007F0000007F8000003F8001C01F8001C00FC003 8007E0070003F01E0000FFFC00001FE000>26 27 2 0 31]99 dc[<00003FF80000003FF80000 003FF800000003F800000003F800000003F800000003F800000003F800000003F800000003F800 000003F800000003F800000003F800000003F800000003F800001FE3F80000FFFBF80003F03FF8 0007E00FF8000FC007F8001F8003F8003F8003F8007F0003F8007F0003F8007F0003F800FF0003 F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F800FF0003F8007F0003F8007F00 03F8007F0003F8003F8003F8001F8003F8000F8007F80007C00FF80003F03BFF8000FFF3FF8000 3FC3FF80>33 42 2 0 38]100 dc[<003FE00001FFF80003F07E0007C01F000F801F801F800F80 3F800FC07F000FC07F0007C07F0007E0FF0007E0FF0007E0FFFFFFE0FFFFFFE0FF000000FF0000 00FF0000007F0000007F0000007F0000003F8000E01F8000E00FC001C007E0038003F81F0000FF FE00001FF000>27 27 2 0 32]101 dc[<0007F0003FFC00FE3E01F87F03F87F03F07F07F07F07 F03E07F00007F00007F00007F00007F00007F00007F000FFFFC0FFFFC0FFFFC007F00007F00007 F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007 F00007F00007F00007F00007F00007F0007FFF807FFF807FFF80>24 42 2 0 21]102 dc[<00FF 81F003FFE7F80FC1FE7C1F80FC7C1F007C383F007E107F007F007F007F007F007F007F007F007F 007F007F007F003F007E001F007C001F80FC000FC1F8001FFFE00018FF80003800000038000000 3C0000003E0000003FFFF8001FFFFF001FFFFF800FFFFFC007FFFFE01FFFFFF03E0007F07C0001 F8F80000F8F80000F8F80000F8F80000F87C0001F03C0001E01F0007C00FC01F8003FFFE00007F F000>30 40 2 13 34]103 dc[33 42 3 0 38]104 dc [<07000FC01FE03FE03FE03FE01FE00FC007000000000000000000000000000000FFE0FFE0FFE0 0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F E00FE0FFFEFFFEFFFE>15 43 3 0 20]105 dc[15 42 3 0 20]108 dc[53 27 3 0 58] 109 dc[33 27 3 0 38]110 dc[<003FE00001FF FC0003F07E000FC01F801F800FC03F800FE03F0007E07F0007F07F0007F07F0007F0FF0007F8FF 0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F87F0007F07F0007F03F800FE0 3F800FE01F800FC00FC01F8007F07F0001FFFC00003FE000>29 27 2 0 34]111 dc[ 24 27 2 0 28]114 dc[<03FE300FFFF01E03F03800F0700070F00070F00070F80070FC0000FF E0007FFE007FFF803FFFE01FFFF007FFF800FFF80003FC0000FC60007CE0003CF0003CF00038F8 0038FC0070FF01E0F7FFC0C1FF00>22 27 2 0 27]115 dc[<00700000700000700000700000F0 0000F00000F00001F00003F00003F00007F0001FFFF0FFFFF0FFFFF007F00007F00007F00007F0 0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F03807F03807F03807F0 3807F03807F03803F03803F87001F86000FFC0001F80>21 38 1 0 27]116 dc[33 27 3 0 38]117 dc[33 27 1 0 36]118 dc[33 39 1 12 36]121 dc dfe end TeXDict begin @letter %%EndProlog %%Page: 1 1 bop 133 209 a fl(Using)23 b(the)f(Mac)n(h)i(Comm)n(unication)c(Primitiv)n (es)g(in)i(X11)239 324 y fk(Michael)c(Ginsb)n(er)m(g)g(and)g(R)m(ob)n(ert)f (V.)h(Bar)m(on)g(and)f(Brian)h(N.)f(Bershad)275 400 y fj(mike)m(gins@micr)m (osoft.c)n(om,)f(rvb@cs.cmu.e)n(du,)g(b)n(ershad@cs.cmu.e)n(du)603 498 y fk (Scho)n(ol)i(of)g(Computer)f(Scienc)o(e)607 556 y(Carne)m(gie)h(Mel)t(lon)g (University)687 614 y(5000)f(F)l(orb)m(es)h(A)o(venue)673 672 y(Pittsbur)n (gh,)g(P)l(A)g(15213)809 910 y fi(Abstract)176 978 y fh(W)l(e)e(ha)n(v)o(e)g (mo)o(di\014ed)g(the)g(X11)e(windo)o(wing)g(system)h(to)g(use)i(the)e(nativ)o (e)g(comm)m(unication)f(fa-)114 1028 y(cilities)f(of)h(the)h(Mac)o(h)f(3.0)g (microk)m(ernel.)20 b(Our)15 b(new)f(implemen)m(tation)f(can)i(rely)f(on)g (Mac)o(h's)g(lo)o(w-)114 1078 y(o)n(v)o(erhead)h(IPC)g(facilit)m(y)f(as)g(a)g (direct)h(replacemen)o(t)f(for)g(so)r(c)o(k)o(ets,)g(or)g(it)g(can)h(use)g (shared)g(memory)114 1128 y(as)d(a)g(transp)r(ort)g(b)q(etw)n(een)i(X11)d(cli\ en)o(ts)i(and)f(the)h(server.)18 b(On)12 b(con)o(v)o(entional)e(BSD)j(Unix)f (systems,)114 1177 y(X11)i(comm)m(unication)g(is)h(done)g(through)g(so)r(c)o (k)o(ets.)22 b(Because)17 b(a)e(user-level)g(pro)q(cess)i(implem)o(en)m(ts) 114 1227 y(Unix)h(functionalit)m(y)g(on)g(top)g(of)g(Mac)o(h)h(3.0,)e(a)h(so) r(c)o(k)o(et-based)h(v)o(ersion)g(of)e(X11)h(p)q(erforms)g(sub-)114 1277 y (stan)o(tially)c(w)o(orse)i(than)f(when)h(running)g(on)f(a)g(monolithic)e(Uni\ x)i(k)o(ernel.)24 b(Using)15 b(Mac)o(h)h(IPC)f(as)114 1327 y(the)i(transp)r (ort)g(b)q(etw)n(een)h(X11)f(clien)o(ts)g(and)g(the)g(server,)h(X11)f(p)q(erf\ ormance)f(is)h(sligh)n(tly)g(b)q(etter)114 1377 y(than)c(that)g(of)f(a)h(mono\ lithic)e(system)i(in)f(whic)o(h)h(so)q(ck)o(ets)h(are)f(implemen)l(ted)h(insi\ de)f(the)h(k)n(ernel)g(as)114 1426 y(opp)q(osed)i(to)g(within)g(a)f(user)j (lev)n(el)e(pro)r(cess.)26 b(Using)16 b(Mac)o(h's)g(shared)h(memory)d(facilit\ ies)h(as)h(the)114 1476 y(transp)q(ort,)e(w)o(e)g(ha)o(v)o(e)g(measured)g(p)q (erformance)f(impro)m(v)o(emen)o(ts)h(of)f(o)o(v)o(er)h(40%.)0 1618 y fl(1)69 b(In)n(tro)s(duction)0 1720 y fg(Mac)n(h)18 b(is)h(a)e(microk)o(ernel-based)j (op)q(erating)e(system)f(that)g(pro)o(vides)i(complete)f(4.3)f(BSD)h(Unix)h (em-)0 1776 y(ulation)g(through)e(a)h(user-lev)o(el)h(Unix)g(serv)n(er)f([Gol\ ub)g(et)g(al.)28 b(90].)e(This)19 b(approac)n(h)f(allo)o(ws)g(existing)0 1833 y(Unix)g(applications)h(to)d(run)h(unmo)r(di\014ed)h(on)f(top)g(of)f(the)i (Mac)n(h)f(microk)o(ernel.)27 b(In)17 b(man)o(y)g(cases,)g(the)0 1876 y 720 2 v 69 1949 a ff(This)d(research)g(w)n(as)g(sp)r(onsored)g(in)h(part)e(by)g(The) h(Defense)g(Adv)n(anced)h(Researc)o(h)f(Pro)s(jects)f(Agency)m(,)h(Informatio\ n)0 1995 y(Science)h(and)g(T)l(ec)o(hnology)h(O\016ce,)d(under)i(the)f(title) h(\\Research)f(on)g(P)o(arallel)i(Computing",)f(ARP)m(A)f(Order)g(No.)19 b (7330,)0 2041 y(issued)12 b(b)o(y)f(D)o(ARP)m(A/CMO)g(under)g(Con)o(tract)g (MD)o(A972-90-C-0035,)h(and)f(b)o(y)g(the)g(Op)q(en)g(Soft)o(w)o(are)f(F)m (oundation)j(\(OSF\).)0 2086 y(Bershad)h(w)o(as)f(partially)i(supp)r(orted)f (b)o(y)f(a)g(National)h(Science)h(F)m(oundation)g(Presiden)q(tial)f(Y)l(oung) g(In)o(v)o(estigator)g(Aw)o(ard.)38 2132 y(The)g(views)g(and)h(conclusions)h (contained)f(in)f(this)h(do)r(cumen)o(t)f(are)f(those)i(of)e(the)h(authors)h (and)f(should)h(not)f(b)r(e)f(inter-)0 2178 y(preted)j(as)f(representing)i (the)e(o\016cial)i(p)q(olicies,)h(either)e(expressed)h(or)e(implied,)j(of)d (D)o(ARP)m(A,)g(OSF,)g(the)g(NSF,)g(or)h(the)0 2223 y(U.S.)c(gov)o(ernment.)p eop %%Page: 2 2 bop 0 195 a fg(system)18 b(has)f(comparable)i(p)q(erformance.)28 b(In)19 b (some)e(cases,)i(though,)f(Unix)h(applications)g(run)f(more)0 252 y(slo)o(wly) f(on)f(top)g(of)g(an)g(em)o(ulated)h(Unix)h(than)e(they)g(do)h(on)f(top)g(of) g(an)g(\\in-kernel")h(v)o(ersion)f(of)g(Unix.)0 308 y(Applications)k(that)d (curren)o(tly)i(su\013er)e(most)h(are)f(those)h(that)f(use)i(the)f(Unix)h(so) q(c)n(k)o(et)f(interface.)28 b(F)-5 b(or)0 364 y(Mac)n(h)15 b(3.0,)f(Unix)i (so)q(c)n(k)o(ets)f(can)g(incur)h(a)e(great)g(deal)i(of)e(o)n(v)o(erhead)h (since)h(a)f(so)q(c)o(k)n(et)g(call)h(m)o(ust)e(p)r(erform)0 421 y(an)h(RPC)g (through)g(the)g(k)n(ernel)h(to)f(the)g(Unix)h(serv)n(er.)k(Since)d(X11)d(dep) r(ends)i(on)f(the)g(so)q(c)o(k)n(et)g(interface,)0 477 y(X11)e(applications)h (can)g(run)f(noticeably)i(more)d(slo)o(wly)i(on)f(top)g(of)g(Mac)n(h)g(3.0)g (than)g(on)g(a)g(con)n(v)o(en)o(tional)0 534 y(Unix)j(system.)71 590 y(W)-5 b (e)19 b(ha)o(v)o(e)g(restructured)g(the)f(proto)q(col-dep)r(endent)h(la)o(y)o (ers)f(of)h(X11)f([Gett)m(ys)h(et)g(al.)30 b(90])18 b(to)g(rely)0 647 y(direc\ tly)g(on)f(the)g(comm)o(unication)h(mec)o(hanisms)g(pro)n(vided)g(b)o(y)f(Mac) o(h)g(3.0,)f(rather)g(than)h(those)g(pro-)0 703 y(vided)f(b)o(y)e(the)h(Unix) g(serv)o(er.)20 b(This)15 b(approac)n(h)g(allo)o(ws)f(us)h(to)f(impro)o(v)o (e)g(window-system)g(p)q(erformance)0 760 y(b)r(ecause)h(it)h(remo)n(v)o(es)f (the)g(Unix)h(serv)o(er)f(from)g(X11)f(clien)q(t/serv)n(er)h(comm)o(unication\ .)71 816 y(Our)e(implementation)g(has)g(follo)o(w)n(ed)h(t)n(w)o(o)e(di\013er\ ent)g(paths.)19 b(In)13 b(one)g(case,)g(w)o(e)g(ha)o(v)n(e)g(implemen)q(ted)0 873 y(the)i(X11)g(transp)q(ort)g(protocols)h(using)g(Mac)n(h)g(IPC)f([Dra)n (v)o(es)g(90].)k(This)d(yields)h(p)r(erformance)e(slightly)0 929 y(b)r(etter,) 22 b(or)g(comparable)g(to)f(that)g(of)h(an)f(in-kernel)i(implemen)q(tation)e (b)r(ecause)h(it)g(eliminates)i(the)0 985 y(con)o(text-switc)o(hing)16 b(o)n (v)o(erhead)g(incurred)h(b)o(y)e(the)h(out-of-k)n(ernel)h(Unix)f(system.)21 b (In)16 b(the)f(second)h(case,)0 1042 y(w)o(e)f(ha)o(v)n(e)h(used)g(shared)f (memory)f(for)h(comm)n(unication)i(b)q(et)o(w)o(een)e(X11)g(clien)q(ts)g(and) g(serv)o(ers)g(reducing)0 1098 y(the)d(system's)e(reliance)k(on)d(k)o(ernel)h (comm)o(unication)h(primitives)f([Bershad)f(et)g(al.)19 b(91].)f(This)12 b (approac)o(h)0 1155 y(yields)17 b(substan)o(tial)e(p)r(erformance)g(impro)o (v)n(ements.)0 1277 y fe(1.1)56 b(Motiv)l(ation)0 1362 y fg(Mac)n(h)12 b(is)h (a)e(microk)o(ernel)i(designed)g(to)e(pro)o(vide)h(a)g(base)g(op)q(erating)g (system)f(on)h(whic)o(h)g(other)g(op)q(erating)0 1419 y(systems)e(suc)o(h)h (as)g(Unix)g(can)g(b)q(e)g(built.)20 b(Tw)o(o)10 b(v)o(ersions)h(of)f(Mac)n (h)h(will)i(b)q(e)e(discussed)h(in)g(this)f(pap)q(er.)19 b(The)0 1475 y(\014r\ st,)14 b(Mac)n(h)h(2.5,)e(includes)j(the)f(Mac)n(h)g(microk)o(ernel)g(and)g (the)f(Unix)h(em)o(ulation)g(co)q(de)g(in)g(the)g(k)n(ernel's)0 1532 y(addres\ s)20 b(space.)33 b(This)20 b(com)o(bination)g(is)g(comparable)g(in)h(sp)q(eed) f(to)f(other)g(Unix)i(implementations)0 1588 y(suc)o(h)g(as)f(Ultrix)h(and)g (BSD)f(4.3,)h(since)g(all)h(the)e(Unix)h(co)r(de)f(is)h(in)h(the)e(monolithic) i(k)o(ernel.)36 b(Mac)o(h)0 1645 y(2.5)16 b(is)i(compatible)g(with)g(standard) e(Unix,)j(but)e(also)g(pro)o(vides)h(the)f(added)h(functionality)f(of)g(Mac)n (h.)0 1701 y(In)h(con)n(trast,)e(Mac)o(h)h(3.0)f(con)o(tains)h(just)f(the)h (Mac)o(h)g(microk)o(ernel.)26 b(A)17 b(separate)f(program,)g(the)h(Unix)0 1758 y(em)o(ulator,)e(runs)h(as)f(a)h(user-level)g(pro)q(cess.)22 b(Mac)n(h)16 b (o\013ers)f(t)o(w)n(o)h(kinds)g(of)g(comm)n(unications)h(c)o(hannels,)0 1814 y (message)j(passing)h(and)f(shared)g(memory)l(.)35 b(Message)20 b(passing)h (is)f(pro)o(vided)i(using)f(the)f(Mac)n(h)h(IPC)0 1870 y(interface.)e(Shared) d(memory)e(is)i(pro)o(vided)g(using)g(Mac)n(h's)f(VM)g(interface)g([Rashid)h (et)f(al.)20 b(87].)71 1927 y(Under)h(Mac)o(h)g(3.0,)h(comm)n(unication)h(thr\ ough)e(a)g(so)q(c)o(k)o(et)g(goes)h(from)e(the)i(user)f(co)r(de)g(through)0 1983 y(the)e(Mac)n(h)g(microk)o(ernel,)h(then)f(to)f(the)h(Unix)g(em)o(ulator\ .)30 b(Therefore,)19 b(more)f(o)o(v)n(erhead)h(is)h(incurred)0 2040 y(for)15 b (Unix)i(so)q(c)o(k)o(et)f(system)g(calls)h(using)g(Mac)n(h)f(3.0)f(than)h(whe\ n)h(using)g(an)f(in-kernel)h(implementation)0 2096 y(of)h(Unix.)31 b(F)l(or) 18 b(example,)i(on)e(a)g(33Mhz)g(80486)g(system,)g(a)g(small)i(\(64)d(b)o(yte\ s\))h(round-trip)h(message)0 2153 y(using)h(so)q(c)o(k)n(ets)f(tak)n(es)g(709) f(microseconds)i(on)f(Mac)n(h)h(2.5,)e(and)h(2319)f(microseconds)i(on)f(Mac)n (h)g(3.0.)0 2209 y(Under)h(Mac)n(h)f(3.0,)g(using)g(Mac)o(h)g(IPC)g(rather)f (than)h(so)q(c)o(k)o(et)f(co)r(de,)h(the)h(time)f(drops)g(to)f(ab)q(out)h(150) 0 2266 y(microseconds.)i(With)15 b(shared)h(memory)-5 b(,)15 b(the)g(time)h (to)f(send)g(a)g(message)g(can)h(b)q(e)f(as)g(lo)o(w)g(as)g(the)h(time)0 2322 y(to)f(format)e(the)j(message)e(in)i(a)f(shared)h(bu\013er.)71 2379 y(Our)c (goal)g(w)o(as)g(to)f(retarget)g(X11)h(to)g(use)h(the)f(less)h(exp)r(ensiv)o (e)g(comm)n(unication)h(facilities)g(pro)o(vided)0 2435 y(b)o(y)j(the)g(Mac)n (h)g(3.0)f(op)q(erating)h(system.)24 b(W)l(e)17 b(exp)r(erimented)f(with)i (t)n(w)o(o)e(di\013erent)g(implemen)q(tations,)0 2491 y(one)f(using)h(k)o(ern\ el-based)h(IPC)e(and)g(one)h(using)g(shared)f(memory)l(.)p eop %%Page: 3 3 bop 71 195 a fg(X11)15 b(is)i(a)e(clien)q(t-serv)n(er)h(windowing)g(system)g (that)f(runs)h(under)h(man)o(y)f(di\013eren)o(t)g(op)q(erating)g(sys-)0 252 y (tems)21 b(and)g(on)f(man)o(y)h(di\013erent)f(hardw)o(are)g(platforms.)37 b (It)21 b(pro)n(vides)h(a)f(serv)n(er)g(that)f(con)o(trols)h(the)0 308 y(mac)o (hine)16 b(hardw)o(are,)f(including)j(displays)e(and)f(input)i(devices)g(suc) o(h)f(as)f(k)n(eyb)r(oards)g(and)h(mice.)21 b(Pro-)0 364 y(grams)15 b(access) h(the)f(serv)o(er)h(through)f(a)g(library)i(of)e(clien)q(t)g(functions.)22 b (This)16 b(library)h(allo)o(ws)f(clients)g(to)0 421 y(request)e(actions)g(to) f(b)q(e)h(tak)o(en)g(b)o(y)f(the)h(X)g(serv)o(er,)g(as)f(w)o(ell)i(as)e(to)g (request)h(noti\014cation)h(of)e(ev)o(en)o(ts)h(suc)o(h)0 477 y(as)h(k)o(eyb) q(oard)g(and)g(mouse)h(ev)o(en)o(ts.)j(W)l(e)d(w)n(ere)g(willing)h(to)e(mak)n (e)h(c)o(hanges)f(to)g(the)g(serv)o(er,)f(since)j(there)0 534 y(are)f(relativ) o(ely)h(few)g(serv)n(ers,)f(but)h(w)n(ere)g(un)o(willing)h(to)e(do)g(so)g(to) g(clients.)23 b(W)l(e)16 b(w)o(an)o(ted)g(to)g(b)q(e)h(able)g(to)0 590 y(tak) n(e)j(existing)g(clients)f(and)h(use)f(them)g(under)h(our)f(mo)q(di\014ed)i (transp)q(ort,)e(without)g(ha)o(ving)h(to)e(edit)0 647 y(or)f(rewrite)h(them.) 27 b(Therefore,)18 b(our)f(clien)q(t-side)h(c)o(hanges)g(are)f(restricted)h (to)f(the)h(X11)f(library)m(,)h(and)0 703 y(require)e(only)g(that)e(X11)h(cli\ en)q(ts)f(b)r(e)h(relinked.)0 825 y fe(1.2)56 b(The)18 b(rest)g(of)h(this)f (pap)r(er)0 911 y fg(The)h(rest)g(of)f(this)h(pap)r(er)g(describ)r(es)g(our)g (exp)r(eriences)h(with)f(restructuring)g(the)g(X11)g(protocols)h(to)0 967 y (use)d(the)g(nativ)o(e)g(comm)o(unication)h(facilities)h(of)d(Mac)n(h.)26 b (In)17 b(Section)h(2)e(w)o(e)h(discuss)h(the)f(use)g(of)f(Mac)o(h)0 1024 y (IPC)i(as)g(a)g(replacement)f(for)h(Unix)h(so)q(c)o(k)n(ets)f(in)h(the)f(con) o(text)g(of)f(the)i(X11)e(proto)q(cols.)29 b(In)18 b(Section)h(3)0 1080 y(w)o (e)f(describ)s(e)h(the)f(use)h(of)f(a)h(user-lev)o(el)h(comm)n(unication)g (proto)q(col)f(based)f(on)h(shared)g(memory)-5 b(.)30 b(In)0 1137 y(Section) 14 b(4)e(w)n(e)h(discuss)h(the)f(p)q(erformance)f(of)g(the)h(t)o(w)n(o)f(appr\ oac)o(hes.)19 b(Finally)14 b(in)g(Section)f(5)g(w)n(e)g(presen)o(t)0 1193 y (our)i(conclusions.)0 1336 y fl(2)69 b(Using)23 b(Mac)n(h)g(IPC)0 1438 y fg (In)14 b(our)g(initial)h(implemen)q(tation,)e(w)o(e)h(replaced)h(so)q(c)o(k)n (et)f(calls)g(in)h(the)f(original)g(X11)g(system)f(with)h(calls)0 1494 y(to)h (Mac)o(h's)g(IPC)h(facilities.)24 b(Structurally)n(,)15 b(this)i(approac)n (h)f(is)h(similar)g(to)e(the)h(original)h(so)q(c)o(k)o(et-based)0 1551 y(impl\ emen)q(tation)k(on)g(a)g(monolithic)i(k)o(ernel)g(in)f(that)f(it)g(uses)h(k)o (ernel)g(routines)g(to)f(pass)g(messages)0 1607 y(b)r(et)n(w)o(een)16 b(addre\ ss)f(spaces.)71 1664 y(Most)9 b(clien)q(t)h(requests)h(in)h(X)f(are)f(async)o (hronous,)h(and)g(are)g(bu\013ered)g(at)f(b)r(oth)g(the)h(clien)q(t)f(and)h (serv)o(er)0 1720 y(end.)27 b(F)-5 b(or)17 b(example,)h(when)g(a)f(clien)q (t)f(requests)i(that)e(the)h(serv)o(er)g(dra)o(w)g(a)g(circle)i(on)e(the)g (screen,)h(the)0 1776 y(clien)q(t)c(library)h(ma)n(y)f(bu\013er)h(the)f(reque\ st.)20 b(On)15 b(the)f(serv)o(er)g(side,)h(the)g(pro)q(cessing)g(of)f(the)g (request)h(ma)n(y)0 1833 y(b)r(e)e(dela)o(y)o(ed)g(as)f(w)o(ell.)21 b(There) 13 b(are)f(t)o(w)n(o)h(main)g(w)o(a)n(ys)g(that)f(the)h(client)g(can)g(sync)o (hronize)h(its)f(outstanding)0 1889 y(requests)h(with)g(the)g(serv)n(er's.)19 b(The)14 b(\014rst)f(is)i fd(Xflush)p fg(,)d(which)i(instructs)g(the)g(client) g(to)f(\015ush)h(its)g(bu\013ers)0 1946 y(of)e(an)n(y)h(unsen)o(t)f(requests) g(to)g(the)g(serv)o(er.)19 b(The)12 b fd(Xflush)f fg(function)i(returns)f(aft\ er)g(sending)h(the)g(bu\013ered)0 2002 y(requests)g(to)f(the)h(serv)o(er,)g (so)g(it)g(do)q(es)g(not)g(guaran)n(tee)g(that)f(they)h(ha)o(v)o(e)g(b)q(een) h(pro)q(cessed)g(b)o(y)f(the)g(serv)n(er.)0 2059 y(Stronger)h(guaran)n(tees)h (are)f(pro)o(vided)i(with)f fd(Xsync)p fg(.)j fd(Xsync)p fg(,)c(like)h fd(Xfl\ ush)p fg(,)e(\015ushes)j(the)e(clien)q(t)g(bu\013er,)0 2115 y(but)i(then)g (requests)g(the)g(serv)n(er)g(to)f(ac)o(kno)o(wledge)h(that)f(it)i(has)e(\014\ nished)j(all)e(p)r(ending)h(requests.)22 b(The)0 2172 y(clien)q(t)13 b(blo)r (c)o(ks)h(un)o(til)h(the)f(ac)o(kno)n(wledgement)g(arriv)o(es.)19 b(Most)13 b (clien)q(ts)g(generally)i(send)g(sev)o(eral)f(display)0 2228 y(dra)o(wing)i (requests,)h(and)g(then)g(blo)q(c)o(k)g(w)n(aiting)g(for)f(user)h(input,)h (whic)o(h)f(causes)g(an)f fd(Xflush)p fg(,)g(or)g(they)0 2285 y(mak)n(e)21 b (sev)o(eral)f(display)h(requests,)g fd(Xsync)e fg(to)h(ensure)h(that)e(the)i (display)f(lo)r(oks)f(correct,)i(and)g(then)0 2341 y(mak)n(e)16 b(more)e(disp\ la)q(y)h(requests.)p eop %%Page: 4 4 bop 0 195 a fe(2.1)56 b(The)18 b(X11)h(serv)n(er)0 281 y fg(W)l(e)11 b(mo)q (di\014ed)i(the)e(serv)o(er)g(to)f(use)i(the)f(Mac)n(h)g(nameserv)o(er)g(for) g(establishing)i(a)d(clien)q(t)h(rendezv)o(ous.)19 b(The)0 337 y(serv)o(er)14 b(creates)h(a)f(Mac)o(h)h(p)q(ort)f(for)h(client)g(connections,)g(and)g(mak)o (es)f(it)i(a)n(v)n(ailable)g(to)e(clien)q(ts)g(through)0 394 y(the)g(name)g (serv)n(er.)20 b(The)14 b(serv)n(er)g(listens)h(on)f(the)f(initial)j(p)r(ort) d(for)g(incoming)i(messages.)k(Up)q(on)14 b(receipt)0 450 y(of)g(a)g(connecti\ on)i(message,)e(it)g(creates)g(a)h(pair)f(of)h(Mac)n(h)g(p)q(orts,)e(and)i (sends)g(them)f(to)g(the)h(connecting)0 507 y(clien)q(t.)23 b(One)17 b(of)f (these)h(p)r(orts)e(is)i(monitored)g(b)o(y)f(the)h(serv)n(er)g(for)f(requests) g(from)g(the)g(clien)q(t,)g(and)h(the)0 563 y(other)e(is)h(monitored)f(b)o (y)g(the)g(clien)q(t)g(for)f(resp)r(onses)h(and)g(ev)o(en)o(ts)g(from)g(the)g (serv)o(er.)71 620 y(An)j(X11)g(serv)o(er)h(m)n(ust)g(monitor)f(the)h(activit) o(y)f(of)g(a)h(p)q(oten)o(tially)h(large)e(n)o(um)o(b)r(er)g(of)g(clien)q(ts.) 29 b(In)0 676 y(the)19 b(original)g(v)o(ersion)g(of)f(the)h(serv)n(er,)g(the) g(clien)q(ts)f(w)n(ere)h(represen)o(ted)g(b)o(y)f(a)h(set)f(of)g(\014le)i(des\ criptors)0 733 y(represen)o(ting)g(so)q(c)o(k)n(ets.)32 b(The)20 b(so)q(c)o (k)n(et-based)g(serv)o(er)f(monitored)g(the)g(connections)i(using)f(the)f(Uni\ x)0 789 y fd(select)e fg(call.)29 b(The)18 b(X)g(serv)n(er's)g fd(select)f fg (call)i(also)e(monitors)h(Unix)g(\014le)h(descriptors)f(p)r(ertaining)h(to)0 845 y(k)o(eyb)q(oard)h(and)g(mouse)f(I/O.)h(These)g(I/O)h(c)o(hannels)g(are)e (relativ)o(ely)i(lo)o(w-bandwidth)g(and)f(are)f(not)0 902 y(latency-critical.) 36 b(Consequen)o(tly)m(,)20 b(w)n(e)g(left)g(their)h(managemen)n(t)f(to)f(the) g(Unix)i(serv)o(er)e(ev)o(en)h(in)h(the)0 958 y(IPC-based)16 b(implemen)q(tat\ ion.)71 1015 y(Under)c(Mac)o(h)g(3.0,)f(our)h(IPC-based)h(serv)o(er)f(main)o (tains)g(and)g(listens)i(on)e(a)g(p)q(ort)f(set,)i(with)f(one)g(p)r(ort)0 1071 y(p)r(er)g(client.)19 b(Because)12 b(the)g(slo)o(w)o(er)g(I/O)h(c)n(hannels)h (are)d(accessed)i(with)f(Unix)h(\014le)h(descriptors,)e(w)o(e)g(could)0 1128 y (not)17 b(simply)j(replace)e(the)g(original)h(serv)o(er's)e fd(select)g fg (call)i(with)g(a)e(call)i(to)e(c)o(heck)g(the)h(status)f(of)h(the)0 1184 y (p)r(ort)11 b(set.)18 b(On)13 b(the)f(serv)o(er)g(side,)h(w)o(e)f(in)o(tro)q (duced)h(a)f(second)g(thread)g(to)g(handle)h(the)f(blo)r(c)o(king)h(I/O)f(Uni\ x)0 1241 y(call.)20 b(The)13 b(primary)f(thread)g(p)r(erforms)f(blo)r(c)o(kin\ g)i(receives)f(on)h(the)f(p)r(ort)f(set,)i(while)g(another)f(monitors)0 1297 y (I/O)i(activity)f(on)h(the)g(Unix)h(\014le)g(descriptors.)k(When)c(the)e(seco\ nd)i(thread)e(learns)i(of)e(p)r(ending)i(I/O,)f(it)0 1354 y(alerts)h(the)g (primary)g(primary)g(thread)g(through)g(a)f(\\bac)o(k)h(do)q(or")f(p)r(ort.) 19 b(The)c(primary)g(thread)g(w)n(ak)o(es)0 1410 y(up)h(and)f(handles)h(the)g (I/O.)0 1532 y fe(2.2)56 b(X11)19 b(clien)m(ts)0 1618 y fg(On)c(the)f(clien)q (t)g(side,)h(the)f(X11)g(connection)h(co)q(de)g(w)n(as)f(replaced)i(b)o(y)e (a)g(nameserv)o(er)g(lo)q(okup,)h(follo)o(w)o(ed)0 1674 y(b)o(y)h(a)f(message) g(to)g(the)h(connection)h(p)r(ort)d(of)i(the)g(serv)n(er.)22 b(So)q(c)o(k)o (et)15 b(writes)h(w)n(ere)g(replaced)h(with)f(Mac)o(h)0 1730 y(p)r(ort)j(send\ s,)i(sending)g(a)f(v)n(ariable)h(length)f(arra)n(y)g(instead)h(of)f(writing)g (to)g(the)g(so)q(c)o(k)n(et)g(in)h(a)f(stream)0 1787 y(format.)f(So)q(c)o(k)n (et)c(reads)h(w)n(ere)f(replaced)i(with)e(receives)g(from)g(Mac)n(h)h(p)q(ort\ s.)71 1843 y(X11)d(allows)h(access)h(to)e(the)i(descriptor)g(that)e(is)i(used) g(to)f(access)h(the)f(X11)g(serv)o(er.)19 b(With)c(so)q(c)o(k)o(ets,)0 1900 y (this)g(is)g(a)f(\014le)h(descriptor,)g(and)f(is)h(made)f(accessible)i(so)e (that)g(single-threaded)i(clien)q(ts)e(can)g(m)o(ultiplex)0 1956 y(their)d (activity)f(across)g(sev)o(eral)h(I/O)h(c)o(hannels.)19 b(F)l(or)10 b(example\ ,)j(xterm)d(uses)h(the)g(descriptor)g(to)f(p)r(erform)0 2013 y(system)h(calls) i(suc)o(h)f(as)f fd(select)f fg(in)j(a)e(set)g(with)h(TTY)g(descriptors.)19 b (When)11 b(using)i(Mac)n(h)f(IPC,)f(ho)o(w)n(ev)o(er,)0 2069 y(there)i(is)h (no)f(real)g(Unix)h(\014le)g(descriptor)g(through)e(which)h(clien)q(t/serv)n (er)g(comm)n(unication)i(passes.)k(The)0 2126 y(mixing)h(of)f(\014le)h(descri\ ptors,)f(which)g(are)g(a)g(strictly)g(Unix)h(mec)o(hanism,)g(with)f(Mac)o(h)g (p)q(orts,)g(which)0 2182 y(are)h(a)g(strictly)g(Mac)o(h)g(mec)o(hanism)h(cre\ ated)f(some)g(di\016culties)i(for)e(the)g(implemen)q(tation.)34 b(Unlik)q(e)0 2239 y(the)21 b(serv)o(er,)h(where)g(all)g(blo)r(c)n(king)g(I/O)g(could)g(b)r (e)f(con)o(trolled)h(since)g(it)g(o)q(ccurred)f(within)i(a)e(single)0 2295 y (\\program,")13 b(clien)q(t)i(b)q(eha)o(vior)g(is)h(uncon\014ned.)71 2351 y (W)-5 b(e)19 b(solv)o(ed)g(the)f(\\mixed)h(metaphor")e(problem)i(b)o(y)f(exp) r(orting)g(a)g(pseudo-descriptor)h(from)f(the)0 2408 y(X)d(libraries.)22 b (The)16 b(pseudo-descriptor)h(is)e(simply)i(a)e(small)h(integer)f(that)g(repr\ esen)o(ts)g(the)g(Mac)o(h)g(p)r(ort)0 2464 y(on)k(which)g(serv)o(er)g(comm)n (unication)i(is)e(o)q(ccurring.)33 b(W)l(e)19 b(pro)n(vided)i(library)f(stubs) f(for)f(system)h(calls)0 2521 y(to)c(w)o(atc)n(h)i(for)e(the)h(pseudo-descrip\ tor.)24 b(F)-5 b(or)16 b(example,)h fd(select)e fg(w)n(as)h(written)g(as)g (a)f(clien)q(t-side)i(stub)p eop %%Page: 5 5 bop 0 195 a fg(to)18 b(c)o(heck)g(if)i(the)f(pseudo-descriptor)h(w)n(as)f (in)g(the)g(argumen)o(t)f(set.)31 b(If)19 b(not,)g(a)g(Unix)g fd(select)f fg (call)i(is)0 252 y(p)r(erformed.)27 b(If)18 b(the)g(pseudo-descriptor)h(is)f (the)g(only)g(element)f(in)i(the)f(set,)g(a)f(Mac)n(h)h(system)g(call)g(is)0 308 y(p)r(erformed)f(to)g(\014nd)h(the)f(n)o(um)o(b)r(er)g(of)g(p)r(ending)i (messages,)e(and)g(a)h(result)f(based)h(on)g(this)g(n)o(um)n(b)r(er)f(is)0 364 y(returned.)k(If)15 b(there)h(is)g(a)f(mixture)h(of)f(the)g(p)r(ort)f(and)i (other)f(\014le)h(descriptors)g(in)g(the)g fd(select)e fg(call,)i(w)o(e)0 421 y(alternate)d(b)r(et)n(w)o(een)h(a)f fd(select)f fg(with)i(a)f(small)h(timeou\ t)f(and)h(the)f(Mac)n(h)h(call)g(un)o(til)h(either)f(one)f(returns)0 477 y (a)j(status)f(that)h(w)n(ould)i(b)q(e)e(consistent)g(with)g fd(select)g fg (terminating,)g(or)g(the)h(time)f(v)n(alue)h(sp)q(eci\014ed)h(b)o(y)0 534 y (the)d(caller)i(had)e(passed.)71 590 y(Our)i(strategy)f(of)g(slo)o(w)h(p)q (olling)i(in)f(the)f(client)g(for)f(a)h(m)o(ulti-w)o(a)o(y)g fd(select)f fg (is)h(less)h(than)f(optimal,)0 647 y(and)f(is)h(asymmetric)f(with)g(resp)r (ect)g(to)f(the)h(serv)o(er.)22 b(But,)16 b(given)g(our)g(constrain)o(ts)f (of)h(not)g(mo)q(difying)0 703 y(clien)q(ts,)f(w)o(e)h(had)g(few)g(other)g (options.)23 b(One)17 b(option,)f(for)f(example,)i(w)o(ould)g(ha)n(v)o(e)f (b)r(een)h(to)e(spa)o(wn)h(o\013)0 760 y(another)j(thread)g(in)h(the)g(clien) q(t)f(to)f(handle)j(the)f(blo)q(c)o(king)g(Mac)o(h)f(call,)i(and)f(to)f(write) g(to)g(a)g(sp)r(ecial)0 816 y(noti\014er)g(descriptor)f(that)f(w)o(as)h(b)q (eing)h(monitored)f(in)h(all)g fd(select)f fg(calls)h(\(as)e(is)i(done)f(on)g (the)g(serv)o(er)0 873 y(side\).)28 b(W)-5 b(e)18 b(c)o(hose)g(not)f(to)g(do) g(this)h(b)r(ecause)g(it)f(w)o(ould)h(ha)o(v)o(e)f(required)i(building)h(all) f(X11)e(clients)g(as)0 929 y(m)o(ultithreaded)i(applications.)30 b(Man)o(y)17 b(X11)h(clien)q(ts)f(and)h(libraries)i(though)e(assume)g(that)f(they)h(are)0 985 y(running)12 b(in)g(a)f(single-threaded)i(address)e(space.)19 b(This)12 b (a\013ects)e(their)i(use)f(of)g(Unix)h(signal)g(mec)o(hanisms.)0 1042 y(By)17 b(rewriting)g(the)g fd(select)f fg(call,)i(w)o(e)f(w)o(ere)g(able)g(to)f(pass) h(a)g(handle)h(bac)o(k)e(to)h(the)g(clients)g(that)f(they)0 1098 y(could)g (treat)e(as)h(a)g(so)q(c)o(k)o(et)g(descriptor)g(without)h(impacting)g(the)f (single-threaded)i(assumptions.)0 1242 y fl(3)69 b(Mac)n(h)24 b(Shared)f(Memo\ ry)0 1343 y fg(Our)13 b(second)g(approac)o(h)g(uses)g(Mac)n(h's)g(shared)g (memory)f(facilities)j(for)d(comm)n(unication)i(b)r(et)o(w)n(een)f(X11)0 1400 y(clien)q(ts)j(and)h(the)g(serv)o(er.)24 b(While)19 b(X11)d(is)h(a)g(net)o (w)n(ork-extensible)i(windo)o(w)e(system,)f(it)h(is)h(commonly)0 1456 y(used) g(for)f(comm)o(unicating)i(b)q(et)o(w)n(een)g(programs)d(and)i(serv)n(ers)g (running)h(on)e(the)h(same)f(mac)o(hine.)28 b(In)0 1512 y(suc)o(h)15 b(cases,) g(shared)f(memory)l(,)h(rather)f(than)g(k)o(ernel-lev)q(el)h(IPC,)g(can)g(b)q (e)g(used)h(as)e(an)h(extremely)g(lo)o(w-)0 1569 y(latency)h(comm)n(unication) g(c)o(hannel.)21 b(Through)15 b(the)g(use)g(of)g(external)g(pagers,)f(Mac)n (h)h(allows)g(memory)0 1625 y(to)f(b)r(e)h(mapp)q(ed)h(in)o(to)f(m)n(ultiple) i(address)f(spaces)f(at)f(once.)20 b(Once)c(the)f(pages)g(ha)o(v)n(e)g(b)r (een)h(mapp)q(ed,)f(no)0 1682 y(additional)i(k)n(ernel)g(in)o(teraction)e(is) h(necessary)f(when)h(accessing)g(the)f(memory)l(.)71 1738 y(W)-5 b(e)16 b(use) g(shared)g(memory)f(only)h(for)e(comm)o(unicating)j(from)d(the)i(clien)q(t)f (to)g(the)g(serv)o(er.)21 b(Comm)n(u-)0 1795 y(nication)16 b(in)f(the)g(other) f(direction)i(is)f(implemen)q(ted)g(as)f(in)h(the)g(previous)g(section.)21 b (There)14 b(are)h(sev)o(eral)0 1851 y(reasons)j(for)g(this)i(asymmetry)-5 b (.)30 b(First,)19 b(the)g(ma)r(jorit)o(y)g(of)f(data)g(is)h(comm)o(unicated)h (from)e(clients)h(to)0 1908 y(serv)o(ers,)d(and)g(not)g(the)g(other)g(w)o(a)n (y)g(around.)23 b(Second,)17 b(most)f(messages)f(from)h(the)g(serv)o(er)g(to) g(a)g(client)0 1964 y(result)k(in)f(the)h(client)f(b)q(ecoming)h(the)f(next)g (pro)q(cess)h(to)e(run,)i(for)f(example,)h(the)f(serv)o(er's)f(resp)r(onse)0 2021 y(to)f(an)g fd(Xsync)g fg(request.)27 b(On)18 b(the)g(other)f(hand,)h (most)f(requests)g(from)g(the)g(clien)q(t)g(to)g(the)h(serv)n(er)g(can)0 2077 y(b)r(e)j(bu\013ered,)h(allowing)f(the)g(clien)q(t)f(to)h(run)g(ahead)g(of)g (the)g(serv)n(er,)h(thereb)o(y)f(eliminating)j(con)n(text)0 2133 y(switc)o (hes.)71 2190 y(W)-5 b(e)18 b(mo)q(di\014ed)g(the)f(serv)o(er)g(so)g(that)f (during)i(the)f(connection)h(phase)f(it)h(allo)r(cates)e(memory)h(for)f(a)0 2246 y(shared)h(bu\013er,)g(and)g(then)g(returns)g(that)f(shared)h(bu\013er)g (to)f(the)h(connecting)h(clien)q(t.)24 b(Although)18 b(the)0 2303 y(serv)o (er)13 b(has)g(access)g(to)f(the)i(shared)f(bu\013ers)g(of)g(all)h(clients,)f (clien)q(ts)f(themselves)h(do)g(not)g(ha)n(v)o(e)g(access)h(to)0 2359 y(other) g(clien)q(ts')g(shared)h(bu\013ers.)20 b(Since)c(only)f(the)g(clien)q(t)f(wri\ tes)h(new)g(data)f(into)g(the)h(bu\013er)f(and)h(only)0 2416 y(the)j(serv)n (er)g(reads)f(it,)h(there)g(are)f(no)g(race)h(conditions)g(and)g(no)f(need)i (for)e(explicit)i(sync)o(hronization.)0 2472 y(The)f(client)f(mo)o(v)n(es)h (a)f(head)h(p)r(oin)o(ter)f(forw)n(ard)g(when)h(making)g(a)f(request,)g(and)h (the)g(serv)n(er)g(mo)n(v)o(es)f(a)0 2529 y(tail)f(p)q(ointer)f(forw)m(ard)g (when)h(pro)q(cessing)g(a)f(request.)p eop %%Page: 6 6 bop 71 195 a fg(With)20 b(the)g(soc)o(k)o(et-based)g(and)g(IPC-based)h(imple\ mentations,)g(eac)n(h)g(data)e(transfer)g(op)q(eration)0 252 y(b)r(et)n(w)o (een)14 b(the)g(clien)q(t)f(and)h(serv)o(er,)f(which)h(w)n(ent)f(through)g (the)h(k)o(ernel,)h(could)g(also)e(result)h(in)h(a)f(con)n(text)0 308 y(switc) o(h,)19 b(allo)o(wing)f(the)h(serv)n(er)f(to)g(p)q(erform)f(the)h(outstanding) h(requests.)28 b(In)19 b(con)n(trast,)f(the)g(shared-)0 364 y(memory)g(implem\ entation)g(a)o(v)n(oids)h(the)f(k)o(ernel)h(on)f(data)g(transfer,)f(eliminati\ ng)k(the)d(p)r(ossibility)g(of)0 421 y(an)d(\\accidental")g(con)o(text)g(swit\ c)o(h.)20 b(F)l(or)15 b(example,)h(\015ushing)h(no)e(longer)g(results)h(in)g (the)g(serv)n(er)g(b)q(eing)0 477 y(the)f(next)f(pro)q(cess)h(to)f(run,)h(as) f(it)h(generally)h(do)q(es)e(with)h(k)o(ernel-based)h(comm)o(unication.)21 b (All)16 b(con)n(text)0 534 y(switc)o(hes)e(m)o(ust)f(b)q(e)h(forced)g(b)o(y)f (applications,)i(which)f(run)g(un)o(til)g(they)g(are)f(either)h(descheduled)h (due)g(to)0 590 y(quan)o(tum)g(expiration,)h(un)o(til)g(they)f(blo)r(c)o(k)g (w)o(aiting)g(for)g(input,)h(or)f(their)g(shared)h(bu\013er)f(\014lls.)71 647 y(The)e(serv)n(er)g(thread)g(is)g(normally)g(blo)r(c)o(k)o(ed)g(on)f(a)h(mess\ age)f(receive)h(for)f(a)g(p)r(ort)g(set)g(that)g(includes)j(a)0 703 y(p)r(ort) c(used)h(b)o(y)g(clien)q(ts)f(to)h(alert)g(the)g(serv)n(er)g(that)g(there)g (are)f(X11)h(requests)g(outstanding.)19 b(Clients)11 b(only)0 760 y(notify)i (the)g(serv)n(er)g(b)o(y)g(w)o(a)n(y)g(of)f(this)h(p)r(ort)f(if)h(they)g(ha)o (v)o(e)f(issued)i(X11)f(requests)g(that)f(ha)n(v)o(e)h(not)f(y)o(et)h(b)q(een) 0 816 y(pro)q(cessed,)19 b fj(and)f fg(the)g(X)h(serv)n(er)f(has)g(not)g(y)o (et)g(already)g(b)r(een)g(noti\014ed)h(that)f(there)g(are)g(outstanding)0 873 y(requests.)71 929 y(The)c(serv)n(er)g(shares)g(with)g(all)h(clients)f(a)f (single)j(page)d(of)h(memory)f(that)g(con)o(tains)h(a)g(bit)g(indicating)0 985 y(whether)h(or)f(not)g(the)g(serv)o(er)g(is)h(susp)r(ended.)20 b(The)15 b(ser\ v)o(er)f(sets)g(the)h(bit)g(b)q(efore)g(it)f(blo)r(c)o(ks)g(on)h(the)f(p)r (ort)0 1042 y(set.)30 b(Clients,)19 b(subsequent)f(to)g(p)r(osting)g(a)h(mess\ age)f(to)g(the)h(serv)n(er's)g(w)n(ak)o(eup)g(p)r(ort,)f(clear)h(the)g(bit.)0 1098 y(In)e(this)g(w)o(a)n(y)l(,)g(m)n(ultiple)i(clien)q(ts)d(ma)n(y)g(p)r (ost)g(requests)g(to)g(the)g(serv)o(er)h(while)g(requiring)h(only)f(one)g(IPC) 0 1155 y(message.)173 1138 y fc(1)212 1155 y fg(When)e(the)f(serv)o(er)g(w)o (ak)n(es)h(up,)g(it)g(scans)f(the)h(bu\013ers)f(that)g(it)h(shares)f(with)h (clients)f(to)g(\014nd)0 1211 y(and)h(service)h(requests.)k(When)c(all)g(requ\ ests)f(ha)o(v)o(e)g(b)q(een)h(satis\014ed,)g(the)f(serv)o(er)g(goes)h(bac)o (k)f(to)f(sleep.)0 1355 y fl(4)69 b(P)n(erformance)0 1456 y fg(W)l(e)17 b(use\ d)h(sev)o(eral)g(programs)e(to)h(b)r(enc)o(hmark)g(the)g(v)n(arious)g(X11)g (con\014gurations.)27 b(All)19 b(b)q(enc)o(hmarks)0 1512 y(w)o(ere)d(run)h (on)f(a)h(Gatew)m(a)o(y)f(80486)f(system)h(running)i(at)e(33)g(megahertz.)23 b (The)17 b(motherb)q(oard)f(had)h(16)0 1569 y(megab)o(ytes)g(of)g(70ns)g(ram,) g(with)h(64)f(kilobytes)g(of)g(25ns)g(cac)o(he,)i(and)e(a)g(Diamond)h(Sp)r (eedstar)f(video)0 1625 y(b)r(oard.)28 b(All)20 b(tests)e(w)n(ere)h(run)g(wit\ h)f(no)h(other)f(users)g(logged)h(in,)g(and)g(no)f(other)g(pro)q(cesses)h(run\ ning)0 1682 y(that)14 b(w)o(ere)h(not)g(part)g(of)g(the)g(b)q(enchmarks.)0 1804 y fe(4.1)56 b(Microb)q(enc)n(hmark)17 b(p)r(erformance)0 1889 y fg(Our)d (\014rst)e(b)r(enc)o(hmark)h(is)h fj(muncher)p fg(,)f(which)g(is)h(a)f(progra\ m)f(that)h(comes)g(with)g(the)h(MIT)f(distribution.)0 1946 y(Munc)o(her)19 b (rep)q(eatedly)g(do)q(es)g(xors)e(to)h(a)g(256x256)e(window,)i(and)h(\015ushe\ s)g(its)f(bu\013ers)g(to)g(the)g(serv)o(er)0 2002 y(after)c(eac)o(h)i(complet\ e)g(256x256)d(xor)i(\(through)f(the)i fd(Xsync)e fg(command\).)71 2059 y(W)-5 b(e)13 b(mo)q(di\014ed)h(the)f(clien)q(t)f(and)g(serv)o(er)h(so)f(that)g(w)n (e)h(could)h(tell)f(ho)o(w)f(m)o(uc)o(h)h(time)g(w)n(as)g(sp)q(en)o(t)f(in)i (eac)o(h)0 2115 y(during)h(a)e(run)h(of)f(the)h(program.)k(W)l(e)c(\014rst)g (ran)f(the)h(program)f(2500)f(and)i(10000)f(times.)19 b(This)c(allo)o(w)o(ed) 0 2172 y(us)i(to)e(subtract)h(o\013)g(program)f(startup)h(and)h(clean)o(up)g (o)o(v)o(erhead.)24 b(W)-5 b(e)17 b(then)g(mo)q(di\014ed)h(the)e(serv)o(er)g (so)0 2228 y(that)g(it)h(could)h(pro)q(cess)f(eac)n(h)g(request)g(either)g (once)h(or)e(t)n(wice)i(to)e(determine)h(the)g(screen)g(and)g(serv)o(er)0 2276 y 720 2 v 52 2333 a fb(1)69 2349 y ff(W)m(e)12 b(are)f(a)o(w)o(are)g(that)h (the)f(fact)g(that)h(clien)q(ts)f(can)h(write)f(the)h(bit)g(creates)f(a)h(p)q (oten)o(tial)h(denial-of-service)h(situation)g(\(a)0 2395 y(clien)q(t)c(erron\ eously)j(clearing)g(the)e(bit)g(without)h(sending)g(a)f(w)o(ak)o(eup)g(messag\ e)h(w)n(ould)h(k)o(eep)e(other)g(clien)q(ts)f(from)h(notifying)0 2440 y(the)k (server\).)23 b(This)16 b(has)g(not)g(y)o(et)f(b)q(ecome)h(a)f(problem,)i(but) f(if)f(it)h(do)r(es,)f(w)o(e)g(will)i(implemen)q(t)e(one)g(of)g(several)h(ob) o(vious)0 2486 y(solutions,)e(includin)q(g)h(ha)o(ving)f(the)e(server,)f(rath\ er)i(than)g(the)f(clien)q(t,)f(write)i(the)f(bit,)h(or)f(having)h(the)f(serve\ r)g(p)q(erio)r(dically)0 2532 y(w)o(ak)o(eup)i(and)f(c)o(heck)g(the)g(input)h (queues)g(regardless)h(of)e(message)g(tra\016c.)p eop %%Page: 7 7 bop 451 260 a 2 57 v 477 243 a fg(2.5)14 b(so)q(c)o(k)o(ets)49 b(3.0)14 b (so)q(c)o(k)o(ets)50 b(3.0)14 b(p)q(orts)49 b(3.0)15 b(shared)g(memory)170 262 y 1461 2 v 195 301 a(Client)g(time)451 318 y 2 57 v 554 301 a(1.1)204 b(1.1) 185 b(1.1)267 b(1.1)195 357 y(IPC)15 b(time)451 374 y 2 57 v 554 357 a(1.6) 204 b(5.0)185 b(1.3)267 b(0.3)195 414 y(Serv)o(er)15 b(time)451 431 y 2 57 v 554 414 a(1.7)204 b(1.7)185 b(1.7)267 b(1.7)195 470 y(Screen)16 b(time)451 487 y 2 57 v 554 470 a(0.3)204 b(0.3)185 b(0.3)267 b(0.3)170 489 y 1461 2 v 195 529 a(T)l(otal)15 b(time)451 545 y 2 57 v 554 529 a(4.7)204 b(8.1)185 b(4.4) 267 b(3.4)443 625 y(T)l(able)16 b(1:)k fa(Munc)o(her)15 b(p)r(erformance)g (\(ms/iteration\))0 811 y fg(o)n(v)o(erhead.)25 b(W)l(e)17 b(mo)q(di\014ed)h (the)f(library)g(to)f(send)h(eac)o(h)g(request)g(to)f(the)h(serv)n(er)g(eithe\ r)h(once)f(or)f(t)n(wice)0 867 y(to)g(determine)i(IPC)f(o)n(v)o(erhead.)25 b (Lastly)l(,)17 b(w)n(e)g(mo)q(di\014ed)h(the)f(serv)o(er)f(to)h(write)f(to)g (a)h(\014xed)g(single)h(page)0 924 y(in)f(memory)e(all)i(requests)f(that)g (w)n(ould)h(otherwise)g(ha)n(v)o(e)f(gone)g(to)g(video)g(memory)l(.)23 b(This) 16 b(allow)n(ed)h(us)0 980 y(to)f(appro)n(ximate)h(ho)o(w)f(m)o(uc)o(h)h(of)f (the)g(serv)o(er)g(time)h(w)o(as)f(sp)r(en)o(t)g(in)h(the)g(serv)o(er)f(co)q (de,)h(and)g(ho)o(w)f(m)o(uc)o(h)0 1037 y(w)o(as)e(sp)r(en)o(t)h(con)o(trolli\ ng)h(the)f(video)h(b)r(oard.)71 1093 y(T)l(able)11 b(1)g(summarizes)g(the)g (results)g(of)g(the)g(measuremen)o(ts)f(using)i(four)f(di\013eren)o(t)g(imple\ mentations)0 1150 y(of)18 b(the)h(comm)o(unication)h(system:)26 b(Mac)o(h)19 b (2.5)e(with)j(so)q(c)n(k)o(ets,)f(Mac)o(h)g(3.0)e(using)j(so)q(c)o(k)o(ets,)f (Mac)n(h)g(3.0)0 1206 y(using)d(Mac)o(h)f(IPC,)h(and)g(Mac)n(h)g(3.0)e(using) j(shared)e(memory)l(.)21 b(The)16 b(comp)q(onen)o(t)g(and)f(total)g(times)h (are)0 1263 y(for)11 b(one)h(full)h(256x256)d(xor.)18 b(T)l(aking)12 b(the)f (Mac)o(h)g(2.5)g(with)h(so)q(c)o(k)o(ets)f(implemen)q(tation)g(as)g(a)g(basel\ ine,)j(3.0)0 1319 y(so)q(c)o(k)o(ets)c(tak)n(e)g(almost)g(75%)g(more)f(time)i (to)f(execute,)h(while)h(3.0)d(p)r(orts)g(o\013er)h(ab)q(out)g(a)g(6%)g(impro) o(v)n(ement,)0 1375 y(and)15 b(the)h(shared)f(memory)g(implementation)g(o\013\ ers)f(a)h(25%)g(impro)o(v)o(emen)o(t.)71 1432 y(An)o(y)i(further)h(sp)q(eedup) h(w)o(ould)f(ha)o(v)o(e)f(to)g(come)h(from)f(a)g(ma)r(jor)g(rewrite)h(of)f (the)h(clien)q(t)f(or)g(serv)o(er)0 1488 y(internals,)e(or)g(from)g(faster)g (hardw)n(are.)21 b(The)16 b(clien)q(t)f(and)g(serv)o(er)h(eac)o(h)f(tak)n(e)h (a)f(\014xed)i(amoun)n(t)e(of)h(time)0 1545 y(regardless)d(of)g(the)g(transfe\ r)f(protocol)h(used.)20 b(The)13 b(data)g(transfer)f(time)h(using)h(shared)f (memory)f(is)h(less)0 1601 y(than)e(the)h(time)g(for)f(this)h(particular)g (system)f(to)g(actually)h(mo)q(dify)g(video)h(memory)-5 b(.)19 b(An)o(y)11 b (further)h(gains)0 1658 y(b)r(ey)n(ond)18 b(this)g(shared)f(memory)g(v)o(ersi\ on)h(w)n(ould)g(b)r(e)f(negligible,)k(since)d(remo)o(ving)g(the)f(data)g(tran\ sfer)0 1714 y(completely)g(w)n(ould)f(only)g(yield)h(ab)q(out)e(an)g(8%)g(gai\ n)g(o)o(v)n(er)g(the)h(shared)f(memory)g(v)n(ersion.)0 1836 y fe(4.2)56 b(Mac\ rob)r(enc)n(hmark)17 b(p)r(erformance)0 1922 y fg(W)l(e)h(measured)g(t)n(w)o (o)g(macrobenchmarks)f(to)g(ev)n(aluate)h(the)g(impact)g(that)g(our)f(c)o(han\ ges)h(had)g(on)g(ap-)0 1978 y(plication)h(b)q(eha)o(vior.)26 b(One)18 b(macro\ benchmark)e(measured)i(the)f(time)g(to)g(send)g(a)g(large)g(\014le)h(\(15000+) 0 2035 y(lines\))d(to)f(an)f fj(xterm)i fg(that)e(had)h(jump)g(scrolling)i (activ)n(ated.)j(Using)14 b(so)q(c)o(k)o(ets,)g(this)g(test)f(to)q(ok)h(1)f (minute)0 2091 y(and)19 b(19)f(seconds)h(to)f(complete)h(under)h(Mac)n(h)f (2.5,)f(and)h(2)f(minutes)g(and)h(15)f(seconds)h(under)g(Mac)o(h)0 2148 y(3.0\ .)f(Using)c(Mac)o(h)g(3.0)e(p)r(orts,)g(the)i(test)f(took)h(only)g(1)f(min)o (ute)h(and)g(17)f(seconds)h(to)f(complete,)h(slightly)0 2204 y(b)r(etter)g (than)h(the)g(baseline)i(and)e(m)n(uch)g(b)q(etter)g(than)g(the)g(Mac)n(h)g (3.0)f(so)q(c)o(k)o(et-based)h(implemen)q(tation.)0 2260 y(The)g(Mac)o(h)g (3.0)f(shared)i(memory)e(v)o(ersion)i(took)f(1)g(minute)g(and)g(5)g(seconds)h (\(85%)e(of)h(baseline\).)71 2317 y(F)-5 b(or)13 b(applications)i(that)d(do)h (not)g(explicitly)j(sync)o(hronize)e(with)f(the)h(serv)n(er,)f(there)h(can)f (b)q(e)h(an)f(ev)o(en)0 2373 y(greater)18 b(impro)o(v)n(ement)g(in)h(p)r(erfo\ rmance.)30 b(F)l(or)18 b(example,)i(the)e fj(maze)h fg(program)e(distributed) j(in)g(the)0 2430 y(MIT)d(release)g(dra)o(ws)g(and)g(solv)o(es)g(a)g(random)f (maze)h(as)g(fast)f(as)g(it)i(can.)25 b(It)17 b(only)h(sync)o(hronizes)g(with) 0 2486 y(the)h(serv)n(er)g(\(for)e(display)i(up)q(date\))f(when)h(it)g(has)f (generated)h(a)f(solution.)30 b(Using)19 b(so)q(c)o(k)o(ets,)f(a)h(dra)n(w-)0 2543 y(solv)o(e)f(cycle)g(to)q(ok)f(an)g(a)o(v)o(erage)g(of)g(1.91)f(seconds) i(with)g(Mac)n(h)g(2.5,)e(and)i(3.97)e(seconds)i(under)g(Mac)o(h)p eop %%Page: 8 8 bop 0 195 a fg(3.0.)30 b(Under)19 b(Mac)o(h)g(3.0)e(with)j(p)q(orts,)f(the)f (time)i(drops)e(to)h(1.88)e(seconds,)j(for)e(an)h(impro)o(v)o(emen)o(t)f(of)0 252 y(only)g(ab)q(out)f(2%.)26 b(Ho)n(w)o(ev)o(er,)17 b(when)h(run)f(under)h (shared)g(memory)-5 b(,)18 b(it)f(tak)o(es)g(only)h(1.10)e(seconds)h(p)r(er)0 308 y(iteration,)e(for)g(a)g(sa)n(vings)h(of)e(ab)r(out)g(42%.)0 451 y fl(5) 69 b(Conclusions)0 553 y fg(Mac)n(h's)13 b(Unix)g(serv)o(er)f(can)h(successfu\ lly)h(em)o(ulate)f(Unix)g(as)f(a)g(user-level)i(application.)20 b(In)13 b(som\ e)f(cases,)0 609 y(p)r(erformance)f(ma)n(y)g(not)g(b)r(e)g(as)h(goo)q(d)g(as) f(with)h(a)f(monolithic)i(Unix)f(system.)18 b(In)12 b(these)g(cases,)g(the)f (Mac)o(h)0 666 y(primitives)17 b(can)f(b)r(e)h(used)g(directly)g(to)f(attac)n (k)g(p)r(erformance)g(b)r(ottlenec)o(ks.)23 b(The)17 b(w)o(ork)f(describ)r (ed)h(in)0 722 y(this)k(pap)q(er)g(demonstrates)e(that)h(p)r(orts)f(and)i(sha\ red)f(memory)g(can)h(b)q(e)g(used)g(b)o(y)f(applications)i(on)0 779 y(Mac)n (h)16 b(3.0)e(to)h(giv)o(e)g(p)q(erformance)g(comparable)h(to)e(or)h(b)r(ette\ r)f(than)h(Mac)o(h)g(2.5.)0 922 y fl(References)0 1023 y fg([Bershad)g(et)g (al.)g(91])22 b(Bershad,)12 b(B.,)g(Anderson,)g(T.,)f(Lazo)o(wsk)m(a,)g(E.,)h (and)f(Levy)m(,)h(H.)h(User-Level)f(In)o(ter-)198 1080 y(pro)q(cess)i(Comm)n (unication)i(for)d(Shared-Memory)h(Multipro)r(cessors.)k fj(A)o(CM)c(T)l(r)n (ansactions)198 1136 y(on)i(Computer)h(Systems)p fg(,)d(9\(2\),)f(Ma)n(y)j (1991.)0 1230 y([Dra)n(v)n(es)g(90])21 b(Dra)n(v)o(es,)i(R.)f(P)l(.)39 b(A)22 b(Revised)i(IPC)e(In)o(terface.)39 b(In)22 b fj(Pr)n(o)n(c)m(e)n(e)n(dings)f (of)i(the)f(First)g(Mach)198 1286 y(USENIX)15 b(Workshop)p fg(,)g(pages)g(101\ {121,)e(Octob)r(er)i(1990.)0 1380 y([Gett)n(ys)g(et)g(al.)g(90])22 b(Gett)n (ys,)12 b(J.,)g(Karlton,)g(P)l(.,)g(and)g(McGregor,)f(S.)k(The)d(X)g(Windo)o (w)g(System,)g(v)n(ersion)198 1437 y(11.)19 b fj(Softwar)n(e)d({)h(Pr)n(actic) m(e)g(and)f(Exp)n(erienc)m(e)p fg(,)e(20\(S2\):35{67,)e(Octob)r(er)j(1990.)0 1530 y([Golub)g(et)g(al.)g(90])22 b(Golub,)d(D.,)e(Dean,)g(R.,)h(F)l(orin,)g (A.,)g(and)f(Rashid,)i(R.)28 b(Unix)18 b(as)f(an)h(Application)198 1587 y(Pro\ gram.)f(In)d fj(Pr)n(o)n(c)n(e)m(e)n(dings)g(of)i(the)f(Summer)h(1990)g(USENI\ X)e(Confer)m(enc)m(e)p fg(,)g(pages)g(87{95,)198 1643 y(June)i(1990.)0 1737 y ([Rashid)g(et)f(al.)g(87])22 b(Rashid,)d(R.,)e(T)l(ev)n(anian,)h(Jr.,)f(A.,)h (Y)l(oung,)f(M.,)g(Golub,)h(D.,)f(Baron,)g(R.,)h(Blac)o(k,)198 1794 y(D.,)f (Bolosky)l(,)h(W.,)e(and)i(Chew,)f(J.)27 b(Mac)n(hine-Indep)t(endent)17 b(Vir\ tual)h(Memory)f(Manage-)198 1850 y(men)o(t)h(for)g(P)n(aged)h(Unipro)r(cessor) f(and)g(Multipro)r(cessor)g(Arc)o(hitectures.)30 b(In)19 b fj(Pr)n(o)n(c)n (e)m(e)n(dings)198 1907 y(of)d(the)g(2nd)g(Symp)n(osium)h(on)e(A)o(r)n(chite) n(ctur)n(al)h(Supp)n(ort)g(for)h(Pr)m(o)n(gr)n(amming)f(L)m(anguages)g(and) 198 1963 y(Op)n(er)m(ating)g(Systems)p fg(,)e(April)j(1987.)p eop %%Trailer end %%EOF