Proposal for Datatype and Request Caching

Nathan E. Doss (doss@ERC.MsState.Edu)
Sat, 10 Jun 1995 01:05:58 -0500 (CDT)

It is by no means complete, but included below are some initial
thoughts on adding caching to datatypes and requests (in addition to
communicators).

-- 
Nathan Doss                  doss@ERC.MsState.Edu

%!PS (but not EPSF; comments have been disabled) %DVIPSCommandLine: dvips caching.dvi -o caching.ps %DVIPSParameters: dpi=600, compressed, comments removed %DVIPSSource: TeX output 1995.06.10:0103 /TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N /X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72 mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1} ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if} forall round exch round exch]setmatrix}N /@landscape{/isls true N}B /@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{ /nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{ /sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0] N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{ 128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N /cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add /gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{ dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1 adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2 idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg} {adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{ adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{] }if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{ cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin 0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict /eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for 65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V {}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail {dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M} B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{ 4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{ p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p a}B /bos{/SS save N}B /eos{SS restore}B end TeXDict begin 40258431 52099146 1000 600 600 (caching.dvi) @start /Fa 62 126 df<003C131E007F137F481480A66C1400A6007E7FA6003E133EA3 003C131E001C131C191977B32C>34 D<010F133C90381F807EA8013F13FE4A5AA4007FB6 12F0B712F8A4003F15F03A007E01F800A5EBFE0301FC5BA6003FB612F0B712F8A46C15F0 3A01F807E000A30003130F01F05BA86C486C5A25337DB22C>I<D807801307D81FE0EB0F 80151F487E486C133F1600007C5CD8FCFC137EEAF87C15FE5D14015DA21403D8FCFC5BEA 7CF8007F13075D383FF00FD81FE05BA23807801FC75B143F92C7FCA25C147E14FE5CA213 015CA213035C13075CA2130F5C131FEC800FED3FC0013FEB7FE0140049EBFFF0017E13F9 A2D9FE0113F801FC13F0A2120113F8120313F015F90007010013F05B000F14FF49EB7FE0 A20007EC3FC06C48EB0F0025417DB92C>37 D<EB0FC0EB3FE0497E497E80EA01F8EBF07C 147E0003133E13E0A5147E147C9138FC3FF89039F0F87FFCEA01F1EBF3F001F7EB3FF891 38E01F009038FFC03F6CEB803EA2EC007E49137C485A486C13FC00075CEBFF01D80FDF5B 381F9F81383F8F8390380FC3E0387E07E75D38FC03F7EB01FF5D6D1410ED007C80A26CEB FF80D87E0113C0D87F03EBE0FC3A3F87F7F1F89038FFE3FF6C01C113F06C13806C903800 7FC0D801FCEB1F8026357EB32C>I<143814FC13011303EB07F8EB0FF0EB1FC0EB3F80EB 7F0013FE485A485A5B12075B120F5B485AA2123F90C7FCA25A127EA312FE5AAC7E127EA3 127F7EA27F121FA26C7E7F12077F12037F6C7E6C7E137FEB3F80EB1FC0EB0FF0EB07F8EB 03FC130113001438164272B92C>40 D<127012FC7E7E6C7E6C7EEA0FE06C7E6C7E6C7E6C 7E137F7F1480131F14C0130FEB07E0A214F01303A214F81301A314FC1300AC130114F8A3 130314F0A2130714E0A2EB0FC0131F1480133F14005B13FE485A485A485A485AEA3FC048 5A48C7FC5A5A1270164279B92C>I<EB0380497EA60020140800F8143E00FE14FE00FF13 C1EBC7C7EBE7CF003FB512F8000F14E0000314806C140038007FFCA248B5FC481480000F 14E0003F14F839FFE7CFFEEBC7C7EB07C100FE13C000F8143E0020140800001400A66D5A 1F247AAA2C>I<EA0F80EA1FE0EA3FF0EA7FF8A213FCA3123F121F120F120013F8A21201 EA03F01207EA1FE0EA7FC0EAFF80130012FC12700E17718A2C>44 D<007FB6FCB71280A46C150021067B9B2C>I<1507ED0F80151FA2153F16005D157E15FE 5D14015D14035DA214075D140F5D141F5D143F92C7FC5C147E14FE5CA213015C13035C13 075C130F5C131F5CA2133F91C8FC5B137E13FE5B12015B12035B12075BA2120F5B121F5B 123F90C9FC5A127E12FE5AA25A127821417BB92C>47 D<EB03F8EB0FFE90383FFF80497F 90B57E3901FE0FF03903F803F848486C7EEBE0004848137EA248487FA248C7EA1F80A200 3E140F007E15C0A3007C140700FC15E0AC6C140F007E15C0A46CEC1F80A36C6CEB3F00A2 6C6C137E6D13FE00075CEBF0016C6C485A3901FE0FF06CB55A6D5B6D5BD90FFEC7FCEB03 F823357CB32C>I<1307497EA2131FA2133F137F13FF5A1207127FB5FC13DF139FEA7C1F 1200B3AE007FB512E0B612F0A36C14E01C3477B32C>I<EB0FF890387FFF8048B512E000 07804814FC391FF80FFE393FE001FF903880007F48C7EA3F80007E141F00FE15C0150F6C 15E01507A3127E123CC8FCA2150F16C0151F1680153F16005D15FE4A5A14034A5A4A5A4A 5A4A5AECFF804948C7FC495A495A495AEB3FE0EB7F8049C8FC485A4848EB03C04848EB07 E0EA1FE0485A48B6FCB7FCA36C15C023347CB32C>I<121FEA3F80EA7FC0EAFFE0A5EA7F C0EA3F80EA1F00C7FCAE121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F000B2470A32C >58 D<EA0F80EA1FC0EA3FE0EA7FF0A5EA3FE0EA1FC0EA0F80C7FCAEEA0F80EA1FC0EA3F E0127F13F0A4123F121F120F1201120313E01207EA0FC0A2EA3F80EA7F005A5A12F81270 0C3071A32C>I<003FB612E04815F0B712F8A36C15F0CAFCA8007FB612F0B712F8A36C15 F06C15E025147DA22C>61 D<127012FC7E6C7E13E06C7EEA1FFC6C7E3803FF80C67FEB7F F0EB1FF8EB0FFEEB03FF6D13C06D6C7EEC3FF8EC0FFC6EB4FC0201138080A25C02071300 EC0FFCEC3FF8EC7FE049485A4990C7FCEB0FFEEB1FF8EB7FF0EBFFC000035BD80FFEC8FC 485AEA7FF0485A138048C9FC5A1270212A7BAD2C>I<02FF13700107EBE0F84913F9013F 13FD4913FFEBFF813901FE007F4848131FD807F0130F1507485A491303485A150148C7FC A25A007EEC00F01600A212FE5AAB7E127EA3007F15F06CEC01F8A26C7EA26C6C13036D14 F06C6C130716E0D803FC131F6C6CEB3FC03A00FF81FF806DB512006D5B010F5B6D13F001 00138025357DB32C>67 D<007FB5FCB612C015F0816C803907E003FEEC00FFED7F80153F ED1FC0ED0FE0A2150716F0150316F81501A4ED00FCACED01F8A3150316F0A2150716E015 0FED1FC0153FED7F80EDFF00EC03FE007FB55AB65A5D15C06C91C7FC26337EB22C>I<00 7FB612F0B712F8A37E3903F00001A7ED00F01600A4EC01E04A7EA490B5FCA5EBF003A46E 5A91C8FCA5163C167EA8007FB612FEB7FCA36C15FC27337EB22C>I<007FB612F8B712FC A37ED803F0C7FCA716781600A515F04A7EA490B5FCA5EBF001A46E5A92C7FCAD387FFFE0 B5FC805C7E26337EB22C>I<007FB512F8B612FCA36C14F839000FC000B3B3A5007FB512 F8B612FCA36C14F81E3379B22C>73 D<D87FFCEB7FF8486CEBFFFCA36C48EB7FF8D807C0 EB1F80153FED7F00157E5D4A5A14034A5A5D4A5A4A5A143F4AC7FC147E5CEBC1F813C3EB C7FCA2EBCFFEEBDFBEEBFFBF141F01FE7F496C7E13F86E7EEBF00301E07FEBC001816E7E A2157E153E153F811680ED0FC0A2ED07E0D87FFCEB1FFC486CEB3FFEA36C48EB1FFC2733 7EB22C>75 D<387FFFE0B57EA36C5BD803F0C8FCB3AE16F0ED01F8A8007FB6FCB7FCA36C 15F025337DB22C>I<D87FE0EB0FFC486CEB1FFEA26D133F007F15FC000F15E001BC137B A4019E13F3A3EB9F01A2018F13E3A21483A2018713C314C7A201831383A214EFA2018113 03A214FFEB80FEA3147C14381400ACD87FF0EB1FFC486CEB3FFEA36C48EB1FFC27337EB2 2C>I<D87FF0EB7FFC486CEBFFFEA27F007FEC7FFCD807FEEB07C013DEA213DF13CFA214 8013C714C0A213C314E0A213C114F0A213C014F8A2147CA3143EA2141E141FA2140F1587 A2140715C7A2140315E71401A215F71400A215FFD87FFC137F487E153FA26C48EB1F8027 337EB22C>I<EB7FFF0003B512E0000F14F848804880EBE003EB800048C7127FA2007E80 A300FE158048141FB3A86C143FA2007E1500A3007F5CA26C6C13FEEBF00790B5FC6C5C6C 5C000314E0C66C90C7FC21357BB32C>I<007FB512C0B612F88115FF6C15802603F00013 C0153FED0FE0ED07F0A2150316F81501A6150316F01507A2ED0FE0ED3FC015FF90B61280 160015FC5D15C001F0C8FCB0387FFF80B57EA36C5B25337EB22C>I<387FFFFCB67E15E0 15F86C803907E007FE1401EC007F6F7E151FA26F7EA64B5AA2153F4BC7FCEC01FE140790 B55A5D15E081819038E007FCEC01FE1400157F81A8160FEE1F80A5D87FFEEB1FBFB5ECFF 00815E6C486D5AC8EA01F029347EB22C>82 D<90381FF80790B5EA0F804814CF000714FF 5A381FF01F383FC003497E48C7FC007E147F00FE143F5A151FA46CEC0F00007E91C7FC12 7F7FEA3FE0EA1FFCEBFFC06C13FC0003EBFFC06C14F06C6C7F01077F9038007FFEEC07FF 02001380153FED1FC0A2ED0FE0A20078140712FCA56CEC0FC0A26CEC1F806D133F01E0EB 7F009038FE01FF90B55A5D00F914F0D8F83F13C0D8700790C7FC23357CB32C>I<007FB6 12FCB712FEA43AFC007E007EA70078153CC71400B3AF90383FFFFCA2497F6D5BA227337E B22C>I<3B7FFF803FFFC0B56C4813E0A36C496C13C03B03F00001F800B3AF6D13030001 5DA26D130700005D6D130F017F495A6D6C485AECE0FF6DB5C7FC6D5B010313F86D5B9038 003F802B3480B22C>I<D87FF0EB07FF486C491380A36C486D1300001FC8127CA46C6C5C A76C6C495AA4143E147FA33A03E0FF83E0A214F7A201E113C3A3000101E35BA201F113C7 01F313E7A314C1A200005DA201F713F71480A301FF13FF017F91C7FC4A7EA4013E133E29 347FB22C>87 D<D87FFCEB7FFC486CEBFFFEA36C48EB7FFCD807F0EB0FC0151F00031580 6D133F12016DEB7F0012006D137E017E13FE017F5BEB3F01EC81F8131FEC83F0EB0FC314 C7903807E7E0A201035B14EF6DB45AA292C7FC7F5C147EB0903807FFE0497FA36D5B2733 7EB22C>89 D<127812F87EA27E127E127F7E7F121F7F120F7F1207A27F12037F12017F12 007F137E137F7F80131FA280130F801307801303801301801300A280147E147F8081141F 81140F811407811403A281140181140081157E157F811680151FA2150FED070021417BB9 2C>92 D<007FB6FCB71280A46C150021067B7D2C>95 D<3801FFF0000713FE001F6D7E15 E048809038C01FF81407EC01FC381F80000006C77EC8127EA3ECFFFE131F90B5FC120312 0F48EB807E383FF800EA7FC090C7FC12FE5AA47E007F14FEEB8003383FE01F6CB612FC6C 15FE6C14BF0001EBFE1F3A003FF007FC27247CA32C>97 D<EA7FF0487EA3127F1201AAEC 1FE0ECFFF801FB13FE90B6FC16809138F07FC09138801FE091380007F049EB03F85BED01 FC491300A216FE167EA816FE6D14FCA2ED01F86D13036DEB07F0150F9138801FE09138E0 7FC091B51280160001FB5B01F813F83900F03FC027337FB22C>I<903803FFE0011F13F8 017F13FE48B5FC48804848C6FCEA0FF0485A49137E4848131890C9FC5A127EA25AA8127E A2127F6C140F6DEB1F806C7E6D133F6C6CEB7F003907FE03FF6CB55A6C5C6C6C5B011F13 E0010390C7FC21247AA32C>I<EC0FFE4A7EA380EC003FAAEB07F8EB3FFE90B512BF4814 FF5A3807FC0F380FF00348487E497E48487F90C7FC007E80A212FE5AA87E007E5CA2007F 5C6C7E5C6C6C5A380FF0073807FC1F6CB612FC6CECBFFE6C143FEB3FFC90390FF01FFC27 337DB22C>I<EB03FE90381FFFC0017F13F048B57E48803907FE03FE390FF800FFD81FE0 EB3F805B4848EB1FC090C7120F5A007E15E015075AB7FCA416C000FCC9FC7E127EA2127F 6CEC03C06DEB07E06C7ED80FF0130F6C6CEB3FC001FF13FF000190B512806C1500013F13 FC010F13F00101138023247CA32C>I<EC0FF8EC3FFE91B5FC4914805B903807FC7F14F0 90390FE03F0014C092C7FCA6007FB512FEB7FCA36C5C26000FC0C7FCB3A8003FB512F048 80A36C5C21337DB22C>I<ED03F8903907F80FFC90391FFE3FFE017FB6FC48B7FC48ECFE 7F9038FC0FF82607F003133E3A0FE001FC1CD9C0001300001F8049137EA66D13FE000F5C EBE0016C6C485A3903FC0FF048B5FC5D481480D99FFEC7FCEB87F80180C8FCA37F6C7E90 B512F06C14FE48ECFF804815E04815F03A3FC0001FF848C7EA03FC007E1400007C157C00 FC157E48153EA46C157E007E15FCD87F801303D83FE0EB0FF8D81FFCEB7FF06CB612E000 0315806C1500D8003F13F8010713C028387EA42C>I<EA7FF0487EA3127F1201AAEC1FE0 EC7FFC9038F9FFFE01FB7F90B6FC9138F03F80ECC01F02807FEC000F5B5BA25BB3267FFF E0B5FCB500F11480A36C01E0140029337FB22C>I<1307EB1FC0A2497EA36D5AA20107C7 FC90C8FCA7387FFFC080B5FC7EA2EA0007B3A8007FB512FCB612FEA36C14FC1F3479B32C >I<EA7FE0487EA3127F1201AA91381FFFF04A13F8A36E13F0913800FE004A5A4A5A4A5A 4A5A4A5A4A5A4AC7FC14FEEBF1FC13F3EBF7FE90B5FCA2EC9F80EC0FC001FE7FEBFC0749 6C7E496C7E811400157E811680151F3A7FFFC0FFFCB500E113FEA36C01C013FC27337EB2 2C>107 D<387FFFE0B57EA37EEA0003B3B3A5007FB61280B712C0A36C158022337BB22C> I<3A7F83F007E09039CFFC1FF83AFFDFFE3FFCD87FFF13FF91B57E3A07FE1FFC3E01FCEB F83F496C487E01F013E001E013C0A301C01380B33B7FFC3FF87FF0027F13FFD8FFFE6D13 F8D87FFC4913F0023F137F2D2481A32C>I<397FF01FE039FFF87FFC9038F9FFFE01FB7F 6CB6FC00019038F03F80ECC01F02807FEC000F5B5BA25BB3267FFFE0B5FCB500F11480A3 6C01E0140029247FA32C>I<EB07FCEB1FFF017F13C048B512F048803907FC07FC390FF0 01FE48486C7E0180133F003F158090C7121F007EEC0FC0A348EC07E0A76C140F007E15C0 A2007F141F6C15806D133F6C6CEB7F006D5B6C6C485A3907FC07FC6CB55A6C5C6C6C13C0 011F90C7FCEB07FC23247CA32C>I<397FF01FE039FFF8FFF801FB13FE90B6FC6C158000 019038F07FC09138801FE091380007F049EB03F85BED01FC491300A216FE167EA816FE6D 14FCA2ED01F86D13036DEB07F0150F9138801FE09138E07FC091B51280160001FB5B01F8 13F8EC3FC091C8FCAD387FFFE0B57EA36C5B27367FA32C>I<903903FC078090391FFF0F C0017F13CF48B512EF4814FF3807FE07380FF00148487E49137F4848133F90C7FC48141F 127E150F5AA87E007E141FA26C143F7F6C6C137F6D13FF380FF0033807FC0F6CB6FC6C14 EF6C6C138F6D130FEB07F890C7FCAD0203B5FC4A1480A36E140029367DA32C>I<D87FFE EB3FC0B53801FFF0020713F8021F13FC6C5B39003F7FE1ECFF019138FC00F84A13704A13 005CA25C5CA391C8FCAF007FB512E0B67EA36C5C26247EA32C>I<90387FF8700003B512 F8120F5A5A387FC00F387E00034813015AA36CEB00F0007F140013F0383FFFC06C13FE6C EBFF80000314E0C66C13F8010113FCEB0007EC00FE0078147F00FC143F151F7EA26C143F 6D133E6D13FE9038F007FC90B5FC15F815E000F8148039701FFC0020247AA32C>I<131E 133FA9007FB6FCB71280A36C1500D8003FC8FCB1ED03C0ED07E0A5EC800F011FEB1FC0EC E07F6DB51280160001035B6D13F89038003FE0232E7EAD2C>I<3A7FF003FF80486C487F A3007F7F0001EB000FB3A3151FA2153F6D137F3900FE03FF90B7FC6D15807F6D13CF9026 03FE07130029247FA32C>I<3A7FFF01FFFCB514FE148314016C15FC3A03E0000F80A26D 131F00011500A26D5B0000143EA26D137E017C137CA2017E13FC013E5BA2EB3F01011F5B A21483010F5BA214C701075BA214EF01035BA214FF6D90C7FCA26D5A147C27247EA32C> I<3A3FFF03FFF048018713F8A36C010313F03A00FC007E005D90387E01F8013F5BEB1F83 EC87E090380FCFC0903807EF80EB03FF6D90C7FC5C6D5A147C14FE130180903803EF8090 3807CFC0EB0FC7EC83E090381F01F0013F7FEB7E00017C137C49137E0001803A7FFF01FF FC1483B514FE6C15FC140127247EA32C>120 D<3A7FFF01FFFCB5008113FE148314816C 010113FC3A03E0000F806C7E151F6D140012005D6D133E137C017E137E013E137CA2013F 13FC6D5BA2EB0F815DA2EB07C1ECC3E0A2EB03E3ECE7C0130114F75DEB00FFA292C7FC80 A2143EA2147E147CA214FC5CA2EA0C01003F5BEA7F83EB87E0EA7E0F495A387FFF806C90 C8FC6C5A6C5AEA07E027367EA32C>I<003FB612E04815F0A4007EC7EA1FE0ED3FC0ED7F 80EDFF004A5A003C495AC7485A4A5A4A5A4A5A4A5A4AC7FCEB01FC495AEB0FF0495A495A 495A49C8FC4848EB01E04848EB03F0485A485A485A485A485AB7FCA46C15E024247DA32C >I<15FF02071380141F147F91B512004913C04AC7FCEB03F85CB31307EB1FE013FF007F 5BB55A49C8FC6D7E6C7FC67F131FEB07F01303B380EB01FEECFFC06D13FF6E1380141F14 070200130021417BB92C>I<EA7FC0EAFFF813FE6D7E6C7FC67F131FEB07F01303B380EB 01FEECFFC06D13FF6E1380141F147F91B512004913C04AC7FCEB03F85CB31307EB1FE013 FF007F5BB55A49C8FC13F8EA7FC021417BB92C>125 D E /Fb 9 118 df<14F8EB07FE90381F871C90383E03FE137CEBF801120148486C5A485A120FEBC0 01001F5CA2EA3F801403007F5C1300A21407485C5AA2140F5D48ECC1C0A2141F15831680 143F1587007C017F1300ECFF076C485B9038038F8E391F0F079E3907FE03FC3901F000F0 222677A42A>97 D<ED01F815FFA3150316F0A21507A216E0A2150FA216C0A2151FA21680 A2153FA202F81300EB07FE90381F877F90383E03FF017C5BEBF80112013803F00048485B 120FEBC001121F5DEA3F801403127F01005BA214075A485CA2140FA248ECC1C0A2141F15 C3ED8380143F1587007C017F1300ECFF076C485B9038038F8E391F0F079E3907FE03FC39 01F000F0253B77B92A>100 D<147F903803FFC090380FC1E090383F00F0017E13785B48 5A485A485A120F4913F8001F14F0383F8001EC07E0EC1F80397F81FF00EBFFF891C7FC90 C8FC5A5AA55AA21530007C14381578007E14F0003EEB01E0EC03C06CEB0F806CEB3E0038 0781F83803FFE0C690C7FC1D2677A426>I<EC07C0EC3FF09138FC38E0903901F01FF0EB 03E0903807C00FEB0F80011F1307D93F0013E05B017E130F13FE4914C01201151F120349 1480A2153F1207491400A25DA249137EA215FEA25D00031301140314076C6C485A000013 1FEB787BEB3FF390380FC3F0EB00031407A25DA2140F5D121C007E131F5D00FE49C7FC14 7E5C387801F8387C07E0381FFF80D803FEC8FC24367CA426>103 D<EB0FC0EA07FFA3EA001F1480A2133FA21400A25BA2137EA213FEA25BA21201A25BA212 03A25BA21207A25BA2120FA25BA2121FA25BA2123FA290C7FCA25AA2EA7E0EA212FE131E EAFC1CA2133C133812F81378EA7870EA7CE0121FEA0F80123B79B915>108 D<9039078007C090391FE03FF090393CF0787C903938F8E03E9038787FC00170497EECFF 00D9F0FE148013E05CEA01E113C15CA2D80003143FA25CA20107147FA24A1400A2010F5C 5E5C4B5A131F5EEC80035E013F495A6E485A5E6E48C7FC017F133EEC70FC90387E3FF0EC 0F8001FEC9FCA25BA21201A25BA21203A25B1207B512C0A3293580A42A>112 D<3903C003F0390FF01FFC391E783C0F381C7C703A3C3EE03F8038383FC0EB7F80007815 0000701300151CD8F07E90C7FCEAE0FE5BA2120012015BA312035BA312075BA3120F5BA3 121F5BA3123F90C9FC120E212679A423>114 D<EB0380EB07C0130FA4131F1480A3133F 1400A35B137E007FB5FCA2B6FC3800FC00A312015BA312035BA312075BA3120F5BA3121F EB801CA2143C003F1338EB0078147014F014E0EB01C0EA3E03381F0780380F0F00EA07FC EA01F0183579B31C>116 D<13F8D803FEEB01C0D8078FEB03E0390E0F8007121E121C00 38140F131F007815C01270013F131F00F0130000E015805BD8007E133FA201FE14005B5D 120149137EA215FE120349EBFC0EA20201131E161C15F813E0163CD9F003133814070001 ECF07091381EF8F03A00F83C78E090393FF03FC090390FC00F00272679A42D>I E /Fc 22 121 df<EA07C0EA1FF0EA3FF8EA7FFCEAFFFEA7EA7FFCEA3FF8EA1FF0EA07C0 0F0F788E1F>46 D<EC03C01407141F147FEB03FF133FB6FCA413C3EA0003B3B3ADB712FC A5264177C038>49 D<ECFFE0010F13FE013F6D7E90B612E0000315F82607FC0313FE3A0F E0007FFFD81F806D138048C7000F13C0488001C015E001F07F00FF6E13F07F17F881A46C 5A6C5A6C5AC9FC17F05DA217E05D17C04B13804B1300A2ED1FFC4B5A5E4B5A4B5A4A90C7 FC4A5A4A5AEC0FF04A5AEC3F804AC7127814FE495A494814F8D907E014F0495A495A49C8 FC017C140149140348B7FC4816E05A5A5A5A5AB8FC17C0A42D417BC038>I<ECFFF00107 13FF011F14C0017F14F049C66C7ED803F8EB3FFED807E06D7E81D80FF86D138013FE001F 16C07FA66C5A6C4815806C485BC814005D5E4B5A4B5A4B5A4A5B020F1380902607FFFEC7 FC15F815FF16C090C713F0ED3FFCED0FFEEEFF80816F13C017E0A26F13F0A217F8A3EA0F C0EA3FF0487EA2487EA217F0A25D17E06C5A494913C05BD83F80491380D81FF0491300D8 0FFEEBFFFE6CB612F800015D6C6C14C0011F49C7FC010113E02D427BC038>I<BA12F8A4 85D8001F90C71201EF003F180F180318011800A2197E193EA3191EA21778A285A405F890 C7FCA316011603161F92B5FCA5ED001F160316011600A2F101E01778A2F103C0A494C7FC 1907A21A80A2190FA2191FA2193FF17F0061601807181F4DB5FCBBFC61A443447DC34A> 69 D<BA1280A419C026003FFEC7121F1701EF007F183F181F180F180719E01803A31801 A3EE01E0F000F0A419001603A31607160F167F91B6FCA59138FE007F160F16071603A316 01A693C9FCAFB712F0A53C447CC346>I<B9FC18F018FE727E19E0D8001F90C7000F7F05 017F716C7E727E727E721380A21AC084A21AE0A91AC0A24E1380A21A00604E5A4E5A4D48 5A050F5B92B712C096C7FC18FC18C092CBFCB3A7B712E0A543447DC34D>80 D<903801FFE0011F13FE017F6D7E48B612E03A03FE007FF84848EB1FFC6D6D7E486C6D7E A26F7FA36F7F6C5A6C5AEA00F090C7FCA40203B5FC91B6FC1307013F13F19038FFFC0100 0313E0000F1380381FFE00485A5B127F5B12FF5BA35DA26D5B6C6C5B4B13F0D83FFE013E EBFFC03A1FFF80FC7F0007EBFFF86CECE01FC66CEB8007D90FFCC9FC322F7DAD36>97 D<EB7FC0B5FCA512037EB1ED0FF892B57E02C314E002CF14F89139DFC03FFC9139FF000F FE02FCEB03FF4A6D13804A15C04A6D13E05CEF7FF0A218F8173FA318FCAC18F8A2177F18 F0A3EFFFE06E15C06E5B6E491380027C491300496C495A903AFC1FC07FFC496CB512F0D9 F00314C049C691C7FCC8EA1FF036467DC43E>I<EC3FFC49B512C0010F14F0013F14FC90 397FF003FE9039FFC001FF0003495A48494813805B120F485AA2485A6F1300007F6E5AED 00784991C7FCA212FFAC6C7EA3123F6DEC03C0A26C6C1407000F16806D140F6C6DEB1F00 6C6D133E6C01F05B3A007FFC03F86DB55A010F14C0010391C7FC9038003FF82A2F7CAD32 >I<EC3FF80103B57E010F14E0013F8090397FF83FF89039FFC007FC48496C7E48496C7E 48486D1380485A001FED7FC05B003FED3FE0A2127F5B17F0161F12FFA290B7FCA401F0C9 FCA5127FA27FA2123F17F06C7E16016C6C15E06C6C14036C6DEB07C06C6DEB0F806C01F0 EB3F0090397FFE01FE011FB55A010714F0010114C09026001FFEC7FC2C2F7DAD33>101 D<137C48B4FC4813804813C0A24813E0A56C13C0A26C13806C1300EA007C90C7FCAAEB7F C0EA7FFFA512037EB3AFB6FCA518467CC520>105 D<EB7FC0B5FCA512037EB3B3B3A3B6 1280A519457CC420>108 D<90277F8007FEEC0FFCB590263FFFC090387FFF8092B5D8F0 01B512E002816E4880913D87F01FFC0FE03FF8913D8FC00FFE1F801FFC0003D99F009026 FF3E007F6C019E6D013C130F02BC5D02F86D496D7EA24A5D4A5DA34A5DB3A7B60081B600 03B512FEA5572D7CAC5E>I<90397F8007FEB590383FFF8092B512E0028114F8913987F0 3FFC91388F801F000390399F000FFE6C139E14BC02F86D7E5CA25CA35CB3A7B60083B512 FEA5372D7CAC3E>I<EC1FFC49B512C0010714F0011F14FC90397FF80FFF9026FFC0017F 48496C7F4848C7EA3FE000078248486E7E49140F001F82A2003F82491407007F82A400FF 1780AA007F1700A46C6C4A5AA2001F5E6D141F000F5E6C6C4A5AA26C6C6CEBFFE06C6D48 5B27007FF80F90C7FC6DB55A010F14F8010114C09026001FFCC8FC312F7DAD38>I<9039 7FC00FF8B590B57E02C314E002CF14F89139DFC03FFC9139FF001FFE000301FCEB07FF6C 496D13804A15C04A6D13E05C7013F0A2EF7FF8A4EF3FFCACEF7FF8A318F017FFA24C13E0 6E15C06E5B6E4913806E4913006E495A9139DFC07FFC02CFB512F002C314C002C091C7FC ED1FF092C9FCADB67EA536407DAC3E>I<90387F807FB53881FFE0028313F0028F13F8ED 8FFC91389F1FFE000313BE6C13BC14F8A214F0ED0FFC9138E007F8ED01E092C7FCA35CB3 A5B612E0A5272D7DAC2E>114 D<90391FFC038090B51287000314FF120F381FF003383F C00049133F48C7121F127E00FE140FA215077EA27F01E090C7FC13FE387FFFF014FF6C14 C015F06C14FC6C800003806C15806C7E010F14C0EB003F020313E0140000F0143FA26C14 1F150FA27EA26C15C06C141FA26DEB3F8001E0EB7F009038F803FE90B55A00FC5CD8F03F 13E026E007FEC7FC232F7CAD2C>I<EB01E0A51303A41307A2130FA2131FA2133F137F13 FF1203000F90B51280B7FCA4C601E0C7FCB3A3ED01E0A9150302F013C0137F150790393F F80F8090391FFC1F006DB5FC6D13FC01015B9038003FE023407EBE2C>I<D97FC049B4FC B50103B5FCA50003EC000F6C81B3A85EA25EA25E7E6E491380017FD901F713FE9138F807 E76DB512C7010F1407010313FE9026007FF0EBFC00372E7CAC3E>I<B500FE90383FFFF0 A5C601F0903803E0006D6C495A013F4A5A6D6C49C7FC6E5B6D6C137E6DEB807C6D6D5A6D EBC1F0EDE3E06DEBF7C06EB45A806E90C8FC5D6E7E6E7F6E7FA24A7F4A7F8291381F3FFC EC3E1F027C7F4A6C7E49486C7F01036D7F49487E02C08049486C7F49C76C7E013E6E7E01 7E141FB500E090B512FCA5362C7EAB3B>120 D E /Fd 41 122 df<DA0FF813FC91397F FF07FF903B01F807DF83C0903A07E001FF0F903B1F8007FE1FE090393F000FFC137E16F8 5B9338F007804848010790C7FC1503ACB812F8A32801F80003F0C7FCB3AB486C497E267F FFE0B512F0A3333B7FBA30>11 D<EC0FF8EC7FFE903901F80780903907E001C090391F80 00E090383F0007017E497EA25BA2485A6F5AED018092C8FCA9ED03F0B7FCA33901F8000F 1503B3AA486C497E267FFFE0B512C0A32A3B7FBA2E>I<001C131C007F137F39FF80FF80 A26D13C0A3007F137F001C131C00001300A40001130101801380A2000313030100130048 5B00061306000E130E485B485B485B006013601A197DB92A>34 D<121C127FEAFF80A213 C0A3127F121C1200A412011380A2120313005A1206120E5A5A5A12600A1979B917>39 D<121C127FEAFF80A213C0A3127F121C1200A412011380A2120313005A1206120E5A5A5A 12600A19798817>44 D<121C127FEAFF80A5EA7F00121C0909798817>46 D<150C151E153EA2153C157CA2157815F8A215F01401A215E01403A215C01407A2158014 0FA215005CA2141E143EA2143C147CA2147814F8A25C1301A25C1303A2495AA25C130FA2 91C7FC5BA2131E133EA2133C137CA2137813F8A25B1201A25B1203A25B1207A25B120FA2 90C8FC5AA2121E123EA2123C127CA2127812F8A25A12601F537BBD2A>I<EB01C0130313 07131F13FFB5FCA2131F1200B3B3A8497E007FB512F0A31C3879B72A>49 D<EB0FF0EB7FFE48B57E3903E03FE0390F000FF0000E6D7E486D7E486D7E123000706D7E 126012FCB4EC7F807FA56CC7FC121CC8FCEDFF00A34A5A5D14035D4A5A5D140F4A5A4A5A 92C7FC147C5C495A495A495A495A91C8FC011EEB01805B5B49130348481400485A485A00 0EC75A000FB6FC5A5A485CB6FCA321387CB72A>I<1538A3157CA315FEA34A7EA34A6C7E A202077FEC063FA2020E7FEC0C1FA2021C7FEC180FA202387FEC3007A202707FEC6003A2 02C07F1501A2D901807F81A249C77F167FA20106810107B6FCA24981010CC7121FA2496E 7EA3496E7EA3496E7EA213E0707E1201486C81D80FFC02071380B56C90B512FEA3373C7D BB3E>65 D<913A01FF800180020FEBE003027F13F8903A01FF807E07903A03FC000F0FD9 0FF0EB039F4948EB01DFD93F80EB00FF49C8127F01FE153F12014848151F4848150FA248 481507A2485A1703123F5B007F1601A35B00FF93C7FCAD127F6DED0180A3123F7F001F16 0318006C7E5F6C7E17066C6C150E6C6C5D00001618017F15386D6C5CD91FE05C6D6CEB03 C0D903FCEB0F80902701FF803FC7FC9039007FFFFC020F13F002011380313D7BBA3C>67 D<B612C0A3C6EBC0006D5AB3B3AD497EB612C0A31A397EB81E>73 D<B5933807FFF86E5DA20001F0FC002600DFC0ED1BF8A2D9CFE01533A3D9C7F01563A3D9 C3F815C3A2D9C1FCEC0183A3D9C0FEEC0303A2027F1406A36E6C130CA36E6C1318A26E6C 1330A36E6C1360A26E6C13C0A3913901FC0180A3913900FE0300A2ED7F06A3ED3F8CA2ED 1FD8A3ED0FF0A3486C6D5A487ED80FFC6D48497EB500C00203B512F8A2ED018045397DB8 4C>77 D<B712C016F816FE000190398001FF806C90C7EA3FC0EE0FE0EE07F0EE03F817FC 17FE1601A217FFA717FEA2EE03FCA2EE07F817F0EE0FE0EE3FC0923801FF0091B512FC16 F091C9FCB3A5487FB6FCA330397DB839>80 D<003FB812E0A3D9C003EB001F273E0001FE 130348EE01F00078160000701770A300601730A400E01738481718A4C71600B3B0913807 FF80011FB612E0A335397DB83C>84 D<B5D8FC07B5D8F001B5FCA30007902780001FFEC7 EA1FF86C48C7D80FF8EC07E000010307ED03C01B807F6C6F6C1500A26E5F017F6E6C1406 A280013F4A6C5CA280011F4A6D5BEE067FA26D6C010E6D5BEE0C3FA26D6C011C6D5BEE18 1FA26D6C6F5BEE300FA26D6C6F485AEE6007A26D6C4CC7FC9338C003FCA203805D913B7F 818001FE06A203C1150EDA3FC3C7EAFF0CA203E3151CDA1FE6EC7F98A215F6DA0FFCEC3F F0A302075E4B141FA202035E4B140FA202015E4B1407A2020093C8FC4B80503B7EB855> 87 D<3901800180000313033907000700000E130E485B00181318003813380030133000 70137000601360A200E013E0485BA400CE13CE39FF80FF806D13C0A3007F137FA2393F80 3F80390E000E001A1974B92A>92 D<EB1FE0EBFFFC3803E03F3907000F80390F8007E048 6C6C7E13E06E7EA26E7E6C5A6C5AC8FCA4147FEB07FFEB3FE0EBFE00EA03F8EA0FF0EA1F C0123F485A90C7FC160C12FEA31401A26C13036CEB077C903980063E18383FC01E3A0FE0 781FF03A03FFF00FE03A007F8007C026277DA52A>97 D<EA03F012FFA3120F1203B0EC1F E0EC7FF89038F1E03E9039F3801F809039F7000FC001FEEB07E049EB03F049EB01F85BED 00FCA216FEA2167E167FAA167E16FEA216FC15016D14F8ED03F07F01EEEB07E001C6EB0F C09039C7801F00903881E07E903800FFF8C7EA1FC0283B7EB92E>I<EB03FC90381FFF80 90387E03E03901F80070484813F83907E001FC380FC003A2EA1F80123F90380001F848EB 00F01500A2127E12FEAA127E127FA26C14067F001F140E6D130C000F141C6C6C13386C6C 13706C6C13E039007C07C090381FFF00EB07F81F277DA525>I<ED0FC0EC03FFA3EC003F 150FB0EB03F8EB1FFF90387E078F9038F801EF3903F0007F4848133F4848131FA2484813 0F123F90C7FC5AA2127E12FEAA127E127FA27EA26C6C131FA26C6C133F6C6C137F6C6CEB EFF03A01F801CFFF39007C078F90381FFE0FD907F813C0283B7DB92E>I<EB07F8EB1FFF 90387C0FC03901F803E03903F001F0D807E013F8380FC0004848137CA248C7127E153E5A 153F127E12FEA3B7FCA248C8FCA5127EA2127FA26C14037F001F14076C6C13060007140E 6D131CD801F013386C6C137090387E03E090381FFF80903803FC0020277EA525>I<147E 903803FF8090380FC1E0EB1F8790383F0FF0137EA213FCA23901F803C091C7FCADB512FC A3D801F8C7FCB3AB487E387FFFF8A31C3B7FBA19>I<ED03F090390FF00FF890393FFC3C 3C9039F81F707C3901F00FE03903E007C03A07C003E010000FECF000A248486C7EA86C6C 485AA200075C6C6C485A6D485A6D48C7FC38073FFC38060FF0000EC9FCA4120FA213C06C B512C015F86C14FE6CECFF804815C03A0F80007FE048C7EA0FF0003E140348140116F848 1400A56C1401007C15F06CEC03E0003F1407D80F80EB0F80D807E0EB3F003901FC01FC39 007FFFF0010790C7FC26387EA52A>I<EA03F012FFA3120F1203B0EC0FF0EC3FFCECF03F 9039F1C01F809039F3800FC0EBF70013FE496D7EA25BA35BB3A3486C497EB500C1B51280 A3293A7EB92E>I<EA0380EA0FE0487EA56C5AEA0380C8FCAAEA03F012FFA312071203B3 AA487EB512C0A312387EB717>I<EA03F012FFA3120F1203B1913801FFFCA39138007FC0 1600157C15705D4A5A4A5A4AC7FC141E1438147814FC13F1EBF3FEEBF73F01FE7FEBF81F 496C7E8114076E7E6E7E811400157E157F811680ED1FC0486CEB3FF0B500C0B5FCA3283A 7EB92C>107 D<EA03F012FFA3120F1203B3B3AD487EB512C0A3123A7EB917>I<2703F00F F0EB1FE000FFD93FFCEB7FF8913AF03F01E07E903BF1C01F83803F3D0FF3800FC7001F80 2603F70013CE01FE14DC49D907F8EB0FC0A2495CA3495CB3A3486C496CEB1FE0B500C1B5 0083B5FCA340257EA445>I<3903F00FF000FFEB3FFCECF03F9039F1C01F803A0FF3800F C03803F70013FE496D7EA25BA35BB3A3486C497EB500C1B51280A329257EA42E>I<EB03 FE90380FFF8090383E03E09038F800F84848137C48487F48487F4848EB0F80001F15C090 C712074815E0A2007EEC03F0A400FE15F8A9007E15F0A2007F14076C15E0A26C6CEB0FC0 000F15806D131F6C6CEB3F006C6C137EC66C13F890387E03F090381FFFC0D903FEC7FC25 277EA52A>I<3903F01FE000FFEB7FF89038F1E07E9039F3801F803A07F7000FC0D803FE EB07E049EB03F04914F849130116FC150016FEA3167FAA16FEA3ED01FCA26DEB03F816F0 6D13076DEB0FE001F614C09039F7803F009038F1E07E9038F0FFF8EC1FC091C8FCAB487E B512C0A328357EA42E>I<D903F813C090381FFE0190387E07819038FC01C33903F000E3 000714774848133749133F001F141F485A150F48C7FCA312FEAA127FA37E6D131F121F6D 133F120F6C6C137F6C6C13EF3901F801CF39007E078F90381FFE0FEB07F890C7FCABED1F E00203B5FCA328357DA42C>I<3807E01F00FFEB7FC09038E1E3E09038E387F0380FE707 EA03E613EE9038EC03E09038FC0080491300A45BB3A2487EB512F0A31C257EA421>I<EB FF03000313E7380F80FF381E003F487F487F00707F12F0A2807EA27EB490C7FCEA7FE013 FF6C13E06C13F86C7F00037FC67F01071380EB007F141F00C0EB0FC01407A26C1303A37E 15806C13077EEC0F00B4131E38F3C07C38E1FFF038C03F801A277DA521>I<1318A51338 A31378A313F8120112031207001FB5FCB6FCA2D801F8C7FCB215C0A93800FC011580EB7C 03017E13006D5AEB0FFEEB01F81A347FB220>I<D803F0EB07E000FFEB01FFA3000FEB00 1F00031407B3A4150FA3151F12016D133F0000EC77F86D9038E7FF8090383F03C790381F FF87903A03FC07E00029267EA42E>I<B538803FFEA33A0FF8000FF06C48EB07E00003EC 03C06D148000011500A26C6C1306A26D130E017E130CA26D5BA2EC8038011F1330A26D6C 5AA214E001075BA2903803F180A3D901FBC7FCA214FF6D5AA2147CA31438A227257EA32C >I<B53A1FFFE03FFEA3260FF8009038000FF86C48017EEB03E018C00003023EEB0180A2 6C6C013FEB0300A36C6CEC8006156FA2017E9038EFC00C15C7A2D93F016D5A15830281EB F038D91F831430150102C3EBF87090260FC6001360A2D907E66D5A02EC137CA2D903FCEB 7F804A133FA2010192C7FC4A7FA20100141E4A130E0260130C37257EA33C>I<B538807F FFA33A03FE003FF00001EC1F80000092C7FC017E131C6D13186D6C5AECC070010F5B6D6C 5AECF180EB03FB6DB4C8FC6D5AA2147F804A7E8114CF903801C7E090380383F090380703 F8EB0601496C7E011C137E49137F01787F496D7E486C80000FEC3FF0D8FFFE90B51280A3 29247FA32C>I<B538803FFEA33A0FF8000FF06C48EB07C00003EC03806C7E16007F0000 1406A2017E5BA2137F6D5BA26D6C5AA2ECC070010F1360A26D6C5AA214F101035BA2D901 FBC7FCA214FF6D5AA2147CA31438A21430A214701460A25CA2EA7C0100FE5B130391C8FC 1306EAFC0EEA701C6C5AEA1FF0EA0FC027357EA32C>I E /Fe 24 122 df<157815FC14031407141F14FF130F0007B5FCB6FCA2147F13F0EAF800C7FCB3B3 B3A6007FB712FEA52F4E76CD43>49 D<932601FFFCEC01C0047FD9FFC013030307B600F8 1307033F03FE131F92B8EA803F0203DAE003EBC07F020F01FCC7383FF0FF023F01E0EC0F F94A01800203B5FC494848C9FC4901F8824949824949824949824949824990CA7E494883 A2484983485B1B7F485B481A3FA24849181FA3485B1B0FA25AA298C7FC5CA2B5FCAE7EA2 80A2F307C07EA36C7FA21B0F6C6D1980A26C1A1F6C7F1C006C6D606C6D187EA26D6C606D 6D4C5A6D6D16036D6D4C5A6D6D4C5A6D01FC4C5A6D6DEE7F806D6C6C6C4BC7FC6E01E0EC 07FE020F01FEEC1FF80203903AFFE001FFF0020091B612C0033F93C8FC030715FCDB007F 14E0040101FCC9FC525479D261>67 D<BC1280A5D8000701F8C7000114C0F0001F190719 01851A7F1A3F1A1FA2F20FE0A21A07A31A03A318F81BF01A01A497C7FC1701A317031707 170F177F92B6FCA59238F8007F170F170717031701A317001B3EA31B7CA395C8FCA21BFC A21BF8A21A01A31A031BF01A071A0FA21A1F1A3FF27FE0F101FF1907191F0603B5FCBCFC A21BC0A34F517CD058>69 D<B8D8C003B8FCA5D8000701F8C9001FEBE000B3AE92BAFCA5 03F8C9121FB3B1B8D8C003B8FCA560527CD169>72 D<B812C0A5D8000701F8C7FCB3B3B3 B2B812C0A52A527CD132>I<B600FC073FB512FE6F61A26F96B6FCA2D80007F5C00070EF 01EFA202EF6DEF03CFA202E76DEF078FA202E36DEF0F0FA202E16D171EA302E06D173CA2 6F6C1778A26F6C17F0A26F6DED01E0A26F6DED03C0A36F6DED0780A26F6DED0F00A26F6D 151EA26F6D5DA3706C5DA2706C5DA2706D495AA2706D495AA2706D495AA3706D49C7FCA2 706D131EA2706D5BA2716C5BA3716C5BA271EB81E0A271EBC3C0A271EBE780A27101FFC8 FCA3715BA2715BA2725AA2725AA2D93FFC6F5AB74DB712FEA2725AA2725A77527CD180> 77 D<BAFC19F819FF1AE086D8000701F0C7001F13FC060113FF726C13807313C0070F13 E01BF0857313F81BFCA27313FEA41BFFA81BFEA31BFC61A21BF84F13F04F13E0614F13C0 4F13004E485A061F5B92B812F01AC04FC7FC19E003F8CBFCB3AEB812C0A550527CD15C> 80 D<003FBC1280A59126C0003F9038C0007F49C71607D87FF8060113C001E08449197F 49193F90C8171FA2007E1A0FA3007C1A07A500FC1BE0481A03A6C994C7FCB3B3AC91B912 F0A553517BD05E>84 D<EC7FFF0107B512F0013F14FE90B77E48D9E00F7F2703FE000113 F0486C6D7F6EEB3FFC48826E131F83707FA36C496D7FA26C90C7FC6C5AC9FCA6037FB5FC 020FB6FC91B7FC01071487013FEBF0074913803901FFFC004813F0485B485B485B4890C7 FC5A5BA2485AA45EA26D5C007F151D163D6C6C02797F6C6D01F113F86C9026C003E1EBFF E06C9026F81FC014F06C90B5487EC6ED001F011F01FC010713E0010101E090C8FC3C387C B641>97 D<913801FFF8021FEBFF8091B612F0010315FC010F9038C00FFE903A1FFE0001 FFD97FFC491380D9FFF05B4817C048495B5C5A485BA2486F138091C7FC486F1300705A48 92C8FC5BA312FFAD127F7FA27EA2EF03E06C7F17076C6D15C07E6E140F6CEE1F806C6DEC 3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01FF0010390B55A01001580023F49C7FC 020113E033387CB63C>99 D<4DB47E0407B5FCA5EE001F1707B3A4913801FFE0021F13FC 91B6FC010315C7010F9038E03FE74990380007F7D97FFC0101B5FC49487F4849143F4849 80485B83485B5A91C8FC5AA3485AA412FFAC127FA36C7EA37EA26C7F5F6C6D5C7E6C6D5C 6C6D49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0FFFC07FCF6D90B5128F0101ECFE0F D9003F13F8020301C049C7FC41547CD24B>I<913803FFC0023F13FC49B6FC010715C049 01817F903A3FFC007FF849486D7E49486D7E4849130F48496D7E48178048497F18C04881 91C7FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA6127FA27F7EA218E06CEE 01F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F806D6CECFF00D91FFEEB03 FE903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F034387CB63D>I<DA3FFF 14FF0103B5D8F00713C0010FDAFC1F13E0013FECFF7F90267FFC0F9038FF9FF09026FFE0 01EBF83F48496C13E0484990387FF01F4890C7D83FF813E0489338FC0FC0F0078048486E 6CC7FCA2003F82A9001F5EA26C6C4A5AA26C5E6C6D495A6C6D495A6C6D485BDAFC0F5B48 90B6C8FCD803EF14FC01C314F02607C03F90C9FC91CBFCA2120FA37FA213F813FE90B7FC 6C16F817FF18C06C836C836C836D828448B9FC12074848C700031480D81FF8EC003F4848 150748486F13C083485A83A56D5D007F18806D5D003F18006C6C4B5AD80FFEED1FFC6C6C 6CEC7FF86C01E049485A6C01FE011F5B6C6CB71280010F03FCC7FC010115E0D9000F01FC C8FC3C4F7CB543>103 D<EB3FF0B5FCA51203C6FCB3A4EE1FFC93B512C0030314F0030F 8092391FE07FFC92393F001FFE037C8003F07FDAF1E081ECF3C0DAF7807F8502FFC7FC5C A25CA45CB3ACB6D8F807B612C0A542537BD24B>I<137F497E000313E0487FA2487FA76C 5BA26C5BC613806DC7FC90C8FCADEB3FF0B5FCA512017EB3B3A6B612E0A51B547BD325> I<EB3FF0B5FCA512017EB3B3B3B1B612F0A51C537BD225>108 D<D93FF0EB1FFCB591B5 12C0030314F0030F8092391FE07FFC92393F001FFE0003027C80C602F07FDAF1E081ECF3 C0DAF7807F8502FFC7FC5CA25CA45CB3ACB6D8F807B612C0A542367BB54B>110 D<913801FFE0021F13FE91B612C0010315F0010F9038807FFC903A1FFC000FFED97FF86D 6C7E49486D7F48496D7F48496D7F4A147F48834890C86C7EA24883A248486F7EA3007F18 80A400FF18C0AC007F1880A3003F18006D5DA26C5FA26C5F6E147F6C5F6C6D4A5A6C6D49 5B6C6D495B6D6C495BD93FFE011F90C7FC903A0FFF807FFC6D90B55A010015C0023F91C8 FC020113E03A387CB643>I<903A3FF001FFE0B5010F13FE033FEBFFC092B612F002F301 017F913AF7F8007FFE0003D9FFE0EB1FFFC602806D7F92C76C7F4A824A6E7F4A6E7FA271 7FA285187F85A4721380AC1A0060A36118FFA2615F616E4A5BA26E4A5B6E4A5B6F495B6F 4990C7FC03F0EBFFFC9126FBFE075B02F8B612E06F1480031F01FCC8FC030313C092CBFC B1B612F8A5414D7BB54B>I<90397FE003FEB590380FFF80033F13E04B13F09238FE1FF8 9139E1F83FFC0003D9E3E013FEC6ECC07FECE78014EF150014EE02FEEB3FFC5CEE1FF8EE 0FF04A90C7FCA55CB3AAB612FCA52F367CB537>114 D<903903FFF00F013FEBFE1F90B7 FC120348EB003FD80FF81307D81FE0130148487F4980127F90C87EA24881A27FA27F01F0 91C7FC13FCEBFFC06C13FF15F86C14FF16C06C15F06C816C816C81C681013F1580010F15 C01300020714E0EC003F030713F015010078EC007F00F8153F161F7E160FA27E17E07E6D 141F17C07F6DEC3F8001F8EC7F0001FEEB01FE9039FFC00FFC6DB55AD8FC1F14E0D8F807 148048C601F8C7FC2C387CB635>I<143EA6147EA414FEA21301A313031307A2130F131F 133F13FF5A000F90B6FCB8FCA426003FFEC8FCB3A9EE07C0AB011FEC0F8080A26DEC1F00 15806DEBC03E6DEBF0FC6DEBFFF86D6C5B021F5B020313802A4D7ECB34>I<007FB500F0 90387FFFFEA5C66C48C7000F90C7FC6D6CEC07F86D6D5C6D6D495A6D4B5A6F495A6D6D91 C8FC6D6D137E6D6D5B91387FFE014C5A6E6C485A6EEB8FE06EEBCFC06EEBFF806E91C9FC A26E5B6E5B6F7E6F7EA26F7F834B7F4B7F92B5FCDA01FD7F03F87F4A486C7E4A486C7E02 0F7FDA1FC0804A486C7F4A486C7F02FE6D7F4A6D7F495A49486D7F01076F7E49486E7E49 486E7FEBFFF0B500FE49B612C0A542357EB447>120 D<B600F00107B5FCA5C601F8C8EA 7FE06EED3F00A26D6C153E187E013F167C6E15FC6D5E6F13016D5E6F13036D5E8117076D 6D5C170F6D6D5C171F6D93C7FC6F5B027F143E6F137E023F147C6F13FCA26E6D5A16816E EBC1F016C36E5C16E76E5C16FF6E5CA26E91C8FCA36F5AA26F5AA26F5AA26F5AA26F5AA3 5E150F5E151F93C9FC5DD81FC0133E486C137E486C137C486C13FC5D14015D14034A5A6C 48485A49485A263FC07FCAFCEB81FE6CB45A6C13F000035BC690CBFC404D7DB447>I E end TeXDict begin

1 0 bop 150 90 a Fe(1)135 b(Extending)45 b(Cac)l(hing)h(to)f(other)g (MPI)g(Handle)g(T)l(yp)t(es)150 272 y Fd(Cac)n(hing)31 b(is)h(already)f(a)g(part)h(of)g(MPI,)g(but)g(is)g(only)g(a)n(v)-5 b(ailable)31 b(for)g(comm)n(unicators.)49 b(Pro)n(viding)30 b(cac)n(hing)h(for)150 372 y(other)20 b(MPI)h(handles)g(pro)n(vides)e (a)i(w)n(a)n(y)f(for)g(pro\014ling)g(and)h(debugging)f(libraries)g(to)g (attac)n(h)h(information)f(to)h(these)150 471 y(handles)32 b(for)g(later)g(retriev)-5 b(al.)50 b(This)32 b(approac)n(h)e(remo)n(v) n(es)h(the)i(need)f(to)g(pro)n(vide)f(sp)r(ecial)h(functions)h(to)f (access)150 571 y(in)n(ternal)g(data)g(structures.)50 b(With)33 b(the)g(adv)n(en)n(t)e(in)i(MPI2)f(of)g(new)g(t)n(yp)r(es)h (of)f(request)g(handles,)h(this)f(p)r(ossibly)150 671 y(remo)n(v)n(es)24 b(the)i(need)g(for)f(the)h(implemen)n(tation)g(to)g (pro)n(vide)e(sp)r(ecial)i(access)e(functions)i(for)g(the)g(v)-5 b(arious)24 b(t)n(yp)r(es)i(of)150 770 y(request)h(handles.)150 1003 y Fc(1.1)112 b(F)-9 b(unctions)150 1156 y Fd(An)28 b Fb(attr)p 424 1156 26 4 v 30 w(put)p Fd(,)g Fb(attr)p 753 1156 V 30 w(get)p Fd(,)f(and)h Fb(attr)p 1232 1156 V 30 w(delete)35 b Fd(function)28 b(w)n(ould)f(b)r(e)h(added)f(for)h (eac)n(h)e(t)n(yp)r(e)i(of)g(MPI)f(handle.)150 1338 y Fa(MPI_Datatype_att)o(r_g)o(et)37 b(\()43 b(datatype,)d(keyval,)h (\(void)g(**\)info,)f(flag)i(\);)150 1438 y(MPI_Datatype_att)o(r_p)o (ut)37 b(\()43 b(datatype,)d(keyval,)h(\(void)g(*\)info)g(\);)150 1538 y(MPI_Datatype_att)o(r_d)o(el)o(et)o(e)d(\()43 b(datatype,)d (keyval)h(\);)150 1737 y(MPI_Request_attr)o(_ge)o(t)c(\()43 b(req,)f(keyval,)f(\(void)h(**\)info,)e(flag)i(\);)150 1837 y(MPI_Request_attr)o(_pu)o(t)37 b(\()43 b(req,)f(keyval,)f(\(void) h(*\)info)f(\);)150 1936 y(MPI_Request_attr)o(_de)o(le)o(te)c(\()43 b(datatype,)d(keyval)h(\);)150 2169 y Fc(1.2)112 b(Problems)150 2322 y Fd(The)21 b(cop)n(y)g(callbac)n(k)f(function)i(supplied)f(when)h (creating)e(a)h(k)n(eyv)-5 b(al)20 b(lik)n(ely)h(do)r(es)g(not)g(mak)n (e)g(sense)g(for)g(requests)f(or)150 2422 y(datat)n(yp)r(es.)37 b(The)28 b(argumen)n(t)e(list)j(to)e(cop)n(y)g(and)h(destructor)f (function)h(w)n(ould)f(lik)n(ely)h(b)r(e)g(di\013eren)n(t)g(for)f (requests)150 2521 y(and)e(datat)n(yp)r(es.)36 b(It)25 b(w)n(ould)g(b)r(est)h(if)g(w)n(e)f(didn't)h(ha)n(v)n(e)e(sp)r(ecial)h (\\k)n(eyv)-5 b(al")23 b(functions)j(for)f(these)g(t)n(w)n(o)g(new)g(t) n(yp)r(es)g(of)150 2621 y(cac)n(hing.)150 2853 y Fc(1.3)112 b(Example)150 3006 y Fd(An)33 b(example)e(of)h(ho)n(w)g(one)f(migh)n(t) h(use)g(these)g(cac)n(hing)f(functions)h(to)g(prin)n(t)g(out)g (information)g(ab)r(out)g(request)150 3106 y(b)r(eing)40 b(MPI)p 554 3106 25 4 v 29 w(W)-9 b(AIT)i(ed)41 b(on.)73 b(This)39 b(example)h(is)f(b)n(y)h(no)f(means)h(complete)f(and/or)g (correct.)72 b(It)40 b(is)f(here)h(for)150 3206 y(demonstration)27 b(purp)r(oses.)150 3388 y Fa(#define)41 b(MPI_SSEND_TYPE)c(0)150 3488 y(#define)k(MPI_RSEND_TYPE)c(1)150 3588 y(#define)k(MPI_SEND_TYPE) 81 b(2)150 3787 y(typedef)41 b(struct)g(_mpi_send_info)d({)324 3886 y(int)86 b(type;)324 3986 y(int)g(dest;)324 4086 y(int)g(tag;)324 4185 y(MPI_datatype_info)37 b(*dtype;)324 4285 y(int)86 b(context;)150 4385 y(})43 b(mpi_send_info;)150 4584 y(int)f(send_keyval,)d(datatype_keyval;)150 4783 y(/*)k(Profiling)d(functions)f(*/)150 4883 y(int)j(MPI_Init\(argc,)c (argv\))150 4982 y(int)k(*argc;)150 5082 y(char)g(***argv;)150 5182 y({)281 5381 y(MPI_Keyval_creat)o(e)37 b(\()43 b (MPI_NULL_COPY_FN,)37 b(MPI_NULL_DEL_FN,)1929 5656 y Fd(1)p eop 2 1 bop 1152 90 a Fa(&send_keyval,)39 b(NULL)j(\);)281 190 y(MPI_Keyval_creat)o(e)37 b(\()43 b(MPI_NULL_COPY_FN,)37 b(MPI_NULL_DEL_FN,)1152 289 y(&datatype_keyval,)g(NULL)42 b(\);)281 489 y(PMPI_Init\(argc,a)o(rg)o(v\))o(;)281 688 y(/*)h(store)e(datatype)f(info)i(for)h(predefined)c(types)j(*/)150 788 y(})150 1086 y(int)g(MPI_Isend\(buf,)c(count,)j(type,)h(dest,)f (tag,)h(comm,)g(req\))150 1186 y(void)g(*buf;)150 1286 y(int)g(count,)f(dest,)h(tag;)150 1385 y(MPI_Datatype)d(type;)150 1485 y(MPI_Comm)h(comm;)150 1585 y(MPI_Request)f(*req;)150 1684 y({)324 1784 y(mpi_datatype_info)e(*dtype;)324 1883 y(int)43 b(id,)f(err;)324 1983 y(mpi_send_info)d(*sinfo)i(=)i (\(mpi_send_info)38 b(*\)malloc\(sizeof)o(\(mp)o(i_)o(sen)o(d_)o(in)o (fo\))o(\);)324 2182 y(MPI_Datatype_attr)o(_g)o(et)f(\()43 b(type,)f(datatype_keyval,)37 b(\(void)k(**\)&dtype,)f(&flag)h(\);)324 2382 y(mpi_send_info->ty)o(pe)c(=)43 b(MPI_SEND_TYPE;)324 2481 y(mpi_send_info->dt)o(yp)o(e)38 b(=)43 b(dtype;)324 2581 y(mpi_send_info->de)o(st)37 b(=)43 b(dest;)324 2680 y(mpi_send_info->ta)o(g)37 b(=)44 b(tag;)324 2780 y(MPI_Comm_id)39 b(\()44 b(comm,)d(&id)h(\);)324 2880 y(mpi_send_info->co)o(nt)o(ext)37 b(=)43 b(id;)324 3079 y(err)g(=)g(PMPI_Isend\(buf,c)o(ou)o(nt,)37 b(type,)k(dest,)h(tag,)g(comm,)f(req\);)324 3278 y(MPI_Request_attr_)o (pu)o(t)d(\()43 b(req,)f(send_keyval,)c(\(void)k(*\)sinfo\);)324 3478 y(return)f(err;)150 3577 y(})150 3876 y(int)h(MPI_Wait)f(\()i(req) f(\))150 3976 y(MPI_Request)d(*req;)150 4075 y({)324 4175 y(mpi_send_info)g(*sinfo;)324 4374 y(MPI_Request_attr_)o(ge)o(t)f (\()43 b(req,)f(send_keyval,)c(\(void)k(**\)&sinfo,)d(&flag)j(\);)324 4474 y(if)h(\(flag\))455 4573 y(printf\("Completi)o(ng)37 b(send:)85 b(tag=\045d,)41 b(dest=\045d\\n",sinfo)o(->t)o(ag)o(,si)o (nf)o(o-)o(>de)o(st)o(\);)324 4673 y(return)g(PMPI_Wait\(req\);)150 4773 y(})1929 5656 y Fd(2)p eop end userdict /end-hook known{end-hook}if