%!PS-Adobe-2.0
%%Creator: dvips 5.47 Copyright 1986-91 Radical Eye Software
%%Title: thesis.dvi
%%Pages: 52 1
%%BoundingBox: 0 0 596 843
%%EndComments
%%BeginProcSet: texc.pro
/TeXDict 200 dict def TeXDict begin /N /def load def /B{bind def}N /S /exch
load def /X{S N}B /TR /translate load N /isls false N /vsize 10 N /@rigin{
isls{[0 1 -1 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale
Resolution VResolution vsize neg mul TR matrix currentmatrix dup dup 4 get
round 4 exch put dup dup 5 get round 5 exch put setmatrix}N /@letter{/vsize 10
N}B /@landscape{/isls true N /vsize -1 N}B /@a4{/vsize 10.6929133858 N}B /@a3{
/vsize 15.5531 N}B /@ledger{/vsize 16 N}B /@legal{/vsize 13 N}B /@manualfeed{
statusdict /manualfeed true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N
/FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin
/FontType 3 N /FontMatrix fntrx N /FontBBox FBB N string /base X array
/BitMaps X /BuildChar{CharBuilder}N /Encoding IE N end dup{/foo setfont}2
array copy cvx N load 0 nn put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail}
B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0]N df-tail}B /E{pop nn dup definefont
setfont}B /ch-width{ch-data dup length 5 sub get}B /ch-height{ch-data dup
length 4 sub get}B /ch-xoff{128 ch-data dup length 3 sub get sub}B /ch-yoff{
ch-data dup length 2 sub get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B
/ch-image{ch-data dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0
N /rw 0 N /rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S
dup /base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0
ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff setcachedevice
ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff .1 add]/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}bind{adv 1 chg nd}bind{1 add chg}bind{1 add chg nd}bind{adv lsh}bind{
adv lsh nd}bind{adv rsh}bind{adv rsh nd}bind{1 add adv}bind{/rc X nd}bind{1
add set}bind{1 add clr}bind{adv 2 chg}bind{adv 2 chg nd}bind{pop nd}bind]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}N /eop{clear SI restore showpage userdict /eop-hook
known{eop-hook}if}N /@start{userdict /start-hook known{start-hook}if
/VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255{IE S 1
string dup 0 3 index put cvn put}for}N /p /show load N /RMat[1 0 0 -1 0 0]N
/BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V
statusdict begin /product where{pop product dup length 7 ge{0 7 getinterval
(Display)eq}{pop false}ifelse}{false}ifelse end{{gsave TR -.1 -.1 TR 1 1 scale
rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1 -.1 TR rulex
ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /a{moveto}B
/delta 0 N /tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}
B /c{-4 M}B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B
/k{4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{p 1
w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p a}B /bos{
/SS save N}B /eos{clear SS restore}B end
%%EndProcSet
TeXDict begin 1000 508 508 @start /Fa 39 120 df<1518153CA4157C1578A315F85DA314
015DA314035DA31407007FB712F8B812FCA26C16F8C7000FC8FCA35C141EA3143E143CA3147C14
78A314F85CA313015C6D5A2E3075AA3B>43 D<EA03C0EA07E0120F121FA4EA0F601200A213C0A2
EA0180A2EA0300A212065A5A12385A5A12800B177A8718>I<387FFFC0B5FCA3120479921C>I<EC
1FC0EC7FF0903801F078903803C03C903807801EEB0F00011E131F49130F137C137813F8484813
1FA212035BA2120749133F120FA2153E4848137EA448C712FCA4007EEB01F8A315F0007C130312
FC15E01407A24814C0140F1580A2EC1F00141E0078133E143C007C5B003C5B383E01E0381F0780
D807FFC7FCEA01F8203477B227>48 D<EC0FE0EC3FF8ECF03C903801C00E903803800F90390700
0780130E5B133C13381378A301F8EB0F00A26D131E5D6D1338017F5B6E5AECE3C090383FF780D9
1FFEC7FC6D5A6D7E497E013C13C0EB707F48486C7E48486C7E3807800F380F0003001E6D7E121C
003C13005AA2485CA35D14015D14035D4AC7FC0078130E00385B003C1378381F03E03807FF80D8
01FEC8FC213478B227>56 D<137813FC12011203A3EA01F8EA00E01300B1121E123F5A5AA25A5A
12780E2177A018>58 D<DB1FE01380913901FFF801913907F01E0391381F8003913A7E00018700
02F8EB00CF494814DFD907E0147FD90F80147E49C8123E5B137E49153C5B0001161C485A000716
185B000F16385B001F16305B003F93C7FCA290CBFC5AA312FEA55A4C7EA24CC7FCA31606A2007C
5D007E5DA2003E5D5E6C5D4B5A6C6C49C8FC6C6C13066C6C5BD801F8133839007E01E090381FFF
80D903FCC9FC313774B537>67 D<0107B612C017F8903A001FC001FC923880003FEF1F80EF0FC0
17074AC7EA03E0A2EF01F0A2027E15F8A45CA218FCA2495AA218F8A2495A1703A3494815F01707
A218E04948140FA218C0171F49481580A2EF3F00173E49C8127E5F5F4C5A017E14034C5A4C5A4C
5A49023EC7FC16FCED03F00001EC0FE0B7C8FC15F836357BB43A>I<0107B712C0A2903A001FC0
003F4B130717031880A24AC71201A4147EA3EF03005CEE300194C7FCA249485BA316E049485B15
0391B5FCA2903907E007801503A3D90FC090C8FCA490381F800292C9FCA349CAFCA4137EA45BA3
1201B512FCA232357BB432>70 D<0107B51280A29039001FE0005D5DA34AC7FCA4147EA45CA449
5AA4495AA4495AA4495AA4495AA449C8FCA4137EA45BA31201B512F0A221357BB41E>73
D<0107B512E0A29026001FE0C7FC5D5DA34AC8FCA4147EA45CA4495AA4495AA4495AA4495AA317
C04948EB0180A3EE030049C7FC1606A2160E017E140C161C163C1638491478ED01F8ED07F00001
143FB75AA22A357BB430>76 D<ED3FE0913801FFFC91380FC07E91393F001F80027CEB07C0D901
F0EB03E04948EB01F0495A4948EB00F849C8FC013E15FC017E157C49157E485AA2485A485A177F
120F5B121F5B003F167EA290C912FE5AA300FEED01FCA3EE03F8A348ED07F0A2EE0FE0A2EE1FC0
1780163F6C1600007E157E5EA2003E4A5A003F4A5A6CEC07C06D495A6C6C49C7FC6C6C137E3903
F001F83900FC07E090383FFF80D907F8C8FC303774B53B>79 D<0107B67E17F0903A001FC001FC
923880007E83EF1F80A24AC713C0170FA2171F147EA44AEC3F80A218005F4948147E5F5F4C5A49
48EB07E04C5A047FC7FC91B512FC4914E002E0C9FCA3495AA4495AA449CAFCA4137EA45BA31201
B512F0A232357BB434>I<DA01FC138091380FFF8191381E03C391387800E302E0EB7700494813
3F495A01078091C7121E130E131E160E49140CA2161CA21618137C017E91C7FCA27F8014F06DB4
FC15E06D13F86D13FE6D7FEB007F020F7F1400ED1FC0150FA21507A3120C15031507001C5D1218
A293C7FC003C5C150E5D153C007E1438007F5CD87B805B3971C003C026E0F80FC8FC38C03FFE38
800FF029377AB52B>83 D<0003B712FE5A9039F003F800D80F8049133ED80E00151C120C121C00
18495AA2481618A24A5A5AA3484948133000401610C71500A24AC8FCA4147EA45CA4495AA4495A
A4495AA4495AA4495AA3EB7FC0B612C0A22F3572B437>I<263FFFFC90B5FCA2C690C7EA0FF001
FCEC07C0EE03801700A248481406A448485CA448485CA448485CA448485CA448C85AA4007E4A5A
A4484AC7FCA31506A25A5D5DA25D007C5C5D003C1301003E495A001E0106C8FC6C131C3807C0F8
3801FFE06C6CC9FC303670B439>I<EB01F0EB0FF890381E1C7090383C06F0EB7807EBF003EA01
E01203D807C013E0120F1380121F90380007C05AA3007EEB0F80A4007CEB1F0012FC15021503EC
3E06A2127C147EECFE0C003C13FC903801BC18381E071ED80E0E13303907FC0FE03903F003C020
2378A127>97 D<137EEA0FFEA2EA007CA45BA4485AA4485AA43807C1F0EBC7FCEBDE1EEBF80FEA
0FF001E01380EBC0071380D81F0013C0A3140F123EA448EB1F80A40078EB3F0012F8143E147E14
7CA200785B5C1301495A00385B383C0780D81E1EC7FCEA0FFCEA03F01A3678B423>I<14FCEB07
FF90380F838090383E01C0EB78009038F001E000011307EA03E03907C00FC0A2390F800780001F
90C7FCA248C8FCA3127EA4127C12FCA3127C158015C0EC0180003CEB030014066C131C1478380F
81E03803FF80C648C7FC1B2378A123>I<ED0FC0EC01FFA29138000F80A4ED1F00A4153EA45DA4
903801F0F8EB0FF8EB1E1CEB3C0690387807F0EBF003EA01E01203D807C05B120F1380121F4948
5A5AA3007E495AA4007C49C7FC12FC15021503EC3E06A2127C147EECFE0C003C13FC903801BC18
381E071ED80E0E5B3907FC0FE03903F003C0223678B427>I<EB01F8EB0FFEEB3E0F9038780380
13F03901E001C0EA03C01207390F800380121F9038000700485B003E131E007E13F8387FFFF091
C7FC00FCC8FCA45AA55C15800078EB030014066C5B14386C13F0380F03C06CB4C7FCEA01FC1A23
77A123>I<ED0F80ED3FC0ED70E0EDE0F0EC01E1EC03E315C316E0913807C1C0EDC0005D140FA4
141F92C7FCA590381FFFFEA2D9003EC7FCA35CA55CA5495AA513035CA5495AA45C130FA391C8FC
A25BA2131EA2EA3C3C127CEA7E3812FC5B1278EA70E0EA3FC0000FC9FC244682B518>I<141FEC
FF80903801E1C7903803C06F90380F807F90381F003F131E5B017C133E13FC5B120149137C1203
A3484813F8A49038C001F0A4EC03E0A314070003EB0FC0141F3801E0373800F0E790387FCF80EB
1F0F1300A2EC1F00A4143E123C007C5B127E485B495A387803E0EB0F80D81FFFC7FCEA07F82032
7CA123>I<EB0FC0EA01FFA238000F80A449C8FCA4133EA45BA49038F81F80EC7FE09038F9E0F0
9038FB80783801F60001FC137CA25B485AA25BA248485BA44848485AA34A5AEA1F00A2913807C0
401660003E15C0EC0F80A2ED01805AED0300A21506486D5AEC03F800706D5A23367BB427>I<EB
0380EB07C0130FA21480EB070090C7FCABEA01E0EA07F8EA0E3C1218EA303EA21260A25B12C0A2
5B1200A2485AA2485AA3485AA3380F808014C0EB8180EA1F01A2381E0300A21306A25BEA0E18EA
07F06C5A123479B218>I<1538157C157E15FC157C15701500AB143FEC7F80903801C3C0903803
81E014011306130CA2EB1803A21330A290380007C0A4EC0F80A4EC1F00A4143EA45CA45CA4495A
A4495A123C387C07C0007E5BEAFC0F49C7FCEA783EEA7078EA3FF0EA0F801F4383B218>I<EB0F
C0EA01FFA238000F80A449C7FCA4133EA45BA449137CEC01FEEC0387EC060F3901F0081FEC103F
1420EC603E3903E0C01C9038E1800001E3C7FC13E2EA07CC13D813F013FE486C7EEB87E0EB83F0
EB81F8EA1F00A2EC7C041506003EEBF80CA3150848141814F01530EC702048EB78E0EC3FC00070
EB0F0020367BB423>I<133FEA07FFA2EA003EA4137CA413F8A4EA01F0A4EA03E0A4EA07C0A4EA
0F80A4EA1F00A4123EA45AA21308130CEAF818A4133012F01360127813C0EA3F80EA0F00103679
B414>I<2707C007F0137E3C0FE01FFC01FF803C18F0781E0783C03C3078E01F0E01E0903979C0
0F1826607B8001B07F020013F0017E14E0484814C0A2491480A2D801F04948485AA44848013E49
5AA34D5A48485BA2EF1F011980484849EC0300173EA2EF3C064848485A60A260003E4948EB1C30
EF0FE0001C6D486D5A392379A13F>I<3907C007E0390FE01FF83918F0783C393078E01EEB7980
39607B001F137F137E485AA25BA2D801F0133EA448485BA35D485AA2913801F0101618D80F8014
30EC03E0A2EDC060EA1F0016C0A2EDC180003E903801C300EC00FE001C147C252379A12B>I<14
FC903807FF8090380F87C090383E01E0017813F0EBF000000114F8485A485A15FC485A121FA248
C7FCA3007EEB01F8A4007CEB03F012FC15E01407007C14C0140F1580EC1F00003C131E5C6C5B5C
380F83E03803FF80D800FCC7FC1E2378A127>I<011F133E90393F80FF80903963C3C3C09039C1
E701E014EE260181FC13F0ECF8005C48484813F8A31501380007C0A490390F8003F0A490391F00
07E0A216C0150F013E1480A2ED1F00151E017E133E017F5B15786E5A9038F9C3C09038F8FF8002
7EC7FC91C8FC485AA4485AA4485AA3EAFFFEA225317FA127>I<903801F00890380FF81890381E
1C3890383C0678017813F0EBF003EA01E01203D807C013E0120F1380121F90380007C05AA3007E
EB0F80A4007CEB1F0012FCA3143EA2127C147E5C123C1301381E077C380E0EF8EA07FCEA03F0C7
FC495AA4495AA4495AA2130F3801FFFEA21D3178A123>I<3907C01F80390FE07FE03918F0E070
393079807890387B00F838607E01A2017C13F039C0FC00E0491300A3EA01F0A4485AA4485AA448
5AA448C8FCA4123EA2121C1D2379A120>I<EB03F0EB0FFCEB3C0E497E497E01E0138000011307
140F3903C01F0080EBE00E91C7FC7F13FEEBFFC06C13F06C7F6D7E133F1303EB007EA2143E1238
007C133C12FCA248133848137800C0137000605B387001C0383C0F80D81FFEC7FCEA07F819237A
A11F>I<13075B5BA4133EA45BA45B387FFFF8B5FC3800F800485AA4485AA4485AA4485AA448C7
FCA214201430003E1360A214C0A2EB0180383C0300A2EA1E06131CEA0FF8EA03E0153179AF1A>
I<EA01E0D807F8130ED80E3C131F1218D8303E133EA21260A2495B12C0A25B00005CA2485AA24A
5AEA03E0A34848485AA216401660913807C0C01380A391380FC18001C0138191381F83000003EB
33C33901E0E3C63900FFC1FC90383F0078232379A129>I<D801E01370D807F813F8380E3C0112
18D8303E13FCEC00F800601478A249133812C0A25B00001430A2485AA21560485AA3484813C0A3
EC0180A29038800300A2140613C05C00035BEBE0386C6C5A3800FFC0EB3F801E2379A123>I<D8
01E01570D807F8011C13F8D80E3CEB3E011218D8303E017C13FCEE00F800601678A24949133812
C0A25B000049481330A2EA01F0A24A481360EA03E0A34848484813C0A3EE0180A201801380EE03
00140F01C0EBC006021F13040003011B130C9039E033E0183A01F061F0703A00FFC0FFE090391F
801F802E2379A133>I E /Fb 4 116 df<EB07F8EB3FFF90B512C0488048803907F807F8390FE0
01FC48486C7E49137E48C77E003E80127E007C158000FC140F5AB7FCA4160000F8C9FC7E127CA2
127E003E1407003FEC0F806C7E6C6C131F01F0EB7F003907FC01FF6CB55A6C5C6C6C13F0011F13
C0D903FEC7FC21247BA32B>101 D<EC07F0EC1FFCEC3FFE91B5FC5BECFC7FEB03F0903807E03E
ECC01C1500A7007FB512FCB612FEA36C14FC390007C000B3A8001FB512F04814F8A36C14F02034
7DB32B>I<387FFFC080B5FC7EA2EA0003B3B3A6007FB6FCA2B712806C1500A221347BB32B>108
D<90387FF0603903FFFEF0000F13FF5A5A387FC01F387E0007481303481301A36CEB00E0007E14
00EA7FC0EA3FFE381FFFF0000713FF000114C0D8001F13E09038007FF0EC07F80070EB00FC00F8
147C153E7EA27E157E7E90388001FC9038F00FF890B5FC15F000F914C000F0148039601FFC001F
247AA32B>115 D E /Fc 4 116 df<ECFFC0010313F8011F13FE497F90B612804815C0489038C0
7FE03A07FE001FF001F8EB07F848481303484814FC491301003F15FE491300127F90C8FC167F5A
5AB8FCA516FE48C9FC7E7EA27F123F6D143E6C6C147F7F6C6C14FF6C6C5B6CB4EB03FE6C9038E0
1FFC6C90B5FC6D14F86D14E0010F14C0010314009038003FF0282C7AAB35>101
D<ED1FF8EDFFFE02037F4A14804A14C05C91383FF07FEC7FC09238003F804AEB1F004A130E93C7
FCA7003FB612FC4881B7FCA36C5DC748C8FCB3AE001FB612F04881A46C5D2A3E7DBD35>I<387F
FFFEB6FCA47EC77EB3B3AE007FB7FCB81280A46C1600293E7ABD35>108
D<90390FFF83C090B5EAF7E0000314FF5A121F5AEBF801397F80003F90C7121F00FE140F5AA37E
6CEC07C0D87FC090C7FC13F8383FFFE06CEBFF806C14F0000314FCC614FF011F14C0D9007F13E0
020113F0EC001FED07F8003C1403007EEC01FC00FE1400A27EA26D13016D14F86D13036DEB0FF0
01FE137F90B612E016C0168000FCECFE00013F13F8D8780313C0262C79AB35>115
D E /Fd 4 109 df<D907FC131890383FFF8090B5EAE0383A01F803F8783A03E0003CF8D80780
130E48C71207001E14015A1500481578A200F81538A31618A27EA26C1500127F7FEA3FE013F838
1FFFC06C13FC6CEBFFC06C14F86C14FE6C6C7F011F1480010314C0D9003F13E0020113F0913800
1FF81507ED03FC15011500167EA2124000C0153EA47E163CA26C157C16786C15F86C15F0B4EC01
E06DEB03C0D8F9F0EB0F80D8F0FFEB3F0039E03FFFFED8C00F13F8010013C0273C7ABA34>83
D<B712F0A23907F800076C481301ED0078A216381618A4160CA215601600A315E0A2140390B5FC
A2EBF0031400A21560A21603A21500A21606A4160EA2161E163E167C486CEB03FCB7FCA2282B7C
AA2F>101 D<B712E0A23907F8000F6C481303ED00F01670A21630A41618A215C01600A31401A2
140790B5FCA2EBF0071401A21400A492C7FCABEA07FCB512F0A2252B7CAA2D>I<B512F0A2D807
FCC8FCEA03F0B3A61660A316E016C0A31501A21503A2150FED1F80486C13FFB7FCA2232B7CAA2B
>108 D E /Fe 42 120 df<913A03FF800FF8023F9038E07FFE49B500F9B51280903C07FE00FF
FC1FC0D90FF8ECF03F90261FE0019038E07FE049484813C0EB7F8013FF02009138803FC0486EEC
1F80F00F006F91C7FCAAB912C0A4000190C70180C7FCB3AB007FD9FC3F13FFA43B3B7EBA37>11
D<ED03804B7EB3AA007FB912FCBA12FEA36C18FCC8D807C0C8FCB3AA6F5A3F3F7BB44A>43
D<B61280A819087F9520>45 D<120FEA3FC0EA7FE0A2EAFFF0A4EA7FE0A2EA3FC0EA0F000C0C79
8B1A>I<143C147CEB01FC1307137FB5FCA3138FEA000FB3B3A6007FB6FCA4203779B62F>49
D<EB0FFC90387FFF8048B512E04814F83907E03FFC390F800FFE391E0003FF486D1380007F15C0
6D7E486C14E06D137F16F0A46C5A6C5A6CC7FCC8FC16E015FF16C0A24A138016004A5A5D4A5A4A
5A4A5A5D4A5A027EC7FC5C495A495AD907C013F0495A91C7FC131E49EB01E05B5BD801C0130348
B6FC5A5A5A5A4815C0B7FCA424377BB62F>I<EB03FF011F13E0017F13F89038FC07FE3901F001
FFD803C0148048487ED80FF014C07F001F15E07FA46C5A6C4814C06C5AC7481380A216004A5A5D
4A5AEC3FE090380FFFC092C7FC15F090380007FCEC01FF6E138016C0ED7FE016F0153F16F8A216
FCA2EA1F80487E487E487EA216F8A349EB7FF06C5A4914E0003EC7EAFFC06C6C481380260FF807
13006CB55A000114F86C6C13E0D907FEC7FC26387CB62F>I<151FA25D5D5D5CA25C5C5CA25C14
3D147D147914F1EB01E11303EB07C11481EB0F01131E133E133C137813F0120113E0EA03C0EA07
80120FEA1F00121E5A5A12F8B8FCA4C700031300AA0107B6FCA428367DB52F>I<0004EC0180D8
0F80130F01F813FF90B612005D5D5D5D5D158092C7FC14F8EB1F8090C9FCA8EB07FE90381FFFC0
017F13F09038F807F89038E001FE01807F90C7FC00061580C813C0157F16E0A316F0A2121F487E
487E12FF7FA216E05B5B6CC7EAFFC0127C003C1580003E5B6C1500390F8007FE3907F01FFC6CB5
12F06C5C6C6C90C7FCEB0FF824387BB62F>I<EC1FF0ECFFFE01037F90390FF80F8090393FC003
C090397F8007E09038FE000F0001EC1FF04848133F485AA2120F4848EB1FE0ED0FC0003FEC0780
92C7FC5B127FA3ECFFE0D8FFE113F89038E3EFFE9038E700FF01ECEB7F8001FCEB3FC04914E015
1F4914F016F8A34914FCA5127FA4123FA216F86C7EA2000F15F0ED3FE06C7E0003EC7FC06D1480
3A01FF01FF006C6CB45A6D13F8010F13E0010190C7FC26387CB62F>I<ED03E0A24B7EA34B7EA2
4B7EA24B7EA34B7EA292B57E15F715F302018015E102038015C0A2020780ED807F020F80ED003F
A24A80021E131F023E80023C130FA24A808202F8814A7FA249488191B7FC4982A3D90780C77F17
7F010F8291C8123F4982131E171F013E82013C150F017C82137801FC81B500F80107B61280A441
3A7DB948>65 D<DB1FFC14C00203B5EAC001021FECF003027FECFC07903B01FFFC00FE0F010701
C0EB1F9F4948C7EA07FFD93FF88049481400D9FFC0157F485B48173F91C9121F485A000F170F5B
001F1707A2485A1803127FA25B95C7FC12FFAC127FA26DEE03C0A2123FA26C7EF00780120F7F00
07EF0F006C7E6E151E6C173E6C6D153CD97FF015F86D6C4A5AD90FFEEC07E0902607FFC0EB1FC0
010101FC01FFC7FC6D6CB55A021F14F8020314C09126001FFEC8FC3A3C7BBA45>67
D<B8FC17F017FE717E28007FF0000F13E004007FEF3FFCEF0FFE717E837113807113C019E0187F
19F0183F19F8A2181F19FCA419FEAD19FCA4F03FF8A219F0A2F07FE0A2F0FFC05F4D13804D1300
4D5AEF3FFCEFFFF8040713E0B912804DC7FC17F894C8FC3F3A7CB949>I<B912C0A43A007FF000
039338007FE0171F170F1707A21703A21701A318F0EEF000A41800A21501A21503150F91B5FCA4
ECF00F15031501A21500183CA31878A293C7FCA218F8A218F01701A21703A2EF07E0170F173F17
FF1607B9FC18C0A3363A7CB93E>I<B612F8A439007FF000B3B3AEB612F8A41D3A7DB923>73
D<B500F0040FB512806E5EA3C66C6C4C90C7FCA2D97BFE167BA2D979FF16F3A301786DEC01E3A2
6E6CEC03C3A26E6CEC0783A36E6CEC0F03A26E6C141EA26E6C143CA36E6C1478A26E6C14F0A36E
90388001E0A292397FC003C0A292393FE00780A392391FF00F00A292380FF81EA26F6C5AA36F6C
5AA26F6C5AA36F5BA2705AA201FC6E5AB500FC0307B61280A2EE1F00160E513A7CB95A>77
D<EDFFF0020F13FF027F14E0903A01FFC03FF8903A07FE0007FED91FF8903801FF8049486D7FD9
7FC0EC3FE049486E7E48834890C86C7E48486F7EA248486F7EA2001F18804981003F18C0A34848
6F13E0A400FF18F0AC007F18E0A26D5DA3003F18C0A26C6C4B1380A36C6C4B130000075F6D150F
6C5F6C6D4A5A6C6D4A5A6D6C4A5A6D6C4A5A6D6C495BD907FED907FEC7FC903A01FFC03FF86D6C
B512E0020F91C8FC020013F03C3C7BBA47>79 D<B712FEEEFFE017FC17FF28007FF0000F138004
0313C0040013E0EF7FF0EF3FF8A2EF1FFCA318FEA718FCA3EF3FF8A2EF7FF0EFFFE0040313C004
1F130091B65A17F817C002F0C9FCB3A4B612F8A4373A7CB941>I<D907FF1306013FEBE00E90B5
EAF81E48ECFE3E3A03FC01FF7E3A07F0001FFED80FC01307001F140348481301150048C8127EA2
163E5AA2161E7FA27F6D91C7FC7FEA7FFCEBFFE06C13FEECFFF06C14FE6C6E7E6C816C816C816C
81013F80010F80010080140FDA007F1380150F15036F13C081167F127000F0153FA47E1780A26C
157F6C16007E6D14FE01E0495A01F8495A3AFDFF801FF000F890B55AD8F03F1480D8E00791C7FC
39C0007FF02A3C7BBA35>83 D<003FB91280A4D9F800EBE003D87FC09238007FC090C7151F007E
170FA2007C1707A200781703A400F818E0481701A4C892C7FCB3AF011FB7FCA43B397DB842>I<
EB3FFE48B512C0000714F0390FF00FFCEC03FE486C6C7E8082157F6C48806C5AEA0180C8FCA3EC
3FFF010FB5FC90387FFE7F3801FF803807FE00EA0FF8EA1FE0123F485AA2485AA415FF6C7EEC01
BF3A3FE0033FE0261FF81EEBFFC0390FFFFC1F0003497E39003FC0032A257DA42E>97
D<13FE12FFA412071203B0EC03FF021F13E0027F13F89039FFFC07FC9138E001FF913980007F80
91C7EA3FC04915E0161F17F0A2EE0FF8A317FCA917F8A3EE1FF0A217E0EE3FC06DEC7F806EEBFF
009039FBE001FE9039F8F80FFC9039F07FFFF0D9E01F13C09026C007FEC7FC2E3B7DBA35>I<90
3801FFE0010F13FC017F13FF9039FF807F803801FE00D807F8EBFFC0485AA2485A003FEC7F80ED
3F00007F140C4990C7FCA212FFA9127FA27F123FED01E06C7E000FEC03C07F6C6CEB0780D801FF
EB0F006CEBC07E6DB45A010F13F00101138023257DA42A>I<167FED7FFFA4150381B0903801FF
81010F13F1013F13FD9038FFC07F3901FE001F4848130748487F48487F485A123FA2485AA312FF
A9127FA36C7EA2121F6D5B000F5C6C6C5BD803FE4913802700FF80FD13FC90387FFFF9011F13E1
010313012E3B7DBA35>I<EB03FF011F13E0017F13F83901FF03FE3903FC00FF4848EB7F804848
133F001FEC1FC05B003F15E0150F485A16F0A212FFA290B6FCA301C0C8FCA4127FA36C6C14F0A2
121F6C6CEB01E06D13036C6CEB07C06C6CEB1F803A00FF807F0090383FFFFC010F13F001011380
24257DA42B>I<EC1FF0ECFFF8010313FE90380FF87F90381FE0FFD93FC11380EB7F8113FFA248
01001300157E153C92C7FCAAB6FCA4000190C8FCB3AB007F13FEA4213B7DBA1D>I<163E903907
FC01FF90267FFFC3138090B538E78FC03A03FC07FC1F3807F803390FF001FEEE0F803B1FE000FF
070093C7FC003F81A6001F92C7FCA26C6C485AA26C6C485A6C6C485A90B512E0486C5B260E07FC
C8FC90CAFCA2121E121FA213C06CB512F015FF16C06C816C15F87E4881000F81391FC0000F48C7
EA01FF488000FE81A5007F15FE6C5DD81FC0EB03F86C6C495AD807FEEB7FE06CB65AC66C49C7FC
010713E02A377DA52F>I<13FE12FFA412071203B0EDFF80020713E04A7F91381E07F891383803
FC02607FECC001D9FF807FA21400A25BB3A4B5D8F87F13FCA42E3B7CBA35>I<EA01E0EA07F87F
487EA2121FA2120FA26C5A5BEA01E0C8FCAB13FE12FFA412071203B3A9B512F0A4143C7DBB1A>
I<141EEC7F80ECFFC0A24913E0A46D13C0A2EC7F80EC1E0091C7FCABEC1FE0EB0FFFA4EB007F14
3FB3B1121E123FEA7F80D8FFC013C0147F158014FF6C481300EB83FC6CB45A000F13E0000190C7
FC1B4C85BB1D>I<13FE12FFA412071203B092383FFFE0A4923807F80016E04B5A033FC7FC157E
5D4A5A4A5AEC0FC04A5A143F4A7E90B57E81A2ECDFF8EC8FFC9038FE07FEEBFC03816E7F6E7F15
7F826F7E6F7E150F826F7EB539F03FFFF8A42D3B7DBA32>I<13FE12FFA412071203B3B3ADB512
F8A4153B7DBA1A>I<D801FCD9FF80EB3FE000FF010301F0EBFFFC020FD9F8037F913B1E03FC07
80FF913C3801FE0E007F8000070160D9FF18800003496C49133FD9FD8002E080A201FFC75BA249
5DB3A4B5D8F83FD9FE0FB51280A449257CA452>I<D801FCEBFF8000FF010713E04A7F91381E07
F891383803FC000701607F0003EBC001D9FD807FA2EBFF00A25BB3A4B5D8F87F13FCA42E257CA4
35>I<49B47E011F13F8017F13FE3A01FF00FF80D803FCEB3FC04848EB1FE04848EB0FF04848EB
07F8A2003F15FC491303007F15FEA300FF15FFA9007F15FEA36C6CEB07FCA2001F15F86D130F00
0F15F06C6CEB1FE06C6CEB3FC03A01FF81FF803A007FFFFE00011F13F80101138028257DA42F>
I<9038FE03FF00FF011F13E0027F13F89039FFFC07FC9138E001FF0003D98000138091C7EA7FC0
49EC3FE0A217F0161F17F8A2160F17FCA917F8161FA217F0163F17E0EE7FC06D15806EEBFF0091
38E003FE9039FEF80FFC91387FFFF0021F13C0DA07FEC7FC91C9FCACB512F8A42E357DA435>I<
3901FC07E000FFEB1FF8EC3FFEEC78FF14E0000701C11380EA03FD148113FF02001300157E1518
4990C7FCB3A3B512FCA421257DA427>114 D<90387FE0E03803FFFD000F13FF381FC01F383E00
0714035A140112FCA27E6C90C7FC13E06CB4FC14F86C13FE6CEBFF806C14C06C14E06C14F0C66C
13F813079038001FFC14070070130112F014007EA26C14F8A26CEB01F039FF8003E09038E00FC0
00FBB5128000F0140038C01FF81E257DA425>I<130FA55BA45BA25BA25B5A5A5A001FEBFFE0B6
FCA3000190C7FCB21578A86C14F01480017F13E090383FC1C0EB1FFF6D1300EB01FE1D367EB525
>I<01FE147F00FFEC7FFFA400071403000380B3A35DA300015C150D6C6C011D138090267F8079
13FC90383FFFF16D13C1010313012E257CA435>I<B539F001FFF8A4D803FEC7EA3F006D143E6C
153C806C5DA26E13F8017F5CECE001013F5CECF003011F5C14F8010F495AA2ECFC0F010791C7FC
6E5A0103131EECFF3E6D133C15FC6D5BA36E5AA26E5AA26E5AA26E5AA22D257EA432>I<B500E0
B538C07FFFA43D07FC0007F80003E06C6C17C06F7E6D010714076C6F1480A26CD9800FEC0F0082
02C05D017F90391E7F801EA2DAE03E143E013F90393C3FC03C02F0157C011F9039781FE078A2DA
F8F814F8010F496C6C5A02FC14F1D907FD5D9238E007F902FF14FB6D496CB45AA26D5E4B7EA26D
90C790C7FCA26E5C027E147EA2023C143C40257EA445>I E /Ff 43 122
df<ED0FFF4AB512E0020F14F8023F809139FFF801FE01039038C0007F4990390001FF80D90FFC
5B4948814A5B133F5C137FA3705BA27090C7FCEE007C94C8FCA593387FFFE0B9FCA526007FF0C7
FCB3B1003FB5D8E07FEBFFC0A53A467EC541>12 D<B612FEAA1F0A7F9B27>45
D<EA07E0EA0FF0EA3FFCA2EA7FFEB5FCA6EA7FFEEA3FFCA2EA0FF0EA07E01010788F20>I<EC03
C04A7E141F147FEB01FF131FB6FCA413E1EA0001B3B3AE007FB7FCA5284277C13A>49
D<ECFFE0010F13FE013F6D7E90B612E0000315F82607FC037F3A0FE0007FFE48486D7E48C76C13
8001C06D13C0D87FF06D13E06D7F00FF16F07F8117F8A36C5AA26C5A6C5A0003C7FCC814F0A25D
17E0A24B13C017805D17004B5A4B5A5E4B5AEDFFC04A5B4A90C7FC4A5A15F84A5A4A5ADA3F8013
F84AC7FC14FE495A4948EB01F0EB07E0495A495A49C71203017E140790B7FC4816E05A5A5A5A5A
5AA2B812C0A42D427AC13A>I<EC7FF80103B57E011F14E04914F89039FFC03FFE3A01FC000FFF
48486D1380D807E015C001F87FD80FFE15E07F4816F01480A56C130017E06C5AD801F84913C0C8
FC17805D17004B5A4B5AED7FF0913803FFE00103B512804BC7FC6F7E16F090C7EA7FFCED0FFF6F
13806F13C017E06F13F017F8A26F13FCA34816FEEA0FE0EA3FF8487EA2487EA317FCA24B13F86C
5A17F0495BD83FE015E06C484913C0D80FF04913806CB4013F13006C90B55AC615F8013F14E001
0F1480010001F0C7FC2F437BC13A>I<161F4C7E167FA216FF5D5D5DA25D5D5D5DA292B5FC5CEC
03F7EC07E7EC0FC71587141FEC3F07147E14FC14F81301EB03F0EB07E0EB0FC01480EB1F005B13
7E5B5B485A1203485A485A5B48C7FC5A127E5AB912E0A5C8000FEB8000AC027FB612E0A533427D
C13A>I<0003ED0380D807E0141F01FFEB03FF91B6FC17005E5E5E5E5E16804BC7FC15F815E092
C8FC01C0C9FCAAEC7FF001C3B5FC01CF14C090B612F09138C03FF89039FE001FFE01F8EB07FF13
E0496D138017C06C5AC86C13E0A217F0A317F8A2EA0780EA1FE0487E487EA212FF7F17F05BA217
E06C485B4915C0EA3F8090C74813806C6C4913006D5BD80FF0495A3A07FE01FFF86CB65AC615C0
6D91C7FC010F13FC010113802D437AC13A>I<EDFFC0020F13F8023F13FE91B6FC01039038C03F
80903A0FFE000FC049481307D93FF0EB3FE04948137F4948EBFFF05A48495A14005AA248486D13
E0A2001FED7FC0EE3F80003F92C7FC5BA2127FA291380FFF804A13E000FF017F13F891B512FE90
39FDF007FF4A6C13809026FFC00113C04A6C13E091C7FC17F0EE7FF85B17FCA34915FEA4127FA5
123FA217FC121F7FA2000F16F8A20007EDFFF06D15E06C6D5A6C16C06CD9E003138090267FF00F
13006DB55A6D14F8010714E0010114809026001FFCC7FC2F437BC13A>I<EE07C04C7EA24C7EA3
4C7EA24C7EA24C7EA34B7FA24B80A34B8016CF030F801687A2031F801603033F80ED3E01037E80
157C8203FC804B137F0201815D830203824B7F0207824B7FA2020F824B7F021F8292C77E4A8214
3E023FB7FC4A82A291B87EA202F8C8127F0101834A810103844A81A20107844A81010F844A81A2
49C98084D97FC083B66C0107B612FEA54F467CC558>65 D<B912C018FCF0FF8019E019F8D8001F
90C700037F9438007FFE727E7213807213C0841AE0A2841AF0A71AE060A24E13C01A80604E1300
4E5A943801FFF805075B92B712804EC7FC727E19F092C813FCF01FFF7213C07213E07213F07213
F8841AFCA2F17FFEA21AFFA285A461A21AFEA219FF1AFC604E13F84E13F060063F13E04DB51280
BB120019FC19F0198006F8C7FC48457CC453>I<DC7FFE140E030FB500C0131E92B600F8133E02
0303FE137E020F9238FF81FE023FD9F80013E391B5C7EA0FF7010301F8EC03FF4901E0804949EC
007F013F90C9123F4948161F4A160F4948160748491603485B1901484916005A4A177E5AA24890
CBFC1A3EA25AA2491800A312FFAB127FA37F1A3E7EA36C7FA26C197C807E6C6D17F8806CF001F0
6C6D16036D6CEE07E06EEE0FC06D6C161F010F01C0ED3F806D6DED7F006D01F8EC01FE010001FF
EC0FF8023F01F8EB7FF0020F90B612C0020393C7FC020015FC030F14E09226007FFEC8FC47477A
C554>I<B712FCA5D8000FEBC000B3B3B3A5B712FCA526457DC42C>73 D<0103B71280A590C700
0FEB8000B3B3A9EA07C0EA1FF0487E487EA2487EA34B90C7FCA25B007F4A5A495C6C48495A6C48
495A260FFC075B6CB65A000192C8FC6C6C13F80107138031467DC43C>I<B712FEA5D8001F0180
C9FCB3B2F001F0A4180319E0A41807A3180FA2F01FC0A2183F187F18FF5F1707171F94B5FCBA12
80A53C457CC446>76 D<923803FFF0037FEBFF800203B612F0021F15FE027F9039003FFF80DAFF
F801077F010301E0010113F04901806D6C7E4990C86C7ED93FFE6FB4FC49486F7F49486F7F4A81
48496F7F488548496F7FA24849707EA2488591CA123FA24885A34848711380A400FF1AC0AD007F
1A80A26D5FA36C1A00A26E5E6C61A26C6D4C5AA26C6D4B5BA26C6D4B5B6C616E5D6C6D4B5B6D6C
4B5B6D6C4B90C7FC6D6D4A5A010701E0903801FFF86D01F801075B6D01FF013F5B6D6C90B61280
021F4BC8FC020315F0DA007F1480030301F0C9FC4A477AC557>79 D<B97E18F818FF19C019F0D8
001F90C7000F13FC05007FF03FFF7213807213C0841AE0A27213F0A21AF8A81AF0A34E13E0A21A
C0604E13804E1300F0FFFE050F13F892B75A19C04EC7FC18E00380CAFCB3A8B712F0A545457CC4
50>I<B812F8EFFFC018F818FF19C0D8001F90C7003F7F050313F805007F727E727E727FA28684
A286A762A24E5BA297C8FC4E5A4E5A4E5A05035B053F13C092B7C9FC18FC18F018FC92C77FEF3F
FF050F7F717F717F85717FA2717FA785A6F30380F307C085841B0F7201801380A2B700E06D9038
C01F0072EBF07F0603EBFFFE7214F8DE003F5BCC000313C052467CC457>82
D<DA7FF813070107B55B011FECE01F017FECF83F90B6EAFE7F0003D9C00FB5FC4848C7FC484814
3F49140F4848804980003F814980007F82A28312FFA27F837FA27F01FE92C7FC6C6C7E14F0ECFF
806C14FCEDFFC06C15FC16FF6C16C06C826C826C826C82013F81010F8101031680EB007F020715
C0EC003F030114E0ED001F82040313F08282127800F8167FA2173FA36C17E0A37E6CEE7FC0A26D
168001E015FF6D4A130001FC4A5AD9FF80EB0FFC02FCEB3FF8D8FE3FB65AD8FC0F15C0D8F80392
C7FC48C66C13FC48010313E034477AC541>I<003FBA12FCA5DA0007EBE000D87FF8EF1FFE01E0
170749170349170190C71600A2007E197EA2007C193EA500FC193F48191FA5C81700B3B3A20107
B812E0A548447CC351>I<903807FFFC017FEBFFC048B612F04815FC489038001FFF03077F486D
6C7F6F7F8183167F6C90C77FA26C5AEA00F890C8FCA392B5FC143F0103B6FC011FEBFE7F017F13
003801FFF8000713C04890C7FC485A485A485AA2485AA516FF6C7EED01DF6C6C13036D90380F9F
FE3C1FFFC07F1FFFF000079026FFFE0F13F80001ECF8076C6CEBE003010790C713F0352D7DAC39
>97 D<EB7FC0B5FCA512037EB2ED1FFC92B57E02C314F002CF14FC9139FFE01FFE92390007FF80
02FC010113C04A6D13E04A147F4A15F0EF3FF8A218FCA2EF1FFEA418FFA918FEA4EF3FFCA218F8
177F18F06EECFFE06E4913C06E49138002BF49130091391FC03FFE496CB512F8D9FC0314E049C6
148049D91FF8C7FC38467CC541>I<91381FFF8049B512F0010714FC011F14FF90267FF8031380
EBFFE048494813C0481380481300485A121F496D1380123F6F13004848EB007C93C7FCA312FFA9
127FA27FA2123FEE01F06C7EA26C6CEC03E06C15076C6DEB0FC06C6DEB1F806C01F0EB3F009039
7FFC01FE011FB55A010714F0010114C09026001FFCC7FC2C2D7CAC34>I<EFFF804BB5FCA5ED00
0782B2EC1FFC49B51283010714E3011F14FB90267FFC03B5FC9039FFE0007F48497F48497F4890
C77E484880121F5B123FA2485AA412FFA9127FA46C7EA2121FA26C6C5C00075D6D5C6C6D5B6CD9
E001B512C027007FF80714FF6DB512E7010F14C70101EBFE079038003FF038467CC541>I<EC3F
FE49B512C0010F14F8013F8090397FF80FFE9039FFE001FF48D9800013804890C7EA7FC048ED3F
E0484815F0001F151F4915F8123F160F485A17FCA212FFA290B7FCA317F801F8C9FCA5127FA27F
123F1738001F167C6C7E17FC6C6CEC01F86C6DEB03F06C6DEB07E06C01F0EB3FC0903A3FFE01FF
806DB6120001075C010014F0020F90C7FC2E2D7DAC35>I<EDFFC0020F13F8023F13FE91B6FC01
0313C1902607FE031380EB0FFC49484813C014F0133FA249486C1380A26F13006F5A93C7FCAAB6
12FEA526007FF0C8FCB3B1003FB512F8A52A467DC524>I<173FDA7FF0EBFFC00107B5000313E0
011F14CF017F9138FFCFF0903AFFE03FFE1F489038800FFC4890380007FE4848903903FF0FE0A2
48486DEB8380EF8000001F82A7000F5EA26C6C4990C7FCA26C6C495A6C6D485A6C9038E03FF848
90B55A16C0D803C791C8FC9038C07FF0000790CAFCA47F7F7F90B612E016FF6C16C017F06C16FC
836C82A200031780120FD81FF8C7001F13C0D83FE014034848020013E0177F4848153FA56C6CED
7FC0A26C6CEDFF806D5C6C6C4A13006CB4EC1FFE000301E0EBFFF8C690B612E0013F1580010702
FCC7FCD9007F13C034437DAD3A>I<EB7FC0B5FCA512037EB24BB47E030F13F0033F13FC92B57E
9139C1FC0FFF9126C3E0037FECC780DACF008002DE7F02DC8114F8A25CA35CB3A7B600C0B612C0
A53A467CC541>I<13FC48B4FC4813804813C05A4813E0A66C13C07E6C13806C1300EA00FC90C7
FCAAEB7FC0B5FCA512037EB3AFB6FCA518477CC620>I<EC01F84A7E4A7E4A7E4A13804A13C0A6
6E13806E13006E5A6E5A6E5A91C8FCAAED7FC049B5FCA5EB000380B3B3A7EA1FC0EA3FE0EA7FF0
EAFFF84A1380A24A13005D4A5A6C48485A6C48485A6CB55A6C5C6C91C7FC38007FF0225B87C624
>I<EB7FC0B5FCA512037EB293B512E0A593381FF00017C04C5A4CC7FCED01FE4B5AED07F04B5A
4B5AED7F804BC8FCECC1FCECC3FE14C7ECDFFF91B57E828214FD02F87F4A7F9138C07FFC153F6F
7E6F7E83816F7F6F7F836F7F167F707E707E83B60081B512FCA536467CC53D>I<EB7FC0B5FCA5
12037EB3B3B3A4B61280A519467CC520>I<90287FC001FF8049B47EB5010F01F0010F13F0033F
01FC013F13FC92B56C90B57E913DC1FC0FFF01FC0FFF9126C3E003902683E0037F0003D9C780EC
87806CD9CF00DACF008002DE6D01DE7F02DC03FC8102F85DA24A5DA34A5DB3A7B600C0B600C0B6
12C0A55A2D7CAC63>I<903A7FC001FF80B5010F13F0033F13FC92B57E9139C1FC0FFF9126C3E0
037F0003EBC7806CD9CF008002DE7F02DC8114F8A25CA35CB3A7B600C0B612C0A53A2D7CAC41>
I<EC1FFF49B512F0010714FC011F14FF90267FF80313C09026FFE0007F480180EB3FF04890C76C
7E48486E7E000F8248486E7EA2003F17804980007F17C0A400FF17E0AA007F17C0A36C6C4A1380
A2001F1700A26C6C4A5A00075E6D141F6C6D495AC601E0EBFFE090267FFC075B011FB6C7FC0107
14FC010114F0D9001F90C8FC332D7DAC3A>I<90397FC01FFCB590B57E02C314F002CF14FC9139
FFE03FFE92390007FF80000301FC6D13C06C496D13E04A7F4A15F0EF7FF8A2EF3FFCA218FEA217
1FA218FFA918FEA2173FA218FC177F18F8A2EFFFF06E4913E06E4913C06E49138002FF49130092
38C07FFE02EFB512F802E314E002E01480DB1FF8C7FC92C9FCAFB612C0A538417CAC41>I<9039
FF803F80B5EBFFE0028313F8028713FC91388FC7FE1507000390389E0FFF6C13BC14B814F89138
F007FEA2ED03FC9138E000F01600A35CB3A5B612E0A5282D7CAC30>114
D<90390FFF01C0017F13E70003B6FC5A380FF801391FC0003F4848131F48C7120F1507A25AA27F
6D90C7FC13F8EBFF806C13FEECFFC06C14F015FC6C14FF6C15806C15C0000115E06C7E011F14F0
1300020313F8EC007F0078141F00F8140FA26C1407A216F07E7E6DEB0FE07F6DEB3FC001FCEBFF
8090B61200D8FC7F13FCD8F81F13F0D8E0031380252D7CAC2E>I<EB01F0A51303A41307A2130F
A2131FA2133F137F13FF1203000F90B512C0B7FCA4C601F0C7FCB3A4ED01F0A9017F14E0ECF803
A290393FFC07C090391FFE0F806DB5FC6D1400010113FC9038001FF024407EBF2D>I<D97FE0EC
7FE0B591B5FCA5000315036C81B3A85EA25E7E160E161E6D6C017C7F90273FFC01F8EBFFC06DB5
5A6D5C010114809039003FFC003A2D7CAC41>I<B6903807FFFCA5000301E09038007F006C163E
6E147E6C167C6E14FC017F5D6E1301013F5D801603011F5D6E13076D5DED800F6D5DEDC01F6D92
C7FC6F5A6D143E15F0167E6D147CEDF8FC027F5B15FD023F5B15FF6E5BA26E5BA36E5BA26E90C8
FCA26E5AA26E5A1578362D7DAC3D>I<B6000FB539C00FFFF8A500039027C0003FF8C7EA7F0004
1F157E6C6D6E147CA26E010F15FC6C4B6C5C19016D6C6E5C5E6E1603013F4A01805B047D14076D
6C03C05B16FD6E01F8140F6D010102E05BDCF07F131F6D018102F090C7FC15839226C3E03F5B6D
01C7ECF83EDCC01F137E6D01E7ECFC7C15EF9226FF800F13FC6D705A93380007FF6E5EA24B7F02
3F5E4B7F021F5EA24B7F020F5E4B147F020793C8FC4B806E48141E4D2D7DAC54>I<007FB53980
03FFFEA5000101F0C7EA3F806CEE1F006E5C017F153E6E147E013F157C6E14FC011F5D8016016D
5DED80036D5DEDC0076D5DEDE00F6D5DEDF01F6D92C7FC15F85E027F133EEDFC7E023F137CEDFE
FC021F5B15FF6E5BA26E5BA36E5BA26E5BA26E90C8FCA2157EA3157C15FC5D1401D81F805B383F
C003D87FE05B38FFF0075D140F4A5A92C9FC5C387FE0FEEB43FC6CB45A6C13E000071380D801FE
CAFC37417EAC3D>121 D E /Fg 12 117 df<163E167F4B5A1507151F157F0203B5FC141F0103
B6FCB8FCA514E3EBFC03C7FCB3B3B3B2003FB912E0A73B5F74DE54>49 D<EDFFFE021FEBFFF091
B7FC010716C0011F16F04916FC90B9FC4849C6814801E0011F804801800107804848C7000180D8
1FF86E8001FF033F7F486D826E6E7F486D806E1780B5816E17C083A31AE0A2836C5BA26C5BA26C
5B000790C8FC6C485DCA15C0A34D1480A34D140061A24D5B614D5B4D5BA294B55A96C7FC4C5B4C
5B4C5B604C5B4C13804C90C8FC4C5AEEFFF84B5B4B5B17804B90C9FCED0FFC4B48EC0FE04B5A4B
5AEDFF804A90C8EA1FC04A5A4A5AEC0FF04A5A4A48153F4A5A02FEC9FC4948EE7F804948ED01FF
49B9FC5B5B5B5B90BAFC5A4819005A5A5A5A5ABBFCA261A4435F78DE54>I<92383FFF800203B5
12FC021FECFF80027F15F049B712FC01078249D9E00F6D7E90271FFE000180D93FF86D6C7FD97F
E06E7FD9FF808202F080486D82486D826E8080488481A76C91C7FC616C495C6C5B6D485EEB1FE0
90C9485BA2614D5B6194B55A4C91C7FC604C5B040F5B043F13E00303B512800203B548C8FC4A14
F817FEEFFFC06E15F891C7000F13FE04016D7E706C7F7113F0717F717F85717F1A80831AC01AE0
A2831AF0A3D803FF18F8487F487F487F487F487FA2B57EA31AF0A34D14E05C6C19C05C4D14806C
5B4A4A14006C90C85CD80FFC4B5B6CB44B5B6C01E04A5B6C01FC49B55A6C9026FFC00F1480013F
90B7C7FC6D16FC010716F0010016C0021F02FCC8FCDA007F1380456079DE54>I<F00FE04E7EA2
183F187F18FF5F5FA25F5F5F5FA25F94B5FC5E5EA25E5E5EEE3FDF179FEE7F1F16FE1501ED03FC
16F8ED07F0ED0FE0151FED3FC0ED7F80160015FE4A5A14034A5A5D4A5A4A5A143F4A5A92C7FC14
FE495A1303495A5C495A495A133F495A49C8FC5B485A1203485A485A5B485A485A127F48C9FC90
BB1280A7CA6C01F0C7FCB0037FB81280A7495F7BDE54>I<016017E001FCEE03F0D9FF80151F02
F8EC01FFDAFFC0017F5B92B7FC616196C7FC606060606060604DC8FC5F17F017C04CC9FC16F0DA
0FFECAFC91CCFCAD92381FFF804AB512FC020FECFF80023F15E091B712F8DBE0077F4AC713FF02
F86E7F02E06E7F02806E7F91C86C7F4983498301788190C98085A2711480A31AC0A41AE0A2EA07
FC487E487E487F487F80B5FCA31AC0A44A17806C5E5C91C815006C485F01F85DD81FC05F6D5F6C
6C5D6C6C4B5B6D5F6CB492B55A6C01C0495C6C01F0010749C7FC6DB4017F5B011F90B612F06D5E
01031680010003FCC8FC021F14E0020101F8C9FC436078DE54>I<95267FFFC01538053FB500FE
157C0403B700C0EB01FC041F04F8130393B800FE130703039438FF800F031FF0E01F037F9126FE
001FEBF03F92B600800101EBF87F020302FCC8003FB5FC4A02E0150F021F028015034A49CAFC4A
01F88391B548171F4902C083494A834991CB7E494984495B49864949197F5D90B51A3F485C1D1F
485C1D0F485CA2481C0792CDFC5A1D03A2485BA2F501F84899C7FCA35CA2B5FCB07EA280A37EA2
1EF86C6DF201FCA37E817E1D036C6E1AF8A26C6E19071EF06C806D1B0F6FF11FE06D7F6DF33FC0
6D6DF17F806D7F6D6EF0FF006D6E4D5A6D02F0EF07FC6E6D4D5A6E01FEEF3FF06E6D6C4C5A0207
02E04B485A6E02FC030F5B0200DAFFC0027F90C7FC6F02FE90380FFFFC031F91B75A030318E003
001880041F04FCC8FC040316F0DC003F92C9FCDD007F13E0666677E479>67
D<020FB5FC49B612F8010F15FF4916C04916F090277FFC001F7F01FF020313FE486D01007F717F
486D6E7F858385717FA26C5B717F6C5B6D5A6D5AEB0FC090C9FCA64BB6FC157F0207B7FC147F49
B5EAFE07010F14C0013FEBFE004913F090B512C0000391C7FC4813FC485B485BA2485B5A5CA2B5
5AA45FA36E5C7E6E5C6C167D6C6D02F97F6C6D0103ECFFC06C01FED90FF1ECFFC06C9027FFC07F
E015E06C91B5EA807F6C6C1500011F02FC131F010302F01307D9001F0180010014C04B417BC051
>97 D<92380FFFC092B512FE0207ECFFC0023F15F091B712FC010349C613FF4901F8013F7F011F
01E0010F7F49496D7F4990C76C7F49488048707F48496F7EA248498248173F4A825A84481980A2
5C5A7213C0A3B5FCA291B9FCA41A8002E0CBFCA57EA46C7FA37E6EEE0F806CF01FC0A26C6D163F
6C19806E167F6C6DEEFF006C6E5C6D6D4A5A6D6D4A5A6D01F8EC1FF86D01FEEC7FF00103903AFF
C007FFE06D91B65A6D6C93C7FC021F15FC020315F0DA007F1480030301F0C8FC42417BC04D>
101 D<903807FFC0B6FCA7C6FC7F7FB3A894380FFF80057F13F80403B512FE040F6E7E4C819326
3FF01F7F9326FF800F7F9227C1FC00077FDBC3F881DBC7E07F4C81EDCF8003DFC77E15DE03FE82
5DA25DA25DA35DB3B2B7D8F807B712C0A7526579E45D>104 D<902607FFC0EB7FFEB60107B512
E0043F14FC93B7FC03C316C003CF16F003DFD9807F7F9227FFF8000F7FC603E06D7F6D02800101
7F6D49C8804B834B6F7F4B6F7F5D737FA2737FA28785A287A3851C80AD1C0061A363A26163A24F
5B63616F5F4F5B6F92B55A6F94C7FC6F4A5B6F6C495B70010F5B04F0013F5B9226EFFF01B512C0
03E790B65A03E14BC8FCDBE07F14F0041F1480040101F0C9FC93CCFCB3A3B712F8A7515D7BC05D
>112 D<903A0FFF8003FFB6010F13E0043F13F84C7F93B57E923981FE0FFF922683F81F138092
2687E03F13C0C6EC8FC06D90269F807F13E06D140015BEA215FCA24B6D13C0A24B6D1380711300
715AEF01F84B90C8FCA55DB3AEB712FEA73B417BC045>114 D<EC03F8A71407A4140FA3141FA3
143FA2147F14FFA25B5B5B5B5B137F48B81280120FB9FCA5D8000F01F8C8FCB3AEEF07F0AD6DED
0FE081171F6D16C06F133F6D6DEB7F806D9138C1FF006EEBFFFE6E5C6E5C02075C020014C0030F
90C7FC345D7DDC41>116 D E /Fh 71 126 df<003C1378007E13FC00FE13FEA6007E13FCA900
7C137CA4003C137800181330171778AF28>34 D<90381E01E090383F03F0A7EB7F07017E5BA200
3FB512FE4880B71280A36C15003900FC0FC0A50001131F01F85BA6007FB6FCB71280A36C15006C
5C2603F03FC7FCA200075BEBE07EA83803C03C212F7DAE28>I<120FEA1F80EA3FC013E0A213F0
121F120F1201A5120313E01207A2EA0FC0EA1F80123FEA7F0012FE5A5A12700C1972AE28>39
D<14E0EB03F01307EB0FE0EB1FC0EB3F00137E5B485A485A485A5B120F5B121F90C7FC5A123EA2
127E127CA312FC5AAA7E127CA3127E123EA2123F7E7F120F7F12077F6C7E6C7E6C7E137E7FEB1F
C0EB0FE0EB07F01303EB00E0143A74B428>I<127012FC7E127F6C7EEA0FC06C7E6C7E6C7E6C7E
137E133E133F7F1480130F14C01307A214E01303A314F01301AA130314E0A3130714C0A2130F14
80131F14005B133E137E5B485A485A485A485AEA3F8048C7FC12FE5A1270143A79B428>I<EB01
E0497EAD007FB6FCB71280A46C1500260003F0C7FCAD6D5A21227DA828>43
D<EA0F80EA1FC0EA3FE0EA7FF0A213F8A2123F121F120F1200120113F01203EA07E0121FEA7FC0
EAFF80130012FC12700D15728928>I<007FB512FCB612FEA46C14FC1F067C9A28>I<121E123FEA
7F80EAFFC0A4EA7F80EA3F00121E0A0A718928>I<151C153E157EA215FE15FC140115F8140315
F0140715E0140F15C0141F1580143F15005C147EA214FE5C13015C13035C13075C130F5C131F5C
133F91C7FC5B137E13FE5BA212015B12035B12075B120F5B121F5B123F90C8FC5A127E12FE5AA2
5A12781F3B7CB428>I<EB0FE0EB3FF8497E497E487F3903F83F803907E00FC0390FC007E0EB80
03001F14F0EB00014814F8003E1300A248147CA448143EAC6C147E007C147CA3007E14FC003E14
F8A2003F13016C14F0EB8003390FC007E0A23907E00FC03903F83F806CB512006C5B6D5A6D5AEB
0FE01F317CAF28>I<1306130F5BA25BA25B5B1203123F5AEAFFDF139FEA7E1F1200B3AB003FB5
12804814C0A36C14801A3079AF28>I<EB3FE0EBFFFC000313FF4814804814C0391FE07FE0393F
000FF0007EEB03F8007C130100FCEB00FC157C157E6C143EA3127C1238C8FC157E157CA215FC15
F81401EC03F0EC07E015C0140FEC3F80EC7F0014FE495AEB03F0495AEB1FC0495A49C7FC13FEEA
01F84848131CD80FE0133E485A485A48B512FEB6FCA36C14FC1F307CAF28>I<EB0FF8EB7FFF48
B57E48804880390FF80FF0391FC003F8EB80006D7F157CA26C5A6CC7FCC8FC15FC5D14014A5A14
07EC3FE090381FFFC0495B92C7FC15C06D13F09038000FF8EC01FCEC007E153E153F811680150F
A21238127C12FE151F1600485CA2007E147E6C6C485A9038F00FF86CB55A6C5C00035CC691C7FC
EB1FFC21317DAF28>I<EC3F804A7EA214FFEB01FB14F31303EB07E314C3130FEB1F831403133F
133E137C13FC13F8EA01F0120313E0EA07C0120F1380EA1F005A123E5A12FCB712C016E0A36C15
C0C73803C000A949B512804914C0A36D1480232F7EAE28>I<000FB512E04814F0A315E090C8FC
ACEB0FF8EB3FFE90B5FC15C015E09038F80FF0EBC00390388001F890C712FC120EC8127C157E15
3EA31210127C12FE157EA2157C4814FC007CEB01F8007E1303393F800FF09038E03FE06CB512C0
6C14800003EBFE006C5B38003FE01F307CAE28>I<14FF010713C0011F13E04913F04913F89038
FF81FC3801FC01EA03F8EA07E0EA0FC090388000F8001F140090C8FC5A123E127E127C14C0EB1F
FC38FC7FFF48B5128000FB14C0B612E09038E00FF090388003F8EB000148EB00FC157C48147EA2
153EA3127CA3127E003E147E003F147C15FC391F8001F81403390FE007F03907F81FE06CB512C0
6C14806C1400EB7FFCEB0FF01F317CAF28>I<EB0FF8EB7FFF48B512C048804880390FF80FF839
1FC001FC48486C7E90C7127E007E80007C80A56C143E003F147E6C6C5B6C6C485A3907F007F06C
B55AC61480D91FFCC7FCEB7FFF48B512C03907F80FF0390FC001F848486C7E48C7127E007E8000
7C80A248EC0F80A56C141F007C1500007E5C007F5C6C6C13FE6C6C485A390FF80FF86CB55A6C5C
6C5C6C6C90C7FCEB0FF821317DAF28>56 D<EB1FF0EB7FFC48487E487F481480390FF83FC0391F
C00FE0393F8003F01300007EEB01F8007C130012FC4814FC157CA3157EA37EA2007C14FE127E6C
1301EB8003381FE00F6CB5FC6C14BE6CEBFE3E6CEBFC7E38007FF0903806007C90C7FC15FC15F8
A21401EC03F0123E007FEB07E0EC0FC0141FEC7F80903801FF006CB45A6C5B6C13F06C5B000190
C7FC1F317CAF28>I<121E123FEA7F80EAFFC0A4EA7F80EA3F00121EC7FCAD121E123FEA7F80EA
FFC0A4EA7F80EA3F00121E0A2171A028>I<120FEA1F80EA3FC0EA7FE0A4EA3FC0EA1F80EA0F00
C7FCAD120FEA1F80EA3FC0127F13E0A3123F121F120F1203120713C0120F1380123FEA7F0012FE
5A5A12700B2C72A028>I<151C157E15FE14031407EC1FFCEC3FF0ECFFE049138001071300EB0F
FCEB3FF8EB7FE048485A4890C7FCEA0FFEEA1FF8EA7FF0EAFFC05BA27FEA7FF0EA1FF8EA0FFEEA
03FF6C13C06C6C7EEB3FF8EB0FFC6DB4FC010113806D13E0EC3FF0EC1FFCEC07FE14031400157E
151C1F287CAB28>I<007FB6FCB71280A4003F1500CAFCA6003FB6FCB71280A46C150021127DA0
28>I<127012FC7E6C7E7FEA7FF0EA1FF8EA0FFEEA03FF6C13C06C6C7EEB3FF8EB0FFC6DB4FC01
0113806D13E0EC3FF0EC1FFCEC07FE1403A21407EC1FFCEC3FF0ECFFE049138001071300EB0FFC
EB3FF8EB7FE048485A4890C7FCEA0FFEEA1FF8EA7FF0EAFFC05B48C8FC5A12701F287CAB28>I<
14FE903807FFC0011F7F497F90B57E48EB81FC3903FC007C01F07F3907C00FBE390F803FFF4848
5A91B5FCEA3E01EB03F8007C9038E03F80903807C01F1278EC800FEAF80F12F0EC0007A7EC800F
12F8D8780714006E5A127C903803E03E003EEBF8FE6DB45A6C6C5B6E5A6C6C6C5A3907C00F8039
03F0000F01FCEB3F803901FF81FF6C90B51200013F5B6D13F801075B01001380212F7DAE28>64
D<EB01F0497EA2497EA214BCA3EB0FBEA2141EA2EB1F1FA490383E0F80A5496C7EA4496C7EA548
B57EA44880EBE000A44848137CA33A7FF803FFC0486C4813E0A36C486C13C0232F7EAE28>I<90
3803FC0390390FFF0780013F13CF4913EF90B6FC4813073803FC00D807F0137F4848133F5B4848
131FA248C7FC003E140F127EA2007CEC070092C7FC12FCA25AA97EA2127CA2007E1407ED0F8012
3E123F6C7E151F6C6C14006D5B6C6C137ED803FC13FE3901FF03FC6CEBFFF86D5B6D13C0010F5B
D903FCC7FC21317DAF28>67 D<007FB6FCB71280A37E3907C0000FA6ED070092C7FCA4140E141F
A390B5FCA5EBC01FA3140E91C8FCA5ED0380ED07C0A7007FB6FCB7FCA36C1580222F7DAE28>69
D<007FB61280B712C0A37E3903E00007A6ED038092C7FCA514074A7EA390B5FCA5EBE00FA36EC7
FC91C8FCAC387FFF80B57EA36C5B222F7EAE28>I<903807F01890381FFC3C90387FFE7C90B5FC
4814FC3803FE1F3807F007EBE003380FC001EA1F80140048C7FCA2003E147C127E127C153892C7
FC12FC5AA791380FFF804A13C0A36C6D1380007C9038007C00A3007E14FC123E123FA2381F8001
A2380FC003EA07E0EBF0073803FC1F6CB5FC6C147CEB7FFE90381FFC38D907F0C7FC22317DAF28
>I<007FB512C0B612E0A36C14C0D8001FC7FCB3B3007FB512C0B612E0A36C14C01B2F7AAE28>
73 D<387FFF80B57EA36C5BD803E0C8FCB3AB1507ED0F80A7007FB6FCB7FCA36C1500212F7DAE
28>76 D<3A7FE003FFC000FF4913E013F0A26C6C6C13C03A07B8003C00A213BC139CA2139E138E
138FA213871480A2138314C0A2138114E0A2138014F0A214701478A21438143CA2141C141EA214
0E140F1407A215BC1403A2D87FF813FC38FFFC01A214006C485B232F7EAE28>78
D<EBFFFE0007EBFFC04814E04814F04814F8EBC007397F0001FC007E1300007C147CA300FC147E
48143EB3A66C147EA2007C147CA2007E14FCA2007F1301393FC007F890B5FC6C14F06C14E06C14
C0C6EBFE001F317CAF28>I<387FFFF0B512FE8015C06C803807C01FEC07F06E7E14011400157C
A65D140114034A5AEC1FE090B5FC5D92C7FCA2819038C01FC0EC07E01403811401A8167016F8A2
15F8397FFC00F9486CEBFFF0A2ED7FE06C48EB3FC0C8EA0F8025307EAE28>82
D<90387FC0303901FFF87848EBFCF8000F13FF5AEBE07F383F000F007E1307007C130300FC1301
5AA21400A36C1470007C1400127E7E13C0EA1FFC380FFFC06C13FC000113FF6C6C1380010713C0
9038007FE0EC07F0EC01F8EC00FC157CA2157E0070143E12F8A46C147E157C6C14FC7E9038C003
F89038F80FF090B512E015C000F91480D8F07F130038600FF81F317CAF28>I<007FB612C0B712
E0A439F801F003A60070EC01C0000091C7FCB3AC90387FFFC090B57EA36D5B232F7EAE28>I<3A
7FFC01FFF0486C4813F8A36C486C13F03A07C0001F00B3AC6D5B0003143EA26D137E0001147C6D
13FC6C6C485A90387F07F06DB45A6D5B6D5B6D90C7FCEB01FC25307FAE28>I<D87FF8EBFFF048
6C4813F8A36C486C13F0D807E0EB3F000003143E6D137E0001147C6D13FC00005CEBFC01017C5B
EB7E03013E5BA26D485AA290380F8F80A3D907DFC7FCA2EB03FEA26D5AA26D5AAF90380FFF8049
7FA36D5B252F7FAE28>89 D<387FFFE0B512F0A314E000F8C7FCB3B3ADB512E014F0A36C13E014
3B70B428>91 D<387FFFE0B512F0A37EEA0001B3B3ADEA7FFFB5FCA36C13E0143B7DB428>93
D<133813FE487E000713C0001F13F0383FEFF8387FC7FC38FF01FE38FC007E0078133C00201308
170B78AE28>I<007FB512FCB612FEA46C14FC1F067C7E28>I<3803FFC0000F13F8487F487F8090
38807F80EC1FC0381F0007000E80C71203A3EB03FF133F48B5FC12074813C3381FF003EA3F80EA
7E005A5AA46C1307007E130F397FC07FF06CB612C06C15E06C13F96C13F000019038003FC02321
7CA028>97 D<EA7FE0487EA3127F1201A9EC3F809038F1FFE001F37F01F713FC90B57E14C1EC00
7F01FCEB1F805BED0FC0491307A216E01503A715076D14C0150FA26DEB1F806D133FED7F009038
FF81FEECFFFC01F75B01F35B01F113C02600E07FC7FC232F7FAE28>I<EB0FFF017F13C090B512
E0000314F05A380FF807EA1FC090388003E0393F0001C0007E90C7FCA2127C12FC5AA77E127C12
7E15706C14F8EA1FC0EBE001390FFC07F06CB512E06C14C0C6148090387FFE00EB0FF81D217AA0
28>I<EC7FE04A7EA3147F1401A9EB1FC1EBFFF14813FD4813FF5A380FF03F381FC00F383F8007
EB0003127E1401127C12FC5AA77E007C1303A2007E13077E140F381FC01F380FF07F6CB612C06C
01FD13E06C13F96C13E1D93F8013C0232F7DAE28>I<EB0FF8EB7FFE90B51280000314C04814E0
390FF81FF0391FE003F8EB800148C712FC003E147C127E007C147E00FC143EB612FEA415FC00F8
C8FC7EA2127C127E6C141C6D133E6C6C137ED80FF013FE3907FE03FC6CB512F86C14F06C14E001
3F1380903807FC001F217CA028>I<EC07F8EC3FFCECFFFE4913FF5B903807F87F14E090380FC0
3EEC8000A6007FB512F8B612FCA36C14F839000F8000B3A5003FB512E04814F0A36C14E0202F7E
AE28>I<ED1F8090391FE07FC090397FF9FFE090B612F05A4814E33A07F87F81E03A0FE01FC0C0
D9C00F130048486C7EA2EB0003A4EB8007A26C6C485AEBE01F3907F87F8090B5C7FC5C485B6D5A
EB1FE090C9FCA27FEA07D090B57E15F04814FC4880393F8000FF007EC7EA1F80007CEC07C00078
140300F815E0481401A46C1403007CEC07C0007E140F6C6CEB3F803A1FF803FF006CB55A6C5C00
0114F06C6C13C0D90FFEC7FC24347EA128>I<EA7FE0487EA3127F1201A9EC7F809038F1FFC001
F37F01F77F90B57E14C149C67E49137CA25BA25BB13A7FFFC1FFF0B500E313F8A36C01C113F025
2F7FAE28>I<131E133F497EA46DC7FC131E90C8FCA7EA7FFFB57EA37EEA000FB3A5007FB512E0
B612F0A36C14E01C307AAF28>I<143C147E14FFA4147E143C1400A73801FFFE4813FFA37EC712
1FB3B1143F0038133E007C137E00FE13FCEB03F8B512F014E06C13C06C1380380FFE0018417CAF
28>I<EA7FC0487EA3127F1201A991387FFF8091B512C0A36E1380913803E0004A5A4A5A4AC7FC
143E5C5CEBE1F013E313E7EBEFF8EBFF7C497EEBFC1EEBF81F496C7EEBE007816E7E6E7E140081
157C3A7FFF83FFE0B500C713F0A36C018313E0242F7EAE28>I<387FFF80B57EA37EEA0007B3B3
007FB512FCB612FEA36C14FC1F2F7CAE28>I<397E1F80FC39FF3FC1FE90387FE3FFD9FFF71380
6C90B5FCD80FF0EB87C09038C0FE07EC7E03EB807CA3EB0078B13A7FE0FF07F8D8FFF1EB8FFCA3
D87FE0EB07F8262180A028>I<397FE07F8039FFF1FFC001F37F01F77F6CB57E000113C149C67E
49137CA25BA25BB13A7FFFC1FFF0B500E313F8A36C01C113F025217FA028>I<EB1FC0EBFFF848
7F487F487F390FF07F80391FC01FC0393F0007E0A2007EEB03F0007C1301A248EB00F8A86C1301
007C14F0007E1303A26CEB07E0EB800F391FC01FC0390FF07F806CB512006C5B6C5B6C5BEB1FC0
1D217BA028>I<397FE03F8039FFF1FFE001F37F01F713FC6CB57E000113C1EC007F01FCEB1F80
5BED0FC0491307A216E01503A715076D14C0150FA26DEB1F806D133FED7F009038FF81FEECFFFC
01F75B01F35B01F113C0D9F07FC7FC91C8FCAC387FFFC0B57EA36C5B23327FA028>I<90381FE0
3890387FF87C3801FFFE4813FF4814FC380FF81F381FE007EB8003383F0001127E1400127C00FC
147C5AA77E007C14FC127E14017EEB8003381FC00F380FF83F6CB5127C6C13FE6C13FC6C13F8EB
1FC090C7FCAC91381FFFF04A13F8A36E13F025327DA028>I<397FF803FE39FFFC1FFF4A13804A
13C0007F90B5FC39007DFE0F90397FF007809138E003004AC7FC5C91C8FCA2137EA3137CAD007F
B57EB67EA36C5C22217DA028>I<9038FFE1800007EBFBC04813FF5A5A387F803F38FC000F4813
07A3EC0380007E90C7FCEA7FC0EA3FFE381FFFF0000713FC000113FFD8000F13809038003FC0EC
0FE00070EB03F000F81301A27EA26C13036CEB07E0EBE03F90B512C01580150000F113FC38607F
F01C217AA028>I<131C133EA9007FB512F0B612F8A36C14F0D8003EC7FCAF151C153EA4013F13
7E157C90381FC1FCECFFF86D13F06D13E06D13C0903800FE001F2B7EAA28>I<397FE01FF8486C
487EA3007F131F0001EB007CB315FCA21403EBFC0F6CB612F016F86D137FEB3FFE90390FF03FF0
25217FA028>I<3A7FFC07FFC0486C4813E0A36C486C13C03A07C0007C0000031478A26D13F800
015CA2EBF00100005CA2EBF80301785BA2EB7C07013C5BA2EB3E0F011E90C7FCA2EB1F1FEB0F1E
A214BEEB07BCA214FC6D5AA26D5A23217EA028>I<3A7FFC01FFF0486C4813F8A36C486C13F000
0FC7EA0780A26D130F00071500A514FC3903C1FE1EA2EBC3FFA43901C7CF1C01E7139C15BCA214
8713EF000014B814079038FF03F8A3EBFE01017E5B25217FA028>I<3A7FFC0FFF80486C4813C0
A36C486C13803A01F003E000D800F85BEB7C0790383C0F80D93E1FC7FCEB1F1EEB0FBEEB07FC5C
6D5A1301A21303497E14BCEB0F1EEB1E1FEB3E0F90383C078001787F9038F803E0EBF001D801E0
7F3A7FFC07FFC0486C4813E0A36C486C13C023217EA028>I<3A7FFC07FFC0486C4813E0A36C48
6C13C03A03C0007C0015786C7E15F86D5B1200140101F85B13781403013C5BA2133E90381E0780
A2130F4AC7FCA2EB078F149EA2EB03DE14DCEB01FCA25C1300A25CA213015CA3495A1208EA3E07
387F0F80A2D87C3FC8FCEA7FFE123F5BEA1FF0EA07E023327EA028>I<003FB512FE4814FFA315
FE007CC712FCEC01F8EC03F0EC07E00038EB0FC0C7EA1F80EC3F00147E5C495A495A495A495A49
5A49C7FC137E5B4848130E4848131F485A485A485A48C7FC48B6FCB7FCA36C14FE20217DA028>
I<EC03FCEC3FFE147F14FF4913FC903803FC00EB07E05CB1130F495AEA01FF007F90C7FC485A13
F813FE6C7E00017FEA001F6D7E1307B180EB03FC903801FFFC6D13FE147F143FEC03FC1F3B7CB4
28>I<EA7F80EAFFF87F7F6C7EC66C7EEB0FC01307B1806D7E14FF6D13FC6D13FE143F14FF4913
FC49130014F0495A5CB1130FEB7F80D87FFFC7FC485A5B5BEA7F801F3B7CB428>125
D E /Fi 12 116 df<4AB46C1340021F01F013C091397F803C01903901FC0007D907E0EB038349
48EB00C7013FC8126F017E153F49151F4848150F485A000716075B000F1603485A1701123F5B17
00127FA290CAFC481700AB7E6D16C0A2123FA27F001FEE0180A26C7E0007EE03007F000316066C
7E6C6C5D017E5D6D5DD90FC05C6D6C495AD901FC0107C7FC9039007F803E91381FFFF802011380
32377BB53D>67 D<B67EA200010180C8FC6C48C9FCB3AD1730A41760A417E0A21601A216031607
EE0FC0163F486CEB01FFB8FCA22C357CB435>76 D<D90FF0138090387FFE013901F00F833903C0
01C348C71267000E143F001E141F48140FA2481407A200F81403A315017EA27E007F91C7FC7F13
E0EA3FFC381FFFC014FC6CEBFFC06C14F00001806C14FE013F7F1303D9001F1380020113C0EC00
7FED1FE0150FED07F0150312C0A21501A37E16E0A26C14036C15C0A26CEC0780B4EC0F00D8F380
131ED8E1E05BD8E07E13F839C01FFFE0D8800190C7FC24377BB52F>83 D<B712E0A23907F8000F
6C4813031500A216601670A21630A2EC0180A21600A21403A2140F90B5FCA2EBF00F1403A21401
A21618A291C7FC16381630A31670A216F01501ED03E0486C130FB7FCA225287DA72B>101
D<B71280A23907F8003F6C4813071503A2150116C0A21500A314031600A45C5C90B5FCA2EBF00F
8080A591C8FCA9487EB512E0A222287DA729>I<B512C0A23807F8006C5AB3B0487EB512C0A212
287DA717>105 D<B512E0A2D807F8C8FC6C5AB3A4ED0180A51503A3ED0700A25D153F486C13FF
B7FCA221287DA728>108 D<D8FFF0913807FF806D5C0007EEF00000035E017C141BA36D1433A2
6D1463A36D6C13C3A3903907C00183A2903903E00303A3903801F006A3903800F80CA2EC7C18A3
EC3E30A3EC1F60A2EC0FC0A2EA0780EC0780D81FE04A7ED8FFFC91B512806E5A31287CA739>I<
D8FFF090381FFF80A2D803F8903803FC006DEB00F07F017E14607F6D7EA26D7E6D7E8013036D7E
6D7EA2147E801580141FEC0FC0EC07E0A2EC03F0EC01F815FC1400157E153FA2ED1FE0150FA215
071503486C1301A2D81FE01300D8FFFC1460A229287DA72F>I<ECFF80010713F090381F80FC90
387E003F01F8EB0F8048486D7E48486D7E48486D7E000F8148486D7EA248C8127EA248157F007E
81A300FE1680A9007FED7F00A36C157E6D14FE001F5DA26C6C495A6C6C495A00035D6C6C495A6C
6C495A017E013FC7FC90381F80FC903807FFF001001380292A7CA831>I<B612C015F83907F800
FE6C48133FED1F80ED0FC016E0150716F0A616E0150F16C0ED1F80ED3F0015FE90B512F815C001
F0C8FCAF487EB512C0A224287DA72B>I<01FF1380000313C1380780F3381E003F001C131F4813
0F007813070070130312F0A21401A27E6C90C7FC7E127F13F06CB4FC6C13F06C7F6C13FE6C7FC6
6C138013079038003FC0140FEC07E01403A200C01301A46C14C0A26C1303158000FCEB07006C13
0E38E7C03C38C1FFF838803FC01B2A7CA823>115 D E /Fj 2 128 df<123C127E12FFA4127E12
3C08087A8715>58 D<EB1FF890B5FC00031480390FC007E0001EC7FC0038147000601430481418
A24814101D0A6CB215>127 D E /Fk 41 122 df<B512FEA817087F941E>45
D<147814F81303131FEA01FFB5FCA3EAFE1F1200B3B3A2007FB512FEA41F337AB22C>49
D<EB0FF890B57E000314E04814F8390FC07FFC391F000FFE003C6D7E007F6D13806D7ED8FFC014
C013E06E13E0A36C5AA26C5A000EC7FCC813C0A25C16804A13005D14075DEC0FF04A5A5D4A5A02
7EC7FC5C495AEB03E0903907C001E0EB0F80EB1F00013C13034914C05B4848130748B6FC5A5A5A
5A5AB71280A423337CB22C>I<EB0FFC90387FFF8090B512E03903F81FF83907C007FCD80F807F
6D6C7EEA1FE001F01480EA3FF8A5D81FF01400EA0FE0EA07C0C7485A5D5D4A5A4A5AEC7FC0D91F
FFC7FC14FCECFFC09038001FF0EC07F815FE6E7E16808016C0A2000F15E0EA3FC0EA7FE0A2EAFF
F0A316C013E0007F49138013C0D83F0014006C6C485A390FF01FFC6CB55A6C14E0C61480D90FFC
C7FC23347CB22C>I<153E157EA215FE140114031407A2140F141F143F147F147B14F3EB01E3EB
03C313071483EB0F03131E133C137C13F813F0EA01E0EA03C01207EA0F801300121E5A127C5AB7
12FEA4C73807FE00A9010FB512FEA427327EB12C>I<00041406D80F80131E9038F801FE90B55A
5D5D5D5D5D92C7FC14FC14F0011FC8FC90C9FCA6EB03FE90381FFFC0017F7F9038FC0FF89038E0
03FC496C7E01807F0100148000067FC813C0A316E0A2120C123F487E7F487EA216C05BA26C4848
13801300003C1500003E495A6C6C485A390FE01FF86CB55A000114C06C91C7FCEB1FF823347CB2
2C>I<EC3FC0903803FFF0010F7F90381FE07C90387F801E9038FE003F48485B0003ECFF804848
5A120F13F0121F6E1300003F147E49133C92C7FC127FA214209038E1FF80D8FFE313E001E77F90
38EE03FC9038FC01FE01F87F8049148016C0A25B16E0A4127FA5123F16C0A2121F6D1480000F15
006C6C5A00035C3901FE07FC6CB55A6D13E0011F1380D903FEC7FC23347CB22C>I<123C123F90
B612F8A44815F016E016C0168016005D007CC7123E00785C5D00F8495A485C4A5A1407C7485A4A
C7FC141E143E147E147C14FCA2495AA21303A21307A25C130FA3131FA5133FA86D5AA2EB078025
357BB32C>I<150F4B7EA24B7EA34B7EA24B7EA34A7FA24A7F15DF02077F159F158F020F7F1507
021F80EC1E03A2023E80EC3C01027C80EC7800A24A80167F0101814A133FA2494880161F49B67E
A24981A291C712074982011E80013E82013C80A2017C8201788001F88249157FB500E0013FB512
F0A43C357DB443>65 D<B712FCEEFFC017F883C69039C0001FFF040713807013C0827013E0A2EF
7FF0A617FF18E0A24C13C04C13804C13004C5AEE7FF891B612E05F17F89139C00007FE933803FF
80040013C018E0EF7FF0A2EF3FF8A218FCA718F8177FA2EFFFF04C13E04C13C0040F1380B91200
17FC17F0178036357DB43F>I<DBFFE01318020F01FE1338027F9038FF807849B6EAC1F8010790
38E007F3011F90C712FFD93FF8147FD97FE0141F4948140F484914074890C8FC48481503000F16
015B001F1600A2485A1878127FA25B180012FFAB127FA26D1678A2123FA26C7E18F0120F7F0007
EE01E06C6C15036C6D15C06C6DEC0780D97FF0EC0F006D6C143E6DB414FC01079038E007F80101
90B512E06D6C5C020F49C7FC020013F035377BB540>I<B712FCEEFFC017F817FEC69039E0003F
FF040313C004007F717E717E717E170F717E84831980A28319C0A419E0AC19C0A419805F19005F
60170F604D5AEF7FF04D5A04035B043F90C7FCB85A17F817C004FCC8FC3B357DB444>I<DBFFE0
1318020F01FE1338027F9038FF807849B6EAC1F801079038E007F3011F90C712FFD93FF8147FD9
7FE0141F4948140F484914074890C8FC48481503000F16015B001F1600A2485A1878127FA25B95
C7FC12FFAA4BB612E0127FA27F92C7383FF800123FA26C7EA2120F7F6C7E7E6C7F6C7FD97FF014
7F6D7E6DB4EB01FF01079038F007E7010190B512C16D6CEC8078020F9038FE0018020001F090C7
FC3B377BB546>71 D<B612F8A439007FF000B3B3A9B612F8A41D357EB422>73
D<B500E093387FFFF86E93B5FCA26E5DC6F1F800A2D9F7FCED03DFA2D9F3FEED079FA2D9F1FFED
0F1FA201F06D141EA36E6C143CA26E6C1478A26E6C14F0A26E6CEB01E0A36E6CEB03C0A26E6CEB
0780A26E6CEB0F00A26EEB801EA36F6C5AA26F6C5AA26F6C5AA292380FF9E0A36FB45AA26F5BA2
6F90C7FCA26F5AB500F0031FB512F8A2167C16384D357DB454>77 D<913803FFC0023F13FC49B6
7E0107010013E0D91FF8EB1FF849486D7ED97FC0EB03FE49486D7E4890C813804817C04848ED7F
E0000F17F049153F001F17F849151F003F17FCA34848ED0FFEA400FF17FFAC007F17FE6D151FA3
003F17FCA26C6CED3FF8A2000F17F06D157F000717E06C6CEDFFC06C6D4913806C6D4913006D6C
495A6D6C495AD91FFCEB3FF8D907FFEBFFE0010190B51280D9003F01FCC7FC020313C038377BB5
43>79 D<B712F8EEFF8017F083C69039E0003FFEEE0FFF040313807013C0A27013E0A218F0A718
E0A34C13C018805E040F1300EE3FFC91B65A17E094C7FC02E0C9FCB3A2B612E0A434357DB43D>
I<003FB812F8A4D9F003EB801FD87F80ED03FC01001501007E1600007C177CA20078173CA400F8
173E48171EA4C71600B3AB013FB612F8A437347DB33E>84 D<EB3FFE48B512C0000714F0390FF0
0FF8001FEB03FC6D6C7E818016806C5A6C5AEA0180C8FCA249B5FC133F3801FFF000071300EA0F
F8485A485A485AA2485AA45C6C6C5A3A3FE0077FC0261FF81E13FF390FFFFC3F0003EBF01F3900
7FC00728227EA12B>97 D<EA01FC12FFA4120F1207ADEC0FF8EC7FFF01FDB512C09039FFF01FF0
91388007F84A6C7E01FC80150182811780A317C0A81780A34B1300A25E6D495A6D5C9138800FF0
9039F3E03FE001E1B55AD9C07F90C7FC9038800FF02A357DB431>I<903803FF80013F13F090B5
12FC48EB01FED803FC7F3807F003120FEA1FE0123F6E5A48486C5A153092C7FC12FFA8127FA27F
123FED07806C7E000FEC0F006C7E6C6C133E3901FF80FC6CEBFFF0013F5B010390C7FC21227DA1
27>I<ED03F8EC01FFA4EC001F150FADEB03FE90383FFF8F90B512EF48EB01FF3903FC007FD807
F0131F000F140F485A123FA2485AA312FFA8127FA36C7EA2121F6D131F000F143F6C6CEBFFFC26
01FE03EBFFC06CB512CF013F138F903807FC0F2A357DB431>I<EB03FF011F13F0017F13FC3901
FF01FE3903FC007F4848EB3F804848EB1FC0485A003FEC0FE0A2485A16F0A200FF140790B6FCA3
01C0C8FCA4127FA27F003F15F0A26C6C1301000F15E06C6CEB03C0D803FE130F3A01FF807F0039
007FFFFE011F13F8010113C024227EA129>I<EC3FE0903801FFF8010713FC90381FF0FEEB3FC1
90387F83FF13FFA2481303EC01FEEC00FC15781500A7B512FEA4000190C7FCB3A8003F13FEA420
357EB41B>I<16F890390FFC03FC90397FFF8FFE48B6123F3A03FC0FF87F3807F003000F14FC3A
1FE001FE3E161C003FECFF00A6001F5CA26C6C485A00075C3903FC0FF090B55A486C1380260E0F
FCC7FC90C9FCA2120F5A13C06CB512F015FEEDFF806C15E06C15F06C15F85A000F15FC393F8000
1F48C7EA03FE007E140100FE1400A4007FEC01FCA26C6CEB03F8D81FE0EB0FF0D80FFCEB7FE000
03B61280C6ECFE00010F13E028337EA22C>I<EA01FC12FFA4120F1207ADEC03FC91380FFF8002
3F7F9138781FE002E07F9038FD800FD9FF007FA25BA25BB3A2B500E1B512C0A42A357CB431>I<
EA03C0EA07F0487E487EA2123FA2121FA26C5A6C5AEA03C0C8FCA8EA01FC12FFA4120F1207B3A6
B512E0A413367DB518>I<143C14FF491380A24913C0A46D1380A26D1300143C91C7FCA8EC1FC0
EB1FFFA41300147FB3AD120C123FEA7F80D8FFC0138014FF1500A2387F81FEEB83FC383FFFF000
0F13C0000190C7FC1A4585B51B>I<EA01FC12FFA4120F1207ADEDFFFEA4ED1F804BC7FC157EEC
01F84A5A4A5A4A5A023FC8FC147E14FF13FD90B57E8181EC3FF013FE9038F81FF86E7E6E7EA26E
7E6E7F6E7F157F826F7EB500C1B51280A429357DB42F>I<EA01FC12FFA4120F1207B3B3A7B512
E0A413357DB418>I<2703F803FEEB03FE00FF903B0FFF800FFF80023FD9E03F13E0913B7C1FF0
7C1FF0913BE00FF8E00FF83C0FF9C007F9C0072607FB80EBFB800200D9FF007F01FE5CA2495CB3
A2B500E0B500E0B512E0A443227CA14C>I<3903F803FC00FF90380FFF80023F7F9138781FE002
E07F390FF9800F2607FB007FA213FEA25BB3A2B500E1B512C0A42A227CA131>I<903803FF8001
1F13F0017F13FC3901FF01FF3A03FC007F80D807F0EB1FC0000F15E04848EB0FF0003F15F84913
07007F15FCA300FF15FEA8007F15FCA36C6CEB0FF8A2001F15F06D131F6C6CEB3FE06C6CEB7FC0
3A01FF01FF006CEBFFFE011F13F00103138027227EA12C>I<3901FC0FF800FFEB7FFF01FDB512
C09039FFF03FF09138800FF80007496C7E01FC6D7EA26F7EA2178081A217C0A817805DA217005D
5E6D495A6D5C9138801FF09138E07FE001FDB55AD9FC7F90C7FCEC0FF091C9FCABB512E0A42A31
7DA131>I<3903F81F8000FFEB7FE0ECFFF09038F9E3F8EC87FCEA0FFB0007130713FF9038FE03
F8EC01F0EC0040491300B3B512F8A41E227DA124>114 D<9038FFE1C0000313FF120F381F803F
383E000F481307140312FCA27E6C90C7FC13F0EBFF806C13F86C7F6C13FF6C14806C14C0000114
E06C7E010113F0EB001F0070130712F014037E15E07E6C13076C14C09038C03F8090B5120000F1
13FC38C03FE01C227DA123>I<131EA5133EA3137EA313FE120112031207001FB51280B6FCA3D8
03FEC7FCB0EC03C0A80001EB078013FF6CEB8F00EB7FFEEB1FFCEB07F01A317EB022>I<D801FC
EB03F800FFEB01FFA4000FEB001F0007140FB3151FA2153F1203ED6FFC3B01FE01CFFFC06CB512
8F013F130FEB0FFC2A227CA131>I<B539E00FFFC0A4D807FEC7EAF80000035D6D13016C5DEC80
036C5DA26D6C485AA2ECE00F013F91C7FC6E5A011F131EECF83E010F133CECFC7C0107137814FE
01035BA214FF6D5BA26D5BA26E5AA26EC8FCA2141E2A227EA12F>I<B53BC3FFFC07FFE0A43D07
FC003FC0003C006F7E6C6C5E826D16F86C023F5C826CD9807F495AED7BFC02C01403017F01FB5C
EDF1FED93FE14A5AEDE0FF02F1140FD91FF392C7FC9238C07F8FD90FFF149E9238803FDE17FE6D
5DED001FA26D486D5AA201015D4A1307A26D486D5A02785C3B227EA140>I<B539E00FFFC0A4D8
07FEC7EAF80000035D6D13016C5DEC80036C5DA26D6C485AA2ECE00F013F91C7FC6E5A011F131E
ECF83E010F133CECFC7C0107137814FE01035BA214FF6D5BA26D5BA26E5AA26EC8FCA2141EA214
3E143C147C003E1378007F13F8486C5A13815CEB83C0EB0F806C48C9FCEA3FFE6C5AEA07E02A31
7EA12F>121 D E /Fl 31 122 df<1A7F963801FFC0A24F7FA24F7FA34F7FA24F7FA24F7FA34F
7FA296B67EA34E81A24E81A34E81A24E81A24E81A3DE3FF780A2DE7FE380A219C3DEFFC1811981
4D018081A2614D6E806005076E80A24D486D80A260051F6E80A24D486D80A260057F6E806005FF
6E81A2604C6F8195C8FC4C7080A24C486F80A25F040F7080A24C486F80A25F043F70805F047F70
80A24D8104FF865F4B7181A24B90BB7EA34B87A24B87A3DB1FF8CA000F805E033F7280A24B4871
80A25E03FF7281A24A497181A293CCFC4A7480A24A487380A25D020F74805D021F7480A24A4873
80A2147F010FB56C7280B800E00307BA1280A8897979F898>65 D<BD12F0F4FFE01DFEF5FFC01E
F01EFC1EFF1FC0C7001F02C0C8000181E1003F14F80A0F800A0380768076817780898C7780898C
A2898CA37780AA535CA36865A268535CA2535C535C9DC7FC9AB55A525C0A075C525C0A3F14C099
B6C8FC090714FC98B612F094BA12800BFCC9FCA2F5FFC01EFCF6FF8005C0C9000F14E00A0314F8
0A0014FE0B3F7F7714C07780778077808C77807780A221807814C0A27814E0A321F0A28A21F8AB
5414F0A45414E0A29BB612C0A2531580A2531500535C65535C535C9AB65A0A035D0A0F5D99B7C7
FCC05A1FF81FE01F8054C8FC1EF09BC9FC1DC07D787AF78F>I<96260FFFFCEE07800607B600E0
ED0FC095B700FE153F0507DCFFC0147F057F05F014FF4CB900FC5B040F06FF5B043FF1C00793B7
D8C000ECF01F030303F0C700076D5A030F92C9EBFE7F033F02F8043FB6FC4B02E0160F4AB60080
16034A4ACA7E4A02F8717E4A4A84023F4A844A02808491B6CC7E494A854C85494A85494A864989
495C4C864989495C8B90B6CEFC488A5D5A8B485CA28B485CA25A207F5D5AA2F83F809DC7FC5AA3
5DA3B6FCB07EA381A37EA3F81F806CF73FC081A27EA26C80A2207F6C6E1D80A27E6F1CFF6C2000
6D6E62A26D6E636D1D0370505A6D806D535A6D6E505A6D6E1A3F70505A6D6E505A6E6E606E02E0
4E5B020F6E4E90C7FC6E02FCF01FFE6E6E4E5A6E6E6CEFFFF86E6C02E004035B6F02F8040F5B03
0F02FF043F1380030303F00203B5C8FC0300DBFFC0017F13FC043F92B712F0040F61040196C9FC
706C17FC050717E0050094CAFC060715F0DE000F49CBFC7A7A75F891>I<BD12F0F4FFC01DFCF5
FF801EF01EFE787E1FE0C7001F02E0C8000F15F8E1007F800A0F14FF0A0181766C14E00B1F800B
07800B01807780787F78807880788078808A8D78808A8D797FA2791480A27914C0A222E0A28B22
F0A222F88BA322FCA47914FEA622FFB222FEA56722FCA422F8A26722F0A35514E0A222C0672280
A2551400A29CB55A6966545C545C6966545C545C9BB6C7FC535C535C0B0F14F00B3F5C9AB65A0A
0792C8FC0A7F5C090FB612F8C012E01F8054C9FC1EF81EC053CAFC1DC00AF0CBFC88787AF79A>
I<96260FFFFCEE07800607B600E04B7E95B700FE153F0507DCFFC0147F057F05F014FF4CB900FC
5B040F06FF5B043FF1C00793B7D8C000ECF01F030303F0C700076D5A030F92C9EBFE7F033F02F8
043FB6FC4B02E0160F4AB6008016034A4ACA7E4A02F8717E4A4A84023F4A844A02808491B6CC7E
494A854C85494A85494A864989495C4C864989495C8B90B6CEFC488A5D5A8B485CA28B485CA25A
207F5D5AA27A5A9DC8FC5AA35DA3B6FCB07EA36F94BBFCA37EA46C8098C86CECC000A27EA26C80
A36C80A27E817E6D80A26D807F826D806D806D807F826D6E7E6E6E95B6FC6E80020F806E02FC5F
6E02FF5F6E6F5E6E6C02E05E6F02FC163F030FDAFF8092B7FC030303F8020313F90300DBFFE001
3FEBF07F043F92B7487E040FF1C00F0401F10007706C05FC1301050705E0EB003F05000580140F
060703F8C8EA0380DE000F49CCFC887A75F89E>71 D<BB1280A8C7000F02F8C8FCB3B3B3B3B3AE
BB1280A841787BF74C>73 D<4EB57E95B7FC050F16F094B9FC040718E0041F18F8047F18FE4BB6
D8C0036E7E030702F8C7001F14E0031F02E0020714F8037F91C914FE92B500FC043F7F4A4A7080
020702E0040714E04A4A70804A4A70804A91CB804A49727F91B548727F494A7280494A7280494A
7280498A4C84498A494A728093CDFC498A90B6884B864820804B864820C0A24820E04B86A24820
F0A2484A7414F8A44820FCA34B864820FEA6B61EFFB16C20FEA36F62A36C20FCA46C6E5014F8A4
6C20F06F626C20E0A36C6E5014C0A26C6E97B61280A26C20006D6E4E5CA26D6E4E5C6D6670606D
6E4E5C6D666D6E4E5C70606D6E4E5C6D9BC7FC6E6D95B55A6E6E4C5C020F02E0040714F06E6E4C
5C6E6E4C5C020002FE047F91C8FC6F6D6C4AB55A031F02E0020714F86F02FC023F5C03039126FF
C003B612C0030092B8C9FC041F18F8040718E0040095CAFC051F16F8050093CBFC06011480807A
75F897>79 D<BD7E1CFF1DF01DFEF5FFC01EF01EFC8AC7001F02E0C8003F6E7E090181756C14F0
0A1F800A078076807680761580897714C020E0A27714F0A220F8A28920FCA420FEAA20FCA420F8
65A220F0A25314E020C0A25314809AB61200525C525C525C0A1F5C0A7F5C0903B61280093F92C7
FC94BA12FC1EF01EC053C8FC1DF09AC9FC1CC005F0CEFCB3B3A9BA12FEA877787AF789>I<000F
C11280A54820C0A303F8C7003F02E0C7FC03801A0F02FCC8180102F0757E02C01C1F4A8891C985
498948487713E0A24989A2491E7FA2491E3FA3491E1F007F20F0A4491E0FA748CAF207F8A5CB97
C7FCB3B3B3AE4ABC12FCA87D7679F58C>84 D<92380FFFFE0203B612F0023F15FF49B812E00107
17F84917FE013F9026F8001F6D7E4AC7000380496C6C01008090B56F7F486E6E7F6F6E7F727F48
6E6E7FA27280878487A26C5C846C4A83A26D5B6D90C9FCEB0FFCEB01E090CBFCA6053FB6FC043F
B7FC0307B8FC153F0203B9FC021F15C0027FECE0000103B548C7FC4914F0011F14C0017F49C8FC
90B55A4814F0485C485C485C92C9FC485B485BA2485BA3B55AA460A3606C7F606EED0FDF6C171F
6EED3F9F6C6DDB7F1F13FC6C6E02FFECFF806C02E0902603FE0FECFFC06C6ED90FFC16E06C02FE
90387FF8076C6C90B6487E6DEEC001010793C7FC010003FC143F021F02E0020314C0DA007F90CC
FC5B517ACF62>97 D<903801FFFEB6FCA8C67E131F7FB3ADF03FFE0507B512F8053F14FF94B712
E0040716F84C16FE043FD9800F6D7E93277FFC00018092B500E06D6C13F00580021F7F94C86C7F
04FC6F7F4C6F7F4C6F804C6F805E4C707F93CA80A2757F89A28789A289A2871E80A51EC0AE1E80
A5511400A365A2515BA265A2515B657093B5FC7060704B5C704B91C7FC704B5B704B5B704B5B92
26F3FF80027F5B03E16D91B55A9226C07FF0010314804B6CB4013F91C8FC4B6C90B612FC4A0107
16F04A010116804A6D6C02FCC9FC4A020F14E090CA01FCCAFC627A7AF870>I<93381FFFF00303
B612C0031F15F892B8FC020317C0020F83023F8391B526FC000F7F4902E001037F49028081010F
91C7487F4901FC5C495B4B4A14805B90B55A485CA2485C5A92C86C14005A725B5A4A6F5B725B48
9438007FE0070FC7FC96C8FC5A5CA4B5FCAE7EA280A37EA36C7FA26CF10FC06FEE1FE07E1A3F6C
6E17C0A26C6E167F6C6EEEFF806D6D4B1300816D6DED07FE6D6D4B5A6D6E141F6D02E0EC7FF801
0102F849485A6D02FF011F5B023F91B612806E94C7FC020716FC020016F0031F1580030302FCC8
FCDB001F13C04B5179CF59>I<973803FFFC4EB6FCA895C7FC1A3F86B3AD93380FFFC04BB512FC
031FECFF80037F15F00203B712FC020F16FE023F9139003FFF9F4A01F0010313DF49B500C00100
90B5FC494A143F4949C87E4949150749498149498149498190B5488248855D5A4891CAFCA25AA2
485BA25AA3485BA5B5FCAE7EA57E80A27EA27E807EA26C80626C96B5FC6C6E5D616D6D5D6D6D5D
6D6D5D6D6D4B806D6D92B77E6D6D6C0103EEFFC0010002E0010F133F6E01FCEBFFFE021F90B612
F8020716F0020116C0DA003FECFE00030314F0DB001F90C702C0C7FC627A79F870>I<93383FFF
C00307B512FE033FECFFC04AB712F0020716FC021F16FF4AD9FC0114C091B526E0003F7F490280
010F7F4949C700037F010F496E7F49496E7F49496F7E495B4B6F138090B57013C0485C487213E0
A24891C914F0855A4A18F85A85481AFCA3485BA21BFE85A2B5FCA391BAFCA51BFC02FCCCFCA57E
A4807EA37EA26C6D18FCF201FE7E816C19036F17FC6C19076C6EEE0FF8816DF01FF06D6DEE3FE0
6D6D16FF6D01FF4B13C06D6E02071380010102E0021F13006D02FCECFFFE6E9026FFC00F5B021F
91B612F002075F020117806E6C4BC7FC030F15F003011580DB000701F0C8FC4F517ACF5C>I<EF
7FFC040FB512C093B612F0030315FC031F15FF037F168092B5D8F01F13C00203EC803F4A494848
13E04A4915F04A4990B5FC4A5B4A494814F816C091B51280A25B16005B7114F05D497013E07213
C0A2060F1300F003FC95C8FCB2B912E0A8D8000791CAFCB3B3B3A8007FB712FEA8457A79F93D>
I<922601FFFCED1FF0033FD9FFE0903801FFFC0203B600FE010F13FF020F9226FF803F1480027F
04F0B6FC91B800FB15C00103DAC01F90B500EF13E0499026FE0003ECFC0F4901F8010014F04949
6E13C04901C0021F13E04918F090B5486E6D6C13C0A24891C86C6D6C138048736C1300F3003848
496F6D90C7FCA44886A96C97C8FCA46C6D4B5BA26C616C6E4A5BA26D6D4A5B6D606D01F0027F5B
6D6D91B55A6D01FE010391C9FC499026FFC01F5B93B612F8495FD93F8F168002034BCAFC90267F
003F14E0030101FCCBFC4990CEFCA35AA380A28080808014FE91B812C0F1FF806C19F01AFE6DF0
FFC01BF06D851BFE6D856D86886D867F4986013F8690BCFC4887000701FCC97E4801F004018048
49EE003F4A170F484917034890CB6C7F86A2485A87A56D96B5FC6C63A26E5F6C636C6D4D5B6E5F
6C6D4D5B6C6D4D5B6C01FE057F5B6C6D6C4BB55A6C02E0030791C7FC013F01FC033F13FC6DD9FF
F0010FB55A010791B812E0010096C8FC021F17F8020317C0DA003F03FCC9FCDB007F49CAFC5B73
7ACE65>I<903801FFFEB6FCA8C67E131F7FB3AD953803FFF0063F13FF4DB612E0050715F8051F
15FE4D819426FFF807804CD9C001804C48C780DC07F8804C4882EE1FC04C486E7F4CC8FC047E83
5E6F4881A24C83A25EA25EA25EA493C9FCB3B3A7B8D8F001B812E0A8637978F870>I<EB01FE90
3807FF80011F13E0497F497F90B57E815A815AA382A393C7FCA37E5D7E5D6D5B6D5B6D5B010713
80D901FEC8FC90CAFCB0ECFFFEB6FCA8C67E131F7FB3B3B3A6B812C0A82A7A78F938>I<EE01FC
EE07FF041F13C04C13E04C13F093B512F84B14FCA24B14FEA24B14FFA76F14FEA26F14FCA26F14
F87013F07013E07013C004071300EE01FC93C8FCB094B5FC92B7FCA8ED003F160F82B3B3B3B3A4
EA01FE3807FF80487F487F487F486D15FE5EB57EA218FCA24C13F8A218F04A4913E06C17C05E6C
4990B512804A4814006C494813FC6CD9F00F5B6C90B65A000116C06C93C7FC013F14FC010714E0
9026003FFEC8FC389D8AF93D>I<903801FFFEB6FCA8C67E131F7FB3AE073FB612E0A80703ECC0
00070001FCC7FC1BF007035B4F5B4F90C8FC4F5AF17FFC4F5A4E13E04E5B060F5B4E90C9FCF03F
FC4E5A4D485A4D5B4D13804D90CAFCEF3FFE4D5A4D5A4C7F04077F5E4C7F4C8093B67E92B7FC85
85854C80EEF87F4C6C7F4C6C7F04C081DC000F804B7F4B6D8071808683727F727F867280847280
728087728084737F737F8785738073808873804F14FCB800C090B712FEA85F797AF86A>I<9038
01FFFEB6FCA8C67E131F7FB3B3B3B3B3ACB812E0A82B7978F838>I<902601FFFC912603FFF093
3803FFF0B6031FD9FF80031FEBFF8095B600F092B612F0050703FC020715FC051F6F021F814D6F
6C496F7E9426FFFC036E9026FFFC03804CD9C0006E48D9C000804C90C76C4A90C77EC66CDA07FC
6E9026F007FC6E7F011FDA0FF09326F80FF0826D4A484D5ADC3F806E9026FC3F806E7F94C893C8
FC047EDDFE7E834C607484DBFDF8715ADBFFF04E83A24C60A24C60A24C60A493C992C9FCB3B3A7
B800F090B800F090B812F0A89C4F78CEAD>I<902601FFFC913803FFF0B6033F13FF4DB612E005
0715F8051F15FE4D819426FFF807804CD9C001804C48C780C66CDA07F880011F4A48826DEC1FC0
4C486E7F4CC8FC047E835EDBFDF881A2DBFFF083A25EA25EA25EA493C9FCB3B3A7B8D8F001B812
E0A8634F78CE70>I<93380FFFF04BB67E031F15F892B8FC020317C0020F17F0023F49C66C13FC
4A01E001077F49B5008001016D7E4949C86C7F49496F7F49496F7F49496F7F49496F7F49496F7F
90B5486F7FA2481B804891CA14C0A2481BE04A83481BF0A2481BF8A248497113FCA4481BFEA5B5
1AFFAD6C1BFEA56C6D4D13FCA36C1BF8A36C6D94B512F0A26C1BE06C6E4B14C0A26C6E4B14806C
1B006F5D6D6D4B5B6D6D4B5B6D6D4B5B6D6D4B5B6D6D6C49B55A010102E0010714806D02FE017F
91C7FC023F90B712FC020F17F0020317C0020094C8FC031F15F8030315C0DB000F01F0C9FC5851
7ACF65>I<902601FFFEEC1FFFB60203B512F8051FECFF8094B712E0040316FC040F16FF043F83
4CD9801F14E09327FFF8000380C66C90B500E0010080011F03806E7F6D4AC8001F7F4C6F7F4C6F
8004E0844C6F804C8193C9817480A2757FA28987A28987A21E80A4871EC0AE1E8063A41E00A263
65A2515BA26598B5FC65505C82704B5C704B5C704B91C7FC705F704B5B70037F5B706C91B55A71
01035CDC7FF0010F148070B4017F91C8FC7090B612FC040716F004011680706C02FCC9FC050F14
E0050001FCCAFC95CCFCB3A7B812F0A862717ACE70>I<902603FFF8ECFF80B6020713F8053F13
FE94B612804C15C04C15E04C010713F093260FF80F13F8EE1FE0C66C4A484813FC011F15806D4A
484813FE16FE5EEDF9F8A2EDFBF0A24C6D13FC15FF4C6D13F87213F07213E04C01001380F11C00
96C7FCA293CAFCA65DB3B3A2B812FCA8474F7ACE53>114 D<912601FFFEEB03C0023F9039FFE0
0FE049B6EAFC3F010F92B5FC133F49EB00032601FFF0EB007F4801C0141F4890C8120749814848
81484881187F485A183F127FA2181F12FF7FA27F7F6DEE0FC002C092C7FC14F014FCECFFE06CEC
FF8016FCEEFFE06C16FC6C16FF18C06C17F06C836C17FE84C618806D17C06D17E0130F010317F0
010017F8141F020116FCEC000FDB003F14FE1601EE003F050F13FF1703007E82B4707E84A26D82
A2847FA26D17FEA37F6DEE1FFCA26D17F86D163F6DEE7FF06EEDFFE002E05C02F84A13C002FE02
0F1380DAFFC090B5120092B612FC01E35E01C016E0D9001F92C7FC48010314F80078D9003F90C8
FC405179CF4F>I<ED3FC0A7157FA515FFA35CA35CA25CA25CA25C5C5CA291B5FC13035B5B133F
90B912C01207BAFCA6D8000302C0C8FCB3B3A3F003FCAF6DEE07F882A2180F6D17F070131F6E16
E06E6D133F04FEEB7FC06E9039FF01FF806E91B5120080020115FC6E6C5C031F5C030314C09226
003FFCC7FC3E707CEE4E>I<91B5933801FFFEB74AB6FCA8C66C93C7FC011F183F6D84B3B3A962
A462A297B5FCA26D5FA2616D6EEC07EF190F6DDD1FCF7F6D6EDA3F8F14C070DAFF0FECFFE06E6D
13036E01FEEB1FFC6E90B612F8020716F0020116C0DA003F1500030714FCDB003F01C003F0C7FC
635078CE70>I<B8D8803FB7023FB6FCA8D8001F49C8000F01FCC914006F6FF00FF86D735F7318
1F70826D7161701B3F6D745E706E187F4F806D67704A18FF6D7493C7FC70624F806E65704A1703
6E735D701A074F806E05E75F70023F170F6E735D7102C3161F077F806E05815F7101FF173F6E74
5C710200167F4E826E4C6D5EDDF00318FF6E7491C8FC05F8496D5C060716F06F4B6D4A5AEFFC0F
6F07F85B05FE496D1407061F16FC6F4B6D4A5AEFFF3F6F07FE5BDEFFC06D141F1DFF6F4B6D4A5A
A26FF2BFC096C814FF6F634E81A26F98C9FC4E8170614E81A270496F5BA270614E81A270496F5B
A270614E81A27090CA5B7061DC00FC053FCAFC884E7CCD91>119 D<B800C0021FB61280A8D800
0F0280C96C90C7FCF31FF86D6E5FA26D6E4C5AA26D6E5F1B7F6D6E5F1BFFA26E6D4B90C8FCA26E
6D4B5AA26E6D4B5AA26E6E4A5AA26E6E5D1A1F6E6E5D1A3F6E6071147FA26E6E4A5AA26F6D4990
C9FCA26F6D495AA26F6D495AA26F02805B190F6F02C05B191FA26F6E485AA26F6E485AA26F6E48
5AA27001FD90CAFCA270EBFFFEA2705CA2705CA3705CA2705CA2705CA2705CA27190CBFCA2715A
A3715AA2715AA24D5AA24D5AA260177F6017FFEA03FCD80FFF4A90CCFC487F486D495A487F4C5A
B57E4C5AA24C5A4C5AA24C5A4A495A6C4A90CDFC4A5A6C4A5A9138801FFC3A1FFE007FF8000F90
3803FFF090B612C000035D6C4ACEFC6C14F8011F13E0D903FECFFC61717CCD6A>121
D E /Fm 80 124 df<91391FE007E09139FFF81FF8903A03E03C7C3C903A0F801EF07E903A1E00
3FE0FE49137F017C14C049157C92383F80384848011F1300150FABB812C0A23B01F0000F8000B3
AA486C497E267FFFC3B5FCA22F367FB52D>11 D<EC1FE0ECFFF8903803E03C90380F800E90381F
000F013C133F137C5BA2485A151E92C7FCA9913803FF80B7FCA23901F0001F150FB3A9486CEB1F
C03A7FFFC3FFFEA227367FB52B>I<EC1FF09138FFFD80903803E01F90380F803F90381F007F13
3C137C49133F151F4848130FACB7FCA23901F0000FB3AA486CEB1FC03A7FFFC3FFFEA227367FB5
2B>I<DA1FE013FF9126FFF80713C0903B03E03C1F01E0903B0F800E7C007090271F001EF81378
013C90393FE001F8017C137F4914C0A24848EB3F80031F6D5A030F91C7FCA9EF1FFCB9FCA23B01
F0000F8000187CB3A9486C496C13FE3D7FFFC3FFFE1FFFF0A23C367FB540>I<003C1378007E13
FC38FF01FEA2EB81FFA2EA7F80003D137B00011303A438030006A348130E0006130C000E131C00
0C1318481330003813704813E00020134018177DB427>34 D<123C127EB4FCA21380A2127F123D
1201A4EA0300A35A1206120E120C5A12385A122009177AB415>39 D<14C0EB0180EB030013065B
131C5B5BA25B485AA2485AA2120790C7FC5A120E121EA35AA45AA612F85AAE7E1278A67EA47EA3
120E120F7E7F1203A26C7EA26C7E1370A27F7F130C7F7FEB0180EB00C0124E79B91E>I<12C012
607E7E7E120E7E6C7EA26C7E6C7EA21370A213781338133C131C131EA37FA4EB0780A614C01303
AE13071480A6EB0F00A4131EA3131C133C133813781370A25BA2485A485AA248C7FC120E120C5A
5A5A5A124E7CB91E>I<156015F0B3A5007FB812C0B912E0A26C17C0C800F0C8FCB3A515603334
7CAC3C>43 D<123C127EB4FCA21380A2127F123D1201A4EA0300A35A1206120E120C5A12385A12
2009177A8715>I<B512F0A414047F921A>I<123C127E12FFA4127E123C08087A8715>I<151815
3CA2157C1578A215F815F0A2140115E0140315C0A214071580A2140F1500A25C141EA2143E143C
147C1478A214F85CA213015CA213035CA213075C130F91C7FCA25B131EA2133E133CA2137C1378
A213F85B12015BA212035BA212075BA2120F90C8FCA25A121E123E123CA2127C1278A212F85AA2
12601E4D7CB927>I<EB0FF0EB3FFCEBF81F3901E007803903C003C039078001E048C712F0A200
1E1478A2003E147CA2007E147E007C143EA400FC143FB2007C143EA3007E147EA2003E147CA36C
14F8A2390F8001F0000714E03903C003C03901E007803900F81F00EB3FFCEB0FF020347DB227>
I<1303130F5B137FEA07FFEAFFBFEAF83F1200B3B3A5EBFFC0B612C0A21A3379B227>I<EB3FC0
EBFFF83803C0FE3906003F8048EB0FC048EB07E05AEC03F04814F8A200FC13016C14FC7EA4127E
1218C713F81403A215F0140715E0EC0FC01580141FEC3F00143E5C5C495A5CEB038049C7FC130E
5B5B49130C13605B4848131848C7FC1206481438001FB512F8A25A4814F0B6FCA21E337CB227>
I<EB1FF0EBFFFE3901E01F803907800FC0390E0007E048EB03F0001F14F8383F800101C013FCA4
EA1F80EA0F00C713F8140315F0A2EC07E0EC0FC01580EC3F0014FCEB3FF0A2EB003EEC0F80EC07
C0EC03F0EC01F815FCA2EC00FEA215FFA2123E127F487EA315FEA2397F0001FC127E007014F86C
EB03F06CEB07E0000FEB0FC03903E03F803900FFFE00EB1FF020347DB227>I<EC01C0A2140314
07A2140F141FA2143F147F146F14CF1301148FEB030F13071306130E131C131813381330136013
E013C0EA0180120313001206120E120C5A123812305A12E0B712C0A2C7380FC000AB4A7E0107B5
1280A222347EB327>I<00081420000FEB01E09038E00FC090B5128015005C5C14F0000D13C000
0CC8FCAAEB0FE0EB3FFCEBF03E380DC00F390F000780000E14C0000CEB03E0000814F0C7FCEC01
F8A315FCA4123C127EB4FCA215F85A5A0060EB03F0A2007014E00030EB07C07E6CEB0F800007EB
3E003803C0FC3801FFF038003F801E347CB227>I<14FF010313C090380F80E090383E00300178
1318491338484813FC00031301EA07C01380120F001FEB00F890C8FCA25AA2127EA3EB07FC38FE
0F7F90383007C090382003E090384001F0EB800015F86CC712FC157C157EA25A157FA3127EA512
3E003F147EA27E15FC6C14F86C7E9038C001F00003EB03E03901E007C03900F81F00EB3FFEEB0F
F020347DB227>I<1230123C003FB61280A21600485CA25D0070C7121800605CA25D485CA24A5A
C748C7FC1406A25C5CA25C1470A25CA213015C1303A31307A3495AA3131FA5133FA96DC8FC130E
21357CB327>I<EB0FF0EB7FFE9038F01F803903C003C039070001E00006EB00F0000E14785A15
3C123CA3123EA2003F14787FD81FE013F07F390FFC01E09038FE03C03907FF87006C13DE6C13F8
6C6C7E6D7EECFF8001F313C0D801E113E03903807FF0390F003FF8000EEB0FFC481307003CEB01
FE481300153FA248141FA2150FA3150E1278151E151C6C14386C14306C14E03907C001C03901F0
0F8039007FFE00EB0FF020347DB227>I<EB0FF0EB7FFCEBF81F3901E007803907C003C0390F80
01E0010013F04813004814F8123E007E14FC157C12FE157EA5157FA3127E15FFA2123E003F5B6C
147F6C1303EB80023807C0043803E01C3800FEF090383FE07E90C7FCA315FCA315F8121F393F80
01F0A2EC03E015C09038000780001CEB0F000018131E000E5B380780F83803FFE0C66CC7FC2034
7DB227>I<123C127E12FFA4127E123C1200B1123C127E12FFA4127E123C08217AA015>I<123C12
7E12FFA4127E123C1200B1123C127E12FE12FFA3127F123F1203A51206A3120CA21218A2123012
70122008307AA015>I<15E0A34A7EA34A7EA34A7EA24A7E140CA2EC1CFFEC187FA202387FEC30
3FA202607F151FA202C07F150FA249486C7EA349486C7EA301066D7EA3010FB57EA2010CC7FC49
147FA20138810130143FA20170810160141FA201E08149140FA200018200031507486C4A7ED81F
F84A7EB50103B512E0A233377DB63A>65 D<B77E16F8000190380001FE6C48EB007FEE1FC0EE0F
E017F01607EE03F8A217FCA617F8160717F0160F17E0EE3FC0EE7F80923801FE0090B612F85E90
39FE0001FE9238003F80EE1FC0EE07F017F81603EE01FC17FE160017FFA717FE1601A2EE03FC17
F8EE07F0EE0FE0EE3FC0486CECFF80B7EAFC0016E030357EB437>I<DA03FE130291393FFFC006
9139FF00F00ED903F81338D90FC0EB0E1E4948EB033E49C7EA01FE017C140013FC4848157E4848
153E485A000F161E5B121F170E485AA21706127F90C9FCA2481600AB7E17067F123FA36C6C150C
A2120F6D151812076C6C15306C7E6C6C1560017C15C0013FEC01806D6CEB03006D6C1306D903F8
131CD900FF13F891383FFFC0DA03FEC7FC2F377CB538>I<B77E16F0000190380001FC6C48EB00
7FEE1FC0EE07E0707E707E707EA2177E177F831880171F18C0A218E0170FA318F0AB18E0A4EF1F
C0A31880173F1800177EA25F4C5A4C5A4C5AEE1FC04CC7FC486CEB01FEB712F0168034357EB43B
>I<B812E0A2000190C7123F6C481407EE01F01600A21770A21730A41718A21506A21700A3150E
A2151E157E90B512FEA29038FE007E151E150EA21506A4170692C7FCA2170CA4171CA217181738
A2177817F816011607486CEC3FF0B8FCA22F357EB434>I<B812C0A2000190C7127F6C48140FEE
03E01601A21600A21760A41730A315061700A4150EA2151E157E90B512FEA29038FE007E151E15
0EA21506A592C8FCAE486C7EB67EA22C357EB432>I<DA07FC130891393FFF8018903A01FE01C0
38903907F00070D90FC0EB187849C7EA0CF8017E140749140348481401485A1600485A000F1678
5B001F1638A2485AA2007F1618A290C9FCA24893C7FCAA030FB512C07E9239000FFC006DEC03F8
A2123FA26C7EA2120F7F12076C7E7F12016C6C1407137ED91F80130C6D6CEB1C78D907F0EB3838
903A01FE01E018903A003FFF8008DA07FCC8FC32377CB53C>I<B5D8FE03B512F8A2000190C738
07FC006C486E5AB3A390B7FCA249C71203B3A6486C4A7EB5D8FE03B512F8A235357EB43A>I<B5
12FEA2000313803800FE00B3B3AB3803FF80B512FEA217357EB41C>I<017FB5FCA29038007FE0
EC1FC0B3B3123E127FEAFF80A31580EB003F007E1400007C137E0030137C001C5B380F03F03803
FFC0C690C7FC20367DB428>I<B500FE903807FFF8A2000190C7000113806C48913800FE0017F8
5F17C04C5A4CC7FC16065E5E5E5E5E4B5A4BC8FC15065D5D5D157815F84A7E4A7E1406EC0C7F02
187FEC303F9138E01FC0D9FFC07FEC000F496D7E8215036F7E821500167F83163F707E83160F70
7E831603707E834C7E486C4A1380B500FE013F13FCA236357EB43C>I<B67EA200010180C8FC6C
48C9FCB3AD17C0A4EE0180A41603A31607160F161FEE3F0016FF486C1307B8FCA22A357EB430>
I<D8FFFEEE7FFF6D93B5FC000118806C1800D9DF80EC01BFA3D9CFC0EC033FA2D9C7E01406A3D9
C3F0140CA3D9C1F81418A2D9C0FC1430A3027E1460A36E14C0A291391F800180A391390FC00300
A2913807E006A36E6C5AA36E6C5AA26E6C5AA3ED7E60A36F5AA26F5AA2487E486C6DC7FCD80FFC
EE7F80B500C0023FB5FC150640357DB447>I<D8FFFE91381FFFF87F0001030113806C6D903800
7E006E143C01DF1518EBCFE08013C7EBC3F8EBC1FCA2EBC0FE147F81143F6E7E81140F6E7E8114
036E7E811400157F1680153FED1FC0ED0FE016F01507ED03F816FC1501ED00FE16FF167FEE3F98
17D8161FEE0FF8A2160716031601A21600486C1578487ED80FFC1538B500C01418A235357EB43A
>I<EC07FC91387FFFC0903901FC07F0903907E000FCD90F80133E013FC76C7E017E6E7E496E7E
48486E7E48486E7EA248486E7E000F8249157E001F167F4981003F1780A2007F17C0A290C9121F
A24817E0AB6C17C06D153FA3003F17806D157FA2001F17006D5D000F5E6C6C4A5AA26C6C4A5A00
015E6C6C4A5A017E4A5A6D4A5AD91FC0017FC7FCD907E013FC903901FC07F09039007FFFC0DA07
FCC8FC33377CB53C>I<B7FC16E0000190380003F86C48EB00FE163FEE1F80EE0FC017E017F016
07A217F8A617F0A2160F17E017C0EE1F80EE3F0016FEED03F890B612E093C7FC49C9FCB3A4487E
B512FEA22D357EB434>I<B612FCEDFF8000019038000FF06C48EB01FCED007E8283707E83160F
83A75F161F5F4C5A94C7FC167E4B5AED0FF090B6128093C8FC9039FE001FC0ED07E0ED01F0826F
7E82167E167FA683A5180C17C0163F1818161F486C91380FE030B500FE903807F060933801FFC0
CAEA3F8036367EB439>82 D<90381FE0019038FFFC033901F01F07390780038748C712CF001E14
7F001C80003C80127C007880A200F880A3817EA27E007E91C7FCEA7F807FEA3FF8EBFF806C13F8
6C13FF6C14C06C14F0C680013F7F01077FEB003FEC03FF02001380157F153FED1FC0150F12C0A2
1507A37E1680A27EED0F007E6C141E6C141CD8F3805BD8E1E013F039E0FC03E039C01FFF802680
03FEC7FC22377CB52B>I<007FB8FCA29039800FF800277C0007F0131F007882007082A2006082
A200E01780A2481601A6C792C7FCB3AE4A7E4A7E013FB512FEA231357DB438>I<B500FE90381F
FFF8A2000190C7000113806C489138007E00173C1718B3B0137E5F137F7F5F6D7E5F6D6C495A13
076D6C0107C7FC6D6C130ED9007C1338023F13F091380FFFC0020190C8FC35367EB43A>I<B500
F0903803FFF8A2000790C8EA7FC0D803FCED3F000001161E171C7F00001618A2017F5DA280013F
5DA26E14E0011F5D80010F4A5AA26E1303010792C7FCA26D6C1306A28001015CA26E131C010014
18A2027F5BA21580023F5BA2EDC0E0021F5BA291380FE180A215F1DA07F3C8FCA215FF6E5AA26E
5AA36E5AA31570A235367EB43A>I<B5D8F807B539C01FFFF0A2000790C7273FF800011300D801
FEDA1FE0EB007E49020F157C1A386C6C1830707EA2017F604C7EA26D6C5FEE19FCA26E1601011F
DA39FE5C16306E1603010FDA70FF91C7FCEE607F800107EE8006EEC03FA26D6C5E923901801FC0
A2D901FC5E923903000FE0A2D900FE5E0306EB07F0A202FF1670DA7F0EECF860030C1303038C15
E0DA3F9C6E5A03981301A2DA1FD8ECFD8003F0EB00FFA2020F93C8FC4B80A20207157E4B143EA2
0203153C4B141CA2020115184C367FB44F>I<267FFFFC90B512C0A2000101E090383FFC006C49
EB0FE06D48EB0780013F92C7FC6E13066D6C130E010F140C6E5B6D6C133816306D6C5B6D6C13E0
5E6D6C485AEC7F8393C8FCEC3FC6EC1FCE15ECEC0FF81407A26E7EA26E7E815C6F7E9138063FC0
140E91380C1FE0EC180F02387F91383007F8EC600302E07F4A6C7EEB018001036D7E91C76C7E13
06010E6E7E010C6E7E131C496E7E1607017881D801FC4A7ED80FFF4A7EB500C090B512F8A23535
7EB43A>I<B500F8903801FFFEA2000301809038003FE06C90C8EA1F806CEE0F00170E6D6C140C
013F5D6E14386D6C143017706D6C146001075D6E13016D6C5C16036D6C91C7FC010014066E130E
91387F800C161C91383FC0185E91381FE07091380FF06016E06E6C5AEDF980EC03FF6E90C8FCA2
6E5AB34A7E91B512FEA237357FB43A>I<EAFFE0A4EAF000B3B3B3AFEAFFE0A40B4D78B915>91
D<000213040007130E000E131C000C13184813300038137000301360007013E0006013C0A338C0
0180A400DE13BC00FF13FEEB81FFA2EA7F80A2383F007E001E133C181775B427>I<EAFFE0A412
01B3B3B3AF12FFA40B4D7FB915>I<12021207120E120C5A1238123012701260A35AA412DEB4FC
1380A2127FA2EA3F00121E09177BB415>96 D<EB7FC03803FFF0380F807C381C003E001F130FD8
3F807F6E7EA21403D81F007FC7FCA5143FEB0FFFEB7F03EA01F8EA07E0EA0F80EA1F005A127E16
605AA31405A2007E1309913819F0E06C013013C03A1FC0E0FF803A07FF807F003900FE003E2324
7DA227>I<EA03E012FFA212071203AFEC3FC0ECFFF09038E3C0FC9038E6003E01EC7F01F8EB0F
8049EB07C05BED03E0A216F01501A216F8A916F0A2150316E0A2ED07C06D148001D8130F01CCEB
1F000186133C90388381F8903801FFE0C7EA3F8025367EB42B>I<EB0FF0EB3FFE9038F80F8039
01E001C03803C0073907800FE0EA0F005AA2003EEB07C091C7FC127E127CA212FCA9127C127EA2
003E1430123F6C14606C7E15C03907C001803903F003003800FC0EEB7FFCEB0FE01C247DA222>
I<153EEC0FFEA2EC007E153EAFEB0FE0EB3FFCEBFC0E3901E003BE3907C000FE485A90C7127E48
143E123EA2127E127CA212FCA9127CA2127E123EA26C147EA26C6C13FE3907C001BE3903E0073F
2601F81E13F838007FF890391FE03E0025367DB42B>I<EB0FE0EB3FFCEBF83E3801E00F3903C0
078039078003C0390F0001E05A003E14F01400127E15F8127CA212FCB6FCA200FCC8FCA5127CA2
127E123E15187E15306C7E000714606C6C13C03901F001803900FC0F00EB3FFEEB07F01D247EA2
22>I<14FCEB03FF90380F878090381E0FC0EB3C1F137C13789038F80F809038F00700000190C7
FCACB512F8A2D801F0C7FCB3AA487E387FFFE0A21A367FB518>I<90390FC00F8090397FF87FC0
9039F03CE1E03901E01F813A03C00F01C03A0780078000000F80EB00034880A76C5CEB80070007
5C6C6C48C7FC3801E01E3802F03C38067FF838040FC090C9FC120CA2120E1206EA078090B5FC6C
14E06C14F84814FE390F0001FF001EEB003F48EC0F8048140716C0481403A50078EC0780A26CEC
0F00001F143ED80FC013FC3903F003F0C6B512C0D90FFCC7FC23337EA127>I<EA03E012FFA212
071203AFEC3FC0ECFFF09038E1C0F89038E3007C01E47F13EC01E87F13F0A35BB3A3486CEB3F80
B53887FFFCA226357EB42B>I<EA0380EA07C0EA0FE0121FA2120FEA07C0EA0380C7FCAAEA03E0
12FFA212071203B3A9EA07F0B5FCA210347EB316>I<EB0780EB0FC0EB1FE0A4EB0FC0EB078090
C7FCAAEB07E0EA01FFA2EA000F1303B3B21238127C00FE13C01307148012FC38780F00EA381EEA
1FF8EA07F0134483B318>I<EA03E012FFA212071203B0913807FFE0A26E1300EC01F85D15C04A
5A92C7FC140E5C14305C14E0EBE1F013E3EBEE78EBFC7CEBF03EEBE01E808114076E7E816E7E14
001578157C81153F486CEB7F80B53881FFF8A225357EB429>I<EA03E012FFA212071203B3B3AA
487EB51280A211357EB416>I<3B03E03FC001FE00FF903AFFF007FF80903BE1C0F80E07C03C07
E3007C1803E0D803E490393E2001F001EC146001E890391F4000F801F05CA34991C7FCB3A3486C
496C487EB53B87FFFC3FFFE0A23B227EA140>I<3903E03FC000FFEBFFF09038E1C0F83907E300
7CD803E47F13EC01E87F13F0A35BB3A3486CEB3F80B53887FFFCA226227EA12B>I<EB07F8EB3F
FF90387C0F803901F003E03903C000F04848137848C77E48143E001E141E003E141FA248EC0F80
A300FC15C0A9007C1580A2007E141F003E1500A26C143E6C143C6C6C5B6C6C5B3901F003E03900
FC0FC0D93FFFC7FCEB07F822247EA227>I<3903E03FC000FFEBFFF09038E3C0FC3907E6003ED8
03EC7F01F8148049EB0FC049130716E0150316F0A2150116F8A9ED03F0A316E0150716C06DEB0F
806D131F01ECEB3F0001E6137C9038E381F89038E1FFE09038E03F8091C8FCAB487EB57EA22531
7EA12B>I<90380FE00690383FF80EEBFC0E3801F0033907E0019E9038C000DE485A48C7127E5A
003E143E127EA35AA9127C127EA2123E123F6C147E6D13FE6C7E0007EB01BE3903E0073E3801F8
1E38007FF8EB0FE090C7FCAB157F91380FFFF8A225317DA129>I<3807C0FC38FFC1FEEBC31F39
07C63F80EA03CC13C813D89038D01F0091C7FCA213E0B3A3487EB512C0A219227EA11E>I<3801
FE043807FF8C381F01DC383C007C48133C0070131C12F0A2140CA27EA2007C1300127FEA3FF8EB
FF806C13C0000713E0000113F038001FF8EB01FCEB007C00C0133EA2141E7EA37E141C6C133C14
386C137038E701E038C3FFC00080130017247DA21E>I<1330A51370A313F0A212011203120712
1FB512FCA23801F000B11403A814023800F806A2EB7C0CEB3E18EB1FF0EB07E018307FAE1E>I<
D803E0131F00FFEB07FFA20007EB003F000380B3A35DA3155F12016D139F00009038011F80D97C
0613FCEB3FFCD907F0130026237EA12B>I<D8FFFEEBFFF0A2D80FF0EB3FC06C48EB1F00150E00
03140CA26C6C5BA36C6C5BA26D1370017C1360A26D5BA2EB3F01011F5BA2D90F83C7FCA214C7EB
07C6A2EB03ECA214FC6D5AA26D5AA3146024227EA029>I<B53A0FFFC0FFF8A23C0FF000FE003F
C06C48017CEB1F800003EE0F00170E7F0001027E130C15FE6D01DE131C000002DF1318EC018F01
FC1538017CEC8030EC0307013E5D16C0EC0603011F5D16E0EC0C01D90F8CEBE18016F1EC9800D9
07D801F3C7FC16FB02F0137B0103147EA24A133E0101143CA24A131C0100141835227FA038>I<
B53801FFF8A23A07FC007F80D801F8EB7E00153800001430017C13706D5B90383F01C0011F5BD9
0F83C7FCEB07C7EB03EE14FC6D5A1300147C14FEA2EB019F9038030F8001077FEB0E0790380C03
E0496C7E90383800F8497F49137C0001800003143FD81FF0EB7F803AFFFC01FFFCA226217FA029
>I<D87FFFEB7FF8A2D807F8EB1FE06C48EB0F80ED070000011406A26C6C5BA26D131C017C1318
A26D5BA2013F13706D1360A26D6C5AA214C101075BA2D903E3C7FCA214F7EB01F6A2EB00FCA214
78A31430A25CA35CA2495A1278EAFC0391C8FC1306130EEA701CEA7838EA1FF0EA07C025317FA0
29>I<003FB512F0A290388003E0393C0007C00038130F15800030EB1F000070133E147E006013
7C5C495A130300005B495A495A131F91C7FC133E49133013FC5B485A485A000714705B48481360
48C712E05A003E130348130FB6FCA21C217EA022>I<B712FCA22602809427>I
E end
%%EndProlog
%%BeginSetup
%%Feature: *Resolution 508
TeXDict begin @a4
%%EndSetup
%%Page: 0 1
bop 308 223 a Fm(Design)24 b(and)h(Implemen)n(tation)e(of)i(an)g(Enhanced)g
(Ob)t(ject-Orien)n(ted)f(Mo)r(del)g(for)h(the)g(Python)1352
318 y(In)n(terpreted)h(Language)1565 602 y(A)g(Thesis)1407
827 y(in)f(Humanities)f(402)1493 1052 y(Presen)n(ted)j(T)-6
b(o)669 1277 y(The)25 b(F)-6 b(acult)n(y)24 b(of)h(the)g(Sc)n(ho)r(ol)f(of)g
(Engineering)g(and)h(Applied)e(Science)1350 1502 y(Univ)n(ersit)n(y)g(of)i
(Virginia)1357 1727 y(In)h(P)n(artial)d(F)-6 b(ul\014llmen)n(t)1122
1952 y(of)24 b(the)i(Requiremen)n(ts)f(for)g(the)g(Degree)1073
2177 y(Bac)n(helor)f(of)h(Science)g(Computer)g(Science)1674
2461 y(b)n(y)1451 2686 y(Stev)n(en)g(P)-6 b(.)26 b(Miale)1551
2911 y(Ma)n(y)e(1993)157 3176 y(On)h(m)n(y)g(honor)g(I)g(pledge)g(that)f
(this)i(w)n(ork)e(is)h(m)n(y)h(o)n(wn)e(and)h(is)g(done)g(in)g(accordance)f
(with)h(Honor)f(Co)r(de)1108 3272 y(guidelines)f(for)i(pap)r(ers)g(in)g
(Humanities.)p 161 3468 3107 3 v 1453 3665 a(\(F)-6 b(ull)24
b(signature\))127 3871 y(Appro)n(v)n(ed)p 478 3872 2039 3 v
2088 w(\(T)-6 b(ec)n(hnical)23 b(Advisor\))478 3966 y(\(T)n(yp)r(e)i(Name\))
1210 b(\(Signature\))p 478 4254 V 2542 4253 a(\(Humanities)24
b(Advisor\))478 4349 y(\(T)n(yp)r(e)h(Name\))1210 b(\(Signature\))p
eop
%%Page: 1 2
bop 127 1004 a Fl(Preface)127 1636 y Fm(This)28 b(pro)t(ject)g(b)r(egan)g
(appro)n(ximately)d(one)j(y)n(ear)g(ago,)h(as)g(a)f(result)g(of)g(a)h(pro)t
(ject)f(I)h(w)n(as)f(w)n(orking)e(on)i(for)127 1827 y(Dr.)57
b(P)n(ausc)n(h's)34 b(researc)n(h)g(group.)56 b(W)-6 b(e)33
b(had)g(b)r(een)g(using)f(an)h(in)n(terpreted)f(language)f(kno)n(wn)g(as)i
(Tcl)g(to)127 2018 y(create)25 b(virtual)d(realit)n(y)h(applications.)31
b(Unfortunately)-6 b(,)21 b(one)j(of)g(Tcl's)h(main)e(dra)n(wbac)n(ks)g(w)n
(as)h(that)g(it)g(w)n(as)127 2209 y(di\016cult)g(to)h(learn)g(and)g(use.)127
2481 y(W)-6 b(e)30 b(b)r(egan)e(to)h(lo)r(ok)f(for)h(a)g(new)g(language,)f
(and)h(found)f(Python.)45 b(Not)29 b(only)f(w)n(as)h(it)g(easy)g(to)g(learn)g
(and)127 2672 y(use,)e(but)f(it)f(w)n(as)g(also)g(ob)t(ject-orien)n(ted)f
(and)h(easily)g(extensible.)35 b(As)26 b(the)g(system)h(progressed,)f(w)n(e)g
(b)r(egan)127 2863 y(to)f(mo)r(dify)f(the)h(language,)e(esp)r(ecially)h(the)i
(ob)t(ject-orien)n(ted)d(mo)r(del.)127 3134 y(This)18 b(led)h(to)g(com)n
(bining)d(these)k(mo)r(di\014cations)d(and)h(impro)n(v)n(emen)n(ts)g(in)n(to)
g(this)h(thesis.)32 b(Man)n(y)18 b(of)g(the)h(initial)127 3325
y(ideas)35 b(had)f(to)h(b)r(e)g(c)n(hanged,)i(due)e(not)f(only)g(to)h
(practical)e(co)r(ding)h(considerations)f(but)h(philosophical)127
3517 y(reasons)25 b(as)h(w)n(ell.)127 3788 y(The)d(c)n(hanges)g(I)h(ha)n(v)n
(e)e(made)i(are)f(curren)n(tly)g(planned)f(to)h(b)r(e)h(folded)e(in)n(to)g
(the)i(o\016cial)d(v)n(ersion)i(of)g(Python.)127 3979 y(The)35
b(o\016cial)e(v)n(ersion)h(of)g(Python)g(can)h(b)r(e)g(transferred)g(via)f
(FTP)h(from)g(ftp.cwi.nl,)h(in)e(the)h(directory)127 4170 y(/pub/p)n(ython.)
1704 4521 y(i)p eop
%%Page: 2 3
bop 127 1004 a Fl(Ac)-6 b(kno)g(wledgemen)g(ts)127 1636 y Fm(I)25
b(wish)g(to)g(express)i(thanks)d(to)h(the)h(follo)n(wing)21
b(p)r(eople:)127 1907 y(Guido)26 b(v)l(an)g(Rossum,)h(author)f(of)g(Python,)h
(for)f(designing)f(a)h(w)n(onderful)f(language,)g(helping)f(me)k(when)e(I)127
2098 y(had)e(questions,)g(and)g(advising)f(me)i(on)f(what)g(w)n(as)g
(practical)f(and)h(what)g(w)n(as)g(not.)34 b(He)25 b(not)f(only)f(assisted)
127 2289 y(in)h(the)i(design)e(pro)r(cess,)i(but)f(he)g(also)g(help)r(ed)f
(me)i(to)e(deduce)i(some)f(of)g(the)g(implemen)n(tation)d(tec)n(hniques)127
2481 y(that)j(I)g(used.)127 2752 y(Randy)d(P)n(ausc)n(h,)i(m)n(y)f(researc)n
(h)h(and)e(tec)n(hnical)g(advisor,)h(for)f(allo)n(wing)e(me)k(to)f(w)n(ork)f
(for)h(him)f(for)h(the)g(past)127 2943 y(t)n(w)n(o)h(y)n(ears.)127
3214 y(Rob)r(ert)j(DeLine,)i(b)r(oth)e(as)g(the)h(originator)d(of)i(some)h
(of)f(the)g(design)g(c)n(hanges)g(and)g(user)i(of)d(man)n(y)h(of)g(the)127
3405 y(mo)r(di\014cations)c(made.)127 3677 y(And,)37 b(\014nally)-6
b(,)34 b(to)g(Dr.)63 b(P)n(ausc)n(h's)35 b(User)g(In)n(terfaces)f(Group,)j
(of)d(whic)n(h)g(I)g(ha)n(v)n(e)g(the)h(honor)e(of)h(b)r(eing)g(a)127
3868 y(mem)n(b)r(er.)1693 4521 y(ii)p eop
%%Page: 3 4
bop 127 844 a Fl(Con)-6 b(ten)g(ts)127 1393 y Fk(Preface)2862
b(i)127 1661 y(Ac)n(kno)n(wledgemen)n(ts)2388 b(ii)127 1929
y(Abstract)2767 b(vi)127 2197 y(1)71 b(In)n(tro)r(duction)2531
b(1)242 2389 y Fm(1.1)78 b(Pro)t(ject)26 b(Bac)n(kground)68
b Fj(:)39 b(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g
(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)104
b Fm(1)242 2580 y(1.2)78 b(Justi\014cation)23 b(for)i(Pro)t(ject)62
b Fj(:)39 b(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f
(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)104
b Fm(2)242 2771 y(1.3)78 b(Ov)n(erview)25 b(of)f(Rep)r(ort)h(Con)n(ten)n(ts)
55 b Fj(:)39 b(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)
g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)104 b Fm(3)127
3039 y Fk(2)71 b(Theory)30 b(of)g(Ob)5 b(jects)2309 b(4)242
3230 y Fm(2.1)78 b(Basics)25 b(of)g(Ob)t(ject-Orien)n(ted)f(Programming)46
b Fj(:)39 b(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g
(:)g(:)g(:)g(:)g(:)f(:)104 b Fm(4)419 3421 y(2.1.1)88 b(Older)25
b(Metho)r(dologies)36 b Fj(:)j(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)
g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)104
b Fm(4)419 3613 y(2.1.2)88 b(The)25 b(Ob)t(ject)51 b Fj(:)39
b(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f
(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)104
b Fm(7)419 3804 y(2.1.3)88 b(Classes)25 b(and)g(Instances)70
b Fj(:)39 b(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g
(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)104 b Fm(8)419
3995 y(2.1.4)88 b(Inheritance)58 b Fj(:)39 b(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g
(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h
(:)g(:)g(:)g(:)g(:)g(:)f(:)104 b Fm(9)419 4186 y(2.1.5)88 b(Data)24
b(Protection)74 b Fj(:)39 b(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g
(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65
b Fm(10)1682 4521 y(iii)p eop
%%Page: 4 5
bop 419 70 a Fm(2.1.6)88 b(Abstraction)40 b Fj(:)f(:)g(:)g(:)g(:)f(:)h(:)g(:)
g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f
(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(10)242 261 y(2.2)78
b(Review)25 b(of)f(Ob)t(ject-Orien)n(ted)h(Languages)60 b Fj(:)38
b(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g
(:)g(:)g(:)f(:)65 b Fm(11)419 453 y(2.2.1)88 b(C++)23 b Fj(:)38
b(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g
(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65
b Fm(11)419 644 y(2.2.2)88 b(Smalltalk)56 b Fj(:)39 b(:)g(:)g(:)g(:)g(:)f(:)h
(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g
(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(12)419 835 y(2.2.3)88
b(Ob)t(jectiv)n(e-C)32 b Fj(:)39 b(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)
f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g
(:)g(:)g(:)f(:)65 b Fm(13)419 1026 y(2.2.4)88 b(Ei\013el)24
b Fj(:)38 b(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h
(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g
(:)g(:)f(:)65 b Fm(14)419 1217 y(2.2.5)88 b Fi(Self)28 b Fj(:)38
b(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g
(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65
b Fm(15)127 1486 y Fk(3)71 b(Design)2710 b(16)242 1677 y Fm(3.1)78
b(Incorp)r(oration)23 b(of)i Fh(self)i Fm(with)d(metho)r(d)h(calls)42
b Fj(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g
(:)g(:)g(:)g(:)f(:)65 b Fm(16)242 1868 y(3.2)78 b(Automatic)24
b(constructor)h(calls)47 b Fj(:)39 b(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g
(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65
b Fm(18)242 2059 y(3.3)78 b(Automatic)24 b(destructor)i(calls)g
Fj(:)38 b(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g
(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(19)242
2250 y(3.4)78 b(Protection)25 b(for)g(data)38 b Fj(:)h(:)g(:)g(:)g(:)f(:)h(:)
g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g
(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(20)242 2442 y(3.5)78
b(Protection)25 b(for)g(metho)r(ds)f Fj(:)39 b(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)
g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g
(:)g(:)g(:)g(:)f(:)65 b Fm(22)242 2633 y(3.6)78 b(Class)25
b(construction)f(in)h(C)76 b Fj(:)39 b(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)
g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g
(:)f(:)65 b Fm(23)127 2901 y Fk(4)71 b(Implemen)n(tation)27
b(and)i(T)-7 b(esting)1876 b(24)242 3092 y Fm(4.1)78 b(Implemen)n(tation)32
b Fj(:)39 b(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g
(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f
(:)65 b Fm(24)419 3283 y(4.1.1)88 b(Incorp)r(oration)22 b(of)j
Fh(self)i Fm(with)e(metho)r(d)g(calls)35 b Fj(:)k(:)g(:)g(:)f(:)h(:)g(:)g(:)g
(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(24)419 3475
y(4.1.2)88 b(Automatic)24 b(constructor)h(calls)40 b Fj(:)f(:)g(:)f(:)h(:)g
(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g
(:)f(:)65 b Fm(25)419 3666 y(4.1.3)88 b(Automatic)24 b(destructor)h(calls)19
b Fj(:)39 b(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g
(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(26)419 3857
y(4.1.4)88 b(Protection)24 b(for)h(metho)r(ds)77 b Fj(:)39
b(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f
(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(27)419 4048 y(4.1.5)88
b(Protection)24 b(for)h(data)32 b Fj(:)38 b(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h
(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g
(:)g(:)f(:)65 b Fm(28)419 4239 y(4.1.6)88 b(Class)25 b(construction)f(in)g(C)
69 b Fj(:)39 b(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)
g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(29)1683
4521 y(iv)p eop
%%Page: 5 6
bop 242 70 a Fm(4.2)78 b(T)-6 b(esting)78 b Fj(:)39 b(:)g(:)f(:)h(:)g(:)g(:)g
(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f
(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65
b Fm(30)419 261 y(4.2.1)88 b(Incorp)r(oration)22 b(of)j Fh(self)i
Fm(with)e(metho)r(d)g(calls)35 b Fj(:)k(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g
(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(30)419 453 y(4.2.2)88
b(Automatic)24 b(constructor)h(calls)40 b Fj(:)f(:)g(:)f(:)h(:)g(:)g(:)g(:)g
(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65
b Fm(31)419 644 y(4.2.3)88 b(Automatic)24 b(destructor)h(calls)19
b Fj(:)39 b(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g
(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(32)419 835 y(4.2.4)88
b(Protection)24 b(for)h(metho)r(ds)77 b Fj(:)39 b(:)g(:)g(:)g(:)f(:)h(:)g(:)g
(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f
(:)65 b Fm(33)419 1026 y(4.2.5)88 b(Protection)24 b(for)h(data)32
b Fj(:)38 b(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h
(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b
Fm(34)419 1217 y(4.2.6)88 b(Class)25 b(construction)f(in)g(C)69
b Fj(:)39 b(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g
(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65 b Fm(36)127 1486
y Fk(5)71 b(Conclusion)2550 b(37)242 1677 y Fm(5.1)78 b(Summary)62
b Fj(:)39 b(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f
(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g
(:)g(:)g(:)f(:)65 b Fm(37)242 1868 y(5.2)78 b(In)n(terpretation)32
b Fj(:)39 b(:)g(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g
(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g
(:)f(:)65 b Fm(38)242 2059 y(5.3)78 b(Recommendations)70 b
Fj(:)39 b(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g
(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)h(:)g(:)g(:)g(:)g(:)g(:)f(:)65
b Fm(39)127 2327 y Fk(Glossary)2752 b(41)127 2596 y(Bibliograph)n(y)2592
b(44)1694 4521 y Fm(v)p eop
%%Page: 6 7
bop 127 1004 a Fl(Abstract)127 1636 y Fm(Python)31 b(is)h(an)f(in)n
(terpreted)h(programming)d(language)h(that)h(pro)n(vides)g(simple)g(syn)n
(tax,)i(a)e(collection)f(of)127 1827 y(useful)g(data)f(t)n(yp)r(es,)j(and)e
(an)g(ob)t(ject-orien)n(ted)e(mo)r(del.)49 b(It)30 b(w)n(as)g(dev)n(elop)r
(ed)f(b)n(y)h(Guido)g(v)l(an)f(Rossum)i(at)127 2018 y(the)26
b(CWI)f(in)g(Amsterdam.)127 2289 y(The)34 b(ob)t(ject-orien)n(ted)e(mo)r(del)
h(of)g(Python)g(w)n(as)h(originally)29 b(limited)k(to)g(pro)n(viding)e(metho)
r(ds)j(and)f(data)127 2481 y(ob)t(jects)g(with)e(no)h(protection,)h(as)g(w)n
(ell)e(as)i(a)f(cum)n(b)r(ersome)h(syn)n(tax.)55 b(This)32
b(mo)r(del)f(w)n(as)i(redesigned)f(to)127 2672 y(correct)24
b(these)g(problems.)33 b(The)23 b(previous)g(necessit)n(y)g(of)g(calling)e
(an)h(instance)h(metho)r(d)g(with)f(the)i(instance)127 2863
y(is)c(no)g(longer)g(required.)32 b(Constructors)20 b(and)f(destructors)i
(are)g(no)n(w)e(executed)i(automatically)-6 b(.)28 b(Protection)127
3054 y(for)23 b(b)r(oth)g(v)l(ariables)f(and)h(metho)r(ds)h(w)n(as)f(added.)
33 b(Finally)-6 b(,)21 b(the)j(abilit)n(y)d(to)i(write)h(a)f(class)h
(completely)e(in)h(C)127 3245 y(has)i(b)r(een)h(pro)n(vided.)127
3517 y(The)i(new)f(mo)r(del)g(w)n(as)h(then)f(implemen)n(ted)g(b)n(y)g(c)n
(hanging)e(v)l(arious)h(sections)i(of)f(the)h(Python)f(co)r(de.)41
b(The)127 3708 y(mo)r(di\014cations)26 b(w)n(ere)j(then)g(tested,)h(some)f(b)
n(y)f(actual)f(inclusion)g(in)n(to)g(a)h(ma)t(jor)g(researc)n(h)i(pro)t(ject)
e(in)g(the)127 3899 y(Univ)n(ersit)n(y)c(of)h(Virginia)f(Computer)h(Science)h
(Departmen)n(t.)36 b(The)25 b(c)n(hanges)h(outlined)e(in)h(this)h(rep)r(ort)g
(are)127 4090 y(curren)n(tly)f(sc)n(heduled)g(to)g(b)r(e)g(included)f(with)h
(the)g(o\016cial)f(release)i(of)e(Python.)1683 4521 y(vi)p
eop
%%Page: 1 8
bop 127 933 a Fg(Chapter)57 b(1)127 1816 y Fl(In)-6 b(tro)6
b(duction)127 2368 y Fm(The)34 b(purp)r(ose)g(of)f(the)h(thesis)g(is)g(to)g
(impro)n(v)n(e)f(the)h(ob)t(ject-orien)n(ted)e(design)h(of)g(the)h(Python)f
(computer)127 2559 y(language)24 b(b)n(y)i(redesigning)f(and)h(reimplemen)n
(ting)e(selected)k(parts)e(of)g(the)h(language.)35 b(This)26
b(w)n(as)g(done)h(to)127 2750 y(impro)n(v)n(e)d(the)i(language)c(as)k(a)f
(whole)f(and)h(to)g(assist)g(in)g(Univ)n(ersit)n(y)f(of)g(Virginia)f(researc)
n(h)j(pro)t(jects.)127 3274 y Ff(1.1)117 b(Pro)6 b(ject)39
b(Bac)m(kground)127 3621 y Fm(Python)e(is)g(a)g(language)e(created)j(b)n(y)f
(Guido)f(can)h(Rossum,)k(a)d(researc)n(her)g(at)f(CWI,)h(a)f(go)n(v)n(ernmen)
n(t-)127 3812 y(sp)r(onsored)25 b(researc)n(h)h(institute)e(in)h(the)h
(Netherlands.)33 b(His)25 b(description)f(of)h(the)h(language)c(is)k(as)f
(follo)n(ws:)319 4127 y(Python)18 b(is)g(a)f(simple,)j(y)n(et)e(p)r(o)n(w)n
(erful,)f(in)n(terpreted)h(programming)e(language)f(that)i(bridges)h(the)319
4318 y(gap)27 b(b)r(et)n(w)n(een)h(C)g(and)f(shell)h(programming,)e(and)i(is)
f(th)n(us)h(ideally)e(suited)i(for)f(\\thro)n(w-a)n(w)n(a)n(y)1695
4521 y(1)p eop
%%Page: 2 9
bop 319 70 a Fm(programming")23 b(and)i(rapid)f(protot)n(yping)e([vR93b)o(,)k
(abstract].)127 415 y(One)h(of)f(Python's)h(adv)l(an)n(tages)e(o)n(v)n(er)h
(other)h(languages)e(of)h(its)h(kind)f(is)h(that)g(it)f(is)h(ob)t(ject)g
(orien)n(ted.)38 b(The)127 606 y(mo)r(del,)31 b(lik)n(e)d(the)i(language)e
(itself,)i(is)g(rather)g(simplistic;)h(classes)f(and)f(instances)h(can)g(b)r
(e)g(de\014ned,)h(and)127 797 y(inheritance)24 b(is)h(allo)n(w)n(ed.)32
b(No)25 b(data)f(protection)g(is)h(pro)n(vided.)127 1069 y(The)32
b(simplicit)n(y)e(of)i(the)g(mo)r(del,)i(ho)n(w)n(ev)n(er,)g(presen)n(ts)f
(man)n(y)e(problems.)55 b(First,)35 b(the)d(syn)n(tax)f(of)h(a)g(class)127
1260 y(hasn't)26 b(b)r(een)h(completely)e(re\014ned.)38 b(Eac)n(h)26
b(metho)r(d)g(m)n(ust)h(b)r(e)g(de\014ned)f(to)g(accept)h Fh(self)h
Fm(as)f(a)f(parameter,)127 1451 y(and)31 b(calls)f(to)h(class)h(metho)r(ds)g
(m)n(ust)f(pass)h(self)f(directly)-6 b(.)51 b(Besides)32 b(b)r(eing)e(cum)n
(b)r(ersome,)k(programmers)127 1642 y(frequen)n(tly)24 b(forget)g(to)h
(include)f Fh(self)k Fm(as)d(a)g(parameter)g(to)g(a)h(metho)r(d,)f(th)n(us)g
(leading)f(to)h(program)f(error.)127 1913 y(Second,)31 b(there)g(is)g(no)e
(data)h(protection)f(in)g(Python.)49 b(An)n(y)29 b(data)g(ob)t(ject)h(b)r
(elonging)e(to)i(an)g(instance)f(or)127 2105 y(metho)r(d)c(b)r(elonging)d(to)
i(a)h(class)g(ma)n(y)f(b)r(e)i(accessed,)g(regardless)f(of)f(the)h(nature)g
(of)f(the)h(requester.)35 b(Third,)127 2296 y(Python)f(do)r(es)h(not)f(allo)n
(w)e(either)i(constructors)h(or)g(destructors,)i(metho)r(ds)e(whic)n(h)f(are)
g(automatically)127 2487 y(called)25 b(up)r(on)g(instan)n(tiation)d(or)27
b(destruction)e(of)g(an)h(instance.)36 b(Finally)-6 b(,)24
b(Python)h(do)r(es)h(not)g(allo)n(w)e(classes)127 2678 y(to)j(b)r(e)h
(written)f(en)n(tirely)f(in)h(C.)g(This)g(is)h(b)r(ecause)f(a)h(metho)r(d)f
(m)n(ust)h(b)r(e)f(a)h(Python)e(function)g(rather)h(than)127
2869 y(an)n(y)d(t)n(yp)r(e)i(of)e(function,)g(Python)h(or)g(C.)127
3397 y Ff(1.2)117 b(Justi\014cation)39 b(for)f(Pro)6 b(ject)127
3744 y Fm(The)22 b(purp)r(ose)f(of)g(this)h(thesis)g(is)g(to)f(\014x)g(these)
i(problems,)f(in)f(order)h(to)g(impro)n(v)n(e)e(the)i(Python)f(language.)30
b(In)127 3936 y(brief,)21 b(the)g(design)f(goals)g(are)g(to)h(eliminate)e
(the)i(need)g(for)f Fh(self)p Fm(,)k(th)n(us)d(impro)n(ving)d(the)j(syn)n
(tax;)g(implemen)n(t)127 4127 y(data)26 b(protection,)g(constructors,)h(and)f
(destructors;)j(and)d(enable)g(classes)h(to)g(b)r(e)g(written)f(in)g(either)h
(C)f(or)127 4318 y(Python.)1695 4521 y(2)p eop
%%Page: 3 10
bop 127 70 a Fm(The)21 b(c)n(hanges)g(are)g(then)g(to)g(b)r(e)g(incorp)r
(orated)f(in)n(to)f(the)j(Python)e(language,)g(th)n(us)h(pro)n(viding)d(a)j
(net)g(b)r(ene\014t)127 261 y(for)27 b(Python)g(programmers)g(and)f(users.)42
b(Also,)28 b(Python)e(is)i(curren)n(tly)e(used)i(as)g(a)f(scripting)f
(language)f(in)127 453 y(the)32 b(User)i(In)n(terfaces)e(Group,)i(a)e
(researc)n(h)h(team)f(in)g(the)g(Departmen)n(t)g(of)g(Computer)f(Science)i
(headed)127 644 y(b)n(y)26 b(Dr.)39 b(Randy)25 b(P)n(ausc)n(h,)i(and)f(of)g
(whic)n(h)g(the)h(author)e(is)i(a)g(mem)n(b)r(er.)39 b(Man)n(y)25
b(of)h(the)h(mo)r(di\014cations)d(ha)n(v)n(e)127 835 y(already)g(b)r(een)h
(incorp)r(orated)f(in)n(to)g(Alice,)h(a)g(virtual)f(realit)n(y)f(to)r(olkit)g
(whic)n(h)h(utilizes)h(Python.)33 b([DeL93])127 1364 y Ff(1.3)117
b(Ov)m(erview)41 b(of)e(Rep)s(ort)g(Con)m(ten)m(ts)127 1712
y Fm(Although)25 b(the)j(design)f(goals)f(are)i(straigh)n(tforw)n(ard,)d(the)
i(decisions)g(that)g(m)n(ust)h(b)r(e)g(made)g(are)f(not.)41
b(Dif-)127 1903 y(feren)n(t)26 b(languages)e(ma)n(y)h(b)r(e)i(more)f(op)r(en)
g(or)g(restrictiv)n(e)g(on)f(the)i(issue)f(of)g(data)f(protection,)g(for)h
(instance.)127 2094 y(The)i(nature)g(of)f(the)h(language)e(itself)h(-)h(lo)n
(w)f(or)h(high)f(lev)n(el,)h(in)n(terpreted)f(or)h(compiled)f(-)h(m)n(ust)h
(b)r(e)f(tak)n(en)127 2285 y(in)n(to)c(accoun)n(t)g(with)h(resp)r(ect)h(to)f
(design.)127 2556 y(Hence,)h(the)g(nature)f(of)g(ob)t(ject-orien)n(ted)f
(programming)f(m)n(ust)j(b)r(e)g(examined,)f(and)g(along)e(with)i(it)g(man)n
(y)127 2747 y(of)k(the)g(languages)f(that)h(ha)n(v)n(e)f(b)r(een)i(dev)n
(elop)r(ed)e(and)h(their)g(re\014nemen)n(t)h(of)f(this)g(philosoph)n(y)-6
b(.)43 b(This)29 b(is)h(a)127 2939 y(requiremen)n(t)c(for)h(designing)d(the)j
(mo)r(di\014cations.)36 b(After)26 b(the)h(design)f(is)h(complete,)g(the)g(c)
n(hanges)f(will)f(b)r(e)127 3130 y(implemen)n(ted)f(and)h(tested.)1695
4521 y(3)p eop
%%Page: 4 11
bop 127 933 a Fg(Chapter)57 b(2)127 1816 y Fl(Theory)66 b(of)h(Ob)11
b(jects)127 2368 y Fm(In)35 b(order)h(to)f(redesign)g(the)h(Python)f(mo)r
(del,)j(a)d(basic)g(kno)n(wledge)e(of)i(the)g(theory)g(of)g(ob)t(ject-orien)n
(ted)127 2559 y(programming)23 b(\(also)i(kno)n(wn)f(as)i(OOP\))g(is)g
(required.)35 b(Kno)n(wledge)23 b(of)i(other)h(ob)t(ject-orien)n(ted)e
(languages)127 2750 y(is)h(also)g(helpful,)f(as)h(m)n(uc)n(h)g(can)g(b)r(e)h
(learned)f(from)g(the)g(w)n(orks)g(of)g(others.)127 3279 y
Ff(2.1)117 b(Basics)38 b(of)h(Ob)6 b(ject-Orien)m(ted)40 b(Programming)127
3712 y Fe(2.1.1)97 b(Older)32 b(Metho)s(dologies)127 4033 y
Fm(Standard)16 b(programming)f(languages)g(use)j(what)f(is)g(kno)n(wn)f(as)i
(pro)r(cess)g(abstraction.)30 b(Pro)r(cess)19 b(abstraction)127
4224 y(is)27 b(the)g(idea)e(that)h(programs)g(consist)h(of)f(data)g(and)f
(functions.)37 b([Seb89)o(,)28 b(page)e(322])g(The)g(functions)f(then)1695
4521 y(4)p eop
%%Page: 5 12
bop 127 70 a Fm(tak)n(e)38 b(data)f(as)h(parameters,)k(and)c(ma)n(y)f(return)
i(v)l(alues)e(or)h(ev)n(en)g(c)n(hange)f(the)h(data)g(itself.)71
b(What)38 b(is)127 261 y(imp)r(ortan)n(t)26 b(to)h(note)h(is)f(that)g(the)h
(functions)e(and)h(data)g(are)h(in)f(no)g(w)n(a)n(y)f(connected.)41
b(F)-6 b(or)28 b(instance,)g(tak)n(e)127 453 y(the)e(follo)n(wing)21
b(pseudo)r(co)r(de:)450 891 y Fh(variable)44 b(list:)e(array[50])i(of)e
(integers)450 987 y(variable)i(size:)e(integer)450 1178 y(function)i
(add_to_list\(va)q(ria)q(bl)q(e)i(the_list,)e(the_size,)g(new_item\))g(is)774
1274 y(the_size)f(=)e(the_size)j(+)d(1)774 1369 y(the_list[the_si)q(ze])46
b(=)41 b(new_item)450 1465 y(end)450 1656 y(//)g(sample)i(code)450
1847 y(add_to_list\(l)q(ist)q(,)j(size,)c(3\))127 2270 y Fm(The)20
b(ab)r(o)n(v)n(e)e(example)h(clearly)g(presen)n(ts)h(a)g(problem;)h(the)f
(list)g(and)f(its)g(size)i(are)f(con)n(tained)e(in)h(t)n(w)n(o)g(di\013eren)n
(t)127 2461 y(v)l(ariables.)52 b(This)31 b(could)g(easily)g(lead)g(to)h
(programmer)f(error.)55 b(Supp)r(ose)31 b(the)i(size)f(of)f(another)g(list)h
(w)n(as)127 2652 y(passed)e(to)g(the)h(function)d Fh(add_to_list)p
Fm(;)38 b(it)29 b(w)n(ould)g(cause)h(the)g(program)f(to)h(malfunction;)g
(data)f(could)127 2844 y(b)r(e)k(o)n(v)n(erwritten,)g(causing)f(subtle)g
(glitc)n(hes)g(that)g(w)n(ould)f(b)r(e)i(di\016cult)e(to)i(trace.)56
b(It)33 b(is)f(also)g(somewhat)127 3035 y(cum)n(b)r(ersome.)127
3306 y(Then,)h(the)f(concept)g(of)f(an)g(abstract)h(data)e(t)n(yp)r(e)i(w)n
(as)f(in)n(tro)r(duced.)53 b(In)31 b(its)h(most)g(simplistic)e(form,)k(an)127
3497 y(abstract)f(data)g(t)n(yp)r(e)g(is)g(a)h(w)n(a)n(y)e(of)h(organizing)d
(data)i(in)n(to)h(a)g(structure)h(whic)n(h)e(can)i(b)r(e)g(passed)f(in)n(to)g
(a)127 3688 y(function.)f(P)n(arts)26 b(of)f(the)g(structure)h(can)g(then)f
(b)r(e)h(accessed.)35 b(The)25 b(ab)r(o)n(v)n(e)f(co)r(de)i(lends)f(itself)f
(w)n(ell)g(to)h(this:)450 4127 y Fh(structure)44 b(ListType:)774
4222 y(variable)f(items:)g(array[50])h(of)d(integers)774 4318
y(variable)i(size:)g(integer)1695 4521 y Fm(5)p eop
%%Page: 6 13
bop 450 166 a Fh(function)44 b(add_to_list\(va)q(ria)q(bl)q(e)i(List,)c
(new_item\))i(is)774 261 y(List.size)g(=)c(List.size)45 b(+)40
b(1)774 357 y(List.items[List)q(.si)q(ze)q(])46 b(=)40 b(new_item)450
453 y(end)450 644 y(//)h(sample)i(code)450 835 y(variable)h(myList:)f
(ListType)450 1026 y(add_to_list\(m)q(yLi)q(st)q(,)i(3\))127
1462 y Fm(This)29 b(is)g(m)n(uc)n(h)h(more)f(con)n(v)n(enien)n(t)f(for)h(the)
g(programmer.)46 b(Ho)n(w)n(ev)n(er,)30 b(there)g(are)g(still)e(sev)n(eral)h
(problems)127 1653 y(with)d(this)g(approac)n(h.)37 b(First,)28
b(an)n(y)e(p)r(ortion)f(of)h(co)r(de)h(has)f(the)h(abilit)n(y)d(to)i(mo)r
(dify)g(the)g(in)n(ternal)f(v)l(ariables)127 1844 y(of)36 b(a)g(List.)67
b(This)35 b(leads)h(to)g(decreased)h(reliabilit)n(y)-6 b(,)35
b(as)h(a)h(piece)f(of)f(co)r(de)i(ma)n(y)e(mo)r(dify)g(the)h(v)l(ariables)127
2035 y(suc)n(h)g(that)f(a)g(later)g(op)r(eration)f(will)f(fail.)63
b(\(F)-6 b(or)35 b(instance,)j(freeing)d(the)h(memory)f(used)h(b)n(y)f(the)h
(items)127 2227 y(arra)n(y)-6 b(.\))37 b(More)27 b(imp)r(ortan)n(tly)-6
b(,)25 b(ho)n(w)n(ev)n(er,)h(it)h(causes)g(the)g(co)r(de)g(whic)n(h)f
(accesses)j(the)e(in)n(ternal)e(v)l(ariables)g(to)127 2418
y(b)r(ecome)i(dep)r(enden)n(t)f(up)r(on)g(the)h(implemen)n(tation)d(of)i(a)g
(List.)38 b([Mey88)o(,)28 b(page)e(22])g(If)g(the)h(programmer)f(is)127
2609 y(calling)h(functions)g(suc)n(h)j(as)f Fh(add_to_list)p
Fm(,)36 b Fh(delete_from_lis)q(t)p Fm(,)g(and)29 b Fh(sort_list)p
Fm(,)34 b(whether)c(a)f(list)f(is)127 2800 y(implemen)n(ted)i(as)g(an)g(arra)
n(y)g(or)g(link)n(ed)f(list)h(is)h(irrelev)l(an)n(t.)48 b(If)30
b(the)h(programmer)f(accesses)i(the)f(v)l(ariable)127 2991
y Fh(List.items)p Fm(,)f(it)25 b(b)r(ecomes)h(relev)l(an)n(t.)127
3263 y(Second,)c(the)h(programmer)e(is)h(no)n(w)f(dep)r(enden)n(t)g(on)h
(what)f(t)n(yp)r(e)g(a)h(v)l(ariable)d(is.)33 b(There)23 b(w)n(ould)d(b)r(e)i
(di\013eren)n(t)127 3454 y(functions)33 b(to)h(add)f(a)h(n)n(um)n(b)r(er)g
(to)g(a)g(list)f(and)h(to)g(a)g(binary)e(tree.)62 b(Finally)-6
b(,)34 b(it)g(is)g(di\016cult)f(to)h(mak)n(e)g(a)127 3645 y(new)c(t)n(yp)r(e)
g(of)f(list)h(-)g(p)r(erhaps)g(one)g(that)f(main)n(tains)f(a)i(sorted)g(list)
g(-)g(without)e(writing)g(an)i(en)n(tirely)e(new)127 3836 y(structure)37
b(and)e(new)g(functions.)64 b(F)-6 b(or)36 b(instance,)i(if)d(the)h(add)f
(function)e(for)j(a)f(sorted)h(list)f(w)n(as)h(called)127 4027
y Fh(add_to_sorted_)q(li)q(st)p Fm(,)f(then)27 b(the)h(programmer)g(w)n(ould)
e(ha)n(v)n(e)h(to)g(implemen)n(t)g(a)h(corresp)r(onding)e(delete)127
4219 y(function,)40 b(ev)n(en)e(if)f(the)h(delete)g(function)e(didn't)i(c)n
(hange;)44 b(otherwise,)d(programmers)c(w)n(ould)g(quic)n(kly)1695
4521 y(6)p eop
%%Page: 7 14
bop 127 70 a Fm(b)r(ecome)26 b(confused.)127 534 y Fe(2.1.2)97
b(The)32 b(Ob)5 b(ject)127 855 y Fm(The)36 b(fundamen)n(tal)d(concept)j(in)f
(OOP)i(is)f(the)g(notion)e(of)h(an)h(ob)t(ject.)65 b(An)36
b(ob)t(ject)g(is)g(a)f(collection)f(of)127 1047 y(v)l(ariables,)22
b(whic)n(h)h(hold)f(data,)h(and)g(metho)r(ds,)i(functions)d(whic)n(h)g(op)r
(erate)h(on)g(that)g(data.)33 b(It)24 b(is)f(similar)g(to)127
1238 y(a)k(structure,)i(except)f(that)f(metho)r(ds)h(are)f(also)g(con)n
(tained)f(within)f(the)j(structure.)41 b(Here)29 b(is)e(an)g(example)127
1429 y(of)e(a)g(List)g(ob)t(ject:)450 1878 y Fh(object)43 b(List:)774
1973 y(variable)g(items:)g(array[50])h(of)d(integers)774 2069
y(variable)i(size:)g(integer)774 2164 y(function)g(add\(variable)j
(new_item\))e(is:)1097 2260 y(List.size)g(=)d(List.size)j(+)d(1)1097
2355 y(List.items[Lis)q(t.s)q(iz)q(e])46 b(=)41 b(new_item)774
2451 y(end)450 2642 y(//)g(sample)i(code)450 2833 y(variable)h(myList:)f
(List)450 2929 y(myList.add\(3\))127 3362 y Fm(Not)20 b(only)g(is)h(the)g(co)
r(de)g(more)g(succinct,)h(but)e(it)h(is)g(easier)g(to)f(comprehend.)33
b(List)21 b(is)g(an)f(ob)t(ject)h(whic)n(h)e(holds)127 3553
y(data)31 b(-)g Fh(items)j Fm(and)d Fh(size)j Fm(-)d(and)g(a)h(metho)r(d)f
(called)f Fh(add)p Fm(.)55 b(The)32 b(metho)r(d)f(is)h(no)n(w)e(in)n
(tegrated)g(with)h(the)127 3744 y(data.)40 b(The)28 b(programmer)f(is)g(no)h
(longer)e(requesting)h(an)g(op)r(eration)f(on)h(a)g(piece)h(of)f(data)g(-)g
(instead,)h(it)f(is)127 3936 y(requesting)c(for)h(an)g(ob)t(ject)g(to)g(do)g
(something)f(to)h(itself.)33 b(The)24 b(main)g(di\013erence)g(b)r(et)n(w)n
(een)g(the)h(ob)t(ject)f(and)127 4127 y(the)c(previous)g(example)f(of)h(an)f
(abstract)h(data)f(t)n(yp)r(e)i(is)f(that)f(ob)t(jects)i(dep)r(end)f(on)g
(pro)r(cedural)f(abstraction,)127 4318 y(while)d(abstract)g(data)h(t)n(yp)r
(es)g(dep)r(end)g(on)g(t)n(yp)r(e)f(abstraction,)i(or)f(the)g(abilit)n(y)d
(to)j(create)h(structures.)33 b([Co)r(o91)n(])1695 4521 y(7)p
eop
%%Page: 8 15
bop 127 70 a Fe(2.1.3)97 b(Classes)33 b(and)e(Instances)127
391 y Fm(The)26 b(previous)e(example)h(created)h(a)g(single)e(ob)t(ject,)i
(rather)g(than)f(a)h(t)n(yp)r(e)f(of)g(ob)t(ject.)36 b(In)25
b(ob)t(ject-orien)n(ted)127 582 y(languages,)c(there)h(are)h(actually)c(t)n
(w)n(o)i(comp)r(onen)n(ts)h(to)g(an)f(ob)t(ject:)33 b(the)22
b(class,)h(or)f(the)h(`t)n(yp)r(e')f(of)g(an)f(ob)t(ject;)127
774 y(and)k(the)g(instance,)g(a)g(particular)f(v)n(ersion)g(of)h(the)h
(class.)127 1045 y(Th)n(us,)k(the)f(user)h(can)e(de\014ne)h(a)g(class)g
(called)e Fh(List)p Fm(;)33 b(it)c(will)e(not)h(b)r(e)i(an)e(actual)f(ob)t
(ject,)j(but)f(a)g(guideline)127 1236 y(for)24 b(creating)g(instances.)34
b(Instances)25 b(of)f(the)h(class)g(can)g(then)f(b)r(e)i(created,)f(th)n(us)g
(creating)f(individual)d(lists)127 1427 y(that)28 b(can)g(b)r(e)h
(manipulated.)41 b(Eac)n(h)28 b(instan)n(tiation)d(of)j(a)g(class)g(has)h
(its)f(o)n(wn)f(data,)i(but)f(shares)h(metho)r(ds)127 1618
y(with)24 b(other)i(instan)n(tiations)21 b(of)k(the)h(same)f(class.)450
2070 y Fh(class)43 b(List:)774 2165 y(variable)g(items:)g(array[50])h(of)d
(integers)774 2261 y(variable)i(size:)g(integer)774 2356 y(function)g
(add\(variable)j(new_item\))e(is:)1097 2452 y(List.size)g(=)d(List.size)j(+)d
(1)1097 2547 y(List.items[Lis)q(t.s)q(iz)q(e])46 b(=)41 b(new_item)774
2643 y(end)450 2834 y(//)g(sample)i(code)450 3025 y(variable)h(firstList:)g
(List)450 3121 y(variable)g(secondList:)h(List)450 3312 y(firstList.add)q
(\(3\))450 3408 y(secondList.ad)q(d\(5)q(\))127 3843 y(firstList)34
b Fm(and)28 b Fh(secondList)34 b Fm(b)r(oth)29 b(ha)n(v)n(e)g(v)l(ariables)e
(called)i Fh(items)j Fm(and)d Fh(size)p Fm(,)j(as)e(w)n(ell)e(as)i(a)g(metho)
r(d)127 4035 y(called)24 b Fh(add)p Fm(;)j(ho)n(w)n(ev)n(er,)e(the)h(con)n
(ten)n(ts)f(of)f(the)i(v)l(ariables)d(are)j(di\013eren)n(t.)1695
4521 y(8)p eop
%%Page: 9 16
bop 127 70 a Fe(2.1.4)97 b(Inheritance)127 391 y Fm(Inheritance)23
b(is)h(the)h(abilit)n(y)c(to)j(de\014ne)g(a)g(new)g(class)g(based)g(on)g(one)
g(or)g(more)h(previous)e(classes.)34 b(The)24 b(new)127 582
y(class)h(can)f(acquire)g(v)l(ariables)e(and)i(metho)r(ds,)i(and)e(has)g(the)
h(abilit)n(y)d(to)i(selectiv)n(ely)g(c)n(hange)f(the)i(b)r(eha)n(vior)127
774 y(of)g(its)g(\\base")f(classes.)127 1045 y(The)d(list)f(in)g(the)h
(previous)f(example)g(dep)r(ends)h(en)n(tirely)f(up)r(on)g(the)h(order)g(in)g
(whic)n(h)e(n)n(um)n(b)r(ers)i(w)n(ere)h(added;)127 1236 y(adding)j(5)i(and)g
(3)g(w)n(ould)e(result)j(in)e(a)i(list)e(con)n(taining)e(the)k(n)n(um)n(b)r
(er)f(5,)h(follo)n(w)n(ed)c(b)n(y)j(the)g(n)n(um)n(b)r(er)h(3.)40
b(An)127 1427 y(in)n(teresting)26 b(idea)g(w)n(ould)f(b)r(e)j(to)e(create)i
(a)f(list)f(whic)n(h)g(sorted)h(the)g(list)g(after)f(eac)n(h)h(addition,)e
(so)j(that)e(the)127 1618 y(list)g(w)n(as)h(alw)n(a)n(ys)e(in)i(n)n(umerical)
f(order.)39 b(Instead)27 b(of)g(de\014ning)e(an)i(en)n(tirely)f(new)h(class,)
h(SortedList)e(could)127 1810 y(simply)e(inherit)h(from)f(List.)450
2261 y Fh(class)43 b(SortedList:)i(inherit)e(from)f(List)774
2356 y(function)h(add\(variable)j(new_item\))e(is:)1097 2452
y(List.add\(new_i)q(tem)q(\))1097 2547 y(sort\(List.item)q(s\))774
2643 y(end)127 3079 y Fm(Inheritance)32 b(allo)n(ws)g(programmers)h(to)g
(reuse)h(as)g(m)n(uc)n(h)f(co)r(de)h(as)g(p)r(ossible;)j(new)c(features)g
(can)g(b)r(e)h(in-)127 3270 y(corp)r(orated)29 b(without)e(rewriting)h
(pre-existing)g(co)r(de,)j(as)e(demonstrated)g(ab)r(o)n(v)n(e.)46
b(Multiple)27 b(inheritance)127 3461 y(also)j(exists;)j(this)e(allo)n(ws)d(a)
i(new)h(class)f(to)h(inherit)e(from)h(more)h(than)f(one)g(class.)50
b(This)30 b(feature)g(is)h(v)n(ery)127 3652 y(con)n(tro)n(v)n(ersial,)23
b(and)i(is)g(b)r(ey)n(ond)g(the)g(scop)r(e)h(of)f(this)g(thesis.)1695
4521 y(9)p eop
%%Page: 10 17
bop 127 70 a Fe(2.1.5)97 b(Data)31 b(Protection)127 391 y Fm(One)e(ma)t(jor)f
(problem)g(with)g(the)h(List)g(class)g(as)h(written)e(is)h(that)f(a)h
(programmer)f(is)h(allo)n(w)n(ed)d(to)j(mo)r(dify)127 582 y(the)g(items)f
(and)g(size)h(v)l(ariables)d(directly)-6 b(.)41 b(This)28 b(is)h(not)e
(desirable;)j(an)n(y)d(additional)d(functionalit)n(y)g(could)127
774 y(easily)k(b)r(e)h(incorp)r(orated)e(in)n(to)h(either)h(the)g(original)d
(class)j(or)g(a)g(sub)r(class)g(\(a)g(class)g(whic)n(h)e(inherits)i(from)127
965 y(another)c(class.\))35 b(In)25 b(fact,)g(allo)n(wing)d(the)k(user)g
(access)h(means)f(that)f(a)g(c)n(hange)g(in)g(the)g(implemen)n(tation)e(of)
127 1156 y(List)i(w)n(ould)f(cause)i(co)r(de)f(failure.)127
1427 y(Data)33 b(protection)f(is)i(the)g(abilit)n(y)d(to)j(protect)f(data)g
(ob)t(jects)h(and)f(ev)n(en)h(metho)r(ds)g(from)f(unauthorized)127
1618 y(access.)h(The)19 b(List)h(class)g(could)f(b)r(e)h(rewritten)f(so)h
(that)f(the)h(v)l(ariables)e(items)i(and)f(size)h(w)n(ould)e(b)r(e)i
(accessible)127 1810 y(only)25 b(within)g(the)j(metho)r(ds)f(de\014ned)f(in)h
(List;)h(nothing)d(else)i(w)n(ould)e(b)r(e)i(able)f(to)h(access)h(them.)39
b(Not)27 b(only)127 2001 y(w)n(ould)e(this)h(increase)g(reliabilit)n(y)-6
b(,)23 b(but)j(it)h(also)e(forces)i(the)f(programmer)g(to)h(view)e(a)h(List)h
(not)f(as)g(a)h(set)g(of)127 2192 y(v)l(ariables)c(and)i(metho)r(ds,)h(but)f
(as)g(an)g(ob)t(ject)g(whic)n(h)f(follo)n(ws)f(commands.)127
2656 y Fe(2.1.6)97 b(Abstraction)127 2977 y Fm(Pro)r(cedural)32
b(abstraction)e(is)i(highly)e(desired)j(in)f(ob)t(ject-orien)n(ted)e
(programming.)53 b(It)32 b(means)g(that)g(the)127 3169 y(programmer)c(no)h
(longer)e(has)i(to)g(concern)g(himself)f(with)g(the)h(implemen)n(tation)d(of)
i(a)h(class;)i(rather,)f(the)127 3360 y(programmer)24 b(can)g(simply)f(deal)g
(with)h(a)g(prepac)n(k)l(aged)e(ob)t(ject)i(that)g(has)g(a)g(set)h(of)f
(callable)d(metho)r(ds.)35 b(An)127 3551 y(example)24 b(is)i(as)f(follo)n
(ws:)450 4002 y Fh(class)43 b(List:)774 4098 y(function)g(add\(item\))774
4193 y(function)g(delete\(item\))774 4289 y(function)g(sort\(item\))1676
4521 y Fm(10)p eop
%%Page: 11 18
bop 127 70 a Fm(These)20 b(primitiv)n(es)f(allo)n(w)e(programmers)j(to)g(w)n
(ork)f(at)h(a)g(higher)f(lev)n(el)g(than)g(if)g(they)h(w)n(ere)g(concerned)g
(ab)r(out)127 261 y(the)26 b(implemen)n(tation)c(of)j(a)g(List,)h(or)f(if)f
(they)i(w)n(ere)f(forced)g(to)g(call)g(functions)e(suc)n(h)j(as)f(add)p
Fh(_)p Fm(to)p Fh(_)p Fm(list.)127 791 y Ff(2.2)117 b(Review)41
b(of)d(Ob)6 b(ject-Orien)m(ted)40 b(Languages)127 1138 y Fm(In)27
b(order)f(to)h(design)f(a)h(b)r(etter)g(mo)r(del)f(for)g(Python,)h(a)g(study)
f(w)n(as)h(made)f(of)g(some)i(of)e(the)h(ma)t(jor)f(ob)t(ject-)127
1329 y(orien)n(ted)31 b(languages)e(a)n(v)l(ailable)f(to)r(da)n(y)-6
b(.)51 b(They)31 b(are)g(ordered)h(b)n(y)f(usage;)k(C++)c(and)g(Smalltalk)d
(are)k(the)127 1520 y(most)26 b(common)e(ob)t(ject-orien)n(ted)g(languages)f
(used)j(to)r(da)n(y)-6 b(,)24 b(while)g Fi(Self)h Fm(is)g(largely)f(a)h
(researc)n(h)h(pro)t(ject.)127 1792 y(By)20 b(studying)g(these)h(languages,)f
(it)h(is)g(hop)r(ed)f(that)h(the)g(designer)f(can)h(learn)f(from)h(previous)f
(exp)r(erimen)n(ts,)127 1983 y(and)25 b(th)n(us)g(create)h(a)f(higher-qualit)
n(y)c(mo)r(del.)127 2447 y Fe(2.2.1)97 b(C++)127 2768 y Fm(C++)28
b(is)g(curren)n(tly)f(the)h(most)h(p)r(opular)d(ob)t(ject-orien)n(ted)g
(language.)40 b(Designed)27 b(b)n(y)h(Bjarne)f(Stroustrup)127
2959 y(in)h(the)h(early)f(to)g(mid)g(1980s,)h(it)f(w)n(as)g(based)h(on)f(C,)h
(a)f(compiled)g(language)e(whic)n(h)h(enjo)n(y)n(ed)g(widespread)127
3151 y(p)r(opularit)n(y)22 b(at)j(the)h(time)f(and)g(still)f(do)r(es)i(to)r
(da)n(y)-6 b(.)127 3422 y(In)31 b(C++,)h(data)e(ob)t(jects)h(and)g(metho)r
(ds)g(asso)r(ciated)f(with)g(a)h(class)g(can)g(ha)n(v)n(e)f(three)h
(di\013eren)n(t)g(kinds)f(of)127 3613 y(protection:)j(public,)24
b(wherein)h(all)f(ha)n(v)n(e)g(access;)j(protected,)e(wherein)g(an)g
(instance)f(of)h(that)g(class)g(or)g(an)n(y)127 3804 y(descendan)n(t)31
b(class)g(has)f(access;)36 b(and)30 b(priv)l(ate,)h(where)g(only)f(an)g
(instance)h(of)f(that)g(particular)f(class)i(has)127 3995 y(access.)127
4267 y(Instances)22 b(ha)n(v)n(e)f(v)l(ariables)f(for)h(not)g(only)g(the)h
(class)g(it)f(is)h(a)g(mem)n(b)r(er)g(of)g(but)f(all)g(sup)r(erclasses)i(of)e
(that)g(par-)1676 4521 y(11)p eop
%%Page: 12 19
bop 127 70 a Fm(ticular)23 b(class.)34 b(Multiple)21 b(inheritance)i(is)h
(also)f(supp)r(orted.)34 b(C++)23 b(also)g(allo)n(ws)f(metho)r(ds)i(to)g(b)r
(e)h(o)n(v)n(erriden)127 261 y(in)g(sub)r(classes,)h(but)f(the)h(original)c
(metho)r(d)j(m)n(ust)h(b)r(e)g(sp)r(eci\014ed)f(as)h(virtual.)32
b([Str91)o(,)26 b(page)f(181-211])450 713 y Fh(class)43 b(List)f({)774
808 y(int)f(size;)774 904 y(int)g(items[50];)774 999 y(void)h(add\(int)h
(item\);)450 1095 y(})450 1286 y(void)f(List::add\(int)k(item\))c({)774
1382 y(size++;)774 1477 y(items[size])i(=)d(item;)450 1573
y(})127 2122 y Fe(2.2.2)97 b(Smalltalk)127 2443 y Fm(Smalltalk)20
b(w)n(as)j(the)g(\014rst)h(ma)t(jor)f(ob)t(ject-orien)n(ted)e(language.)31
b(It)23 b(w)n(as)g(dev)n(elop)r(ed)f(in)h(the)g(1970s)f(at)h(Xero)n(x)127
2634 y(P)-6 b(AR)n(C)33 b(based)i(on)e(ideas)h(b)n(y)g(Dr.)62
b(Alan)33 b(Ka)n(y)-6 b(.)59 b(An)35 b(in)n(terpreted)e(language,)i(it)f(has)
g(undergone)f(man)n(y)127 2825 y(revisions;)25 b(Smalltalk-80)c(is)k(the)h(v)
n(ersion)e(discussed)i(here.)35 b([GR83)o(])127 3096 y(In)f(Smalltalk,)f(all)
f(program)h(units)h(are)g(ob)t(jects.)59 b(Eac)n(h)34 b(ob)t(ject)g(can)g(ha)
n(v)n(e)e(priv)l(ate)h(\(but)g(not)h(public\))127 3288 y(data)26
b(ob)t(jects)h(as)g(w)n(ell)e(as)i(public)f(metho)r(ds,)h(and)g(is)f(an)h
(instance)f(of)g(a)h(particular)e(class.)39 b([Seb89)o(,)28
b(pages)127 3479 y(462-463])450 3930 y Fh(class)43 b(name)607
b(List)450 4025 y(superclass)j(Object)450 4121 y(instance)44
b(variable)g(names)82 b(size)1460 4217 y(items)1676 4521 y
Fm(12)p eop
%%Page: 13 20
bop 450 70 a Fh(new)774 166 y(^)40 b(super)j(new)450 357 y(add:)f(item)450
453 y(\(et)g(cetera\))127 888 y Fm(In)27 b(some)h(resp)r(ects,)i(Smalltalk)24
b(is)k(similar)e(to)h(Python.)40 b(V)-6 b(ariables)25 b(are)j(un)n(t)n(yp)r
(ed;)g(in)e(other)i(w)n(ords,)f(they)127 1079 y(are)g(not)g(prede\014ned)g
(as)h(in)n(tegers,)g(strings,)g(etc.,)h(but)e(rather)g(are)h(de\014ned)f(b)n
(y)g(w)n(a)n(y)f(of)g(executable)h(co)r(de.)127 1271 y(Smalltalk,)f(lik)n(e)h
(Python,)h(is)g(in)n(terpreted.)43 b(One)28 b(main)f(di\013erence)h(lies)g
(in)f(the)i(re\014nemen)n(t)f(of)g(the)g(OOP)127 1462 y(abilities)23
b(of)i(the)g(t)n(w)n(o)g(languages.)127 1926 y Fe(2.2.3)97
b(Ob)5 b(jectiv)m(e-C)127 2247 y Fm(Ob)t(jectiv)n(e-C)26 b(is)h(the)g(second)
g(ob)t(ject-orien)n(ted)f(language)e(based)j(on)g(C;)g(th)n(us,)h(it)f(comp)r
(eted)g(with)f(C++.)127 2438 y(Although)k(it)i(w)n(as)g(adopted)g(as)g(the)h
(o\016cial)e(language)f(b)n(y)i(NeXT,)h(it)f(has)g(not)g(met)h(with)f(the)h
(success)127 2630 y(C++)25 b(has)g(had.)127 2901 y(Class)e(de\014nitions)e
(consist)i(of)g(t)n(w)n(o)f(\014les:)34 b(the)23 b(in)n(terface)g(\014le,)g
(whic)n(h)g(lists)g(data)f(ob)t(jects)h(and)g(metho)r(ds,)h(as)127
3092 y(w)n(ell)e(as)i(the)g(base)g(class)g(if)f(necessary;)i(and)e(the)h
(implemen)n(tation)d(\014le,)j(whic)n(h)e(con)n(tains)g(executable)h(co)r(de)
127 3283 y(for)i(the)g(metho)r(ds.)35 b([PW91,)26 b(pages)f(63-65])450
3734 y Fh(//)41 b(Interface)k(to)c(class)h(List)450 3926 y(@interface)j
(List:)d(Object)450 4021 y({)774 4117 y(int)f(size;)774 4212
y(int)g(items[50];)450 4308 y(})1676 4521 y Fm(13)p eop
%%Page: 14 21
bop 450 70 a Fh(-)41 b(add:)h(\(int\))h(item;)450 166 y(-)e(delete:)i
(\(int\))g(item;)450 261 y(-)e(sort;)450 453 y(//)g(Implementatio)q(n)46
b(of)41 b(class)h(List)450 644 y(@implementati)q(on)k(List)450
739 y(-)41 b(add:)h(\(int\))h(item)450 835 y({)774 931 y(size)f(=)e(size)i(+)
f(1;)774 1026 y(items[size])j(=)d(item;)450 1122 y(})450 1217
y(\(et)h(cetera\))127 1653 y Fm(V)-6 b(ariables)23 b(cannot)h(b)r(e)h
(rede\014ned)h(b)n(y)e(sub)r(classes;)j(metho)r(ds,)e(on)g(the)g(other)g
(hand,)g(can)g(b)r(e.)34 b(Ob)t(jectiv)n(e)24 b(C)127 1844
y(is)h(in)g(man)n(y)g(w)n(a)n(ys)f(mo)r(deled)h(on)g(Smalltalk.)127
2309 y Fe(2.2.4)97 b(Ei\013el)127 2630 y Fm(Ei\013el)28 b(is)h(a)g(compiled)f
(ob)t(ject-orien)n(ted)f(language)f(dev)n(elop)r(ed)h(b)n(y)i(Dr.)45
b(Bertrand)28 b(Mey)n(er.)45 b(It)29 b(emphases)127 2821 y(classical)24
b(soft)n(w)n(are)g(engineering)f(tec)n(hniques)i(suc)n(h)h(as)f(reusabilit)n
(y)-6 b(,)23 b(correctness,)k(and)e(main)n(tenance.)127 3092
y(Ei\013el)35 b(supp)r(orts)h(b)r(oth)f(public)g(and)g(priv)l(ate)f(data)h
(ob)t(jects,)k(priv)l(ate)34 b(b)r(eing)h(the)h(default.)64
b(All)35 b(public)127 3283 y(ob)t(jects)25 b(m)n(ust)g(b)r(e)g(explicitly)d
(declared)i(using)g(the)h(exp)r(ort)f(command.)34 b(An)24 b(example)g(class)h
(is)g(as)g(follo)n(ws:)450 3734 y Fh(class)43 b(LIST)f(export)774
3830 y(add,)g(delete,)h(sort)450 3926 y(feature)774 4021 y(size:)f(INTEGER;)
774 4117 y(items:)g(ARRAY[INTEGER)q(];)774 4308 y(add)f(\(item:)i(INTEGER\))h
(is)1676 4521 y Fm(14)p eop
%%Page: 15 22
bop 854 70 a Fh(\(et)42 b(cetera\))127 506 y Fm(Ei\013el)28
b(also)f(allo)n(ws)e(m)n(ultiple)h(inheritance)h(and)g(a)h(n)n(um)n(b)r(er)g
(of)f(sp)r(ecialized)g(features)h(to)f(insure)h(program)127
697 y(correctness,)h(including)24 b(assertions.)39 b([Mey88)o(,)28
b(pages)f(475-488])d(There)k(is)f(also)f(an)g(Ei\013el)h(v)l(arian)n(t)e
(called)127 888 y(Sather,)j(whic)n(h)e(sacri\014ces)h(some)h(of)e(the)i(soft)
n(w)n(are)e(engineering)f(tec)n(hniques)i(in)f(order)h(to)g(create)h(a)f
(more)127 1079 y(practical)d(language.)31 b([Omo91)o(])127
1544 y Fe(2.2.5)97 b Fd(Self)127 1865 y Fi(Self)27 b Fm(is)h(an)f(exp)r
(erimen)n(tal)e(language)g(that)i(is)g(b)r(eing)f(dev)n(elop)r(ed)g(b)n(y)h
(Sun)g(Microsystems)h(and)e(Stanford)127 2056 y(Univ)n(ersit)n(y)-6
b(.)50 b(It)32 b(is)f(unique)f(among)g(the)i(languages)d(listed)i(here)h(b)r
(ecause)f(it)g(do)r(es)h(not)f(ha)n(v)n(e)f(classes)i(or)127
2247 y(v)l(ariables.)319 2603 y Fi(Self)25 b Fm(is)g(an)f(ob)t(ject-orien)n
(ted)f(language)f(for)i(exploratory)f(programming)f(based)j(on)f(a)h(small)
319 2794 y(n)n(um)n(b)r(er)k(of)f(simple)g(and)f(concrete)i(ideas:)40
b(protot)n(yp)r(es,)29 b(slots,)h(and)d(b)r(eha)n(vior.)42
b(Protot)n(yp)r(es)319 2985 y(com)n(bine)29 b(inheritance)e(and)h(instan)n
(tiation)e(to)i(pro)n(vide)g(a)h(framew)n(ork)e(that)i(is)g(simpler)g(and)319
3176 y(more)c(\015exible)f(than)f(most)i(ob)t(ject-orien)n(ted)e(languages.)
32 b(Slots)24 b(unite)g(v)l(ariables)e(and)i(pro)r(ce-)319
3368 y(dures)d(in)n(to)d(a)h(single)g(construct...)33 b(Finally)-6
b(,)18 b(b)r(ecause)i Fi(Self)g Fm(do)r(es)f(not)g(distinguish)f(state)h
(from)319 3559 y(b)r(eha)n(vior,)30 b(it)f(narro)n(ws)f(the)i(gaps)f(b)r(et)n
(w)n(een)g(ordinary)f(ob)t(jects,)j(pro)r(cedures,)g(and)e(closures.)319
3750 y([US87)o(])127 4105 y(Because)g(of)e(this,)j(and)d(due)i(to)f(the)h
(rather)f(obtuse)h(syn)n(tax,)f Fi(Self)h Fm(has)f(neither)g(b)r(een)h
(widely)e(used)i(nor)127 4297 y(its)c(ideas)g(utilized)f(in)h(man)n(y)f
(other)h(languages.)1676 4521 y(15)p eop
%%Page: 16 23
bop 127 933 a Fg(Chapter)57 b(3)127 1816 y Fl(Design)127 2368
y Fm(This)24 b(section)h(of)f(the)h(thesis)h(will)d(discuss)i(the)g(design)f
(c)n(hanges)h(for)f(Python,)h(as)g(w)n(ell)f(as)h(their)f(rationale.)127
2559 y(The)f(c)n(hanges)g(include)f(the)h(elimination)d(of)i(the)h(need)h(to)
f(pass)g Fh(self)p Fm(,)j(constructor)d(and)f(destructor)i(calls,)127
2750 y(data)g(protection)f(for)h(b)r(oth)g(v)l(ariables)e(and)i(metho)r(ds,)i
(and)e(the)g(abilit)n(y)e(to)i(construct)h(classes)g(en)n(tirely)f(in)127
2941 y(C.)127 3471 y Ff(3.1)117 b(Incorp)s(oration)39 b(of)f
Fc(self)i Ff(with)f(metho)s(d)e(calls)127 3818 y Fm(As)e(originally)30
b(designed,)36 b(Python)d(required)h(that)g Fh(self)i Fm(-)f(the)f(instance)g
(ob)t(ject)g(-)g(b)r(e)h(accepted)f(as)h(a)127 4009 y(parameter)25
b(to)g(class)h(metho)r(ds.)34 b(F)-6 b(or)25 b(example:)1676
4521 y(16)p eop
%%Page: 17 24
bop 450 70 a Fh(class)43 b(List:)774 166 y(def)e(add\(self,)j(item\):)1097
261 y(self.items.app)q(end)q(\(i)q(tem)q(\))450 453 y(x)d(=)g(List\(\))204
b(#)41 b(create)i(an)e(instance)j(of)d(class)i(List)450 548
y(x.add\(3\))286 b(#)41 b(this)h(command)i(or)450 644 y(List.add\(x,3\))86
b(#)41 b(this)h(one)g(do)f(the)h(same)g(thing)127 1055 y Fm(This)29
b(syn)n(tax)f(causes)j(man)n(y)d(problems.)47 b(First,)31 b(programmers)e
(frequen)n(tly)f(forget)h(to)g(put)g Fh(self)j Fm(at)d(the)127
1246 y(b)r(eginning)22 b(of)j(a)g(parameter)g(tuple.)33 b(This)25
b(w)n(ould)e(only)g(generate)i(an)g(error)g(if)g Fh(self)i
Fm(w)n(as)d(accessed)j(in)d(the)127 1437 y(metho)r(d.)33 b(Otherwise,)25
b(parameters)f(w)n(ould)d(hold)i(unexp)r(ected)g(v)l(alues;)h(for)f
(instance,)h(if)f(the)h(metho)r(d)f(add)127 1628 y(w)n(as)i(de\014ned)g(as)h
(ha)n(ving)d(one)i(parameter)g(named)g(item,)h(then)f(its)h(v)l(alue)d(when)i
(called)f(w)n(ould)g(b)r(e)i(a)f(tuple)127 1820 y(with)i(t)n(w)n(o)f(v)l
(alues;)j(the)f(\014rst)g(v)l(alue)e(w)n(ould)g(b)r(e)i(the)g(instance)f
(\(i.e.)42 b Fh(self)p Fm(\))29 b(and)e(the)h(second)g(v)l(alue)e(w)n(ould)
127 2011 y(b)r(e)g(the)f(n)n(um)n(b)r(er)h(that)e(add)h(w)n(as)g(called)f
(with.)127 2282 y(Besides)c(causing)f(programmer)g(error,)j(the)e(syn)n(tax)f
(also)g(is)i(rather)f(a)n(wkw)n(ard;)f(most)i(other)f(OO)g(languages)127
2473 y(automatically)i(handle)j(setting)h(the)g(v)l(alue)f(of)g(the)i(curren)
n(t)f(instance.)36 b(Finally)-6 b(,)24 b(the)j(reason)f(for)f(it)h(b)r(eing)
127 2664 y(there)c(w)n(as)f(simply)f(a)h(matter)h(of)e(con)n(v)n(enience)h
(when)g(classes)h(w)n(ere)f(\014rst)h(implemen)n(ted.)32 b(Python)21
b(actually)127 2856 y(mo)r(di\014es)e(the)g(list)f(of)h(parameters)g(passed)g
(to)g(a)g(metho)r(d,)h(putting)e(the)h(instance)g(ob)t(ject)f(at)h(the)g(b)r
(eginning;)127 3047 y(when)24 b(the)g(user)i(t)n(yp)r(es)e(the)g(command)g
Fh(x.add\(3\))p Fm(,)29 b(the)24 b(add)g(metho)r(d)g(actually)e(gets)i(a)g
(parameter)g(list)g(of)127 3238 y Fh(\(x,3\).)37 b Fm(Th)n(us,)25
b Fh(self)i Fm(is)f(required)f(in)f(order)i(to)f(kno)n(w)f(what)g(the)i
(curren)n(t)g(instance)e(is.)127 3509 y(The)36 b(prop)r(osed)g(design)f(w)n
(ould)g(no)g(longer)g(require)i Fh(self)h Fm(in)d(the)i(list)e(of)h
(parameters.)67 b(Instead,)39 b(the)127 3700 y(instance)30
b(w)n(ould)f(automatically)e(b)r(e)32 b(inserted)e(in)n(to)g(the)h(v)l
(ariable)e(name)h(space)i(\(the)f(lo)r(cal)e(dictionary\))127
3891 y(whenev)n(er)18 b(the)h(metho)r(d)f(is)h(called.)30 b(This)18
b(w)n(ould)f(allo)n(w)f(for)i(the)g(follo)n(wing)c(syn)n(tax)k(when)g(a)g
(class)h(is)f(de\014ned:)450 4318 y Fh(class)43 b(List:)1676
4521 y Fm(17)p eop
%%Page: 18 25
bop 774 70 a Fh(def)41 b(add\(item\):)1097 166 y(self.items.app)q(end)q(\(i)q
(tem)q(\))127 584 y Fm(Th)n(us,)26 b(lik)n(e)e(other)h(ob)t(ject-orien)n(ted)
f(languages,)f(the)j(programmers)f(w)n(ould)f(not)h(ha)n(v)n(e)g(to)g
(concern)g(them-)127 775 y(selv)n(es)h(with)e(acquiring)f(the)i(curren)n(t)h
(instance)f(ob)t(ject.)127 1302 y Ff(3.2)117 b(Automatic)37
b(constructor)h(calls)127 1649 y Fm(The)25 b(previous)e(example)h
(demonstrated)h(ho)n(w)e(classes)j(can)e(b)r(e)i(created)f(in)f(Python;)g
(executing)g Fh(Class\(\))127 1841 y Fm(returns)32 b(an)f(instance)g(of)g(t)n
(yp)r(e)g Fh(Class)p Fm(.)56 b(There)31 b(are)h(man)n(y)f(cases,)j(ho)n(w)n
(ev)n(er,)f(when)e(the)h(user)g(w)n(an)n(ts)f(to)127 2032 y(initialize)16
b(certain)k(v)l(ariables)d(when)i(an)h(instance)f(is)g(created.)33
b(F)-6 b(or)20 b(example,)g(when)f(a)h(new)f(List)h(is)g(created,)127
2223 y(setting)27 b(the)i(size)f(of)f(the)i(list)e(to)h(zero)g(w)n(ould)e(b)r
(e)j(necessary)-6 b(.)42 b(In)28 b(Python,)h(this)e(can)h(b)r(e)h(done)e(man)
n(ually)-6 b(,)127 2414 y(b)n(y)25 b(de\014ning)f(an)h(initializatio)o(n)c
(metho)r(d)k(and)f(calling)f(it.)450 2848 y Fh(class)43 b(List:)774
2944 y(def)e(init\(\):)1097 3039 y(self.size=0)450 3231 y(x)g(=)g(List\(\))
124 b(#)40 b(create)j(an)e(instance)j(of)d(List)450 3326 y(x.init\(\))206
b(#)40 b(initialize)45 b(it)127 3744 y Fm(One)25 b(ob)n(vious)d(problem)i(is)
h(that)f(the)g(initialization)c(metho)r(d)k(\(also)f(called)h(a)g
(constructor\))g(migh)n(t)g(not)g(b)r(e)127 3936 y(called,)k(due)h(to)f
(programmer)g(error.)43 b(This)28 b(w)n(ould)f(cause)h(the)h(program)e(to)h
(fail)f(if)g(the)i(constructor)f(did)127 4127 y(something)d(critical)f(to)i
(the)g(op)r(eration)f(of)g(the)h(instance,)g(suc)n(h)h(as)f(v)l(ariable)d
(initialization)e(or)26 b(op)r(ening)f(a)127 4318 y(net)n(w)n(ork)f
(connection.)1676 4521 y(18)p eop
%%Page: 19 26
bop 127 70 a Fm(A)26 b(solution)f(that)h(most)g(ob)t(ject-orien)n(ted)f
(languages,)g(including)e(C++)j(and)g(Smalltalk,)e(use)j(is)g(to)f(allo)n(w)
127 261 y(metho)r(ds)d(with)f(a)h(certain)f(name)h(\()p Fh(new)h
Fm(in)f(the)g(case)h(of)e(Smalltalk,)f(or)i(the)g(name)g(of)f(the)h(class)g
(in)g(the)g(case)127 453 y(of)d(C++\))g(to)g(b)r(e)h(called)e(automatically)e
(when)j(an)g(instance)g(is)g(created.)33 b(Not)20 b(only)f(do)r(es)i(this)f
(impro)n(v)n(e)f(the)127 644 y(c)n(hances)25 b(for)f(a)g(correct)i(program,)e
(but)g(it)h(is)f(also)g(v)n(ery)g(space)h(e\016cien)n(t,)h(requiring)c(just)j
(one)f(line)g(instead)127 835 y(of)h(t)n(w)n(o)f(to)h(create)h(an)f
(instance.)127 1106 y(This)17 b(abilit)n(y)e(w)n(ould)h(b)r(e)j(extremely)e
(useful)h(in)f(Python,)i(esp)r(ecially)d(as)i(there)h(is)f(no)f(w)n(a)n(y)g
(to)h(de\014ne)f(v)l(ariables)127 1297 y(without)f(executing)i(co)r(de.)32
b(Th)n(us,)20 b(in)d(the)i(previous)e(example,)j(the)e(statemen)n(t)h
Fh(x)40 b(=)h(List\(\))21 b Fm(w)n(ould)c(create)127 1489 y(an)26
b(instance)g(of)g(class)h Fh(List)p Fm(,)i(call)d(the)h Fh(init)h
Fm(metho)r(d,)f(and)f(return)h(an)g(initialized)c(instance.)37
b(The)27 b(tuple)127 1680 y(follo)n(wing)21 b(the)26 b(class)f(name)g(could)f
(b)r(e)i(used)g(as)g(a)f(parameter)g(list)g(to)g(call)f Fh(init)j
Fm(with.)127 1951 y(Ho)n(w)n(ev)n(er,)38 b(since)f(man)n(y)f(Python)f
(classes)i(already)e(ha)n(v)n(e)h(a)g(metho)r(d)g(called)f
Fh(init)p Fm(,)41 b(giving)34 b(this)i(name)127 2142 y(constructor)d(status)g
(w)n(ould)f(break)h(existing)e(co)r(de.)58 b(In)34 b(Python,)g(names)g
(surrounded)f(b)n(y)f(t)n(w)n(o)h(under-)127 2333 y(scores)27
b(imply)e(sp)r(ecial)g(signi\014cance;)h(therefore,)g(the)h(name)f
Fh(__init__)k Fm(w)n(as)25 b(c)n(hosen.)37 b(Finally)-6 b(,)24
b(note)i(that)127 2525 y(constructors)f(are)h(not)f(necessary;)h(if)f(the)g
(metho)r(d)g(is)h(not)f(found,)f(it)h(is)g(not)g(called.)127
3054 y Ff(3.3)117 b(Automatic)37 b(destructor)i(calls)127 3401
y Fm(The)29 b(case)h(ma)n(y)e(also)h(b)r(e)g(made)g(that)g(an)f(automatic)g
(destructor)h(-)g(that)g(is,)h(a)f(metho)r(d)g(whic)n(h)f(is)i(called)127
3592 y(up)r(on)25 b(deletion)f(of)h(an)h(instance)f(-)h(is)g(required.)35
b(In)26 b(man)n(y)f(compiled)f(languages,)g(an)h(instance)h(ma)n(y)f(wish)127
3783 y(to)30 b(free)g(resources,)j(suc)n(h)d(as)g(memory)-6
b(,)31 b(\014les,)g(or)f(screen)h(space,)h(when)d(it)h(is)g(destro)n(y)n(ed;)
i(the)e(destructor)127 3975 y(pro)n(vides)24 b(a)h(con)n(v)n(enien)n(t)f(w)n
(a)n(y)g(of)h(doing)e(this.)127 4246 y(In)h(Python,)f(this)h(is)g(not)f(as)h
(m)n(uc)n(h)g(of)f(an)g(issue.)34 b(Eac)n(h)24 b(ob)t(ject)g(in)f(Python)g
(has)h(a)f(reference)i(n)n(um)n(b)r(er;)g(this)1676 4521 y(19)p
eop
%%Page: 20 27
bop 127 70 a Fm(indicates)27 b(ho)n(w)h(man)n(y)g(ob)t(jects)g(curren)n(tly)g
(ha)n(v)n(e)g(access)i(to)e(that)g(ob)t(ject.)44 b(When)28
b(an)g(ob)t(ject's)h(reference)127 261 y(coun)n(t)c(b)r(ecomes)h(zero,)g(it)f
(is)g(destro)n(y)n(ed.)34 b(\(This)25 b(is)g(ho)n(w)f(an)h(instance)g(is)g
(destro)n(y)n(ed)g(-)g(it's)h(coun)n(t)e(b)r(ecomes)127 453
y(zero.\))67 b(Ho)n(w)n(ev)n(er,)38 b(when)d(an)h(instance)f(is)h(destro)n(y)
n(ed,)j(all)c(v)l(ariables)f(b)r(elonging)f(to)i(the)i(instance)e(are)127
644 y(destro)n(y)n(ed)25 b(as)g(w)n(ell;)g(th)n(us,)h(there)f(should)g(b)r(e)
g(no)g(resources)i(to)e(free)h(up.)127 915 y(Ho)n(w)n(ev)n(er,)39
b(they)d(ma)n(y)g(still)f(b)r(e)i(useful,)i(particularly)34
b(for)i(our)g(researc)n(h;)43 b(when)37 b(a)f(graphical)e(ob)t(ject's)127
1106 y(reference)22 b(coun)n(t)e(go)r(es)i(to)e(zero,)j(it)e(could)f(disapp)r
(ear.)32 b(Th)n(us,)22 b(the)f(metho)r(d)g Fh(__del__)p Fm(,)k(if)c(presen)n
(t,)h(is)g(called)127 1297 y(whenev)n(er)j(an)g(instance's)g(reference)i
(coun)n(t)d(b)r(ecomes)j(zero.)127 1826 y Ff(3.4)117 b(Protection)39
b(for)g(data)127 2174 y Fm(In)25 b(order)f(to)h(insure)g(that)f(programmers)g
(use)i(the)f(pro)n(vided)e(abstractions)g(\(for)h(the)h(List)g(class,)h(the)f
(add,)127 2365 y(delete,)e(and)e(sort)g(metho)r(ds\),)i(the)f(in)n(ternal)e
(v)l(ariables)f(of)i(a)g(class)h(m)n(ust)g(ha)n(v)n(e)f(the)g(abilit)n(y)e
(to)i(b)r(e)h(protected)127 2556 y(from)31 b(access)h(b)n(y)e(other)h(ob)t
(jects.)52 b(Not)30 b(only)g(will)f(this)i(ensure)h(abstraction,)f(but)g(it)f
(will)f(also)i(impro)n(v)n(e)127 2747 y(reliabilit)n(y)22 b([Seb89)o(,)k
(page)e(323])h(.)127 3019 y(Languages)j(suc)n(h)i(as)g(C++)g(and)f(Ob)t
(jectiv)n(e)g(C)h(allo)n(w)d(the)j(user)h(to)e(explicitly)e(declare)j(whic)n
(h)e(data)h(are)127 3210 y(to)e(b)r(e)h(priv)l(ate)e(and)h(whic)n(h)g(are)g
(to)h(b)r(e)g(public;)f(this)h(is)f(done)g(when)h(the)f(class)h(is)g
(declared.)40 b(This)27 b(design)127 3401 y(prop)r(oses)e(a)h(similar)d
(design)i(for)g(Python:)450 3852 y Fh(class)43 b(List:)774
3948 y(access)f(size,)h(items:)g(private)774 4043 y(def)e(add\(item\):)774
4139 y(\(et)g(cetera\))1676 4521 y Fm(20)p eop
%%Page: 21 28
bop 127 70 a Fm(The)29 b Fh(access)k Fm(command)28 b(is)i(follo)n(w)n(ed)c(b)
n(y)j(an)n(y)g(n)n(um)n(b)r(er)g(of)g(v)l(ariables)e(separated)j(b)n(y)f
(commas;)j(this)d(list)127 261 y(is)i(then)g(follo)n(w)n(ed)d(b)n(y)j(a)f
(colon)g(and)g(the)i(t)n(yp)r(e)f(of)f(protection)g(a)n(w)n(arded)f(to)i
(those)g(v)l(ariables.)49 b(T)n(yp)r(es)31 b(of)127 453 y(protection)24
b(include:)127 808 y Fk(Public)40 b Fm(Accessible)25 b(to)g(all.)127
1063 y Fk(Guarded)39 b Fm(Accessible)25 b(to)g(an)n(y)g(metho)r(d)g(in)f(an)h
(instance.)127 1317 y Fk(Priv)-5 b(ate)39 b Fm(Accessible)25
b(only)f(to)h(the)h(metho)r(ds)f(of)g(a)g(certain)g(class.)127
1673 y(In)k(addition,)f(read)h(and)f(write)h(attributes)f(can)h(b)r(e)g(giv)n
(en.)44 b(These)30 b(can)f(b)r(e)g(com)n(bined)f(in)h(an)n(y)f(w)n(a)n(y)-6
b(.)44 b(An)127 1864 y(example:)450 2315 y Fh(class)f(List:)774
2411 y(access)f(size,)h(items:)g(private,)g(public)g(read)774
2506 y(access)f(foo:)g(public)774 2602 y(def)f(add\(item\):)935
2697 y(...)127 3133 y Fm(In)23 b(this)g(case,)h(the)f(v)l(ariables)e
Fh(size)k Fm(and)e Fh(items)i Fm(can)e(b)r(e)g(read)g(b)n(y)g(an)n(y)f(ob)t
(ject,)i(but)e(can)h(only)f(b)r(e)h(mo)r(di\014ed)127 3324
y(b)n(y)i(the)h(add)f(metho)r(d)g(de\014ned)g(in)g(class)h(List.)35
b(In)25 b(addition,)e(an)n(y)i(metho)r(d)g(de\014ned)g(in)g(a)h(sub)r(class)f
(of)g(List)127 3515 y(will)e(not)h(b)r(e)h(able)f(to)g(mo)r(dify)f(those)i(t)
n(w)n(o)f(v)l(ariables;)f(this)h(w)n(ould)f(b)r(e)i(p)r(ossible)f(if)g(the)g
(v)l(ariables)f(had)h(b)r(een)127 3707 y(declared)h Fh(guarded)p
Fm(.)1676 4521 y(21)p eop
%%Page: 22 29
bop 127 70 a Ff(3.5)117 b(Protection)39 b(for)g(metho)s(ds)127
418 y Fm(In)17 b(addition,)f(man)n(y)g(OO)h(languages)d(allo)n(w)g
(protection)i(for)g(metho)r(ds)h(as)g(w)n(ell.)30 b(It)17 b(is)g(o)r
(ccasionally)c(desirable)127 609 y(that)31 b(a)h(certain)f(metho)r(d)g(not)h
(b)r(e)g(used)g(as)g(an)f(abstraction,)h(esp)r(ecially)e(if)h(unauthorized)f
(or)i(incorrect)127 800 y(usage)25 b(of)f(the)h(metho)r(d)g(in)f(question)g
(w)n(ould)f(cause)j(failure)d(of)h(the)h(program.)33 b(As)26
b(the)f(original)d(v)n(ersion)i(of)127 991 y(Python)h(do)r(es)g(not)g(supp)r
(ort)g(the)h(abilit)n(y)c(to)j(protect)g(metho)r(ds,)h(this)f(design)g(prop)r
(oses)g(them.)127 1262 y(When)h(de\014ning)e(a)i(class,)g(a)f(group)g(of)g
(metho)r(ds)h(w)n(ould)e(b)r(e)i(de\014ned)f(as)h(public)f(or)g(priv)l(ate)g
(b)n(y)g(b)r(eginning)127 1454 y(the)g(blo)r(c)n(k)f(with)g
Fh(public:)37 b Fm(or)24 b Fh(private:)p Fm(,)29 b(in)c(order)g(to)f
(indicate)g(the)h(protection)e(alloted)g(to)i(that)f(blo)r(c)n(k.)127
1645 y(The)f(blo)r(c)n(k)e(w)n(ould)g(b)r(e)i(terminated)f(b)n(y)h(either)f
(the)h(termination)e(of)h(the)h(class)g(de\014nition)d(or)j(the)g(presence)
127 1836 y(of)i(another)f(blo)r(c)n(k.)33 b(Public)25 b(is)g(the)h(default)d
(protection,)i(for)f(reasons)i(of)f(bac)n(kw)n(ards)e(compatibilit)n(y)-6
b(.)450 2287 y Fh(class)43 b(List:)774 2383 y(def)e(add\(item\):)976
2478 y(...)774 2574 y(def)g(delete\(item\):)976 2670 y(...)450
2765 y(private:)774 2861 y(def)g(list-access-on)q(ly)q(\(\))q(:)976
2956 y(...)127 3392 y Fm(In)23 b(this)f(particular)f(case,)k(while)c(an)n(y)h
(ob)t(ject)h(could)e(call)h(the)h(metho)r(ds)g Fh(add)h Fm(and)f
Fh(delete)p Fm(,)j(only)c(the)h(three)127 3583 y(metho)r(ds)i(of)g(class)h
Fh(List)h Fm(can)e(execute)h(the)f(metho)r(d)g Fh(list-access-o)q(nl)q(y)p
Fm(.)1676 4521 y(22)p eop
%%Page: 23 30
bop 127 70 a Ff(3.6)117 b(Class)39 b(construction)f(in)h(C)127
418 y Fm(The)31 b(last)g(planned)f(design)g(c)n(hange)h(is)g(to)g(add)g(the)g
(abilit)n(y)e(to)i(construct)g(classes)h(in)f(C.)g(Curren)n(tly)-6
b(,)32 b(in)127 609 y(order)26 b(to)f(create)i(a)e(class)h(whic)n(h)f(can)g
(supp)r(ort)h(instances)g(and)f(sub)r(classing,)g(the)h(class)g(m)n(ust)g(b)r
(e)g(written)127 800 y(en)n(tirely)d(in)g(Python.)33 b(While)23
b(this)g(is)h(the)g(most)g(common)g(usage,)g(it)f(limits)g(the)h
(extensibilit)n(y)d(of)i(Python.)127 1071 y(The)f(researc)n(h)h(here,)h(for)e
(instance,)h(consists)g(of)e(man)n(y)h(prepac)n(k)l(aged)e(classes;)25
b(while)c(they)h(could)f(b)r(e)i(writ-)127 1262 y(ten)18 b(in)f(Python,)i(it)
e(w)n(ould)f(b)r(e)i(m)n(uc)n(h)g(more)g(e\016cien)n(t)g(to)f(co)r(de)h(them)
g(in)f(C,)h(since)g(C)g(is)g(a)f(compiled)g(language.)127 1454
y(Since)i(Python)f(is)h(written)g(in)f(C,)i(including)c(the)j(p)r(ortions)f
(that)h(de\014ne)g(classes,)i(the)f(mo)r(di\014cations)c(should)127
1645 y(b)r(e)26 b(rather)f(straigh)n(tforw)n(ard.)1676 4521
y(23)p eop
%%Page: 24 31
bop 127 933 a Fg(Chapter)57 b(4)127 1816 y Fl(Impl)o(em)-5
b(en)f(tation)62 b(and)k(T)-17 b(esting)127 2510 y Ff(4.1)117
b(Implemen)m(tation)127 2857 y Fm(The)26 b(implemen)n(tation)d(of)i(the)h(en)
n(tire)f(pro)t(ject)h(b)r(egan)f(in)g(July)g(1992.)34 b(Most)25
b(of)g(the)h(co)r(ding)f(w)n(as)g(\014nished)127 3048 y(b)n(y)20
b(Decem)n(b)r(er,)j(with)d(some)h(main)n(tenance)e(taking)f(place)i(in)h(the)
f(early)g(mon)n(ths)g(of)g(1993.)31 b(Although)18 b(m)n(uc)n(h)127
3240 y(co)r(de)25 b(w)n(as)g(mo)r(di\014ed,)g(most)h(of)e(the)i(c)n(hanges)f
(w)n(ere)g(restricted)h(to)f(a)g(few)g(relev)l(an)n(t)f(mo)r(dules.)127
3704 y Fe(4.1.1)97 b(Incorp)s(oration)32 b(of)g Fb(self)h Fe(with)f(metho)s
(d)c(calls)127 4025 y Fm(The)23 b(implemen)n(tation)d(b)r(egan)i(on)g(July)g
(2nd,)h(1992,)f(and)g(w)n(as)h(\014nished)f(the)h(next)g(da)n(y)-6
b(.)32 b(The)23 b(only)e(mo)r(dule)127 4216 y(a\013ected)28
b(w)n(as)f Fh(ceval.c)p Fm(,)k(the)d(in)n(terpreter.)41 b(The)28
b(mo)r(di\014ed)e(function)g(w)n(as)h Fh(call_function)p Fm(,)34
b(whic)n(h)27 b(w)n(as)1676 4521 y(24)p eop
%%Page: 25 32
bop 127 70 a Fm(executed)26 b(when)f(a)g(function)e(or)i(metho)r(d)h(written)
e(in)h(Python)g(w)n(as)f(called.)127 341 y(In)30 b(previous)f(v)n(ersions)g
(of)g(Python,)i(if)e(the)h(Python)f(function)f(w)n(as)i(actually)d(an)j
(instance)f(metho)r(d,)i(the)127 533 y(instance)21 b(w)n(as)h(put)f(at)g(the)
h(b)r(eginning)e(of)h(the)h(tuple)f(passed)h(to)f(that)g(metho)r(d.)33
b(This)21 b(w)n(as)h(the)g(reason)f(wh)n(y)127 724 y Fh(self)27
b Fm(w)n(as)e(required)g(in)g(the)g(de\014ned)h(parameter)f(list)f(of)h(a)g
(metho)r(d.)127 995 y(This)d(particular)e(piece)j(of)f(co)r(de)g(w)n(as)g
(deleted.)33 b(Instead,)23 b(the)g(creation)e(of)h(a)g(lo)r(cal)f(dictionary)
f(w)n(as)i(mo)n(v)n(ed)127 1186 y(to)i(the)h(b)r(eginning)d(of)i(the)g
(function,)g(and)f(the)i(instance)f(ob)t(ject)g(w)n(as)g(inserted)h(in)n(to)e
(the)i(lo)r(cal)e(dictionary)127 1377 y(under)i(the)g(name)g
Fh(self)p Fm(.)36 b(This)25 b(sim)n(ulates)f(the)h(old)f(metho)r(d,)i(but)f
(do)r(es)g(not)f(require)h(that)g(self)g(b)r(e)g(placed)127
1569 y(in)n(to)f(the)i(tuple)e(in)h Fh(call_function)31 b Fm(and)25
b(remo)n(v)n(ed)g(in)g(the)g(metho)r(d.)127 1840 y(Main)n(tenance)31
b(to)r(ok)h(place)h(on)f(August)h(13,)h(when)f(it)g(w)n(as)g(disco)n(v)n
(ered)f(that)g(the)i(previous)e(syn)n(tax)g(for)127 2031 y(calling)25
b(a)j(class)f(metho)r(d)h(with)f(the)g(curren)n(t)i(instance)e(failed.)39
b(Mo)r(di\014cations)25 b(w)n(ere)j(made)f(to)h(the)g(same)127
2222 y(function,)23 b(allo)n(wing)e(it)k(to)f(use)h(the)g(curren)n(t)h(v)l
(alue)d(of)h Fh(self)p Fm(,)j(acquired)d(from)g(the)h(lo)r(cal)e(dictionary)
-6 b(,)22 b(to)j(b)r(e)127 2413 y(passed)h(to)f(the)g(class)h(metho)r(d.)127
2878 y Fe(4.1.2)97 b(Automatic)29 b(constructor)j(calls)127
3199 y Fm(The)26 b(implemen)n(tation)d(of)j(constructors)g(w)n(as)g(done)f
(on)h(July)f(3,)h(1992.)35 b(The)26 b(mo)r(dules)g(a\013ected)g(included)127
3390 y Fh(ceval.c)41 b Fm(and)c Fh(classobject.c)p Fm(,)47
b(whic)n(h)37 b(handle)f(all)h(class-related)f(functionalit)n(y)-6
b(.)67 b(The)38 b(header)g(\014le)127 3581 y Fh(classobject.h)d
Fm(w)n(as)29 b(also)f(c)n(hanged)g(in)h(order)g(to)g(allo)n(w)e(a)i(new)h
(parameter)f(to)g Fh(newinstanceobje)q(ct)q Fm(,)127 3772 y(the)d(function)d
(whic)n(h)h(creates)i(instances)g(of)e(a)h(particular)f(class.)127
4044 y(In)29 b(the)g(function)e Fh(call_builtin)34 b Fm(lo)r(caled)28
b(in)g Fh(ceval.c)p Fm(,)34 b(the)29 b(parameter)g(tuple)f(w)n(as)g(ignored)g
(if)g(a)h(clas-)127 4235 y(sob)t(ject)34 b(w)n(as)g(b)r(eing)f(called.)60
b(This)33 b(w)n(as)h(c)n(hanged)f(to)h(allo)n(w)e(the)i(tuple)g(to)g(b)r(e)g
(passed.)61 b(This)34 b(allo)n(w)n(ed)1676 4521 y(25)p eop
%%Page: 26 33
bop 127 70 a Fm(constructor)25 b(calls)g(to)g(ha)n(v)n(e)f(parameters.)35
b(The)25 b(tuple)f(w)n(as)h(then)h(passed)f(to)g Fh(newinstanceob)q(je)q(ct)p
Fm(.)127 341 y(In)19 b Fh(classobject.c)p Fm(,)26 b(the)20
b(function)d Fh(newinstanceobj)q(ec)q(t)24 b Fm(w)n(as)19 b(mo)r(di\014ed)f
(to)h(allo)n(w)e(the)i(additional)c(argu-)127 533 y(men)n(t.)33
b(If)21 b(a)g(tuple)g(w)n(as)g(passed)g(in)g(the)g(argumen)n(t)g(list,)g(and)
g(the)g(class)h(in)e(question)h(de\014ned)g(a)g(constructor)127
724 y(function)g(\(a)i(function)e(called)h Fh(__init__)p Fm(\),)27
b(then)c(the)h(constructor)e(w)n(ould)g(b)r(e)h(called)f(with)g(the)h
(argumen)n(t)127 915 y(list.)62 b(If)34 b(there)h(w)n(as)f(an)g(argumen)n(t)g
(list)g(but)h(no)f(constructor,)j(an)d(error)h(w)n(as)f(returned,)k
(indicating)32 b(a)127 1106 y(malfunction.)47 b(Also,)31 b(a)f(n)n(um)n(b)r
(er)g(of)g(small)f(c)n(hanges)h(w)n(ere)h(made)f(to)g(a)n(v)n(oid)e(w)n
(arnings)h(when)h(compiling)127 1297 y(the)c(co)r(de.)127 1569
y(A)58 b(\014x)g(w)n(as)g(implemen)n(ted)f(on)g(Octob)r(er)i(5,)66
b(1992,)f(to)58 b(insure)g(that)f(the)i(v)l(alue)d(returned)j(b)n(y)127
1760 y Fh(newinstanceobj)q(ec)q(t)31 b Fm(w)n(as)25 b(not)f(a)i
Fh(NULL)h Fm(v)l(alue.)33 b(A)25 b Fh(NULL)i Fm(return)f(v)l(alue)e
(indicates)g(a)h(malfunction.)127 2224 y Fe(4.1.3)97 b(Automatic)29
b(destructor)j(calls)127 2545 y Fm(Destructors)37 b(w)n(ere)h(implemen)n(ted)
d(on)i(No)n(v)n(em)n(b)r(er)f(14,)j(1992;)j(the)37 b(mo)r(di\014cations)d(w)n
(ere)j(made)g(in)f(the)127 2736 y(\014le)d Fh(classobject.c)39
b Fm(to)33 b(the)h(function)d Fh(instance_deal)q(lo)q(c)p Fm(.)64
b(This)33 b(particular)e(function)h(w)n(as)h(called)127 2928
y(whenev)n(er)25 b(an)g(instance)g(w)n(as)g(to)g(b)r(e)g(deleted.)127
3199 y(Instead)i(of)f(simply)h(releasing)f(the)h(memory)g(o)r(ccupied)g(b)n
(y)g(the)g(instance,)h(testing)e(w)n(as)h(done)g(to)g(see)h(if)f(a)127
3390 y(destructor)f(\()p Fh(__del__)p Fm(\))i(metho)r(d)d(w)n(as)g
(de\014ned.)34 b(If)25 b(so,)h(then)f(it)g(w)n(as)g(called,)g(then)g(memory)g
(w)n(as)g(freed.)127 3661 y(One)33 b(problem)g(w)n(as)g(that,)i(in)e(the)g
(destructor)h(metho)r(d,)i(an)c(ob)t(ject)i(could)e(create)i(a)f(reference)h
(to)f(the)127 3852 y(instance;)e(if)d(an)h(access)i(to)d(that)h(instance)g(o)
r(ccured)g(after)g(deallo)r(cation,)e(a)i(malfunction)d(w)n(ould)i(o)r(ccur.)
127 4044 y(Precautions)d(w)n(ere)h(tak)n(en)f(to)g(insure)h(that)f(an)g(ob)t
(ject)g(w)n(ould)f(not)h(b)r(e)h(freed)g(from)f(memory)h(if)f(references)127
4235 y(to)30 b(it)h(w)n(ere)f(created;)k(if)c(the)h(reference)g(coun)n(t)f(w)
n(as)h(ab)r(o)n(v)n(e)e(zero,)k(meaning)c(a)h(new)g(reference)i(had)e(b)r
(een)1676 4521 y(26)p eop
%%Page: 27 34
bop 127 70 a Fm(created,)26 b(then)f(the)h(ob)t(ject)f(w)n(as)g(not)g
(deleted.)127 535 y Fe(4.1.4)97 b(Protection)32 b(for)g(metho)s(ds)127
856 y Fm(Implemen)n(tation)17 b(of)h(protection)g(for)g(metho)r(ds)h(b)r
(egan)f(in)h(Octob)r(er)g(1992)e(and)i(w)n(as)f(completed)h(in)f(Jan)n(uary)
127 1047 y(1993.)33 b(Three)25 b(mo)r(dules)g(w)n(ere)h(a\013ected)f(b)n(y)g
(the)h(c)n(hanges:)33 b Fh(compile.c)p Fm(,)d(whic)n(h)24 b(transforms)h
(Python)g(pro-)127 1238 y(grams)c(in)n(to)e(a)i(b)n(yte)g(co)r(de;)h
Fh(ceval.c)p Fm(,)k(a)20 b(mo)r(dule)g(whic)n(h)g(executes)i(said)e(b)n(yte)g
(co)r(de;)j(and)d Fh(classobject.c)q Fm(.)127 1429 y(The)25
b(Python)g(grammar)g(\014le,)g Fh(Grammar)p Fm(,)k(also)24
b(had)h(to)g(b)r(e)h(c)n(hanged)e(to)h(allo)n(w)e(for)i(new)g(syn)n(tax.)127
1700 y(In)53 b(\014le)h Fh(compile.c)p Fm(,)65 b(the)53 b(function)f
Fh(com_classdef)59 b Fm(w)n(as)53 b(mo)r(di\014ed)g(to)g(initialize)d(a)k
(list)f(called)127 1892 y Fh(privatemethods)q Fm(.)37 b(The)18
b(in)n(ten)n(t)g(of)f(this)h(list)g(w)n(as)g(to)g(con)n(tain)f(the)h(names)h
(of)f(all)f(de\014ned)h(priv)l(ate)f(metho)r(ds.)127 2083 y(A)n(t)26
b(the)g(same)g(time,)h(a)f(new)f(function,)g Fh(com_classmetho)q(ds)q
Fm(,)31 b(w)n(as)26 b(de\014ned.)36 b(This)25 b(w)n(as)h(called)f(when)g(the)
127 2274 y(user)f(had)e(de\014ned)g(a)h(blo)r(c)n(k)e(of)h(classmetho)r(ds;)i
(the)f(blo)r(c)n(k)f(could)f(either)i(b)r(e)g(lab)r(eled)f
Fh(public)j Fm(or)e Fh(private)p Fm(.)127 2465 y(If)i(priv)l(ate,)f(all)g(of)
h(the)g(function)f(names)h(w)n(ould)f(b)r(e)i(added)e(to)h(the)h(list)f
Fh(privatemethods)p Fm(.)127 2736 y(The)20 b(function)f Fh(build_class)25
b Fm(w)n(as)20 b(c)n(hanged)g(in)g(the)g(\014le)h Fh(ceval.c)p
Fm(.)35 b(All)20 b(priv)l(ate)f(functions)g(w)n(ere)i(remo)n(v)n(ed)127
2928 y(from)j(the)g(dictionary)d(of)i(metho)r(ds)h(passed)g(to)g
Fh(build_class)p Fm(,)29 b(and)24 b(w)n(ere)g(inserted)g(in)f(their)h(o)n(wn)
f(priv)l(ate)127 3119 y(dictionary)-6 b(.)50 b(The)31 b(dictionary)e(w)n(as)i
(then)g(passed)h(as)g(an)f(additional)c(parameter)32 b(to)f
Fh(newclassobject)q Fm(,)127 3310 y(de\014ned)20 b(in)h Fh(classobject.c)p
Fm(.)38 b(The)21 b(priv)l(ate)e(metho)r(d)h(dictionary)e(w)n(as)j(then)f
(inserted)h(in)n(to)f(the)h(class)f(data)127 3501 y(structure.)127
3772 y(The)29 b(function)e Fh(class_getattr)35 b Fm(w)n(as)28
b(also)g(mo)r(di\014ed)g(to)h(c)n(hec)n(k)g(the)h(dictionaries)c(for)j(b)r
(oth)f(public)g(and)127 3964 y(priv)l(ate)33 b(metho)r(ds.)64
b(If)34 b(the)h(metho)r(d)g(w)n(as)f(found)g(in)g(the)h(priv)l(ate)f
(dictionary)-6 b(,)35 b(and)f(the)h(curren)n(t)g(class)127
4155 y(w)n(as)29 b(the)g(same)g(as)g(the)g(class)g(in)g(whic)n(h)e(the)j
(priv)l(ate)d(metho)r(d)i(w)n(as)f(de\014ned,)i(then)f(access)h(w)n(as)f
(allo)n(w)n(ed;)1676 4521 y(27)p eop
%%Page: 28 35
bop 127 70 a Fm(otherwise,)24 b(an)f(access)i(error)f(w)n(as)f(generated.)33
b(A)24 b(b)r(oundfunc)d(ob)t(ject)j(is)f(then)h(returned,)g(whic)n(h)f(con)n
(tains)127 261 y(b)r(oth)i(the)g(function)f(and)g(the)i(class)f(to)g(whic)n
(h)f(it)h(b)r(elongs.)33 b(Supp)r(ort)25 b(for)f(this)h(w)n(as)g(added)g(in)n
(to)f Fh(ceval.c)p Fm(.)127 533 y(A)i(supplemen)n(tary)e(function)g(to)h
(allo)n(w)e(protection)h(w)n(as)h(the)h(implemen)n(tation)d(of)i(the)h
Fh(get_class)j Fm(func-)127 724 y(tion)35 b(in)f Fj(\177)-20
b Fm(cev)l(al.c.)68 b(This)36 b(w)n(orks)f(b)n(y)h(amending)f(the)i(curren)n
(t)f(Python)g(frame)g(to)g(include)f(the)i(curren)n(t)127 915
y(class,)27 b(as)g(w)n(ell)e(as)i(the)g(curren)n(t)f(function)f(and)h(the)h
(lo)r(cal)d(and)i(global)e(dictionaries.)36 b(Th)n(us,)26 b(the)h(function)
127 1106 y Fh(eval_code)e Fm(is)d(passed)g(an)f(additional)c(parameter,)23
b(called)d Fh(class)p Fm(.)35 b(This)21 b(is)h(returned)f(when)h(the)f
(function)127 1297 y Fh(get_class)31 b Fm(is)26 b(called.)37
b(Also,)27 b(a)f(new)h(t)n(yp)r(e)f(of)g(error,)i Fh(AccessError)p
Fm(,)k(w)n(as)26 b(in)n(tro)r(duced)f(to)i(indicate)e(that)127
1489 y(an)c(ob)t(ject)h(could)e(not)h(b)r(e)i(accessed)f(b)r(ecause)h(of)e
(its)g(protection.)32 b(Changes)21 b(w)n(ere)h(made)f(to)h
Fh(errors.h)j Fm(and)127 1680 y Fh(bltinmdule.c)p Fm(.)127
2144 y Fe(4.1.5)97 b(Protection)32 b(for)g(data)127 2465 y
Fm(A)23 b(preliminary)e(design)h(w)n(as)h(written)g(in)f(August)h(of)f(1992,)
g(with)g(the)i(\014nal)e(v)n(ersion)g(completed)g(in)h(Marc)n(h)127
2656 y(1993.)40 b(Mo)r(dules)27 b(c)n(hanged)g(include)g Fh(ceval.c)p
Fm(,)32 b Fh(compile.c)p Fm(,)h(and)27 b Fh(classobject.c)q
Fm(.)47 b(Also,)28 b(some)h(of)e(the)127 2848 y(header)e(\014les)h(w)n(ere)g
(c)n(hanged)e(to)i(allo)n(w)d(for)i(di\013eren)n(t)g(function)f(parameters,)i
(and)f(the)h(grammar)e(\014le)i(w)n(as)127 3039 y(c)n(hanged)e(to)h(allo)n(w)
e(for)i(the)g Fh(access)k Fm(command.)127 3310 y(The)22 b(implemen)n(tation)e
(w)n(as)i(similar)f(to)i(that)f(of)g(metho)r(d)g(protection.)32
b(A)23 b(dictionary)d(called)h Fh(accessinfo)127 3501 y Fm(w)n(as)27
b(created;)i(whenev)n(er)e(an)g(access)i(command)d(w)n(as)h(pro)r(cessed)h
(in)f Fh(com_access_st)q(mt)33 b Fm(in)27 b Fh(compile.c)p
Fm(,)127 3692 y(v)l(ariables)18 b(with)h(the)h(appropriate)e(access)j(righ)n
(ts)e(w)n(ere)h(inserted)g(in)n(to)f(the)h(dictionary)-6 b(.)30
b(The)20 b Fh(build_class)127 3884 y Fm(function)j(then)j(passed)f(this)g
(information)e(to)i(the)g Fh(newclassobjec)q(t)31 b Fm(function.)127
4155 y(Whenev)n(er)23 b(a)f(new)h(instance)f(w)n(as)g(created,)i(the)f
(instance)f(dictionary)e Fh(in_attr)26 b Fm(w)n(as)d(created)f(b)n(y)h(tra)n
(v)n(ers-)1676 4521 y(28)p eop
%%Page: 29 36
bop 127 70 a Fm(ing)31 b(the)i(class)f(heirarc)n(h)n(y)-6 b(,)33
b(via)f(the)g(function)f Fh(createaccessdic)q(t)p Fm(.)61 b(The)32
b(default)f(v)l(alue)g(w)n(as)h Fh(None)p Fm(,)37 b(a)127 261
y(sp)r(ecial)25 b(v)l(alue)e(in)i(Python.)127 533 y(Tw)n(o)d(additional)e
(functions)i(had)h(to)g(b)r(e)h(mo)r(di\014ed;)g Fh(instance_getat)q(tr)29
b Fm(and)23 b Fh(instance_setat)q(tr)q Fm(.)39 b(Be-)127 724
y(cause)25 b(of)f(the)g(c)n(hanges,)h(a)f(lo)r(okup)e(on)i(the)h(attribute)e
(dictionary)f(no)i(longer)g(returned)g(the)h(v)l(ariable,)e(but)127
915 y(instead)30 b(an)h(accessob)t(ject,)j(whic)n(h)c(con)n(tains)f(the)j(v)l
(ariable,)e(the)i(access,)i(and)c(the)i(class)f(in)g(whic)n(h)f(that)127
1106 y(v)l(ariable)h(w)n(as)j(de\014ned.)59 b(Pro)r(cedures)35
b(called)e Fh(read_access_all)q(ow)q(ed)40 b Fm(and)33 b Fh(write_access_a)q
(llo)q(we)q(d)127 1297 y Fm(w)n(ere)26 b(written)g(to)f(determine)h(if)g(a)f
(giv)n(en)g(v)l(ariable)f(could)g(b)r(e)j(accessed)g(at)f(that)f(time.)36
b(The)26 b(\014rst)h(returns)127 1489 y(the)f(ob)t(ject)f(if)f(accessible)h
(or)h(a)f Fh(NULL)i Fm(if)e(not;)g(the)g(second)h(returns)g(1)f(if)g
(accessible)g(or)g(0)g(if)g(not.)127 1953 y Fe(4.1.6)97 b(Class)32
b(construction)h(in)f(C)127 2274 y Fm(The)23 b(implemen)n(tation)d(w)n(as)i
(\014nished)h(on)f(Septem)n(b)r(er)i(5,)f(1992.)32 b(Tw)n(o)22
b(\014les)h(w)n(ere)g(mo)r(di\014ed:)32 b Fh(ceval.c)26 b Fm(and)127
2465 y Fh(classobject.c)p Fm(,)31 b(in)25 b(addition)e(to)i(the)g(header)h
(\014le)f Fh(classobject.h)p Fm(.)127 2736 y(The)e(mo)r(di\014cation)e
(consisted)i(of)g(adding)e(a)i(new)h(ob)t(ject)f(called)f(an)h
Fh(instancebuilti)q(nob)q(je)q(ct)p Fm(.)39 b(Similar)127 2928
y(to)25 b(an)g Fh(instancemetho)q(dob)q(je)q(ct)p Fm(,)32 b(it)25
b(handles)f(the)i(case)g(in)f(whic)n(h)f(a)i(metho)r(d)f(is)h(a)f(C)g
(function,)f(whereas)127 3119 y(the)32 b(instancemetho)r(d)g(only)e(accepts)j
(Python)f(metho)r(ds.)55 b(First,)34 b(acceptance)e(for)g(that)g(particular)e
(ob-)127 3310 y(ject)i(w)n(as)g(inserted)g(in)n(to)e(the)j
Fh(call_builtin)k Fm(function)30 b(in)h Fh(ceval.c)p Fm(.)57
b(Then,)34 b(c)n(hanges)d(w)n(ere)i(made)f(to)127 3501 y Fh(classobject.c)p
Fm(;)46 b(these)36 b(include)f(de\014ning)e(the)j Fh(instancebuilti)q(nob)q
(je)q(ct)41 b Fm(and)35 b(returning)f(one)h(if)g(a)127 3692
y(class)25 b(metho)r(d)h(is)f(found)f(to)h(b)r(e)h(a)f(C)g(function.)127
3964 y(A)36 b(minor)f(\014x)g(w)n(as)h(implemen)n(ted)e(on)i(Octob)r(er)g
(12,)i(to)d(allo)n(w)e(for)j(the)f(passing)g(of)g Fh(self)j
Fm(as)e(the)g(\014rst)127 4155 y(parameter)20 b(to)g(a)g(C)g(function,)f(the)
h(other)g(parameter)g(b)r(eing)f(the)i(argumen)n(t)e(list.)32
b(This)19 b(w)n(as)h(accomplished)1676 4521 y(29)p eop
%%Page: 30 37
bop 127 70 a Fm(in)25 b Fh(call_builtin)p Fm(.)127 599 y Ff(4.2)117
b(T)-10 b(esting)127 947 y Fm(This)18 b(section)g(do)r(cumen)n(ts)h(some)g
(of)f(the)h(testing)f(of)g(the)h(c)n(hanges)f(made)h(to)f(the)h(Python)f
(language.)30 b(Not)18 b(all)127 1138 y(tests)28 b(are)e(included)f(in)h
(this)g(rep)r(ort;)i(extensiv)n(e)e(testing)f(to)r(ok)h(place)g(during)f
(implemen)n(tation.)34 b(Instead,)127 1329 y(tests)26 b(w)n(ere)g(selected)g
(in)f(order)g(to)g(sho)n(w)g(a)g(correct)h(basic)f(implemen)n(tation.)127
1600 y(In)30 b(this)g(section,)i(results)f(directly)e(from)h(the)h(Python)f
(in)n(terpreter)g(ha)n(v)n(e)g(b)r(een)g(inserted)h(in)n(to)e(the)i(do)r(c-)
127 1792 y(umen)n(t.)46 b(While)29 b(the)h(author)e(do)r(es)i(not)f(wish)f
(to)i(do)r(cumen)n(t)f(the)g(en)n(tire)g(language)e(in)i(this)g(rep)r(ort,)i
(it)e(is)127 1983 y(helpful)e(to)i(kno)n(w)f(that)h(a)g(line)f(b)r(eginning)e
(with)j(the)g(three)h(c)n(haracters)f Fh(>>>)i Fm(mean)e(the)g(b)r(eginning)e
(of)i(a)127 2174 y(blo)r(c)n(k,)c(while)g(the)h(prompt)f Fh(...)37
b Fm(implies)25 b(con)n(tin)n(uation)d(of)j(an)g(ab)r(o)n(v)n(e)g(blo)r(c)n
(k.)34 b(This)25 b(is)h(an)g(artifact)e(of)h(the)127 2365 y(Python)g(in)n
(terpreter,)g(rather)h(than)e(an)h(asp)r(ect)h(of)f(the)g(language)e(itself.)
127 2636 y(Finally)-6 b(,)38 b(note)f(that)f(all)g(c)n(hanges)h(except)g(the)
h(protection)d(c)n(hanges)i(and)g(the)g(destructor)h(ha)n(v)n(e)e(b)r(een)127
2827 y(incorp)r(orated)21 b(in)n(to)h(the)i(Alice)e(system,)j(whic)n(h)d(is)h
(b)r(eing)f(used)i(b)n(y)f(a)g(large)f(subset)i(of)e(the)i(User)g(In)n
(terfaces)127 3019 y(group.)32 b(F)-6 b(ew)23 b(problems)f(ha)n(v)n(e)g(b)r
(een)h(encoun)n(tered,)h(and)e(all)f(of)h(those)h(errors)h(w)n(ere)f
(corrected)g(early)f(in)g(the)127 3210 y(b)r(eta-testing)i(pro)r(cess.)127
3674 y Fe(4.2.1)97 b(Incorp)s(oration)32 b(of)g Fb(self)h Fe(with)f(metho)s
(d)c(calls)127 3995 y Fm(In)f(order)g(to)f(test)i(the)f(functionalit)n(y)c
(of)j(this)g(mo)r(di\014cation,)f(sev)n(eral)i(tests)h(w)n(ere)f(used.)39
b(The)27 b(initial)d(test)127 4187 y(consisted)h(of)g(a)g(simple)g(call)f(to)
h(a)g(class)h(with)e(the)h(new)h(metho)r(d,)f(one)g(whic)n(h)f(w)n(as)h
(successful.)1676 4521 y(30)p eop
%%Page: 31 38
bop 127 70 a Fh(>>>)42 b(class)g(myclass:)127 166 y(...)203
b(def)42 b(set\(x\):)127 261 y(...)527 b(self.x=x)127 357 y(...)203
b(def)42 b(get\(\):)127 453 y(...)527 b(return)42 b(self.x)127
548 y(...)127 644 y(>>>)g(inst=myclass\(\))127 739 y(>>>)g(inst.set\(10\))127
835 y(>>>)g(inst.get\(\))127 931 y(10)127 1333 y Fm(The)29
b(next)h(test)g(w)n(as)f(to)g(insure)g(that)g(a)g(class)h(metho)r(d)f(could)g
(b)r(e)g(called)g(within)e(another)i(class.)46 b(T)-6 b(o)29
b(do)127 1524 y(this,)c(a)h(sub)r(class)f(w)n(as)g(created)h(whic)n(h)e
(called)g(its)h(paren)n(t)g(class.)127 1942 y Fh(>>>)42 b(class)g
(baseclass\(mycl)q(as)q(s\):)127 2037 y(...)203 b(def)42 b(set\(x\):)127
2133 y(...)527 b(print)42 b('setting)i(to)d(',x)127 2228 y(...)527
b(myclass.set\(x\))127 2324 y(...)203 b(def)42 b(get\(\):)127
2420 y(...)527 b(x=myclass.get\(\))127 2515 y(...)g(print)42
b('got)g(',x)127 2611 y(...)127 2706 y(>>>)g(inst=baseclass\()q(\))127
2802 y(>>>)g(inst.set\(5\))127 2898 y(setting)h(to)82 b(5)127
2993 y(>>>)42 b(inst.get\(\))127 3089 y(got)82 b(5)127 3600
y Fe(4.2.2)97 b(Automatic)29 b(constructor)j(calls)127 3921
y Fm(The)23 b(sole)g(test)h(w)n(as)f(to)g(create)h(a)f(class)h(with)e(a)h
(constructor,)h(call)e(it,)i(and)f(test)h(to)f(see)h(if)f(the)g(v)l(ariables)
e(set)127 4112 y(b)n(y)k(the)g(constructor)h(to)r(ok)e(place;)h(it)g(w)n(as)g
(successful.)1676 4521 y(31)p eop
%%Page: 32 39
bop 127 70 a Fh(>>>)42 b(class)g(myclass:)127 166 y(...)203
b(def)42 b(__init__\(x\):)127 261 y(...)527 b(self.x=x)127
357 y(...)203 b(def)42 b(get\(\):)127 453 y(...)527 b(return)42
b(self.x)127 548 y(...)127 644 y(>>>)g(inst=myclass\(3\))127
739 y(>>>)g(inst.get\(\))127 835 y(3)127 1369 y Fe(4.2.3)97
b(Automatic)29 b(destructor)j(calls)127 1689 y Fm(F)-6 b(or)23
b(this)g(mo)r(di\014cation,)e(t)n(w)n(o)h(tests)i(w)n(ere)f(run.)34
b(The)23 b(\014rst)g(test)h(set)g(a)e(global)f(v)l(ariable)f(when)j(the)g
Fh(__del__)127 1881 y Fm(metho)r(d)c(w)n(as)f(called;)i(this)f(allo)n(w)n(ed)
d(easy)j(v)n(eri\014abilit)n(y)-6 b(.)28 b(The)19 b(second)g(test)h(w)n(as)e
(to)h(insure)g(that)f(an)h(instance)127 2072 y(w)n(as)25 b(not)g(destro)n(y)n
(ed)g(if)f(the)i(destructor)f(made)h(a)f(cop)n(y)f(of)h(that)g(instance.)33
b(Both)25 b(w)n(ere)h(successful.)127 2509 y Fh(>>>)42 b(class)g(a:)127
2605 y(...)203 b(def)42 b(__del__\(\):)127 2701 y(...)527 b(global)42
b(x)127 2796 y(...)527 b(x=3)127 2892 y(...)127 2987 y(>>>)42
b(y=a\(\))127 3083 y(>>>)g(del\(y\))127 3179 y(>>>)g(x)127
3274 y(3)127 3370 y(>>>)g(class)g(b:)127 3465 y(...)203 b(def)42
b(__del__\(\):)127 3561 y(...)527 b(global)42 b(x)127 3657
y(...)527 b(x=self)127 3752 y(...)127 3848 y(>>>)42 b(y=b\(\))127
3943 y(>>>)g(del\(y\))127 4039 y(>>>)g(x.x=3)127 4135 y(>>>)g(x)127
4230 y(<instance)i(object)f(at)e(4c958>)1676 4521 y Fm(32)p
eop
%%Page: 33 40
bop 127 70 a Fe(4.2.4)97 b(Protection)32 b(for)g(metho)s(ds)127
391 y Fm(Tw)n(o)e(tests)i(w)n(ere)f(run)g(for)g(this)g(mo)r(di\014cation.)48
b(The)31 b(\014rst)h(test)f(consisted)g(of)f(a)h(class)g(with)f(public)g(and)
127 582 y(priv)l(ate)20 b(metho)r(ds;)j(the)e(public)e(metho)r(ds)j(called)d
(the)j(priv)l(ate)d(metho)r(ds.)33 b(F)-6 b(rom)21 b(the)g(prompt,)h(an)f
(instance)127 774 y(could)j(call)g(the)i(public)e(metho)r(ds,)i(but)f(not)g
(the)g(priv)l(ate)f(ones.)127 1225 y Fh(>>>)42 b(class)g(myclass:)127
1320 y(...)203 b(def)42 b(public_method\()q(\):)127 1416 y(...)527
b(print)42 b('in)g(public)g(method')127 1512 y(...)527 b(self.private_me)q
(tho)q(d\()q(\))127 1607 y(...)42 b(private:)127 1703 y(...)203
b(def)42 b(private_method)q(\(\):)127 1798 y(...)527 b(print)42
b('in)g(private)h(method')127 1894 y(...)127 1990 y(>>>)f(inst=myclass\(\))
127 2085 y(>>>)g(inst.public_met)q(ho)q(d\(\))127 2181 y(in)f(public)i
(method)127 2276 y(in)e(private)i(method)127 2372 y(>>>)f(inst.private_me)q
(th)q(od\()q(\))127 2467 y(AccessError:)j(private_metho)q(d)127
2563 y(Stack)d(backtrace)j(\(innermost)f(last\):)208 2659 y(File)e
("<stdin>",)i(line)e(1)127 3094 y Fm(The)30 b(second)h(test)g(w)n(as)g(to)f
(insure)g(that)g(a)h(descendan)n(t)f(of)g(a)g(class)h(con)n(taining)c(a)k
(priv)l(ate)e(metho)r(d)h(also)127 3285 y(could)e(not)g(access)h(it;)i(it)d
(also)g(pro)n(v)n(ed)f(successful,)j(generating)d(an)h Fh(AccessError)34
b Fm(after)28 b(an)g(attempt)h(to)127 3477 y(call)24 b(a)h(priv)l(ate)f
(metho)r(d.)127 3928 y Fh(>>>)42 b(class)g(subclass\(mycla)q(ss)q(\):)127
4023 y(...)203 b(def)42 b(main\(\):)127 4119 y(...)527 b(print)42
b('trying)h(public)g(methods')127 4215 y(...)527 b(self.public_met)q(hod)q
(\(\))127 4310 y(...)g(print)42 b('trying)h(private)h(methods')1676
4521 y Fm(33)p eop
%%Page: 34 41
bop 127 70 a Fh(...)527 b(self.private_me)q(tho)q(d\()q(\))127
166 y(...)127 261 y(>>>)42 b(inst=subclass\(\))127 357 y(>>>)g(inst.main\(\))
127 453 y(trying)h(public)g(methods)127 548 y(in)e(public)i(method)127
644 y(in)e(private)i(method)127 739 y(trying)g(private)g(methods)127
835 y(AccessError:)i(private_metho)q(d)127 931 y(Stack)d(backtrace)j
(\(innermost)f(last\):)208 1026 y(File)e("<stdin>",)i(line)e(1)208
1122 y(File)g("<stdin>",)i(line)e(6)127 1651 y Fe(4.2.5)97
b(Protection)32 b(for)g(data)127 1972 y Fm(Tw)n(o)24 b(tests)h(w)n(ere)g(com)
n(bined)f(in)n(to)f(a)i(single)e(class)i(for)f(this)h(particular)e(test.)34
b(The)25 b(purp)r(ose)g(w)n(as)f(to)g(insure)127 2163 y(that)f(public)f(v)l
(ariables)g(could)h(b)r(e)h(written)f(and)g(read)h(b)n(y)f(all,)g(and)g(that)
g(priv)l(ate)f(v)l(ariables)g(could)h(only)f(b)r(e)127 2355
y(written)j(and)f(read)i(b)n(y)e(the)i(class.)34 b(As)26 b(seen,)h(it)e(is)g
(a)g(success.)127 2788 y Fh(>>>)42 b(class)g(myclass:)127 2884
y(...)203 b(access)43 b(foo,)f(bar:)g(public)127 2980 y(...)203
b(access)43 b(qux:)f(private)127 3075 y(...)203 b(def)42 b(setqux\(x\):)127
3171 y(...)527 b(self.qux=x)127 3266 y(...)203 b(def)42 b(getqux\(\):)127
3362 y(...)527 b(return)42 b(self.qux)127 3458 y(...)127 3553
y(>>>)g(inst=myclass\(\))127 3649 y(>>>)g(inst.foo=3)127 3744
y(>>>)g(inst.foo)127 3840 y(3)127 3936 y(>>>)g(inst.bar=10)127
4031 y(>>>)g(inst.bar)127 4127 y(10)127 4222 y(>>>)g(inst.qux=22)127
4318 y(AccessError:)j(qux)1676 4521 y Fm(34)p eop
%%Page: 35 42
bop 127 70 a Fh(Stack)42 b(backtrace)j(\(innermost)f(last\):)208
166 y(File)e("<stdin>",)i(line)e(1)127 261 y(>>>)g(inst.setqux\(22\))127
357 y(>>>)g(inst.qux)127 453 y(AccessError:)j(qux)127 548 y(Stack)d
(backtrace)j(\(innermost)f(last\):)208 644 y(File)e("<stdin>",)i(line)e(1)127
739 y(>>>)g(inst.getqux\(\))127 835 y(22)127 1268 y Fm(The)28
b(second)g(test)h(w)n(as)f(to)f(insure)h(that)g(b)r(oth)f Fh(write)k
Fm(and)c Fh(read)j Fm(access)f(parameters)g(w)n(ork)n(ed)e(correctly)-6
b(.)127 1459 y(This)36 b(w)n(as)g(done)g(b)n(y)g(creating)g(a)g(v)l(ariable)e
(that)i(allo)n(w)n(ed)e(it)i(to)g(b)r(e)h(written)f(priv)l(ately)-6
b(,)37 b(but)f(accessed)127 1650 y(publically:)127 2099 y Fh(>>>)42
b(class)g(myclass:)127 2194 y(...)203 b(access)43 b(var:)f(public)h(read,)f
(private)127 2290 y(...)203 b(def)42 b(setvar\(x\):)127 2385
y(...)527 b(self.var=x)127 2481 y(...)127 2577 y(>>>)42 b(inst=myclass\(\))
127 2672 y(>>>)g(inst.var=3)127 2768 y(AccessError:)j(var)127
2863 y(Stack)d(backtrace)j(\(innermost)f(last\):)208 2959 y(File)e
("<stdin>",)i(line)e(1)127 3055 y(>>>)g(inst.setvar\(3\))127
3150 y(>>>)g(inst.var)127 3246 y(3)127 3678 y Fm(The)22 b(\014nal)f(test)j(w)
n(as)e(to)g(insure)g(that)g(descendan)n(t)g(classes)h(could)f(not)f(access)j
(priv)l(ate)d(v)l(ariables.)31 b(The)23 b(test)127 3870 y(also)h(succeeded:)
127 4318 y Fh(>>>)42 b(class)g(myclass:)1676 4521 y Fm(35)p
eop
%%Page: 36 43
bop 127 70 a Fh(...)203 b(access)43 b(var:)f(private)127 166
y(...)203 b(def)42 b(setvar\(x\):)127 261 y(...)527 b(self.var=x)127
357 y(...)203 b(def)42 b(getvar\(\):)127 453 y(...)527 b(return)42
b(self.var)127 548 y(...)127 644 y(>>>)g(class)g(subclass\(mycla)q(ss)q(\):)
127 739 y(...)203 b(def)42 b(writetest\(\):)127 835 y(...)527
b(self.var=3)127 931 y(...)203 b(def)42 b(readtest\(\):)127
1026 y(...)527 b(self.var)127 1122 y(...)127 1217 y(>>>)42
b(inst=subclass\(\))127 1313 y(>>>)g(inst.writetest\()q(\))127
1409 y(AccessError:)j(var)127 1504 y(Stack)d(backtrace)j(\(innermost)f
(last\):)208 1600 y(File)e("<stdin>",)i(line)e(1)208 1695 y(File)g
("<stdin>",)i(line)e(3)127 1791 y(>>>)g(inst.readtest\(\))127
1887 y(AccessError:)j(var)127 1982 y(Stack)d(backtrace)j(\(innermost)f
(last\):)208 2078 y(File)e("<stdin>",)i(line)e(1)208 2173 y(File)g
("<stdin>",)i(line)e(5)127 2722 y Fe(4.2.6)97 b(Class)32 b(construction)h(in)
f(C)127 3043 y Fm(This)g(functionalit)n(y)d(is)j(the)h(most)g(di\016cult)f
(to)g(test,)k(b)r(ecause)d(it)g(requires)g(extensiv)n(e)f(co)r(ding)f(for)h
(ev)n(en)127 3234 y(the)d(simplest)f(of)f(tests.)45 b(Ho)n(w)n(ev)n(er,)28
b(this)g(abilit)n(y)e(is)i(curren)n(tly)g(b)r(eing)f(used)i(in)f(the)g(Alice)
g(virtual)e(realit)n(y)127 3426 y(to)r(olkit,)d(and)i(this)g(functionalit)n
(y)c(has)26 b(b)r(een)f(do)r(cumen)n(ted)g(to)g(w)n(ork.)34
b([DeL93)o(])1676 4521 y(36)p eop
%%Page: 37 44
bop 127 933 a Fg(Chapter)57 b(5)127 1816 y Fl(Conclusion)127
2510 y Ff(5.1)117 b(Summary)127 2857 y Fm(The)30 b(previous)e(v)n(ersion)h
(of)g(Python)g(w)n(as)g(restrictiv)n(e)h(as)f(to)h(the)g(abilities)d(of)i
(classes.)48 b(No)29 b(kind)f(of)h(data)127 3048 y(protection)g(w)n(as)i(pro)
n(vided,)g(the)g(syn)n(tax)f(w)n(as)g(a)n(wkw)n(ard,)g(neither)h
(constructors)g(nor)g(destructors)g(w)n(ere)127 3240 y(supp)r(orted,)f(and)e
(classes)i(could)e(only)g(b)r(e)h(written)f(in)h(Python,)h(not)e(in)h(C.)g
(The)g(purp)r(ose)g(of)f(this)h(thesis)127 3431 y(w)n(as)22
b(b)r(oth)h(to)f(redesign)h(Python)f(to)g(allo)n(w)f(these)i(features)g(and)f
(to)h(implemen)n(t)e(them,)k(an)d(attempt)g(whic)n(h)127 3622
y(w)n(as)j(successful)h(in)f(all)e(accoun)n(ts.)127 3893 y(Data)k(protection)
g(consists)i(of)e(restricting)h(access)h(to)f(b)r(oth)g(metho)r(ds)g(and)g
(data;)h(an)e(ob)t(ject)h(can)g(either)127 4084 y(b)r(e)g(public,)f(meaning)f
(all)g(can)i(access,)h(or)f(priv)l(ate,)f(meaning)f(access)j(is)e(restricted)
h(to)g(the)f(o)n(wner)g(of)g(the)127 4276 y(ob)t(ject.)33 b(This)23
b(w)n(as)f(implemen)n(ted)g(for)h(metho)r(ds)g(b)n(y)g(allo)n(wing)c(blo)r(c)
n(ks)j(of)g(metho)r(ds)i(to)e(b)r(e)i(declared)e(either)1676
4521 y(37)p eop
%%Page: 38 45
bop 127 70 a Fh(public)28 b Fm(or)d Fh(private)p Fm(.)38 b(F)-6
b(or)25 b(data,)g(an)g Fh(access)j Fm(command)c(w)n(as)h(pro)n(vided)f(to)h
(sp)r(ecify)g(the)g(protection.)127 341 y(Previously)-6 b(,)23
b(metho)r(ds)i(w)n(ere)g(required)g(to)f(ha)n(v)n(e)g(an)g(additional)d
(parameter,)k(called)e Fh(self)p Fm(.)36 b(The)25 b(instance)127
533 y(v)l(ariable)18 b(w)n(as)j(then)g(inserted)g(in)n(to)e(the)i(parameter)g
(tuple)f(b)r(efore)h(executing)e(the)i(metho)r(d.)33 b(Programmers)127
724 y(can)25 b(also)f(write)h(classes)h(completely)e(in)h(C)g(rather)h(than)e
(in)h(Python.)127 995 y(Finally)-6 b(,)30 b(Python)g(also)f(had)i(not)f(allo)
n(w)n(ed)e(the)j(programmer)f(to)g(sp)r(ecify)h(constructors)g(or)f
(destructors;)127 1186 y(that)23 b(is,)h(metho)r(ds)f(whic)n(h)g(are)g
(called)f(up)r(on)h(the)g(creation)f(or)i(deletion)d(of)i(an)g(instance,)g
(resp)r(ectfully)-6 b(.)33 b(An)127 1377 y(imp)r(ortan)n(t)25
b(c)n(hange)g(w)n(as)h(to)h(allo)n(w)d(an)i Fh(__init__)k Fm(metho)r(d)c(as)h
(a)f(constructor,)h(and)f(a)g Fh(__del__)k Fm(metho)r(d)127
1569 y(as)c(a)f(destructor.)127 2098 y Ff(5.2)117 b(In)m(terpretation)127
2445 y Fm(Data)20 b(protection)g(has)i(resulted)f(in)g(a)g(n)n(um)n(b)r(er)h
(of)e(b)r(ene\014ts.)34 b(Not)21 b(only)f(do)r(es)h(it)g(insure)h(that)e
(programmers)127 2636 y(will)h(use)i(the)g(pro)n(vided)d(abstractions)i(and)g
(create)h(sub)r(classes)g(or)f(ev)n(en)h(new)f(classes)i(if)d(they)i(are)g
(not,)g(but)127 2827 y(program)d(reliabilit)n(y)e(is)k(also)e(increased,)j
(since)e(the)h(programmer)f(relies)g(on)g(the)h(abstraction)e(rather)h(than)
127 3019 y(the)26 b(implemen)n(tation.)127 3290 y(The)36 b(c)n(hange)g(in)f
(syn)n(tax)h(for)g(de\014ning)e(class)j(metho)r(ds)f(has)h(freed)f
(programmers)g(from)g(a)g(previously)127 3481 y(cum)n(b)r(ersome)26
b(syn)n(tax.)33 b(As)26 b(a)f(result,)h(programs)e(are)h(less)h(lik)n(ely)d
(to)i(fail,)f(and)g(all)g(Python)h(programs)f(will)127 3672
y(ha)n(v)n(e)d(a)g(standard)g(name)h(for)f(the)h(instance;)h(previously)-6
b(,)20 b(the)i(instance)g(could)e(b)r(e)i(b)r(ound)f(to)h(an)n(y)e(v)l
(ariable,)127 3863 y(not)25 b(just)g Fh(self)p Fm(.)127 4135
y(The)e(abilit)n(y)d(to)j(write)g(classes)h(in)f(C)g(pro)n(vides)f(not)h
(only)e(increased)j(execution)e(sp)r(eed,)i(but)f(has)h(extended)1676
4521 y(38)p eop
%%Page: 39 46
bop 127 70 a Fm(the)33 b(functions)e(a)n(v)l(ailable)e(to)j(a)g(class)h(b)n
(y)f(allo)n(wing)d(access)34 b(to)e(all)f(of)h(those)h(callable)d(from)i(C.)h
(Finally)-6 b(,)127 261 y(the)33 b(abilit)n(y)d(to)i(sp)r(ecify)h
(constructors)g(and)f(destructors)h(pro)n(vides)f(increased)h(p)r(o)n(w)n(er)
f(b)n(y)g(allo)n(wing)d(the)127 453 y(programmer)f(to)g(de\014ne)h(v)l
(ariables)d(automatically)-6 b(,)26 b(without)g(the)j(previous)f(requiremen)n
(t)g(of)g(calling)e(an)127 644 y(initialization)20 b(or)25
b(destruction)g(metho)r(d)g(man)n(ually)-6 b(.)127 1173 y Ff(5.3)117
b(Recommendations)127 1520 y Fm(The)31 b(curren)n(t)h(goal)d(is)j(to)f(in)n
(tegrate)f(the)h(c)n(hanges)g(I)g(ha)n(v)n(e)g(made)g(with)f(the)i(actual)d
(release)j(of)f(Python,)127 1712 y(th)n(us)g(letting)e(a)h(wider)g(range)g
(of)g(programmers)h(b)r(ene\014t)f(from)h(the)g(impro)n(v)n(ed)e(ob)t
(ject-orien)n(ted)g(mo)r(del.)127 1903 y(The)h(task)g(should)f(b)r(e)h
(rather)g(simple,)h(b)r(ecause)g(the)f(latest)g(release)g(of)g(Python)f(has)h
(not)g(included)e(an)n(y)127 2094 y(drastic)d(c)n(hanges.)127
2365 y(There)33 b(are)g(a)g(n)n(um)n(b)r(er)g(of)f(problems)h(that)f(could)g
(b)r(e)h(\014xed,)i(ho)n(w)n(ev)n(er.)56 b(When)33 b(a)g(Python)f(program)g
(is)127 2556 y(imp)r(orted)e(\(the)i(rough)e(equiv)l(alen)n(t)e(of)i(C's)i
Fh(#include)p Fm(\),)k(a)31 b(b)n(yte)g(compiled)f(\014le)h(with)f(the)h
(extension)f(of)127 2747 y Fh(.pyc)35 b Fm(is)e(generated.)56
b(The)33 b(next)f(time)h(the)g(\014le)g(is)g(imp)r(orted,)h(the)f
Fh(.pyc)i Fm(\014le)d(will)f(b)r(e)i(loaded)f(instead.)127
2939 y(Unfortunately)-6 b(,)26 b(due)i(to)f(the)h(implemen)n(tation)d(metho)r
(d,)k(protection)e(will)e(not)j(b)r(e)g(activ)n(e)f(when)h(a)f
Fh(.pyc)127 3130 y Fm(\014le)d(is)g(imp)r(orted.)33 b(While)24
b(an)g(easy)g(w)n(a)n(y)f(to)h(solv)n(e)f(this)h(problem)g(is)g(to)g
(eliminate)e(the)j Fh(.pyc)h Fm(\014le)e(and)f(th)n(us)127
3321 y(nev)n(er)28 b(encoun)n(ter)g(it,)h(the)f(correct)h(tec)n(hnique)e(w)n
(ould)f(b)r(e)i(to)g(reimplemen)n(t)g(the)g(metho)r(d)g(of)f(passing)g(the)
127 3512 y(protection)c(information)e(from)j(the)h(compiler)e(to)h(the)h(in)n
(terpreter.)34 b(Instead)24 b(of)f(storing)g(protection)g(data)127
3703 y(in)i(v)l(ariables,)e(the)j(information)c(should)i(b)r(e)i(inserted)f
(in)n(to)g(the)g(actual)f(b)n(yte)h(co)r(de.)127 3975 y(Also,)e(v)l(ariables)
e(are)i(no)n(w)f(asso)r(ciated)h(with)f(a)h(particular)e(instance;)i(in)g
(other)g(w)n(ords,)g(an)g(instance)f(could)127 4166 y(ha)n(v)n(e)31
b(only)g(one)h(v)l(ariable)d(named)j Fh(var)p Fm(.)56 b(Unfortunately)-6
b(,)31 b(this)h(implies)f(that,)i(if)e(a)h(class)g(inherits)g(from)1676
4521 y(39)p eop
%%Page: 40 47
bop 127 70 a Fm(t)n(w)n(o)28 b(classes)h(with)f(t)n(w)n(o)g(separate)h(v)l
(ariables)d(called)i Fh(var)p Fm(,)k(failure)27 b(will)g(o)r(ccur.)45
b(The)28 b(metho)r(d)h(C++)f(uses)127 261 y(to)f(o)n(v)n(ercome)h(this)f(is)h
(to)g(allo)n(w)d(an)i(instance)g(to)h(ha)n(v)n(e)f(v)l(ariables)e(b)r(ound)i
(at)g(eac)n(h)h(class,)h(rather)f(than)f(at)127 453 y(the)33
b(instance)f(lev)n(el.)55 b(This)32 b(w)n(ould)f(allo)n(w)g(b)r(oth)h(v)l
(ariables)e(to)j(co-exist,)h(as)f(long)e(as)i(there)g(w)n(asn't)f(an)n(y)127
644 y(am)n(biguit)n(y)22 b(ab)r(out)j(whic)n(h)f(one)h(w)n(as)g(b)r(eing)f
(accessed.)127 915 y(Both)31 b(of)g(these)i(c)n(hanges)e(require)h(a)f(fair)g
(amoun)n(t)g(of)g(co)r(ding,)h(with)f(minimal)f(c)n(hanges)h(to)h(the)g
(design.)127 1106 y(Ho)n(w)n(ev)n(er,)40 b(care)e(m)n(ust)h(b)r(e)f(tak)n(en)
f(with)g(the)h(second)g(prop)r(osal)e(to)h(insure)h(bac)n(kw)n(ards)e
(compatibilit)n(y)-6 b(.)127 1297 y(When)22 b(instance)f(v)l(ariables)f(are)i
(created)g(without)e(an)h Fh(access)k Fm(de\014nition,)20 b(the)i(lo)r
(cation)e(m)n(ust)i(b)r(e)g(b)r(ound,)127 1489 y(and)j(the)g(lo)r(cation)e(m)
n(ust)j(allo)n(w)d(older)h(Python)h(programs)g(to)g(function)e(correctly)-6
b(.)1676 4521 y(40)p eop
%%Page: 41 48
bop 127 1004 a Fl(Glossary)127 1556 y Fk(Abstract)31 b(Data)f(T)n(yp)r(e)38
b Fm(A)22 b(data)g(t)n(yp)r(e)g(in)g(whic)n(h)f(the)i(follo)n(wing)18
b(are)23 b(true:)33 b(that)22 b(the)h(represen)n(tation)e(of)319
1747 y(b)r(oth)i(the)g(data)f(and)g(the)h(metho)r(ds)g(are)g(asso)r(ciated)f
(with)g(a)g(single)g(ob)t(ject;)i(and)e(that)g(the)h(metho)r(ds)319
1938 y(are)j(the)f(only)f(w)n(a)n(y)g(of)h(accessing)g(the)h(data.)33
b([Seb89)o(,)26 b(page)f(323])127 2185 y Fk(Class)39 b Fm(A)25
b(series)i(of)d(metho)r(ds)i(whic)n(h)e(de\014nes)i(the)f(b)r(eha)n(vior)f
(of)g(all)g(instances)h(of)g(that)g(class.)127 2431 y Fk(Constructor)41
b Fm(A)27 b(metho)r(d)f(whic)n(h)f(is)h(called)f(when)h(an)g(instance)g(is)g
(created.)38 b(In)26 b(Python,)g(the)h(name)f(of)319 2622 y(the)g(metho)r(d)f
(is)g Fh(__)p Fm(init)p Fh(__)p Fm(.)127 2869 y Fk(Data)30
b(Abstraction)41 b Fm(The)23 b(programming)d(philosoph)n(y)g(whic)n(h)i(allo)
n(ws)f(data)g(and)h(functions)g(to)g(b)r(e)i(asso-)319 3060
y(ciated)k(together,)h(with)f(the)h(pro)n(vided)e(functions)g(b)r(eing)g(the)
i(sole)f(metho)r(d)h(of)f(manipulating)c(the)319 3251 y(data.)127
3498 y Fk(Data)30 b(Protection)40 b Fm(The)33 b(abilit)n(y)e(of)h(a)i(class)f
(or)g(instance)g(to)g(limit)f(the)h(a)n(v)l(ailabili)o(t)n(y)28
b(of)33 b(its)g(metho)r(ds)319 3689 y(or)k(data)f(ob)t(jects.)70
b(This)36 b(forces)i(programmers)e(utilizing)e(those)k(classes)f(to)g(use)h
(the)f(pro)n(vided)319 3880 y(abstractions.)127 4127 y Fk(Destructor)j
Fm(A)25 b(metho)r(d)f(whic)n(h)g(is)g(called)g(when)g(an)g(instance)g(is)g
(destro)n(y)n(ed.)34 b(In)24 b(Python,)h(the)g(name)f(of)319
4318 y(the)i(metho)r(d)f(is)g Fh(__)p Fm(del)p Fh(__)p Fm(.)1676
4521 y(41)p eop
%%Page: 42 49
bop 127 70 a Fk(Dictionary)41 b Fm(A)25 b(Python)g(data)f(t)n(yp)r(e)h(whic)n
(h)g(allo)n(ws)e(names)i(to)h(b)r(e)f(asso)r(ciated)g(with)f(an)n(y)g(t)n(yp)
r(e)i(of)e(data.)127 325 y Fk(Implemen)n(tation)35 b Fm(The)23
b(term)g(used)g(for)f(the)h(pro)r(cess)h(of)e(writing)f(or)h(mo)r(difying)e
(a)i(computer)h(program.)127 579 y Fk(Inheritance)40 b Fm(The)25
b(abilit)n(y)d(of)j(a)g(class)g(to)h(selectiv)n(ely)e(rede\014ne)h(the)h
(metho)r(ds)f(of)g(another)f(class.)127 834 y Fk(Instance)39
b Fm(An)20 b(ob)t(ject)g(whose)f(b)r(eha)n(vior)g(is)h(sp)r(eci\014ed)g(b)n
(y)g(the)g(class)h(of)e(whic)n(h)g(it)h(is)g(a)g(mem)n(b)r(er.)34
b(While)19 b(the)319 1025 y(metho)r(ds)28 b(are)f(sp)r(eci\014ed)h(b)n(y)f
(the)g(class,)h(data)f(ob)t(jects)g(are)g(asso)r(ciated)g(with)f(the)i
(instance.)39 b(Th)n(us,)319 1216 y(there)26 b(ma)n(y)f(b)r(e)h(m)n(ultiple)d
(instances)i(of)g(a)g(particular)f(class;)h(only)f(the)i(metho)r(ds)f(are)h
(shared.)127 1471 y Fk(Metho)r(d)40 b Fm(Executable)24 b(co)r(de)i(whic)n(h)e
(sp)r(eci\014es)i(an)f(action)f(to)h(tak)n(e)g(when)g(it)f(is)i(called.)127
1725 y Fk(Ob)5 b(ject)38 b Fm(A)30 b(structure)h(whic)n(h)e(consists)h(of)f
(v)l(ariables)f(and)h(metho)r(ds)h(whic)n(h)e(can)i(access)h(the)f(v)l
(ariables.)319 1916 y(In)c(Python,)f(all)f(metho)r(ds)h(and)g(v)l(ariables)e
(are)i(implemen)n(ted)g(as)g(ob)t(jects.)127 2171 y Fk(Ob)5
b(ject-orien)n(ted)39 b Fm(A)20 b(programming)e(metho)r(dology)g(based)i(on)g
(the)h(principle)d(of)i(w)n(orking)e(with)h(ob)t(jects)319
2362 y(that)26 b(ha)n(v)n(e)f(b)r(oth)h(data)f(and)g(metho)r(ds)h(asso)r
(ciated)f(with)g(them.)37 b(Op)r(erations)25 b(are)h(then)g(p)r(erformed)319
2553 y(b)n(y)f(calling)e(the)j(pro)n(vided)d(metho)r(ds.)127
2807 y Fk(Priv)-5 b(ate)39 b Fm(A)28 b(t)n(yp)r(e)g(of)f(protection)g(in)g
(whic)n(h)g(only)f(the)i(class)h(in)e(whic)n(h)g(the)h(metho)r(d)g(or)g(data)
f(is)h(de\014ned)319 2999 y(has)e(access.)127 3253 y Fk(Public)40
b Fm(A)25 b(lac)n(k)f(of)h(protection.)127 3508 y Fk(Pro)r(cess)30
b(Abstraction)41 b Fm(The)e(programming)e(philosoph)n(y)f(whic)n(h)i(allo)n
(ws)f(the)i(programmer)g(to)g(call)319 3699 y(functions)24
b(to)h(accomplish)f(certain)h(tasks,)h(rather)f(than)g(reimplemen)n(t)f(the)i
(task)f(eac)n(h)g(time.)127 3953 y Fk(T)-7 b(uple)38 b Fm(A)26
b(Python)e(data)g(t)n(yp)r(e)i(whic)n(h)e(consists)h(of)g(a)g(series)i(of)d
(ob)t(jects.)1676 4521 y(42)p eop
%%Page: 43 50
bop 127 1004 a Fl(Bibliograph)-6 b(y)127 1507 y Fm([Co)r(o91])48
b(William)22 b(R.)j(Co)r(ok.)32 b(Ob)t(ject-orien)n(ted)23
b(programming)g(v)n(ersus)i(abstract)g(data)e(t)n(yp)r(es.)34
b(In)24 b(J.)i(W.)431 1699 y(de)40 b(Bakk)n(er,)i(W.)f(P)-6
b(.)40 b(de)g(Ro)r(ev)n(er,)k(and)39 b(G.)i(Rozen)n(b)r(erg,)i(editors,)g
Fa(F)-6 b(oundations)43 b(of)e(Obje)l(ct-)431 1890 y(Oriente)l(d)32
b(L)l(anguages)p Fm(,)i(Lecture)c(Notes)f(in)f(Computer)h(Science,)h(pages)f
(151{178,)e(New)i(Y)-6 b(ork,)431 2081 y(1991.)24 b(Springer-V)-6
b(erlag.)127 2336 y([DeL93])43 b(Rob)r(ert)34 b(DeLine.)63
b(Alice:)53 b(A)35 b(rapid)f(protot)n(yping)e(system)k(for)e
(three-dimensional,)h(in)n(terac-)431 2527 y(tiv)n(e,)30 b(graphical)d(en)n
(vironmen)n(ts.)45 b(Master's)30 b(thesis,)i(Univ)n(ersit)n(y)27
b(of)i(Virginia,)f(Departmen)n(t)h(of)431 2718 y(Computer)24
b(Science,)i(1993.)127 2972 y([GR83])67 b(Adele)17 b(Goldb)r(erg)f(and)h(Da)n
(vid)e(Robson.)20 b Fa(Smal)t(ltalk-80:)32 b(the)20 b(language)i(and)g(its)d
(implementation)p Fm(.)431 3164 y(Addison-W)-6 b(esley)g(,)23
b(Reading,)g(Mass.,)k(1983.)127 3418 y([KA90])66 b(Setrag)32
b(Khosha\014an)e(and)i(Razmik)g(Abnous.)55 b Fa(Obje)l(ct)35
b(Orientation:)49 b(Conc)l(epts,)37 b(L)l(anguages,)431 3609
y(Datab)l(ases,)29 b(User)g(Interfac)l(es)p Fm(.)37 b(John)24
b(Wiley)g(and)h(Sons,)g(Inc.,)h(New)g(Y)-6 b(ork,)24 b(1990.)127
3864 y([Kee89])56 b(Son)n(y)n(a)28 b(E.)i(Keene.)48 b Fa(Obje)l(ct-Oriente)l
(d)33 b(Pr)l(o)l(gr)l(amming)h(in)e Fi(Common)i(Lisp)p Fm(.)48
b(Addison-W)-6 b(esley)g(,)431 4055 y(Reading,)23 b(Mass.,)k(1989.)1676
4521 y(43)p eop
%%Page: 44 51
bop 127 70 a Fm([Mey88])38 b(Bertrand)d(Mey)n(er.)66 b Fa(Obje)l(ct-oriente)l
(d)39 b(softwar)l(e)g(c)l(onstruction)p Fm(.)68 b(Pren)n(tice)37
b(Hall,)g(Englew)n(o)r(o)r(d)431 261 y(Cli\013s,)24 b(NJ,)i(1988.)127
516 y([Omo91])38 b(Stephen)24 b(M.)g(Omoh)n(undro.)31 b(The)25
b(Sather)f(language.)30 b(T)-6 b(ec)n(hnical)22 b(rep)r(ort,)j(In)n
(ternational)c(Com-)431 707 y(puter)k(Science)g(Institute,)h(Berk)n(eley)-6
b(,)24 b(CA,)h(June)g(1991.)127 962 y([PW91])53 b(Lewis)31
b(J.)i(Pinson)e(and)g(Ric)n(hard)g(S.)h(Wiener.)54 b Fa(Obje)l(ctive-C)34
b(Obje)l(ct-Oriente)l(d)g(Pr)l(o)l(gr)l(amming)431 1153 y(T)-6
b(e)l(chniques)p Fm(.)37 b(Addison-W)-6 b(esley)g(,)23 b(Reading,)h(Mass.,)i
(1991.)127 1407 y([Seb89])64 b(Rob)r(ert)19 b(W.)i(Seb)r(esta.)26
b Fa(Conc)l(epts)f(of)d(Pr)l(o)l(gr)l(amming)k(L)l(anguages)p
Fm(.)j(Benjamin/Cummings,)18 b(Red-)431 1598 y(w)n(o)r(o)r(d)24
b(Cit)n(y)-6 b(,)24 b(CA,)h(1989.)127 1853 y([Str91])81 b(Bjarne)36
b(Stroustrup.)69 b Fa(The)40 b(C++)e(Pr)l(o)l(gr)l(amming)k(L)l(anguage)p
Fm(.)73 b(Addison-W)-6 b(esley)g(,)38 b(Reading,)431 2044 y(Mass.,)26
b(second)f(edition,)f(1991.)127 2299 y([US87])83 b(Da)n(vid)21
b(Ungar)h(and)h(Randall)e(B.)i(Smith.)31 b Fi(Self)p Fm(:)i(The)23
b(p)r(o)n(w)n(er)g(of)f(simplicit)n(y)-6 b(.)29 b(T)-6 b(ec)n(hnical)21
b(rep)r(ort,)431 2490 y(Stanford)i(Univ)n(ersit)n(y)-6 b(,)24
b(Stanford,)f(CA,)j(1987.)127 2744 y([vR93a])47 b(G.)27 b(v)l(an)d(Rossum.)36
b(Python)25 b(Library)g(reference.)37 b(T)-6 b(ec)n(hnical)23
b(rep)r(ort,)k(CWI,)f(Amsterdam,)h(Jan-)431 2935 y(uary)d(1993.)127
3190 y([vR93b])43 b(G.)27 b(v)l(an)e(Rossum.)37 b(Python)26
b(reference)h(man)n(ual.)35 b(T)-6 b(ec)n(hnical)24 b(rep)r(ort,)j(CWI,)f
(Amsterdam,)i(Jan-)431 3381 y(uary)c(1993.)127 3636 y([vR93c])52
b(G.)25 b(v)l(an)e(Rossum.)32 b(Python)23 b(T)-6 b(utorial.)29
b(T)-6 b(ec)n(hnical)22 b(rep)r(ort,)j(CWI,)f(Amsterdam,)h(Jan)n(uary)d
(1993.)431 3827 y(Python)i(is)i(a)n(v)l(ailable)21 b(b)n(y)k(FTP)h(from)f
(ftp.cwi.nl,)f(in)h(/pub/p)n(ython.)1676 4521 y(44)p eop
%%Page: 45 52
bop 127 70 a Fm([KA90)o(])26 b([Kee89])g([vR93a)n(])g([vR93c)o(])1676
4521 y(45)p eop
%%Trailer
end
userdict /end-hook known{end-hook}if
%%EOF