diff --git a/README b/README index 08daf73..3193d2b 100644 --- a/README +++ b/README @@ -4,8 +4,15 @@ % ********** This will generate jjj-os.pdf % ********** First change into the source files directory % 0) cd texfiles -% 1) pdflatex -shell-escape jjj-os -% 2) pdflatex -shell-escape jjj-os -% 3) mv jjj-os.pdf ../jjj-os.pdf +% 1) ./makepdf.sh +% ********** +% ********** + +% ********** If you made major changes and you +% ********** want to start clean... +% ********** First change into the source files directory +% 0) cd texfiles +% 1) ./cleanpdf.sh +% 2) ./makepdf.sh % ********** % ********** diff --git a/README~ b/README~ new file mode 100644 index 0000000..e27174a --- /dev/null +++ b/README~ @@ -0,0 +1,12 @@ +% book Morelli +% ********** +% ********** How to generate a PDF into this directory +% ********** This will generate jjj-os.pdf +% ********** First change into the source files directory +% 0) cd texfiles +% 1) makeindex jjj-os +% 2) latex jjj-os +% 3) dvips -f jjj-os.dvi > ../jjj-os.ps +% 4) ps2pdf ../jjj-os.ps ../jjj-os.pdf +% ********** +% ********** diff --git a/chptr00/chesshier.png b/chptr00/chesshier.png new file mode 100644 index 0000000..c9b67cc Binary files /dev/null and b/chptr00/chesshier.png differ diff --git a/chptr03/drawsticks.png b/chptr03/drawsticks.png new file mode 100644 index 0000000..0354310 Binary files /dev/null and b/chptr03/drawsticks.png differ diff --git a/chptr05/5f1.eps b/chptr05/5f1.eps index fb7abfb..f184ccc 100644 --- a/chptr05/5f1.eps +++ b/chptr05/5f1.eps @@ -1 +1,1814 @@ -%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Illustrator(R) 8.0 %%AI8_CreatorVersion: 8.0.1 %%For: (a a) (EMILCOMP) %%Title: (5f1.eps) %%CreationDate: (11/2/01) (12:50 PM) %%BoundingBox: -29 -160 146 -27 %%HiResBoundingBox: -28.5435 -159.7441 145.7061 -27.3452 %%DocumentProcessColors: Cyan Black %%DocumentSuppliedResources: procset Adobe_level2_AI5 1.2 0 %%+ procset Adobe_ColorImage_AI6 1.3 0 %%+ procset Adobe_Illustrator_AI5 1.3 0 %%+ procset Adobe_cshow 2.0 8 %%+ procset Adobe_shading_AI8 1.0 0 %AI5_FileFormat 4.0 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%CMYKProcessColor: 1 1 1 1 ([Registration]) %%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) %%+ Options: 1 16 0 1 0 1 1 1 0 1 1 1 1 18 0 0 0 0 0 0 0 0 -1 -1 %%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () %AI3_TemplateBox: 74 -93.5 74 -93.5 %AI3_TileBox: -204.7495 -484 370.25 271 %AI3_DocumentPreview: Macintosh_ColorPic %AI5_ArtSize: 324 144 %AI5_RulerUnits: 3 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI8_OpenToView: -94.5 27 3.03 1020 726 18 0 1 2 40 0 0 %AI5_OpenViewLayers: 7 %%PageOrigin:-204.7495 -484 %%AI3_PaperRect:-19 774 593 -18 %%AI3_Margin:19 -19 -18 18 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI7_Thumbnail: 128 100 8 %%BeginData: 15678 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FD2BFF141A1414141A1414141A14143CAFA9AFA9AFA9AFA9AFA9AF %141A1414141A1414141A141414AFA9AFA9AFA9AFA9AFA9AF141A1414141A %1414141A141414AFA9AFA9AFA9AFA9AFA9AF141A1414141A1414141A1414 %14FD2BFF14131414141314141413141467FD0BFF3C131414141314141413 %141460FD0BFF3C13141414131414141314143CFD0BFF6013141414131414 %1413141414FD2BFF1414141A1414141A1414141A61FD0BFF3614141A1414 %141A1414141A36FD0BFF3614141A1414141A1414141A36FD0BFF3614141A %1414141A1414141A14FD2BFF14141413141414131414141367FD0BFF3C14 %1413141414131414141361FD0BFF3C14141314141413141414133CFD0BFF %61141413141414131414141314FD2BFF1414141A1414141A1414141A61FD %0BFF3614141A1414141A1414141A3CFD0BFF3614141A1414141A1414141A %36FD0BFF3C14141A1414141A1414141A14FD2BFF14141413141414131414 %141367FD0BFF3C141413141414131414141361FD0BFF3C14141314141413 %141414133CFD0BFF61141413141414131414141314FD2BFF141A1414141A %1414141A14143CFD0BFF141A1414141A1414141A141414FD0BFF141A1414 %141A1414141A141414FD0BFF141A1414141A1414141A141414FD2BFF1413 %1414141314141413141467FD0BFF3C13141414131414141314143CFD0BFF %3C13141414131414141314143CFD0BFF3C131414141314141413141414FD %2BFF141A1414141A1414141A141461FD0BFF361A1414141A1414141A1414 %36FD0BFF361A1414141A1414141A141436FD0BFF361A1414141A1414141A %141414FD2BFF14131414141314141413141467FD0BFF3C13141414131414 %1413141460FD0BFF3C13141414131414141314143CFD0BFF601314141413 %14141413141414FD2BFF1414141A1414141A1414141A61FD0BFF3614141A %1414141A1414141A36FD0BFF3614141A1414141A1414141A36FD0BFF3614 %141A1414141A1414141A14FD2BFF14141413141414131414141367FD0BFF %3C141413141414131414141361FD0BFF3C14141314141413141414133CFD %0BFF61141413141414131414141314FD1FFF3C6036613C6036613C603661 %1414141A1414141A1414141A143C363D363C363D363C363D1414141A1414 %141A1414141A363C363D363C363D363C363D1414141A1414141A1414141A %363C363D363C363D363C363D1414141A1414141A1414141A14FD1EFF5A14 %141413141414131414141367FD0BFF14141413141414131414141361FD0B %FF3C141413141414131414141361FD0BFF6114141314141413141414133C %FD0BFFAFFD1EFF8B141A1414141A1414141A14143CFD0BFF141A1414141A %1414141A141414FD0BFF141A1414141A1414141A141414FD0BFF141A1414 %141A1414141A141414FD0BFF84FD1EFF5A14131414141314141413141467 %FD0BFF1413141414131414141314143CFD0BFF3C13141414131414141314 %143CFD0BFF3C13141414131414141314143CFD0BFFAFFD1EFF8B141A1414 %141A1414141A141461FD0BFF141A1414141A1414141A141436FD0BFF361A %1414141A1414141A141436FD0BFF361A1414141A1414141A141436FD0BFF %A9FD1EFF6014131414141314141413141467FD0BFF141314141413141414 %13141460FD0BFF3C131414141314141413141460FD0BFF60131414141314 %14141314143CFD0BFFAFFD1EFF8B1414141A1414141A1414141A61FD0BFF %1414141A1414141A1414141A36FD0BFF3614141A1414141A1414141A36FD %0BFF3614141A1414141A1414141A36FD0BFFA9FD1EFF5A14141413141414 %131414141367FD0BFF14141413141414131414141361FD0BFF3C14141314 %1414131414141361FD0BFF6114141314141413141414133CFD0BFFAFFD1E %FF8B1414141A1414141A1414141A61FD0BFF1414141A1414141A1414141A %3CFD0BFF3614141A1414141A1414141A3CFD0BFF3C14141A1414141A1414 %141A36FD0BFFA9FD1EFF5A14141413141414131414141367FD0BFF141414 %13141414131414141361FD0BFF3C141413141414131414141361FD0BFF61 %14141314141413141414133CFD0BFFAFFD1EFF8B141A1414141A1414141A %14143CFD0BFF141A1414141A1414141A141414FD0BFF141A1414141A1414 %141A141414FD0BFF141A1414141A1414141A141414FD0BFF84FD1EFF5A14 %131414141314141413141467FD0BFF1413141414131414141314143CFD0B %FF3C13141414131414141314143CFD0BFF3C13141414131414141314143C %FD0BFFAFFD1EFF8B141A1414141A1414141A1414143D363C363D363C363D %363C141A1414141A1414141A1414143D363C363D363C363D363C141A1414 %141A1414141A1414143D363C363D363C363D363C141A1414141A1414141A %1414143D363C363D363C363D363C14FD1EFF84FD0CFF1413141414131414 %1413141467FD0BFF3C131414141314141413141460FD0BFF3C1314141413 %1414141314143CFD0BFF60131414141314141413141414FD1EFFAFFD0CFF %1414141A1414141A1414141A61FD0BFF3614141A1414141A1414141A36FD %0BFF3614141A1414141A1414141A36FD0BFF3614141A1414141A1414141A %14FD1EFF84FD0CFF14141413141414131414141367FD0BFF3C1414131414 %14131414141361FD0BFF3C14141314141413141414133CFD0BFF61141413 %141414131414141314FD1EFFAFFD0CFF1414141A1414141A1414141A61FD %0BFF3614141A1414141A1414141A3CFD0BFF3614141A1414141A1414141A %36FD0BFF3C14141A1414141A1414141A14FD1EFF84FD0CFF141414131414 %14131414141367FD0BFF3C141413141414131414141361FD0BFF3C141413 %14141413141414133CFD0BFF61141413141414131414141314FD1EFFAFFD %0CFF141A1414141A1414141A14143CFD0BFF141A1414141A1414141A1414 %14FD0BFF141A1414141A1414141A141414FD0BFF141A1414141A1414141A %141414FD1EFF84FD0CFF14131414141314141413141467FD0BFF3C131414 %14131414141314143CFD0BFF3C13141414131414141314143CFD0BFF3C13 %1414141314141413141414FD1EFFAFFD0CFF141A1414141A1414141A1414 %61FD0BFF361A1414141A1414141A141436FD0BFF361A1414141A1414141A %141436FD0BFF361A1414141A1414141A141414FD1EFF84FD0CFF14131414 %141314141413141467FD0BFF3C131414141314141413141460FD0BFF3C13 %141414131414141314143CFD0BFF60131414141314141413141414FD1EFF %AFFD0CFF1414141A1414141A1414141A61FD0BFF3614141A1414141A1414 %141A36FD0BFF3614141A1414141A1414141A36FD0BFF3614141A1414141A %1414141A14FD1EFF84FD0CFF14141413141414131414141367FD0BFF3C14 %1413141414131414141361FD0BFF3C14141314141413141414133CFD0BFF %611414131414141314141413147D527D527D527D527D527D527D527D527D %527D527D527D52FD07FF3C6136673C6136673C6136671414141A1414141A %1414141A3C6136673C6136673C6136671414141A1414141A1414141A3C61 %36673C6136673C6136671414141A1414141A1414141A366136673C613667 %3C6136671A14141A1414141A1414141A14FD0BF85252FD0BF87DFD05FF5A %14141413141414131414141367FD0BFF14141413141414131414141361FD %0BFF3C141413141414131414141361FD0BFF611414131414141314141413 %3CFD0BFFAFFD0BF8527DFD05F852FD05F8A8FD05FF8B141A1414141A1414 %141A14143CFD0BFF141A1414141A1414141A141414FD0BFF141A1414141A %1414141A141414FD0BFF141A1414141A1414141A141414FD0BFF84FD0BF8 %7D52FD04F8A8FF52FD04F87DFD05FF5A14131414141314141413141467FD %0BFF1413141414131414141314143CFD0BFF3C1314141413141414131414 %3CFD0BFF3C13141414131414141314143CFD0BFFAFFD0BF8527DFD04F87D %FF27FD04F8A8FD05FF8B141A1414141A1414141A141461FD0BFF141A1414 %141A1414141A141436FD0BFF361A1414141A1414141A141436FD0BFF361A %1414141A1414141A141436FD0BFFA9FD05F82752FD04F87D52FD0BF87DFD %05FF6014131414141314141413141467FD0BFF1413141414131414141314 %1460FD0BFF3C131414141314141413141460FD0BFF601314141413141414 %1314143CFD0BFFAFFD04F827FFFF27F8F8F8527DFD0BF8A8FD05FF8B1414 %141A1414141A1414141A61FD0BFF1414141A1414141A1414141A36FD0BFF %3614141A1414141A1414141A36FD0BFF3614141A1414141A1414141A36FD %0BFFA9FD05F8527DFD04F87D52FD0BF87DFD05FF5A141414131414141314 %14141367FD0BFF14141413141414131414141361FD0BFF3C141413141414 %131414141361FD0BFF6114141314141413141414133CFD0BFFAFFD0BF852 %7DFD05F852FD05F8A8FD05FF8B1414141A1414141A1414141A61FD0BFF14 %14141A1414141A1414141A3CFD0BFF3614141A1414141A1414141A3CFD0B %FF3C14141A1414141A1414141A36FD0BFFA9FD0BF87D52FD04F8A8FF52FD %04F87DFD05FF5A14141413141414131414141367FD0BFF14141413141414 %131414141361FD0BFF3C141413141414131414141361FD0BFF6114141314 %141413141414133CFD0BFFAFFD0BF8527DFD04F852A8FD05F8A8FD05FF8B %141A1414141A1414141A14143CFD0BFF141A1414141A1414141A141414FD %0BFF141A1414141A1414141A141414FD0BFF141A1414141A1414141A1414 %14FD0BFF84FD0BF87D52FD0BF87DFD05FF5A141314141413141414131414 %67FD0BFF1413141414131414141314143CFD0BFF3C131414141314141413 %14143CFD0BFF3C13141414131414141314143CFD0BFFAFFD18F8A8FD05FF %AF141A1414141A1414141A141414673C6136673C6136673C61141A141414 %1A1414141A141414673C6136673C6136673C61141A1414141A1414141A14 %1414673C6136673C6136673C61141A1414141A1414141A141414673C6136 %673C6136673C6114FD1EFF84FD0CFF14131414141314141413141467FD0B %FF3C131414141314141413141460FD0BFF3C13141414131414141314143C %FD0BFF60131414141314141413141414FD1EFFAFFD0CFF1414141A141414 %1A1414141A61FD0BFF3614141A1414141A1414141A36FD0BFF3614141A14 %14141A1414141A36FD0BFF3614141A1414141A1414141A14FD1EFF84FD0C %FF14141413141414131414141367FD0BFF3C141413141414131414141361 %FD0BFF3C14141314141413141414133CFD0BFF6114141314141413141414 %1314FD1EFFAFFD0CFF1414141A1414141A1414141A61FD0BFF3614141A14 %14141A1414141A3CFD0BFF3614141A1414141A1414141A36FD0BFF3C1414 %1A1414141A1414141A14FD1EFF84FD0CFF14141413141414131414141367 %FD0BFF3C141413141414131414141361FD0BFF3C14141314141413141414 %133CFD0BFF61141413141414131414141314FD1EFFAFFD0CFF141A141414 %1A1414141A14143CFD0BFF141A1414141A1414141A141414FD0BFF141A14 %14141A1414141A141414FD0BFF141A1414141A1414141A141414FD1EFF84 %FD0CFF14131414141314141413141467FD0BFF3C13141414131414141314 %143CFD0BFF3C13141414131414141314143CFD0BFF3C1314141413141414 %13141414FD1EFFAFFD0CFF141A1414141A1414141A141461FD0BFF361A14 %14141A1414141A141436FD0BFF361A1414141A1414141A141436FD0BFF36 %1A1414141A1414141A141414FD1EFF84FD0CFF1413141414131414141314 %1467FD0BFF3C131414141314141413141460FD0BFF3C1314141413141414 %1314143CFD0BFF60131414141314141413141414FD1EFFAFFD0CFF141414 %1A1414141A1414141A61FD0BFF3614141A1414141A1414141A36FD0BFF36 %14141A1414141A1414141A36FD0BFF3614141A1414141A1414141A14FD1E %FF84FD0CFF14141413141414131414141367FD0BFF3C1414131414141314 %14141361FD0BFF3C14141314141413141414133CFD0BFF61141413141414 %131414141314FD1FFF3C6136673C6136673C6136671414141A1414141A14 %14141A3C6136673C6136673C6136671414141A1414141A1414141A3C6136 %673C6136673C6136671414141A1414141A1414141A366136673C6136673C %6136671A14141A1414141A1414141A14FD1EFF5A14141413141414131414 %141367FD0BFF14141413141414131414141361FD0BFF3C14141314141413 %1414141361FD0BFF6114141314141413141414133CFD0BFFAFFD1EFF8B14 %1A1414141A1414141A14143CFD0BFF141A1414141A1414141A141414FD0B %FF141A1414141A1414141A141414FD0BFF141A1414141A1414141A141414 %FD0BFF84FD1EFF5A14131414141314141413141467FD0BFF141314141413 %1414141314143CFD0BFF3C13141414131414141314143CFD0BFF3C131414 %14131414141314143CFD0BFFAFFD1EFF8B141A1414141A1414141A141461 %FD0BFF141A1414141A1414141A141436FD0BFF361A1414141A1414141A14 %1436FD0BFF361A1414141A1414141A141436FD0BFFA9FD1EFF6014131414 %141314141413141467FD0BFF14131414141314141413141460FD0BFF3C13 %1414141314141413141460FD0BFF6013141414131414141314143CFD0BFF %AFFD1EFF8B1414141A1414141A1414141A61FD0BFF1414141A1414141A14 %14141A36FD0BFF3614141A1414141A1414141A36FD0BFF3614141A141414 %1A1414141A36FD0BFFA9FD1EFF5A14141413141414131414141367FD0BFF %14141413141414131414141361FD0BFF3C141413141414131414141361FD %0BFF6114141314141413141414133CFD0BFFAFFD1EFF8B1414141A141414 %1A1414141A61FD0BFF1414141A1414141A1414141A3CFD0BFF3614141A14 %14141A1414141A3CFD0BFF3C14141A1414141A1414141A36FD0BFFA9FD1E %FF5A14141413141414131414141367FD0BFF141414131414141314141413 %61FD0BFF3C141413141414131414141361FD0BFF61141413141414131414 %14133CFD0BFFAFFD1EFF8B141A1414141A1414141A14143CFD0BFF141A14 %14141A1414141A141414FD0BFF141A1414141A1414141A141414FD0BFF14 %1A1414141A1414141A141414FD0BFF84FD1EFF5A14131414141314141413 %141467FD0BFF1413141414131414141314143CFD0BFF3C13141414131414 %141314143CFD0BFF3C13141414131414141314143CFD0BFFAFFD1EFF8B14 %1A1414141A1414141A14143C8B618B618B618B618B618B141A1414141A14 %14141A1414148B618B618B618B618B618B141A1414141A1414141A141414 %8B618B618B618B618B618B141A1414141A1414141A1414148B618B618B61 %8B618B618B3CFD1EFF84FD0CFF14131414141314141413141467FD0BFF3C %131414141314141413141460FD0BFF3C13141414131414141314143CFD0B %FF60131414141314141413141414FD1EFFAFFD0CFF1414141A1414141A14 %14141A61FD0BFF3614141A1414141A1414141A36FD0BFF3614141A141414 %1A1414141A36FD0BFF3614141A1414141A1414141A14FD1EFF84FD0CFF14 %141413141414131414141367FD0BFF3C141413141414131414141361FD0B %FF3C14141314141413141414133CFD0BFF61141413141414131414141314 %FD1EFFAFFD0CFF1414141A1414141A1414141A61FD0BFF3614141A141414 %1A1414141A3CFD0BFF3614141A1414141A1414141A36FD0BFF3C14141A14 %14141A1414141A14FD1EFF84FD0CFF14141413141414131414141367FD0B %FF3C141413141414131414141361FD0BFF3C14141314141413141414133C %FD0BFF61141413141414131414141314FD1EFFAFFD0CFF141A1414141A14 %14141A14143CFD0BFF141A1414141A1414141A141414FD0BFF141A141414 %1A1414141A141414FD0BFF141A1414141A1414141A141414FD1EFF84FD0C %FF14131414141314141413141467FD0BFF3C13141414131414141314143C %FD0BFF3C13141414131414141314143CFD0BFF3C13141414131414141314 %1414FD1EFFAFFD0CFF141A1414141A1414141A141461FD0BFF361A141414 %1A1414141A141436FD0BFF361A1414141A1414141A141436FD0BFF361A14 %14141A1414141A141414FD1EFF84FD0CFF14131414141314141413141467 %FD0BFF3C131414141314141413141460FD0BFF3C13141414131414141314 %143CFD0BFF60131414141314141413141414FD1EFFAFFD0CFF1414141A14 %14141A1414141A61FD0BFF3614141A1414141A1414141A36FD0BFF361414 %1A1414141A1414141A36FD0BFF3614141A1414141A1414141A14FD1EFF84 %FD0CFF14141413141414131414141367FD0BFF3C14141314141413141414 %1361FD0BFF3C14141314141413141414133CFD0BFF611414131414141314 %14141314FD1EFFAF618B618B618B618B618B618B1414141A1414141A1414 %141A3C8B618B618B618B618B618B1414141A1414141A1414141A3C8B618B %618B618B618B618B1414141A1414141A1414141A368B618B618B618B618B %618B3C14141A1414141A1414141A14FD1EFF5A1414141314141413141414 %1367FD0BFF14141413141414131414141361FD0BFF3C1414131414141314 %14141361FD0BFF6114141314141413141414133CFD2AFF8B141A1414141A %1414141A14143CFD0BFF141A1414141A1414141A141414FD0BFF141A1414 %141A1414141A141414FD0BFF141A1414141A1414141A141414FD2AFF5A14 %131414141314141413141467FD0BFF1413141414131414141314143CFD0B %FF3C13141414131414141314143CFD0BFF3C13141414131414141314143C %FD2AFF8B141A1414141A1414141A141461FD0BFF141A1414141A1414141A %141436FD0BFF361A1414141A1414141A141436FD0BFF361A1414141A1414 %141A141436FD2AFF6014131414141314141413141467FD0BFF1413141414 %1314141413141460FD0BFF3C131414141314141413141460FD0BFF601314 %1414131414141314143CFD2AFF8B1414141A1414141A1414141A61FD0BFF %1414141A1414141A1414141A36FD0BFF3614141A1414141A1414141A36FD %0BFF3614141A1414141A1414141A36FD2AFF5A1414141314141413141414 %1367FD0BFF14141413141414131414141361FD0BFF3C1414131414141314 %14141361FD0BFF6114141314141413141414133CFD2AFF8B1414141A1414 %141A1414141A61FD0BFF1414141A1414141A1414141A3CFD0BFF3614141A %1414141A1414141A3CFD0BFF3C14141A1414141A1414141A3CFD2AFF5A14 %141413141414131414141367FD0BFF14141413141414131414141361FD0B %FF3C141413141414131414141361FD0BFF6114141314141413141414133C %FD2AFF8B141A1414141A1414141A14143CFD0BFF141A1414141A1414141A %141414FD0BFF141A1414141A1414141A141414FD0BFF141A1414141A1414 %141A141414FD2AFF5A14131414141314141413141467FD0BFF1413141414 %131414141314143CFD0BFF3C13141414131414141314143CFD0BFF3C1314 %1414131414141314143CFD2AFF8B141A1414141A1414141A141461FD0BFF %141A1414141A1414141A141436FD0BFF361A1414141A1414141A141436FD %0BFF361A1414141A1414141A141436FD2AFF841413141414131414141314 %148B84AF84AF84AF84AF84AF841413141414131414141314146084AF84AF %84AF84AF84AF843C13141414131414141314146084AF84AF84AF84AF84AF %846013141414131414141314143CFDFCFFFD0FFFFF %%EndData %%EndComments %%BeginProlog %%BeginResource: procset Adobe_level2_AI5 1.2 0 %%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation) %%Version: 1.2 0 %%CreationDate: (04/10/93) () %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) userdict /Adobe_level2_AI5 26 dict dup begin put /packedarray where not { userdict begin /packedarray { array astore readonly } bind def /setpacking /pop load def /currentpacking false def end 0 } if pop userdict /defaultpacking currentpacking put true setpacking /initialize { Adobe_level2_AI5 begin } bind def /terminate { currentdict Adobe_level2_AI5 eq { end } if } bind def mark /setcustomcolor where not { /findcmykcustomcolor { (AI8_CMYK_CustomColor) 6 packedarray } bind def /findrgbcustomcolor { (AI8_RGB_CustomColor) 5 packedarray } bind def /setcustomcolor { exch aload pop dup (AI8_CMYK_CustomColor) eq { pop pop 4 { 4 index mul 4 1 roll } repeat 5 -1 roll pop setcmykcolor } { dup (AI8_RGB_CustomColor) eq { pop pop 3 { 1 exch sub 3 index mul 1 exch sub 3 1 roll } repeat 4 -1 roll pop setrgbcolor } { pop 4 { 4 index mul 4 1 roll } repeat 5 -1 roll pop setcmykcolor } ifelse } ifelse } def } if /setAIseparationgray { false setoverprint 0 setgray /setseparationgray where{ pop setseparationgray }{ /setcolorspace where{ pop [/Separation (All) /DeviceCMYK {dup dup dup}] setcolorspace 1 exch sub setcolor }{ setgray }ifelse }ifelse } def /gt38? mark {version cvr cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put userdict /level2? systemdict /languagelevel known dup { pop systemdict /languagelevel get 2 ge } if put /level2ScreenFreq { begin 60 HalftoneType 1 eq { pop Frequency } if HalftoneType 2 eq { pop GrayFrequency } if HalftoneType 5 eq { pop Default level2ScreenFreq } if end } bind def userdict /currentScreenFreq level2? {currenthalftone level2ScreenFreq} {currentscreen pop pop} ifelse put level2? not { /setcmykcolor where not { /setcmykcolor { exch .11 mul add exch .59 mul add exch .3 mul add 1 exch sub setgray } def } if /currentcmykcolor where not { /currentcmykcolor { 0 0 0 1 currentgray sub } def } if /setoverprint where not { /setoverprint /pop load def } if /selectfont where not { /selectfont { exch findfont exch dup type /arraytype eq { makefont } { scalefont } ifelse setfont } bind def } if /cshow where not { /cshow { [ 0 0 5 -1 roll aload pop ] cvx bind forall } bind def } if } if cleartomark /anyColor? { add add add 0 ne } bind def /testColor { gsave setcmykcolor currentcmykcolor grestore } bind def /testCMYKColorThrough { testColor anyColor? } bind def userdict /composite? 1 0 0 0 testCMYKColorThrough 0 1 0 0 testCMYKColorThrough 0 0 1 0 testCMYKColorThrough 0 0 0 1 testCMYKColorThrough and and and put composite? not { userdict begin gsave /cyan? 1 0 0 0 testCMYKColorThrough def /magenta? 0 1 0 0 testCMYKColorThrough def /yellow? 0 0 1 0 testCMYKColorThrough def /black? 0 0 0 1 testCMYKColorThrough def grestore /isCMYKSep? cyan? magenta? yellow? black? or or or def /customColor? isCMYKSep? not def end } if end defaultpacking setpacking %%EndResource %%BeginProcSet: Adobe_ColorImage_AI6 1.3 0 userdict /Adobe_ColorImage_AI6 known not { userdict /Adobe_ColorImage_AI6 53 dict put } if userdict /Adobe_ColorImage_AI6 get begin /initialize { Adobe_ColorImage_AI6 begin Adobe_ColorImage_AI6 { dup type /arraytype eq { dup xcheck { bind } if } if pop pop } forall } def /terminate { end } def currentdict /Adobe_ColorImage_AI6_Vars known not { /Adobe_ColorImage_AI6_Vars 41 dict def } if Adobe_ColorImage_AI6_Vars begin /plateindex -1 def /_newproc null def /_proc1 null def /_proc2 null def /sourcearray 4 array def /_ptispace null def /_ptiname null def /_pti0 0 def /_pti1 0 def /_ptiproc null def /_ptiscale 0 def /_pticomps 0 def /_ptibuf 0 string def /_gtigray 0 def /_cticmyk null def /_rtirgb null def /XIEnable true def /XIType 0 def /XIEncoding 0 def /XICompression 0 def /XIChannelCount 0 def /XIBitsPerPixel 0 def /XIImageHeight 0 def /XIImageWidth 0 def /XIImageMatrix null def /XIRowBytes 0 def /XIFile null def /XIBuffer1 null def /XIBuffer2 null def /XIBuffer3 null def /XIDataProc null def /XIColorSpace /DeviceGray def /XIColorValues 0 def /XIPlateList false def end /ci6colorimage /colorimage where {/colorimage get}{null} ifelse def /ci6image systemdict /image get def /ci6curtransfer systemdict /currenttransfer get def /ci6curoverprint /currentoverprint where {/currentoverprint get}{{_of}} ifelse def /ci6foureq { 4 index ne { pop pop pop false }{ 4 index ne { pop pop false }{ 4 index ne { pop false }{ 4 index eq } ifelse } ifelse } ifelse } def /ci6testplate { Adobe_ColorImage_AI6_Vars begin /plateindex -1 def /setcmykcolor where { pop gsave 1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub grestore 1 0 0 0 ci6foureq { /plateindex 0 def }{ 0 1 0 0 ci6foureq { /plateindex 1 def }{ 0 0 1 0 ci6foureq { /plateindex 2 def }{ 0 0 0 1 ci6foureq { /plateindex 3 def }{ 0 0 0 0 ci6foureq { /plateindex 5 def } if } ifelse } ifelse } ifelse } ifelse pop pop pop pop } if plateindex end } def /ci6concatprocs { /packedarray where { pop dup type /packedarraytype eq 2 index type /packedarraytype eq or }{ false } ifelse { /_proc2 exch cvlit def /_proc1 exch cvlit def _proc1 aload pop _proc2 aload pop _proc1 length _proc2 length add packedarray cvx }{ /_proc2 exch cvlit def /_proc1 exch cvlit def /_newproc _proc1 length _proc2 length add array def _newproc 0 _proc1 putinterval _newproc _proc1 length _proc2 putinterval _newproc cvx } ifelse } def /ci6istint { type /arraytype eq } def /ci6isspot { dup type /arraytype eq { dup length 1 sub get /Separation eq }{ pop false } ifelse } def /ci6spotname { dup ci6isspot {dup length 2 sub get}{pop ()} ifelse } def /ci6altspace { aload pop pop pop ci6colormake } def /ci6numcomps { dup /DeviceGray eq { pop 1 }{ dup /DeviceRGB eq { pop 3 }{ /DeviceCMYK eq { 4 }{ 1 } ifelse } ifelse } ifelse } def /ci6marksplate { dup /DeviceGray eq { pop plateindex 3 eq }{ dup /DeviceRGB eq { pop plateindex 5 ne }{ dup /DeviceCMYK eq { pop plateindex 5 ne }{ dup ci6isspot { /findcmykcustomcolor where { pop dup length 2 sub get 0.1 0.1 0.1 0.1 5 -1 roll findcmykcustomcolor 1 setcustomcolor systemdict /currentgray get exec 1 ne }{ pop plateindex 5 ne } ifelse }{ pop plateindex 5 ne } ifelse } ifelse } ifelse } ifelse } def /ci6colormake { dup ci6numcomps exch 1 index 2 add 1 roll dup 1 eq {pop}{array astore} ifelse exch } def /ci6colorexpand { dup ci6spotname exch dup ci6istint { ci6altspace exch 4 1 roll }{ 1 3 1 roll } ifelse } def /ci6colortint { dup /DeviceGray eq { 3 1 roll 1 exch sub mul 1 exch sub exch }{ dup /DeviceRGB eq { 3 1 roll {1 exch sub 1 index mul 1 exch sub exch} forall pop 3 array astore exch }{ dup /DeviceCMYK eq { 3 1 roll {1 index mul exch} forall pop 4 array astore exch }{ 3 1 roll mul exch } ifelse } ifelse } ifelse } def /ci6colortocmyk { dup /DeviceGray eq { pop 1 exch sub 0 0 0 4 -1 roll 4 array astore }{ dup /DeviceRGB eq { pop aload pop _rgbtocmyk 4 array astore }{ dup /DeviceCMYK eq { pop }{ ci6altspace ci6colortint ci6colortocmyk } ifelse } ifelse } ifelse } def /ci6makeimagedict { 7 dict begin /ImageType 1 def /Decode exch def /DataSource exch def /ImageMatrix exch def /BitsPerComponent exch def /Height exch def /Width exch def currentdict end } def /ci6stringinvert { 0 1 2 index length 1 sub { dup 2 index exch get 255 exch sub 2 index 3 1 roll put } for } def /ci6stringknockout { 0 1 2 index length 1 sub { 255 2 index 3 1 roll put } for } def /ci6stringapply { 0 1 4 index length 1 sub { dup 4 index exch get 3 index 3 1 roll 3 index exec } for pop exch pop } def /ci6walkrgbstring { 0 3 index dup length 1 sub 0 3 3 -1 roll { 3 getinterval {} forall 5 index exec 3 index } for 5 {pop} repeat } def /ci6walkcmykstring { 0 3 index dup length 1 sub 0 4 3 -1 roll { 4 getinterval {} forall 6 index exec 3 index } for 5 { pop } repeat } def /ci6putrgbtograystr { .11 mul exch .59 mul add exch .3 mul add cvi 3 copy put pop 1 add } def /ci6putcmyktograystr { exch .11 mul add exch .59 mul add exch .3 mul add dup 255 gt { pop 255 } if 255 exch sub cvi 3 copy put pop 1 add } def /ci6rgbtograyproc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec XIBuffer3 dup 3 1 roll /ci6putrgbtograystr load exch ci6walkrgbstring end } def /ci6cmyktograyproc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec XIBuffer3 dup 3 1 roll /ci6putcmyktograystr load exch ci6walkcmykstring end } def /ci6separatecmykproc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec XIBuffer3 0 2 index plateindex 4 2 index length 1 sub { get 255 exch sub 3 copy put pop 1 add 2 index } for pop pop exch pop end } def /ci6compositeimage { dup 1 eq { pop pop image }{ /ci6colorimage load null ne { ci6colorimage }{ 3 1 roll pop sourcearray 0 3 -1 roll put 3 eq {/ci6rgbtograyproc}{/ci6cmyktograyproc} ifelse load image } ifelse } ifelse } def /ci6knockoutimage { gsave 0 ci6curtransfer exec 1 ci6curtransfer exec eq { 0 ci6curtransfer exec 0.5 lt }{ 0 ci6curtransfer exec 1 ci6curtransfer exec gt } ifelse {{pop 0}}{{pop 1}} ifelse systemdict /settransfer get exec ci6compositeimage grestore } def /ci6drawimage { ci6testplate -1 eq { pop ci6compositeimage }{ dup type /arraytype eq { dup length plateindex gt {plateindex get}{pop false} ifelse }{ { true }{ dup 1 eq {plateindex 3 eq}{plateindex 3 le} ifelse } ifelse } ifelse { dup 1 eq { pop pop ci6image }{ dup 3 eq { ci6compositeimage }{ pop pop sourcearray 0 3 -1 roll put /ci6separatecmykproc load ci6image } ifelse } ifelse }{ ci6curoverprint { 7 {pop} repeat }{ ci6knockoutimage } ifelse } ifelse } ifelse } def /ci6proctintimage { /_ptispace exch store /_ptiname exch store /_pti1 exch store /_pti0 exch store /_ptiproc exch store /_pticomps _ptispace ci6numcomps store /_ptiscale _pti1 _pti0 sub store level2? { _ptiname length 0 gt version cvr 2012 ge and { [/Separation _ptiname _ptispace {_ptiproc}] setcolorspace [_pti0 _pti1] ci6makeimagedict ci6image }{ [/Indexed _ptispace 255 {255 div _ptiscale mul _pti0 add _ptiproc}] setcolorspace [0 255] ci6makeimagedict ci6image } ifelse }{ _pticomps 1 eq { { dup { 255 div _ptiscale mul _pti0 add _ptiproc 255 mul cvi put } ci6stringapply } ci6concatprocs ci6image }{ { dup length _pticomps mul dup _ptibuf length ne {/_ptibuf exch string store}{pop} ifelse _ptibuf { exch _pticomps mul exch 255 div _ptiscale mul _pti0 add _ptiproc _pticomps 2 add -2 roll _pticomps 1 sub -1 0 { 1 index add 2 index exch 5 -1 roll 255 mul cvi put } for pop pop } ci6stringapply } ci6concatprocs false _pticomps /ci6colorimage load null eq {7 {pop} repeat}{ci6colorimage} ifelse } ifelse } ifelse } def /ci6graytintimage { /_gtigray 5 -1 roll store {1 _gtigray sub mul 1 exch sub} 4 1 roll /DeviceGray ci6proctintimage } def /ci6cmyktintimage { /_cticmyk 5 -1 roll store {_cticmyk {1 index mul exch} forall pop} 4 1 roll /DeviceCMYK ci6proctintimage } def /ci6rgbtintimage { /_rtirgb 5 -1 roll store {_rtirgb {1 exch sub 1 index mul 1 exch sub exch} forall pop} 4 1 roll /DeviceRGB ci6proctintimage } def /ci6tintimage { ci6testplate -1 eq { ci6colorexpand 3 -1 roll 5 -1 roll {0}{0 exch} ifelse 4 2 roll dup /DeviceGray eq { pop ci6graytintimage }{ dup /DeviceRGB eq { pop ci6rgbtintimage }{ pop ci6cmyktintimage } ifelse } ifelse }{ dup ci6marksplate { plateindex 5 lt { ci6colortocmyk plateindex get dup 0 eq ci6curoverprint and { 7 {pop} repeat }{ 1 exch sub exch {1 0}{0 1} ifelse () ci6graytintimage } ifelse }{ pop exch {0}{0 exch} ifelse 0 3 1 roll () ci6graytintimage } ifelse }{ ci6curoverprint { 8 {pop} repeat }{ pop pop pop {pop 1} 0 1 () /DeviceGray ci6proctintimage } ifelse } ifelse } ifelse } def /XINullImage { } def /XIImageMask { XIImageWidth XIImageHeight false [XIImageWidth 0 0 XIImageHeight neg 0 0] /XIDataProc load imagemask } def /XIImageTint { XIImageWidth XIImageHeight XIBitsPerPixel [XIImageWidth 0 0 XIImageHeight neg 0 0] /XIDataProc load XIType 3 eq XIColorValues XIColorSpace ci6tintimage } def /XIImage { XIImageWidth XIImageHeight XIBitsPerPixel [XIImageWidth 0 0 XIImageHeight neg 0 0] /XIDataProc load false XIChannelCount XIPlateList ci6drawimage } def /XG { pop pop } def /XF { 13 {pop} repeat } def /Xh { Adobe_ColorImage_AI6_Vars begin gsave /XIType exch def /XIImageHeight exch def /XIImageWidth exch def /XIImageMatrix exch def 0 0 moveto XIImageMatrix concat XIImageWidth XIImageHeight scale /_lp /null ddef _fc /_lp /imagemask ddef end } def /XH { Adobe_ColorImage_AI6_Vars begin grestore end } def /XIEnable { Adobe_ColorImage_AI6_Vars /XIEnable 3 -1 roll put } def /XC { Adobe_ColorImage_AI6_Vars begin ci6colormake /XIColorSpace exch def /XIColorValues exch def end } def /XIPlates { Adobe_ColorImage_AI6_Vars begin /XIPlateList exch def end } def /XI { Adobe_ColorImage_AI6_Vars begin gsave /XIType exch def cvi dup 256 idiv /XICompression exch store 256 mod /XIEncoding exch store pop pop /XIChannelCount exch def /XIBitsPerPixel exch def /XIImageHeight exch def /XIImageWidth exch def pop pop pop pop /XIImageMatrix exch def XIBitsPerPixel 1 eq { XIImageWidth 8 div ceiling cvi }{ XIImageWidth XIChannelCount mul } ifelse /XIRowBytes exch def XIEnable { /XIBuffer3 XIImageWidth string def XICompression 0 eq { /XIBuffer1 XIRowBytes string def XIEncoding 0 eq { {currentfile XIBuffer1 readhexstring pop} }{ {currentfile XIBuffer1 readstring pop} } ifelse }{ /XIBuffer1 256 string def /XIBuffer2 XIRowBytes string def {currentfile XIBuffer1 readline pop (%) anchorsearch {pop} if} /ASCII85Decode filter /DCTDecode filter /XIFile exch def {XIFile XIBuffer2 readstring pop} } ifelse /XIDataProc exch def XIType 1 ne { 0 setgray } if XIType 1 eq { XIImageMask }{ XIType 2 eq XIType 3 eq or { XIImageTint }{ XIImage } ifelse } ifelse }{ XINullImage } ifelse /XIPlateList false def grestore end } def end %%EndProcSet %%BeginResource: procset Adobe_Illustrator_AI5 1.3 0 %%Title: (Adobe Illustrator (R) Version 8.0 Full Prolog) %%Version: 1.3 0 %%CreationDate: (3/7/1994) () %%Copyright: ((C) 1987-1998 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_Illustrator_AI5_vars 112 dict dup begin put /_?cmyk false def /_eo false def /_lp /none def /_pf { } def /_ps { } def /_psf { } def /_pss { } def /_pjsf { } def /_pjss { } def /_pola 0 def /_doClip 0 def /cf currentflat def /_lineorientation 0 def /_charorientation 0 def /_yokoorientation 0 def /_tm matrix def /_renderStart [ /e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0 ] def /_renderEnd [ null null null null /i1 /i1 /i1 /i1 ] def /_render -1 def /_shift [0 0] def /_ax 0 def /_ay 0 def /_cx 0 def /_cy 0 def /_leading [ 0 0 ] def /_ctm matrix def /_mtx matrix def /_sp 16#020 def /_hyphen (-) def /_fontSize 0 def /_fontAscent 0 def /_fontDescent 0 def /_fontHeight 0 def /_fontRotateAdjust 0 def /Ss 256 string def Ss 0 (fonts/) putinterval /_cnt 0 def /_scale [1 1] def /_nativeEncoding 0 def /_useNativeEncoding 0 def /_tempEncode 0 def /_pntr 0 def /_tDict 2 dict def /_hfname 100 string def /_hffound false def /Tx { } def /Tj { } def /CRender { } def /_AI3_savepage { } def /_gf null def /_cf 4 array def /_rgbf 3 array def /_if null def /_of false def /_fc { } def /_gs null def /_cs 4 array def /_rgbs 3 array def /_is null def /_os false def /_sc { } def /_pd 1 dict def /_ed 15 dict def /_pm matrix def /_fm null def /_fd null def /_fdd null def /_sm null def /_sd null def /_sdd null def /_i null def /_lobyte 0 def /_hibyte 0 def /_cproc null def /_cscript 0 def /_hvax 0 def /_hvay 0 def /_hvwb 0 def /_hvcx 0 def /_hvcy 0 def /_bitfont null def /_bitlobyte 0 def /_bithibyte 0 def /_bitkey null def /_bitdata null def /_bitindex 0 def /discardSave null def /buffer 256 string def /beginString null def /endString null def /endStringLength null def /layerCnt 1 def /layerCount 1 def /perCent (%) 0 get def /perCentSeen? false def /newBuff null def /newBuffButFirst null def /newBuffLast null def /clipForward? false def end userdict /Adobe_Illustrator_AI5 known not { userdict /Adobe_Illustrator_AI5 100 dict put } if userdict /Adobe_Illustrator_AI5 get begin /initialize { Adobe_Illustrator_AI5 dup begin Adobe_Illustrator_AI5_vars begin /_aicmykps where {pop /_?cmyk _aicmykps def}if discardDict { bind pop pop } forall dup /nc get begin { dup xcheck 1 index type /operatortype ne and { bind } if pop pop } forall end newpath } def /terminate { end end } def /_ null def /ddef { Adobe_Illustrator_AI5_vars 3 1 roll put } def /xput { dup load dup length exch maxlength eq { dup dup load dup length 2 mul dict copy def } if load begin def end } def /npop { { pop } repeat } def /hswj { dup stringwidth 3 2 roll { _hvwb eq { exch _hvcx add exch _hvcy add } if exch _hvax add exch _hvay add } cforall } def /vswj { 0 0 3 -1 roll { dup 255 le _charorientation 1 eq and { dup cstring stringwidth 5 2 roll _hvwb eq { exch _hvcy sub exch _hvcx sub } if exch _hvay sub exch _hvax sub 4 -1 roll sub exch 3 -1 roll sub exch } { _hvwb eq { exch _hvcy sub exch _hvcx sub } if exch _hvay sub exch _hvax sub _fontHeight sub } ifelse } cforall } def /swj { 6 1 roll /_hvay exch ddef /_hvax exch ddef /_hvwb exch ddef /_hvcy exch ddef /_hvcx exch ddef _lineorientation 0 eq { hswj } { vswj } ifelse } def /sw { 0 0 0 6 3 roll swj } def /vjss { 4 1 roll { dup cstring dup length 1 eq _charorientation 1 eq and { -90 rotate currentpoint _fontRotateAdjust add moveto gsave false charpath currentpoint 5 index setmatrix stroke grestore _fontRotateAdjust sub moveto _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto 90 rotate } { currentpoint _fontHeight sub 5 index sub 3 index _sp eq { 9 index sub } if currentpoint exch 4 index stringwidth pop 2 div sub exch _fontAscent sub moveto gsave 2 index false charpath 6 index setmatrix stroke grestore moveto pop pop } ifelse } cforall 6 npop } def /hjss { 4 1 roll { dup cstring gsave false charpath currentpoint 5 index setmatrix stroke grestore moveto _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto } cforall 6 npop } def /jss { _lineorientation 0 eq { hjss } { vjss } ifelse } def /ss { 0 0 0 7 3 roll jss } def /vjsp { 4 1 roll { dup cstring dup length 1 eq _charorientation 1 eq and { -90 rotate currentpoint _fontRotateAdjust add moveto false charpath currentpoint _fontRotateAdjust sub moveto _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto 90 rotate } { currentpoint _fontHeight sub 5 index sub 3 index _sp eq { 9 index sub } if currentpoint exch 4 index stringwidth pop 2 div sub exch _fontAscent sub moveto 2 index false charpath moveto pop pop } ifelse } cforall 6 npop } def /hjsp { 4 1 roll { dup cstring false charpath _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto } cforall 6 npop } def /jsp { matrix currentmatrix _lineorientation 0 eq {hjsp} {vjsp} ifelse } def /sp { matrix currentmatrix 0 0 0 7 3 roll _lineorientation 0 eq {hjsp} {vjsp} ifelse } def /pl { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform } def /setstrokeadjust where { pop true setstrokeadjust /c { curveto } def /C /c load def /v { currentpoint 6 2 roll curveto } def /V /v load def /y { 2 copy curveto } def /Y /y load def /l { lineto } def /L /l load def /m { moveto } def } { /c { pl curveto } def /C /c load def /v { currentpoint 6 2 roll pl curveto } def /V /v load def /y { pl 2 copy curveto } def /Y /y load def /l { pl lineto } def /L /l load def /m { pl moveto } def } ifelse /d { setdash } def /cf { } def /i { dup 0 eq { pop cf } if setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def /XR { 0 ne /_eo exch ddef } def /H { } def /h { closepath } def /N { _pola 0 eq { _doClip 1 eq { _eo {eoclip} {clip} ifelse /_doClip 0 ddef } if newpath } { /CRender { N } ddef } ifelse } def /n { N } def /F { _pola 0 eq { _doClip 1 eq { gsave _pf grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _fc /_doClip 0 ddef } { _pf } ifelse } { /CRender { F } ddef } ifelse } def /f { closepath F } def /S { _pola 0 eq { _doClip 1 eq { gsave _ps grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc /_doClip 0 ddef } { _ps } ifelse } { /CRender { S } ddef } ifelse } def /s { closepath S } def /B { _pola 0 eq { _doClip 1 eq gsave F grestore { gsave S grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc /_doClip 0 ddef } { S } ifelse } { /CRender { B } ddef } ifelse } def /b { closepath B } def /W { /_doClip 1 ddef } def /* { count 0 ne { dup type /stringtype eq { pop } if } if newpath } def /u { } def /U { } def /q { _pola 0 eq { gsave } if } def /Q { _pola 0 eq { grestore } if } def /*u { _pola 1 add /_pola exch ddef } def /*U { _pola 1 sub /_pola exch ddef _pola 0 eq { CRender } if } def /D { pop } def /*w { } def /*W { } def /` { /_i save ddef clipForward? { nulldevice } if 6 1 roll 4 npop concat pop userdict begin /showpage { } def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash /setstrokeadjust where {pop false setstrokeadjust} if newpath 0 setgray false setoverprint } def /~ { end _i restore } def /_rgbtocmyk { 3 { 1 exch sub 3 1 roll } repeat 3 copy 1 4 1 roll 3 { 3 index 2 copy gt { exch } if pop 4 1 roll } repeat pop pop pop 4 1 roll 3 { 3 index sub 3 1 roll } repeat 4 -1 roll } def /setrgbfill { _rgbf astore pop /_fc { _lp /fill ne { _of setoverprint _rgbf aload pop setrgbcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /setrgbstroke { _rgbs astore pop /_sc { _lp /stroke ne { _os setoverprint _rgbs aload pop setrgbcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /O { 0 ne /_of exch ddef /_lp /none ddef } def /R { 0 ne /_os exch ddef /_lp /none ddef } def /g { /_gf exch ddef /_fc { _lp /fill ne { _of setoverprint _gf setgray /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /G { /_gs exch ddef /_sc { _lp /stroke ne { _os setoverprint _gs setgray /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /k { _cf astore pop /_fc { _lp /fill ne { _of setoverprint _cf aload pop setcmykcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /K { _cs astore pop /_sc { _lp /stroke ne { _os setoverprint _cs aload pop setcmykcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /Xa { _?cmyk { 3 npop k }{ setrgbfill 4 npop } ifelse } def /XA { _?cmyk { 3 npop K }{ setrgbstroke 4 npop } ifelse } def /Xs { /_gf exch ddef 5 npop /_fc { _lp /fill ne { _of setoverprint _gf setAIseparationgray /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /XS { /_gs exch ddef 5 npop /_sc { _lp /stroke ne { _os setoverprint _gs setAIseparationgray /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /Xx { exch /_gf exch ddef 0 eq { findcmykcustomcolor }{ _?cmyk {true}{/findrgbcustomcolor where{pop false}{true}ifelse}ifelse { 4 1 roll 3 npop findcmykcustomcolor }{ 8 -4 roll 4 npop findrgbcustomcolor } ifelse } ifelse /_if exch ddef /_fc { _lp /fill ne { _of setoverprint _if _gf 1 exch sub setcustomcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /XX { exch /_gs exch ddef 0 eq { findcmykcustomcolor }{ _?cmyk {true}{/findrgbcustomcolor where{pop false}{true}ifelse}ifelse { 4 1 roll 3 npop findcmykcustomcolor }{ 8 -4 roll 4 npop findrgbcustomcolor } ifelse } ifelse /_is exch ddef /_sc { _lp /stroke ne { _os setoverprint _is _gs 1 exch sub setcustomcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /x { /_gf exch ddef findcmykcustomcolor /_if exch ddef /_fc { _lp /fill ne { _of setoverprint _if _gf 1 exch sub setcustomcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /X { /_gs exch ddef findcmykcustomcolor /_is exch ddef /_sc { _lp /stroke ne { _os setoverprint _is _gs 1 exch sub setcustomcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /XK { 3 -1 roll pop 0 eq { 1 exch sub 3 {dup 3 1 roll mul 5 1 roll} repeat mul 4 1 roll K } { 1 exch sub 4 1 roll 3 {1 exch sub 3 index mul 1 exch sub 3 1 roll} repeat 4 -1 roll pop XA } ifelse } def /Xk { 3 -1 roll pop 0 eq { 1 exch sub 3 {dup 3 1 roll mul 5 1 roll} repeat mul 4 1 roll k } { 1 exch sub 4 1 roll 3 {1 exch sub 3 index mul 1 exch sub 3 1 roll} repeat 4 -1 roll pop Xa } ifelse } def /A { pop } def /annotatepage { userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse } def /XT { pop pop } def /Xt { pop } def /discard { save /discardSave exch store discardDict begin /endString exch store gt38? { 2 add } if load stopped pop end discardSave restore } bind def userdict /discardDict 7 dict dup begin put /pre38Initialize { /endStringLength endString length store /newBuff buffer 0 endStringLength getinterval store /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store /newBuffLast newBuff endStringLength 1 sub 1 getinterval store } def /shiftBuffer { newBuff 0 newBuffButFirst putinterval newBuffLast 0 currentfile read not { stop } if put } def 0 { pre38Initialize mark currentfile newBuff readstring exch pop { { newBuff endString eq { cleartomark stop } if shiftBuffer } loop } { stop } ifelse } def 1 { pre38Initialize /beginString exch store mark currentfile newBuff readstring exch pop { { newBuff beginString eq { /layerCount dup load 1 add store } { newBuff endString eq { /layerCount dup load 1 sub store layerCount 0 eq { cleartomark stop } if } if } ifelse shiftBuffer } loop } if } def 2 { mark { currentfile buffer {readline} stopped { % assume error was due to overfilling the buffer }{ not { stop } if endString eq { cleartomark stop } if }ifelse } loop } def 3 { /beginString exch store /layerCnt 1 store mark { currentfile buffer {readline} stopped { % assume error was due to overfilling the buffer }{ not { stop } if dup beginString eq { pop /layerCnt dup load 1 add store } { endString eq { layerCnt 1 eq { cleartomark stop } { /layerCnt dup load 1 sub store } ifelse } if } ifelse }ifelse } loop } def end userdict /clipRenderOff 15 dict dup begin put { /n /N /s /S /f /F /b /B } { { _doClip 1 eq { /_doClip 0 ddef _eo {eoclip} {clip} ifelse } if newpath } def } forall /Tr /pop load def /Bb {} def /BB /pop load def /Bg {12 npop} def /Bm {6 npop} def /Bc /Bm load def /Bh {4 npop} def end /Lb { 6 npop 7 2 roll 5 npop 0 eq { 0 eq { (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard } { /clipForward? true def /Tx /pop load def /Tj /pop load def currentdict end clipRenderOff begin begin } ifelse } { 0 eq { save /discardSave exch store } if } ifelse } bind def /LB { discardSave dup null ne { restore } { pop clipForward? { currentdict end end begin /clipForward? false ddef } if } ifelse } bind def /Pb { pop pop 0 (%AI5_EndPalette) discard } bind def /Np { 0 (%AI5_End_NonPrinting--) discard } bind def /Ln /pop load def /Ap /pop load def /Ar { 72 exch div 0 dtransform dup mul exch dup mul add sqrt dup 1 lt { pop 1 } if setflat } def /Mb { q } def /Md { } def /MB { Q } def /nc 4 dict def nc begin /setgray { pop } bind def /setcmykcolor { 4 npop } bind def /setrgbcolor { 3 npop } bind def /setcustomcolor { 2 npop } bind def currentdict readonly pop end /XP { 4 npop } bind def /XD { pop } bind def end setpacking %%EndResource %%BeginResource: procset Adobe_cshow 2.0 8 %%Title: (Writing System Operators) %%Version: 2.0 8 %%CreationDate: (1/23/89) () %%Copyright: ((C) 1992-1996 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_cshow 14 dict dup begin put /initialize { Adobe_cshow begin Adobe_cshow { dup xcheck { bind } if pop pop } forall end Adobe_cshow begin } def /terminate { currentdict Adobe_cshow eq { end } if } def /cforall { /_lobyte 0 ddef /_hibyte 0 ddef /_cproc exch ddef /_cscript currentfont /FontScript known { currentfont /FontScript get } { -1 } ifelse ddef { /_lobyte exch ddef _hibyte 0 eq _cscript 1 eq _lobyte 129 ge _lobyte 159 le and _lobyte 224 ge _lobyte 252 le and or and _cscript 2 eq _lobyte 161 ge _lobyte 254 le and and _cscript 3 eq _lobyte 161 ge _lobyte 254 le and and _cscript 25 eq _lobyte 161 ge _lobyte 254 le and and _cscript -1 eq or or or or and { /_hibyte _lobyte ddef } { _hibyte 256 mul _lobyte add _cproc /_hibyte 0 ddef } ifelse } forall } def /cstring { dup 256 lt { (s) dup 0 4 3 roll put } { dup 256 idiv exch 256 mod (hl) dup dup 0 6 5 roll put 1 4 3 roll put } ifelse } def /clength { 0 exch { 256 lt { 1 } { 2 } ifelse add } cforall } def /hawidthshow { { dup cstring show _hvax _hvay rmoveto _hvwb eq { _hvcx _hvcy rmoveto } if } cforall } def /vawidthshow { { dup 255 le _charorientation 1 eq and { -90 rotate 0 _fontRotateAdjust rmoveto cstring _hvcx _hvcy _hvwb _hvax _hvay 6 -1 roll awidthshow 0 _fontRotateAdjust neg rmoveto 90 rotate } { currentpoint _fontHeight sub exch _hvay sub exch _hvax sub 2 index _hvwb eq { exch _hvcy sub exch _hvcx sub } if 3 2 roll cstring dup stringwidth pop 2 div neg _fontAscent neg rmoveto show moveto } ifelse } cforall } def /hvawidthshow { 6 1 roll /_hvay exch ddef /_hvax exch ddef /_hvwb exch ddef /_hvcy exch ddef /_hvcx exch ddef _lineorientation 0 eq { hawidthshow } { vawidthshow } ifelse } def /hvwidthshow { 0 0 3 -1 roll hvawidthshow } def /hvashow { 0 0 0 6 -3 roll hvawidthshow } def /hvshow { 0 0 0 0 0 6 -1 roll hvawidthshow } def currentdict readonly pop end setpacking %%EndResource %%BeginResource: procset Adobe_shading_AI8 1.0 0 %%Title: (Adobe Illustrator 8 Shading Procset) %%Version: 1.0 0 %%CreationDate: (12/17/97) () %%Copyright: ((C) 1987-1997 Adobe Systems Incorporated All Rights Reserved) userdict /defaultpacking currentpacking put true setpacking userdict /Adobe_shading_AI8 10 dict dup begin put /initialize { Adobe_shading_AI8 begin Adobe_shading_AI8 bdprocs Mesh /initialize get exec } def /terminate { currentdict Adobe_shading_AI8 eq { end } if } def /bdprocs { { dup xcheck 1 index type /arraytype eq and { bind } if pop pop } forall } def /X! {pop} def /X# {pop pop} def /Mesh 40 dict def Mesh begin /initialize { Mesh bdprocs Mesh begin /emulate? /AI8MeshEmulation where { pop AI8MeshEmulation }{ systemdict /shfill known not } ifelse def end } def /bd { shadingdict begin } def /paint { emulate? { end }{ /_lp /none ddef _fc /_lp /none ddef /AIColorSpace AIColorSpace tocolorspace store /ColorSpace AIColorSpace topsspace store version_ge_3010.106 not systemdict /setsmoothness known and { 0.0001 setsmoothness } if composite? { /DataSource getdatasrc def Matrix concat currentdict end shfill }{ AIColorSpace makesmarks AIPlateList markingplate and not isoverprint and { end }{ /ColorSpace /DeviceGray store /Decode [0 1 0 1 0 1] store /DataSource getplatesrc def Matrix concat currentdict end shfill } ifelse } ifelse } ifelse } def /shadingdict 12 dict def shadingdict begin /ShadingType 6 def /BitsPerCoordinate 16 def /BitsPerComponent 8 def /BitsPerFlag 8 def end /datafile null def /databuf 256 string def /dataptr 0 def /srcspace null def /srcchannels 0 def /dstchannels 0 def /dstplate 0 def /srctodstcolor null def /getplatesrc { /srcspace AIColorSpace store /srcchannels AIColorSpace getnchannels store /dstchannels 1 store /dstplate getplateindex store /srctodstcolor srcspace makesmarks { dstplate 4 eq { {1 exch sub} }{ {srcspace tocmyk 3 dstplate sub index 1 exch sub 5 1 roll 4 {pop} repeat} } ifelse }{ {srcchannels {pop} repeat 1} } ifelse store /datafile getdatasrc store /rdpatch168 load DataLength () /SubFileDecode filter } def /getdatasrc { /rdcmntline load /ASCII85Decode filter } def /rdpatch168 { /dataptr 0 store 49 rdcount 4 { dup {pop srcchannels getint8} if dup {pop srctodstcolor dstchannels putint8 true} if } repeat {databuf 0 dataptr getinterval}{()} ifelse } def /rdpatch3216 { /dataptr 0 store 97 rdcount 4 { dup {pop srcchannels getint16} if dup {pop srctodstcolor dstchannels putint16 true} if } repeat {databuf 0 dataptr getinterval}{()} ifelse } def /rdcount { dup 0 gt { datafile databuf dataptr 4 -1 roll getinterval readstring exch length dataptr add /dataptr exch store }{ true } ifelse } def /getint8 { mark true 3 -1 roll { dup {pop datafile read} if dup {pop 255 div true} if } repeat { counttomark 1 add -1 roll pop true }{ cleartomark false } ifelse } def /putint8 { dup dataptr add /dataptr exch store dataptr exch { 1 sub exch 255 mul cvi databuf 2 index 3 -1 roll put } repeat pop } def /getint16 { mark true 3 -1 roll { dup {pop datafile read} if dup {pop 256 mul datafile read} if dup {pop add 65535 div true} if } repeat { counttomark 1 add -1 roll pop true }{ cleartomark false } ifelse } def /putint16 { dup 2 mul dataptr add /dataptr exch store dataptr exch { 2 sub exch 65535 mul cvi dup 256 idiv databuf 3 index 3 -1 roll put 256 mod databuf 2 index 1 add 3 -1 roll put } repeat pop } def /srcbuf 256 string def /rdcmntline { currentfile srcbuf readline pop (%) anchorsearch {pop} if } def /getplateindex { 0 [cyan? magenta? yellow? black? customColor?] {{exit} if 1 add} forall } def /aicsarray 4 array def /aicsaltvals 4 array def /aicsaltcolr aicsaltvals def /tocolorspace { dup type /arraytype eq { mark exch aload pop aicsarray 0 3 -1 roll put aicsarray 1 3 -1 roll put dup aicsarray 2 3 -1 roll put gettintxform aicsarray 3 3 -1 roll put counttomark aicsaltvals 0 3 -1 roll getinterval /aicsaltcolr exch store aicsaltcolr astore pop pop aicsarray } if } def /subtintxform {aicsaltcolr {1 index mul exch} forall pop} def /addtintxform {aicsaltcolr {1 sub 1 index mul 1 add exch} forall pop} def /gettintxform { /DeviceRGB eq {/addtintxform}{/subtintxform} ifelse load } def /getnchannels { dup type /arraytype eq {0 get} if colorspacedict exch get begin Channels end } def /makesmarks { composite? { pop true }{ dup dup type /arraytype eq {0 get} if colorspacedict exch get begin MarksPlate end } ifelse } def /markingplate { composite? { pop true }{ dup type /arraytype eq { dup length getplateindex gt {getplateindex get}{pop false} ifelse } if } ifelse } def /tocmyk { dup dup type /arraytype eq {0 get} if colorspacedict exch get begin ToCMYK end } def /topsspace { dup dup type /arraytype eq {0 get} if colorspacedict exch get begin ToPSSpace end } def /colorspacedict 5 dict dup begin /DeviceGray 4 dict dup begin /Channels 1 def /MarksPlate {pop black?} def /ToCMYK {pop 1 exch sub 0 0 0 4 -1 roll} def /ToPSSpace {} def end def /DeviceRGB 4 dict dup begin /Channels 3 def /MarksPlate {pop isCMYKSep?} def /ToCMYK {pop _rgbtocmyk} def /ToPSSpace {} def end def /DeviceCMYK 4 dict dup begin /Channels 4 def /MarksPlate {pop isCMYKSep?} def /ToCMYK {pop} def /ToPSSpace {} def end def /Separation 4 dict dup begin /Channels 1 def /MarksPlate { /findcmykcustomcolor where { pop dup 1 exch ToCMYK 5 -1 roll 1 get findcmykcustomcolor 1 setcustomcolor systemdict /currentgray get exec 1 ne }{ pop false } ifelse } def /ToCMYK { dup 2 get mark exch 4 2 roll 3 get exec counttomark -1 roll tocmyk 5 -1 roll pop } def /ToPSSpace {} def end def /Process 4 dict dup begin /Channels 1 def /MarksPlate { isCMYKSep? { 1 exch ToCMYK 4 array astore getplateindex get 0 ne }{ pop false } ifelse } def /ToCMYK { dup 2 get mark exch 4 2 roll 3 get exec counttomark -1 roll tocmyk 5 -1 roll pop } def /ToPSSpace { 4 array copy dup 0 /Separation put } def end def end def /isoverprint { /currentoverprint where {pop currentoverprint}{_of} ifelse } def /version_ge_3010.106 { version {cvr} stopped { pop false }{ 3010.106 ge } ifelse } def end end defaultpacking setpacking %%EndResource %%EndProlog %%BeginSetup userdict /_useSmoothShade false put userdict /_aicmykps false put userdict /_forceToCMYK false put Adobe_level2_AI5 /initialize get exec Adobe_cshow /initialize get exec Adobe_ColorImage_AI6 /initialize get exec Adobe_shading_AI8 /initialize get exec Adobe_Illustrator_AI5 /initialize get exec %AI3_BeginRider currentpacking true setpacking setpacking %AI3_EndRider %AI5_BeginPalette 0 0 Pb 1 1 1 1 ([Registration]) 0 Xs ([Registration]) Pc PB %AI5_EndPalette %AI5_Begin_NonPrinting Np %AI5_End_NonPrinting-- %AI5_Begin_NonPrinting Np %AI8_PluginGroupInfo (Adobe Path Blends) (Adobe Blends Plugin) (Live Blends) %AI8_PluginGroupInfo (Adobe PatternOnPath Brush Tool) (Adobe Pattern Brush Plugin) (Art Brush Tool) %AI8_PluginGroupInfo (Adobe ArtOnPath Brush Tool) (Adobe Art Brush Plugin) (Art Brush Tool) %AI8_PluginGroupInfo (Adobe Calligraphic Brush Tool) (Undo New Calligraphic Brush) (Calligraphic Brush Tool) %AI8_PluginGroupInfo (Adobe Scatter Brush Tool) (Adobe Scatter Brush Plugin) (Scatter Brush Tool) %AI5_End_NonPrinting-- %%EndSetup %AI5_BeginLayer 1 1 1 1 0 0 1 1 255 79 79 0 100 Lb (Layer 1) Ln 0 A 1 Ap 0 O 0 0 0 0 k 0 R 1 0 0 0 K 800 Ar 0 J 0 j 0.5 w 4 M []0 d %AI3_Note: 0 D 0 XR 30.0444 -143.0068 m 30.0444 -126.5195 L 13.5571 -126.5195 L 13.5571 -143.0068 L 30.0444 -143.0068 L b 30.0444 -110.0322 m 30.0444 -93.5449 L 13.5571 -93.5449 L 13.5571 -110.0322 L 30.0444 -110.0322 L b 30.0444 -77.0571 m 30.0444 -60.5698 L 13.5571 -60.5698 L 13.5571 -77.0571 L 30.0444 -77.0571 L b 46.5317 -159.4941 m 46.5317 -143.0068 L 30.0444 -143.0068 L 30.0444 -159.4941 L 46.5317 -159.4941 L b 46.5317 -126.5195 m 46.5317 -110.0322 L 30.0444 -110.0322 L 30.0444 -126.5195 L 46.5317 -126.5195 L b 46.5317 -93.5449 m 46.5317 -77.0571 L 30.0444 -77.0571 L 30.0444 -93.5449 L 46.5317 -93.5449 L b 46.5317 -60.5698 m 46.5317 -44.0825 L 30.0444 -44.0825 L 30.0444 -60.5698 L 46.5317 -60.5698 L b 63.019 -143.0068 m 63.019 -126.5195 L 46.5317 -126.5195 L 46.5317 -143.0068 L 63.019 -143.0068 L b 63.019 -110.0322 m 63.019 -93.5449 L 46.5317 -93.5449 L 46.5317 -110.0322 L 63.019 -110.0322 L b 63.019 -77.0571 m 63.019 -60.5698 L 46.5317 -60.5698 L 46.5317 -77.0571 L 63.019 -77.0571 L b 63.019 -44.0825 m 63.019 -27.5952 L 46.5317 -27.5952 L 46.5317 -44.0825 L 63.019 -44.0825 L b 79.5068 -159.4941 m 79.5068 -143.0068 L 63.019 -143.0068 L 63.019 -159.4941 L 79.5068 -159.4941 L b 79.5068 -126.5195 m 79.5068 -110.0322 L 63.019 -110.0322 L 63.019 -126.5195 L 79.5068 -126.5195 L b 79.5068 -93.5449 m 79.5068 -77.0571 L 63.019 -77.0571 L 63.019 -93.5449 L 79.5068 -93.5449 L b 79.5068 -60.5698 m 79.5068 -44.0825 L 63.019 -44.0825 L 63.019 -60.5698 L 79.5068 -60.5698 L b 95.9941 -143.0068 m 95.9941 -126.5195 L 79.5068 -126.5195 L 79.5068 -143.0068 L 95.9941 -143.0068 L b 95.9941 -110.0322 m 95.9941 -93.5449 L 79.5068 -93.5449 L 79.5068 -110.0322 L 95.9941 -110.0322 L b 95.9941 -77.0571 m 95.9941 -60.5698 L 79.5068 -60.5698 L 79.5068 -77.0571 L 95.9941 -77.0571 L b 95.9941 -44.0825 m 95.9941 -27.5952 L 79.5068 -27.5952 L 79.5068 -44.0825 L 95.9941 -44.0825 L b 112.4814 -159.4941 m 112.4814 -143.0068 L 95.9941 -143.0068 L 95.9941 -159.4941 L 112.4814 -159.4941 L b 112.4814 -126.5195 m 112.4814 -110.0322 L 95.9941 -110.0322 L 95.9941 -126.5195 L 112.4814 -126.5195 L b 112.4814 -93.5449 m 112.4814 -77.0571 L 95.9941 -77.0571 L 95.9941 -93.5449 L 112.4814 -93.5449 L b 112.4814 -60.5698 m 112.4814 -44.0825 L 95.9941 -44.0825 L 95.9941 -60.5698 L 112.4814 -60.5698 L b 128.9688 -143.0068 m 128.9688 -126.5195 L 112.4814 -126.5195 L 112.4814 -143.0068 L 128.9688 -143.0068 L b 128.9688 -110.0322 m 128.9688 -93.5449 L 112.4814 -93.5449 L 112.4814 -110.0322 L 128.9688 -110.0322 L b 128.9688 -77.0571 m 128.9688 -60.5698 L 112.4814 -60.5698 L 112.4814 -77.0571 L 128.9688 -77.0571 L b 128.9688 -44.0825 m 128.9688 -27.5952 L 112.4814 -27.5952 L 112.4814 -44.0825 L 128.9688 -44.0825 L b 145.4561 -126.5195 m 145.4561 -110.0322 L 128.9688 -110.0322 L 128.9688 -126.5195 L 145.4561 -126.5195 L b 145.4561 -93.5449 m 145.4561 -77.0571 L 128.9688 -77.0571 L 128.9688 -93.5449 L 145.4561 -93.5449 L b 145.4561 -60.5698 m 145.4561 -44.0825 L 128.9688 -44.0825 L 128.9688 -60.5698 L 145.4561 -60.5698 L b u 1 0 0 0 k 30.0444 -159.4941 m 30.0444 -143.0068 L 13.5571 -143.0068 L 13.5571 -159.4941 L 30.0444 -159.4941 L b 30.0444 -126.5195 m 30.0444 -110.0322 L 13.5571 -110.0322 L 13.5571 -126.5195 L 30.0444 -126.5195 L b 30.0444 -93.5449 m 30.0444 -77.0571 L 13.5571 -77.0571 L 13.5571 -93.5449 L 30.0444 -93.5449 L b 30.0444 -60.5698 m 30.0444 -44.0825 L 13.5571 -44.0825 L 13.5571 -60.5698 L 30.0444 -60.5698 L b 46.5317 -143.0068 m 46.5317 -126.5195 L 30.0444 -126.5195 L 30.0444 -143.0068 L 46.5317 -143.0068 L b 46.5317 -110.0322 m 46.5317 -93.5449 L 30.0444 -93.5449 L 30.0444 -110.0322 L 46.5317 -110.0322 L b 46.5317 -77.0571 m 46.5317 -60.5698 L 30.0444 -60.5698 L 30.0444 -77.0571 L 46.5317 -77.0571 L b 46.5317 -44.0825 m 46.5317 -27.5952 L 30.0444 -27.5952 L 30.0444 -44.0825 L 46.5317 -44.0825 L b 63.019 -159.4941 m 63.019 -143.0068 L 46.5317 -143.0068 L 46.5317 -159.4941 L 63.019 -159.4941 L b 63.019 -126.5195 m 63.019 -110.0322 L 46.5317 -110.0322 L 46.5317 -126.5195 L 63.019 -126.5195 L b 63.019 -93.5449 m 63.019 -77.0571 L 46.5317 -77.0571 L 46.5317 -93.5449 L 63.019 -93.5449 L b 63.019 -60.5698 m 63.019 -44.0825 L 46.5317 -44.0825 L 46.5317 -60.5698 L 63.019 -60.5698 L b 79.5068 -143.0068 m 79.5068 -126.5195 L 63.019 -126.5195 L 63.019 -143.0068 L 79.5068 -143.0068 L b 79.5068 -110.0322 m 79.5068 -93.5449 L 63.019 -93.5449 L 63.019 -110.0322 L 79.5068 -110.0322 L b 79.5068 -77.0571 m 79.5068 -60.5698 L 63.019 -60.5698 L 63.019 -77.0571 L 79.5068 -77.0571 L b 79.5068 -44.0825 m 79.5068 -27.5952 L 63.019 -27.5952 L 63.019 -44.0825 L 79.5068 -44.0825 L b 95.9941 -159.4941 m 95.9941 -143.0068 L 79.5068 -143.0068 L 79.5068 -159.4941 L 95.9941 -159.4941 L b 95.9941 -126.5195 m 95.9941 -110.0322 L 79.5068 -110.0322 L 79.5068 -126.5195 L 95.9941 -126.5195 L b 95.9941 -93.5449 m 95.9941 -77.0571 L 79.5068 -77.0571 L 79.5068 -93.5449 L 95.9941 -93.5449 L b 95.9941 -60.5698 m 95.9941 -44.0825 L 79.5068 -44.0825 L 79.5068 -60.5698 L 95.9941 -60.5698 L b 112.4814 -143.0068 m 112.4814 -126.5195 L 95.9941 -126.5195 L 95.9941 -143.0068 L 112.4814 -143.0068 L b 112.4814 -110.0322 m 112.4814 -93.5449 L 95.9941 -93.5449 L 95.9941 -110.0322 L 112.4814 -110.0322 L b 112.4814 -77.0571 m 112.4814 -60.5698 L 95.9941 -60.5698 L 95.9941 -77.0571 L 112.4814 -77.0571 L b 112.4814 -44.0825 m 112.4814 -27.5952 L 95.9941 -27.5952 L 95.9941 -44.0825 L 112.4814 -44.0825 L b 128.9688 -159.4941 m 128.9688 -143.0068 L 112.4814 -143.0068 L 112.4814 -159.4941 L 128.9688 -159.4941 L b 128.9688 -126.5195 m 128.9688 -110.0322 L 112.4814 -110.0322 L 112.4814 -126.5195 L 128.9688 -126.5195 L b 128.9688 -93.5449 m 128.9688 -77.0571 L 112.4814 -77.0571 L 112.4814 -93.5449 L 128.9688 -93.5449 L b 128.9688 -60.5698 m 128.9688 -44.0825 L 112.4814 -44.0825 L 112.4814 -60.5698 L 128.9688 -60.5698 L b 145.4561 -143.0068 m 145.4561 -126.5195 L 128.9688 -126.5195 L 128.9688 -143.0068 L 145.4561 -143.0068 L b 145.4561 -110.0322 m 145.4561 -93.5449 L 128.9688 -93.5449 L 128.9688 -110.0322 L 145.4561 -110.0322 L b 145.4561 -77.0571 m 145.4561 -60.5698 L 128.9688 -60.5698 L 128.9688 -77.0571 L 145.4561 -77.0571 L b 145.4561 -44.0825 m 145.4561 -27.5952 L 128.9688 -27.5952 L 128.9688 -44.0825 L 145.4561 -44.0825 L b U u 1 O 0 0 0 1 k 1 w -12.0562 -93.6396 m -12.0562 -77.1523 L -28.5435 -77.1523 L -28.5435 -93.6396 L -12.0562 -93.6396 L f 4.4312 -93.6396 m 4.4312 -77.1523 L -12.0562 -77.1523 L -12.0562 -93.6396 L 4.4312 -93.6396 L f 0 O 0 0 0 0 k -3.7104 -83.2339 m -2.8364 -83.2339 -2.1274 -82.5249 -2.1274 -81.6509 c -2.1274 -80.7764 -2.8364 -80.0674 -3.7104 -80.0674 c -4.585 -80.0674 -5.2939 -80.7764 -5.2939 -81.6509 c -5.2939 -82.5249 -4.585 -83.2339 -3.7104 -83.2339 c f -3.7104 -91.1729 m -2.8364 -91.1729 -2.1274 -90.4639 -2.1274 -89.5889 c -2.1274 -88.7148 -2.8364 -88.0059 -3.7104 -88.0059 c -4.585 -88.0059 -5.2939 -88.7148 -5.2939 -89.5889 c -5.2939 -90.4639 -4.585 -91.1729 -3.7104 -91.1729 c f -20.249 -86.979 m -19.3745 -86.979 -18.6655 -86.2705 -18.6655 -85.396 c -18.6655 -84.5215 -19.3745 -83.813 -20.249 -83.813 c -21.1235 -83.813 -21.832 -84.5215 -21.832 -85.396 c -21.832 -86.2705 -21.1235 -86.979 -20.249 -86.979 c f 0 Ap 0 R 0 0 0 0 K -12.0562 -78.2759 m -12.0562 -92.6514 l S U LB %AI5_EndLayer-- %%PageTrailer gsave annotatepage grestore showpage %%Trailer Adobe_Illustrator_AI5 /terminate get exec Adobe_shading_AI8 /terminate get exec Adobe_ColorImage_AI6 /terminate get exec Adobe_cshow /terminate get exec Adobe_level2_AI5 /terminate get exec %%EOF \ No newline at end of file +%!PS-Adobe-3.0 EPSF-3.0 +%%HiResBoundingBox: 0.000000 0.000000 177.000000 136.000000 +%APL_DSC_Encoding: UTF8 +%APLProducer: (Version 10.12.5 (Build 16F73) Quartz PS Context) +%%Title: (Unknown) +%%Creator: (Unknown) +%%CreationDate: (Unknown) +%%For: (Unknown) +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 0 0 177 136 +%%EndComments +%%BeginProlog +%%BeginFile: cg-pdf.ps +%%Copyright: Copyright 2000-2004 Apple Computer Incorporated. +%%Copyright: All Rights Reserved. +currentpacking true setpacking +/cg_md 141 dict def +cg_md begin +/L3? languagelevel 3 ge def +/bd{bind def}bind def +/ld{load def}bd +/xs{exch store}bd +/xd{exch def}bd +/cmmtx matrix def +mark +/sc/setcolor +/scs/setcolorspace +/dr/defineresource +/fr/findresource +/T/true +/F/false +/d/setdash +/w/setlinewidth +/J/setlinecap +/j/setlinejoin +/M/setmiterlimit +/i/setflat +/rc/rectclip +/rf/rectfill +/rs/rectstroke +/f/fill +/f*/eofill +/sf/selectfont +/s/show +%/as/ashow +/xS/xshow +/yS/yshow +/xyS/xyshow +/S/stroke +/m/moveto +/l/lineto +/c/curveto +/h/closepath +/n/newpath +/q/gsave +/Q/grestore +counttomark 2 idiv +%dup (number of ld's = )print == flush % *** how many +{ld}repeat pop +/SC{ % CSname + /ColorSpace fr scs +}bd +/sopr /setoverprint where{pop/setoverprint}{/pop}ifelse ld +/soprm /setoverprintmode where{pop/setoverprintmode}{/pop}ifelse ld +/cgmtx matrix def +/sdmtx{cgmtx currentmatrix pop}bd +/CM {cgmtx setmatrix}bd % pop the ctm: our gstate ctm on host is now identity +/cm {cmmtx astore CM concat}bd % reset the matrix and then concat +/W{clip newpath}bd +/W*{eoclip newpath}bd + +statusdict begin product end dup (HP) anchorsearch{ + pop pop pop % pop off the search results + true +}{ + pop % previous search result + (hp) anchorsearch{ + pop pop true + }{ + pop false + }ifelse +}ifelse + +{ % HP is the product: we use this method of stroking because of a bug in their clone printers with certain T3 fonts + { + { % charCode Wx Wy + pop pop % charCode + (0)dup 0 4 -1 roll put + F charpath + }cshow + } +}{ + {F charpath} +}ifelse +/cply exch bd +/cps {cply stroke}bd +/pgsave 0 def +/bp{/pgsave save store}bd +/ep{pgsave restore showpage}def % dont' bind +/re{4 2 roll m 1 index 0 rlineto 0 exch rlineto neg 0 rlineto h}bd + +/scrdict 10 dict def +/scrmtx matrix def +/patarray 0 def +/createpat{patarray 3 1 roll put}bd +/makepat{ +scrmtx astore pop +gsave +initgraphics +CM +patarray exch get +scrmtx +makepattern +grestore +setpattern +}bd + +/cg_BeginEPSF{ + userdict save/cg_b4_Inc_state exch put + userdict/cg_endepsf/cg_EndEPSF load put + count userdict/cg_op_count 3 -1 roll put + countdictstack dup array dictstack userdict/cg_dict_array 3 -1 roll put + 3 sub{end}repeat + /showpage {} def + 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin + 10 setmiterlimit [] 0 setdash newpath + false setstrokeadjust false setoverprint % don't use F +}bd +/cg_EndEPSF{ + countdictstack 3 sub { end } repeat + cg_dict_array 3 1 index length 3 sub getinterval + {begin}forall + count userdict/cg_op_count get sub{pop}repeat + userdict/cg_b4_Inc_state get restore + F setpacking +}bd + +/cg_biproc{currentfile/RunLengthDecode filter}bd +/cg_aiproc{currentfile/ASCII85Decode filter/RunLengthDecode filter}bd +/ImageDataSource 0 def +L3?{ + /cg_mibiproc{pop pop/ImageDataSource{cg_biproc}def}bd + /cg_miaiproc{pop pop/ImageDataSource{cg_aiproc}def}bd +}{ + /ImageBandMask 0 def + /ImageBandData 0 def + /cg_mibiproc{ + string/ImageBandMask xs + string/ImageBandData xs + /ImageDataSource{[currentfile/RunLengthDecode filter dup ImageBandMask/readstring cvx + /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd + }bd + /cg_miaiproc{ + string/ImageBandMask xs + string/ImageBandData xs + /ImageDataSource{[currentfile/ASCII85Decode filter/RunLengthDecode filter + dup ImageBandMask/readstring cvx + /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd + }bd +}ifelse +/imsave 0 def +/BI{save/imsave xd mark}bd +/EI{imsave restore}bd +/ID{ +counttomark 2 idiv +dup 2 add % leave room for imagetype and imagematrix +dict begin +{def} repeat +pop % remove mark +/ImageType 1 def +/ImageMatrix[Width 0 0 Height neg 0 Height]def +currentdict dup/ImageMask known{ImageMask}{F}ifelse exch +% currentdict on stack +L3?{ + dup/MaskedImage known + { + pop + << + /ImageType 3 + /InterleaveType 2 + /DataDict currentdict + /MaskDict + << /ImageType 1 + /Width Width + /Height Height + /ImageMatrix ImageMatrix + /BitsPerComponent 1 + /Decode [0 1] + currentdict/Interpolate known + {/Interpolate Interpolate}if + >> + >> + }if +}if +exch +{imagemask}{image}ifelse +end % pop imagedict from dict stack +}bd + +/cguidfix{statusdict begin mark version end +{cvr}stopped{cleartomark 0}{exch pop}ifelse +2012 lt{dup findfont dup length dict begin +{1 index/FID ne 2 index/UniqueID ne and +{def} {pop pop} ifelse}forall +currentdict end definefont pop +}{pop}ifelse +}bd +/t_array 0 def +/t_i 0 def +/t_c 1 string def +/x_proc{ % x y + exch t_array t_i get add exch moveto + /t_i t_i 1 add store +}bd +/y_proc{ % x y + t_array t_i get add moveto + /t_i t_i 1 add store +}bd +/xy_proc{ + % x y + t_array t_i 2 copy 1 add get 3 1 roll get + 4 -1 roll add 3 1 roll add moveto + /t_i t_i 2 add store +}bd +/sop 0 def % don't bind sop +/cp_proc/x_proc ld % default moveto proc is for xwidths only +/base_charpath % string array +{ + /t_array xs + /t_i 0 def + { % char + t_c 0 3 -1 roll put + currentpoint + t_c cply sop + cp_proc + }forall + /t_array 0 def +}bd +/sop/stroke ld % default sop is stroke. Done here so we don't bind in /base_charpath + +% default sop is stroke +/nop{}def +/xsp/base_charpath ld +/ysp{/cp_proc/y_proc ld base_charpath/cp_proc/x_proc ld}bd +/xysp{/cp_proc/xy_proc ld base_charpath/cp_proc/x_proc ld}bd +/xmp{/sop/nop ld /cp_proc/x_proc ld base_charpath/sop/stroke ld}bd +/ymp{/sop/nop ld /cp_proc/y_proc ld base_charpath/sop/stroke ld}bd +/xymp{/sop/nop ld /cp_proc/xy_proc ld base_charpath/sop/stroke ld}bd +/refnt{ % newname encoding fontname +findfont dup length dict copy dup +/Encoding 4 -1 roll put +definefont pop +}bd +/renmfont{ % newname fontname +findfont dup length dict copy definefont pop +}bd + +L3? dup dup{save exch}if + +% languagelevel2 ONLY code goes here + +/Range 0 def +/DataSource 0 def +/val 0 def +/nRange 0 def +/mulRange 0 def +/d0 0 def +/r0 0 def +/di 0 def +/ri 0 def +/a0 0 def +/a1 0 def +/r1 0 def +/r2 0 def +/dx 0 def +/Nsteps 0 def +/sh3tp 0 def +/ymax 0 def +/ymin 0 def +/xmax 0 def +/xmin 0 def + +/setupFunEval % funDict -- % this calculates and sets up a function dict for evaulation. +{ + begin + /nRange Range length 2 idiv store + /mulRange % precompute the range data needed to map a sample value from the table to a range value + % this data looks like [ range0mul range0min range1mul range1min ... rangeN-1mul rangeN-1min ] + [ + 0 1 nRange 1 sub + { % index + 2 mul/nDim2 xd % 2*dimension# we are dealing with + Range nDim2 get % ymin + Range nDim2 1 add get % ymin ymax + 1 index sub % ymin (ymax-ymin) + % xmin = 0, xmax = 255 (2^bitspersample - 1) + 255 div % ymin (ymax-ymin)/(xmax - xmin) + exch % (ymax-ymin)/(xmax - xmin) ymin + }for + ]store + end +}bd + +/FunEval % val1 fundict -> comp1 comp2 ... compN +{ + begin + % the value passed in is the base index into the table + nRange mul /val xd % compute the actual index to the table + % since there are nRange entries per base index + 0 1 nRange 1 sub + { + dup 2 mul/nDim2 xd % dim + val % base value to use to do our lookup + add DataSource exch get % lookedupval + mulRange nDim2 get mul % lookedupval*(ymax-ymin)/(xmax-xmin) + mulRange nDim2 1 add get % lookedupval*(ymax-ymin)/(xmax-xmin) ymin + add % interpolated result + }for % comp1 comp2 ... compN + end +}bd + +/max % a b -> max(a, b) +{ + 2 copy lt + {exch pop}{pop}ifelse +}bd + +/sh2 +{ % emulation of shading type 2. Assumes shading dictionary is top dictionary on the dict stack + /Coords load aload pop % x0 y0 x1 y1 + 3 index 3 index translate % origin is now at beginning point of shading + % x0 y0 x1 y1 + 3 -1 roll sub % x0 x1 y1-y0 + 3 1 roll exch % y1-y0 x1 x0 + sub % y1-y0 x1-x0 + 2 copy + dup mul exch dup mul add sqrt % length of segment between two points + dup + scale + atan % atan (dy/dx) + %dup (rotation angle = )print == + rotate % now line between 0,0 and 1,0 is the line perpendicular to which the axial lines are drawn + + /Function load setupFunEval % may need to setup function dictionary by calling setupFunEval + + % this is now specific to axial shadings. Compute the maximum bounds to fill + clippath {pathbbox}stopped {0 0 0 0}if newpath % x0 y0 x1 y1 + /ymax xs + /xmax xs + /ymin xs + /xmin xs + currentdict/Extend known + { + /Extend load 0 get + { + 0/Function load FunEval sc % evaluate the function to get a color and set it + xmin ymin xmin abs ymax ymin sub rectfill + }if + }if + % paint the rects. The sampling frequency is that of our table + /Nsteps/Function load/Size get 0 get 1 sub store + /dx 1 Nsteps div store + gsave + /di ymax ymin sub store + /Function load + % loop Nsteps + 1 times, incrementing the index by 1 each time + 0 1 Nsteps + { + 1 index FunEval sc + 0 ymin dx di rectfill + dx 0 translate + }for + pop % pop our function + grestore % origin is back to start point + currentdict/Extend known + { + /Extend load 1 get + { + Nsteps/Function load FunEval sc % last element + 1 ymin xmax 1 sub abs ymax ymin sub rectfill + }if + }if +}bd + +/shp % this paints our shape for shading type 3 +{ % x1 r1 x0 r0 - + 4 copy + + % fill interior arc + dup 0 gt{ + 0 exch a1 a0 arc + }{ + pop 0 moveto + }ifelse + + dup 0 gt{ + 0 exch a0 a1 arcn + }{ + pop 0 lineto + }ifelse + + fill + + % fill exterior arc + dup 0 gt{ + 0 exch a0 a1 arc + }{ + pop 0 moveto + }ifelse + + dup 0 gt{ + 0 exch a1 a0 arcn + }{ + pop 0 lineto + }ifelse + + fill +}bd + +/calcmaxs +{ % calculate maximum distance vector from origin to corner points + % of bbox + xmin dup mul ymin dup mul add sqrt % (xmin2 + ymin2) + xmax dup mul ymin dup mul add sqrt % (xmax2 + ymin2) + xmin dup mul ymax dup mul add sqrt % (xmin2 + ymax2) + xmax dup mul ymax dup mul add sqrt % (xmax2 + ymax2) + max max max % maximum value +}bd + +/sh3 +{ % emulation of shading type 3. Assumes shading dictionary is top dictionary on the dict stack + /Coords load aload pop % x0 y0 r1 x1 y1 r2 + 5 index 5 index translate % origin is now at first circle origin + 3 -1 roll 6 -1 roll sub % y0 r1 y1 r2 dx + 3 -1 roll 5 -1 roll sub % r1 r2 dx dy + 2 copy dup mul exch dup mul add sqrt + /dx xs % r1 r2 dx dy + 2 copy 0 ne exch 0 ne or + { + % r1 r2 dx dy + exch atan rotate % we are now rotated so dy is zero and positive values of dx move us as expected + }{ + pop pop + }ifelse + % r1 r2 + /r2 xs + /r1 xs + /Function load + dup/Size get 0 get 1 sub % this is the size of our table minus 1 + /Nsteps xs % at some point we should optimize this better so NSteps is based on needed steps for the device + setupFunEval % may need to setup function dictionary by calling setupFunEval + % determine the case: + % case 0: circle1 inside circle2 + % case 1: circle 2 inside circle 1 + % case 2: r1 = r2 + % case 3: r1 != r2 + dx r2 add r1 lt{ + % circle 2 inside of circle 1 + 0 + }{ + dx r1 add r2 le + { % circle 1 inside of circle 2 + 1 + }{ % circles don't contain each other + r1 r2 eq + { % equal + 2 + }{ % r1 != r2 + 3 + }ifelse + }ifelse + }ifelse + /sh3tp xs % sh3tp has the number of our different cases + clippath {pathbbox}stopped {0 0 0 0}if + newpath % x0 y0 x1 y1 + /ymax xs + /xmax xs + /ymin xs + /xmin xs + + % Arc angle atan( sqrt((dx*dx + dy*dy) - dr*dr), dr) + dx dup mul r2 r1 sub dup mul sub dup 0 gt + { + sqrt r2 r1 sub atan + /a0 exch 180 exch sub store + /a1 a0 neg store + }{ + pop + /a0 0 store + /a1 360 store + }ifelse + + currentdict/Extend known + { + /Extend load 0 get r1 0 gt and % no need to extend if the radius of the first end is 0 + { + 0/Function load FunEval sc % evaluate the function to get a color and set it + % case 0: circle1 inside circle2 + % case 1: circle 2 inside circle 1 + % case 2: circles don't contain each other and r1 == r2 + % case 3: circles don't contain each other and r1 != r2 + { + { % case 0 + dx 0 r1 360 0 arcn + xmin ymin moveto + xmax ymin lineto + xmax ymax lineto + xmin ymax lineto + xmin ymin lineto + eofill % for the bigger radius we fill everything except our circle + } + { % case 1 + r1 0 gt{0 0 r1 0 360 arc fill}if + } + { % case 2 + % r1 == r2, extend 0 + % r3 = r, x3 = -(abs(minx) + r), x1 = 0 + + % x(i+1) r(i+1) x(i) r(i) shp + 0 r1 xmin abs r1 add neg r1 shp + } + { % case 3 + % no containment, r1 != r2 + + r2 r1 gt{ % the endpoint we are drawing is that with a circle of zero radius + % x(i+1) r(i+1) x(i) r(i) shp + 0 r1 + r1 neg r2 r1 sub div dx mul % this is point of beginning circle + 0 % point of ending circle + shp % takes x(i+1) r(i+1) x(i) r(i) + }{ % the first circle is the bigger of the two + % we find a circle on our line which is outside the bbox in the + % negative direction + % x(i+1) r(i+1) x(i) r(i) shp + 0 r1 calcmaxs % 0 r1 maxs + dup + % calculating xs: (-(maxs+r2)*x2)/(x2-(r1-r2)) + r2 add dx mul dx r1 r2 sub sub div + neg % maxs xs' + exch 1 index % xs' maxs xs' + abs exch sub + shp + }ifelse + } + }sh3tp get exec % execute the extend at beginning proc for our shading type + }if + }if + + % now do the shading + /d0 0 store + /r0 r1 store + /di dx Nsteps div store + /ri r2 r1 sub Nsteps div store + /Function load + 0 1 Nsteps + { % function t(i) + 1 index FunEval sc + d0 di add r0 ri add d0 r0 shp + { + % fill interior arc + d0 0 r0 a1 a0 arc + d0 di add 0 r0 ri add a0 a1 arcn + fill + + % fill exterior arc + d0 0 r0 a0 a1 arc + d0 di add 0 r0 ri add a1 a0 arcn + fill + }pop + + % advance to next + /d0 d0 di add store + /r0 r0 ri add store + }for + pop % pop our function dict + + % handle Extend + currentdict/Extend known + { + /Extend load 1 get r2 0 gt and % no need to extend if the radius of the last end is 0 + { + Nsteps/Function load FunEval sc % last element + % case 0: circle1 inside circle2 + % case 1: circle 2 inside circle 1 + % case 2: circles don't contain each other and r1 == r2 + % case 3: circles don't contain each other and r1 != r2 + { + { + dx 0 r2 0 360 arc fill + } + { + dx 0 r2 360 0 arcn + xmin ymin moveto + xmax ymin lineto + xmax ymax lineto + xmin ymax lineto + xmin ymin lineto + eofill % for the bigger radius we fill everything except our circle + } + { % r1 == r2, extend 1 + % r3 = r, x3 = (abs(xmax) + r), x1 = dx + % x(i+1) r(i+1) x(i) r(i) shp + xmax abs r1 add r1 dx r1 shp + } + { % no containment, r1 != r2 + + r2 r1 gt{ + % we find a circle on our line which is outside the bbox in the + % positive direction + % x(i+1) r(i+1) x(i) r(i) shp + calcmaxs dup % maxs maxs + % calculating xs: ((maxs+r1)*x2)/(x2-(r2-r1)) + r1 add dx mul dx r2 r1 sub sub div % maxs xs + exch 1 index % xs maxs xs + exch sub + dx r2 + shp + }{ % the endpoint we are drawing is that with a circle of zero radius + % x(i+1) r(i+1) x(i) r(i) shp + r1 neg r2 r1 sub div dx mul % this is point of ending circle + 0 % radius of ending circle + dx % point of starting circle + r2 % radius of starting circle + shp + }ifelse + } + } + sh3tp get exec % execute the extend at end proc for our shading type + }if + }if +}bd +/sh % emulation of shfill operator for type 2 and type 3 shadings based on type 0 functions +{ % shadingDict -- + begin + /ShadingType load dup dup 2 eq exch 3 eq or + { % shadingtype + gsave + newpath + /ColorSpace load scs + currentdict/BBox known + { + /BBox load aload pop % llx lly urx ury + 2 index sub % llx lly urx ury-lly + 3 index % llx lly urx ury-lly llx + 3 -1 roll exch sub + exch rectclip + }if + 2 eq + {sh2}{sh3}ifelse + grestore + }{ + % shadingtype + pop + (DEBUG: shading type unimplemented\n)print flush + }ifelse + end +}bd + +% end of language level 2 ONLY code + +{restore}if not dup{save exch}if +% languagelevel3 ONLY code goes here + L3?{ % we do these loads conditionally or else they will fail on a level 2 printer + /sh/shfill ld + /csq/clipsave ld + /csQ/cliprestore ld + }if +{restore}if + +%currentdict dup maxlength exch length sub (number of extra slots in md = )print == flush % *** how many entries are free +end +setpacking +% count 0 ne { pstack(***extras on stack during prolog execution***\n)print flush}if % *** BARK if anything is left on stack +%%EndFile +%%EndProlog +%%BeginSetup +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 0 0 177 136 +%%BeginPageSetup +cg_md begin +bp +sdmtx +[ /CIEBasedABC 4 dict dup begin +/WhitePoint [ 0.9505 1.0000 1.0891 ] def +/DecodeABC [ { 1.8008 exp } bind { 1.8008 exp } bind { 1.8008 exp } bind ] def +/MatrixABC [ 0.4295 0.2318 0.0204 0.3278 0.6722 0.1111 0.1933 0.0960 0.9578 ] def +/RangeLMN [ 0.0 0.9505 0.0 1.0000 0.0 1.0891 ] def +end ] /Cs1 exch/ColorSpace dr pop +%%EndPageSetup +0.60000002 i +0 0 0 0 setcmykcolor +q +0 0 177 136 rc +42.556988 18.993401 m +59.044487 18.993401 l +59.044487 35.480499 l +42.556988 35.480499 l +h +42.556988 18.993401 m +f +1 J +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +261.05698 445.50659 m +277.54449 445.50659 l +277.54449 429.0195 l +261.05698 429.0195 l +h +261.05698 445.50659 m +S +0 0 0 0 setcmykcolor +CM +42.556988 51.967999 m +59.044487 51.967999 l +59.044487 68.455101 l +42.556988 68.455101 l +h +42.556988 51.967999 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +261.05698 412.53201 m +277.54449 412.53201 l +277.54449 396.04489 l +261.05698 396.04489 l +h +261.05698 412.53201 m +S +0 0 0 0 setcmykcolor +CM +42.556988 84.943001 m +59.044487 84.943001 l +59.044487 101.4301 l +42.556988 101.4301 l +h +42.556988 84.943001 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +261.05698 379.55701 m +277.54449 379.55701 l +277.54449 363.06989 l +261.05698 363.06989 l +h +261.05698 379.55701 m +S +0 0 0 0 setcmykcolor +CM +59.044487 2.5058589 m +75.531586 2.5058589 l +75.531586 18.993359 l +59.044487 18.993359 l +h +59.044487 2.5058589 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +277.54449 461.99414 m +294.03159 461.99414 l +294.03159 445.50665 l +277.54449 445.50665 l +h +277.54449 461.99414 m +S +0 0 0 0 setcmykcolor +CM +59.044487 35.480499 m +75.531586 35.480499 l +75.531586 51.967999 l +59.044487 51.967999 l +h +59.044487 35.480499 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +277.54449 429.0195 m +294.03159 429.0195 l +294.03159 412.53201 l +277.54449 412.53201 l +h +277.54449 429.0195 m +S +0 0 0 0 setcmykcolor +CM +59.044487 68.455101 m +75.531586 68.455101 l +75.531586 84.943001 l +59.044487 84.943001 l +h +59.044487 68.455101 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +277.54449 396.04489 m +294.03159 396.04489 l +294.03159 379.55701 l +277.54449 379.55701 l +h +277.54449 396.04489 m +S +0 0 0 0 setcmykcolor +CM +59.044487 101.4301 m +75.531586 101.4301 l +75.531586 117.9176 l +59.044487 117.9176 l +h +59.044487 101.4301 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +277.54449 363.06989 m +294.03159 363.06989 l +294.03159 346.5824 l +277.54449 346.5824 l +h +277.54449 363.06989 m +S +0 0 0 0 setcmykcolor +CM +75.531586 18.993401 m +92.019089 18.993401 l +92.019089 35.480499 l +75.531586 35.480499 l +h +75.531586 18.993401 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +294.03159 445.50659 m +310.51907 445.50659 l +310.51907 429.0195 l +294.03159 429.0195 l +h +294.03159 445.50659 m +S +0 0 0 0 setcmykcolor +CM +75.531586 51.967999 m +92.019089 51.967999 l +92.019089 68.455101 l +75.531586 68.455101 l +h +75.531586 51.967999 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +294.03159 412.53201 m +310.51907 412.53201 l +310.51907 396.04489 l +294.03159 396.04489 l +h +294.03159 412.53201 m +S +0 0 0 0 setcmykcolor +CM +75.531586 84.943001 m +92.019089 84.943001 l +92.019089 101.4301 l +75.531586 101.4301 l +h +75.531586 84.943001 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +294.03159 379.55701 m +310.51907 379.55701 l +310.51907 363.06989 l +294.03159 363.06989 l +h +294.03159 379.55701 m +S +0 0 0 0 setcmykcolor +CM +75.531586 117.918 m +92.019089 117.918 l +92.019089 134.40511 l +75.531586 134.40511 l +h +75.531586 117.918 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +294.03159 346.582 m +310.51907 346.582 l +310.51907 330.09491 l +294.03159 330.09491 l +h +294.03159 346.582 m +S +0 0 0 0 setcmykcolor +CM +92.019089 2.5058589 m +108.50658 2.5058589 l +108.50658 18.993359 l +92.019089 18.993359 l +h +92.019089 2.5058589 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +310.51907 461.99414 m +327.00659 461.99414 l +327.00659 445.50665 l +310.51907 445.50665 l +h +310.51907 461.99414 m +S +0 0 0 0 setcmykcolor +CM +92.019089 35.480499 m +108.50658 35.480499 l +108.50658 51.967999 l +92.019089 51.967999 l +h +92.019089 35.480499 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +310.51907 429.0195 m +327.00659 429.0195 l +327.00659 412.53201 l +310.51907 412.53201 l +h +310.51907 429.0195 m +S +0 0 0 0 setcmykcolor +CM +92.019089 68.455101 m +108.50658 68.455101 l +108.50658 84.943001 l +92.019089 84.943001 l +h +92.019089 68.455101 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +310.51907 396.04489 m +327.00659 396.04489 l +327.00659 379.55701 l +310.51907 379.55701 l +h +310.51907 396.04489 m +S +0 0 0 0 setcmykcolor +CM +92.019089 101.4301 m +108.50658 101.4301 l +108.50658 117.9176 l +92.019089 117.9176 l +h +92.019089 101.4301 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +310.51907 363.06989 m +327.00659 363.06989 l +327.00659 346.5824 l +310.51907 346.5824 l +h +310.51907 363.06989 m +S +0 0 0 0 setcmykcolor +CM +108.50699 18.993401 m +124.99448 18.993401 l +124.99448 35.480499 l +108.50699 35.480499 l +h +108.50699 18.993401 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +327.00699 445.50659 m +343.49448 445.50659 l +343.49448 429.0195 l +327.00699 429.0195 l +h +327.00699 445.50659 m +S +0 0 0 0 setcmykcolor +CM +108.50699 51.967999 m +124.99448 51.967999 l +124.99448 68.455101 l +108.50699 68.455101 l +h +108.50699 51.967999 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +327.00699 412.53201 m +343.49448 412.53201 l +343.49448 396.04489 l +327.00699 396.04489 l +h +327.00699 412.53201 m +S +0 0 0 0 setcmykcolor +CM +108.50699 84.943001 m +124.99448 84.943001 l +124.99448 101.4301 l +108.50699 101.4301 l +h +108.50699 84.943001 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +327.00699 379.55701 m +343.49448 379.55701 l +343.49448 363.06989 l +327.00699 363.06989 l +h +327.00699 379.55701 m +S +0 0 0 0 setcmykcolor +CM +108.50699 117.918 m +124.99448 117.918 l +124.99448 134.40511 l +108.50699 134.40511 l +h +108.50699 117.918 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +327.00699 346.582 m +343.49448 346.582 l +343.49448 330.09491 l +327.00699 330.09491 l +h +327.00699 346.582 m +S +0 0 0 0 setcmykcolor +CM +124.99399 2.5058589 m +141.48108 2.5058589 l +141.48108 18.993359 l +124.99399 18.993359 l +h +124.99399 2.5058589 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +343.49399 461.99414 m +359.98108 461.99414 l +359.98108 445.50665 l +343.49399 445.50665 l +h +343.49399 461.99414 m +S +0 0 0 0 setcmykcolor +CM +124.99399 35.480499 m +141.48108 35.480499 l +141.48108 51.967999 l +124.99399 51.967999 l +h +124.99399 35.480499 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +343.49399 429.0195 m +359.98108 429.0195 l +359.98108 412.53201 l +343.49399 412.53201 l +h +343.49399 429.0195 m +S +0 0 0 0 setcmykcolor +CM +124.99399 68.455101 m +141.48108 68.455101 l +141.48108 84.943001 l +124.99399 84.943001 l +h +124.99399 68.455101 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +343.49399 396.04489 m +359.98108 396.04489 l +359.98108 379.55701 l +343.49399 379.55701 l +h +343.49399 396.04489 m +S +0 0 0 0 setcmykcolor +CM +124.99399 101.4301 m +141.48108 101.4301 l +141.48108 117.9176 l +124.99399 117.9176 l +h +124.99399 101.4301 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +343.49399 363.06989 m +359.98108 363.06989 l +359.98108 346.5824 l +343.49399 346.5824 l +h +343.49399 363.06989 m +S +0 0 0 0 setcmykcolor +CM +141.48099 18.993401 m +157.96849 18.993401 l +157.96849 35.480499 l +141.48099 35.480499 l +h +141.48099 18.993401 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +359.98099 445.50659 m +376.46848 445.50659 l +376.46848 429.0195 l +359.98099 429.0195 l +h +359.98099 445.50659 m +S +0 0 0 0 setcmykcolor +CM +141.48099 51.967999 m +157.96849 51.967999 l +157.96849 68.455101 l +141.48099 68.455101 l +h +141.48099 51.967999 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +359.98099 412.53201 m +376.46848 412.53201 l +376.46848 396.04489 l +359.98099 396.04489 l +h +359.98099 412.53201 m +S +0 0 0 0 setcmykcolor +CM +141.48099 84.943001 m +157.96849 84.943001 l +157.96849 101.4301 l +141.48099 101.4301 l +h +141.48099 84.943001 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +359.98099 379.55701 m +376.46848 379.55701 l +376.46848 363.06989 l +359.98099 363.06989 l +h +359.98099 379.55701 m +S +0 0 0 0 setcmykcolor +CM +141.48099 117.918 m +157.96849 117.918 l +157.96849 134.40511 l +141.48099 134.40511 l +h +141.48099 117.918 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +359.98099 346.582 m +376.46848 346.582 l +376.46848 330.09491 l +359.98099 330.09491 l +h +359.98099 346.582 m +S +0 0 0 0 setcmykcolor +CM +157.96898 35.480499 m +174.45648 35.480499 l +174.45648 51.967999 l +157.96898 51.967999 l +h +157.96898 35.480499 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +376.46899 429.0195 m +392.95648 429.0195 l +392.95648 412.53201 l +376.46899 412.53201 l +h +376.46899 429.0195 m +S +0 0 0 0 setcmykcolor +CM +157.96898 68.455101 m +174.45648 68.455101 l +174.45648 84.943001 l +157.96898 84.943001 l +h +157.96898 68.455101 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +376.46899 396.04489 m +392.95648 396.04489 l +392.95648 379.55701 l +376.46899 379.55701 l +h +376.46899 396.04489 m +S +0 0 0 0 setcmykcolor +CM +157.96898 101.4301 m +174.45648 101.4301 l +174.45648 117.9176 l +157.96898 117.9176 l +h +157.96898 101.4301 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -218 464 cm +376.46899 363.06989 m +392.95648 363.06989 l +392.95648 346.5824 l +376.46899 346.5824 l +h +376.46899 363.06989 m +S +CM +42.556988 2.5058589 m +59.044487 2.5058589 l +59.044487 18.993359 l +42.556988 18.993359 l +h +42.556988 2.5058589 m +f +1 0 0 -1 -218 464 cm +261.05698 461.99414 m +277.54449 461.99414 l +277.54449 445.50665 l +261.05698 445.50665 l +h +261.05698 461.99414 m +S +CM +42.556988 35.480499 m +59.044487 35.480499 l +59.044487 51.967999 l +42.556988 51.967999 l +h +42.556988 35.480499 m +f +1 0 0 -1 -218 464 cm +261.05698 429.0195 m +277.54449 429.0195 l +277.54449 412.53201 l +261.05698 412.53201 l +h +261.05698 429.0195 m +S +CM +42.556988 68.455101 m +59.044487 68.455101 l +59.044487 84.943001 l +42.556988 84.943001 l +h +42.556988 68.455101 m +f +1 0 0 -1 -218 464 cm +261.05698 396.04489 m +277.54449 396.04489 l +277.54449 379.55701 l +261.05698 379.55701 l +h +261.05698 396.04489 m +S +CM +42.556988 101.4301 m +59.044487 101.4301 l +59.044487 117.9176 l +42.556988 117.9176 l +h +42.556988 101.4301 m +f +1 0 0 -1 -218 464 cm +261.05698 363.06989 m +277.54449 363.06989 l +277.54449 346.5824 l +261.05698 346.5824 l +h +261.05698 363.06989 m +S +CM +59.044487 18.993401 m +75.531586 18.993401 l +75.531586 35.480499 l +59.044487 35.480499 l +h +59.044487 18.993401 m +f +1 0 0 -1 -218 464 cm +277.54449 445.50659 m +294.03159 445.50659 l +294.03159 429.0195 l +277.54449 429.0195 l +h +277.54449 445.50659 m +S +CM +59.044487 51.967999 m +75.531586 51.967999 l +75.531586 68.455101 l +59.044487 68.455101 l +h +59.044487 51.967999 m +f +1 0 0 -1 -218 464 cm +277.54449 412.53201 m +294.03159 412.53201 l +294.03159 396.04489 l +277.54449 396.04489 l +h +277.54449 412.53201 m +S +CM +59.044487 84.943001 m +75.531586 84.943001 l +75.531586 101.4301 l +59.044487 101.4301 l +h +59.044487 84.943001 m +f +1 0 0 -1 -218 464 cm +277.54449 379.55701 m +294.03159 379.55701 l +294.03159 363.06989 l +277.54449 363.06989 l +h +277.54449 379.55701 m +S +CM +59.044487 117.918 m +75.531586 117.918 l +75.531586 134.40511 l +59.044487 134.40511 l +h +59.044487 117.918 m +f +1 0 0 -1 -218 464 cm +277.54449 346.582 m +294.03159 346.582 l +294.03159 330.09491 l +277.54449 330.09491 l +h +277.54449 346.582 m +S +CM +75.531586 2.5058589 m +92.019089 2.5058589 l +92.019089 18.993359 l +75.531586 18.993359 l +h +75.531586 2.5058589 m +f +1 0 0 -1 -218 464 cm +294.03159 461.99414 m +310.51907 461.99414 l +310.51907 445.50665 l +294.03159 445.50665 l +h +294.03159 461.99414 m +S +CM +75.531586 35.480499 m +92.019089 35.480499 l +92.019089 51.967999 l +75.531586 51.967999 l +h +75.531586 35.480499 m +f +1 0 0 -1 -218 464 cm +294.03159 429.0195 m +310.51907 429.0195 l +310.51907 412.53201 l +294.03159 412.53201 l +h +294.03159 429.0195 m +S +CM +75.531586 68.455101 m +92.019089 68.455101 l +92.019089 84.943001 l +75.531586 84.943001 l +h +75.531586 68.455101 m +f +1 0 0 -1 -218 464 cm +294.03159 396.04489 m +310.51907 396.04489 l +310.51907 379.55701 l +294.03159 379.55701 l +h +294.03159 396.04489 m +S +CM +75.531586 101.4301 m +92.019089 101.4301 l +92.019089 117.9176 l +75.531586 117.9176 l +h +75.531586 101.4301 m +f +1 0 0 -1 -218 464 cm +294.03159 363.06989 m +310.51907 363.06989 l +310.51907 346.5824 l +294.03159 346.5824 l +h +294.03159 363.06989 m +S +CM +92.019089 18.993401 m +108.50658 18.993401 l +108.50658 35.480499 l +92.019089 35.480499 l +h +92.019089 18.993401 m +f +1 0 0 -1 -218 464 cm +310.51907 445.50659 m +327.00659 445.50659 l +327.00659 429.0195 l +310.51907 429.0195 l +h +310.51907 445.50659 m +S +CM +92.019089 51.967999 m +108.50658 51.967999 l +108.50658 68.455101 l +92.019089 68.455101 l +h +92.019089 51.967999 m +f +1 0 0 -1 -218 464 cm +310.51907 412.53201 m +327.00659 412.53201 l +327.00659 396.04489 l +310.51907 396.04489 l +h +310.51907 412.53201 m +S +CM +92.019089 84.943001 m +108.50658 84.943001 l +108.50658 101.4301 l +92.019089 101.4301 l +h +92.019089 84.943001 m +f +1 0 0 -1 -218 464 cm +310.51907 379.55701 m +327.00659 379.55701 l +327.00659 363.06989 l +310.51907 363.06989 l +h +310.51907 379.55701 m +S +CM +92.019089 117.918 m +108.50658 117.918 l +108.50658 134.40511 l +92.019089 134.40511 l +h +92.019089 117.918 m +f +1 0 0 -1 -218 464 cm +310.51907 346.582 m +327.00659 346.582 l +327.00659 330.09491 l +310.51907 330.09491 l +h +310.51907 346.582 m +S +CM +108.50699 2.5058589 m +124.99448 2.5058589 l +124.99448 18.993359 l +108.50699 18.993359 l +h +108.50699 2.5058589 m +f +1 0 0 -1 -218 464 cm +327.00699 461.99414 m +343.49448 461.99414 l +343.49448 445.50665 l +327.00699 445.50665 l +h +327.00699 461.99414 m +S +CM +108.50699 35.480499 m +124.99448 35.480499 l +124.99448 51.967999 l +108.50699 51.967999 l +h +108.50699 35.480499 m +f +1 0 0 -1 -218 464 cm +327.00699 429.0195 m +343.49448 429.0195 l +343.49448 412.53201 l +327.00699 412.53201 l +h +327.00699 429.0195 m +S +CM +108.50699 68.455101 m +124.99448 68.455101 l +124.99448 84.943001 l +108.50699 84.943001 l +h +108.50699 68.455101 m +f +1 0 0 -1 -218 464 cm +327.00699 396.04489 m +343.49448 396.04489 l +343.49448 379.55701 l +327.00699 379.55701 l +h +327.00699 396.04489 m +S +CM +108.50699 101.4301 m +124.99448 101.4301 l +124.99448 117.9176 l +108.50699 117.9176 l +h +108.50699 101.4301 m +f +1 0 0 -1 -218 464 cm +327.00699 363.06989 m +343.49448 363.06989 l +343.49448 346.5824 l +327.00699 346.5824 l +h +327.00699 363.06989 m +S +CM +124.99399 18.993401 m +141.48108 18.993401 l +141.48108 35.480499 l +124.99399 35.480499 l +h +124.99399 18.993401 m +f +1 0 0 -1 -218 464 cm +343.49399 445.50659 m +359.98108 445.50659 l +359.98108 429.0195 l +343.49399 429.0195 l +h +343.49399 445.50659 m +S +CM +124.99399 51.967999 m +141.48108 51.967999 l +141.48108 68.455101 l +124.99399 68.455101 l +h +124.99399 51.967999 m +f +1 0 0 -1 -218 464 cm +343.49399 412.53201 m +359.98108 412.53201 l +359.98108 396.04489 l +343.49399 396.04489 l +h +343.49399 412.53201 m +S +CM +124.99399 84.943001 m +141.48108 84.943001 l +141.48108 101.4301 l +124.99399 101.4301 l +h +124.99399 84.943001 m +f +1 0 0 -1 -218 464 cm +343.49399 379.55701 m +359.98108 379.55701 l +359.98108 363.06989 l +343.49399 363.06989 l +h +343.49399 379.55701 m +S +CM +124.99399 117.918 m +141.48108 117.918 l +141.48108 134.40511 l +124.99399 134.40511 l +h +124.99399 117.918 m +f +1 0 0 -1 -218 464 cm +343.49399 346.582 m +359.98108 346.582 l +359.98108 330.09491 l +343.49399 330.09491 l +h +343.49399 346.582 m +S +CM +141.48099 2.5058589 m +157.96849 2.5058589 l +157.96849 18.993359 l +141.48099 18.993359 l +h +141.48099 2.5058589 m +f +1 0 0 -1 -218 464 cm +359.98099 461.99414 m +376.46848 461.99414 l +376.46848 445.50665 l +359.98099 445.50665 l +h +359.98099 461.99414 m +S +CM +141.48099 35.480499 m +157.96849 35.480499 l +157.96849 51.967999 l +141.48099 51.967999 l +h +141.48099 35.480499 m +f +1 0 0 -1 -218 464 cm +359.98099 429.0195 m +376.46848 429.0195 l +376.46848 412.53201 l +359.98099 412.53201 l +h +359.98099 429.0195 m +S +CM +141.48099 68.455101 m +157.96849 68.455101 l +157.96849 84.943001 l +141.48099 84.943001 l +h +141.48099 68.455101 m +f +1 0 0 -1 -218 464 cm +359.98099 396.04489 m +376.46848 396.04489 l +376.46848 379.55701 l +359.98099 379.55701 l +h +359.98099 396.04489 m +S +CM +141.48099 101.4301 m +157.96849 101.4301 l +157.96849 117.9176 l +141.48099 117.9176 l +h +141.48099 101.4301 m +f +1 0 0 -1 -218 464 cm +359.98099 363.06989 m +376.46848 363.06989 l +376.46848 346.5824 l +359.98099 346.5824 l +h +359.98099 363.06989 m +S +CM +157.96898 18.993401 m +174.45648 18.993401 l +174.45648 35.480499 l +157.96898 35.480499 l +h +157.96898 18.993401 m +f +1 0 0 -1 -218 464 cm +376.46899 445.50659 m +392.95648 445.50659 l +392.95648 429.0195 l +376.46899 429.0195 l +h +376.46899 445.50659 m +S +CM +157.96898 51.967999 m +174.45648 51.967999 l +174.45648 68.455101 l +157.96898 68.455101 l +h +157.96898 51.967999 m +f +1 0 0 -1 -218 464 cm +376.46899 412.53201 m +392.95648 412.53201 l +392.95648 396.04489 l +376.46899 396.04489 l +h +376.46899 412.53201 m +S +CM +157.96898 84.943001 m +174.45648 84.943001 l +174.45648 101.4301 l +157.96898 101.4301 l +h +157.96898 84.943001 m +f +1 0 0 -1 -218 464 cm +376.46899 379.55701 m +392.95648 379.55701 l +392.95648 363.06989 l +376.46899 363.06989 l +h +376.46899 379.55701 m +S +CM +157.96898 117.918 m +174.45648 117.918 l +174.45648 134.40511 l +157.96898 134.40511 l +h +157.96898 117.918 m +f +1 0 0 -1 -218 464 cm +376.46899 346.582 m +392.95648 346.582 l +392.95648 330.09491 l +376.46899 330.09491 l +h +376.46899 346.582 m +S +0 0 0 1 setcmykcolor +CM +0.45662716 68.360497 m +16.943727 68.360497 l +16.943727 84.847603 l +0.45662716 84.847603 l +h +0.45662716 68.360497 m +f +16.943787 68.360497 m +33.431286 68.360497 l +33.431286 84.847603 l +16.943787 84.847603 l +h +16.943787 68.360497 m +f +0 0 0 0 setcmykcolor +25.289486 78.765999 m +26.163687 78.765999 26.872686 79.474998 26.872686 80.349197 c +26.872686 81.223396 26.163687 81.932404 25.289486 81.932404 c +24.414785 81.932404 23.706285 81.223396 23.706285 80.349197 c +23.706285 79.474998 24.414785 78.765999 25.289486 78.765999 c +h +25.289486 78.765999 m +f +25.289486 70.827003 m +26.163687 70.827003 26.872686 71.535896 26.872686 72.410896 c +26.872686 73.285202 26.163687 73.994102 25.289486 73.994102 c +24.414785 73.994102 23.706285 73.285202 23.706285 72.410896 c +23.706285 71.535896 24.414785 70.827003 25.289486 70.827003 c +h +25.289486 70.827003 m +f +8.7511559 75.021103 m +9.6253757 75.021103 10.334386 75.729698 10.334386 76.603897 c +10.334386 77.4785 9.6253757 78.187103 8.7511559 78.187103 c +7.8765464 78.187103 7.1679564 77.4785 7.1679564 76.603897 c +7.1679564 75.729698 7.8765464 75.021103 8.7511559 75.021103 c +h +8.7511559 75.021103 m +f +2 J +1 0 0 -1 -218 464 cm +235.44379 380.77579 m +235.44379 395.15161 l +S +1 J +/Cs1 SC +0 0.57284999 0.82087702 sc +261 346.48749 m +277.48749 346.48749 l +277.48749 330 l +261 330 l +h +261 346.48749 m +S +376.46988 461.99408 m +392.9574 461.99408 l +392.9574 445.50659 l +376.46988 445.50659 l +h +376.46988 461.99408 m +S +ep +end +%%Trailer +%%EOF diff --git a/chptr14/artwork/pongdesign.odt b/chptr14/artwork/pongdesign.odt new file mode 100644 index 0000000..5aa9c2c Binary files /dev/null and b/chptr14/artwork/pongdesign.odt differ diff --git a/chptr14/artwork/pongdesign.png b/chptr14/artwork/pongdesign.png new file mode 100644 index 0000000..5142e4e Binary files /dev/null and b/chptr14/artwork/pongdesign.png differ diff --git a/chptr14/pongdesign-sm.png b/chptr14/pongdesign-sm.png new file mode 100644 index 0000000..aed969e Binary files /dev/null and b/chptr14/pongdesign-sm.png differ diff --git a/chptr14/pongdesign.png b/chptr14/pongdesign.png new file mode 100644 index 0000000..5142e4e Binary files /dev/null and b/chptr14/pongdesign.png differ diff --git a/chptr15/p830f1.eps b/chptr15/p830f1.eps index 8dfb9b6..5e6dbf1 100644 --- a/chptr15/p830f1.eps +++ b/chptr15/p830f1.eps @@ -1 +1,1098 @@ -%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Illustrator(R) 8.0 %%AI8_CreatorVersion: 8.0.1 %%For: (a a) (EMILCOMP) %%Title: (p830f1.eps) %%CreationDate: (11/14/01) (9:58 AM) %%BoundingBox: 19 11 110 143 %%HiResBoundingBox: 19.4746 11.1299 109.709 142.7559 %%DocumentProcessColors: Cyan Black %%DocumentFonts: CoreTTI2k %%+ TimesTen-Roman %%DocumentSuppliedFonts: CoreTTI2k %%+ TimesTen-Roman %%DocumentSuppliedResources: procset Adobe_level2_AI5 1.2 0 %%+ procset Adobe_typography_AI5 1.0 1 %%+ procset Adobe_ColorImage_AI6 1.3 0 %%+ procset Adobe_Illustrator_AI5 1.3 0 %%+ procset Adobe_cshow 2.0 8 %%+ procset Adobe_shading_AI8 1.0 0 %AI5_FileFormat 4.0 %AI3_ColorUsage: Color %AI3_IncludePlacedImages %AI7_ImageSettings: 1 %%CMYKProcessColor: 1 1 1 1 ([Registration]) %%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) %%+ Options: 1 16 0 1 0 1 1 1 0 1 1 1 1 18 0 0 0 0 0 0 0 0 131071 -1 %%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () %AI3_TemplateBox: 62 76 62 76 %AI3_TileBox: -379 -305 208 464 %AI3_DocumentPreview: Macintosh_ColorPic %AI5_ArtSize: 150 144 %AI5_RulerUnits: 3 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI8_OpenToView: -41.2461 148.2461 4.61 1009 717 18 1 1 7 43 0 0 %AI5_OpenViewLayers: 7 %%PageOrigin:-379 -305 %%AI3_PaperRect:-12 781 600 -11 %%AI3_Margin:12 -12 -13 11 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI7_Thumbnail: 88 128 8 %%BeginData: 15856 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FD10FFAF3C85608B6085608B6085608B6085608B6085608B608560 %8B6085608B6085608B6085608B6085608B6085608B6085608B6085608B3C %FD22FF8485AFFFA8FFAFFFA8FFAFFFA8FFAFFFA8FFAFFFA8FFAFFFA8FFAF %FFA8FFAFFFA8FFAFFFA8FFAFFFA8FFAFFFA8FFAFFFA8FFAFFFA83CA8FD21 %FFAF60FFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFF %AFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFF367DFD21FF84 %60A8FFA9FFA8FFA9FFA8FFA9FFA8FF527DA8FF7EA8A8FFA9FFA8FFA9FFA8 %FFA97D7DFFA9FFA8FFA9FFA8FFA9FFA8FFA9FFA8FFA9367DFD21FFAF60FF %AFFFAFFFAFFFAFFFAFFFAFFFAF7D7DFFAF7D2EFFAFFFAFFFAFFFAFFFAFFF %59A8AFFFAFFF84A8AFFFAFFFAFFFAFFFAFFFAFFF367DFD21FF8484A8FFAF %FFA8FFAFFFA8FFAFFFA8FF52A8A8FF59277DFF847D527D847D527DAF7D7D %FF7D7DA85252FFA8FFAFFFA8FFAFFFA8FFAF367DFD21FFAF60FFAFFFAFFF %AFFFAFFFAFFFAFFFAF7D84FF59FF5952AFFF27FF2EA827FF2EA859A852A8 %59FF52A8AFFFAFFFAFFFAFFFAFFFAFFF367DFD21FF8485A9FFA8FFA9FFA8 %FFA9FFA8FFA9FF52A8A97D52A8F8A8A827A97D7D27A9FD047D52A8FF7E7D %52FFA9FFA8FFA9FFA8FFA9FFA83C7DFD21FFAF60FFAFFFAFFFAFFFAFFFAF %FFAFFF2E7DAF7D59FFAF5227FF27A859FF27A859FF527D597D59FF597DAF %FFAFFFAFFFAFFFAFFFAFFF367DFD21FF8485AFFFA8FFAFFFA8FFAFFFA8FF %AFFFA8FFAFFFA8FFAFFFA852AFFFA852AFFFA8FFAFFFA8FFAFFFA8FFAFFF %A8FFAFFFA8FFAFFFA83C7DFD21FFAF60FFAFFFAFFFAFFFAFFFAFFFAFFFAF %FFAFFFAFFFAFFFAFFF2EFFAFFF2EFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAF %FFAFFFAFFFAFFF367DFD21FF843C35855A6035855A6035855A6035855A60 %35855A6035855A603585366035855A6035855A6035855A6035855A603585 %5A6035855A367DFD22FFA984597E597E597E597E597E597E597E597E597E %597E597E597E145A597E597E597E597E597E597E597E597E597E597E597E %597E597DFD23FFA8FD177D351414FD1A7DFD3BFF3C363C36FD53FF6114AF %601484FD52FF1461FFFF363CFD51FF3614AFFFFFAF1484FD4FFF841484FD %04FF6114FD4EFFA83636FD05FFA81436FD4DFF8B143C36613C6036611414 %A9FD4CFF363C363C361A143C363C3660FD51FF3685FD56FF3C60FD56FF36 %8BFD56FF3C60FD56FF3685FD56FF3C60FD56FF3C85FD56FF3C60FD2BFF7D %527D527D527D527D527D527D527D527D527D527D527D527D527D527D527D %527D527D527D527D527D527D135A527D527D527D527D527D527D527D527D %527D527D527D527D527D527D527D527D527D527D527D527D527D7D27A87D %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D %A87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87DA87D527DFD56FF52 %52FD56FF7D7DFD56FF5252FD0FFF7D7DA8FF7DFF7DFFFFFFA8A8FD04FFA8 %7D7DFFA87DFD0FFFA8FD0CFF7DFD14FF7D7DFD0EFF52FFA8A8FF52FD05FF %A87DFD04FF52FFFF7DFF27FD0FFFF8FD0CFF7DA8FD04FFA8A8FD0DFF5252 %FD0EFF7D27A8FFFF27A852FFA8A8527DA8A852FF5252A8FFFF277D7DFFA8 %7D7D52A852A87DA8FFFF7D7D52FFFF7D7D7DA8A8527D52FF52A8A8A852FF %277DFD0DFF7D7DFD0FFF7D27A8FF52FF52FF7DFFA8527DA87DA8FF7D27A8 %FF27FF27FF52FFA8277D7D52A8FFFFFF7DFF27A8FF7DA8A852FF52FF52A8 %7D7D7DA87DA87DA8FD0DFF5252FD0EFFA8FFA827FF27FF27FFF8FF7D7D27 %FFFFA8A8FFA827FF27FF27FF27FFFF27277D277DFFFF7D7DA85252FF7D7D %FF27FF27FF52FF52A827FFFFA852A8FD0DFF527DFD0EFF52A87DA8A827A8 %27FF7D527D527D527DFF7DA87D7DFF27FF27FF7D7D7DFF7DFF7DFFFFFF27 %FFFFFFF8A87D7D7DFFFF277D7DFF527D7D527DFF7D7DFD0DFF5252FD38FF %7D7DFFFFFF27FD18FF7D7DFD38FF52A8FFFFA852FD18FF5252FD56FF7D27 %275227522752275227522752275227522752275227522752275227522752 %275227522752275227522752275227522752275227522752275227522752 %275227522752275227522752275227522752275227522752275227F8592E %592E592E592E592E592E592E592E592E592E592E592E592E592E592E592E %592E592E592E592E592E592E592E592E592E592E592E592E592E592E592E %592E592E592E592E592E592E592E592E592E592E592E592E5259A9AF84AF %A9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF %84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AF %A9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF5227AF84AF84AF84 %AF84AF84AF525959592EAF597D595959A82E842E8484595959527D59A82E %7D847D2EAF84AF84AF848459AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF845259A9AFA9AFA9A8A9AF %A9AFA9AF27AF537DA9847EAF27AFA952A9AF53527EAF27AFA9A8A952A9AF %A952A9AFA9AFA9AFA9AFA9AFA9AFA97DA9AFA9AFA9AFA9AFA9AFA9AFA9AF %A9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AF522EAF84AF84AF59AF84AF84 %AF8452597DF8AF52AF842E84AF05AF84AFF8AF842784AF84AF05AF84AF05 %AF847D52AF845959AF2E7D2E84F8A884AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84595984AFA984597D7EAF84AFA9AF %59595359597DA9AF27AFA92E84AFA92E59AF27AF84AFA92E59847E2E84AF %A9AF84AF5384842EA92E842EA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF %84AFA9AF84AFA9AF84AFA9AF84AF522EAF84AF84AF52AF84AF84AF84AF05 %7D592759AF842784AF05AF84AFF8AF842784AF84AF05AF84AF05AF84AF84 %AF845959AF05AF05AF05AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF845959A9AFA9AFA9AFA9AFA9AFA9AFA97DA9AF %52AFA9AFF8847E277D7D53AFA9AF0084A9AF7E277DAF7D277EAF537DA9AF %527D7E277E277E527EAFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AF %A9AFA9AFA9AFA9AFA9AF522EAF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF845959A9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AF %A9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF %84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AF %A9AF84AFA9AF5227AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF845259A9AFA9AFA9AFA9AFA9AFA9AF537D7EAF537D7E7D7E8453AF %537DA9AF7E847D84A9AF5384A984537D7E7D7D7D7EAFA9AFA9AFA984A9AF %A9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AF %A9AF522EAF84AF84AF59AF84AF84AF84842EAF845959AF05AF84AF59842E %AF595984AF2EAF842784AF842759AF27AF598484AF84AF84AF59AF84AF84 %AF598484AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %595984AFA9AF8484A9AF84AFA9AF597DA9AF2E84A92E84AF7EAF597DA927 %84AFA9AF84AF27AF84AF27AF842EA9AF84AFA95284AF7E59595953598452 %53AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AF522E %AF84AF59842E8459AF84AF84842784595252AF0584525984842EAFF8AF84 %AFF8A884275984522784AF05AF84AF84AF59AF84AF05AF05AF05AF2E8484 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF845959A9AF %A9AFA984A9AFA9AFA9AF7D7DA9AF5384A92EA9AFA9AF7D7DA9527DAFA92E %A9AF27AFA9AF27AFA952A9AFA9AFA9AFA9AFA92EA952A92EA97D7EAFA9AF %A9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AF522EAF84AF84 %AF59AF84AF84AF845927AF592E2EAFF8845984525927AF7D5959842EAF59 %2752AF52275984F88484AF84AF27AF84AFF884F8AFF8A82E597DAF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF845959A9AF84AFA9AF %84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AF %A9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF %84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF5227AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF845259A9AFA9AFA9AFA9AFA9AF %A9AF53A8A9AF53AF537DA97D7DAFA9AF5384A9AF7D847EA8A9847D84A9AF %A9AFA9AFA984A9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AF %A9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AF522EAF84AF84AF84AF84AF84AF84 %84F8A8FD04842EAF592784AF59F884AF27AF84AF2EA82EAF2EAF84AF84AF %84AF7DAF84AF84AF598484AF84AF84AF84AF84AF84AF84AF84AF84AF84AF %84AF84AF84AF84AF84AF84AF84595984AFA9AF84AFA9AF84AFA9AF598427 %AF59AF7E598484287D847D27AF5259A9AF84AFA92752AFA9AF8452A9AF59 %7D7E59527DA9522EAFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9 %AF84AFA9AF84AFA9AF84AF522EAF84AF5984528459AF84AF848484590584 %84842EAF52AFF8A82E2784592EAF845927AF592727AF84AF59AF84AF05AF %05AF05AF2E8484AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF %84AF84AF84AF84AF845959A9AFA9AFA9AFA9AFA9AFA9AF7DAFA95227AF7E %7DA984A95227AF27AF7E52A9AF7D7D7EAFA9527EAFA9AFA9AFA952A92EA9 %52A97D7DAFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9 %AFA9AFA9AFA9AF522EAF84AF84AF84AF84AF84AF845959AF8459845927AF %2E84597D592759AF527D597D52842E8427AF84AF05AF84A8F884F8A8F8AF %525959AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF %84AF84AF845959A9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84 %AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9 %AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84 %AFA9AF5227AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF %84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF %84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF %845259A9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9 %AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9 %AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AF52 %2EAF84AF84AF84AF84AF84AF84AF84AF52AF59AF84AF598484AF84AF2E7D %7D8427AF84AF84AF847D2EAF84AF84AF84AF84AF84AF84AF84AF84AF84AF %84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84595984 %AFA9AF84AFA9AF84AFA9AF84AFA95959AFA9AF848453AF84AFA95959AFA9 %2E84AFA9AF84AF7E5984AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84 %AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AF522EAF84AF %84AF84AF84AF84AF84592E842E842E8459842E5984842E842E8484AF05AF %847D52AF84842EAF2E7D277D2E7D59592EAF84592E7D84842E8484AF84AF %84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF845959A9AFA9847D %847EAFA9AFA9AF27AFA97D7D7D7E59A984537D7D84537D7DAFA92EA9AFA9 %AFA9AF7E7DA97D7E8453AF27AF7D7D53A85384537D7D8453AFA9AFA9AFA9 %AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AF522EAF84AF84AF84AF %84AF84AF84A827842E842E84F8AF59592EA884AF2E8484AF27AF84AF84AF %84842EAF2E845959842EFD0459842E2EAF2EA884AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF845959A9AF84AFA9AF84AFA9AF %84AF538452525352527D28592EAF2859597D7EAF842EA9AF527DA9AF2E52 %A952527D28AF0584537D27AF285959AF285959AFA9AF84AFA9AF84AFA9AF %84AFA9AF84AFA9AF84AFA9AF84AFA9AF5227AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF2E8484AF05AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF52AF847D84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF845259A9AFA9AFA9AFA9AFA9AFA9AFA9AF %A9AFA9AFA9AFA9AFA9AFA9AFA97D53AF7D59A9AFA9AFA9AFA9AFA9AFA9AF %A9AFA9AFA9AFA9AF53847EAFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AF %A9AFA9AFA9AFA9AFA9AFA9AF522EAF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84595984AFA9AF84AFA9AF84AFA9AF84AFA9AF84AF %A9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF597D7EAF84AFA9AF84AFA9AF %84AFA9AF84AFA9AF84AFA9AF84AFA97D2EAFA9AF84AFA9AF84AFA9AF84AF %A9AF84AFA9AF84AF522EAF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF848459AF05AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF595984AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF845959A9AFA9AFA9AFA9AFA9AFA9AF7E8453AF52AF52AF5259 %7E5952AF7E7D7EAF527D53AF287DA952A9AF527D528428AF7D8453AF7E84 %53AF7E8453AFA9847DAFA98453AF537D28845384A97D53AFA97D5384A984 %53A8A9AF522EAF84AF5984598459AF84AF845284848427842E842784AF27 %AF2E845959842E8427845959AF05AF8427842E8459598459278452842E84 %FD0459AF7DAF84AF5959845959842EAF27AF59592E842E842E7D59842EAF %845959A9AF84AFA9AF84AFA9AF84AF27AF84AF27AF27AF27AF842EA95959 %AF7EAF27AF27AF2E84A92E84AF27AF27AF53842EAF27AF527D53AF27AFA9 %AF84AFA9AF848453AF2E847E59842E7E59597DA95252AF53AF84AFA9AF52 %27AF84AF84AF84AF84AF84AF8459277D84272E27592759A8F8AF592E2E84 %5927592759592E84F8845927592759522E2E522759592E595959277D59AF %2E7D84AF2E2E59522E7D27A8F87D2E5927AF275952AF275952AF845259A9 %AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9 %AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AF7DAFA984A9AFA9AFA9AFA9 %AFA9AFA9AFA9AFA9AFA9AFA9AFA9AF7EAFA984A9AFA9AFA9AF522EAF84AF %84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF %84AF84AF84AF84AF84AF84AF84AF84AF845959847DAF84AF84AF84AF84AF %84AF84AF84AF84AF84AF84AF8484528459AF84AF84AF84595984AFA9AF84 %AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9 %AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84 %AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AF522EAF84AF84AF84AF %84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF2E8484AF84AF84AF84AF %84AF84AF84AF84AF84AF84AF84AF84AF59AF84AF84AF84AF84AF84AF84AF %84AF84AF84AF84AF84AF84AF84AF84AF84AF845959A9AFA9AFA9AFA9AFA9 %AFA9AFA9AFA9AFA9AFA9AFA9AFA9AF7EAFA92EA9AFA9AFA9AFA9AFA9AFA9 %AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AF53AFA9AFA9AFA9AFA9 %AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AF522EAF84AF84AF84AF84AF84AF %84592E5259A859592E592E84842E2EAF27AF5959FD0452847D597D848452 %5959A8595984AF528484AF2E8459522E59592759AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF845959A9AF84847E8459AFA9AF84AF5384 %597D53842EA8278484AF5384842EA9AF27AF27AF2E847EA805AF28AF27AF %53842EAFA9AF84AFA95959AF27AF27AF27AF84AFA9AF84AFA9AF84AFA9AF %84AFA9AF84AFA9AF84AFA9AF5227AF84AF84AF84AF84AF84AF845959842E %5284AF595927AF845959AF05AF84278427845952595927847D2E59845284 %AF59AF84AF84AF2E8484278427842784AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF845259A9AFA9AFA9AFA9AFA9AFA9AF527D53525359 %53527E5253AF537D7E277EAF27AF27AF287D288427AF537D53AF535953AF %A97D53AFA95253AF27AF27AF27A8A9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AF %A9AFA9AFA9AFA9AF522EAF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF848484AF52AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84595984AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AF %A9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF2E847EAF84AFA9AF84AFA9AF %84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AF %A9AF84AF52F827F8270527F8270527F8270527F8270527F8270527F82705 %27F8270527F8270527F8270527F8270527F8270527F8270527F8270527F8 %270527F8270527F8270527F8270527F8270527F8270527F8270527F82705 %27F8277DFD56FF5252FD56FF7D7DFD14FFA8FD09FFA8FFA8FD35FF5252FD %05FFA8FD15FF7DFFA8A8FFFF7DFD34FF527DFD05FFA8FD06FF7D7D52FF7D %A87DFF7DA87D7D52FFA827A87DFFFFFF7DFD34FF5252FFFFFF7DA852A8A8 %FD04FF7D7DA827A8A827FFFD047DA852FF27FF27FFFFFF52A8FD33FF7D7D %FD05FFA8FD06FF52A8FF5252FF27FF52A87DA87D7DFF52FF52FFFFFF7DA8 %FD33FF5252FD05FFA8FD06FF7D527DA8527D27A8527D527D7D27FF27A852 %FFFFFF52FD34FF7D7DFD0CFF7DA8FD0FFFA8A8FFFF7DFD34FF5252FD0CFF %7D7DFD10FFA8A87DFD35FF7D7DFD1BFFA87DA8FFFD04A8FFFFA87DFD06FF %A8A8FD27FF5252FD05FFA8FD12FFA8A8A852FF52FF52A8A8FFFFFF7D7DFD %05FF7DFFFF7DFD26FF527DFD05FFA8FD06FF7D7D52FFA8A8FD057DFF527D %FF277DFFFF7DA87DA8FFA87D7DFFA87DA8FF7DFFFFFF7DFD25FF5252FFFF %FF7DA852A8A8FD04FF7D7DA8527D7D7DA8527DFFFF7D7DFFA85252FF52A8 %52A852FF7D7D7DA87D7D52A8FFFFFF52FD25FF7D7DFD05FFA8FD06FF52A8 %A87D52FFFFFF5252FFFF52A8A8FFFF52A87D7D7DA827FFA87D7DA8FFA87D %7DFFFFFF27FD25FF5252FD05FFA8FD06FF527D7D527D527D52A8277DFF7D %52A852A852FF527D277DFD0452A85252A8A87DFFFFA87DFD25FF7D7DFD2C %FF7DFFFFA8A8FD25FF5252FD2CFFA8A8FFA8FD26FF7D7DFD56FF5252FD0C %FFA8A8FD05FF7DFD04FFA8A8A8FD3BFF527DFD05FFA8FD0FFF7DFFFFA8FF %FFA8FD3AFF5252FD05FF7DFD06FF7DA87D7D52A8A852A827A852FFFFFF52 %FD3AFF7D7DFFFFFFA87D7DA8FD05FF52A87DA87D7DFF52FF52FF52FFFFFF %7DA8FD39FF5252FD05FF7DFD06FFFD047DA852FF27FF27FF27FFFFFF52A8 %FD39FF7D7DFD0CFF527D527D7D52A827FF52A87DFFFFFF7DFD3AFF5252FD %17FF7DA8FFFF52FD3AFF7D7DFD18FFA8FF7DFD3BFF52277D5252527D5252 %527D5252527D5252527D5252527D5252527D5252527D5252527D5252527D %5252527D5252527D5252527D5252527D5252527D5252527D5252527D5252 %527D5252527D5252527D5252527D5252527D5252 %%EndData %%EndComments %%BeginProlog %%BeginResource: procset Adobe_level2_AI5 1.2 0 %%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation) %%Version: 1.2 0 %%CreationDate: (04/10/93) () %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) userdict /Adobe_level2_AI5 26 dict dup begin put /packedarray where not { userdict begin /packedarray { array astore readonly } bind def /setpacking /pop load def /currentpacking false def end 0 } if pop userdict /defaultpacking currentpacking put true setpacking /initialize { Adobe_level2_AI5 begin } bind def /terminate { currentdict Adobe_level2_AI5 eq { end } if } bind def mark /setcustomcolor where not { /findcmykcustomcolor { (AI8_CMYK_CustomColor) 6 packedarray } bind def /findrgbcustomcolor { (AI8_RGB_CustomColor) 5 packedarray } bind def /setcustomcolor { exch aload pop dup (AI8_CMYK_CustomColor) eq { pop pop 4 { 4 index mul 4 1 roll } repeat 5 -1 roll pop setcmykcolor } { dup (AI8_RGB_CustomColor) eq { pop pop 3 { 1 exch sub 3 index mul 1 exch sub 3 1 roll } repeat 4 -1 roll pop setrgbcolor } { pop 4 { 4 index mul 4 1 roll } repeat 5 -1 roll pop setcmykcolor } ifelse } ifelse } def } if /setAIseparationgray { false setoverprint 0 setgray /setseparationgray where{ pop setseparationgray }{ /setcolorspace where{ pop [/Separation (All) /DeviceCMYK {dup dup dup}] setcolorspace 1 exch sub setcolor }{ setgray }ifelse }ifelse } def /gt38? mark {version cvr cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put userdict /level2? systemdict /languagelevel known dup { pop systemdict /languagelevel get 2 ge } if put /level2ScreenFreq { begin 60 HalftoneType 1 eq { pop Frequency } if HalftoneType 2 eq { pop GrayFrequency } if HalftoneType 5 eq { pop Default level2ScreenFreq } if end } bind def userdict /currentScreenFreq level2? {currenthalftone level2ScreenFreq} {currentscreen pop pop} ifelse put level2? not { /setcmykcolor where not { /setcmykcolor { exch .11 mul add exch .59 mul add exch .3 mul add 1 exch sub setgray } def } if /currentcmykcolor where not { /currentcmykcolor { 0 0 0 1 currentgray sub } def } if /setoverprint where not { /setoverprint /pop load def } if /selectfont where not { /selectfont { exch findfont exch dup type /arraytype eq { makefont } { scalefont } ifelse setfont } bind def } if /cshow where not { /cshow { [ 0 0 5 -1 roll aload pop ] cvx bind forall } bind def } if } if cleartomark /anyColor? { add add add 0 ne } bind def /testColor { gsave setcmykcolor currentcmykcolor grestore } bind def /testCMYKColorThrough { testColor anyColor? } bind def userdict /composite? 1 0 0 0 testCMYKColorThrough 0 1 0 0 testCMYKColorThrough 0 0 1 0 testCMYKColorThrough 0 0 0 1 testCMYKColorThrough and and and put composite? not { userdict begin gsave /cyan? 1 0 0 0 testCMYKColorThrough def /magenta? 0 1 0 0 testCMYKColorThrough def /yellow? 0 0 1 0 testCMYKColorThrough def /black? 0 0 0 1 testCMYKColorThrough def grestore /isCMYKSep? cyan? magenta? yellow? black? or or or def /customColor? isCMYKSep? not def end } if end defaultpacking setpacking %%EndResource %%BeginResource: procset Adobe_typography_AI5 1.0 1 %%Title: (Typography Operators) %%Version: 1.0 1 %%CreationDate:(6/10/1996) () %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_typography_AI5 68 dict dup begin put /initialize { begin begin Adobe_typography_AI5 begin Adobe_typography_AI5 { dup xcheck { bind } if pop pop } forall end end end Adobe_typography_AI5 begin } def /terminate { currentdict Adobe_typography_AI5 eq { end } if } def /modifyEncoding { /_tempEncode exch ddef /_pntr 0 ddef { counttomark -1 roll dup type dup /marktype eq { pop pop exit } { /nametype eq { _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll put } { /_pntr exch ddef } ifelse } ifelse } loop _tempEncode } def /havefont { systemdict /languagelevel known { /Font resourcestatus dup { exch pop exch pop } if } { systemdict /FontDirectory get 1 index known { pop true } { systemdict /fileposition known { dup length 6 add exch Ss 6 250 getinterval cvs pop Ss exch 0 exch getinterval status { pop pop pop pop true } { false } ifelse } { pop false } ifelse } ifelse } ifelse } def /TE { StandardEncoding 256 array copy modifyEncoding /_nativeEncoding exch def } def /subststring { exch 2 index exch search { exch pop exch dup () eq { pop exch concatstring } { 3 -1 roll exch concatstring concatstring } ifelse exch pop true } { pop pop false } ifelse } def /concatstring { 1 index length 1 index length 1 index add string dup 0 5 index putinterval dup 2 index 4 index putinterval 4 1 roll pop pop pop } def % /TZ { dup type /arraytype eq { /_wv exch def } { /_wv 0 def } ifelse /_useNativeEncoding exch def 2 index havefont { 3 index 255 string cvs dup (_Symbol_) eq { pop 2 index findfont } { 1 index 0 eq { dup length 1 sub 1 exch getinterval cvn findfont } { pop 2 index findfont } ifelse } ifelse } { dup 1 eq { 2 index 64 string cvs dup (-90pv-RKSJ-) (-83pv-RKSJ-) subststring { exch pop dup havefont { findfont false } { pop true } ifelse } { pop dup (-90ms-RKSJ-) (-Ext-RKSJ-) subststring { exch pop dup havefont { findfont false } { pop true } ifelse } { pop pop true } ifelse } ifelse { 1 index 1 eq { /Ryumin-Light-Ext-RKSJ-V havefont {/Ryumin-Light-Ext-RKSJ-V} {/Courier} ifelse } { /Ryumin-Light-83pv-RKSJ-H havefont {/Ryumin-Light-83pv-RKSJ-H} {/Courier} ifelse } ifelse findfont [1 0 0.5 1 0 0] makefont } if } { /Courier findfont } ifelse } ifelse _wv type /arraytype eq { _wv makeblendedfont } if dup length 10 add dict begin mark exch { 1 index /FID ne { def } if cleartomark mark } forall pop /FontScript exch def /FontDirection exch def /FontRequest exch def /FontName exch def counttomark 0 eq { 1 _useNativeEncoding eq { /Encoding _nativeEncoding def } if cleartomark } { /Encoding load 256 array copy modifyEncoding /Encoding exch def } ifelse FontName currentdict end definefont pop } def /tr { _ax _ay 3 2 roll } def /trj { _cx _cy _sp _ax _ay 6 5 roll } def /a0 { /Tx { dup currentpoint 3 2 roll tr _psf newpath moveto tr _ctm _pss } ddef /Tj { dup currentpoint 3 2 roll trj _pjsf newpath moveto trj _ctm _pjss } ddef } def /a1 { W B } def /e0 { /Tx { tr _psf } ddef /Tj { trj _pjsf } ddef } def /e1 { W F } def /i0 { /Tx { tr sp } ddef /Tj { trj jsp } ddef } def /i1 { W N } def /o0 { /Tx { tr sw rmoveto } ddef /Tj { trj swj rmoveto } ddef } def /r0 { /Tx { tr _ctm _pss } ddef /Tj { trj _ctm _pjss } ddef } def /r1 { W S } def /To { pop _ctm currentmatrix pop } def /TO { iTe _ctm setmatrix newpath } def /Tp { pop _tm astore pop _ctm setmatrix _tDict begin /W { } def /h { } def } def /TP { end iTm 0 0 moveto } def /Tr { _render 3 le { currentpoint newpath moveto } if dup 8 eq { pop 0 } { dup 9 eq { pop 1 } if } ifelse dup /_render exch ddef _renderStart exch get load exec } def /iTm { _ctm setmatrix _tm concat _shift aload pop _lineorientation 1 eq { exch } if translate _scale aload pop _lineorientation 1 eq _yokoorientation 1 eq or { exch } if scale } def /Tm { _tm astore pop iTm 0 0 moveto } def /Td { _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto } def /iTe { _render -1 eq { } { _renderEnd _render get dup null ne { load exec } { pop } ifelse } ifelse /_render -1 ddef } def /Ta { pop } def /Tf { 1 index type /nametype eq { dup 0.75 mul 1 index 0.25 mul neg } if /_fontDescent exch ddef /_fontAscent exch ddef /_fontSize exch ddef /_fontRotateAdjust _fontAscent _fontDescent add 2 div neg ddef /_fontHeight _fontSize ddef findfont _fontSize scalefont setfont } def /Tl { pop neg 0 exch _leading astore pop } def /Tt { pop } def /TW { 3 npop } def /Tw { /_cx exch ddef } def /TC { 3 npop } def /Tc { /_ax exch ddef } def /Ts { 0 exch _shift astore pop currentpoint iTm moveto } def /Ti { 3 npop } def /Tz { count 1 eq { 100 } if 100 div exch 100 div exch _scale astore pop iTm } def /TA { pop } def /Tq { pop } def /Tg { pop } def /TG { pop } def /Tv { /_lineorientation exch ddef } def /TV { /_charorientation exch ddef } def /Ty { dup /_yokoorientation exch ddef 1 sub neg Tv } def /TY { pop } def /T~ { Tx } def /Th { pop pop pop pop pop } def /TX { pop } def /Tk { _fontSize mul 1000 div _lineorientation 0 eq { neg 0 } { 0 exch } ifelse rmoveto pop } def /TK { 2 npop } def /T* { _leading aload pop _lineorientation 0 ne { exch } if Td } def /T*- { _leading aload pop _lineorientation 0 ne { exch } if exch neg exch neg Td } def /T- { _ax neg 0 rmoveto _lineorientation 1 eq _charorientation 0 eq and { 1 TV _hyphen Tx 0 TV } { _hyphen Tx } ifelse } def /T+ { } def /TR { _ctm currentmatrix pop _tm astore pop iTm 0 0 moveto } def /TS { currentfont 3 1 roll /_Symbol_ findfont _fontSize scalefont setfont 0 eq { Tx } { Tj } ifelse setfont } def /Xb { pop pop } def /Tb /Xb load def /Xe { pop pop pop pop } def /Te /Xe load def /XB { } def /TB /XB load def currentdict readonly pop end setpacking % /X^ { currentfont 5 1 roll dup havefont { findfont _fontSize scalefont setfont } { pop exch } ifelse 2 index 0 eq { Tx } { Tj } ifelse pop pop setfont } def /T^ /X^ load def %%EndResource %%BeginProcSet: Adobe_ColorImage_AI6 1.3 0 userdict /Adobe_ColorImage_AI6 known not { userdict /Adobe_ColorImage_AI6 53 dict put } if userdict /Adobe_ColorImage_AI6 get begin /initialize { Adobe_ColorImage_AI6 begin Adobe_ColorImage_AI6 { dup type /arraytype eq { dup xcheck { bind } if } if pop pop } forall } def /terminate { end } def currentdict /Adobe_ColorImage_AI6_Vars known not { /Adobe_ColorImage_AI6_Vars 41 dict def } if Adobe_ColorImage_AI6_Vars begin /plateindex -1 def /_newproc null def /_proc1 null def /_proc2 null def /sourcearray 4 array def /_ptispace null def /_ptiname null def /_pti0 0 def /_pti1 0 def /_ptiproc null def /_ptiscale 0 def /_pticomps 0 def /_ptibuf 0 string def /_gtigray 0 def /_cticmyk null def /_rtirgb null def /XIEnable true def /XIType 0 def /XIEncoding 0 def /XICompression 0 def /XIChannelCount 0 def /XIBitsPerPixel 0 def /XIImageHeight 0 def /XIImageWidth 0 def /XIImageMatrix null def /XIRowBytes 0 def /XIFile null def /XIBuffer1 null def /XIBuffer2 null def /XIBuffer3 null def /XIDataProc null def /XIColorSpace /DeviceGray def /XIColorValues 0 def /XIPlateList false def end /ci6colorimage /colorimage where {/colorimage get}{null} ifelse def /ci6image systemdict /image get def /ci6curtransfer systemdict /currenttransfer get def /ci6curoverprint /currentoverprint where {/currentoverprint get}{{_of}} ifelse def /ci6foureq { 4 index ne { pop pop pop false }{ 4 index ne { pop pop false }{ 4 index ne { pop false }{ 4 index eq } ifelse } ifelse } ifelse } def /ci6testplate { Adobe_ColorImage_AI6_Vars begin /plateindex -1 def /setcmykcolor where { pop gsave 1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub grestore 1 0 0 0 ci6foureq { /plateindex 0 def }{ 0 1 0 0 ci6foureq { /plateindex 1 def }{ 0 0 1 0 ci6foureq { /plateindex 2 def }{ 0 0 0 1 ci6foureq { /plateindex 3 def }{ 0 0 0 0 ci6foureq { /plateindex 5 def } if } ifelse } ifelse } ifelse } ifelse pop pop pop pop } if plateindex end } def /ci6concatprocs { /packedarray where { pop dup type /packedarraytype eq 2 index type /packedarraytype eq or }{ false } ifelse { /_proc2 exch cvlit def /_proc1 exch cvlit def _proc1 aload pop _proc2 aload pop _proc1 length _proc2 length add packedarray cvx }{ /_proc2 exch cvlit def /_proc1 exch cvlit def /_newproc _proc1 length _proc2 length add array def _newproc 0 _proc1 putinterval _newproc _proc1 length _proc2 putinterval _newproc cvx } ifelse } def /ci6istint { type /arraytype eq } def /ci6isspot { dup type /arraytype eq { dup length 1 sub get /Separation eq }{ pop false } ifelse } def /ci6spotname { dup ci6isspot {dup length 2 sub get}{pop ()} ifelse } def /ci6altspace { aload pop pop pop ci6colormake } def /ci6numcomps { dup /DeviceGray eq { pop 1 }{ dup /DeviceRGB eq { pop 3 }{ /DeviceCMYK eq { 4 }{ 1 } ifelse } ifelse } ifelse } def /ci6marksplate { dup /DeviceGray eq { pop plateindex 3 eq }{ dup /DeviceRGB eq { pop plateindex 5 ne }{ dup /DeviceCMYK eq { pop plateindex 5 ne }{ dup ci6isspot { /findcmykcustomcolor where { pop dup length 2 sub get 0.1 0.1 0.1 0.1 5 -1 roll findcmykcustomcolor 1 setcustomcolor systemdict /currentgray get exec 1 ne }{ pop plateindex 5 ne } ifelse }{ pop plateindex 5 ne } ifelse } ifelse } ifelse } ifelse } def /ci6colormake { dup ci6numcomps exch 1 index 2 add 1 roll dup 1 eq {pop}{array astore} ifelse exch } def /ci6colorexpand { dup ci6spotname exch dup ci6istint { ci6altspace exch 4 1 roll }{ 1 3 1 roll } ifelse } def /ci6colortint { dup /DeviceGray eq { 3 1 roll 1 exch sub mul 1 exch sub exch }{ dup /DeviceRGB eq { 3 1 roll {1 exch sub 1 index mul 1 exch sub exch} forall pop 3 array astore exch }{ dup /DeviceCMYK eq { 3 1 roll {1 index mul exch} forall pop 4 array astore exch }{ 3 1 roll mul exch } ifelse } ifelse } ifelse } def /ci6colortocmyk { dup /DeviceGray eq { pop 1 exch sub 0 0 0 4 -1 roll 4 array astore }{ dup /DeviceRGB eq { pop aload pop _rgbtocmyk 4 array astore }{ dup /DeviceCMYK eq { pop }{ ci6altspace ci6colortint ci6colortocmyk } ifelse } ifelse } ifelse } def /ci6makeimagedict { 7 dict begin /ImageType 1 def /Decode exch def /DataSource exch def /ImageMatrix exch def /BitsPerComponent exch def /Height exch def /Width exch def currentdict end } def /ci6stringinvert { 0 1 2 index length 1 sub { dup 2 index exch get 255 exch sub 2 index 3 1 roll put } for } def /ci6stringknockout { 0 1 2 index length 1 sub { 255 2 index 3 1 roll put } for } def /ci6stringapply { 0 1 4 index length 1 sub { dup 4 index exch get 3 index 3 1 roll 3 index exec } for pop exch pop } def /ci6walkrgbstring { 0 3 index dup length 1 sub 0 3 3 -1 roll { 3 getinterval {} forall 5 index exec 3 index } for 5 {pop} repeat } def /ci6walkcmykstring { 0 3 index dup length 1 sub 0 4 3 -1 roll { 4 getinterval {} forall 6 index exec 3 index } for 5 { pop } repeat } def /ci6putrgbtograystr { .11 mul exch .59 mul add exch .3 mul add cvi 3 copy put pop 1 add } def /ci6putcmyktograystr { exch .11 mul add exch .59 mul add exch .3 mul add dup 255 gt { pop 255 } if 255 exch sub cvi 3 copy put pop 1 add } def /ci6rgbtograyproc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec XIBuffer3 dup 3 1 roll /ci6putrgbtograystr load exch ci6walkrgbstring end } def /ci6cmyktograyproc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec XIBuffer3 dup 3 1 roll /ci6putcmyktograystr load exch ci6walkcmykstring end } def /ci6separatecmykproc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec XIBuffer3 0 2 index plateindex 4 2 index length 1 sub { get 255 exch sub 3 copy put pop 1 add 2 index } for pop pop exch pop end } def /ci6compositeimage { dup 1 eq { pop pop image }{ /ci6colorimage load null ne { ci6colorimage }{ 3 1 roll pop sourcearray 0 3 -1 roll put 3 eq {/ci6rgbtograyproc}{/ci6cmyktograyproc} ifelse load image } ifelse } ifelse } def /ci6knockoutimage { gsave 0 ci6curtransfer exec 1 ci6curtransfer exec eq { 0 ci6curtransfer exec 0.5 lt }{ 0 ci6curtransfer exec 1 ci6curtransfer exec gt } ifelse {{pop 0}}{{pop 1}} ifelse systemdict /settransfer get exec ci6compositeimage grestore } def /ci6drawimage { ci6testplate -1 eq { pop ci6compositeimage }{ dup type /arraytype eq { dup length plateindex gt {plateindex get}{pop false} ifelse }{ { true }{ dup 1 eq {plateindex 3 eq}{plateindex 3 le} ifelse } ifelse } ifelse { dup 1 eq { pop pop ci6image }{ dup 3 eq { ci6compositeimage }{ pop pop sourcearray 0 3 -1 roll put /ci6separatecmykproc load ci6image } ifelse } ifelse }{ ci6curoverprint { 7 {pop} repeat }{ ci6knockoutimage } ifelse } ifelse } ifelse } def /ci6proctintimage { /_ptispace exch store /_ptiname exch store /_pti1 exch store /_pti0 exch store /_ptiproc exch store /_pticomps _ptispace ci6numcomps store /_ptiscale _pti1 _pti0 sub store level2? { _ptiname length 0 gt version cvr 2012 ge and { [/Separation _ptiname _ptispace {_ptiproc}] setcolorspace [_pti0 _pti1] ci6makeimagedict ci6image }{ [/Indexed _ptispace 255 {255 div _ptiscale mul _pti0 add _ptiproc}] setcolorspace [0 255] ci6makeimagedict ci6image } ifelse }{ _pticomps 1 eq { { dup { 255 div _ptiscale mul _pti0 add _ptiproc 255 mul cvi put } ci6stringapply } ci6concatprocs ci6image }{ { dup length _pticomps mul dup _ptibuf length ne {/_ptibuf exch string store}{pop} ifelse _ptibuf { exch _pticomps mul exch 255 div _ptiscale mul _pti0 add _ptiproc _pticomps 2 add -2 roll _pticomps 1 sub -1 0 { 1 index add 2 index exch 5 -1 roll 255 mul cvi put } for pop pop } ci6stringapply } ci6concatprocs false _pticomps /ci6colorimage load null eq {7 {pop} repeat}{ci6colorimage} ifelse } ifelse } ifelse } def /ci6graytintimage { /_gtigray 5 -1 roll store {1 _gtigray sub mul 1 exch sub} 4 1 roll /DeviceGray ci6proctintimage } def /ci6cmyktintimage { /_cticmyk 5 -1 roll store {_cticmyk {1 index mul exch} forall pop} 4 1 roll /DeviceCMYK ci6proctintimage } def /ci6rgbtintimage { /_rtirgb 5 -1 roll store {_rtirgb {1 exch sub 1 index mul 1 exch sub exch} forall pop} 4 1 roll /DeviceRGB ci6proctintimage } def /ci6tintimage { ci6testplate -1 eq { ci6colorexpand 3 -1 roll 5 -1 roll {0}{0 exch} ifelse 4 2 roll dup /DeviceGray eq { pop ci6graytintimage }{ dup /DeviceRGB eq { pop ci6rgbtintimage }{ pop ci6cmyktintimage } ifelse } ifelse }{ dup ci6marksplate { plateindex 5 lt { ci6colortocmyk plateindex get dup 0 eq ci6curoverprint and { 7 {pop} repeat }{ 1 exch sub exch {1 0}{0 1} ifelse () ci6graytintimage } ifelse }{ pop exch {0}{0 exch} ifelse 0 3 1 roll () ci6graytintimage } ifelse }{ ci6curoverprint { 8 {pop} repeat }{ pop pop pop {pop 1} 0 1 () /DeviceGray ci6proctintimage } ifelse } ifelse } ifelse } def /XINullImage { } def /XIImageMask { XIImageWidth XIImageHeight false [XIImageWidth 0 0 XIImageHeight neg 0 0] /XIDataProc load imagemask } def /XIImageTint { XIImageWidth XIImageHeight XIBitsPerPixel [XIImageWidth 0 0 XIImageHeight neg 0 0] /XIDataProc load XIType 3 eq XIColorValues XIColorSpace ci6tintimage } def /XIImage { XIImageWidth XIImageHeight XIBitsPerPixel [XIImageWidth 0 0 XIImageHeight neg 0 0] /XIDataProc load false XIChannelCount XIPlateList ci6drawimage } def /XG { pop pop } def /XF { 13 {pop} repeat } def /Xh { Adobe_ColorImage_AI6_Vars begin gsave /XIType exch def /XIImageHeight exch def /XIImageWidth exch def /XIImageMatrix exch def 0 0 moveto XIImageMatrix concat XIImageWidth XIImageHeight scale /_lp /null ddef _fc /_lp /imagemask ddef end } def /XH { Adobe_ColorImage_AI6_Vars begin grestore end } def /XIEnable { Adobe_ColorImage_AI6_Vars /XIEnable 3 -1 roll put } def /XC { Adobe_ColorImage_AI6_Vars begin ci6colormake /XIColorSpace exch def /XIColorValues exch def end } def /XIPlates { Adobe_ColorImage_AI6_Vars begin /XIPlateList exch def end } def /XI { Adobe_ColorImage_AI6_Vars begin gsave /XIType exch def cvi dup 256 idiv /XICompression exch store 256 mod /XIEncoding exch store pop pop /XIChannelCount exch def /XIBitsPerPixel exch def /XIImageHeight exch def /XIImageWidth exch def pop pop pop pop /XIImageMatrix exch def XIBitsPerPixel 1 eq { XIImageWidth 8 div ceiling cvi }{ XIImageWidth XIChannelCount mul } ifelse /XIRowBytes exch def XIEnable { /XIBuffer3 XIImageWidth string def XICompression 0 eq { /XIBuffer1 XIRowBytes string def XIEncoding 0 eq { {currentfile XIBuffer1 readhexstring pop} }{ {currentfile XIBuffer1 readstring pop} } ifelse }{ /XIBuffer1 256 string def /XIBuffer2 XIRowBytes string def {currentfile XIBuffer1 readline pop (%) anchorsearch {pop} if} /ASCII85Decode filter /DCTDecode filter /XIFile exch def {XIFile XIBuffer2 readstring pop} } ifelse /XIDataProc exch def XIType 1 ne { 0 setgray } if XIType 1 eq { XIImageMask }{ XIType 2 eq XIType 3 eq or { XIImageTint }{ XIImage } ifelse } ifelse }{ XINullImage } ifelse /XIPlateList false def grestore end } def end %%EndProcSet %%BeginResource: procset Adobe_Illustrator_AI5 1.3 0 %%Title: (Adobe Illustrator (R) Version 8.0 Full Prolog) %%Version: 1.3 0 %%CreationDate: (3/7/1994) () %%Copyright: ((C) 1987-1998 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_Illustrator_AI5_vars 112 dict dup begin put /_?cmyk false def /_eo false def /_lp /none def /_pf { } def /_ps { } def /_psf { } def /_pss { } def /_pjsf { } def /_pjss { } def /_pola 0 def /_doClip 0 def /cf currentflat def /_lineorientation 0 def /_charorientation 0 def /_yokoorientation 0 def /_tm matrix def /_renderStart [ /e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0 ] def /_renderEnd [ null null null null /i1 /i1 /i1 /i1 ] def /_render -1 def /_shift [0 0] def /_ax 0 def /_ay 0 def /_cx 0 def /_cy 0 def /_leading [ 0 0 ] def /_ctm matrix def /_mtx matrix def /_sp 16#020 def /_hyphen (-) def /_fontSize 0 def /_fontAscent 0 def /_fontDescent 0 def /_fontHeight 0 def /_fontRotateAdjust 0 def /Ss 256 string def Ss 0 (fonts/) putinterval /_cnt 0 def /_scale [1 1] def /_nativeEncoding 0 def /_useNativeEncoding 0 def /_tempEncode 0 def /_pntr 0 def /_tDict 2 dict def /_hfname 100 string def /_hffound false def /Tx { } def /Tj { } def /CRender { } def /_AI3_savepage { } def /_gf null def /_cf 4 array def /_rgbf 3 array def /_if null def /_of false def /_fc { } def /_gs null def /_cs 4 array def /_rgbs 3 array def /_is null def /_os false def /_sc { } def /_pd 1 dict def /_ed 15 dict def /_pm matrix def /_fm null def /_fd null def /_fdd null def /_sm null def /_sd null def /_sdd null def /_i null def /_lobyte 0 def /_hibyte 0 def /_cproc null def /_cscript 0 def /_hvax 0 def /_hvay 0 def /_hvwb 0 def /_hvcx 0 def /_hvcy 0 def /_bitfont null def /_bitlobyte 0 def /_bithibyte 0 def /_bitkey null def /_bitdata null def /_bitindex 0 def /discardSave null def /buffer 256 string def /beginString null def /endString null def /endStringLength null def /layerCnt 1 def /layerCount 1 def /perCent (%) 0 get def /perCentSeen? false def /newBuff null def /newBuffButFirst null def /newBuffLast null def /clipForward? false def end userdict /Adobe_Illustrator_AI5 known not { userdict /Adobe_Illustrator_AI5 100 dict put } if userdict /Adobe_Illustrator_AI5 get begin /initialize { Adobe_Illustrator_AI5 dup begin Adobe_Illustrator_AI5_vars begin /_aicmykps where {pop /_?cmyk _aicmykps def}if discardDict { bind pop pop } forall dup /nc get begin { dup xcheck 1 index type /operatortype ne and { bind } if pop pop } forall end newpath } def /terminate { end end } def /_ null def /ddef { Adobe_Illustrator_AI5_vars 3 1 roll put } def /xput { dup load dup length exch maxlength eq { dup dup load dup length 2 mul dict copy def } if load begin def end } def /npop { { pop } repeat } def /hswj { dup stringwidth 3 2 roll { _hvwb eq { exch _hvcx add exch _hvcy add } if exch _hvax add exch _hvay add } cforall } def /vswj { 0 0 3 -1 roll { dup 255 le _charorientation 1 eq and { dup cstring stringwidth 5 2 roll _hvwb eq { exch _hvcy sub exch _hvcx sub } if exch _hvay sub exch _hvax sub 4 -1 roll sub exch 3 -1 roll sub exch } { _hvwb eq { exch _hvcy sub exch _hvcx sub } if exch _hvay sub exch _hvax sub _fontHeight sub } ifelse } cforall } def /swj { 6 1 roll /_hvay exch ddef /_hvax exch ddef /_hvwb exch ddef /_hvcy exch ddef /_hvcx exch ddef _lineorientation 0 eq { hswj } { vswj } ifelse } def /sw { 0 0 0 6 3 roll swj } def /vjss { 4 1 roll { dup cstring dup length 1 eq _charorientation 1 eq and { -90 rotate currentpoint _fontRotateAdjust add moveto gsave false charpath currentpoint 5 index setmatrix stroke grestore _fontRotateAdjust sub moveto _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto 90 rotate } { currentpoint _fontHeight sub 5 index sub 3 index _sp eq { 9 index sub } if currentpoint exch 4 index stringwidth pop 2 div sub exch _fontAscent sub moveto gsave 2 index false charpath 6 index setmatrix stroke grestore moveto pop pop } ifelse } cforall 6 npop } def /hjss { 4 1 roll { dup cstring gsave false charpath currentpoint 5 index setmatrix stroke grestore moveto _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto } cforall 6 npop } def /jss { _lineorientation 0 eq { hjss } { vjss } ifelse } def /ss { 0 0 0 7 3 roll jss } def /vjsp { 4 1 roll { dup cstring dup length 1 eq _charorientation 1 eq and { -90 rotate currentpoint _fontRotateAdjust add moveto false charpath currentpoint _fontRotateAdjust sub moveto _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto 90 rotate } { currentpoint _fontHeight sub 5 index sub 3 index _sp eq { 9 index sub } if currentpoint exch 4 index stringwidth pop 2 div sub exch _fontAscent sub moveto 2 index false charpath moveto pop pop } ifelse } cforall 6 npop } def /hjsp { 4 1 roll { dup cstring false charpath _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto } cforall 6 npop } def /jsp { matrix currentmatrix _lineorientation 0 eq {hjsp} {vjsp} ifelse } def /sp { matrix currentmatrix 0 0 0 7 3 roll _lineorientation 0 eq {hjsp} {vjsp} ifelse } def /pl { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform } def /setstrokeadjust where { pop true setstrokeadjust /c { curveto } def /C /c load def /v { currentpoint 6 2 roll curveto } def /V /v load def /y { 2 copy curveto } def /Y /y load def /l { lineto } def /L /l load def /m { moveto } def } { /c { pl curveto } def /C /c load def /v { currentpoint 6 2 roll pl curveto } def /V /v load def /y { pl 2 copy curveto } def /Y /y load def /l { pl lineto } def /L /l load def /m { pl moveto } def } ifelse /d { setdash } def /cf { } def /i { dup 0 eq { pop cf } if setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def /XR { 0 ne /_eo exch ddef } def /H { } def /h { closepath } def /N { _pola 0 eq { _doClip 1 eq { _eo {eoclip} {clip} ifelse /_doClip 0 ddef } if newpath } { /CRender { N } ddef } ifelse } def /n { N } def /F { _pola 0 eq { _doClip 1 eq { gsave _pf grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _fc /_doClip 0 ddef } { _pf } ifelse } { /CRender { F } ddef } ifelse } def /f { closepath F } def /S { _pola 0 eq { _doClip 1 eq { gsave _ps grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc /_doClip 0 ddef } { _ps } ifelse } { /CRender { S } ddef } ifelse } def /s { closepath S } def /B { _pola 0 eq { _doClip 1 eq gsave F grestore { gsave S grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc /_doClip 0 ddef } { S } ifelse } { /CRender { B } ddef } ifelse } def /b { closepath B } def /W { /_doClip 1 ddef } def /* { count 0 ne { dup type /stringtype eq { pop } if } if newpath } def /u { } def /U { } def /q { _pola 0 eq { gsave } if } def /Q { _pola 0 eq { grestore } if } def /*u { _pola 1 add /_pola exch ddef } def /*U { _pola 1 sub /_pola exch ddef _pola 0 eq { CRender } if } def /D { pop } def /*w { } def /*W { } def /` { /_i save ddef clipForward? { nulldevice } if 6 1 roll 4 npop concat pop userdict begin /showpage { } def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash /setstrokeadjust where {pop false setstrokeadjust} if newpath 0 setgray false setoverprint } def /~ { end _i restore } def /_rgbtocmyk { 3 { 1 exch sub 3 1 roll } repeat 3 copy 1 4 1 roll 3 { 3 index 2 copy gt { exch } if pop 4 1 roll } repeat pop pop pop 4 1 roll 3 { 3 index sub 3 1 roll } repeat 4 -1 roll } def /setrgbfill { _rgbf astore pop /_fc { _lp /fill ne { _of setoverprint _rgbf aload pop setrgbcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /setrgbstroke { _rgbs astore pop /_sc { _lp /stroke ne { _os setoverprint _rgbs aload pop setrgbcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /O { 0 ne /_of exch ddef /_lp /none ddef } def /R { 0 ne /_os exch ddef /_lp /none ddef } def /g { /_gf exch ddef /_fc { _lp /fill ne { _of setoverprint _gf setgray /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /G { /_gs exch ddef /_sc { _lp /stroke ne { _os setoverprint _gs setgray /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /k { _cf astore pop /_fc { _lp /fill ne { _of setoverprint _cf aload pop setcmykcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /K { _cs astore pop /_sc { _lp /stroke ne { _os setoverprint _cs aload pop setcmykcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /Xa { _?cmyk { 3 npop k }{ setrgbfill 4 npop } ifelse } def /XA { _?cmyk { 3 npop K }{ setrgbstroke 4 npop } ifelse } def /Xs { /_gf exch ddef 5 npop /_fc { _lp /fill ne { _of setoverprint _gf setAIseparationgray /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /XS { /_gs exch ddef 5 npop /_sc { _lp /stroke ne { _os setoverprint _gs setAIseparationgray /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /Xx { exch /_gf exch ddef 0 eq { findcmykcustomcolor }{ _?cmyk {true}{/findrgbcustomcolor where{pop false}{true}ifelse}ifelse { 4 1 roll 3 npop findcmykcustomcolor }{ 8 -4 roll 4 npop findrgbcustomcolor } ifelse } ifelse /_if exch ddef /_fc { _lp /fill ne { _of setoverprint _if _gf 1 exch sub setcustomcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /XX { exch /_gs exch ddef 0 eq { findcmykcustomcolor }{ _?cmyk {true}{/findrgbcustomcolor where{pop false}{true}ifelse}ifelse { 4 1 roll 3 npop findcmykcustomcolor }{ 8 -4 roll 4 npop findrgbcustomcolor } ifelse } ifelse /_is exch ddef /_sc { _lp /stroke ne { _os setoverprint _is _gs 1 exch sub setcustomcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /x { /_gf exch ddef findcmykcustomcolor /_if exch ddef /_fc { _lp /fill ne { _of setoverprint _if _gf 1 exch sub setcustomcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /X { /_gs exch ddef findcmykcustomcolor /_is exch ddef /_sc { _lp /stroke ne { _os setoverprint _is _gs 1 exch sub setcustomcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /XK { 3 -1 roll pop 0 eq { 1 exch sub 3 {dup 3 1 roll mul 5 1 roll} repeat mul 4 1 roll K } { 1 exch sub 4 1 roll 3 {1 exch sub 3 index mul 1 exch sub 3 1 roll} repeat 4 -1 roll pop XA } ifelse } def /Xk { 3 -1 roll pop 0 eq { 1 exch sub 3 {dup 3 1 roll mul 5 1 roll} repeat mul 4 1 roll k } { 1 exch sub 4 1 roll 3 {1 exch sub 3 index mul 1 exch sub 3 1 roll} repeat 4 -1 roll pop Xa } ifelse } def /A { pop } def /annotatepage { userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse } def /XT { pop pop } def /Xt { pop } def /discard { save /discardSave exch store discardDict begin /endString exch store gt38? { 2 add } if load stopped pop end discardSave restore } bind def userdict /discardDict 7 dict dup begin put /pre38Initialize { /endStringLength endString length store /newBuff buffer 0 endStringLength getinterval store /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store /newBuffLast newBuff endStringLength 1 sub 1 getinterval store } def /shiftBuffer { newBuff 0 newBuffButFirst putinterval newBuffLast 0 currentfile read not { stop } if put } def 0 { pre38Initialize mark currentfile newBuff readstring exch pop { { newBuff endString eq { cleartomark stop } if shiftBuffer } loop } { stop } ifelse } def 1 { pre38Initialize /beginString exch store mark currentfile newBuff readstring exch pop { { newBuff beginString eq { /layerCount dup load 1 add store } { newBuff endString eq { /layerCount dup load 1 sub store layerCount 0 eq { cleartomark stop } if } if } ifelse shiftBuffer } loop } if } def 2 { mark { currentfile buffer {readline} stopped { % assume error was due to overfilling the buffer }{ not { stop } if endString eq { cleartomark stop } if }ifelse } loop } def 3 { /beginString exch store /layerCnt 1 store mark { currentfile buffer {readline} stopped { % assume error was due to overfilling the buffer }{ not { stop } if dup beginString eq { pop /layerCnt dup load 1 add store } { endString eq { layerCnt 1 eq { cleartomark stop } { /layerCnt dup load 1 sub store } ifelse } if } ifelse }ifelse } loop } def end userdict /clipRenderOff 15 dict dup begin put { /n /N /s /S /f /F /b /B } { { _doClip 1 eq { /_doClip 0 ddef _eo {eoclip} {clip} ifelse } if newpath } def } forall /Tr /pop load def /Bb {} def /BB /pop load def /Bg {12 npop} def /Bm {6 npop} def /Bc /Bm load def /Bh {4 npop} def end /Lb { 6 npop 7 2 roll 5 npop 0 eq { 0 eq { (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard } { /clipForward? true def /Tx /pop load def /Tj /pop load def currentdict end clipRenderOff begin begin } ifelse } { 0 eq { save /discardSave exch store } if } ifelse } bind def /LB { discardSave dup null ne { restore } { pop clipForward? { currentdict end end begin /clipForward? false ddef } if } ifelse } bind def /Pb { pop pop 0 (%AI5_EndPalette) discard } bind def /Np { 0 (%AI5_End_NonPrinting--) discard } bind def /Ln /pop load def /Ap /pop load def /Ar { 72 exch div 0 dtransform dup mul exch dup mul add sqrt dup 1 lt { pop 1 } if setflat } def /Mb { q } def /Md { } def /MB { Q } def /nc 4 dict def nc begin /setgray { pop } bind def /setcmykcolor { 4 npop } bind def /setrgbcolor { 3 npop } bind def /setcustomcolor { 2 npop } bind def currentdict readonly pop end /XP { 4 npop } bind def /XD { pop } bind def end setpacking %%EndResource %%BeginResource: procset Adobe_cshow 2.0 8 %%Title: (Writing System Operators) %%Version: 2.0 8 %%CreationDate: (1/23/89) () %%Copyright: ((C) 1992-1996 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_cshow 14 dict dup begin put /initialize { Adobe_cshow begin Adobe_cshow { dup xcheck { bind } if pop pop } forall end Adobe_cshow begin } def /terminate { currentdict Adobe_cshow eq { end } if } def /cforall { /_lobyte 0 ddef /_hibyte 0 ddef /_cproc exch ddef /_cscript currentfont /FontScript known { currentfont /FontScript get } { -1 } ifelse ddef { /_lobyte exch ddef _hibyte 0 eq _cscript 1 eq _lobyte 129 ge _lobyte 159 le and _lobyte 224 ge _lobyte 252 le and or and _cscript 2 eq _lobyte 161 ge _lobyte 254 le and and _cscript 3 eq _lobyte 161 ge _lobyte 254 le and and _cscript 25 eq _lobyte 161 ge _lobyte 254 le and and _cscript -1 eq or or or or and { /_hibyte _lobyte ddef } { _hibyte 256 mul _lobyte add _cproc /_hibyte 0 ddef } ifelse } forall } def /cstring { dup 256 lt { (s) dup 0 4 3 roll put } { dup 256 idiv exch 256 mod (hl) dup dup 0 6 5 roll put 1 4 3 roll put } ifelse } def /clength { 0 exch { 256 lt { 1 } { 2 } ifelse add } cforall } def /hawidthshow { { dup cstring show _hvax _hvay rmoveto _hvwb eq { _hvcx _hvcy rmoveto } if } cforall } def /vawidthshow { { dup 255 le _charorientation 1 eq and { -90 rotate 0 _fontRotateAdjust rmoveto cstring _hvcx _hvcy _hvwb _hvax _hvay 6 -1 roll awidthshow 0 _fontRotateAdjust neg rmoveto 90 rotate } { currentpoint _fontHeight sub exch _hvay sub exch _hvax sub 2 index _hvwb eq { exch _hvcy sub exch _hvcx sub } if 3 2 roll cstring dup stringwidth pop 2 div neg _fontAscent neg rmoveto show moveto } ifelse } cforall } def /hvawidthshow { 6 1 roll /_hvay exch ddef /_hvax exch ddef /_hvwb exch ddef /_hvcy exch ddef /_hvcx exch ddef _lineorientation 0 eq { hawidthshow } { vawidthshow } ifelse } def /hvwidthshow { 0 0 3 -1 roll hvawidthshow } def /hvashow { 0 0 0 6 -3 roll hvawidthshow } def /hvshow { 0 0 0 0 0 6 -1 roll hvawidthshow } def currentdict readonly pop end setpacking %%EndResource %%BeginResource: procset Adobe_shading_AI8 1.0 0 %%Title: (Adobe Illustrator 8 Shading Procset) %%Version: 1.0 0 %%CreationDate: (12/17/97) () %%Copyright: ((C) 1987-1997 Adobe Systems Incorporated All Rights Reserved) userdict /defaultpacking currentpacking put true setpacking userdict /Adobe_shading_AI8 10 dict dup begin put /initialize { Adobe_shading_AI8 begin Adobe_shading_AI8 bdprocs Mesh /initialize get exec } def /terminate { currentdict Adobe_shading_AI8 eq { end } if } def /bdprocs { { dup xcheck 1 index type /arraytype eq and { bind } if pop pop } forall } def /X! {pop} def /X# {pop pop} def /Mesh 40 dict def Mesh begin /initialize { Mesh bdprocs Mesh begin /emulate? /AI8MeshEmulation where { pop AI8MeshEmulation }{ systemdict /shfill known not } ifelse def end } def /bd { shadingdict begin } def /paint { emulate? { end }{ /_lp /none ddef _fc /_lp /none ddef /AIColorSpace AIColorSpace tocolorspace store /ColorSpace AIColorSpace topsspace store version_ge_3010.106 not systemdict /setsmoothness known and { 0.0001 setsmoothness } if composite? { /DataSource getdatasrc def Matrix concat currentdict end shfill }{ AIColorSpace makesmarks AIPlateList markingplate and not isoverprint and { end }{ /ColorSpace /DeviceGray store /Decode [0 1 0 1 0 1] store /DataSource getplatesrc def Matrix concat currentdict end shfill } ifelse } ifelse } ifelse } def /shadingdict 12 dict def shadingdict begin /ShadingType 6 def /BitsPerCoordinate 16 def /BitsPerComponent 8 def /BitsPerFlag 8 def end /datafile null def /databuf 256 string def /dataptr 0 def /srcspace null def /srcchannels 0 def /dstchannels 0 def /dstplate 0 def /srctodstcolor null def /getplatesrc { /srcspace AIColorSpace store /srcchannels AIColorSpace getnchannels store /dstchannels 1 store /dstplate getplateindex store /srctodstcolor srcspace makesmarks { dstplate 4 eq { {1 exch sub} }{ {srcspace tocmyk 3 dstplate sub index 1 exch sub 5 1 roll 4 {pop} repeat} } ifelse }{ {srcchannels {pop} repeat 1} } ifelse store /datafile getdatasrc store /rdpatch168 load DataLength () /SubFileDecode filter } def /getdatasrc { /rdcmntline load /ASCII85Decode filter } def /rdpatch168 { /dataptr 0 store 49 rdcount 4 { dup {pop srcchannels getint8} if dup {pop srctodstcolor dstchannels putint8 true} if } repeat {databuf 0 dataptr getinterval}{()} ifelse } def /rdpatch3216 { /dataptr 0 store 97 rdcount 4 { dup {pop srcchannels getint16} if dup {pop srctodstcolor dstchannels putint16 true} if } repeat {databuf 0 dataptr getinterval}{()} ifelse } def /rdcount { dup 0 gt { datafile databuf dataptr 4 -1 roll getinterval readstring exch length dataptr add /dataptr exch store }{ true } ifelse } def /getint8 { mark true 3 -1 roll { dup {pop datafile read} if dup {pop 255 div true} if } repeat { counttomark 1 add -1 roll pop true }{ cleartomark false } ifelse } def /putint8 { dup dataptr add /dataptr exch store dataptr exch { 1 sub exch 255 mul cvi databuf 2 index 3 -1 roll put } repeat pop } def /getint16 { mark true 3 -1 roll { dup {pop datafile read} if dup {pop 256 mul datafile read} if dup {pop add 65535 div true} if } repeat { counttomark 1 add -1 roll pop true }{ cleartomark false } ifelse } def /putint16 { dup 2 mul dataptr add /dataptr exch store dataptr exch { 2 sub exch 65535 mul cvi dup 256 idiv databuf 3 index 3 -1 roll put 256 mod databuf 2 index 1 add 3 -1 roll put } repeat pop } def /srcbuf 256 string def /rdcmntline { currentfile srcbuf readline pop (%) anchorsearch {pop} if } def /getplateindex { 0 [cyan? magenta? yellow? black? customColor?] {{exit} if 1 add} forall } def /aicsarray 4 array def /aicsaltvals 4 array def /aicsaltcolr aicsaltvals def /tocolorspace { dup type /arraytype eq { mark exch aload pop aicsarray 0 3 -1 roll put aicsarray 1 3 -1 roll put dup aicsarray 2 3 -1 roll put gettintxform aicsarray 3 3 -1 roll put counttomark aicsaltvals 0 3 -1 roll getinterval /aicsaltcolr exch store aicsaltcolr astore pop pop aicsarray } if } def /subtintxform {aicsaltcolr {1 index mul exch} forall pop} def /addtintxform {aicsaltcolr {1 sub 1 index mul 1 add exch} forall pop} def /gettintxform { /DeviceRGB eq {/addtintxform}{/subtintxform} ifelse load } def /getnchannels { dup type /arraytype eq {0 get} if colorspacedict exch get begin Channels end } def /makesmarks { composite? { pop true }{ dup dup type /arraytype eq {0 get} if colorspacedict exch get begin MarksPlate end } ifelse } def /markingplate { composite? { pop true }{ dup type /arraytype eq { dup length getplateindex gt {getplateindex get}{pop false} ifelse } if } ifelse } def /tocmyk { dup dup type /arraytype eq {0 get} if colorspacedict exch get begin ToCMYK end } def /topsspace { dup dup type /arraytype eq {0 get} if colorspacedict exch get begin ToPSSpace end } def /colorspacedict 5 dict dup begin /DeviceGray 4 dict dup begin /Channels 1 def /MarksPlate {pop black?} def /ToCMYK {pop 1 exch sub 0 0 0 4 -1 roll} def /ToPSSpace {} def end def /DeviceRGB 4 dict dup begin /Channels 3 def /MarksPlate {pop isCMYKSep?} def /ToCMYK {pop _rgbtocmyk} def /ToPSSpace {} def end def /DeviceCMYK 4 dict dup begin /Channels 4 def /MarksPlate {pop isCMYKSep?} def /ToCMYK {pop} def /ToPSSpace {} def end def /Separation 4 dict dup begin /Channels 1 def /MarksPlate { /findcmykcustomcolor where { pop dup 1 exch ToCMYK 5 -1 roll 1 get findcmykcustomcolor 1 setcustomcolor systemdict /currentgray get exec 1 ne }{ pop false } ifelse } def /ToCMYK { dup 2 get mark exch 4 2 roll 3 get exec counttomark -1 roll tocmyk 5 -1 roll pop } def /ToPSSpace {} def end def /Process 4 dict dup begin /Channels 1 def /MarksPlate { isCMYKSep? { 1 exch ToCMYK 4 array astore getplateindex get 0 ne }{ pop false } ifelse } def /ToCMYK { dup 2 get mark exch 4 2 roll 3 get exec counttomark -1 roll tocmyk 5 -1 roll pop } def /ToPSSpace { 4 array copy dup 0 /Separation put } def end def end def /isoverprint { /currentoverprint where {pop currentoverprint}{_of} ifelse } def /version_ge_3010.106 { version {cvr} stopped { pop false }{ 3010.106 ge } ifelse } def end end defaultpacking setpacking %%EndResource %%EndProlog %%BeginSetup userdict /_useSmoothShade false put userdict /_aicmykps false put userdict /_forceToCMYK false put Adobe_level2_AI5 /initialize get exec Adobe_cshow /initialize get exec Adobe_Illustrator_AI5_vars Adobe_Illustrator_AI5 Adobe_typography_AI5 /initialize get exec Adobe_ColorImage_AI6 /initialize get exec Adobe_shading_AI8 /initialize get exec Adobe_Illustrator_AI5 /initialize get exec %AI3_BeginRider currentpacking true setpacking %%BeginFont: CoreTTI2k %!PS-AdobeFont-1.0: CoreTTI2k 001.000 %%CreationDate: 11/7/00 at 8:46 PM %%VMusage: 1024 33176 % Generated by Fontographer 4.1.5 % 30 em space before and after for a-z and A-Z, for math variables. en space before and after basic math operators. opt 0-9 for sub and opt shift 0-9 for sup. sub for A-Z needs nudge to left. Last Update May 27, 98. Math Pi compatible. % ADL: 800 200 0 %%EndComments FontDirectory/CoreTTI2k known{/CoreTTI2k findfont dup/UniqueID known{dup /UniqueID get 4415770 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 20 dict begin /FontInfo 16 dict dup begin /version (001.000) readonly def /FullName (CoreTTI2k) readonly def /FamilyName (CoreTTI2k) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -133 def /UnderlineThickness 20 def /Notice (30 em space before and after for a-z and A-Z, for math variables. en space before and after basic math operators. opt 0-9 for sub and opt shift 0-9 for sup. sub for A-Z needs nudge to left. Last Update May 27, 98. Math Pi compatible.) readonly def /em 1000 def /ascent 800 def /descent 200 def end readonly def /FontName /CoreTTI2k def /Encoding 256 array dup 0/NUL put dup 1/Eth put dup 2/eth put dup 3/Lslash put dup 4/lslash put dup 5/Scaron put dup 6/scaron put dup 7/Yacute put dup 8/yacute put dup 9/HT put dup 10/LF put dup 11/Thorn put dup 12/thorn put dup 13/CR put dup 14/Zcaron put dup 15/zcaron put dup 16/DLE put dup 17/DC1 put dup 18/DC2 put dup 19/DC3 put dup 20/DC4 put dup 21/onehalf put dup 22/onequarter put dup 23/onesuperior put dup 24/threequarters put dup 25/threesuperior put dup 26/twosuperior put dup 27/brokenbar put dup 28/minus put dup 29/multiply put dup 30/RS put dup 31/US put dup 32/space put dup 33/exclam put dup 34/quotedbl put dup 35/numbersign put dup 36/dollar put dup 37/percent put dup 38/ampersand put dup 39/quotesingle put dup 40/parenleft put dup 41/parenright put dup 42/asterisk put dup 43/plus put dup 44/comma put dup 45/hyphen put dup 46/period put dup 47/slash put dup 48/zero put dup 49/one put dup 50/two put dup 51/three put dup 52/four put dup 53/five put dup 54/six put dup 55/seven put dup 56/eight put dup 57/nine put dup 58/colon put dup 59/semicolon put dup 60/less put dup 61/equal put dup 62/greater put dup 63/question put dup 64/at put dup 65/A put dup 66/B put dup 67/C put dup 68/D put dup 69/E put dup 70/F put dup 71/G put dup 72/H put dup 73/I put dup 74/J put dup 75/K put dup 76/L put dup 77/M put dup 78/N put dup 79/O put dup 80/P put dup 81/Q put dup 82/R put dup 83/S put dup 84/T put dup 85/U put dup 86/V put dup 87/W put dup 88/X put dup 89/Y put dup 90/Z put dup 91/bracketleft put dup 92/backslash put dup 93/bracketright put dup 94/asciicircum put dup 95/underscore put dup 96/grave put dup 97/a put dup 98/b put dup 99/c put dup 100/d put dup 101/e put dup 102/f put dup 103/g put dup 104/h put dup 105/i put dup 106/j put dup 107/k put dup 108/l put dup 109/m put dup 110/n put dup 111/o put dup 112/p put dup 113/q put dup 114/r put dup 115/s put dup 116/t put dup 117/u put dup 118/v put dup 119/w put dup 120/x put dup 121/y put dup 122/z put dup 123/braceleft put dup 124/bar put dup 125/braceright put dup 126/asciitilde put dup 127/DEL put dup 128/Adieresis put dup 129/Aring put dup 130/Ccedilla put dup 131/Eacute put dup 132/Ntilde put dup 133/Odieresis put dup 134/Udieresis put dup 135/aacute put dup 136/agrave put dup 137/acircumflex put dup 138/adieresis put dup 139/atilde put dup 140/aring put dup 141/ccedilla put dup 142/eacute put dup 143/egrave put dup 144/ecircumflex put dup 145/edieresis put dup 146/iacute put dup 147/igrave put dup 148/icircumflex put dup 149/idieresis put dup 150/ntilde put dup 151/oacute put dup 152/ograve put dup 153/ocircumflex put dup 154/odieresis put dup 155/otilde put dup 156/uacute put dup 157/ugrave put dup 158/ucircumflex put dup 159/udieresis put dup 160/dagger put dup 161/degree put dup 162/cent put dup 163/sterling put dup 164/section put dup 165/bullet put dup 166/paragraph put dup 167/germandbls put dup 168/registered put dup 169/copyright put dup 170/trademark put dup 171/acute put dup 172/dieresis put dup 173/notequal put dup 174/AE put dup 175/Oslash put dup 176/infinity put dup 177/plusminus put dup 178/lessequal put dup 179/greaterequal put dup 180/yen put dup 181/mu put dup 182/partialdiff put dup 183/summation put dup 184/product put dup 185/pi put dup 186/integral put dup 187/ordfeminine put dup 188/ordmasculine put dup 189/Omega put dup 190/ae put dup 191/oslash put dup 192/questiondown put dup 193/exclamdown put dup 194/logicalnot put dup 195/radical put dup 196/florin put dup 197/approxequal put dup 198/Delta put dup 199/guillemotleft put dup 200/guillemotright put dup 201/ellipsis put dup 202/nbspace put dup 203/Agrave put dup 204/Atilde put dup 205/Otilde put dup 206/OE put dup 207/oe put dup 208/endash put dup 209/emdash put dup 210/quotedblleft put dup 211/quotedblright put dup 212/quoteleft put dup 213/quoteright put dup 214/divide put dup 215/lozenge put dup 216/ydieresis put dup 217/Ydieresis put dup 218/fraction put dup 219/currency put dup 220/guilsinglleft put dup 221/guilsinglright put dup 222/fi put dup 223/fl put dup 224/daggerdbl put dup 225/periodcentered put dup 226/quotesinglbase put dup 227/quotedblbase put dup 228/perthousand put dup 229/Acircumflex put dup 230/Ecircumflex put dup 231/Aacute put dup 232/Edieresis put dup 233/Egrave put dup 234/Iacute put dup 235/Icircumflex put dup 236/Idieresis put dup 237/Igrave put dup 238/Oacute put dup 239/Ocircumflex put dup 240/apple put dup 241/Ograve put dup 242/Uacute put dup 243/Ucircumflex put dup 244/Ugrave put dup 245/dotlessi put dup 246/circumflex put dup 247/tilde put dup 248/macron put dup 249/breve put dup 250/dotaccent put dup 251/ring put dup 252/cedilla put dup 253/hungarumlaut put dup 254/ogonek put dup 255/caron put readonly def /PaintType 0 def /FontType 1 def /StrokeWidth 0 def /FontMatrix[0.001 0 0 0.001 0 0]readonly def /UniqueID 4415770 def /FontBBox{-20 -250 1190 868}readonly def currentdict end currentfile eexec d8061d93a824650eefe2785f13cd28a8a226cfb75c073a18612be9489bc742ecbc9bb9ecbcb2fc8bc626a843ddb9a6ad99a6c6e3ed60b625a64883accb7959375d71da9bc68d812f90e4114d1a583e0eb174e66568d7b4e36ccfe1adee64c9c93a32d193b8e71ebcabc27b9529aa98e46d6e812d79babc1747fffb1174d378 c19a80248a13aab64f5b729cc5a4d7e1226b75fe04dccb771059961eba8b3d37d4296589518a31572df20a5ae15c13016cb12a184d944803e95caa3d64e1097974d613e275e79074d0c1850e9fc92ec0602043125c79bce15f7692434ccfae4a39246eb809794869522d32f356bd31d591b6aa3537b0db7de4c633e705471b 56cb1bdc99107c070f33f914ce4671a58cf773db3450f4e74cba3acbae6ad87664e91214b0a6501af032fc3ad666785c407792f79bbe0e7fc11f1ed90df4cc87eea09bec89b68e5dc6af3f9671a3c93a52fc6bc68098ae41d05978b27d285b097590d209ddadcc6f1a275574f9adb94a570f7f54f8a038afe020e0ec97f89f d662f86bc4cf3eccafc8bd6ae67b62af43d64c5c2bcd21b95a55893a0406276c1a1b8868078798227abb6900dc579830fff66aa174b8804a4573c0dfbea5001e605af17f72b90ccecb154efd0e0dbea7b5b47aad3522a68f822806b62ac3bf2119b2bb6e61a70fee7914cae4b2b554e726171a1a3b15e69aa48740e9465ce5 2b1b71988ba321a1162c43a856a0600a6f656817681ecf1c1170f39aaf0206c49e614af62021885050b33e1fec3d6af972505c1539adc6765e35e7964c06b9ec4f0dc2b8c1a9b7398e821db818806d61168ac097d966b88976b393f2cca958b4cb2e752e42aa3faf157e41c45769a57937b98d076b3db68961fe2531eac4c7 840849920886d3f01a029033363b567a55e004031ba2f914641fd670925a3e8a706efcbc990cf0d269fd87c8233d8a94fdf0aaf0946a618efdf7ceb7daaea2871bbb8cff68a5365d6734d5d4d9d9a0c9e20c27270c7340c8e4ea4915899bf1a2b67b4e6859ce217eed1da5a4cdf6017e485c88bcb524ec145153066e0faf57 2c2aec3902b7c6b275f70089dcde09e9d7874ef2c7920a2b4f454b2f7cb7870bbaac674bdef3f3ae569f03618d6bd6a89a9f9557f32f2544c65a7218af09d89f5ba716a6de215efcf3048e4b42d5edd4de8501a9e367ef85e9bc4050e83fbe0e3c93efe5c87259085392e69f1e527406c93201842c846ef9cc6aa525e63b9d b686a91bb937a975f2a4863388d9b373a099e732074d2fd243b0378ae86e109ae457aa9e541125dfe0840814f7a42d3ce7a7b6ee074f0e2c2e9464c81cdafed01b26b9bdb9528913fc0efd9252d88005e0720eccd65cf6c3e4ea6f13f377e7b3d53fb423587628cddced96166245a8e78a1d1d5e62a860c678b72bcd20bf9b 4ceca76da93838aa2dddce9069f162bdd2958c53f28427a4ab4306fb506e7ae780e8614940fafde28f6ccd9a02e155ea6dc39b86e38180ed4c433ba3215e9589439f728d188c2b1dbd712af1998ebe7e69443c913ff21d450e360b5a783b41f4945055d9a91567abf5e2dfae32b1af82049396532635b8e9698ba4ad9a0b88 e391030c50f71ca58b21b16dbd3188ddaeb6643b19e99524f43249fc80d67f16b256577e035abbc7c891aeb6481f3d6048ee3b6131bf2b0fc17976df595582ed5e8eaaf32591a479652552c41810c74509002774d56665f191aaf62edb8b47751f29bd200705a7a5a6b5e76839d169ae47479c2d3d55a9d81ebdb6e091a156 0465578f38cc59c5363b768b9848811bc6d7d64d0704c30dbbc10ff11298b7491b91777f679927d5f963675608a56b75992d4a9df8156637930911be671121f68ea7f9efaf62ade22403433cd6bd31ff505fa60ac7fdc3f121f46178c0f9402c969f199bae8962776793df275d71331c072bfb9868afccc75bea8fce800811 9edd2e1e85ead892ae38f2c7108af408029033a2f8c9ad9f88e70553231e6fba660f8167bbec8c09c57c5a259689d59f44ccdf72f3630b2ade40550e220798b5f90aeeff509b83c2157f283fb8b409383c9cb83cdc60694eae1c5cec75f5176d8d1b6db268b0531f5d8c021c7a0180e3c3fcb65385b37d47e497f5437ebea4 dcb1e4549089e4e99dc12983d777cbe13000df4224eab53b2204350e983ea31f291e630355d2f32f84842ff91c54d51e137862a0a953f845cea933d45f3892a54d21a8e804829d774ed173bde0af43c1626621aad4d319a869de3d8413b7fbdb8a6a8120403bda4caffe3d1ffb7261835f6db642052812f614ee2f67f2dd2e f3099dfb4fe6301584c7b98989676787d499fc16fbc1949ad4728512a296af2f3a4a9e5452f36303bd5a2cb56ecc5938499abea2b92015f05f1bca82f6be0bc3a66284a8971b3cb37925e215638608dfc52e7067733ef9d0880133ed248aaabcd990b55f076e39b611178b736c3515fc45683bcab2a82e417744f2985cf776 84b3bc20178396bebd83ac04115632d6cea58604e84489bd59058fae5c1e50d3f5393858248eed60a7dd4e8d449f3e3a516d83ebe4067e979986f558cefcfa47ca4c243e8e77127c869fccb5754ae916ec77b6efc4a11e964bb75a9e8f94f5c3696e2387f514f4038d03233bfc8de50535d3365782767846cf67eb8080c2ab db2b71db26f75c4fbc4a66850c49317b5da373789ad8838805bc20d64c17d8411de90b3a55784f950240d8d8a5138237c0e0be911649d2232bd634fba2633d07c452e81e340ba18653ce37202cd6152b9cb7c52b321530c7f5d0f75fb5800b1e72a89b2f46f123de33a2a15a5380ab3c73ca1a1ad5ad85d3aef94b4d22e4c9 216c58967d01b23d9d987c64a6dae8df7a76f2de8a0e99e2a2059e5296bf67e65443dca555153019e0bc0153b5b7c7894544e008d256b83fe174dbd36e93afc0dc75626421eb5c09098971a67b5adbccee4bf4fefeaeac3cdc60faceeae1bd889ca3c8a7f3d344272aab06c793b1ccbeef4d6c138889e27cf7f81ea28fe737 aacf67ccd36b4561ada5da440f651450ebd05e2653a3f4d6e73920122b90b993fdece1e318e3af999ef288d8b0f0d3ca872cebd62b23bcf5087dec6c5357d70476dd49fb80d44d9895cb4edcf9085815faa666d849a99d8ec47a536e5a25a3b323da7374fee5a2472d935ab946c58a35ed87cf06de234fcbd984eb222c3460 ce30023c313fed96c0c21e2a2192c4c34c8925bc874451a07874b990df4333617cf84fba63fe9da98ed25d3fdb5008fc4892afbdeb56fb64e655e9ff702702863941b4be8edcaa9eee79392b3600e21a63518c13db5194ced922c53740f54fa2bc5e8a5d79929b3ef11d6b63879cd175ba96b8d28dfa486b7ba086120725c0 3b403317c3fa07ebb7e070ecb4d2810e21eaa6001198185ee5bac601504b55cf19bd4304b44e8a06ba7b735abe7a5c6bd49ea5c7996fa442707a19b7a49d3bc39c9f1592b8eb553e4a024d0063e169acf280e988cd7b26434ad85eb1439b3dac330de1db4bb24522eb8b91d1934240d0a69b7f92abb1ae4d0c5026bb2cb5b2 f801eafa2c6ba1cdcb4799aeba705078051a2b315c6c626455ea49f71a884c7576b846ceff0532576f233cc9a9674bad16833273af061b377b6e458536f48a17bc9319dbede65735ca726740317a26b702c5c2c3514475d163a27abd2d2ce9cc0db8319917d528674e0c244654ab491309794f40e1ec0f75614f4fe36ca89b 4a297261e259d67ffd9db7ce6935d8fee5a830a82865379565a700ee915941aff9d14849934453ab0247ce576b95dbf93c97d7a5b7523c8813d39351213da3cd71a951113512988778d24aab22143c1c03f171a1568f7276b39df66e823a77efac23ef23f39bc7fcf616100f70e1f7aa0260d181fddcb5329e617d05fbd5ac 6d99f546d2c4a517570fc8278b5e3d7ab94fd4f3e46fa5626443189145e97bbbb186b8c815ca0acdccf4a25c4c5bbe1a822bc082fe6d9f8302848edff90a9b18047663f17c9c2f9e6cd3af1b155b609d1aed56c791ecb6589b18cc534cf13a1e20c61120833b21fb50e6e5a005c10aa1748662bdb6f215bfdcb9173543af0b b4d77ce5d112382c6c40c07869b988ed9984a873a5909cb435101064713300a1cc1440e6edd8c5fd83bfbc7e02e7cab66689a1bf48f41e1d36f6cf505cfce07cd6b2e10bc22f3c1b731ee51f4e8d661361f1906cfacdc9a190808a1cfb9b0e221f3b7135ab45e45821a6ab6610d8c6d2a9b96989f47253cd6d386d2b8a7dd5 f07dc2e30977b62c13667848e173a4d0d15bf232de6ee11a27623712b7ebe72fc27edf4c9b8d19fd941febbac52b964b39df574088d0dc13b924db248c1d4ecd9bc6fac0c9b4b6283010a29be1bddca21137956b40832e6b26cb940306c4ea94ef72d6a2478f960e5b687c3967a5cecd138fabc2c8aaa65fdfb3da68bbba8b d800ead45dd4a3f0cbc9973054ac32c36ca1879e9e94e19ba2e430fecdba0e550db950854fd71322c50d681285669026afa396a1855553b12bd40c61c963459e6e85152e101a10015c6a602803c73ce5f50399180287213ce988445a0e83bd4141aee596719d6b3d6757227a0208b1353ab59d663fe7b5062a4ba90407544a c5da2927db04e83cf9c5dda9705244573a389e4cef6890eafac38239c207419ec1500d667e673a8c0cf60c7e496756370fe34c37652dfc582a058dea0a0f5d9fc0b350e40af19e5991cd8194fd36abd9ad528e4823884fc41f3d463d69897f0a4da0f79bc5f13f289f917e55a5a8d62c3769d775ca32db8beb9ecd1e84f4bb 5401458a9e745628d056ea96494ff207de79c55ee75f0731bd105ff2a442a8c9e80b42245537481a8eb35599ce826f7a46dc27d4a519b3a5efe82bcf1e5887beb75494efea24f452d7d4993d6bb7131d7c5fd51654ab849bf1112f6d685363a53f7077bac898185e6b5557ab4e7e8c8c23e5a7e1527549d0e67dedf780199e 0c469b087ad29b96615ba73e8399773ef13931e7dec0f42b6c12d4690b0a1e6311f3687fca067426731a3ac8fbe660f7e1631e8cf2ed5c73e6b3557ea7779d13269a5b2cf8a072fd68c4a0c749d66d9fdd091bf279642305f566d20eccd46c5a7ae7cce4de262d2cf29e02d0a811f39c77ad72176311f92d22b040eca7cc65 fbd46185cefadd51f1360c54d9335aa468014e7736247d8c7d54f610a34fbb97253d5d7f177d2074898e31a4b36b5451e3eafd20f24aaf91747a847a0f65e64054b2b7870ae6f7e4fdbfb6bcc6b34450b3ff318efbe8efdd50cdd38601b9491333bfbfabb3029dc791f3aa9269097953be59e9b2d67609abae5eb367dbe773 0e366dcb68d4a8b49bf369e480d6c72585eb3d3d53582686f91e88a8f9f57982c0a173d81c8176fe43ec9e096743359b77fdb9e3fe44339ca54a625e628c5cd332d2497dbd453de3421966d7743e3dfef3b9c777c946a696d440ee0fa4da3a4055e037444ea50dd535364dc08b091c6520cf2a549a7faf2fbc0bece55aac22 9722425160ea422caa9a9d63a598e8b3af81a4c06226ce1076e9fd4e574e70775b60af7c1bb84e0dba4780d95e420c550dc2c9012638281d1687cefbd38588171f7d3d49030e67587412e75bb3e9f1469fdf437edd38f49b0766393f15d344a20c6fba637553d00a023f3711180d6a8747cd09d50ce1688ebe8e5a949c8779 df79e20ff7df3a38ea6dad68625f1f69cf9a58b693c03dd48c13d9c38fd69ab6f53897a03598e6069c2119adf835116abf750149a6bb77031e21982bbbb7dec9bb16da55158f2f7a8a49e4e28c7869d48ae5c2df0429a6f3d14ca9683e3a5e6da11b5c1bd3290ffbb40bcea18edf01a20dd8a83fddb0c3704a82e434d03eea 5aafe94a22343f82fcfd1423afebdad29e6ca81b38248f9036b5f9e0ca634606e29633c311abe5443634d4fb3f24fe6e6fc69862bef7b484a74f34fe3da97b50b882221a03abdcb60008a2ea24f162a31d53691d5cc1087d1233729b166e0ff1c11b0d92cc7bf43e065e4e773d5d375e2e4a46122eda7ea300a5414c0c3afc 1a50ed85e855c5dd114a72f0ab06d6fae4ba15f32412a4baa22a2d3b1b98309ecfb9f8f48a1f162bb967eac6708033f718b8f006bc551202d9d972d217ee9537cc4d063bed24060b81d73774967fbd380e148a0d4778a27127798afc066b473ec9b0c5a614cb819fa57b5e0ce7e373e80423d0b5bcbc63dc8e013d9e398d10 58fd04ed2b5297d10993ac3c9dc735204dc8efcbdf608aa42a1719e4c4b9ae642b0691f97d96cc6435fb72cacbd285c90f838e91c34a7e221c073c5caa227a09126474a5ab7c65048f74cf3f9ed68c9ce7156a4adc10c234b497a10df9eebda6e11342fedc32fbb28ea88a49861cb3fc96290e0b43b0f3763e735e69188b3e 38f5b96e0edf4014351e332550cda072c25cd8cf546209304cf8432d8864a485e4ebaaff37cccfec19908466d963940f7af760b57de3e39ce4a29733f3f5fd9747bdde16cf475af24fe93b2df5f6bd7992eb6aab9c18876025fefa6917b90f860fdbaf7cbcfca7e5f4aed339a8628a007240184b31daf19b630695188c2f21 6b5902d4b384f82d2952c64477d229f99bb6355d42ae0951851d45fbccb0363d2ee5529179909c238a2ac078c4b543b936731ebf59365806a1d67a8138bb76aee02f84e09980ecaab40a240fd85e5024b3a286cd78850d3854f89260d8ecf1456ff46c20ddfb68298b5531bab764508d7f3eb41be3bc033125c016838db3d6 c1346e5423d7855d844b141e845b7df2f370fb875ade876353dfae59f631f83f192e3047d7d041d25d49114561885be97940b99bb7f47abcf9a417fa2acee0bb804be0a72b52def30a60780493f3a7a896a338f663ea7d352f0a875c80eb9a5ed1ea7a0b5620c5d2749ceb0a24c0a02b3c08134744a94ac8092d805b9f9c08 a508aa6ba372c264dfec115a2f3d870604ac0099eaaff87c75e1d26954a15a1e002f0829316d7364cde2b3c34a809ff72a0f9fa3332e19262b1c3262423045eee2530d7c2f6a88394add6bbe4098baa6155cb2dd09fd38b658053e466d4c13b1d8c1621020e91f83b8932d69adf517d5e9718dc8050e9281c690c39b5cf25d 4e367a41de636a8da3db2d4b5156e0a071863dd185bed2eec685e12e68f30afd3b58d61bbd3cb5532e77cff8b121a21281283136158d6898caa23ab1cde7657b96c2fd25df828b5c48a0da828232c2cdb26e0b7005a753d4a741e9fc226b0c72de2ce51164f0961fbd5002404858b9c6b27eeace58b7060fa6022535b167c0 9e637e1b0668a23740d6373b1380f02107781e87f2c71ad61422726d2a3c5b83be381dbb5a1425e6e1b3d4966d0b9ae0c1c0f7ad1ac56d9a8923c9045d01440066eebb28c8e6b4b6a0b7eb11b3bb3873a68c99e13ea811056d8698056dc4d724b81316db36abdb6708a85fa8feea17258f8fef11e4cdfb8ee0b65869dc94c0 843b751051603932ce78cc2df6901f286316cc1fd0be3dd1ed64ccb6631e0cd623eef9a79f4dcb0582a4b71762140ea7b9d072bdc86f08edabe3ee538f6ed36ec1f5037efd8db31fa2816dbd89b7d438f5fb672c69ac6d04e18623123af8b8394420fea23a8493540f76fb72da684e324d670fbfef9f8ffd037a724887293d 0f52d44b3b359ef6e5166930092e505cdb52ad23b3b980960fc39442eb2f461346dea66eb2c57f105a502a5780e866f8cd1eb5972f5e229f48b1a3f37d9872b3ee449f72a49ded67e32cefea7996cc630bf8a2ffd35090688f0ab92afe90d6c8d0f24690a35492adb76ac32bb45e7158608d5a1e092b663bccbd69a0835475 0e151fb402a981555e843c6e79578f23f8afcb5bc0e149bef56567f631b6ce2323c4a46d3a3f8586f2ce85d728d73976009b6baa686732ef9048960384539d179407640c52aad2857af06e570d9fd982dd6856572195046750343d55b3ec7d94258069db8ba09974382b441123617f0755bd92285ac3ac600caf707477cb5e b50e69cfb2f8f553fa1f5ea634e4aedf869e57f159f7ca4ca3313c538eca666a1218eacb68475c5d1bf2ef36d7b9f710cedfeac0a71f4f57cb8c77b68417e02fe6b11c64b0572503ef7002e6afeb0536b54f06877c75b5a3d643d62b0cd8a60ef3bddd415d27d12f3afcd3dffc30a18b7ea0e1626c6184fdaf1fc0470a7f2f 0cbd35c89b51feaf128b3c3bf2794aea25b0cbe21f0090534e15c241671d7b60d80047bed5ae5fe4775504e664a715706d8fbf6bd78735851d1a4fcfb44a29bc4a280294124fb3bbae16b12506202caa0c9a5cf9246c8829c2b614e0c8918a2b6030ee56532af0153ab812c274da1b05738275a6c0ba0af22b6382de80841d 78b67565294c01a885b611754ea0ba4a3c3ee3c053e54875a78a001b53f7b26ac3ab724cdc48e2c5a14a27ddb5e909eac5e41c2bd5ce5848327cd96258bff7253117fb479cfe5c3670958b84c8b798f99449f3818c3c1d10a4d694856f666ae25498811ad47074ccc2317ce438c8eaae2911c8c9fb75f81789d1e8ec4313ed f4245e109f537ec050a51024666b5081022680bd97433a67dac58bbd1f013c8849694c8b625cb584f1469edf7a694e78d833ab3d4564a886575e9cba3559558f95ce1d4b061b26f274e1ad23253bd63c05de0776ce09fe3b93150b4065ed8c9ee9795758170c216d007c31b1ba9e9086ceaf9f7dd7d43e939cdc45cfcecd15 f6c0efd9a95f7dec9baec0a512f481a6cde6cd1f2289f27383408996e671446fda1a39e04ecf51e4a96484012597b519fd3b882632d7c919f2572329541ef268b6bd1bff52778ba2743abee24c4fb2bf7ecb9ba6afbd624004acecdc3a9ec3a277cb3df18c7d3f7711e3caed6d4557d11541676111b6a86404abe734f8f30a 78143d822cc8de80e2cdbe7e9a21c4fb0a0310f956dbf23e989b5433359b72a0fd735db2101fbb7e9522c72742dc8501b91aeaa994e121e91f742fbdfc44772e2d3f7c195a1a4415c65db3f01ae3bc99fe636987ef362b2ad56a73dbff41bee18dcb86626a3074f38f439d0d6c120a67e08474c61df0316880bbee58fa234e 992dcbdfb555fdf51d8a5539a40da4993b43fc6ab02340c004081b45edbf23cd9469db156a8a237cbbba68bb834f3a436efc2a1920bd87db723342e60a5c5372c850182ef7cb2d7f61917abf38c96332a1927832c131fc9c3f0cd3bf7adeeba3794ebc4d062e30c5914f011a74ca3111f7f7f496f38424769062797af7692a 8d5d21f81d54e0efe6b0dacd03341dbe23ebad163134163ecd9ca33bffd91d2e5eb088d5367922e0da55d8ea3bc317ce852d4c24db9ad7b4f84e594cbf5f236f854c757a7244d5c60ced2a7e27995e28b730581c8f9b6d1176e66eecae8240cdf02b42ba95caefbb8b4dc82cf45873dfa637e3a5944c083ee5c5fb73ac02c4 ddeca3940b19e52ed7a565a8a330b36b2249ee7c73304946b4e904951e79f8713d0847bc3910ddd38afc19d17c754bd2d56e36637aaedd977853d37a7b289d5e23082098aec3917d342075251b333ead5ccf6442b63d0affdbafa4458f502a5ed48ed54a7841a15dff8424ba4ae565f2f3ae7426d57f87f3c0ec5a0fe0e630 58fd66f4e07deebe820d00743254c5aceefea368c96dd4502e35952e66e48c3a69024bba0003a83f5e832ba44effbc220950171451554066accf70808f8eb6e0aa6c0f903b56af89b97d494f5fa6eae244f0b5a03347a377f6d791ea71b8e3f06d072ccf5dafb1e49428468beae5f7f9f39474e5a8f185faeae0c2d4954cb6 f077edbcb7066fb7462806514de9031208d4c1ed5504f3ba555838da41cb7382f3190ea59ebc059ad50471fcf776ffbff5d3e46e5fea9dc9c70fb763e0315a2fb9cc8004812e5eb4988bc35597be8bce550cddab40962a5d42f6ad863ab0c8c3e58dac9856c3cfa282ab543019e5ac70c1eceb5ccc5af25f507fc7dc5a4a95 b114fa8610e9eb7f7bfc37afe1c3fe94f0268cc09083b9dfb2327b18802d2a623d34d8a555786ba49c3388c6f8126dc30de00572a07e750ca36ca5e5a62f64ef587085ae7a4f78756896c9a646376c987d6a63bc4b1b0b711d6d85eef9e0e7cbba27c96366af736b485ce96b16d8f9d921b377967b511b5cf8db57e7245dbf 800dc3dace88edf8e21cfac1728542b3dcb23796e28d31e781216a92bc96369b2e4b2eb5da23781cfe1e9fc08d546c731441e7ea4eb6c6292776a5397d8d66ac334904c3d74af2083938dfab70b66eb7adc3dbe6992d42daa97d71828f1ff4754550a7727dedfa72c4d5b3702a6a3b33f1866ebef207ed3044c09336b18327 40f5b651d4826c1bc8881848996d49602cc85e5ffba6cf576064eb0b070c0bba6277f26532048930277b85fd54d405dd7f415d00a94677882c0b41c848f7ae76300851a980f16d42e6ad0f4e85ef49de881188ae904d74a697b2168f618ec09e83035265bc550560830b5c3b97671e3165e481fb18b51d6196232010ecea8c ab31f9328362eeef6a7659071a380db48bd714e65d8c94cef971b1e7275e108404a0ebe22083eae29de4c9096dd1f21a03d0145c9e3339368332094a245d30d6e7e443a8a2f4cec7e532220a09ffc3a00ed489dd27faf21ee4f3087f1e5eff26fe2647c4ade8af2de4d5b6a3348bfa3fc0ebda66c6d72ec831d1bd5c3e403f 63856c68bfc54e63424687d4f01cf019785a65d9b9f1cfad5b9831db6e986782e76785af9977d422fc7c1f33e1f4a7535f8ea3c579e3077d485dc140aa6b79c725b238e0dcb499fb20b330e2107a46f0e8e6ca6baf209d5519447b11a08221cd3880671712df29a2cf21e595e3a5c8e9a98a10b9efbbc92691f1947aaaab4b 9ef3d1bc17b99985548b9d4e323a1de1175ed5e78d698c525d899205481d031028ce79c24aa38167447c4eeb2fd34261f1863d8d9a7106a420faa2e8e4bb69bb4b1f0e604165c23603c7d83a57ef6479d23c1545c1a9bc695223424f35dbfc532f9374bd56d82322d364c6f9a575a4bcbba95a1838103063a9ff5c1b344afe 32faf3601d714a6d9204244306f52e2646ab233ede79a3261b41692ce05802588b51d0d24f5ea09a9389035b52c5a94e8dbe23a762f0ceb6bfd789653f51eb0cc3b44ce9dda22e4c49a2875cf4259abc41c68f72cb94445f459a9bd66af3964cbf2a5aa8c5ff969c0cab446e98f72fc38204ff94c1548d9d57c78b7c2ff2fb 8e67cf0a4003044cb57ff0e5eec43f110729467484e0c93d6f56dcde2df34b6fb6fc5e6b91269f03f1fbe1c813c6a45e9f0165dc49295bc1e6da075b4cb6ed420d8d9b633ef4c6ba066a2f00aa418cb788ed3c9ae793668474b024921d53f4146a21d825bb5aee091b489020f4ff860dd5dc8b763c1dd91906c44d86cb55f8 32668604a8040241dbdeb32c7e4a5b3b5906f840cc3c516a09b3b0c33a96507889b2e92f2428c93a908a8c4b829d9ca4353c4964efacd741a58f81d26406489a333b90db67f40b85f3fd90006e9d6682603ba0cef50aea05124845f7ad1f93a37a4dd75dc450b8cd7cf2aecb5d9dc386e640c0b37d3bcb2ea8d1649c161d6a 817f0bdb785053a7b45e26b1ed08c16343882ca6a0fd31178e67b15ae6ee3896a851354cb1286591c54abd2e8b6fc6547aeab4c2fa2ea05d2df65d5a35ee09cd3b6f41e5c16897eac7953ed83c70ec4cdbc40771c81ceb8a46e5cc277584b8694a374442b18a9c85c5ced65393454c3a1133401a9afcf75ad075dd504a86b5 73761933c9a323958dff83fda7ed250a7608727e884cc0111fcfb897e835ba275eb8f28efb95d1ae869014ff606327127844b4be479f47141ec1ecb3771ff588f945c1a42a0999fd8774b262077245508f7721979fc102c15c01448184016ef20f67b0c5839d733319d8040fde6e24945c8b6d6bdeb18a40936667500338f1 7a5afe9f90c4a919ec89ed0063bba4ee85ae800efaa634a5b0135efa124d5e4bb9c5f662473534ac907ee59aa3b7ca6a7997f16e1c09940210209674e3a37e5899ba9b514559f2bcf7296daa669e54bb960c5e79ef4c42be2d28950a5c2fecea1c267fea64787b66fdd2898dcb95c523ab19d3863f8c3e03c5cc3f75648c6b 81adbe8ad896a91eb7b6e901f603f0d9b5615bdafaa580fb65fa6b0166f281b0972c4419ff7a9f70d17409ae3130fa82406c56a675b6df557280d218aca3175a62a748c66a5b95b3dca30c02db8a898c80567ea44345590c964a84e4099216e442820135395d32447c5cbc0b992e339ef096efefef09999795908f7d34285e 45af06289152b94949abf417b7648a4d08dac71780807fcc4d97134c395a03e32cda32e212dc178cc8d7e12bd92c1d29860fd225ff15f520436ff72e03f721f9a32880923a190713c605cfaf6b6e8babb6ab124e7468a42c401927d61073976577d12111be4a1a68ef6e7fbb1ae7ddb4c48f035b4b57bad3ec7f1161aa4273 59e3b6128011ec90cf38043f7c16f428e1b63dc8a3221c7048714a76d287847a43d9b439d31825270a7392a2878e8538d96f1e503aaea17e9fbb7e304636c655dcc22fca44d33a8493d42935ed7dca7179bc6d884587c3fa187357b530cd98ba8062551ec88655df8911956877dd3e9060dc795743dcdd0dd9cb56447ea2f7 5ad98adfca1f469d9705439c329214809769e58ed05c8f26c5d1fbe63efcde9727602e774da3cf691448c297fc4ff2e5a21bad840b3b3cdd48458fcdb3eb6ac021835b78bfb3a1b8738d1588e074bc2cb604d386a1a3ade601e71ecc14cd4d0fa76a1cecdeedc4946991bcd44468eeff0b0773af9a9b21afd6ed0868ca22eb 1bd3140308a3b23daad1a19007918cedcc60681a2f7af9d41a42f2fcaeb53f9f2721cb8867f5e123cb5b7c0f0bf6d57490b2462e43bd9ca49e780d7f706dd4715c6bedf7ec6460af6bc9413b36e7910399d529f7bef87241fd8626734a749394e806964ccf215af49b80fcdaae84397ff2fe6466eead079d31861eb9cfced9 f6f5700e6ab09631457c39b8f887b95552c52093fd6077ebbfffb8cbd3ba285d7cdd7d468e86412fc49b404d7d48cb6f319f6c74a39421a8cabedbab3ccde8a2987b8d3185eb6ab16367646d0daf8c23c4e4cc7ea50cdef14fabea7eb65349ca9edf6591a15249f402a7ef81f620486f2ac0b5c6cde82329327e356b9a381e c26788fbcbd0628665d60230353051fbb2c2c7e5ad8091548a394d9fc1bed5d97cc6e66cde33e0511dba7e00c28ea9bce6a2769e7123efc3293e70ff707a6737267a6e39cbb87cecdb545806ec32747fab3d55413fa45a0749db9272c9e2f2e30719c9ea9241f81a75390b230b06e852f0c2a5fe6f4b199e2624adc2540bab 17f8a73495e4bff343163678023085e116f891dcb7963565e1f52880dd66eb386ea3f08bcdd92a53f04d2aad7c529850a9327ba52c27189372185a6beca944e07f908230a58c046df0744315b1a769a148d3e7ffdab8e95c86a45a56936c92d41b9194a0453cb09a4c3d30e342afb890064a81ace239e38d3dc02de29f06ac 6a5ef21cd735cd87467baf1ba2bf663472bf785e7d22b480c6fdee540fffa6c0ec2ef38881bfe23e9b7d2a4d0050e5689b788e0fb919aee1a9ae6b23664e7d86b7d4f9ea0f5570abd5393f6ec836db530bd308d2fee73ed8c11bd82280ac4dabdd664d1fb5ffcbf094415679f4dd45f0da3a2c986643367bb3c5027f76c318 f10898a13cbba669b36603557841352e85c315fc94bdf312cac057a6f27b222ccdd3a916c0c000befe50e7436d0ca4f06e440720be0993e5ce3bb442a6936d773b0e0da6c3637018b626f8168b4ab2b0403edaafb30ffba6d4072813f92547e8b84666d59cd3dea6f57c44af2fb5dd43caf3c316bfa15e141153bed06d2122 de903a4c267ba0790a1f99d8986ecd51a84781dd462579721050dab0849f259425b1e71f403d0c50a8ef29a8d6870159c8e6edc396b0025b5972ad3525d9af7005bf8f8350d8a34b50bdf87380dfc95466c1d73a80a254bf98c5c0d00393fa0f7cd6fc1c1a16a4937c9ee69bfac73e860dd5266f2186f032ee568506bd0c53 721db7876711be826ff5c5c8b7b524389b74a385a10a525065ba0dd500229d98cae8feb024e334403ef68e2b76681fcf0b0b0feb85c38e42295d5bd45d00dcfa2e49a1a9318b69789184831df548f7d0eacc72a523e7358e9100a215f1f5d73d6116b8256922c1bca4e2a6ed84c639ccac8365648010f76ad9e6ab60e56de9 a5caec7f9369cf0dc664de27ec2078759303f2d0484aa36caf253a539f989ae851c147518eb3d991530d66e060d9a4495aa216f21934f4a1b071388a33a59f5a7a584f8fde110c281940a21ea430f3301af16b0d6518c277bfe63820c0be5834d03872ade4b2e1dd1e25971ec9a2c0deb0c63f1238f683561fbdbe2e4ac9e3 58ee63bee8a616204a8140d9a15aab73891eb06833a8bc111d52b11cf670f011dcc40eba92a985de25943bf5eedc18a8a38a04a6b5872d47021a3d5e1d08551be46e45ea44f7733176fac2812f49e71bdb3c9769a49fa1283dd6efff68680ba3e360e343688b52d11b839950e093740fe84a2d61021883a83e38ffb2e84f90 c44af4ea0afb852558a95d34dac13baedf162c84e6a3874e15e308ac5f84b5334243e6f832ce7fa2ea7f7ac969116924c3c2265942d7463df5c106f86a8988f015ca24ecbc0c3844490ff0e71a3a7b332ba72485738efb117bd52ed079b3c2b60c326a0ff773dfc499526bde79763ed9e3a897eea65a7ef3c7965fce7bb14f f84a69747fbc1fb98cb7c38e6729990cd4b63f1d5ed79475d253aec90323e5483bdc169bf8f8fb7e4ffb9efa365629d83b81cbc60ed44723f03645b06c31ba8563e5a5504ce5582a1d1a4c13461758f010e2702ea75de108b299070725f8017af466b10cda72cfd4b2a9d1bddc3adfe170bae4075af1023c58e8748e65cfac 9c7d849d88a9b707ebf36c5a8e51e2952eb5cc654d0509db8eb1d735c74dea2e40acd7e70a15420424ea54f88010c30f0d76c9513f694928723a7a317d94c243437a121c8097af6fcbe173ca8b9d24b2bc1cff9db0b67612d27ec8b026d4e7369c37b91bf16b6ad91cc078932b78273ca779c0d8241d5bb21e8732b7652cbf 08ae6395b50a7a6f995bbfc2750ef54b735b1f27d0136f83a2ec319e65068132e2b35fc4a0dcf1e4da580121307fa09efca7a72447f2ff36546ddddb0bdf0e2b916c923e4aea3e984c0485f524126ca89532f2d6eac77b4caa0eaae91c4ca54e9a0e318d7024cf576a2fc8dd06a76ff66b9d5d6a297863860ef34cf1ae07f3 5bbd9d8755446d2e8dab9aee81be1afdb8cd3e49aacfdd328b50c42bfa55f4b256a02311a2c8844a30d2b9f4a85f6c1f5e7bb6604c3f5dc72efe27ddc9e7964193aa92a741992df1a7b199660bba5ba46736bf70bb37dd2ec213de0dc40429cb1b5607457b8d63516b8142253f991c3f2f5632e817aba151c3995cd826daa8 a98c12e658f0c7a053d2480eb79179e1a3a8c4d70549ca812f76d4de133365a8c0e5e9dd84e0b2ab1aad7e422ec6e228f667c62cead78eee9f66e13747670e2e1c2fad27cccf4417e6bd54b8d1c960ee1ecd399e4241cbc66a296b2e67cbf251cdf9b09d8ec7050e8e2aff832873252b5b12c824089b1859bb4dea592c5256 c4478a820bf5c0e809c074cb1199cfcf141ccbfe47018b08e71c390faf9241ba818356b3823f918ef478611eaa5985023a2d278e9295bf203473f9d80ebe9524e1785309aec832c6b7e34b872d8e6e3a1a4504c6838acf9606c23b07434bd2f0e5315137e337cc182ee8381ed8f54405afb8936dbbcd1ac5df6ab8fa5cf61b 94bdb7db83a5dd5eb0a53082377cd254b0e4b528b37521855378238a46485d290d720a9f9d707d7caefc762327bbc451e2f365d10e44abf1beab8ab2bc9cce91e196b9cc9527813d9b293a7e6efd65e23d49e72cdc851705bb6aaaabedcd2adaaece01d449378f1710c4f240ba35ec48f9fcb9b76eaad7b5f4a6cc3a212073 6bcb6586c3e07c83b4110314f563123d90ea993c02f5b7eff445b2bca2facf34b492438b7bedb54bf4524769565bdf86021744d498f5d7e786fd85f6625d02caa2d8bc9320281a539ff9b75bdca106fa07db8a907a2d5ac7dd65715275ea3eec603e2a1a86056a20814ee2f1f773a3f687bc5b3d39778523d1583d96caf2a6 1ffc7ad65275dbb50f226e490b72583fc2f8e703e709a6ef73ce6744aa5144b3b7ed27228abb2d84704c164935b74530c636d6a13da6bd0594cf41dd78affdb57f9b5560490780ce191d8c453534cdd60b700f35b1ae31bfd9dc1fbfaba286a3130006c0637bc6ae014352368cfd72408977a2fd4316bec2bc80bed101e3e5 352279f99cb8163e58651c48f64f38c4e59c9d68424721a3420da2e4bc4e362b5c72719784f05931c293ee0c6ac3e33ebc9d3868958fc1adc1799e6a231489d4936f9941e019d4709061979915b31ab070300b1cf2ee1126997e477f82591d2a577bc1a7eef58fb1f889e712dadc91fdb9925341778812a3312b7105607654 d8c707ff3c9c796dacf7afd28499ad4fc0bf461ae1d4332de71455f6227df061e19da5d8131e047dbf0d1f9583585329ed0dfe23ccf1ee13518feb818b8f0c00b770649c297ff370892103c3769b53eaa15f377c41e12820def9c2a4aa77aab544204bba64e171dde2a1efc61d65b93595b558adc82a8bab8153b1862e9f02 dce65139873e35a18c45218dece2dafefdf07a4e6eb7101dd186bc3329232e992bad99eb530a7562262d8276c1375edb8e48d1844f69bf23e5ff28b9f338aad313b524d72012eda1b4041d88c32bbb4861b89592eb369289d9ac00de5618e03cfe9b8539f6c12b0995a63a9b4e0d78a62eea69767f7a91d4a48bb010f055e6 373afd3a5a0bec9d1a2a8380e74eef4a54fe68972e995b68e188868202cd94e238ca703e950b5bf0e8837de72dca4b63f5dea13954ed1ed08e28aeb6f48606bcd6586d59a3db656db1a216b4adb0c84a50643ebae055a3ab1e49a5af2d92a566faba326e414788c1752c98a0ee775c53b56bcd693c0c64af6bebf04c099cfe 0beeb1fe2eab5f0014403778f42583d25c0067f3598b15e62faafad0e3d5f3aa31980f02df0daceee5f9de422536c103e72d36acfeb950dbab37622e1340b75f22e63179558b5182ab03494bf69fbd5c98e7bb253c4d13ebfc8d91ad3ba0077567f6f8169284add000f0efafdc8c458ba8107e0d7c2484f15fc8bed50976db 212cfa761cbbddcad5a532b93beaacafa9643a88fac05c5b9ab4d9ccb8706ed5a2d34b4ca7bd94b310707306aecd6390f8031195203df40734d421fdb85f5c8cb53cec8a256fcd48b73280a40b1c587a8c704cfdeef75963f81bac932c3d229812decef3262511d55b40fc6469d083884ce3007d6bcdcb4ade0f29c422c2e4 7fb0ecba564edc8b68eabb8fc89c922ae3241998cfe134b7f56e336e6d3093ed9c63ef12c804a336ba82162af7bcf536fb9f67f694d483c4e7daacc3ad8c8a74b0e3e0cabe71b8a181ad12e611d1f89687a5c96f5f65a13c84465ebd61c30f2d13d435986438dbcadc2113ecf7d1a49a063946fe5ca415f623779b21946de0 921866efd848120cbb28874999dd01918d40416cf7cc32701d079c423576f5d7ec872f16599c86683d6a5b9ec1432bd5f35c6293e26a88f6a15b7539b8fb4e8fbaf55b74ed3a092f14636196f989e031160bb69e812c0cac70fcd843ec9e5c3323c5712da6145a733f31ebacd6a5c163c3893f2b282ff4231800cdf7993785 00956cf3f0dc1da7eea02fd910917ecb12466f13abb25d271ab9adddca9fba65483ac6a800393225ae46b907560c9e4f57e256b423622dc4146241d1bc6a2f0222236bd3ec8f4588753c3b67c06e1e574b50098db6d1f96f1f0d637254ff0ca8f8403fec4ec27cf91d4d194dfc629ff5385f0eb3de712fe0bf7ec8bc5f9884 101156a85cd14281237b7325a77e8e4fdfce63d630ebbf3561daa86bdf5a21b7ffb40ec2f05bb6f7c2aaa2fa1724306665fb9fe477451fc4fde5ee10cc0066a8849476310219b4e927a34221448e22529c897c8adc806915917273632415bb04840cbf5f9e2aab237c893201d8cd396f27c8ec5f01ced085259f321795e71d 5dd239534f05b30bef0b80c5ccc6f6f7052d2e8b9c2cc12ab619100711e0e6dae9151b4b71488c9f3124af5774739fde57219a1d0f7e4a8dc262d0ae4d40a322f81f0a3ecc5e91b926d1522885cc21375b80040d0abb46ebb24bf506be32c3bc21d21dcb2fc31962dc17eea080754ef7b4b34b35e046602e44599c9ae26604 01c32ee7fab7eafbc8e78c41a279981d2eaf8f1e475b4fd9a8a1dcd6d1b7725822d64fecc5a9f37c2fe873895920a1d44be6c1f90c6de819d3a394daf3e92ea1d19f5ecf7af0ea113ccb134bc2137e00dbe470a8fc05cde673488905bf11044580e31504c7b8dec357e154d775640a0d57c3f15c3eaa768551d5c1a50d6499 220d37c31cc5555eae1863fca09105c7839283d2486405893e08562b5f4d7f6472fcd054c1fa39c23b97d5e972823bd689a3fb9265a85d97f6bd0c6c3452bdbf568ed918d3f94ad14e2aa07de9e812732424daa896142769f00980dd6308dd60934187a0d976433aa3a5a4ab274e5ca25608a2e60596a87b8fe6c5d84770e1 890abab16a891bed100ef4ceaa05da9910eb439894ada184282f76319e9ce8a8fda3588c68cfe03629a30f56834248f16f8124f9cd16f6cafb8ffd8aff3fd9f7c09f47801d32628dd5f088ebe63fd25e2f09a98d7eeb8118b228b69fbd520f4f43fd3eba8d509ffac92b2d6b9c6cb9e41959abb9cacfad7b1aa4e65136f8da 9edf70269a820548fe65f66ed591e001a02312d8243c24122f091e5c681e448d1cd27ae9f1616c7811af77672d8dd6f848ea5b37024d1eaffca4d52ac6c26ca121a835ff676cb2f24fa18999913f5183d58b410196f8a161f79810d75ae2550142f0946c3db2094bf8ead972f86ea3538206227827bea7b44582835708cb55 ce28f25a547f2ccbf2801f23132a57d8e530eb410bc45c7de5f1d35fb099836e01ceb98d7d739cf9111373f4ddac6c934842478ffc4c4cd20499cc86e2df15ebaf7690dab56b3ec57c403c1903fbad8a113c24f5d3b925e55055fe730d43a7cb7eb83ddf841f4fbfd9b340d72c5927588aa0eea8cd3b4e05027aef294490ff b41ccf40b9ec4853a2844c68235075d6da0794d8e6c4d09376ab326ac9edbe6881211f37d95b7f9c2d4e5e6a76a16d3060de7896109cdbe1e18fec93094a912a83dbcde9cfd35da8cf11d8bd82bb7512fc86bc44747d2f4f258b1f4b572b892d74f442ddebfb3059407c70a6209049c93f172d279857d265b919eb24cf6e3d 4afbf10fcdd2ea40a6c6b88e6edaf384c19cc2c36341636a502b503f34b294bfe5f0150b17ad28e8ec8cb1ab9bcbf9d24054a4f934655ccc14ea67cc1c9262bea73c7c06a6c6a03b5ff06359e7e1e544f2fcda575f778272c05d90099fba8b3befb79407a935b8e92a0ccc69a058e5b8a1baeb4128d9e7e2818e4b4d77ecb1 e3e4bf74339cfc7b113e613f928fb0eb2f51981d5dc7a5f8bc7d70324e39acd4299b6af3815737ec1b60dfa1bf58a1caa3e335321934648e9b178c3db977ce6d9d003ae58197ce806656ecd646ad744aa2e6f79da9c9a283ed9e028d7d43934996cfbdeff5a38af4a3432c3449cc10dbb7fa5e64ef57c1985edf52c031f794 4a3d1889f417a99792e511bbad2c5280b9a1a803a2a7660e38506904f6313882d43f2b98a691c203093437aa48f5598db1ba16be38f0acf0dc436feac93362f0d974c2e7059ec28867993e7f5ac9480260d5abe3ebf978d4d1bf9bc7735527728603d033379229320a5cf4d17ddfeb3d1866bfa2327fcfcb23a82cc68ef80d 254b3c4dba4b55607c4b4d589e11c29bbfebff9ad30ed510beb9c015224be788097c809bc43c70d5bed736fcde876d68ac751ddac179ee62810a73bc1158a5ef02cfd9b5aa94f179be86c73ba6b857c9d53a94d75ae3c059e43dd66f62ec7be71641170093518c3cb6deb7053d3930891f4a9fd6083c5fa2a02d0e2661091e 9a6a19317d674ad89e183d16abb69443f6e359c96238b294e918aaf0de38e112b2acc59b64cc4b4f58ee7e043df5a6cd5668a66b358639535107e28f78c2d08dbd5eaea64db13b20355f71957d4f55033343a8cca9e5bfb1c27cc150d6384e04109eb3c09c25547186759c700ad3f47c9fc02ed4a97accbd5514e79c7b7e17 6d0581201a8053a338f49522e5b330a33c9c49bd3b3f47a85040f226f0284c58da22098717f811fbcc54ff00044e0756300acd478955cc3ef0cada8dc2ee473d346240bb9c565658b4473435be93832b2a4a7c0f448f25665992eaab8c68ceadce9b355d56dd5f87deaf429b9fc3189775c22101d9009230486d9d48b665b5 a409bc0cf9f4d4d9027d6382a1ce98b1aa8c119c36c2d09057ff0ded67208663e1cd1cb86326e1b0a5c505e15bb1086ad9775100a3fee5acd5f95a85b0cda25fae9291903827f7a8b602c00712aa432a68739fe71ad6097ba55fa234245109126649c05fd91cf9ea5e256cebf8b4407b79841ebc0c97b71bf7add8f6d0f9dd da8efc48e0fba8984c2ede403e1ce6da0c3677900f796ab64de3d122b1a1df771289e8e22af1ba4e70c04350ec7661a6d7a0a6df4d4261ebc5b0d16e40d4dd115807fc8227b7aeeb9f847a9b92ca69bbc544c440f800cb781e2092b0aa9cf643c1dbf1c752097a9d3b183e9178c8b9b9ec0cb55d055295f2bced19aadccef6 882470451310494973d5801a44953d3035475543f107304beae0d82716de5d7fd6d6a1b57a3a1b1f40c2e8dbdcc2e2de63b0692ef83b9396a90bd6fa65fd789594ad711036bd91abfb3c6efb1e3cf2acb15a8dac67e727627e07f4545e1b2424784c75d219fab22b8c40a7e6698ef1823bcbbf1fefb840a971e22a78726e4f c78ccba7a7a425fde67c4360b92891e7eccf1e20bb5d1679115782954ada2b2ee04e37262c9544b3ab63508c2653c73883c3e39b1e99b5ba87534e4cb26ba0e05195fff88398217274681c2f1bc41a3654f6fe4630d13667853a152ea45d7691a44852500e6f00b0252e73d81a7d03396e9dc1121546041b1cdf1e519e1e81 b65ab2d9e2bf71e6d50d029f7561b43f393922bdb68b8096b04b89143d8a790de1884ddcb5420d112535ff8caa1410aac9812e8a6ab252cf1e96576ffba3c5f12cdc6454589e3f65c1cb739c916df317e358bb2c36e95131f4866d19c371dc5e593da3fee9f043e5d8ef84a019d23c00f590f98bdb37927982bb14ebcf814f 5d8946baff5ce6f0ea2a610514b5bb30fda405c9d68ee9251a715231301df852384346f4dc78256bcc538d22b51acb541bbeafd2a674ee98949af5206ed377aaf36ae4438dd8e1e85b5b2c03cf63a1856bd391df20073b64561adc4c6a80befe701ec80e81d50bf58dbb65ba38f90db5b14036eeb359b5b5eca2a604100290 bfe3f719360a8760d9a4bef30dc932c0c7b84c45b1911d5cf46f4fefb588f2117cfbb0e74206032aed7432f59a806abecee8c7720263d7724d13386f95970adf45a5bfce9fcb611942c060d6c5f199ac9dcdc13ac7caf87834aa779e5fdb1bffb0762d862fd23bc3d789799f8837e675c0977253ee6b1433828a68a4ede93f 3aaa59003c881a48ac0c4d36a2519a0d8e8091eb45587ea4b630db4f0498d6b91b5243625ea70fc40949c9d7a1d6716389f53be2259c058414ca42aa43e4ed07daa8069066736f70947974081a32dd6b399a5ad9ca0aa6be68ef1c97b75d721af2b976591214efa42d8d04cb408025d7539e7e6a04792d5a40c75aab608714 2faed50d7428e22c925ba239206a7ce52d008a954cb1c5a19fc5bacdf878ab9f9ca708dabdd7b1b033aca4723e480ed7bbf2ab9c2712ed7a93396feab7af6d65c09cc1cfffd980cfeaa3bc43400103f81b0a41ebd0cd2cdcc545a7023a4e7c978f1a0ad222a69e70f29f2069d7d5440ee83ef6eb5d293c5729d55cc8ec0b39 9e8ebe3cbfe3054a4d1f7fa426e6e8c1c32fad093ca8ee5e39ed8332a8555dc2ac5074abc57a1fdd89fcbff009f1d7bc6ffe88cbe8086df2256d1aaffca14de6342404c07fa9967b80348e892838637f19ffb6ac5e440d8557fada886c45191db22b00e48890507f887e6ff2c18602898f35e47b165edec654ccfda9fa4b2d 8796274d612992512f13be4c40f0c3f715e2465adfdd83511a402d6a7bacd01dc5bda489f586a2bc53307dcdf9e6ab4228f31b8c4fe31f41bf2730586ded6cb0bc118f90f2e64bde46d50f39f4883cd1d308c9b96132550299b424468e8429f4a5fc35aab14f82d8e05b8761f783f02e705c6ad9d8b272b215693c3f73b222 71b84c45f600281937d7fc82f82f63da29c41e6760678b8cfa5da74795114d200541e7a71cab487e3253780a54e7aa7de00424370e034828446e5ccb333f622daa996ffce8df4016bf12b3056e7df694d042f1015b10546f6806c1663c1c01400c7eff9707fd154420543a1db61481034f0e7bf4be5ca1df1c7c2960f948f6 f041d5c00e1b4499d568d90871b8874b79ba5a06f9b996765ad8a53e314faa94f2c5fd614f94f5e0b816c860f5461874b5963fa2efefa46d7fc7efae71f4798910cbeecc10df65240a1abec6b7afd32f7cfb126d4b10ea7364d0f7bbd494897081351f685cea063d7a57fa8ee816050159566df66cb18ba4532587d597de07 0ef6159ce9752df2bfa951e87a89aa0f8e1a3fd742b438e635d6aecc27b7471ba6726becf0d8cde69d20b016e35d361c755446083ae1915210033ba083a37a7b2c7307e05861226f2428c9a083db8495e81be9a942c66f955613e7e6a356d9f3cabd14aab3ca872baa845118cecdffce4b7d5de6bb4d642d79f2cf6491c8fb 960b1b034a0c3c26fcfc34de0a72c52c39ce6f7bc74bf38075c610c6852904a2fa1c5e678a02a8c5a3ff302ce5be6a645deb7af7744e4f8f1d061aa2b452cc49e1bf3dbc31236785de642bd78239ceed7f2d9db82673e46c14b408c5edb85862189fb3114a603f7dd10f66561f818580ccf2b9f5f6a44ab0ed2a8470972a34 7a1c84d78676bc6edd4cf80af21bb3e850d0186baa5102e2d3a47d3f9f8e937402235a8943be63c6ffe084a64bbead2b49d30b6b77e0d4e76c644b022cb23e74efb2d5a62725d0a796bb12c01d8f1bb9c00ba5757bbfaba83f524919d8ca7fe5ad6c29df3a921b9eeef21e5acdfdd20c66a4f11479df2c56dc3cae8aa53814 e2089e85856465c02e21385d030661cda732879825567e58952fc0e24402a681db247fe5837c2d8b70a4ab89c3431e6bb6b0aed6ed02407b2268e54f6de1b36db8985d9578dbe83f80c72b96579ff14afb4b70f774b970b9a004eaf70e3b52dbd5384905702e07f7991165ddc8d25811d0ef3c426af0f25b7ebc83401d5b98 df6b0c6bec0bb55d403bc0250d089680bfc58c3991a477bf412348937c85d0b61087663ec5b9f1c1f177c11c02ddb22aaad118b3d798fac0a877e865e7f1c6a675f22d0e067b646c4ae7291f2ef3b64866ef0e00c99827cbea118058392c8b8806fdab2df015a3e716f5d7cc0ec2e74c31be322e7321ffaad21e1dbec3e21d 275a878bac2e5fefc70a7946748cb3a014d38f251865263bd2769d65df4d6fdffd42a6dadd42bb36fae076af524aaf3b4c5a0deaef3bfb776e836ca9078d16c9c25fd1e1046fdcbdf8a2043281444b12b67f02bc82ca833ab61e98d51091b6d9cb9cfd68245bfe23f918781a394f951d9b244a593b992840167157fc03b779 481de675fce74bf97a3f9df2c28a21d13ffcfcc3f1ef77822b14a6d49d8d18e4c64280d585cbb323d8d8357025293e84848fe6d23e9a4160fb89d5a80ecee7e82180e112a43d806f15987906a59e2c7490a3b9b4ea5872df4825083d596ae3c725f34353f225d7bf4609e065ea70a41ea921fe540675de32cfa44bad53030f a6f049afa511b9c6c92be626151fc57015f96134510dba3987ac9474aac7ac6111c0c90ded671785f6a70b588452d228572fb393c58383d2e8389e8b32ae6072dd16e12d7ba4e8c964ee01c314bb3608babe6c7775a394a29e39a386f2b67e07302d4588db1f281592904181ff70ee7110af1c5b740bad0e674c1ca5125d26 3db2a608b4008cf781e5d7bbc1f308445bb357660bbb04f20b7936dc980d0393d82628c671e3f571ef11b5c4ab302c301c9b9c54f5afc9621430a31dbecb57ebd21946b85028d7da5e7b5bb5f5779e8d339a1483a6dbc65e7e11bb28b6e483793e244a770975489039db04c435074f4aea7cd104809bd4d945cb525a3fef9a cb3df5abf3b4f7dcf9166a89c87cc43bb18b0009ee69b4a4c16faffa426354d8a95b16ca2a20cc084c1bac5d6ecf754356fdb74c3dbf8a45188e67c207261a193504c5016d93c29c1d17bc4285f98235c4f2a5e47f134e9af60a4d986c6de43fb0824965a93b1413ae61ec2b36079d6b7ddc79fff11260885c1278e62733ac 575c7329219d3a3facc377f1f47bec62a7bf04cebb023f9bab479a3ed822d047e88ec66214e09e5290fedf0b12ba67d2152864a408b5a878e1ffea7237889d89f189b2a2efc2d40765bb36fa79d66339631d8f43110a006b8ae0ffee0a0cefc59c8ce5def7d92a82a96587296d44dc17cf749c5cc970e2b3ce3f445f60642d 6c2006ecbd7220759c97a42c41dcff631125c3c820d3033c53c7a19a37bef6fa4b85661fdcec7ee9b61a17b049afb914e266cf2c7f9d057a0c9822d14f5113a656abac632374ec339c1d78dba49470488ebe43b269b8a97d19a789d124bcdf030f12c701b28ba6d9b2636ee4506e2f8ff42bf874019e549ac63f501be6fc87 cfd2a3e729817ab3bc7c0430dfe99f5f2e699de1c9a7dbea42f2d0deaf17acf723cd0fd26faf34c82e10ba6839c4f8f268dfbfcfb33319bb57f5a5ea7faa1661c2d2a78e62d25fe9d42690eb46e08ccd915b7a5b0b954b75dfaf985b2949d133b373bcfeaeb5b31475799e3f4b18b83162a0ff799cad2f1ef0aab4943ccf60 e4d7618dc743fb16f6a4d46f7f273649557b8b8189f8dff7a20ec56cdb2b20f3634acb308aafa078fb3517721533451bad2620f770c20b939b0847027a2aff4d588f0101183dc1d94f730af2977df4981c4b7ed4719caf657c762945699ca98879a07577eb0dd0d805154a77a49a4490031d3ab153be94b19018f2d57f7687 a26cfa08a156262fb91b2c3afc1f8377928155fc56f3f65ea08712b520b2a4a23ba0fce37dbe9242fb6412d90a6e4afa1f4f6f7421c60c214c8eb15eb90a896778ad5a5445e788a20dfcae081db4cd05a23c07210f7c515f205509d827a52738c744738e043fd036017342945bf8d2ab189bda08ecc7ef710a5121ff105b41 dfb239fd0868fbcb9dd11e02b1064d86a300a28da3aaeb5ae9b1af574000735cd5085b0815001321901a340c04e16788c8594becebdfaaab70eb8c403fc35f40fd1de7dc73c8b144f5dd47fecc544d26943ea490d9994970421419c636ccab2882d3a0aed68c613aa9b177e5c3f23293fe191d744a8002c629d3ad9714bd50 85d563aefb274388b203516083766998adddf405c5d833f4538399fc4ed9d42a06ea0dfa9b068f88141861fe00e39fecfa903311722ba68d83826dc4206b6a6dd77120c40a4ee894170e4c818675edcc271ff218d786c12c0656c511d57fb459526566df6c9ffa600a5126756532933401156d9d8dd894f3a059c6221b7f6f d324370dc9385a383009136cc85b2376fc7373ae015ba1957e687673d58aa4a2cb56ec98aca62d3ed60b100d319948306f0bf3b5b4d3cb1b4f5a898079555b6190f0409ccf7d43cd4ebedfabee0997db51785c27addd405679e26885b9829f8f6e73e9ff77265c60ecf27a58aafaf597d94538c38fe5d96aaec95134a6e710 48c23e67c3c36af80fb0ff801ad60dacda2f410e6ef81105d4260057d1cc62d091de176d5dc6725d32070a5bffa4717ad10d78f4a4f5eb94afd5a67ca5305d3828cbf483e7c5f30c888b263d2292798e4fc4b8309e78bf6a874966a8e6697d7c2417d6532d5d7547139fcfa4965af98b93edb85e5246bf6c17074d707ad198 0464342ba5ca4ab242fc05413148bccf5b135691798d08a895fda348ce18194e3ee2189cfe56180dee7e6e40ea473a4f0d9e240373da47755a04bfeb294cf75462d450f5cf928c0bfbcbc2509b57758ba2793f2d865fe32c976996ab8b266f8e0eba2bde009becd921e077815ab18b679ede19b20dacba333da94630271add 14574bcf924f674181e9f8673747c65cbb7b0aa60cd94d1231cc86695020d28adae77deacab87569b4adb808980109e353797925127a6e5d660f3eb40de04244635a4618eff3d9ff38a706093d2b1eb87083f033634609a2aed18c1a2080ff1f69b9d78bdbabedf35b279a1e10caf4084020d7743429c716dc1f7e764feff2 8fb6ffd43931de8abb547cbaac2c12a28d3b5df701195a7ff2494f181f9d93a8b6ff47d17e838376674884e56fdd980ad3db34bb5e57f955293cfe735d40c79bc932de1ebd7954aa5ff2f29ffda42d995d5d20e78d84b40898036b91ce0edac2f90adb022d07ce71bba4db0727a39803692ed80cca8d1ffe2b63cbd87f2d29 ac564ad076bec831092cc3e0188f725a6538348d994f4b6effb49cd3736a5d03f832157922f3cf58ec9f2f98e3445b762eb77d01cf6593b92e32901302b8f939c083b47d3bc09d5c672a80122864d99577b962da12b6d59fc7b02d5863a1181ec512a112cee2e99c40eb08d41bd1500b7e2a981fd0a1e9ae1879afece91560 682a196664827a7acd721e6ec1fa93f003560b5b9095cdb83ab0f969469d081d2ad061f37579fa56b148a9e9a5ac65d9b1710fdd2c7ff4170dc48d427bf65abd2c79f6649bd4002376b6f513e9b47631e8e7715bbdbed28a8effa5aac5c81ee36d9939d09e3e778e60c04229e1ebaa46c2afde0316ebcca2987377e33d00fc cfb92ce07ef400a7041db25d7735efa3fd49b5bf5bf3b6367933489bb0464e42f354e5e91079b53d4fd9970fbc46809dc4ada0eb180ccf26096a55fa2a6424a2ced91b259c871d9abc65539a7a9f95e47e9bcca802951b055aa1129c40bf48e20e6db2e62923a676e0604a87de2be3f8e2714d7142a5c11912d1dc442e6251 76281a20e8f40a9bf065bea5b8a5790d894836fe3a913b883dcd7ca8fe2ce893d01cd6fb373ba255c5765fd63d8a043bb3f63314ac624c499bc62e06d043a3628023c6c024fdfa5b9b4f0299affc7f4a42231b2a8d9a9dd979c8398d48916dd5e96a4668de984ee49148d2a2c4a116fb9127ead73b517f54aeb97699ea9314 824902012bd70590e89ff5827cc9a9f0827c16a572087f322251a0014eacbc1ffa5148517d2298a3779dbc15318a7346b6af444b69b1e9fa703bd12c403dea39c6159eef31234838b3a4b4c99a4044342b0001fc0a14e4df59a050d852c8542e5c7a638f903be2c5c7b829bdb70f6977ebcab5057f8ea42589cfc31c2fc568 3bd18b6302a3fa3957e71d34aae983d8fd8975127c13d514960cb56047a8c5e5dbb921903d5d532ac114fd776ec6b1da0bbbb1feef9ff896003315038cd3b315af06d9b8dfa67040c16bef6bc13dd511723cd48f5c38bda90290d5b1bc98e413d92c799f01699bd8575409f2a0805c9a517cecd735c775e142b072f52502bf d2262dd03042a11250fc2a6d9617d36b6bad440ade92841c02ecf9b700c53bfcdc757e07bdc0f51bd7ce9fac659abdf170e65275cadb8bbe531e41d555c9d481d94a6f5ed902d54bad193e3876e8e475f21f09ec231e6d8e0c2e500ddaf64497da66c7ce6424f3834a38fb00ad9bdde9496ea7b8d3b92cd02388d38872303b 47d1504b40b25281c1dcf1c8e240b76bc8c34771724c46720ee33f242c0feca8eebc279e1c00446cf09c2a588f682b889661cb150c80ecfde4abe4fbe09bcbd71e16db9328b8e4b6200addcd6e07dfd34f7a539ec9dc1ade4a7012dc4fe61a16799f41f51228746d77e4c43427d25c3224a0c3c7c48e0ef2a907fa3c19cd55 12ae5a9147ef976a144acc7202c98d6c9f8cc48bc04c9a2f75c29d28cd4b27bb4fda7329525b7924b2b31e6904713fe81abd547cbcb76c6ac9b33b58fdfd98647f2df8507c272a20326f9fb32b388255fef7f486dee896e9203fb030ef08926d215e0567eeb029042080df6d952a4124761d8f82af8bf3751fe570ffe61e58 d1563982d3fb818d9ac879279c2adae1dcbfa7ee6d3f736c95a64b2d4f736b58563343fe8d5016e6a83b415ad5892a04391de54f5f525dda2254f123c0c28435f462e77e24bd10b3e0681a42c5dde5aa5973dd37bf26a98bc3119a67c11495b573b6b96a0e8d3f8f1bc50beb11a8f98a39df4c5218e787f46159b7b6954e15 44cf770a8b562de94ce856ae380c747b15d35cd1e2e119e243e19808d90f76b8fd724baf307acacfce970337402db889157bdacb6cebdb6c2be2fe3c406f5e070a976aaa4cebbd88a38ffaa9831c40b5c08a0eb161f4338cbc887e57d0c70acc8eb9755774aad9600d1e6cf1a54b337f56072ab0562918f91605ebd84c50aa 0018f0e9a7c1d6d95fa043d1260b0a62e1f17df50480d490d9e64a78be6368508ee98bf477bf0d7754b5ab601369d96aa01326b2f65cf242ac495586fb72edacab999fc0d1261284e9d7b7a7631fa7b965a0c2f6249ce04c6f455b920a6cd84e200883a5b5fb1c863dc778d361f656f991aef6df709359a9b26d051cfdd1b3 cea069876b5dfe068d3c0dacd7bab8544de524cc85fe2f76ecbda30748b42e63d4cfaf23ba158440cfe3fc683ac13b1ecb2bb9beb25c7ed835518f20626810b5938db1e5131543f8f471ec7e7573b535ffb40afdcf91999d1a500ca7dedbd4fa633a335428a2dc34073cd1587603f0b793803c7bcf59b391e7916c5ffff5f4 c289c7258a06164f9eb5d359988f198cad18735f5cc962311994a673cff4facc09cda3c3a8be5fffd55e0c728ca4860e6ddfb07fd7933da412f722dd86a47280e86b1879a68554d79c049cc463d4dbf0a9cf1d279d130ab86932bcfd499061829a89ce6937cddcb7bc1111b7bb42f04bf85153562c92c19ac40df87efee42f a255b849d961d93f3b7147ec44d83eab7bd1aeab8a641a8757108c42d444555de656a7906f5e562a892815dcf2c62e460c38bc2b62c97515af290c096110160839361618a3804ba71ffe3f5619d7acd0d99d3b7adf8b58d3b3624987a41c4f9806f4dc593d10cef953af0346524857c963fca7ce880fd9f2bbee3515554576 1712a0705e17a725eab5fa3518f05ec0ad19b982de3b6af3b2d6b3f3ed8d4fbc60549e39d4bf7ec5e954366f6f998097814c8b360ea626d262943012b9165f6a78401343ada99680340e8a95a5530b9efe0c92332bdb36c5cbad027284e545221b51e0fb109a9e0dd8b20d99509c7e672f620522411b2711d1881ebb40bb84 b4eb5ca5bdb5038cc878d522399dd23417c8ed92e665f8b9b7168aa406f25e3bfca474506f0296fb4ecd65b4bf2b5f500b8a0f515e790c21ff308aa423adc8d2d7824049d5aa3eaa4d8eba47799c841c6acbdae8af4705e24957cece9157a9388dc0772d4734d2049ecb2472a5b7d2a922d6c10a91f1bd285741c5b5ff84c3 7438bf372b5a3b4cd89a089196de83bcff620d8bef8c750a18b7d4dfa7519b3ea727204f67519f7f8b54e0b4a23f27c778328ffcd553fc4502991c421c43993993990f29d81a94b0fa0afb0c118de1766ced530571a976f0ae83490ca0327f08a7877749aaf5836273b8827dd34073d1ad4aee026025a0098117278e5ed5fb b25d5db62cbe16825977d61c5d64a28884ecd3a421f3133e6cba08ad285cdc5abb907a8aee7882190b58943625b7c87e1c4041f62abe27d6c740cf47915adc890927b5e9651571dc43bbcb4e6e3b09c9d4eaf0407ff11b8928c8408c88006cbc43159dc3e00e62258a9325e99c2af88bccfd2f4e5b61c3d8ee8b427eab2353 7a83f70638ffce15e71a168a08939ee767cb071ae9dacdd2e91231b7a33bab3751e89672306e5f5a19e0f0ff0f832927de17dad8aafb282792e9e73c0ecab36951cb97cf8ae52babcad550fc7fbf1fed90e16ac62b3956ca24b4c03cf388bac972253fe8662692bc9adb6771ff077d93e26d82e15be27a9a2bc12721cd6274 3c868486c55ca94c3320d4c4b8e551b8d9db9485f16a15591b45541087ded0caa47079b810065a6c9eed684eee0e01e78f4ac12fa166ce45fff799cd407cb534911717f5e857ab8fce56433649f309980ca4ee6885a5ef2eba569ce99ca6a559707cd03e816274ae3247cf0cd457657ba98d983ab7f61d2ac665c25fb27a40 9c9c859968bab85f2bb7b051f4075b38fa4f59db287373771577d010ab1d7a6197deb858ef7ca13173c114e91c959977e9cda683ca884b3871ed950713b79f942709c30f24990f8d8e1c1bb632929df6ab0f27d86bbb93792235956ee6e06be9c91228a598554b27bf3573c06c05cd91cdcbf248b2cda2b868b48c1e0d0829 5ef141998e97ad73ec74a5b6ea5ff33efd2ce19cf94cc841070d9187c3256b949081530c98bb131aaa054000fb63566e3df69e02a3e4d1fadf7305d462998254427f6fc6700549dd0c93b1e0ace0a0bf26b79a3704edb92368dddef40973a84b1c0fe6e6cf103795c7e0b6449e105b6ef4013ef4bfbaccd8e7aaf981bab634 db142ba82ebe8258afef80175952195cf42f5cbc838791bde557eede39cf2678bd79a3c4f83443c11aa39d52b0ff432502814e5a9fd042390ecc47a088d3ab47d6ca2ac380f7e3ca0135e15aba28f710149c776bedd6fa036314824888b2ab9cbb83937ce4680334e2c9bee022b21bf106c0baa56910b0cf26607229d9c21a 4a9b9d17a05c5f449cf82ff0a863bfe2a00a6670c5ea7db676241150517496d4911486999ab4c017d8b2a47840b55bf28e3efd42aa34c89e500aa5ed4da6634528e454f341fa21ca452b49821a55fc6e8fc1a0a01ec4e2fb160789b8505b1dca6025aa54ff0859e64398ea1439d0db1087b216d6a7c7c7de15221cf4eb730d 62235b9ed489651e4ccbbeefa3206ca92b4fec143a3409607c00ad50b54e023123f6a010243fa576c6b074e893328a662fe6642733f1aff4aceedd6e49b5e8b179df6854456b71f5bd1fbfca32733c8964acdc99c5b24a7cd9ec6269c76abef7bbb237f93bbb1c448f4daed7f7cea618eddce121cf44c918ca9e9f3ee2532e 61cbec16a8640f4d5f8203c16887a5c006b27e4af16d512106b8a02af99c523a18d8105b7d0af93393612a30b3e530f241276295c6d4f643b4430cdec4b319e9a99b1fb6c43e427f708fa9b1a2e2fc77dd831d4e05bdce9256ae7bfd3c6a71f9fc6fa3d6e4249d240809396994de2555652d2f25fb74540b148a9a3289fdcb 801c8ba363640112f478dc6be10c7de29e17843e8a57757142cc9fe28a8aa02f9d472293ce9fbb7bb93afba6978c6a596ead60f18cb3735dbba06aed97fa9aa0f5d868ca64c66ad83ea6ce91f68f7b99c3f029ca35079ff03c70038896f4c19c91d95b6bcb76af5ecf0acb9594b4c46ed9d59ba1939d7f79b4219d9d319710 5b16b2bb3c50d7914d1d95f264e6ac564b13db6db0bbf8f089210110a1d844e6e2270fd9184e6265b4f5c419febb4b2b0f902d9537d8c82f1aac708ae639cc5e8d8609c8a0fde85055c151d2c0d188941f61d917037ec899e352f96fd9674b85dadc834f875d86b471a2721478bfa4893b14bbcac48ab49e90fd6ad24f3739 d96164963ded594d13a4555072dbcb01af60715f54c61c120c562e4152f53a3f4d834a5250914d48f227d2e90e1ae8aa1b920f181818e458460728d2fea2c82f457e96405ad86204a9a774f15374247867316b2f76b09b80a9fd31005e065e42ec9b5b9caf1b4cdec3280eb0d00fb550479c27bf283235eeba6f970b3326f5 745ea6e8efc5b7e2e7657bfa57c998b7fd23ace93a0a359f2188fa7caae57e076c221e1ca8612aecd1fa47372b84f4be83ad8ab3b48d337feb56d4d755cacf941b3f1220d831f420376cd4d7ba8a5ffb5ea30e0b8b802e815a3157579fba77bef630268abf7d6684ee726a1675ec70bfa89b34bffbcad37fc4f4ffb721285e 142b4fb73dcdff8fd7677f0e597f99aa33278aec2920c92fd1da6d8ae6d8ee3abc597fd52f176acaece163b98e14a4353c03d03c160e2d139af8d664680944045313d361d18e01781304ae4f42e90655e623223b22f08e3a8f95fd3e897099558cf441f5602ca08a14abbdd87edbedb3f8657e1539538e562856bae5c93115 bfead3b2dd33536dc829f669a055aade1518aaa13a3856f49dbd8fa005d8a8662933af598831b5a6eec8a2907566f60e05e723e145464e960b372961ec0237f5b2c99b68e75a47b4a4a90638cac3bea1117dc9715b4e14b6bcfb321826f68964f2adc109a171e2fb08478430c859bdd9603ed78e38ec9f0b790d2cdc85476f d601dd756cccfaffcbf8ec65557605ac62013f826dcbb53707760e23c9a9367696d5f08f67a68a39ea0245acca17616a97611bb64c3e3c6aadb6bc32d8b715ff1680b84f5694b93e3a688d4b74997883aad5e9bf87839d90a2b04c216908f6036761a26dd29cd4a39d266a07c39ef5e1192f7f2fc399dedef45ee7316b144a 8bdd71acf86cd05bce345a350312d1459f7355f8b400b2196f234a1ccd98ebc88d95a4cc9c3a733b18abfd56284ae7e661810db272b872694e3bd6d0d0bf7bc3a05cdd21bb355faebd0d47c32aeed5032713a944092dcb37ea37ff4f52c15d94dbae606e600a59c862e0987a33a4a88c86567945476fe9a5b82a167be4f2ec 53594b44428b20d6187a883fa274aeade2442fcd2ae5f8f0f6c26206439766e91cbd8624c6b102c4a662a6b7fc647ed84a8895abb750a4034409890c9bfe96f35620b1bc4db470e657cf0efbc34a061f876059003b516b61608ea77c186e6e83706acc7d95b523929ea6df4ed64e9e9eb1ee31f5c329331afcf4376c11f177 f7e57fc03b333b037b1118c703c0e38c169a137837e56853919677a61f2cefa5006fb63b3dec00a8e681d5052ca8e1a6d18faf65cf47e14407bf44330a7b53b50465f092af9f0341fac69e4d9d6deabae03f8fa2f817554655d4a3020b9a69b987a9d949a617359cda99e12cec5f0d37d1ba7332f7a46d91d23d095489e180 ffb68209d323428d22882bac41312e9b0a46af9d0b1bab83f503790824b3ed6e90ce8f896dd27398d46b6434f67e189341d6ecb9923133b0477a1b147c15805f2f05cfc50fe33a0a2f5383d1461104b91e8c7198ee2efba391309e231ef1483781fed70ded16f66b83b898fe922188fff753bad970cd53fdbead8b2fe3b5d8 01384688fbe34e8fd7ac5a0c8eff2cca73a3fb582735420c7cf23cc25517e4929956be9a2c5b75ccbe3eb7ae0dd414f5804a9293380878a6fa7106dd10f6c414f92bbf8bd8e3c927fe9d5ae5a4c7c0ecd5f390661576f376cef283fd15d5c1a4bd189ffd4447ac8ec834cf6b7f14ce953351e228d130cff97af507dff1d277 adf618a344babb8926489695724892a1dc83d64c998a4ef8deaf76739006d30c18c76fb57b93810f41229daa76f7bf91158dc4fa335c57e6627a604abbaf14932f523860e94aafaeefcab92183079f755e83276b6712bb22a494312b6bc8abc55f0bc64679f02219bedfd4b25cb20124f766951f66cf5eea6ede3317c16409 374ffe5017bc06349493ad5df3578e3b7f1c88bd557b183e183e5784de6f3e9991624a964b8b907bc91a8e9d3abc961bca12d11e7ad8d98dcd7fd918c60ac64d923fb638ef043bcd153ea47ed4c37ed5ea78612446c4f9d4024f817cc5b4ca509f546b22add2575053d1f689549964063cbe96787a9eb2dc252306e45cf484 5fdd5a8d8f35e7f22003c375dbeb53f0dbaebd169160a034a10a6f95a4485774d2c509c51b3ac00fb4204234e6e847ff84cda0dd5bab7a79b7399bc8dbe231e4896817d6fe4bf03ccd937c8bcceb3e37e561677a1253c741ccee03b1861bba44fc91d1467a2e5b66eed4f85ce3070dcbc921b08e6fbb49eca02fee32a11a77 34cc6b555c5e7d7403de20a97ecfbc07ff2dd08eb3e7a9c682aba6414d3061e8643a1ec413f23e7daa12cb5279aa2a895eda11d6bd0a024664e5ece549a30a8c924e71701a17e61483d243b72b3f1193a0625e31e3bfb4ea395d7f0c0c3706e90afe004a763422fb1306c44e7e4d5125ce30e2a47f4d635b7bc377338ffaf3 3b06ede9ff7c969965bf2b15202a3062f3f9dc587ded512030a7ecfd76363caaf0eeae8c0c33b8815b48f8afa164dd5b1af0d6b284a6cb9ddb4b6ccfa849c15a4a410ce270aa117e285552b8730f5c94cc5643a44b366457f4db40ee48c44b58c5a5e9d0baa46eaa2828b5d6d5ed9e307f5885b911056b73dd823a523d1ffb 03c7d9738f06433a00a2e23be010a1468b92698bd7fbca10fc359bfe1a9e13686b2d70815fd0de9c09a1760b871d1707b77a09158e96b8b40f4ebb28de3530eb6f52febf5497f3f1311f6f45a5ae81d61baaad56395ecec7716b388d5805f2eb9f15fc73f805a5cc6fe57224beeb1432e0edcfb8814d9b7d04162ceb28c0af 627dd977c8d7528f7ce0483ea3034b3d732cafa31580705f9aee1f323fc9638044834fb9bfb26590d19d7b6adf4a40221cd634ec1f254cc7a13feb6b8d59a163c2b98af9dcb49dcf2784d1992de5bed3f72fd807850467180308d14db493d33c28c43058957116a35ac1b9b3c638eb15b90da10f617a704b42980b51f96931 8f7499cd96f626aa312e5146e474b23e0b63be58edeccbd9e770f4b1a504b78da7ea74a08286c88d9dc40578e6c7d36a8b303bc1c0507c63fd65c62cbaf2098c89fcf89136e91c6375baa7a4e0fd169c4f0dcd1a8376ea0d4cd39763e4249e9e23313e218cfc1defe83f2e550008eaf6e988b3169c4b6cdd104d2b5b530410 459e8e2d318690ae384b761d34bc3d9ea002b6bb6886b178186b3ff71665fa1ecd6f8a7232f1f048802345012cf219418919eb12a5baa247ca1275ce402061d7fb7aa95629e6feb84074757a1162d67618b765850faaba995fc08f7df21c0bb62e1188988e64e64cb910f243c4f5db283e3e1f6d3faf155e79403164e40746 683a390d1e3459337dd3d91981f3754724ed56a047631774b6cb77b10346ee7f7585643e74f600339c306b9fe29d4217a0fb3568a439074d9cf38df972ea9c6ca2878ead2ae81b8ab4863f2f890934a2a43eee5eebcd8500db5cc1a2dd2e042a506aee34d5f2a7c0ec86dd4f4cc3538f8014533d3d40238b9a328425578e17 3aa0f1f5873b9c783e42848da516c25790ce61f5ec0a869bec9c0da3490b08923aa4b93cb8e07eaf9a23e8fd6b08b2a5660135fda241ee597e44e1e7964fd371746335b2acb831a6ac3e65815b9732fb5b5abc570677a79ce8bd441227b8df145ecca0aa9b84f13cfe0a77bf7d6f1810549bd431d67828810256f01f03ac88 52d004fe 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark{restore}if %%EndFont %%BeginFont: TimesTen-Roman %!PS-AdobeFont-1.0: TimesTen-Roman 001.001 %%CreationDate: Tue Nov 13 14:05:42 1990 %%VMusage: 29467 36359 %% The digitally encoded machine readable software for producing the %% Typefaces licensed to you is copyrighted (c) 1988, 1990 Adobe Systems. All %% Rights Reserved. This software is the property of Adobe Systems %% Incorporated and its licensors, and may not be reproduced, used, %% displayed, modified, disclosed or transferred without the express written %% approval of Adobe. The digitally encoded machine readable outline data %% for producing the Typefaces licensed to you is copyrighted (c) 1981 %% Linotype AG and/or its subsidiaries. All Rights Reserved. This data is %% the property of Linotype AG and/or its subsidiaries and may not be %% reproduced, used, displayed, modified, disclosed or transferred without %% the express written approval of Linotype AG and/or its subsidiaries. 10 %% Times* Roman 05249 %% Times is a trademark of Linotype AG and/or its subsidiaries. 11 dict begin /FontInfo 10 dict dup begin /version (001.001) readonly def /Notice (Copyright (c) 1988, 1990 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype AG and/or its subsidiaries.) readonly def /Copyright ( The digitally encoded machine readable software for producing the Typefaces licensed to you is copyrighted (c) 1988, 1990 Adobe Systems. All Rights Reserved. This software is the property of Adobe Systems Incorporated and its licensors, and may not be reproduced, used, displayed, modified, disclosed or transferred without the express written approval of Adobe. The digitally encoded machine readable outline data for producing the Typefaces licensed to you is copyrighted (c) 1981 Linotype AG and/or its subsidiaries. All Rights Reserved. This data is the property of Linotype AG and/or its subsidiaries and may not be reproduced, used, displayed, modified, disclosed or transferred without the express written approval of Linotype AG and/or its subsidiaries. 10 Times* Roman 05249 ) readonly def /FullName (Times 10 Roman) readonly def /FamilyName (TimesTen) readonly def /Weight (Roman) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /TimesTen-Roman def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /UniqueID 33454 def /FontBBox{-170 -240 1000 935}readonly def currentdict end currentfile eexec 51b62e6485ff502ba0e8c3bcb14f6df4972381b4871adb09ac9eb79905b00499b284d3bc90f488ed47606695c14ace6e5337c00685f36ee2c0a1233aeca83a807417f1870e6f126918756d17aa284826c2964c8e734b64842874c6005391a75b8f8303745e9c4f94828e10908c61a58271cd38185f3d7704d452d4a652419d 25e4a46d383fe3aac944f6a617d700dff78e6ccc82da82c9bc5f020ab9ee6e25daa1e0cf17cae6ca458b0b3bafb1d380dc4c7e6ffa6bdf1558786cbd6467946be05a920199a251fc35d28f6d4b8902f468b31c03124bbbd9a4faba60c491d17ebd8208279a4fd59061d91ff6e369f4f66e67e6ded1c82c0141120838f851d9 8e405b14fd0e04ed329f016107e6206e9c9d67a7e33def897d2f79f491b64124220ce830d9c723f002428556a6ca7a39c1fc69176dc03a5816d67c95b2f9d97e00450c23dba119c1239a5addff139e5cd228353cd96a466a6c20ace8d2937c63deda65e99e7431e7a5ae2f86bf85b44cafe6f279869cc893d6b3f4ccbc210d 2720c1536962867d23f57c41db6e47edaf612b15866d7beb42f68d55f5d962f624c975305fa1b7faf241a8ab9494f1bceb958efd210832088b660401956c5b14d821f1aadfa9431e4bdb0e332285419de9a2b3bb99aec22122b48f22eb6a3f9bde585265d803eb67692abfcb28b8d945f5c2ed4c4e94c3816678f7d9a4e5fc 324ea6c0a20da9787aa4cfc1d9bc73099b44836310e3490f5e4cbd27939138e746385a57a6bd53a97473189b7f1a60cff16282156385e51432a7a87ce4cec8bc2e021add7b19783740e8f7fc628b6c71bfe43e4b35948260149c96ca6ebbf0706b3d38ab61a01e20ed7acbceaebc21e646da9db30dacaaeba11a6fc1426262 3a0ce8e0e9e57cd482a25667c3040b965b712457f44c3a1413e63f559276bf384b385fc9feef93cb188ea08a73e8bccf3e0d5dfd2efbc5302ccba867e561becfc9db7e7da2203df4693c3aae0fd1792ec06c8244cc7998c64379f67d46d45eb6e20b215948777b353538d4dc3f1b7c158fe0072aee473c4ededf605490e58a b6af02548b14c96bc8c0b47e19d7d955fd019029a8d6a23b4f3e8e9ef5c5033d4c395ca0d63b83737e5bb1122f10e401ec9e127d056a4a283df85dc40cdd2ded2c16dcd06066a067c907f17439719c569a573a79ccd058bf1336fe2cc0a1e921328aa43a8112548c286374763ca60ee973e1281ba472c651b6c0e4db280733 49bcad08ddd302bede73f545d7765da889501aa89bfb4705319e03c8992994547620b6ff6d300b674b39d0fd2c66eb3f32e1faca71bd775d168451ff7951bf7836fbb8bafbb0d412652fdd149bdd0da38d05e1fc22efac25ec67cd3921fee95ad6270751c0044b5f26e5f97ee7fa05cc5b34bc25825e5deb81e613a4684e99 ed9e61da035b5d3d8dfa178282d911e1bf8564ff657d7a02a43164d87af4f24447a142dee2462e4041ea77cb71312dca73c63cb785390412dc9bdff494c9bb09a402e3d2d148afbdd8c68f846703ad61a68fb5860425a0a66b863a82193af0d61849898039e3e524fcf40edd5be7d223f76533c466c1612cbdcedf63a67866 a2735137c452931b41fab734278171ef27a8126e518eec5d9bb3870fda3a19a4d9f9021d2131047cde97c614054fe17fd9e3970c1801701022a7b69ea1be414fbbb025bc62165cd0ab1954db74d1421b2e233346d6c5559634a7cf42562909fd8b505294f65a9979f2283665ef4785d07682db2d717f52c70b1cecf007b0af 22592dc9688346820526afd221f749cdafec2eb64db7060981c0d94a18bb3b61bf8b85668a6f63147ba54a1bb05e94abe9db2d7a8ab87e22ba6b2531826a242c6caf7d0ae98c694e5ba06b869a13dbacb6e3bd8e69c7eb84e9764345e1435227689cebe154566cbe7c25cc0f3074a56cd3f34b8992c25a463b7beaeac1cd4e 433947b36c636eb0dc19c1b3ae516b3dc15988e7531145702745437bcbf3a8cb6ea25d04e14fbf09f964064c491bcaa37e544540fa7ff1f0400c0291ac583091ea13a0c9d17543da820dd9c5af45069afdfab5a9d77e517abfcf1416d57ccd346b64de6efe447e2c637cd97cd1f2079bd9703b66b8e5337211096aec287ee0 c4f0faf924e545fc237f12812c403aea2047a4341f9ff8bf0fd12ebeb418318a398b8aa7af5e54c2ffde9b1db2fa31637f0f93d999727251d5872ca1b05469e4ab8e21d413637f89aca4e09ef5044524a9f4373df7894a63d567679f5829c91564696985b0c6bc9ed200a6af87b8e9e5f79c767c6cc7fc91fda820b5f93906 441e51ab2478f8a58c7c2c6ab0a05a8f919a4814a4f02e7c762f7d3fb0b4f93822b8ac1b9e0ceab70a9912a873fa4f3241fe187f69ec9b7ff08f9ad83802c008678089553368525eab86aaef316f90750d8333d90f27f791aaff106c0be6cbc3315751a0049ed44aecb448aa29595ad68c8d3971b5681c3e96976903263259 6949d8670fbc1621de97149261408faa0457c024b5be2977da6f998a28e0f2eea1716d3bdcaf737a46fbaf2d74cd475517d9d817da00587181add8b88f023a1a61be8f56b4368d1fc3518966e1f71ba1c29f330fbce755432d5eb0d2c89e9e26e5404b71839f9889245060e4123cc30396db16c2dff1478d201928102b57ca 172615a85645c637f3e6709788baee28b5d5cb9a1f4987f4422b5008f83cce1c184163d20b27b99fa58208e085f229f4f6819e04aa9311ec234d08afbafcba0e4435be9f8f9c31ad6a2bd09badc4b026d06977093eb0d2b8315b1c5dc76213c0ccb2545288bf96d063e4c9a8f1654f3f89f9cc880928b765354add5cbaa42f a469c5d22111244c25eccb32c1b9012f843c2a6fcaf7600029fa3269c4ca8fcaaa2ae89cdf27b0f24a45c7082769e086f4b74e7ab02e80acbfcc0308ea50903e40d203f4eeb282556778b0918c240d96039ffd1536dc31e62b8ae304fd54844d0c4804c3020cd66bf2a8ce41ba676babd00d84b6d0d276bce91688ec3823c7 4cdd6ec411a9a270715f3826af723dafe918f4977c960f45475206cb2889a8efb319ad1bb229ab217aa5e26d65c7c20da60e71c525642a0ee0c3980e0cf8f18985081e4e95c8d8357c5ea5397579db5093957d96299a3a9133e192183a037957e228d693c4a2485026f913154548213a5213a984401d5e656910b2e8e04bd1 75e9e4d51a12b7f02b47dfd9898020c454c648d1f74876eb0a9c6a98d46bf51825d967547727ded51f666abd6ea381e2165b72fb4c1deb08fb0b4d7f94e35c7f0e714242be1ff44798bdb9ea8eec2bc2f928eac244cad6fccf3a80c45bfd28130763ebf5bd98c054bffcf381d10b3e16285924e18f07273025a21251b9b343 b8e5c5069829b0e12e8e578462ccc3a2d6baf878198e2f6dcf7fcc705e278aba84a14ef8e9084b7be1fb6fc053fdeee3b31bdfd3366cbfcd5814ad8bbb0b6477b07298ac1d4b8d733b893ffe8f1c16d81e53bb8e39e92b6f7c3c281bf48c0a67aae051bb59e9dd5388f018edd4f48ecdb11bb413c31fc8d802f04aa4b481fa b9e21193280f1a11824ba4cbc18bf8af3c4a3cef362a46a01c4a8bca957857bbf8228a27878cbea1ffd2f3b931e0ebe96ce3f3acadb9b6546b99618b4f749e11aa30e9a488efd0d6f4fa49c77ca5a107d4db49c6d16db3a04309c40e6a8c4882a6491fd13e0c8a67abd7922e56cd832224b4ebed84207f14c6efdf25eb1794 076e09ace85a36a5f1c3442e43edbf55b6746e856edbc940145061419a69b7ca56480a667d6003abb4d674c78c4da2a79eb8426466bafbe13a062f050b7c40deb9f529685c6fb60ceafca4ef094fcd1a67fcfee4687b504790aa88e0740f8195cbc9bad1a9c95aaeaa363910a89977b96e5779964a0bfd7abafe5a70673984 98894cd5ffb2daf6112cebcad3654dadd076ed17b84368dfe42f76b50909676c0fd124fd7ff8e62b50b29e64478aa0e2d38a7d4bde1bc0d5e7242105ca4cdf85a9a9606a16cf8753aa4d6a891421b0dbd54b40f95495016f22571fb74265ce0fdf476ee119e7260cc919c26fdae4894d369a4741b7f9299fa71b099115f131 11d8540598409deec44abe75de174590d5b0c8f6406202f5579c8af3aeb035a5b10732c78593e793c77c971c35ec0eb7f99fe0a75aca00ea4c0fc2f033a900ce4b17cd4a77813d9395f97beb023542b6b437aaba9a041846007e05c700da9d33ac963b3f72a701f74735408059532684fb8d0f4a7f787f5cc83e44c93803a1 0f419882aabed65094a6878b5eb6c973e26b49d2d1fc3ade9dbfb3d56d04ca4e9c680f5daa595c3c78a4b349d06ddbd1298f498fefc2e5b1ab6cd38848170e451203550d17b5dc1058639e781f081518c6b25883c39405cb29e40a02dfb62ab5934335f9596cb58e74064149394d734a3cc1caaeae16d8d4acd132c6b29ca2 9367a378ea3536b17efb9e67ad284076c3af01612fc415263369b46fb981c1a28a1e7f460b4ed946950e4aefe53b44cbbd7950d5e833a615cf820084a70429e1d518b07469f871f6ec5507ce6ec720eb46949d67f1e0722b516bdd7ae4951fc53fcbb22ac8f22e301219c65a48a352eefc3bb472772e5261042d438bb2eceb a1b53b169d9ea3ee5d9e9fef300e5cc8dc8d5add69a45f99bc7c411b500d335a7919499d35a59ebc8462afcc492a24a9abff9a7b28819d6e0791839b8a78c6a77091cbc440febfa978a6810a6033795059e1d4bd53f51714c6a30d0ec52dcc4056dac19012baa41d97908d3031f622a6c3778e4fd10160104e67973a1b99d4 5c6f1b71aa7a91316033cac035e848c5480ca1d40968884c8bf80684c43e3ea2dad857a5fbfc44a0b0d109d39a63c61dc847519248ba2077129f916298be987493a4ee48701305f2ead205873dc545967f3110cd50529d480b614b4ee069c2374eb59fcb058472b117ee339bd0a11514b911e68551e63301196d45ff894243 d36c9f35a527ef27223d106f14ce8459a9754cad920a8a3046517a1fa1d71580ad4c81be4c1aa8c93d08bfe7ce8f338cf15de598dde8d62b04725ad11f5d369bbfb6fedd36c3661bae1e77864aebad37f3168d7fc7a266062d438cf966417e5c3804bd54967c9e2ea800aecbb1949f647fcd7d0948dd626f3c508ec08bed4f a998770de01f3b42faf62fe8b1f587be58117f39a4af296dbc01e9b49abb615c85150748ddb9bc98b7c5c251127b60983e62f460ef50708cc72627b8695dad7575d4905e86683b5474c4e42868258794e336735d2a68128ae32b4aff8f85b4490fb18def9cfc5768d40cb8dbc4f42360b6777f3bf84d45f2d9c636cf7678a1 c441bc597f0cb27d67c5807a4b5820eef817df182a9d6af7cba27fe66e3afa451e3152fad421993f727acdc48ff6b2c1c50274b4a68add206550a6a5aa60bc8771ce2e21f5731533befe6f85f2fda046bbdbfb5de481ddd1aa2aebede8617c29c21d320edad8cd3cb42a73fb02e83e9ec5598000ac66ecc1e562dbb640e88b 326a4d9f118085017218467469c219f43907704fc566f3dede66586a091c2d759bfb4705319e03c44adaf6b7cd0a0d2cb3568258a32cea5cb29bdb435a1fe8af1e4e777c396aeed8d99fd36d0ec52efbd7ac650d3f053e1cc01cfd053ab3d700c2fdbbdbfb9dbacd469fc371d452a1ea89ef801aa8970f2c4480d4a547d584 0491a2950d17b2312c3cc813fc626436b4d6bbda36c6adbf129cf2e8b68471003bc55da5c9bfb4e15f08db12ebf0b5ebf0fb96b520655d7547f7c32696272f94b2cd1f4d0bb064d053e9662d6949cc83e1fb75e854bf8b43772997528142d0c7c5454e2474756157053f80dd5fa573c6c799426de0ef1c80263a4567a29435 49e2132176b234d6994ee256da244305b1973b882a0b3a2c6be75e28e3f43e30afda482ae2a122a36d71c266fc183cdb09a3f165862df2d07e15f9e5b74a7d788d265304c99bf7f56ae197af805fb43ad55819ee4499fe29c867a27f60233f6a73c03c44ec877fc9440fac73944d7d145629dfcc4c229410505f0773617314 e596d904bed3487d1ca08ff47cffb0036dad4bf9bb573b167ef1dfaede26730d90301c2023727ace851965e55430417fde47c018ef03dd1624c32b594941505a1f351271087ef6b5b734e85b21626241291fdfbfc9cfbb6a9a88c7747df22630d5e3afac00f805581bece6e02426ccfdc91e41e88b83e3328dd1be9093ffed af9ff9e6c384554da50dfd7a0be89a6a900c38d8c2a0f73a02a8d97a27783a5aeabb846c2e9301dc3cc675b5b1ea73b291ba659cf38ad3a434d23d766fd1ad0c46e815579e4782e8d2407951efd37837c4d60bb88baeab8527349e67eb5fe8e0cba8ef7054fa99d0174ad838180256ec2b520f0ee7762c6f2e9df52cb8c141 ba7e23715f81530a41d70126c263cac0eac2ffb1fd1289118849d702d3894e55dd7f3cb81dbe8753ce47d49c275e97c00faf46740c6313e016c99301815f44f3b6a179d47c749c39282d63236607d85b6fb3932b45a1cc8dc24e7ffbe05135b57b3e5f34c48aa355f27b3f65291e279da718c1badd55422b4cf3d87a466238 54941c818bb0549bb37670ba762c5cc86b07b9156513b922f1fc0a0701ac712b6e5572d85cd88270d0566b149f356a25c5a94fa2d0a7a5157265ca385334a9ecfc2dd2dab0c7d006e8aa9edcb31623020ccf408f1199e124cfc2e4578a20dad7f9a2a7950636e77b53623276734bb8da51b8108e5ff9de659fe022ca0748ca 08fb1a8c024ab92368fcbcabe13396b78fd465b829d77ab2144e8105873dd475c6725de079047e14eebee449bf8babc5f12e84ff1409bd9cecbd18e755156c07aa4eff9a3c91d6970e6f22fd35e31924d4eebb5935f5d8a6f7825e132aa0b7fcc9a89731945ae4514d3f0ce540d1b91c1b22598af2f977241dba3d50763ace 1ce3109c07d1135d8732372e8f13e41da0518bb2146611dcd211bff2a5359aeb911acb26bb09fd97f0b5984151d6f06608a930e6b542dd3e595f5a7adb0ef9c6c74a1abf015f58dd9937546e30b9a9d7a4cf77b3185993322b70f647ad9c4d66169f46e016345663c4ae2eded6ff9e2c5cd5e468bfca328aab4016e65aab79 d3fed9cefc47baf19325431c8eb39ff4c1fb06fb497aad6b15b3363cc1707dd1a7685100103966e88138cb39eb7fa56b146bedfce51cb6000cf4a37cfaf6d93299380ee742c6c7b8d81794f9e1dfff50620ab8d32ce6312448b7eb44f94238574b3850012a2e3a98ccae6616b7eb75d5462df6f0edf2f772b9ba1eb0fcde7e dbb65a77baebc4f3812c8c96de0444f2f4533e9a8b3bdf550736f4a7585265adc8ce164b8b98052b2277aaa7ffc2c43e70a033d22dfd04fd3112d9e9292d2248d258bafa49b59cedfc74f0072ca4b5d7338a9cb7d436a91f3cd5cbf2c0e7ceba4d4b731320b17992a8ae8e156924a66b87dd3487e12bb8b6137529b401dc07 b1dcd1349bb97a22159f491471b5474cd1c28fa680899bc12e61faf3261c1095c6e99efff2f96eb89dbc803a0ffe8196520d2d39d669b301b8475a7459d0c632b30994e5598e11fd113631d6a71483c7af50bf9ec766a1fd54b4ae233ed72c4be82f144432fffa0760f9e48b6e393260ab22b29d4a7a7dc7d39682ce210eb3 0e76fd67008e94ee1e41bc99c3842cdd551a9dc82fd271c4cf663fbb5a897fc70c0c112539d8c1bd020e2692f52deff864dfc3c8d3b997e0d96f9f02adbbf79aaeaafe69a87e754f663beb1506268f7cfb02c3769e04994eaee3e749aab507ce826eca38c7707bde43b932f0bd53bbcb0808db0525e61cf68c8aab24cc0345 979a7f9107f8f273afcc98104e5446a05301137e26af12ba4acf3eeab4b4a5776f0d0d4f4427d09733b17f229ba16d772bc0d343b00cb9d0e1da56f41806b7c3d559593f6670b3d69aebc3d5fd8a3a235f31bcdfd22d6bbafae0af10568a5db4b0b2d7e87b0cdaaedd0dd902f4502c97a4d41b9a7b9fbbaf983413d70a60e5 540998cb3cdfb12c0bc5761c8ca9db4fa44cb78f95ef6e1c8a6f98d56892045008b9f0fdf407936c722589e5bb475141b5cd2531ed987b9b2c65e0e4038581975d4c14cbdc6b1e647c78e1dc02d360997739b475689a0bd7f24fb7409f9492d7ed57cfc8475028bfc9d56c2218507344c8076e9abf8c67873874aa5d0ab358 6ad890f143b42d4f0f8f1d9563f8e2f7a3b21cafa86a47d4bf24e9cad5c0df48bae8b27ce50418ba70121b4c7693be101ca11e0738994066cc9c49f4f5bc054f2c628fd3a05fe0f58fee49572ab58eb149f1afe69359a0f5d4378cd76cce4b2c03b6343e10f6f851c5e21a4c79f1b59e76674b284abef617d8f90d810d36b5 6f55a202bb5a041391b0323ce00483af93ce8e99fbe25e0d2c79aa6e402212cbb08693f1416f2c18620539faf5fe5d6c0011df0177a39169e6adafc3d125cd7a6daeff4a170c35d1cb9980c7468bd80dd7ea52706722ff76a9cd9a02face03c89e37f0ac3493c307c101f7a1612268b74d8447920f21ccd9aa169a4281516c 1a794193f47850cdbb6d79732cf8bb5836952bb7e9a810b4012f7e1203739ff643ad42824baf001f33fbe147ef04079f4900e80d05cbb6570a1efde151232bbaae1e14cb46d2f4c59bb7c271344e9dd19ec876c63b73b5478e0dcaa1e64700584e7659c5a02eee2646e6534dcf78427d4b6c7376e14e40010eafd2067740e2 bdf76e009f63fcc7846457ff009df676093cb1fc4d345bb35aac66b2cae26bc4ca22f427a417e985ab34458d845fcfaf15219cc600daaee45cd4331f5a34136c32cfcffb9caa15e34aa8e053c50c6e55852dd73e3f488993ebfa5191f29e0e520beccfcc4de3f08d16459cf36171ff04864bf6983bdc22f847763268196bec cdc06da211027897552320ff402049bf5338ede7972ce31b82574ff2fa097d0d0fd209084d5e7a124358cf18b5435a722fab14bd90c887e46e608fefaf5844558fc66f62d0c682d6e2345f0852df867a277b34b82948b08e564153e0beb068f9357a68a158bce6001323f1c7e2b5a239821477b11bb41b19409ed9bb6621ec e9778fca9178a19091ffd183b2c8b28ddf6cb0d75b0db838431bc75fbd8860ea942c80ae7a63514fcfe93512770074b37946a626dacef4207120854ec3e0a334b8fd270b9265bcb56b38e7ffea840104575b5650b445ef120dfc5f5a4aa3f5332b63a73183f2889f3c32c369a83d6c12357a9b4f22d8e8ca3440ce3d0d4c1b 76ba75d605cb1aa003273afb9640ae33d0da240229654276d8342894f60d3490dc62cf9ba98629179f79a0de87ac96cb364a3cad254852b891880d78f6849e24a80ca67c6bf0dc0b7df1e973c43b785f07b8e3614a006ac26cb85e2995a0699643267d78c267ff79974d9dd63429b0b4f6a4bda6d6189048b9bff9fcb3475d 4cebb0d436cf5ddcab39d7f8cecba09919adc285783f7f8bb8280a08bf3b160ab6244e308b71b7d3db781a79ad3d1840a43183474f18374a064dc6e679c63a984b251d8d3c27d4003bd43439057574c8d57327dbf5f68700637a7a410649c605b6eeda5cc71203edd64407896a8c0db39d0052ddba5f3c5656255089191a56 d862977071495846a54aa7caf76cc90580513f8e680c0e13a7b96b1f6f3a3c129b9a489f5956e6167d13f0393362a839dc652e74866a06d58a7d4f793c4789bf8064c7da8b95771beaf53637586e7609dcd33cd7d80fab98eed57ac0f655425af57c831dce21b7ed2fa6961e269e3696ebdba10c126651f8dfcf7200b2e0d0 50718d8b0ee3f446e5e3fbe232469fa3deb1ebe778cbc9dc46dead54f0a56d5902afa345219004f020fe8f330769bf6022839b01c40735dbd3af6b4d823d3e689897f848e4cc8cb72e9c4ae9504b61b966d8405d6650b711b6ab5594b9c96eef761543b216f3ed2653a4c22c57c063cefa09389e625981e9e86b8422586381 a2e857f0349caab0264a277c71d7ebc4a072cbaefb31c17f3acbc07c26cce9f0eace9f97b59ea655fb65ed0e596cc5e17867e7d078a5b82ef3ad12eecc19a3f9cded0dc81faa6de3ee1df963a90c2497c3d2fa00de5a7557245732330efed68e974a93655e2c838f8722e868e91267f3a8cb6ea25d04e27ad7e1148e26b683 08704ea00c55139e06e1ecbc2020e1f1705e360af0c31bc8808bc7ca340daab36fd55c33f348e99f8c2632f2fa1d1d444293ddc745491671116e2599c929ae962133c1b87264d7f713b9fa2ba1712b96264fccc9396dff39031c67fb14ab1a8ba8fd68191ece265686deff079987bc9bc90420ff4b8e1512aa32caa780403a 174ac33624d6fa136e6cebe11b1b02fc1a3ccd7cbbefe38b94b74b70620c15ed2078e982a315a512c26bba6f2dafcd1b14cbf07f07829ddf5b012bdaedcd9e965d487a531503e4722989215a462364518dc6472569ce04fb8c003c603361f2b147fb2764f5c428bdfebea5899974b94cd6d74cbcc72c8c0aec3d2dacbe7178 a86b1c6cc490b27180a23fc1d0700524145222540cc8e22b84f4ee447d1a705e2b4f691a078b5c134ebf763cc4b02277d32a3333f5ac92fbb8384d322df308a1528597848eeae0c2119f4930bcecf4dd5a9b8947d9937ad96a43ad3624f746cd15ebff2995fea48ea28d40ffd0bd03e55c7b5743911173f1443303f076564f ab4b4f7a0129112e2287c4dc021daa989b6fa0f9f253ce7cc4406addb4d2eaa0513683ba8f9a089f79b8fc6f5bee64a8035eca16027616157b8dffdd1bfb8aa74d052e9da430ebf247d53ab00def146e17348b68ec3e4611aed7835d11fe87a25bde2d8bf41bc4645895200036d413cd431fdbebffe78a1dd6cae1980aa7fe 4ea327701adf7deefc86c2bd275288e1319bca216bb36ac9a49a2fe89939f38c3e8517c72fb28644f16f7f35d31ce2012724fbccdd4302654935db65847338ec52dfea0a7111aa41b9d30d7bf01e8db68a8da0dd2b344272abde7a2094d4ab34f3f501d96658913ac77bf753172ff090a1e5dbd0f276d923b65322113b410b 401ebdc56fdb44a14ef31c430ae3a02237fbbb9ead73c18a3d4a425ddbc4eda66e38652c7a11fddab2e8f894184c8bacaa0369f6f537ca8baf9a8f516e237639f7b15e200fd3cd22e26794dd31f41579697d4cde1ea66ca18355138b72cd50473c15519d35696b9e9b02ac56f6a0d7ad64ac49a3c48f0c0695549451f1ed8d 8305d04f54e657424071108faa203ee7d6c6bcc0d2a2523be4a6ec2d917b2d0952f031a38527d47270ebb2c6263a2613775be150a415ce3fbd3860f09352327840acd5cb6edf0075b6747d3a461625e9fdf4debca255f2683993e13deb59f98a3fe4807f51ef3824186ebbb899f1f0d80c1a6f1702630d51f74fe23ae21d08 cd15d491c7b0770f840e526147b46d021414bca5fa2f6619741a94b7ee65be5f9a3a30c8a03cb82fabc120f1a49e750f353ec28271df4705f5024551745bb0fe5518987d74cd155a6bdf7112dcfe34df4319d5198b0e2b61956c0569be200c8b9c075f564c1bc7e8fbe2dd356769a5b047b3ae8446d1ffba8e7bfeb7bc672f 963062e6c698c68a377b6515fb51d40cea544bedf32f019b92cbabcbe1406f8cf62647a84b487004dd8da6b54b276903e6f827ff38db9a0ef43641cf2ad2cc7eb08612b1cffccb6014898c6a5d49a8cdf6d55510604e46328a4dcebebc5b4c434413114bb2b3870e1ca695c7c675b15a3383bebc69c2ebacac70fcf0588d47 9a4ce18daed68295aa13e1b9c63d7c63248d15c610528e8ad70ceb6c4be3c79a6e74499c62bf4807a6a6d2dbe77fa744efca59058620d20fa2a4b4e916e564810bdc72068d0b6ff4cbdf0ab90bd32bfe3ef8bb694fa3b95192b12925c6ca72bb4d4aabffceeaa68d6a4abd35c9dfe4e45276a3fe841e90dfa9d97c6019ddf3 f36a25ce6769f173b9a3ef2b599daf8b496a6d4cb723b3506afb02ef912f0ba83fbe6e8026b0f77442278f6149728719b3e025c57a53339ddad510d469827d4a2d059cd0a4ebdab21685e1f0eabf9f6fbbbd7bb701fb5242f559e959c55fdbb551f84ae11f158fecb416d6366497473fc6d8447e650a084e55e65a1d906ed6 d5d205c57692bb1eeb8ec0a3654eac3d797aea3201ffaa1103551fdfd8b7783e2ff5e922a495fb2d6a55ae15825274401e6058ec8fb4859f069c6b0cde19ac933475ef320d9ce89981faf8dea062325278cd320ad6ae33cb6ebfff253d82ad42848adccad2a20b2c55eb8288ccba70dcce53371e202c87b44e64e6eaac19bd b3dfd8f423c064543291a49164b64e84433a04eaf21a7e76c18a276c4202cfe53e05255647eb850426b91c807a8d3dce45db762501f1f169d22c83cdc57ffc4d280d3218612e57e042cd0342176869d7d5cb1e4ff4f894e84311806b7b6219dddc6e7795029d63959b16b5af5e4e4b9c0b80c19961b8f69f2498a7a941bfb2 efe547bbea7110f9d8b3a56958c97b9b3be9e36b1077768e2152a895b0064c2a1f07d06405820fede66ab3c00191687370e6e5f8b252a3da5ff5956b72fd270ef54e9dd02633c9de8f24c5203d336ec0faf4987d20b4367318fd2f0ba4f03552f50e6b8d236bd379d67157edc230299cd98c4d0d4ccf7b75d76ad97d382f02 08f4c8454c7e9abcdbdd8b938e8deb3e81648e0dff29a32b02b13cc8aa84cf813a791e24f75c1feef1b0abe75d1facb0f56a7698f813a72748bdf9d864f32d8b7df54045108183042379372dd6bd0eeb60626d9bd62aaa280c3dbc341e3ec294f0c5819adfe194320e1009237eba1c61ad84f492695e7e7ea12b8c5149cf85 0da2bcd08fa415ee2e0efad61825a55e3d5d48f68d60952443d1aaebbbcde3ec592fc94dc8799802f79193ca09e97486b1bc46bb02c5ba02664244ef90b0c1fe73376df003ff44161ee8ab536137d357ed694e98d21163175cf4ed852b153e4b00c7f57dfb0c455973bc014b71a472b04d498e52871f715583773fa3016d1e e48e221781c126e5f54bff3a0a1b03a8364f271d62dc9fd3331c5af4bc4d40b3cc225048d57b280a2a479d555bf6306bd02542f26a1d25341d090b72221f25b2b9f30feeb153e1137eb926a24b62b1c9016ee53b10a78922a43824f0ea97205c6f0f8f21b194764d40a05692d46a3a062a9cb28d4835aef36fca60231aa5e8 0bd0155df3dcb626b91817401eb0ea2bbdf69c1bd54eb15052b43c312d888dfa9dfe5c4c2df4185d7ec1a576b112ecd277758a6398c54bd4ee325de4a89f75f3a5b374e9a61790e3d10344d9546fd64bcb45da065c41b58a82c9c5c6f1b05da826fca8a5b7bcf5c53904ceb274937f2444bfb35529879ccd4b508c0c634e42 5b766f4616047b6ac4fa5a3f59684f62e79850e23026f878b7c4a9ec9e96591465e3631f6c9355f85f4862c3a60d32454b48cc1a74e7d82546a76a5668a21d59f859059400dce8b26f81c36a4e087957f7bef4c1bbaf542df5db23138a57b6157c5bc2b5f9aa7c72ee4b5029485426a77ce57b8fee04e05446a434afba150d e7b8a8fda35d75615125b05312dfc874405d5347aebdbc076867c3436f9628e390a1830cf5c449e00154e17ab62035cfafd8e2d9ffcf04f6dc4039f8700f48bedd665f1e489a6fe7802508068d7296dcb5e43887ba5754d8c26a5885099f04c15e6e9613ad96903bd9a544a97111738fc6736bee239b9e94a9e5872695922c c4a693850921736dbb89d2013c76ea286ab8ee857c4cfe0da2acc1c70a4704a30ff2af5e9d81ccbad53eea498e8cee6834bd86865b5280aa93835f8900f38c584d81d8db54c25c29ac19896204aeccbd1039438e027dcb6aca0f52bef35ee40c902ec49a1686c6f7eca9a1c6fe8c6436b52f349debf8628d2b74cd21b33ac8 fc45a78b0f2d0ffc83f022e8b2f75f7fdbb0bc45c919f99678441fbbd87e64ea9aebd3d903c2daf103df62097484801a17880283fc69efa7265362bcf151e7e6a9df2227bf9a2065bb76e16b67c4f05d1024c7cef8468493fcbda13256477fa0989733a68a8e54343787a20f400bb45b011b4a2dc83027c88d10ae64b46c42 d2aed0a3d2a74fa3fad2c719723b75072e83fac9d80fe4313e3098d4379a16da0f12730d989c16bd281410f5f989e3e7178567cd79c9921f9052683cabf07514891f939999f84796765757800f627366b0bdd1019efbb4b7b2a1e87134f2101fbea7e762cb626eedcd36add78fdac40b5ad10561b2b0ea69993ff4ea21c6e4 5e3407e380b5d29f017a9e79ab4d18198051b78fdf0c6384bc7187c53080c5eef9559fc573585294943433213efe756db99ebec9e2d3645dce13f258a59270daaa56666df5acb8d0ccfe5c3bb6b89d24ad70221a520109bc0516625b63be0ba0fa64cdb1edadbf1720f358e33a82f6a51ec0239dae6edeb5189c8ada83253d a53090d58f1cb3265faeea03d6effe307f8f05b2a512f81046fae9f30e98fd4315801438c0202ac1414848a005796dd0b06c9dacf0f52d995b6d44f166aad72038dfb984c29b376c2edf9e63dc4af856223583c158df2c1277968992e7964ca2b7cdebee059b7c1a564d8fdb939eb0e8409fc7467524fea8c9660d18d1f413 cfc2502d208cc35360331b6fa805a3d3e98ba2d56994a1b3a7f35ea6046ea61167970f14ea5a13e7c1f608c16acd106e0b78b6dffb956c2a61a576ded39c70fc2e41aa55d606577db46dddf1212f0a9c66be42db6d4bbe2419bd5cc152d6353fa23d506dfff5543148570862266aebf3bcf5ba887dc0daaba8deaf72fb5137 3baef5d23b7335d5a4651aaa465c87732c990ed2f1b4abc7be39d11916922d40a83e241d23117756dda9f5cab6d89ec8a88fa3b4f84dddb50da17bbd491844edf6d2537943c692f9e5e4b15b61e4f06bc7d1926f73cf38c2f14640cb67379818222af0e9f5dd19dc5e9771af901160a13fb9d00cd36563594086048d1258b2 790a4fad46a4f5344347421a90bfed1ab996dc9c23b095166d188377704458c263f128b5594719dc62b292b9bb9ce8070ffc57761f83f0268e7c9d4ecaa88721f9f0d933fe2bd31f2c646fe2b24cdcc5e874d836c6da4b9553f55f7a49a8e9a3c076f5189595477a1ee38b5a4a98f90fa94d30a1ed350dad8ae8c0b3f2cd07 48b16b7daa153efda4776def5f71136219aee935325402418310e54df48474a67d942aca729757fe8128ad8be1d7166f0f3519da2fa7a0e3914336ea460876d3fbdae0047e9672065550b5abb7bcbb720396bd5fa2225d9eac86c09bf4584aea466aa2b5533e012a9d596f152e58fcd2ab0cb3d431ae54bc3d0a34919a00f2 8ceff9875798b95245c8f55d69c83ad4f4fb97e67477bb827d3143d6cc6344313b664815c9050cb93e9f056eb29c42c6a68094e569708d20e0ae8caaa7cd758a32eacdb8fb033327b1e7f97b5d956ecd51f6d9058c5bec339c9aaa5b806dd25a5effad6e6377151b472959f04acb82c0e8af924f43333a5bf90bcfebe387b3 abdd9c011dc0a10b6771bb528cb85901f80ad7025a885dc6247e70b5f9971a22df2a989e9225e3955dc9571a0f21723220d0c8fc77ebe114d6a33386199f0db91dbb33e1a83919c0851391ddde7081f4419de0e61fd87a2146f337a9bb9df2b599a5800dea3071ff13e48032de608c6afa0d2cb9f52c764391e77c66744c5b 29334aa285b15bcf0db6eeeda51e6c7319cf19f5495ac4cc2a31c6dc98ba684bdb42a57a59fb3e7b648810ed93114570ad9f3a0171cc693aede8ec746301f9d32bc106c041851c0bd515a53c41bbaf329be739dd75f7e1cd9c897f1232a10692cef61630333950755a9d06d3fe72088b79299980a63190bdecc4037acda3e3 60337cb8c7b9890028560f1671cb65a2bb377309f96876a83083e1eb928c302da89f7b303702069f22f38deea2f56a29653139478592dfe0f7af0196b0d85a3cbb088fa051f9b83c4264eff485d9b8b6ea443ead8ff0814bc47f0a1e1ea215f6752254e1093ae03fe3dc9bbc9bdd0491e35fe66c2bc6826aaddc5ee33ab049 bffa8fc1f26b6cb88c4c09f1099a0ef6c9ddcea44f79a5cf320c4ea273657c5e64718b4b17119583cb6b2ba9ca1ae234268a5e8f8520a706ea8e8482f1282804c6a252e331b989a0370ca8554ea3effce3039eb15f3204417e86fc3de8ad709adb6ee6b82d0d0d72a75145813e2e39aae8c967758184607e101f54090893a6 597d5c557bf75b6b4125bac8877e17a8d96a17b9bcfae706ed328a327e45f158847cf3050e20ff0d5dc28c65865e84499b20e767071e2556aeb3e1681e48ba9ba70cd4cca0e788c06936501c787fb5c9ad58c99b08449953091a6dfd54c8da2b9a047dc41069b4c2fc5fea284a062aa5b8f8ed721610bb05c79dbd468ce6d0 9a0b12a4929af65275c9362b5111d964098b7f7767ccb6da0333419c78af6f9bf8a06b709bc88f33c35ce3b138b966f7575f97cfac9d00948d6f7e20b3132aa3d5582a2f47e05672b69c7f2f5576e60d08c93f5f3864ddf00d7ed09bd9311ca51bfa227eb0e0425c50d771583fcedbdf610002cf14ea1c0cdc16fc200cf795 4d2688529159b8adbba501992f289a4d1809a6f1dc177f244a7a4d2021937ca79f664ff3bd3d5d6bbf46e1e0bd7e5f9b054681f53df64e44eb961b46ae29323c9f6120919ed784a47bf111ffeff327b9922188fb08efe5ae6b848d03c8ef3f598fd66d4c8c029fa07e7a2ed8f1e2e3fa8d0e04f23048052944b57a64494bc5 5cfe88b9c891edc5c610b3fc881e3fa4c98e2dc9763060a95a11f190501d569a5582061759eba1ddaae8c8b35ae045c59d2e2a32f4a21739f5eb4d5998ac31993da2157edffa746f4f4d33e978c6957a462842ef23ae16d6787c8143f5b265a25fb5a6c29bba44f50068eee7cecc8b9dfd64b7c39aefb21985ab1422786aea 4a41358310f21ea602236c21b5eed2a5e7db7531d7f44843342dc2023e74e84aeec17e8fa750445888ba0f6c0c2d508b3996e6cf37f9dd82d153bfb3fd49850cea64917fad43d373d429cabc80b83393e2192bf5817b024faa4003bf3f9f3cf2335a5af309f7b119cbeafd2bad6739af8220d5cc17b251c2917b2d2d925b4c e087b61694f943f615d969d5807b40fff5eeee761579135508d534df848d686d6a5855f3249ed3a53758e1a342e6b32f46ec9e7fe0606710533e493dab80a0561de49898f0b8e827c3ff7c65939f9a0b5f84a3f8cabbfd22161afc887b9e3ccbe18a358455ac68f509c13b0f07d1a7fd008f0ab306a9266e2e97a92ee1d940 79141b9631e5ae3ccba1276b64166fbb884ee354ebb588e48ec5c00a5d63e05e913a1469f262701bd2e8f0b1ff20c6e18d9ee6c064f9523742bbc77c2d0a4824577006c6621270cb94de1bbb94836eaf493824e8be655ccf7df2f2a9b97a6532433d79d59efb7a97f47e7deb6995cc3df9091535805ff464898573b3dfb45b c2c39a6e1ddc64366a88f8a01df3eb44f14a5ae97e0650cd250ada4eefee03c36946835d5731fb130e3542584faaa487b6b9c1ec3113e5d5bea3880437c491d739c720388a59bcd5ea4f8449b0a5ba8e65d4f9d15b7f28999e2ef689f8a423bee4fd71c3df1cbc368c387257780a9280b8a7e8bcc9460f34370555caf7e735 e7afb5cab68a48c09ef890cf4e35d6a01fef9fa1d6ed4e5fb3f0ae5db152cbb3251c46ed65a8a046cababb9f52a1477c45b261e86f1785d1f3b3b46b125ac44dd30cca9c014a798cd5674fb80587add88961ac4dc3c87c97e60b6ecd9dcc30bf09e1b0d7fa780147ed38ff204c0830cc04e8bf3175d2df37b069b6620b446e e8afb74161e7c6255ef31e9315e7b2fa588bebf63097d9278f17a4652ca7bb85e6668bb999343959a2a4b6d292097e50fb67adccaad8466261b84bb4930cf92f05ebf662d6102d701972bb695030230734a6f364e116f2017c43032350b0fb1ce13c205474f1c9e0bdc1682ebd4a051807720cff36d1b617758212fd167e20 1186b248fde763bfa88ced6773620296676028ec3a5d4547a97a355a931a931fb9bf9616b68f9f090be7599519b1e02b1cb38b64d3dbc6722cfeab945baede1486d9cee2cb756af5dbd5e82b72c9b001e627cbfd8057d4e017641ff2930fc81b993f23fb70f33243e076ef5364abe1b82f6423c735cdf84f0b092d9d5f43c3 f23270900cb05b30af20506364b1bc1c67e97096e2db79cd9080aac2b2b58e5ee03ef57de638a5d120a8973a0af31fedab9f5d1579751eaa14d6b789b89edd29242d1e51cd787d05540cec3755f1e16ee9de04e287fd879330ee2be793ff926e4925a1c7848a74ef47626459628146584b5b14c797fb95fda9f156bea71f51 182091d2dece6436c8e6dcb7a56c40af2f3feb7d92f5af1b7f5e02ea01ea2384952ee3c50f5481c1b03c7916eaccf318caf08c816826b0b203fa9366c98eba7f4107a87ee8a16b6d43922ac05eb9947a20997c8a404063732ba890852461f0c462a5dc8d765cf81c8a6634bd68fcb308bdd3f1f0fd405ca602bcf4ba7750e1 c55117902b477d2b1f121c1b232a774ab07430a26a2808f18ac44ecb649697e38c8947a3e3aca82d1620a784d0b5721e86912d4dd0a3a72986163cf3eec5840e2fffce118807680a6ce9b5ba75869a6003894b80be879d57ebbec481766c5747c5b3a64867db8a49d151448952f8fffb1caf04d04a13798a503e3e48d95714 82075421607eacdd9485d51bebf8fd4f0c5eac3117b8eaa7f8f309eea82ecff89a17e5d599c6a6fce98140519568f4b0444d6ee0d139a4ae4bb29b855fa8c9ce0f12d853156243bd9e5539a5bd300aa0a37ac36bad83467f2081e7269de53e4bbf588d1de90d1f32d6da54ff0902a3d2af5af13966b999f296c75247b05ab5 b0e27f6750cbc45e381f90b4ee29f5215d9f20f396e39d77a1f2108030bddf668e4ca24e394535b5b2b39aee7534df1ab55dc5fb5178673c8d3e9cdaa7fb6df7d0a93d8e61e1dd7f0e3f80fe12b07ea7458ffce54a194c9665959241cec49b04471f8b598d8b904324a65a81bff6d53d627c712033d8fb601a79379e95c9de 4050bfc25521ca496bdda178eb6e02667552111e0705caed7b13940af754ff10658cda7cb1a7fc457b46e9691bbacc2c4ad270b79d307cd128d10b95dff0b64ad48e0d7ffa91710f59fee8687f683d5db13ae92a81eff37043d3971288284595d00ab18484b51cb7b13ce695b398bb8563b417258a2eaa876c94246e5a376b c92ed80f93feee90a9684220c249cb6fba96a55b566ea5e71f58a3a1171b01dc1e7dc1f4d82ba799b2de155e8c123ca962cdba8aafe51f48f4fe27e5ff6670f405a60f330d889b7bac453480469d61c85d8547ce73a3fc3db4b61739c8600e59e2325b72368d86bcbf8ce1c93f6b5dbbec35d1e01942567c9f22a9e5d0ccd6 814ae2c77f14254bcd1df6e20fc8aa0c873c000b277d1dbcd043b330047148dfda105d1dd7f020d6e1d62a8bf5f55ae5961882c627519bb97ccea8fe375715787385e968e98cebe9c72413bc35736ec8bfb17da48d072bac1b800d056f70e1e66e800640702b9f7dfc10bf179bea283e13e869777a04078742a498565bd54c 24f49f228cd5cf10458c225e78e6863d961cdd7fe428545fa4b0dfe47b666adfe2a51ad893eefbac07ea29b6b5ba13fb01684d5ff7e7a4b56c9c5988f8c42f79e9b25b4f9f7bceeace10a5d7fb44fd70ceff7dc5550ce8863508a91bde646b3a8b290a836930545360e6e793a372beb2fdd77726a247444776fa4698084e65 27de27c154a44f56d485a01fc04ddf2084d15d6956c1e1ff143f6249ab83b27a968457e63df8fdf5259abc0cd61f0ff2f254a51dcfc1cf294c5d2978273db0bfa908670dea1846874ddae604b7a7a93f4439751508766ce2536ef2b3030efbfd94725f9211fbdb38a8dfc3580c85b1ffca8f3cc521b6d566e06e3a32567ad2 a5f480cc9019c36b2c2849e05e2eeb2139d35b4484824db30b395a16d80a8a5d94977d1bc14e8cf07d0cb5fc246f29221bef180355f0f88dddbdbbdbf472bb327626fa4770c0850c95befe6a353ca86b4039a6427898b69738291f89bf92cefcf4bb6ae3f096926c0132861fed1decf1c2e218957afdb4a07852b2c8d2d518 6ef72e3f119e6d1d8df313f63b26e55753df2a2baff2f7bd46a423c9e5906e2521d061ebdea086e533e6d27afa8a8d5ec496b5def85b30bbfeb5b8406e49964d4a076234780cbe34a5df4095e74da937a8d8048afb77803cb81cd0605ffd63632f29e5608c01b2b73ab0d3ede8ee470913ef2d8e5b71da588b173a0c793a8d 5e8b2c7e8e2d7c3f10f5dd6a70c6739dee3788a4e7cf2995fcc04617789f60bb9d53efd70754980046fc50a8b73a5149c1dc0499bd2e887bc40c42d81cd8fa02803c8b5216cf4bf388c1c5bafd3a450069486be7270a90c5059e94c956911744ce9d05e48b26701e7258a0a8769d421fd87452939d43575acd5ab1d1618fd2 909385baa9ca0be621789e8948384dd4ce61cdef52cba5eb5c82014538ecab8b2345b31cb4f4e4d491cf41f79b91622c837570d9fadd84938f56f81eb49739ab37c4cef79aa65af94dbd73b9bc5c80731184c37f121669d7de126ba30432cde57615955cd22881c1848b68cc0a7253237690665633ed6f7909daa1f5dd915d b471c078a4517e249786dd1ca550f83c141c39d592119a221402928eb330db76805091c170a26bdef0c747009e6af87cd65bfca6c9554924265173508c5d8091461fda5969ad5cd0a0a4edc5cca719a2cfffd932577b3dc426e6fb8621e8199798162f13606f5c0d0745d8a17d72514e6c607dc42f813b18f941d0ad099586 ca51e2dc15b21f08bfdd4f4831e2142f3dc2817f6c6f4c7bfd288c26035b47ab5765192d92104599cb2aaf6cbe3ab19a35ff08aba855d8d862a4feb225cae9478db9f07f9163db809d157def659d776fc53b15fcccd9c79a54c8dc75b6681af34e13be3f2c112ee34d14d7bfc487a5f350294808b07c64c213a24b802a1572 0e891b39929958039b1cfeb84b4055a403d70dfe25cdb1252375162ea7b99e3d16421424c14144343f5579b0a20458075c297004719bd021749282d0220352c6b796221b80cc8343542203f5313750a372621e20093b588ff2845fe6fc44a56b021d5c67401d46dcdfd4914e77ec49e8a5fbed4e64a0962cb43bdfb9f4120a c9512e5633b89e6e3f95ae56fe67b07ca1af72589a7021bd86df5259bd2187c5c13f38ec1d233f2bcdf5d1e85e7cfc272aaf5a88ef1194d12a282dbeecbe25a5037eca1004e156221c3709fa119d1bcfc3960fd6783c1559f30fe6c2842ef05ce3207e8a4924167d770563052e77f6b799c146c3bc38e1d9c23df4904ff890 b7525eaf3c89687941f91597a826fe72244a81f11565ed6c04b867343f76f877f9833470a41e916c274ebef126a78769469982ae234701bab026d733629d77523c12e65277770d23b08493dfa560ca4206fe3df2032baee55a4d05f37a7dae060bf270c333d6e0a345ec4d9f3dcf2c085bb4412a9563fa5db9d982570c94c1 827d015bd3e33787700b7843246613fe4d695df22ad2a10d69892ca4897cbec35120ab12995cf276b600d43483d38320f52744911af81b83b9b830149f437c46c33e61dfe25d543d880ad10ca1ecb8e105302882934e65d597129101c455a5a385cf713c5464a8dc354444b11f82bd23a2abf89a715e2fff9e6b6043c6f2a1 655542f62c3fc1b647f64784848b50a22f855b93705ddbe49439cc9c88c7d23f2e5f49fa1058d6aebed6e354e0459f133fa6c6fb5a527c4cb1f9da0ea48645f79f022e317ba9665819d2d8a8335cc86fee7f0252ad4ca261c2aeb4018dbf746ca19af88ea8159549b928cb168ee3c4770852f48d15327a2c146ca9e0688c85 aff9bb0d4f8087402b0b8db77f85d769a75a5acf82de33937c6944fd2e3660d14d30dfdc6ead11c746a31da701072e4b1061a67adf3c402cc01cafb69f67a6bebf4ed7f120763c2b9379c9db12ba29e6a4de53fbeedc9ae7433e038b3738d76f573ece8c606ec69a886bc2cc8c8e66809bb008c289552bb9e4330dfa1cce90 e080552e5adb0718ad97e4bd94b1467d5295fddb42ce6a912dcdfc5e6582f397922f0da7e12b0e7eb659474db260657d87ecebf8897576f2f9bcd1720301064c1d3a070c55f35dd4a264039c7e4db58f507900e52c9bf39c25731708650fb5547a02e085a5c4796ab736486dd0b480466e37388be68eb96baa3512884751ea 56340c30de071303952bd00ddaa7eb1978c17387db410b75ba044505a2eb9545b6de8364b15efa72c76ac77478c9e6bc6358132c84b62af1b74913f829d05ae042dfd62ca63954b3aa99fdf49406cc202bf6a78e0c44913dd8b82679a0493b53ee4c1b4d7187b5639199e37512a6cf238b82451e87a871517b426ffe8ca9b3 ce6b6f88a3041a6ee7bf6de9ada6ee0f3f4ab6c299b5235c27e13c2aea099e06285a4770d073be60db515f83b94a585318ffc7e81951984dd5e6b8c3092136f221dc0d31e7f0ae63e79021084569a5f2692198c4df0b6d776eeb78a6a9164acdd900d4024a773643429c773578e0f672e9cda04e46d97270c4256f9c1a4e54 9a1f6ea48dea613320b6da7725ab30ba5c653803749bdb5384d67a61d20f1e98edc5c2e2eaa7780bbe820332c38ec40d1030d1d11ca03e30e9d161eae96e84d72e0a1e2c2697597591a2868eb2352481929a5606c49667153c6fade98d5d6567f604dae36c4051469407dd10d7220acb67129ebb445cd7f36e713a6be19259 b14b8b83bfb193d58c80e3e25641759230dc27310214c5bd7e89788eb6e4e4f34b8c8dc1f6b751f330aff30a7d98ff1ffa33122c6ca2d0af43e68b0314baf3dedb694dc9cef11e40b6061f0d96778ddc6afc7329a3864ad6fa368b1e270e47142362c4f7cbb56fad9690044bfdafef91e82bca10610295c7e4920f66befaf2 876b958434a800ad3d550147dac0c80acab2ea585a609e8d0d8d1d7bbb1725d12635a3436c3ca09e6cd316c285e9fb2345094f88850ba2517b946d66ca35ec9e6ba502b7c27580debcf791de773b72ce2f6ffcdc43e93c5710eb663b916358f8b225375e1d9cedf072e62716421ab83544f8beb81dc0c3c86a3b29de257032 344b146b51c9b0876a9c40f4f61343aca5ce98bcd1ba27da33cd700efc7ea0e22204e280d5bc616e45acad4a35076fd0529cc5fa9676d8973f6703246facb9110ed97271000d4aaa05e6e9933ead325537e22946d11e6127de65d1295bd51ab0bb969f68b464da1f5d684c1433aa424f238a00b02c3b0e7c484a66340cc916 0f7c15a32d0c033e52d4622226ede5035f938d86233ae13e2afea797cebdd4d1e7ef1d7afc38e131f8161406ae13de0e01e436acbb8d8639bdb67fa512a8af4ecd3b562b107f3df99165d87e44db630ea150e6ddd4c6896d42c2be5d012fcdeaab16060d850b60a589f861bbe2ae50ee2cb9f816b7b3fc934e47ab5075817d 8e4ddddb92ea7a809da9a7239170f6f120bb4e567ab3cc3dd7064e9c09936bd545cb2db641f604c8f19c85cc8935aa41a3e45b4ca86842e702f573a3e6387be939dc0f216eb7704b5f772473f86a6aa6cc8023a16fe331b160f206131a64f4bcc5e8e46d7174f0bf590457c9232491646de18bc47e2a33c3e258df94e0b1cb b5054b8ed8e53ba9c2d27bcf0a26229fe4f033a09a4e308af4867d00881d3a11b7460c5b56e6a1f91a7a537907a29d26c289560877eaf674044d408f127d1546c44aa9f4504d892caba583d73e991b500bb76e87c56497d31776fa389ad0d5ecc683169078f05e54e924110c8d51e821c40341d5333b3dc8a69bdcfc009940 ecbe3b94aceff1c4cfe5753971229b091384ba15096b73be6ec57ef32d9a0feb671756f31d4bc979d6ba4dcde7c1f4488801a1ff4793728d61f10b237416c5572554a5d090bc44d0e0d1e0f98ffb3d708a96b7bd4ab8f45219cb6ec22dd6f3b8a563b49970eda9e261529dfbd0f3b08ab1e68f614496d3c7d3b4cfcd48acd1 1ccd0be0aa003d7d1a70ce1f253c9db09f0187a60a13e1e6e1a285fcfd4920d7b05144b8e78985d7c9638cdc8251aece19d99c4cea5bd62c8df4db555373c27949c7b12ffb5493d0ff9693af6955a33f5e9386bb227879ebbfa67789e63953ef30cfbcbe2eb9c0fb8856aecceed67206ec05a50b69d765e93b09586588d7b6 42ac4f609eb0adbcc06c11ab30858be3a3e0a26d340dd82a704bd1e6fd76671e2b850ada79070c8bd1bdf5e6259948c1adaee6ab1ffa78dbb99f4b453b79393bd66de3a7faa118b7892a53ec298dc8e3aa193287a3c877254ac87d0564132da7a885383d37a0304850ec4ea743a5c66a4c7e3d60090ddab70ea1a9e60a6b2b 53342c93d6282f8e35b5b5a2365e1a2c183b33680522368db250762ceaa97cbbe7ec7c07ecc04a886e568d48065fb64cc06fb02c41db2693c87b9d765acf6c06b79d80affbff447654071064f1b972533f64c1013ce836dde9fd019a7dfddf76a8ff5c92d18cc2404e9527633b12cb1ad630a27adb99b16056610820a19796 39639f42751e42dc06fab6673f2beb48b232a38598a4f964db50d9927a09c922520d49f85c2ab7d9373d9552382f0c7da5bd5cd6ed1e65587823df89e4a8485edff2dcc8353cbf3a08c92a817b8d3e61a486a9a5ca78ecdc9bcf6f498c3d2762a3b631af4bb8d47cc32481c82b2aa4d9b76b9449b71753b6a82f8a8550edcb 4b69b531576c84efd6b76c4504c5fcfa46badd78d3b1edd546a83b12d6580f657fccd8f1ffb9cf96c6041753249ba20b34606f7414cf3ef960da726d59dbc08cffcaa6234f6d4982a4ca0e59b68bb69dbe9069dc7428e87f6134ade1100ed47286841ef47606d8d146df9d6ae7467fe8bb011f225bad418cff5defd7557251 cf7f0bf70c1238a34f0a9c9b407d0b3269fde717a8d287eceb0c7bde4c32b75376c55c138587a3e73cd045e59622b017d3c3f213ec0c5fc8a82816ec1f540412e94c09b1901f0bbd3cc7a144eee8233221ee0e10c0144e4c17c8443ba58b434e991beb2afa0c2f2c4f762793de1df60205386479890f40247ace9cf9a6369f f9a5bbb7e3dc36cbc22e0a8d375a88f052550e67987c259e7171f10ad20f1529acf9656e3a937db9ed852b8653c1ded792ff94f05d3bd66d2312c3e9fc89c16c7e62b776c53272a89989b7c4dc9ef4a1d697b6708393343a25ac094d88ca78993aada35cc8513188f1f8584e6c6845bd498760be9d036898922de2a3cc9e32 bbd6ff8629cee8a511c3e3e1e7eec952c54cc790e126935b0d680c4988aa9fd2c93e896a907fd8516d7b3f14f28df7e6871e9cfc21099276a51b47f06113e914dfff1c154aaec1bb1b01f6e20ef5110607832fc57746541b1321d17154a6cebf9ca0a4b819f382f6eea3b055775dca6e99708a077c6cf6de22df7dc22f25b0 90728f308051a8eef96a59edc716339e8fe41b96c86e8b66aab3ce55bf4549f08b4af6f3c3852e4630bd1e5d9b877acc726b56fce48842ab3b155f799ecb57e7335f973f6abcc92abc93a618bbf3b5419161310acb2ce7538a933885bbbde46382638f81383076587f13a3453f6d7c2fe3b95a3aba4bfd86a35d8a29461b3d 34b7aeacfdfc1e5d10b0d702ed613132ec0b8b604aede789f475acad193a5602b08a3b134f85608f6be7008659e0b089ac9b686a58b2cfba92f057f358c88001bb6ef4643cbe2124e1aba8c41dfa3dbac01a2794ece49a6b775ac58969ba2bda31a0aa470eed382b46434f4d29f0dd9daf245011dc5e804c89ce30718868e6 e85d82eca96d062a2782274e69ad02df45c2bd7cdcf9ddcde99c4051aa470f4bddd9db94fc0970626515663573f55bcc679819142ec08f8d0a8dae65f9d842730ba374eb164a815c5435503adc4d5a36a878279f8664c42cae71916914a88441cd8c278f7016bad419fe628da49fe26104a83bc727e341ecae8588622d1cd0 f6aaba765767fe2e322d05e65fdf8ec69217b8dac7960350972f5cbad813f6c630b463eec76d0225981b01a8173d94be4f5fa13340c577e59257951afc38f16bc272afa5809c48a9c6c2e1221454f1fac954331f84357724f7fec91249474d852016fc4d1ad1bef25380443566c9755aa9f51ab11e329f885553edc38596bd 98f7ef6f008b367f4094e4e091bdad9db9b9324a09146ef5ecd4b226abead64b36607e740cbdb4b7e183bbb01b10fd9611c9441b0f4a32820ffb35ed97d4cc3db02f7bfacdf3d8ff43fd481cba41564fd28effb08e68a4d9b3d0a4bd71f7bc540b312cd27fe9ae9db9476e5bde90dc4f7d449d94e9ed5f7d2efcb9f43c9474 1c0d61f67d5002515d41c4fed9a0d310e83aae3bf245d5eee62038bbbb8af2944718fb582129b55d653152678c15312781764f4899ecee6ee2eda0927b2c55b6273d08d7abdf87890328c39092998a3ecddada4bc65fdab0b9ea4ea5629429d614391e229a9ca2013cac445910b97c18df2bad6a4c6c704f91ec539f198cd5 5390f995515962dd31ed9fc0146170df8ea0155797c0e807309b667e0cfe87ccd3a3892c23f58f716e32bda6fca8e67fdc201a7b7d524f10d3772fcab5cdaa56bf3b27de2e0b183d62046667ad0d26d1158dd5f159541335f74a41894d208c2c111b1779a870c686ba7a958b821fb43371ae07fb50a80e808c17feb6ef9f55 219037a18369ef6da39d8f139e404a24635d7ff6c745df94981504bcbe7f7d38255beb8ad0a5c44037f7f75075d5123882732d60bf7f9b2cb8304f6e8f95d8646b8c60575be57f65414f20dc832c6af46ef7e79f3cb3e35655e64c4840c2f33d88cd15e518ca89be5b0c0fdeedf04b99de95ea50561cab6ae678c172be2b3b 0618812baff1a6d6eb4cb7d1b06c51b1551a43133e75ee2d12882b42110f3e57eeda27a04caba3b1fc133dfd0f406ac4deaad24d6e53c263d86342cdd703aa3a08ca5b90cb113b1f1302d4891a9dc44f8aa78d70be1caa42ec0cb865cd373fb23ed6ce941ec06c735abf187ce93016e260cfc5d1ca9063e57303807e1609da 8b1106832b3ff74ded7244b973599485e6c4b3084394e694f705be4c1eb577c18524921c0aee5d1bca598d5b1495ff515e198ec7db2000809462e768c1e6c27b48a4c6e0c172352d806a8943adbd74a632fbf6e292e1aba62db85bd2ee8684e17429b3fc5000a28a7551a079c9c2592ed83d8461eef44f6b31b9caa45bf5a4 03dc98f01a263ff46e00385d7b53dccafd0f4da548170692e50ea51a26a84b773bf6c7dfae848c06c313c019bdcbfb732b852a6c6c69b03f6561221da592d0d977bb503ed4b2a882126ed79332eaaa6d2746486ad16c76ec25fe93f3e07c70db46706dae2a40a9401b4b8cf719fa828ff96fac1eda09166d6885bb3ee902c1 4179555659ee4c2436959a6ac64fb4663560db01275429975123a7acc99a06499a29448397e9cd61e576588221d6a32ca0aeffa97e2aa1967ddf2550ad72d4a6bb3c1e125d09623e457f946a4cfdffbc5632b043775d769efd3feb10c5b819e2b678955dcb5c50a47827a6902fe5147589cc9360c68ccf1671cc0aba6880f3 a19c0687cbfa9242d8f24680026b9d7d6ea6948715cdea0f3d52ed9d1d2f959601771923194fba57cd3b70b3f533d7c78dd08e062e41ac958d590f25849b4e93d6b633cbec004c6538d377e2d32faff5f04ac31b7c66d2d5ce1da52d8a1d3c522f99b3a089043add8b2a1ee44a7386fc270bfe189c942b664373cc85c60acc b7181ac4ffd460e4e71d2c76013f482efae7abee4b327093ac2804d1afc861f7a7de8603da9913b002be5c04091dafa9eb412eb7f48a0753f03b0e046821bd66e6563cbdf3edbcefab69535947dbe6f2f7c8788786635a7a6790d775f0dbbc60eead3879dd1cb4fcdb3a003bc3f02945555b3457c568385adcc1650464d66b a6d776fd94b338082116244f37a914fb5f348501fcfa1a37311c6a3d3f1eb115074d5b1e33ee4b172aae2437004f2839b125f8dc2425f819e57eedd51cc73e6272916ef1bb9340e8a0bf4fe911003207214cf5f7ecbdaa23ca72c81627a3fab6f0a76ca04de4b67da13d08c5cffa79df6466751ea4c69d13f08ba0bc31edd0 39a8d67b5dc15f1fdd373745a6337716602129cd8a9974551671a7eb1babfdae4553a4002366a78bb2b4d2346e3975d03f8154475aebed9c12dc961fe7ff34a7f77cb7b5b8d7e41a223d73e4bd95bd856324608c3accc2d972df4e79b437016bcd8a7682dbffc536ce4d4aa891ab6af7c770898cdff852834bae533fe11756 0d4c3486da44ba4a23720f35586d15eb2040b27fce195c542b4ce946e75c12561cc4beb9f043e9895f2dc210b8d15db940b4b1af7d3960828f1e7a8495f1e3f1311534e24d19fb92eff6b05fdb116e6681479fa1cb7ee1d04c2d9650c094ad66055dab234b2bf211987de3e5f1e5eedcf97208074f99927bb58a05a7735117 57fb105f9e82ff844b8a861ca8660209153c7ae1360af278bce884eb3e26566ed7c495107182ec50ac555202b66ca9f95e1246aa410116e768528aee5f545b0d776c28e28d351c470d0275cde551a32fa6ae6d1bc7fb7c90365a3f8a1deabe99b9112cd328a10a4bbecd411f1e8334d5cdba159dd322e8a6f7e3d8d93b9583 ba37326fddfe7e8d930a765c7e4aa87247422056a50a327dbe823a93e5813a97b83d1cded17a83baedcfd94fdbd1f6dcc08cd809ed9e03169c78dc93affa4c6e0a4332864dbefceb736b3b3132703c61c71b6982287c86299b9ff6721360899e6ba980fa73155c79429b6d1ca439ba58850219b9d60526eae7678859923751 f3ffd8204491d2a09d51fed4f671fcdcd41f63dbb58f68acd11b8ec154556fca3d23f8b40dac74c7ea21e46764536efbe9bd334d393953e7852f219082a184bd90a7ba1c3e85fb2446238a9b6ea9dc427f8fa3ca3e8f4366688c606de7bcdc7e61f72edc0a96b2ffd1ad28e4ba954261f8cb773ec2c3f6a8ff6920af26de98 04c302a1279270f0d573ce99d8054eca2f02084d4c7779fcbb647e339f3cf54e5e91077eec3e69eca4a2ad60493e013d1c85f4c0b8b04d7d86b2582bd35e67087fd1de0c0dbc364675fe2f51d88aa599589c634a9f0b323064cf28f3e321166e1071db9dd71adad5897ecee3d1e0ca4842a6711607a381c3b8157faaf4eb03 216d346f7e5321e5faf343386b2607b6ec5fd4c030357ac2cc2384e7344068e27b1d6e6065f5d0bf931da564cca7691b2a1a72b43dbbdbf684fd5b3ffafa35d0550aed1ac330875957035990b6065f78c2b4f0b22bbb06a82ccef074e0d6964b140dc069db4d92586ae352aadc5571a17fb7dc964ab1555bedef347e4dc5b9 0b4badaf5cb181319f1ad11b60b7ef5b95bfad43e6fc4b9abd90803d3a7a41cd10b22e5b66d3e56ea0d4084a9f8db63d98a75b4ffcb3828f67c424e3190a40b2df45b981b3124c03b55d577f05025e1e0889b33739991e4d8c2b8373f76061b3c3a1854f3b4b4f44bd036855bd4303914cee69b04f02a5cbf8cf0f7b6a51d8 4e789cdabcde13883a341066ccd74254d3f377de9be47c64b1a2412865114891ed25f5d0542ae2a6c11aec6bb66b27b6aa1c6a28ef27b0360834a6ce60649cb70e97c6a4f9489e0bebcdbb46bc2f51255fe8d0881829f66397c5e57a4011c08e5cadff39f0c26aaaea0e7cdbd363af1442ed1afceaadb83511e863829af4e1 c42d93e592ff9c47bc36a56271a35025a74f291310d5b65a7abdc466c76ac1b0574c338c507d23cef2791b9a193da6318dd61faff56aefe9417c387778fcc6b3d3c903ddf1ea5ceddbefb3a2646fe4f3b15752e4a1f57faf206de497e428c08d7f4234fd32b11bb83c7a646fa654dd74c365d8b33b62d32f7dcf1b883a1e12 56197ea77555244d3d1e9d06d04396020b114ec2990696a00459acbd561ee5c5396fc723aaa010576684caafde78da712f50e74d2df22c358eb7c24c8fd39c0bd5f40ca0b16c060983950832b0d0339348be4c02a297a7e2dc8866ab678ca26f53ea01b9edb5aea29c91d24ad9cac013b0a73e668e84dec3c885677d19a739 830bf8c6a7fe244bd71006dc910f0b4af82a3628b945d2f942b86cdec1b353d96a3fa2700fb12996d3e63168884283b19c4a77a10f22bdcf87ee97f89157949d963ea85987216b8a32054fe13a01b7970595663382c70fa98ecbd07230178a8343c08322b00afab948e5839b9280a3c068e305dba97af618fa5d4907c06e34 f61e4625bc185a65a0bc360c41f643f70587645f996c63aee43dca8d3c73e7ab81dc4dcaec6f5cbef04c10df686f515ef2db993ca9c2b75d0894851e3230d8675f880947ff321b34f10099d75c764f9a61ef86a074d44a18185c06d3b9c128e79fad780b9400a216c28343f1ad1f55cf676da41cdb39070a5f2f5119d304d3 247cb7d8a91950e7bb94aebdba401f5b67e7a50962080baf6273cbb8d996c429e32d27b07bb30fb981439f2810d7ba1c304ddef4ac8aefe0232822bc6ad9c3b9e37b2989e77159c249e16b9bfd64a78aa4a186a365d9a57c38dc89f701060030d2ff9a745c7c15e97414e06dd013bff7ba8440a0627516be9d92f2733e1857 efa857985abad042914f02f7943f6d85a54e0bebddb5bdae06b272b7c356626c450ca587b5f6c46b4a00118a537bc89ce006da1f274b0761b2b4ebcb258c35e6afcc229b20d20db288c6a97c5202f566b0bbdda11aff10c32e5fc2753ce5ec8142172f5cc17d6366ab015d3f9cd387c8a39f2eb775b37ba436ece08eeda6dc 2b5452dd8bb0b102f5682ad6ef62944fcfd74017414861e7dc4b1cc706d359b6479a0cc2daaa60c17bcd9239243034d9bd15700875d1029f3cf39f54ce3ccf5ba394af8ebb1afede6c4cf5813fbedb618ea04de2d79fbed727e79535f6069c4b6c848d37f67a0539523897e5072daae6fe514c125165a370d026a9d98812cc 69d8979495426fa510ae8b17836459916790404d3148c4743a0811d077837b529cf58ee95c28bbfd51c55d5022a68e7d50d3e34135ce0871231ab01ccd3b21e39019c0aba05a6bc060e96b2e044cf2c2b4b42925f7eab5d5368cb00329d3fda53f446b2fc2a49ca1b2508c8c12bedb475d0899b768a3fac4f57ffda84e0306 8fea90eb79c2c2e89db1a8ded5b4422ff9a04d37131d4286c83b80121ff208f1cd6ac7ebe706f259ef944a2a7c62dd09a3eab41b4ac46948acb0f339591374cadde70d145cb9b842dc9519bb496bfaab2077dfa5835c84178a26937acbc891c962efd45f9dcaec3a90d525b1fdad8f866d011798c228e53334ebd3b85fedde cfc4d576339424e4a8240d3408f53e26a32c5955e227f2e5f12b0063c76fe278dfa61bbf46f757b1accd268d122dd372eebc634e8e89d9624bbe80065f79fa6a6f9ea063004863e5d62f33ff16f9912016c3a3e325b1700522200c4709ac7a6c726db06bf2d460cfd19aad64de6f85a2ca1503dbe85d92b56f4081a6b6445b de690ebfd596196c0465e428956e91713b1023c82c3e06b652a1fe4233c38b99a223bd4fae279f4767b67ee016511dd3801a7e47a99d2edd6161a83fe64c5a6b3b609255ccad9b48d4007d42eeea28fcc7a3db58f8c843a2e6ed51bfced51bcf70f337af2047138f0b6795cd160b9c38dc9b6d3c0f1963515e0ef8bb00380d 2de1c3df1ce536ad62151bee23ad672f856945d7134bd9d9ee4367cb2c02019b0b6ff445b231fce02da72545e309a6b72ca03ab794abd89fa2406f4b3e3a204e1d2b26f2e4d147a919f9511ca4c3a0d6343fc0ea0fdaf8f75c7e20e08d13fb399caa0ac61b92b7ae6d92e23ba9b288789052622c7b3d7a07c0f3bbc62172e8 01986876e927e0059fa6777e53f5252d559d45dde0f137c800c99c094cf5b0f6775139e92bfcc4d19cbd4209b3fa6f8a0a19f4e17cc140ae1b55f8173aa1cc55bb148b74eec1bea4f65a0e112054772e722a09142c381feb22704cc8fd7454928f37a5b9d945f72df2b53f81b9b41526a52c64d06ec2145538a5e6a2a99930 119618fb0ab25396cba9a1a3bcba85c29b1bebde20c7d877d40a256e1c523f49ad5cdcd45ab006506f4a23bcc61c9d734d4dcbd04b7d98c80314ef111136b9238fdfb0b773381b51bd4d2320d83d3e90c0bc23eccebab3ce622f3523f8e13fc6149c9bd54d53ed7f3bea588d1e7a729f0d29d8fa4af77f11b2125f8a46d164 852ad15e6d95fc97a872386b3aee60cfcbfa5ea58114a35f89b3f501486295bf233447da21f1132b1f2c7ae38c4bd4f521ac1a6ada60fb742f39381a5554d8d83eb2dfbf343e8e76bbb4a4e968480147d51d8042299fa21dff54820eef11c3dd8e68a57dec312739612c7930c8825e866ea4adbf719641b0c687bad0d06b12 6910a323f406464ce13e0ddd62ac7884d09e1abde60a452d7f86a58004946984d8b9afa6a989d3d6003904ef42491bddc627940b142493c2e4210c351b0d1bd11388e8d6e7f89bc9fbe660fcb6ecf9c369c02fde1f4a5fae7907a2affead065cee2d12d389b91f171bbe65b61a54968f87f3a220820ab1841f95974dbdfb55 ff1b31cb803aa31ab2db479033fb5cd27c9eed2e515b550403806e3001ec81469534c500392393723604835ba9d036995e988ada6f7b9d1996674122db60728f7281c8a705b59dfa0cfdab48d8a07eabc14387c2d3ac933730c202c276427b33af46a6ba21c9176d651dee87be9a528f887b613df7626ae6c3518390a4a1ab da5e6aeee60bb1547ac718db269b74e3b0545c2b4184c7c22aa6c9c4d472069e33026482adedb4abd07a238f17327ae2920f2997dc4e45b0b63a1b8a7cf848bb09167dfd3aef24641d2a4a2328e6ac651e570a17685f3f4e0d60a18b748dc872b57c70099c92b9b4c05e406dc369120b6355d9f64dbe0e038d4d241a61047a dc6bb25bf149c62a15e809789e906e95c132a3136c91749e1599d93443cd7ea34b644c9c9f19cb414e8a8708775323f4745389c71c80e5c0850e9ba01a9da22362c0bb8a1fe0bee1ca2e808262138b944cc266db6c1d7ca4a60a3f9df1bf7e51cdec5c658730ea415fd054c277f44e2986b66581b2a549fe85bc456d4200d9 868af6cc5830114912fcc394def0a71c0a623d7bcd80f48e9c11b3e2d296a252c742d0f39d83b6301cd12e29d3e961b8ac895af694a095b77cd2c96f85f39732efd7ba811ae7a86b840e7a851ef175f8d0021b3a94f236eee7e0d5a90ce5cef82ed1f78679136d90b2476287350930e3d7395fb7453692857c1cebf5db1c61 380663877967f29f50ce53afb87c364a54e24a680ff0719ec440412e009010e81561d216cd1a5463b9ae07fb9b455e7509522e799121ece54afc0727130eed43b58ab12cbe2b13e9aac4a2ddef070c20eb3f76804b6a5d0222d21a44341193ea30f524559c9adc92ecbe4d254579c92e4d0a153782b97b83c80e0d938cbf0b 8aa00781141720e31989444c427f8e1f309108a51e255d1a3cc9a27d568bd48ec4b91b6df16ac646ab1918186199eeea1948ab0311ac8154a6584511f1e6c069bbb96febdc9e6977e535148eac4f6b4c976cdaef4af0dd687472e14f46b6142f898c3bb6d6c16c9eb5fae1c40fb54f72951a5449dcde81de6b485d92fb6cd5 b5b7232c4b4c60db7df7860dbecfe7fb54ef171010e4f7d9309c4d99541d6799be52b4df81efb631f75d8b79c0ec388c9ed7053094071b3c99f764d2f79e57ca6ac1dbf97a8fb0cf7639c17d3f52e16817b9a169b69c139aa92267dc422ab194c85b77d045f06cb0b7f43dda4ef0c1531fbe03a4030d26efe9d9ec1471b2e2 d04c3b4c99697eca853ceeee89b8abad5c2ff831ca7a697d2c63f96451259c9f9d6604bb11a05c02b4b8a399dac2ad7fb762c12ad20221f5fa84a3d3c044a2365a2e9afe70b9317e5a3493b150410d79ee9a6bac533502f86aa34bb661c8130a00406ac111723e979a029dc8ec59a3a6a3860c5956a69b9ad442a205b0dbb8 ede400ff2d0b3c1acebfb708cc3a280701b040a994a73e5c6f24d6fcef1f0620fcee794ca3262ca20acb4a40f83f20c47e1acc3ac5e11d6e285474d224d5e8db87ae856012452602c227ec55c41630c1e41f800c152211106be2a1917576111b439ea35de4210bb8abbbe78d29353832a44328fd4a4ad560a4c439e237b75e 8b6c68b5948dfc09864017ad2fa5f92a2dcee4a2843518e0b1688ff897610f1dbf4f155449c55ff7b4c2fa63cbe4474471d8a7841c730c25e3e4ad5964424baecb8a79b85aadd61124a2ab94d315c1bca1f95889cebf29c1dbad781c295d0f11288ed22077237dbd0321a089899b8bba3f8b4801ac80c63949f34f890ecc53 cd045ef991ef9890c788bead8ede06f3d77234d60941eb1bd621cf13bd7a8af422a026c031af95ece001ff031280a719ceef8182edc42561c940b621a55576ed3eb0af2ec114ca126b07569886a0e6d7012b6fd933a9ec3ebbe4b0239019494212ea15b43fd7586325d9f8e20c52548992b87cf375ee56e8332b7bdf64d82c 5772c0a3fc1b1a2ac0fb3dc92d175b4ef24e729efd4e61c16be179d2a92fea9337cd7b8aa9c6dfcb80d3c4fd8046cf88c67d39b60b7a47f114dc4fb75660577f66c051e53e9a1402a15128a996357ddba604c93ac9da54c99278fb90b01a8e9d3382170dff0d3a08a1ecdd99d49582dcb65c8dab44840ef72f00fdf9c6a3e0 3fedff1720cd7983b99a051f91e48d410de647e3af1a452c2fe99f4cd1a1581a53eabaa7bffef4fd1d9fcd58ed582266355eeb3f9680aaae539f3848c746cfa259d1e1adbbd2f67e8368d37e501f7b8e8fdad9cca83f8da5207d6f5e02a3b131eb7318cf6fbbd24e85b0bc1565fad145fe0b1179c652bb05ae2f489a6a51c7 79294a47838b509de408e4488b85b58f67df55e5e20dccef396aca3f782efe0015b679e6e0708d95a048ab8766f0ef4e5d863c8df265bab0ed4c8fbc0f33937b3872db50b1c69b5c58dfd7f72c48a8be55ab7d00d81767e86cc5bb6180eeff34785d087db262c8002ddf2c84f1bd2c30f35dd6847386856421851854e0c982 fe66390758a2fc167948458b090e11e2549235c77d4f3584781c9b86f3a8205102141f5a9e15cf131e12ccc45ce92ae4eeb2baf056b4a14d49a072b6ecc5e4fcb34f15cffc3cd60d74da3610953cc79696784ccc82bce2c60a304b38eebc840adb840513c6bffafa550e835f72f777934f5573563a57bc66e71abade7ae3ac 73c3e03b68fc7bba799c4676a65d930d067f3fa85cb87b42e394dfcbc6c4dea90da8f7d2bfceaec38e1e1324927a663295bdce05315152538841a16da4ab75635dc626d8f327effac3786dfcbe0d5c9854d07088527a98624a9cd2223549285805f0947dc643fb35c4f5113e4d53ea3c4594c469de72f97fbd6350a60499b7 a3769b2bdc5276055e40af1a8aca5a71d0b67fd35264e89581e0f8fab486cd9c8af6e742576726cb2376a30aec686b95055277a3e73bd5021585a08288dfd16017a3b511c5a4055ef07d1628973daefc55513703f1c0269abb16e336ee597b94665b4937d3276aaec921d2adb849c1bfaf4338220c013d4d58cfb85b4854a4 1b4dc5c39047a69fde52ab5e5f58104bd94b65990eb49546a3253fec0834a81148f32cea4ab69ba372b2db3990159a6477a77fd9738ae09f7851c89a9e20f415cd6c5614898569e80e9f782d11c20c0c8301f6695891d60ca1b252c91bd98e19f69b8f3fb2f7876e222284c329a7092fb18f012dfd2bfb3395a0fc6912adc2 760ecbf72631d1f6f9053410e8e0d1a2932ace3687848340e93e59a403c811692342cd943df5c15161c681268c09d64c2432795e16c66836fbe8e09def5172b221f76291aa64c3e1d7a9cee1c5268035b246dfc6f0b3e3fc0e52bc50f8d611a1d0993264d032fe86d79dc753d4cad424e5eb5dec307a563da64246469d99b1 20a933210c9229cd665e4e6708fc27ce4307ec78d6cc7003aa16d09904aa7ce00c87a7aff5cbfed7068eb434000ad1ff14310db1b7a3f00301b47ab67b51d87e33e788c580d04b9558087babc32ee6e21b5b2612a2ec98c33add43f276a9bda977e79ad01e55f8b8ce4932d24cd1c519e67e3c09b0f0fb37709edf5eb05803 eb7ebd63f918e5daea5490d154f07c06c4cdb2b6b8dd7bd83c8a3fc5b32a9887c36453e287a6a15336331fbd7bc5f184fcbc8df77f5bbc3fac7750cbbf1d5e455df0b8b2d6e5c3b67c26ec8dd66d9e8365347a40109543e5c9b60c73eedd1d1a412b85e7c570322c99f49f4e3587987a38342f86d8e6ac3618755f52be8557 6e81331d3d98002ac9e77f3425a0c52173e8cdb6a84e804d117657f2d28f60f43523304b4c8e151da16b1ffb120f46980d3e54ae7ea0388cc58aca79b9915b0b1a3ffffd89aa067dc6c9bf201be91b6ed553479bb28652d6890f2b021eb9a71a4fb7e72bf6ae5c19c2be04db78e615c9fd83302ec22969ca21defc48fea88c d4a3beb0867770202664d3ba186a80c08af784664993a67c8751664cd6b7e007c9fb84e79a39deb9a3dcab04084aa64f69b5e1ffeb241ce0b8edaf5041d7fd896aa0c0318b6e9116512c8d5dd2b427134b845e9b74edf02bc060d29799565208a3ce5bececcd2428d526093ac620099d1398d4aebd188fa58cb910606d42bc e7d76afd1242ee0bef6defcf6fd734f990afd1efadec99d77a72ef16abc8e9454b23441bfdbd5b2d9452fb080465b29a1ea0d25f7672f30a6528de7aa61cc2e50e259d7a4976220b15e141774b598ceaea48b4132ffdb29f68602468cfc11e71b8acbc36329b3e0bb9ec27fcff6af6c20224caca52e950ccf85d7c5e0ec04a 5a8e8e2ee4da07da9c10fe3af67532c07b907587623286e60dad282363a74223dfea06ace7603029a1139ab16a0e627f5a32a737bdcc3be57a6b278cfa1509ec93366b8f617faaef887c7c686b1dd063503a31081a89eede0a2234032aab0883ad0e02ab4503fac2eaab793e26bc474e262748f572ec7dee5cbcab75bb5195 25136a7c3b5d592a2010a4c62b43c72fcb0c58d4d485f9debe1ba2917cfee3af3d8fa5120f732cada12182b9759b7e9a2e9263f1cbcf27e6c9b57021aa4a69ca2cb6308912edc4f8d28c82262662e841a0733ff4a48495f9965c15d9784f9c286d992f466a17786af839b7ccb66c54838d9092d674e090c9d2be9378b12bee 55f7fc9e45596ba934b874e792f578309f2db01bc18a0b0586c30ca6bee285edf32c1814b6c8f0b25f89d2bef8b1393ef5ee2f71a4e2621396b69364efe41a9c3cdc0a0e0af1f19abef5b1d7975dca62a5b6834542c29cb9730d4de4681f1259a14e0dcb92597291123a6904c43e2dc61e41d88ba05d24988276b98a3dc968 ae817bd5f6d8da95d4964c164c516a33307aa898aa683321c8ee6747f5bd2e516c90f456c1b0ab3c3c17a8050490a55b7e091cd5119bbdbcf06d3a3fd0af3f4b594960cb82df76523254afef464d169a723d32cf046bd23d4292ce513d06f4e924072475ba19951bbca551322ca5a7da35b822a9f95d500b9bc0e0fb22ff42 812f7666049acf1bcdb427f161ad618a00692a744f9e202775e92ce6f1d478fff48a5909eae512a42bff0c6f59e6c03bb16c08286d7f5703df98e96f8a6b1a85e8dd51fb7466dddfacffc4a343f4181655155ccf23ba2b5efcf376965827f896d93dc16e2080a32dcf9e2f1d251839d55f9304cfad2dbb6190603ccc404b45 345f8816b3cbce1fa2d4c52b0683c02776a69ccbb1bd4c91626ce99f36feb360e37551c1d603938c1932c837a26f3f9ee3447c28d94f3fa7bd80e91d97cfb91c825386f951f7b49d7ea6097df1fff1f9728bc7612072eb6cd00d42e92d99c58363f468e819ce1645eccc610ceeba2d9fe375ce84874e5309426b5da0a1d6c5 e220451980506760d1f15bf459b7941c3cdcef3e173955557c3eff05d57aa911c974fbfafde4e8b7e44e60b608aeaec1c8952f787a4f3db5e36f68209aa0e72ee42c9dab5476731f98efd132bcbf540e65be27d43acab56cf09b182c160931be67293896f86c7754a8d839ead2a46df891e2c68e29302af82524a445c7a719 1ca22bbd34c35e32793c63c6a06264ed44a80392d6dc2a358ac6111b684665aceaca7d912ac32b97918c21c29fe5303b4e7f2c125534f612d192e80dbb1c333ff69218579d5ff15edaeb546c1a37ce0376a717afbdb2a895a4a212f6afea3bade69d5403199b82c4cb3818f5de5b968d2cc7125a0b56402e90e80bb99a3540 1156ac7fc66a030c6baebd6fbc99450ab8289966e8fb784db1098794baaaf6e425a4ec28bae84ca9b4eae3a88c58dce22f587195337627263fde9d4a839340e3c2aeac65159e07713005d8e2c5bb02143687b4f9b94a7b8dc563d9ea6cd4312ef5193de4a7cb80c03669843a5be26e6f72066f4bb4398d6d45bd2932b53eef 3b422a0cd5a7ffd3e0c6e48b9863992f2a5fc9111f3454e9b6ed1beecebe3901429dce3fcdb12818e0fc0580a470d339adac821461c809c57d94643c400667bd81a45243f5b6dfd9a8ab0c9037f4b85121e4bef524408a49a27e1e84a54460bf90ffbd273566b2e72a359c5dc976173de26d425e5e08daaff0f2dbd5a8208e 5d5682c1cc88dc6cf13236594be412b3078fb4162bbcd5fb72a9c85bfa86e9738dc5af7ef3114060e73fa0b1d1eed6eb6cb001d1408a4eaaffa863cc8443a9584005001d94dde3e6864fc87b1ba74809c2af1fc3f809919638fdc57e43bacf1a93980f97f712b27f0e28d973485168413a40de15360c612be853ecb38fe8a7 85e68af029690a4fab6f46bf09d5e0580540645356acde2f64ad0abc4e688cfacbad33e80e873e38073e81e208609af12997c3f6c4e1f5db61175e7de14cd2c0b11dc4dfebe479b8a1bcf3c72d5bbc8f24bf41c1e32e3d242e0ecee5a7e91a79164e352e645bdde2e2ea4e4fa73a51dbac6f3fb12a2e52c931faaea002e632 ed96496f3f6ac6a5c2fbbe514bf15ac568f28e94f08c2d5dd438fd6d0bb1d78bed781f2a592dce57eec4981b61dc14f7e92ab5fd9984a66d5d5a9f0ed99bb5657677be57f825d2fa131247d58e1bb4e05777dca12c1b867b4bc8600c0625e17a5762c8b53e40edab3da7a3e06a850727a673cf1fb83e309cc24035adec1a00 542b0baee896f3159b914f386ef735724ac978e6726e092e5c4f7c8f2d03a26ac3e8767b13433fcb62a70abe33805894df64f5b5610805790c0fb51a4940bfa3065f8eb363a22f7443a14cd875b36aee9ce235e7ea278bb4ba79894a6e0be9481c8968c7923540a9f3562735a841c6265c9a59fc46a79f9d86955edcab2de4 59e9653265dd7bdadab75e6b5403ba677a0911f16c02c1aca1207a80b63339b198bc2ed97d9be44ffcc539de6a09efd6ed3ba7fc86793c605eed99667f647e554a973fbf703c805621dd01027136ca6612623702af39e044e2310a57ab6436a0c2bb9338f66f741cceae5ad97437c183d1616b0f0f82b8c169406a60ff9a3c 8c4d64f8c428f431aa6d6f210032a9d1a690cc9f0e8bc0a8eb092e0a4dff5210fe1d04aae62cdeb09d63b590413afd725b7c69a625626e84bd6de7a9a7dc581740f15a6c33b37fd1c4b0d603620f766b2caede6c58e98232039bf1bcc679ca49c69d94f2f9ff6bc90e42ec4eea2a95f36ec9c4c05ac2727c8dca53cff8b52d 77758f701a73ee7ede506aa45303488608e3278ada7cdb5d0e278024eddaf5b3d71a9e78e09aef38bc1cb9505bd2d5ff7740c01d2cf99d3234e37ebee8bc234a84d246f9d34417ff4b46722c7f7c1f02c88e61c1d07dc9e9e250c27f5921fd79580f2c7960946bcf066460b6a06b56c8a6faf33febc37211a4076d26f23a3c 37caf7a67a61d6a83852619d92b0a47b045610dd8ad197fba14b73c7e521cd1f302257bb4fc9f73c640757151beaac43c7e9c1f57e855d07b7719159af3c3fcfc5f8f0ee36f54afb496e06d2ed4b5b805d8b8aaf98b86a23e129c91661bdcce80d03447f0c136cd494d4673fd203ca4c4daaa785b9b6d5b9b5bef548353a5d 80621a70c8a110f82cc7dda3c13357d058452641c314663f0cfecc25b0dca60ac3c087489239a74723f279be5cce18c58f0426bc79119e4acc48635802d53ce7b79454510c168a9c2eda73621fceba43bfa2faef93ea709b7489cf1cb8d579b798193f06b506c277fd37c5a20cf06531ae664a44dd3c15042c8d037b462792 a887f13493d8fa2e1d6b363b108be4e1e5322c9c5507f692dde3893f900eeefa8b0ac181b12db6e5a19ef26c5ccab730e35be6880bb76c0698b783e5d70d62e7c8a257e56aab3c2f1630f956471d6ea1814ae2d248ab828fd84fa0293591576a21dd10bbdddb6afac43405dc2349bc952d246f36f2fa53938eb25008bfeab9 3ee79e61e8b8484646bab5c5435726f5944849715f4fa5ab626d06c2f4d3b979f75e1dbe41a69fb51df35cb8405c669642155d2e1af0d8c9bfc755a243d7472c62d3ebba5eaf9ffd78f286bd564d714f24d15f5244060411d7f6bbf7eb1bb40ebdf280bc8e2dbc3bb5c08c7bc54987c7fbce2204ea4fb6d4d0cd702608a115 1ce65a55a72697b84ecfaaef7377ca2232f61c0b5d50601848c836dc8904ef730fac47f13317870461374472d742ba2aaa28e408f33bb60f406361cbcc1dbb3881e28a15f3596164b300bb41cb8ca6c2e8711deddf7e217e6dc88dd2cfdf39e583723defcc1b71b1277aba6cb197e612d8292ff4a656d0e3bb6dc3ed945611 e90704e747134e376db710d8f8306e7603f83857da83686e53231c0221bc669c8e1ab002bdfab188211f28497a5bcbb94403fe9e3e98e83e78e050b6abf9b731774fe0eb94644e65a66249d897c5800999da92681963063ebe3fbe290ff13a942e3aa0b85a36437cc74b8eb62a705349a148c70343d786f64b23dcfca752e9 48739f58e50b227d688722f0007034f2bb589b221b450e4e5995a363f9dd0ff043e3c8f1319848dfba748cc99262649dddb2a2a05ef8130d873b4926275bccab6a6d847a1a33512ca8fe6753bff36e417c090bd5749f74e70a49d71614b4950c65cb615dcffb96336f52cb1a948b99fce25af2dca24a683f968c529aa9b57b f0186e0b4f7f1c075669b6ed3b7e1dfd06bbc54b4fc9d5fce169a20000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont setpacking %AI3_EndRider [ 39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis /Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute /egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde /oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex /udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash /.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef /.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash /questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef /guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide /.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright /fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex /Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex /Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla /hungarumlaut/ogonek/caron TE %AI55J_Tsume: None %AI3_BeginEncoding: _CoreTTI2k CoreTTI2k [/NUL /Eth /eth /Lslash /lslash /Scaron /scaron /Yacute /yacute /HT /LF /Thorn /thorn /CR /Zcaron /zcaron /DLE /DC1 /DC2 /DC3 /DC4 /onehalf /onequarter /onesuperior /threequarters /threesuperior /twosuperior /brokenbar /minus /multiply /RS /US /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /DEL /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /degree /cent /sterling /section /bullet /paragraph /germandbls /registered /copyright /trademark /acute /dieresis /notequal /AE /Oslash /infinity /plusminus /lessequal /greaterequal /yen /mu /partialdiff /summation /product /pi /integral /ordfeminine /ordmasculine /Omega /ae /oslash /questiondown /exclamdown /logicalnot /radical /florin /approxequal /Delta /guillemotleft /guillemotright /ellipsis /nbspace /Agrave /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /divide /lozenge /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /apple /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron /_CoreTTI2k/CoreTTI2k 0 0 0 TZ %AI3_EndEncoding AdobeType %AI55J_Tsume: None %AI3_BeginEncoding: _TimesTen-Roman TimesTen-Roman [/_TimesTen-Roman/TimesTen-Roman 0 0 1 TZ %AI3_EndEncoding AdobeType [161/degree 173/notequal 176/infinity/plusminus/lessequal/greaterequal 181/mu/partialdiff/summation/product/pi/integral 189/Omega 195/radical 197/approxequal 198/Delta 214/divide/lozenge 240/apple /_Symbol_/Symbol 0 0 0 TZ %AI5_BeginPalette 0 0 Pb 1 1 1 1 ([Registration]) 0 Xs ([Registration]) Pc PB %AI5_EndPalette %AI5_Begin_NonPrinting Np %AI5_End_NonPrinting-- %AI5_Begin_NonPrinting Np %AI8_PluginGroupInfo (Adobe Path Blends) (Adobe Blends Plugin) (Live Blends) %AI8_PluginGroupInfo (Adobe PatternOnPath Brush Tool) (Adobe Pattern Brush Plugin) (Art Brush Tool) %AI8_PluginGroupInfo (Adobe ArtOnPath Brush Tool) (Adobe Art Brush Plugin) (Art Brush Tool) %AI8_PluginGroupInfo (Adobe Calligraphic Brush Tool) (Undo New Calligraphic Brush) (Calligraphic Brush Tool) %AI8_PluginGroupInfo (Adobe Scatter Brush Tool) (Adobe Scatter Brush Plugin) (Scatter Brush Tool) %AI5_End_NonPrinting-- %%EndSetup %AI5_BeginLayer 1 1 1 1 0 0 1 0 79 128 255 0 50 Lb (Layer 1) Ln 0 A u 0 O 0 0 0 0.4 k 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 1 XR 38.5264 128.9727 m 92.4072 128.9727 L 92.4072 140.9727 L 38.5264 140.9727 L 38.5264 128.9727 L f U u 0.1 0 0 0 k 0 R 1 0 0 0 K 1 J 1 j 0.5 w 37.0264 130.5059 m 90.9072 130.5059 L 90.9072 142.5059 L 37.0264 142.5059 L 37.0264 130.5059 L b U 0 To 1 0 0 1 63.9668 133.7256 0 Tp 0 Tv TP -13.724 0 Td 0 Tr 1 O 0 g 0 J 0 j 1 w %_ 0 50 XQ /_TimesTen-Roman 8 7.48 -1.92 Tf 0 Ts 100 100 Tz 0 Tt %_0 0 100 100 Xu %AI55J_GlyphSubst: GlyphSubstNone 1 TA %_ 0 XL 0 TY 0 TV 36 0 Xb XB 0 0 5 TC 100 100 200 TW 25 TG 0 0 0 Ti 1 Ta 0 1 2 2 3 Th 0 Tq 240 Tg 9 0 Tl 0 Tc 0 Tw (J) Tx 1 74 Tk (Applet) Tx 1 0 Tk (\r) TX TO u 1 R 0 0 0 1 K 1 j 0.5 w 19.7246 11.3799 m 109.459 11.3799 L 109.459 40.3398 L 19.7246 40.3398 L 19.7246 11.3799 L s U 0 To 1 0 0 1 19.7246 32.0605 0 Tp 0 Tv TP 0 Tr 1 O 0 g 0 j 1 w /_CoreTTI2k 8 6.944 -2 Tf 0 Ta (+) Tx 1 0 Tk /_TimesTen-Roman 8 7.48 -1.92 Tf (paint\(\)\r) Tx 1 0 Tk T* /_CoreTTI2k 8 6.944 -2 Tf (+) Tx 1 0 Tk /_TimesTen-Roman 8 7.48 -1.92 Tf (nextSlide\(\)\r) Tx 1 0 Tk T* /_CoreTTI2k 8 6.944 -2 Tf (+) Tx 1 0 Tk /_TimesTen-Roman 8 7.48 -1.92 Tf (init\(\)) Tx 1 0 Tk (\r) TX TO u 0 O 0.25 0 0 0 k 1 R 0 0 0 1 K 1 j 0.5 w 19.7246 40.3398 m 109.459 40.3398 L 109.459 96.6001 L 19.7246 96.6001 L 19.7246 40.3398 L b U 0 To 1 0 0 1 19.7246 88.4399 0 Tp 0 Tv TP 0 Tr 1 O 0 g 0 j 1 w /_CoreTTI2k 8 6.944 -2 Tf (+) Tx 1 0 Tk /_TimesTen-Roman 8 7.48 -1.92 Tf (WIDTH :) Tx 1 55 Tk ( int\r) Tx 1 0 Tk T* /_CoreTTI2k 8 6.944 -2 Tf (+) Tx 1 0 Tk /_TimesTen-Roman 8 7.48 -1.92 Tf (HEIGHT :) Tx 1 55 Tk ( int\r) Tx 1 0 Tk T* /_CoreTTI2k 8 6.944 -2 Tf (-) Tx 1 0 Tk /_TimesTen-Roman 8 7.48 -1.92 Tf (NIMGS :) Tx 1 55 Tk ( int\r) Tx 1 0 Tk T* /_CoreTTI2k 8 6.944 -2 Tf (-) Tx 1 0 Tk /_TimesTen-Roman 8 7.48 -1.92 Tf (slide[] :) Tx 1 55 Tk ( Image\r) Tx 1 0 Tk T* /_CoreTTI2k 8 6.944 -2 Tf (-) Tx 1 0 Tk /_TimesTen-Roman 8 7.48 -1.92 Tf (currentImage :) Tx 1 55 Tk ( Image\r) Tx 1 0 Tk T* /_CoreTTI2k 8 6.944 -2 Tf (-) Tx 1 0 Tk /_TimesTen-Roman 8 7.48 -1.92 Tf (nextImage :) Tx 1 55 Tk ( int) Tx 1 0 Tk (\r) TX TO u 1 R 0 0 0 1 K 1 j 0.5 w 19.7246 96.6001 m 109.459 96.6001 L 109.459 111 L 19.7246 111 L 19.7246 96.6001 L s U 0 To 1 0 0 1 64.5918 101.02 0 Tp 0 Tv TP -30.4759 0 Td 0 Tr 1 O 0 g 0 j 1 w 1 Ta (SlideShowApplet) Tx 1 0 Tk (\r) TX TO u 0 R 1 0 0 0 K 1.2 w 64.5889 121.1055 m 64.5889 111 L S U 0 XR 69.5938 121.1055 m 64.5889 129.5059 l 59.5898 121.1055 l 69.5938 121.1055 l s LB %AI5_EndLayer-- %%PageTrailer gsave annotatepage grestore showpage %%Trailer Adobe_Illustrator_AI5 /terminate get exec Adobe_shading_AI8 /terminate get exec Adobe_ColorImage_AI6 /terminate get exec Adobe_typography_AI5 /terminate get exec Adobe_cshow /terminate get exec Adobe_level2_AI5 /terminate get exec %%EOF \ No newline at end of file +%!PS-Adobe-3.0 EPSF-3.0 +%%HiResBoundingBox: 0.000000 0.000000 94.000000 136.000000 +%APL_DSC_Encoding: UTF8 +%APLProducer: (Version 10.12.4 (Build 16E195) Quartz PS Context) +%%Title: (Unknown) +%%Creator: (Unknown) +%%CreationDate: (Unknown) +%%For: (Unknown) +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 0 0 94 136 +%%EndComments +%%BeginProlog +%%BeginFile: cg-pdf.ps +%%Copyright: Copyright 2000-2004 Apple Computer Incorporated. +%%Copyright: All Rights Reserved. +currentpacking true setpacking +/cg_md 141 dict def +cg_md begin +/L3? languagelevel 3 ge def +/bd{bind def}bind def +/ld{load def}bd +/xs{exch store}bd +/xd{exch def}bd +/cmmtx matrix def +mark +/sc/setcolor +/scs/setcolorspace +/dr/defineresource +/fr/findresource +/T/true +/F/false +/d/setdash +/w/setlinewidth +/J/setlinecap +/j/setlinejoin +/M/setmiterlimit +/i/setflat +/rc/rectclip +/rf/rectfill +/rs/rectstroke +/f/fill +/f*/eofill +/sf/selectfont +/s/show +%/as/ashow +/xS/xshow +/yS/yshow +/xyS/xyshow +/S/stroke +/m/moveto +/l/lineto +/c/curveto +/h/closepath +/n/newpath +/q/gsave +/Q/grestore +counttomark 2 idiv +%dup (number of ld's = )print == flush % *** how many +{ld}repeat pop +/SC{ % CSname + /ColorSpace fr scs +}bd +/sopr /setoverprint where{pop/setoverprint}{/pop}ifelse ld +/soprm /setoverprintmode where{pop/setoverprintmode}{/pop}ifelse ld +/cgmtx matrix def +/sdmtx{cgmtx currentmatrix pop}bd +/CM {cgmtx setmatrix}bd % pop the ctm: our gstate ctm on host is now identity +/cm {cmmtx astore CM concat}bd % reset the matrix and then concat +/W{clip newpath}bd +/W*{eoclip newpath}bd + +statusdict begin product end dup (HP) anchorsearch{ + pop pop pop % pop off the search results + true +}{ + pop % previous search result + (hp) anchorsearch{ + pop pop true + }{ + pop false + }ifelse +}ifelse + +{ % HP is the product: we use this method of stroking because of a bug in their clone printers with certain T3 fonts + { + { % charCode Wx Wy + pop pop % charCode + (0)dup 0 4 -1 roll put + F charpath + }cshow + } +}{ + {F charpath} +}ifelse +/cply exch bd +/cps {cply stroke}bd +/pgsave 0 def +/bp{/pgsave save store}bd +/ep{pgsave restore showpage}def % dont' bind +/re{4 2 roll m 1 index 0 rlineto 0 exch rlineto neg 0 rlineto h}bd + +/scrdict 10 dict def +/scrmtx matrix def +/patarray 0 def +/createpat{patarray 3 1 roll put}bd +/makepat{ +scrmtx astore pop +gsave +initgraphics +CM +patarray exch get +scrmtx +makepattern +grestore +setpattern +}bd + +/cg_BeginEPSF{ + userdict save/cg_b4_Inc_state exch put + userdict/cg_endepsf/cg_EndEPSF load put + count userdict/cg_op_count 3 -1 roll put + countdictstack dup array dictstack userdict/cg_dict_array 3 -1 roll put + 3 sub{end}repeat + /showpage {} def + 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin + 10 setmiterlimit [] 0 setdash newpath + false setstrokeadjust false setoverprint % don't use F +}bd +/cg_EndEPSF{ + countdictstack 3 sub { end } repeat + cg_dict_array 3 1 index length 3 sub getinterval + {begin}forall + count userdict/cg_op_count get sub{pop}repeat + userdict/cg_b4_Inc_state get restore + F setpacking +}bd + +/cg_biproc{currentfile/RunLengthDecode filter}bd +/cg_aiproc{currentfile/ASCII85Decode filter/RunLengthDecode filter}bd +/ImageDataSource 0 def +L3?{ + /cg_mibiproc{pop pop/ImageDataSource{cg_biproc}def}bd + /cg_miaiproc{pop pop/ImageDataSource{cg_aiproc}def}bd +}{ + /ImageBandMask 0 def + /ImageBandData 0 def + /cg_mibiproc{ + string/ImageBandMask xs + string/ImageBandData xs + /ImageDataSource{[currentfile/RunLengthDecode filter dup ImageBandMask/readstring cvx + /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd + }bd + /cg_miaiproc{ + string/ImageBandMask xs + string/ImageBandData xs + /ImageDataSource{[currentfile/ASCII85Decode filter/RunLengthDecode filter + dup ImageBandMask/readstring cvx + /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd + }bd +}ifelse +/imsave 0 def +/BI{save/imsave xd mark}bd +/EI{imsave restore}bd +/ID{ +counttomark 2 idiv +dup 2 add % leave room for imagetype and imagematrix +dict begin +{def} repeat +pop % remove mark +/ImageType 1 def +/ImageMatrix[Width 0 0 Height neg 0 Height]def +currentdict dup/ImageMask known{ImageMask}{F}ifelse exch +% currentdict on stack +L3?{ + dup/MaskedImage known + { + pop + << + /ImageType 3 + /InterleaveType 2 + /DataDict currentdict + /MaskDict + << /ImageType 1 + /Width Width + /Height Height + /ImageMatrix ImageMatrix + /BitsPerComponent 1 + /Decode [0 1] + currentdict/Interpolate known + {/Interpolate Interpolate}if + >> + >> + }if +}if +exch +{imagemask}{image}ifelse +end % pop imagedict from dict stack +}bd + +/cguidfix{statusdict begin mark version end +{cvr}stopped{cleartomark 0}{exch pop}ifelse +2012 lt{dup findfont dup length dict begin +{1 index/FID ne 2 index/UniqueID ne and +{def} {pop pop} ifelse}forall +currentdict end definefont pop +}{pop}ifelse +}bd +/t_array 0 def +/t_i 0 def +/t_c 1 string def +/x_proc{ % x y + exch t_array t_i get add exch moveto + /t_i t_i 1 add store +}bd +/y_proc{ % x y + t_array t_i get add moveto + /t_i t_i 1 add store +}bd +/xy_proc{ + % x y + t_array t_i 2 copy 1 add get 3 1 roll get + 4 -1 roll add 3 1 roll add moveto + /t_i t_i 2 add store +}bd +/sop 0 def % don't bind sop +/cp_proc/x_proc ld % default moveto proc is for xwidths only +/base_charpath % string array +{ + /t_array xs + /t_i 0 def + { % char + t_c 0 3 -1 roll put + currentpoint + t_c cply sop + cp_proc + }forall + /t_array 0 def +}bd +/sop/stroke ld % default sop is stroke. Done here so we don't bind in /base_charpath + +% default sop is stroke +/nop{}def +/xsp/base_charpath ld +/ysp{/cp_proc/y_proc ld base_charpath/cp_proc/x_proc ld}bd +/xysp{/cp_proc/xy_proc ld base_charpath/cp_proc/x_proc ld}bd +/xmp{/sop/nop ld /cp_proc/x_proc ld base_charpath/sop/stroke ld}bd +/ymp{/sop/nop ld /cp_proc/y_proc ld base_charpath/sop/stroke ld}bd +/xymp{/sop/nop ld /cp_proc/xy_proc ld base_charpath/sop/stroke ld}bd +/refnt{ % newname encoding fontname +findfont dup length dict copy dup +/Encoding 4 -1 roll put +definefont pop +}bd +/renmfont{ % newname fontname +findfont dup length dict copy definefont pop +}bd + +L3? dup dup{save exch}if + +% languagelevel2 ONLY code goes here + +/Range 0 def +/DataSource 0 def +/val 0 def +/nRange 0 def +/mulRange 0 def +/d0 0 def +/r0 0 def +/di 0 def +/ri 0 def +/a0 0 def +/a1 0 def +/r1 0 def +/r2 0 def +/dx 0 def +/Nsteps 0 def +/sh3tp 0 def +/ymax 0 def +/ymin 0 def +/xmax 0 def +/xmin 0 def + +/setupFunEval % funDict -- % this calculates and sets up a function dict for evaulation. +{ + begin + /nRange Range length 2 idiv store + /mulRange % precompute the range data needed to map a sample value from the table to a range value + % this data looks like [ range0mul range0min range1mul range1min ... rangeN-1mul rangeN-1min ] + [ + 0 1 nRange 1 sub + { % index + 2 mul/nDim2 xd % 2*dimension# we are dealing with + Range nDim2 get % ymin + Range nDim2 1 add get % ymin ymax + 1 index sub % ymin (ymax-ymin) + % xmin = 0, xmax = 255 (2^bitspersample - 1) + 255 div % ymin (ymax-ymin)/(xmax - xmin) + exch % (ymax-ymin)/(xmax - xmin) ymin + }for + ]store + end +}bd + +/FunEval % val1 fundict -> comp1 comp2 ... compN +{ + begin + % the value passed in is the base index into the table + nRange mul /val xd % compute the actual index to the table + % since there are nRange entries per base index + 0 1 nRange 1 sub + { + dup 2 mul/nDim2 xd % dim + val % base value to use to do our lookup + add DataSource exch get % lookedupval + mulRange nDim2 get mul % lookedupval*(ymax-ymin)/(xmax-xmin) + mulRange nDim2 1 add get % lookedupval*(ymax-ymin)/(xmax-xmin) ymin + add % interpolated result + }for % comp1 comp2 ... compN + end +}bd + +/max % a b -> max(a, b) +{ + 2 copy lt + {exch pop}{pop}ifelse +}bd + +/sh2 +{ % emulation of shading type 2. Assumes shading dictionary is top dictionary on the dict stack + /Coords load aload pop % x0 y0 x1 y1 + 3 index 3 index translate % origin is now at beginning point of shading + % x0 y0 x1 y1 + 3 -1 roll sub % x0 x1 y1-y0 + 3 1 roll exch % y1-y0 x1 x0 + sub % y1-y0 x1-x0 + 2 copy + dup mul exch dup mul add sqrt % length of segment between two points + dup + scale + atan % atan (dy/dx) + %dup (rotation angle = )print == + rotate % now line between 0,0 and 1,0 is the line perpendicular to which the axial lines are drawn + + /Function load setupFunEval % may need to setup function dictionary by calling setupFunEval + + % this is now specific to axial shadings. Compute the maximum bounds to fill + clippath {pathbbox}stopped {0 0 0 0}if newpath % x0 y0 x1 y1 + /ymax xs + /xmax xs + /ymin xs + /xmin xs + currentdict/Extend known + { + /Extend load 0 get + { + 0/Function load FunEval sc % evaluate the function to get a color and set it + xmin ymin xmin abs ymax ymin sub rectfill + }if + }if + % paint the rects. The sampling frequency is that of our table + /Nsteps/Function load/Size get 0 get 1 sub store + /dx 1 Nsteps div store + gsave + /di ymax ymin sub store + /Function load + % loop Nsteps + 1 times, incrementing the index by 1 each time + 0 1 Nsteps + { + 1 index FunEval sc + 0 ymin dx di rectfill + dx 0 translate + }for + pop % pop our function + grestore % origin is back to start point + currentdict/Extend known + { + /Extend load 1 get + { + Nsteps/Function load FunEval sc % last element + 1 ymin xmax 1 sub abs ymax ymin sub rectfill + }if + }if +}bd + +/shp % this paints our shape for shading type 3 +{ % x1 r1 x0 r0 - + 4 copy + + % fill interior arc + dup 0 gt{ + 0 exch a1 a0 arc + }{ + pop 0 moveto + }ifelse + + dup 0 gt{ + 0 exch a0 a1 arcn + }{ + pop 0 lineto + }ifelse + + fill + + % fill exterior arc + dup 0 gt{ + 0 exch a0 a1 arc + }{ + pop 0 moveto + }ifelse + + dup 0 gt{ + 0 exch a1 a0 arcn + }{ + pop 0 lineto + }ifelse + + fill +}bd + +/calcmaxs +{ % calculate maximum distance vector from origin to corner points + % of bbox + xmin dup mul ymin dup mul add sqrt % (xmin2 + ymin2) + xmax dup mul ymin dup mul add sqrt % (xmax2 + ymin2) + xmin dup mul ymax dup mul add sqrt % (xmin2 + ymax2) + xmax dup mul ymax dup mul add sqrt % (xmax2 + ymax2) + max max max % maximum value +}bd + +/sh3 +{ % emulation of shading type 3. Assumes shading dictionary is top dictionary on the dict stack + /Coords load aload pop % x0 y0 r1 x1 y1 r2 + 5 index 5 index translate % origin is now at first circle origin + 3 -1 roll 6 -1 roll sub % y0 r1 y1 r2 dx + 3 -1 roll 5 -1 roll sub % r1 r2 dx dy + 2 copy dup mul exch dup mul add sqrt + /dx xs % r1 r2 dx dy + 2 copy 0 ne exch 0 ne or + { + % r1 r2 dx dy + exch atan rotate % we are now rotated so dy is zero and positive values of dx move us as expected + }{ + pop pop + }ifelse + % r1 r2 + /r2 xs + /r1 xs + /Function load + dup/Size get 0 get 1 sub % this is the size of our table minus 1 + /Nsteps xs % at some point we should optimize this better so NSteps is based on needed steps for the device + setupFunEval % may need to setup function dictionary by calling setupFunEval + % determine the case: + % case 0: circle1 inside circle2 + % case 1: circle 2 inside circle 1 + % case 2: r1 = r2 + % case 3: r1 != r2 + dx r2 add r1 lt{ + % circle 2 inside of circle 1 + 0 + }{ + dx r1 add r2 le + { % circle 1 inside of circle 2 + 1 + }{ % circles don't contain each other + r1 r2 eq + { % equal + 2 + }{ % r1 != r2 + 3 + }ifelse + }ifelse + }ifelse + /sh3tp xs % sh3tp has the number of our different cases + clippath {pathbbox}stopped {0 0 0 0}if + newpath % x0 y0 x1 y1 + /ymax xs + /xmax xs + /ymin xs + /xmin xs + + % Arc angle atan( sqrt((dx*dx + dy*dy) - dr*dr), dr) + dx dup mul r2 r1 sub dup mul sub dup 0 gt + { + sqrt r2 r1 sub atan + /a0 exch 180 exch sub store + /a1 a0 neg store + }{ + pop + /a0 0 store + /a1 360 store + }ifelse + + currentdict/Extend known + { + /Extend load 0 get r1 0 gt and % no need to extend if the radius of the first end is 0 + { + 0/Function load FunEval sc % evaluate the function to get a color and set it + % case 0: circle1 inside circle2 + % case 1: circle 2 inside circle 1 + % case 2: circles don't contain each other and r1 == r2 + % case 3: circles don't contain each other and r1 != r2 + { + { % case 0 + dx 0 r1 360 0 arcn + xmin ymin moveto + xmax ymin lineto + xmax ymax lineto + xmin ymax lineto + xmin ymin lineto + eofill % for the bigger radius we fill everything except our circle + } + { % case 1 + r1 0 gt{0 0 r1 0 360 arc fill}if + } + { % case 2 + % r1 == r2, extend 0 + % r3 = r, x3 = -(abs(minx) + r), x1 = 0 + + % x(i+1) r(i+1) x(i) r(i) shp + 0 r1 xmin abs r1 add neg r1 shp + } + { % case 3 + % no containment, r1 != r2 + + r2 r1 gt{ % the endpoint we are drawing is that with a circle of zero radius + % x(i+1) r(i+1) x(i) r(i) shp + 0 r1 + r1 neg r2 r1 sub div dx mul % this is point of beginning circle + 0 % point of ending circle + shp % takes x(i+1) r(i+1) x(i) r(i) + }{ % the first circle is the bigger of the two + % we find a circle on our line which is outside the bbox in the + % negative direction + % x(i+1) r(i+1) x(i) r(i) shp + 0 r1 calcmaxs % 0 r1 maxs + dup + % calculating xs: (-(maxs+r2)*x2)/(x2-(r1-r2)) + r2 add dx mul dx r1 r2 sub sub div + neg % maxs xs' + exch 1 index % xs' maxs xs' + abs exch sub + shp + }ifelse + } + }sh3tp get exec % execute the extend at beginning proc for our shading type + }if + }if + + % now do the shading + /d0 0 store + /r0 r1 store + /di dx Nsteps div store + /ri r2 r1 sub Nsteps div store + /Function load + 0 1 Nsteps + { % function t(i) + 1 index FunEval sc + d0 di add r0 ri add d0 r0 shp + { + % fill interior arc + d0 0 r0 a1 a0 arc + d0 di add 0 r0 ri add a0 a1 arcn + fill + + % fill exterior arc + d0 0 r0 a0 a1 arc + d0 di add 0 r0 ri add a1 a0 arcn + fill + }pop + + % advance to next + /d0 d0 di add store + /r0 r0 ri add store + }for + pop % pop our function dict + + % handle Extend + currentdict/Extend known + { + /Extend load 1 get r2 0 gt and % no need to extend if the radius of the last end is 0 + { + Nsteps/Function load FunEval sc % last element + % case 0: circle1 inside circle2 + % case 1: circle 2 inside circle 1 + % case 2: circles don't contain each other and r1 == r2 + % case 3: circles don't contain each other and r1 != r2 + { + { + dx 0 r2 0 360 arc fill + } + { + dx 0 r2 360 0 arcn + xmin ymin moveto + xmax ymin lineto + xmax ymax lineto + xmin ymax lineto + xmin ymin lineto + eofill % for the bigger radius we fill everything except our circle + } + { % r1 == r2, extend 1 + % r3 = r, x3 = (abs(xmax) + r), x1 = dx + % x(i+1) r(i+1) x(i) r(i) shp + xmax abs r1 add r1 dx r1 shp + } + { % no containment, r1 != r2 + + r2 r1 gt{ + % we find a circle on our line which is outside the bbox in the + % positive direction + % x(i+1) r(i+1) x(i) r(i) shp + calcmaxs dup % maxs maxs + % calculating xs: ((maxs+r1)*x2)/(x2-(r2-r1)) + r1 add dx mul dx r2 r1 sub sub div % maxs xs + exch 1 index % xs maxs xs + exch sub + dx r2 + shp + }{ % the endpoint we are drawing is that with a circle of zero radius + % x(i+1) r(i+1) x(i) r(i) shp + r1 neg r2 r1 sub div dx mul % this is point of ending circle + 0 % radius of ending circle + dx % point of starting circle + r2 % radius of starting circle + shp + }ifelse + } + } + sh3tp get exec % execute the extend at end proc for our shading type + }if + }if +}bd +/sh % emulation of shfill operator for type 2 and type 3 shadings based on type 0 functions +{ % shadingDict -- + begin + /ShadingType load dup dup 2 eq exch 3 eq or + { % shadingtype + gsave + newpath + /ColorSpace load scs + currentdict/BBox known + { + /BBox load aload pop % llx lly urx ury + 2 index sub % llx lly urx ury-lly + 3 index % llx lly urx ury-lly llx + 3 -1 roll exch sub + exch rectclip + }if + 2 eq + {sh2}{sh3}ifelse + grestore + }{ + % shadingtype + pop + (DEBUG: shading type unimplemented\n)print flush + }ifelse + end +}bd + +% end of language level 2 ONLY code + +{restore}if not dup{save exch}if +% languagelevel3 ONLY code goes here + L3?{ % we do these loads conditionally or else they will fail on a level 2 printer + /sh/shfill ld + /csq/clipsave ld + /csQ/cliprestore ld + }if +{restore}if + +%currentdict dup maxlength exch length sub (number of extra slots in md = )print == flush % *** how many entries are free +end +setpacking +% count 0 ne { pstack(***extras on stack during prolog execution***\n)print flush}if % *** BARK if anything is left on stack +%%EndFile +%%EndProlog +%%BeginSetup +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 0 0 94 136 +%%BeginPageSetup +cg_md begin +bp +sdmtx +%RBIBeginFontSubset: Times-Roman +%!FontType1-1.0: Times-Roman 1.0000.0.0000 + 14 dict begin/FontName /Times-Roman def + /PaintType 0 def + /Encoding 256 array 0 1 255{1 index exch/.notdef put}for + dup 33 /J put + dup 34 /F put + dup 35 /r put + dup 36 /a put + dup 37 /m put + dup 38 /e put + dup 39 /p put + dup 40 /i put + dup 41 /n put + dup 42 /t put + dup 43 /parenleft put + dup 44 /parenright put + dup 45 /x put + dup 46 /S put + dup 47 /l put + dup 48 /d put + dup 49 /W put + dup 50 /I put + dup 51 /D put + dup 52 /T put + dup 53 /H put + dup 54 /space put + dup 55 /colon put + dup 56 /E put + dup 57 /G put + dup 58 /N put + dup 59 /M put + dup 60 /s put + dup 61 /bracketleft put + dup 62 /bracketright put + dup 63 /g put + dup 64 /c put + dup 65 /u put + dup 66 /h put + dup 67 /o put + dup 68 /w put + readonly def + 42/FontType resourcestatus{pop pop false}{true}ifelse + %APLsfntBegin + {currentfile 0(%APLsfntEnd\n)/SubFileDecode filter flushfile}if + /FontType 42 def + /FontMatrix matrix def + /FontBBox[2048 -416 1 index div -877 2 index div 3482 3 index div 2604 5 -1 roll div]cvx def + /sfnts [< + 74727565000900000000000063767420000000000000009C0000041E6670676D00000000000004BC00000588676C79660000000000000A4400002BC868656164000000000000360C0000003668686561000000000000364400000024686D74780000000000003668000000A06C6F63610000000000003708000000526D617870000000000000375C0000002070726570000000000000377C000006C305740002054B001D054B0018039700130000FFE30000FFED0000FFEAFE420000054B001DFEBDFFD6031E000000B4000000B402FE3F3C0026001C007D00980003007D00DE00350017002800E3013E000300B400D000DF004C005A00C4004A00AB0147008A004E0039006D013D002401D200360045009E00BE00170079006F00D000460091002100B400BAFFC20017003600AB00B800F60009001D003D0058005A008C0099FFC400A000E800F5FFA1FFEA0033008500B800D5FFE2002F0080008C0002001A00250045006A0070012D0274FF87003E004E009800BA00DE0116FF3E00150034003C004400670068006D006E0084009800BD00D500D7011C0000002D0030003D00460057008B0093009700B000C6011F017B019D0409FF68FF6A0056005A006A006D009200C400D000E700F1011101BF01C7FF1CFFB4FFFF0002002300380042006D0092009C009D00A100A200B400BA00C700C700E400ED0153015703230334FF0DFF32FFFBFFFF000F001C0040004B005C006D006D007C0085009800C500CB00CB00DF011F01280136015501700180018A01C7024203130407054EFF82000000080026003D003D004F006E0073008B00900095009E00A800AD00AD00C300D300E3010901230241028002F40311034004510576FF7FFFAFFFBEFFCF00030005000E0039004B004B004C00740078008800890092009200B600C200D800DF00F000FD010701100117011F01B401DD01EB020002110229028002CA036F038A03AF0400049C04DD053E0587FEA6FEE4FF67FF95FFCBFFF8000200020007002500280037003700380039003F00510053005900640068006B007D0098009900AF00B100B900D000D500DA00DD00FD00FE011E013601370142015A017A01A301C401CC01F702020210021F022902290287029F029F02C002CC02D5031A031D03280331035E0396039F03A8049305640571059405B106EB0788FE63FE64FE76FE7CFEBCFF4BFF97FFACFFC0000700210028002D003000480049004C0051005400560066007A007C0085008A008C009900AF00B300B500B500B600B900BB00BC00CC00D000E100F400F600FC00FD0109011001170118011F01300139013C013E0142014301440149014B014F01540155015701580161016A017D017E0184019C019C019D01A101A301B401B401B901BB01CB01D001D701D701E401EC01EC01F702050207 + 0218022302260240024B024B025702570261026302680269026D028D028D02A602AF02B402B80300033E03460361036103B003C003D503D703DF03F9041A0474047B04C104CC04DA04E404F204F6051005300555055606180639067606A406B3076B07AD07DA00B200D500AE00BB00000000000000000000000000630079029602FA007E0247009100C8000002CA024800DA007D01B301A4002D00A5009C0034003400DC00DC0040004000310031000A000A00820030002A002A00004027262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A090807060504030201002C4523466020B02660B004262348482D2C452346236120B02661B004262348482D2C45234660B0206120B04660B004262348482D2C4523462361B0206020B02661B02061B004262348482D2C45234660B0406120B06660B004262348482D2C4523462361B0406020B02661B04061B004262348482D2C0110203C003C2D2C20452320B0CD442320B8015A51582320B08D44235920B0ED51582320B04D44235920B09051582320B00D44235921212D2C20204518684420B001602045B04676688A4560442D2C01B9400000000A2D2C00B9000040000B2D2C2045B00043617D6818B0004360442D2C45B01A234445B01923442D2C2045B00325456164B050515845441B2121592D2CB00143632362B0002342B00F2B2D2C2045B0004360442D2C20B0032552582359212D2C69B04061B0008B0C6423648BB8400062600C642364615C58B0036159B002602D2C45B0112BB0172344B0177AE5182D2C45B0112BB01723442D2C45B0112BB017458CB0172344B0177AE5182D2CB002254661658A46B040608B482D2CB0022546608A46B040618C482D2C4B53205C58B002855958B00185592D2C20B0032545B019234445B01A23444565234520B00325606A20B009234223688A6A606120B0005258B21A401A4523614459B0005058B219401945236144592D2CB9187E3B210B2D2CB92D412D410B2D2CB93B21187E0B2D2CB93B21E7830B2D2CB92D41D2C00B2D2CB9187EC4E00B2D2C4B525845441B2121592D2C0120B003252349B04060B0206320B000525823B002253823B002256538008A63381B212121212159012D2C4569B00943608A103A2D2C01B005251023208AF500B0016023EDEC2D2C01B005251023208AF500B0016123EDEC2D2C01B0062510F500EDEC2D2C20B001600110203C003C2D2C20B001610110203C003C2DB800272C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800282C2020456944B001602DB800292CB800282A212DB8002A2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800 + 2B2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8002C2C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB8002D2C2020456944B001602020457D691844B001602DB8002E2CB8002D2A2DB8002F2C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800302C4B535845441B2121592DB800312C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800322C2020456944B001602DB800332CB800322A212DB800342C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800352C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800362C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800372C2020456944B001602020457D691844B001602DB800382CB800372A2DB800392C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8003A2C4B535845441B2121592D0002002100000597054B000300070043B40201490506B80156401C0004074903000A0504490303021A090607490100190809EB214652182B2B4EF43C4DFD3C4E10F63C4D10FD3C003F3CFD3C10F43CFD3C31303311211127112111210576B8FBFA054BFAB5B803DBFC2500000001005EFE93026F056800110045401C0C0D04030D080C1304040C0D03110D131317171A04AE084811191213B8010BB3218352182B2B4EF44DFDF44E456544E6003F3F1239390111123912393900C910C931301213363717060706111017121707262702115ED080AE13A145792E51E01A7B8FED035E0107A162218079D3FEA1FEFCA9FED893213BAC011D016B00000000010036FE93024705680014004A40200902010F100706100706030B0F070F06101106131617171A14480BAE0F191516B8010BB3214D56182B2B4EF44DF4FD4E456544E6003F3F12393901111217390010C910C93130005D00020706070607273637361110270227371617121102474E4B4F84573B139A477E3A51D41A9E88D10163FEF6767E6D481D21757AD80163011FB60101932158B2FEEEFEAC000200A5FFEF018903AD000B00170035401C022A0807112A170B1917171A142A0E0B2A05 + 050E191819C321FC6F182B2B4EF43C4D10ED10FD4E456544E6003F4DED3FED31300006232226353436333216150226353436333216151406230184452C303E402E2C459E41402F2F464237030D3F442C2E413F2FFCB0422F2D43412E2C460000000200210000057D054B000E002400994032C71B01A808B808B81AB51BF90805360812210F1B24282413211B1728231213020A2E18181702022E232324080654BF1C011CB80206B5260D0E291312B80203B126252FCCF43CFD3C10FE5DED003F3C10ED3F3C10ED1139392B2B313043794028192203091E1D1F1D201D211D040604251A25082603220637010919063701051D023700071B0A37012B2B012B2B2B2B2B2A8181005D015D241633323736111027262122061511053E013511342627352120170411140207060706232101A5314DF09BEEC4A8FEEB4531FE7C7044427202280117C1015C7D7E50569DE5FDC76C205F920161013B9F881E33FBEF790C3974038F704008265CA5FE5799FEEC5F3C1F3A0000020017000004C7054B0028002900CA406B652776278527030EC80B1B0F0A010A7C0E1D981A1B0F1901192D1D0321001B28282404211B0828231498171B001801182D141D140E03191F24091825270A0324262204130E080F26AF222E280F2E0814132C1D1E1E282908022808292903191874094B0A74002650260226B8020AB52B121F290403B80203B12B2A2FCCF43CFD3C10F65DF4F4F43C12392F003F3F3C12392F3CFD3C10ED10EDED11123912391112393901113939111239111217390010F55D01EDEC2B2B10F55D01EDEC0010F55D01EDEC3130015D373E013511342627352113232E01232122061511213236373311232E01232111141633323637330321011771434272044007341A68B4FEEA2D15013B8348163030174882FEC54DC0D0C64F395DFBAD025C250C3974038F6D430826FEDA88501D28FE374E77FE26774DFE053D165BAFFEA6054B0000000001001700000461054B002400A9405A0EC80B1B0F0A010A7C0E1D981A1B0F1901192D1D034A001B24282404211B0828231498171B001801182D141F211B2328231D140E03191F031F1E2404130E0F2E0814132C1D1E1E2308022423081918FA094B300A500AD00A030AB8020AB526121F290403B80203B126252FCCF43CFD3C10F65D4DF4F43C003F3C3F12392F3CFD3C10ED3911391112393901111217392B10F55D01EDEC2B2B10F55D01EDEC0010F55D01EDEC3130373E013511342627352113232E01232122061511213236373311232E01232111141617152117793B4272044307391574ABFEE8291701288348163030174882FED84574FDC2250D3F8503776D430826FEDA8D4B1C29FE374E77FE26774DFE40713F0925000000020031FFE305A10563002F003000BF401BE602012808237A1B1EA72219211B + 1D2823051B067E40081B210707B801074031067E4002A1262F25231903121D1E1E270C2E302F03122E27090761231918292430302B249F23CF23022F234F23BF230323B80204B3320F542BB80205B132312FCCF4ED10F65D5D3C12392F10FD3C10E4003FED3F3CED12392F3C121739103D1AEC181AF4ED01103D1AED1A18F4ED2B2B31304379401C282E0D1129252D2611280F37000D2E0F3700102A1237000E2C0C37012B2B012B2B2B2B8181005D001633323637331323262726232200111000333236373E0135113426273521150607061511140423202726111037362123036DE6112C250D2D102F3F4379C2C5FED5012ADB25642D49244371020A4C192AFE9FA3FED4CEE3B5C70149210563422220FE51954980FED5FEA9FEE5FEC20E0F1823220147763A07262605142064FE6D2478AFC10145011ECCE100000001002100000597054B002B00994059461B4627020D211B09282219211B152822234A1B1F2822034A001B2B282404211B08282310211B1428231A211B1E282326211B2A282326231A0304252B19100D0404080F0E2C2425251E15140908022B2A1F1E08102329191AB80204B52D0D26290403B80203B12D2C2FCCF43CFD3C10FD3CFD3C003F3C3C3C3F3C3C3C12392F3C4DFD3C111739111217392B2B2B2B2B2B2B2B31300071373E0135113426273521150E01151121113426273521150E0115111416171521353E0135112111141617152121783C437102397144026D4272023971434371FDC7793BFD934471FDC7250D3F8503776E4208262608426EFE71018F6E4208262608426EFC71703F0A25250C4085018EFE5A70400925000200210000027F054B00130014005840280D211B092D220321001B132D2404211B082D230E211B122D230E0D04030413140908021312081416B8020440090E140E030D0E290403B9020300152FF43CFD3C11123910E62F003F3C3F3C3C1217394D2B2B2B2B3130373E0135113426273521150E011511141617152101217D4A4A7D025E7D4A4A7DFDA2012F25093977038F7141062626064171FC7177390925054B000000010015FFE802F6054B001A007B403204158A18021A0812211B0E2D2209211B0D2D230304081A09120D60027002DF02EF02040246170E0D02052E17090908291312BB0204001C001A0209B11C1B2FCCE410F63CFD3C003FED3F3C1076C45D1811393901111239392B2B313043794010141606070616085F0115140715055F002B01103C2B8181005D3E0133321633323635113426273521150E01151114070623222635153D23454225281F4A74024C7747636392606BAD2FAB4657039F724006262607476AFD10CE6364583600000000010017000006E8054B002500BF4069E621010709090B061C190B171C290B390B461C561C671CCA090B0A090A0B0B2C121B1B1C + 0A090929121E1E1D1E1B0A0300070D071B0C0B09080200231703141B161C1D2425051508401C211D15280C281116281A24281F0828252803090A0B1D1C051A1F1B1A291011B80204B5271E1F2C0403B80203B127262FCCF43CFD3C10F63CFD3C1112173910ECEC10EC10ED10ECEC3D2F1AC81A18003F173CFD173C3F3C3C3CFD3C111217390507102B04103C0705102B10083C3130015D005D373E0135113426273521090121150E0115111416171521353E01351101230111141716171521177F48467C019501DA01C5019872424272FDC27C3DFDF41CFDFD31206FFE1F250D59A203406F430626FBF704092608436DFC71703F0A25250A45820398FB72045EFCCFA833210C250000020017FFE805A8054B0020002100984042D9180158196819DD0BEA0EEA15E51C060B0A0A2912191918190B1808190408001310081B21120A021E001B1F0818092121031618170A1A0B11280C0B2C1717122816B80204400C23191F281A2C040928202803B80203B123222FCCF4ECEC3CFDEC3C10F6EC3C4D10FD3CEC11123912391112392F003F3FFC3C3F3C3CFD3C3C111239391112393D2F180710052B10043C3130005D015D373E013511272E012735210111342726273521150E01151123011114171617152101177F481C2D3F3F015F031532217101E1754E23FC7631206FFE1F02CE250D59A203872135190226FC2602ADA933210A26260C5AA1FBCA0463FCE2A833210C25054B0000020055FFE503ED056800360037012F40261123790A7B0B8A0B8A0CE724E525074B08590A5525020B0A0725890A890D8725DB0AD4250736B80107400D357E40593169310231A12C2E1BB80107401F1A7E40561666160216A1261328250D0A04041F2E371303042E2E0940341B35B80169400F001B360D100A2522281B0737191B1AB80169B51C1B1E1B5807B80133400F371B10302BEF2BFF2B032B39365822B8017CB700103010021039382FCCD45D7DEDE41810D45D1112394D7DED18F4181AEDF4ED2F111239123939113910EDF4ED1A003FED3F3CED111739101A3DEC5D1A18F4ED101A3DEC5D1A18F4ED7172313043794034202D0512240E2255000929075501052D0755012012225500230F25550024250E0D082A0A55012928090A062C04550021111F5501002B2B103C103C2B103C103C2B012B2B2B2B8181005D13161716333236353427262F01262726353436333216333236373313232E01232206151417161F01161716151406232226232206072303018434467AB5628F482F97AF4F2F57CEAA46C50E261D082A2D3132DD6C547D303065B4A94544F3BD5FCF0F2419042D3D01E5019C8A528F7C6F644A2F5E6D323361759BCE452421FE4CC59C63584F38393E6F68575878A1D8482C1901B403CC0000000001001C000004B8054B00170095403E06C8031B + 02AF01AF02029F019F02025F015F02021F011F0202114A1B0D2D2208211B0C2D2313C8161B021713110006010808110D06132E0100020D0C0819B8020AB2024B01B80108400E070829121F115F119F11AF110411B80108B2004B17B9020900182FF4F4F45D3CFD3CF4F4E6003F3C3F3C4DFD3C1139390111123911123900DC3C01EDEC2B2B015D5D5D5D10EDEC3130132113232E012B01111416171521353E01351123220607232804850B31246FB2724A7DFDAB824072AA7B1F32054BFEA4A463FBE877390925250A4285040062A50000010009FFE80774054B003801B9409730090110001001141920002001280A37003701380A383259356719691B7719781B950095019F0F9F10A500A501A60DAF0FAD10A625A626B400B401BB0FBB10B725B726C625C626220000000100110012040719071A020730013030312D0A2B2C2D2D2A0A0A092F3030312E2E0B3334353532011B007608121B11BD19261B25A72A0F1B10280B231B24761B371B382835402C251A2C0032B8FF77B309323120B8FF7740541A2E2D2030311E312C1209090A2A2D2D2C121A1A1B0B2E2E29121A1A193532322912090908353231080438302E2D190B0A06091B2A251A35302A1B1A190B0A09080A323825241110000232312E2D093A17171A25B80146B420001A011ABB01480080000901C2400A2000388038023819393AB801E2B321705C182B2B4EF45D1A194DFD1A18FD5D1A19FD184E456544E6003F3C3C3C3F3C3C3C3C3C1217390111123939121739111739874D2E2B0E7D10C505872E182B0E7D10C505872E182B0E7D10C505872E182B2B7D10C52B2B00111239011112391A1810F500ED0110F500ED0110F500ED0110F500ED0110F500ED0110F500ED07100E3C3C0710083C0E3C083C07100E3C3C87083C3130015D715D5D005D0115060706151416170113272627262735211506070615141617090136373635342726273521150607060703070323270301230B010226273501FF3D1A2E0B0B0128DA611B36204102244D1D2E081001280100160805361E3C0196371D341ADA557B1F53F4FEC51F93B06D555A054B260209112D14261EFCFE0242F744170E012626010A1135121B2AFD0002B73B2E1A1039160D02262608111D47FD9FEBFE8CED0276FC9D01AA01DF0128870526000000000100B4FEBD0263054B000F0045402407BE24017D2208DC240E7D2307080E0100100E121117171A0708A50F0F00191011D9216CB9011700182B2B4EF43C4D10FD3C4E456544E6003F3F3C1239394D2B2B31301321152322070615111417163B011521B401AFB63C150C0D1641AFFE51054B31261423FA9F2E16273400010044FEBD01F4054B000E0043402207BE24017D2208DC240D7D230708010D1001121017171A0E0E00A50807190F10D921B80198B16F182B2B4EF4 + 3C4DFD3C4E10456544E6003F3F1239394D2B2B313001213533323736351134262B01352101F4FE50B73B160B273CB001B0FEBD3225142305623139340003004BFFF1038903B4000B00400041010C4066EA26FB260207274606020C239A0A9A39A90AA90BA80DBC09CA09CB2FCB30DC09DC30DA31EC09ED300F57082C312A171C1F141F00330F0F010F49322E3639312C0F0A00061408143325072E3E360B083E3D0B4107413927100B2F412A403179292F2AAF2A022AB80200400A4318271B442242044440B80201B143422FCCF4EDF4FDE410F65D3CE6111239FD3CE42F003F3FED3FED3FED11121739111239762F5D18EDCC111239390111123931304379403B3E3F23280C17010702250D2606261226010E042600073E041E001524171E0016171326101E012728030C00260101000E0F053F081E001127141E01002B2B103C103C2B01103C2B103C2B2B2B2B2B2B2B81818181005D01715D010607061514171633323635243736253534272623220706151416151407062322263534363332171615111417163332363715060706232226270607062322263501024B734B903C27304279FE00915C011314226B332E2E0A25151D2D30ADA7C24525080D29171E252025383A443D034C365B52567E017D022A262E59715B2B1C4A396B613C67556628431A1B2F0C390838160D3B2446997E4584FE6F3A16270E1B34271926583D422036795D02ED0000000002002FFFED034B03AF0022002300A940498B17A408C411D611D618E211E61E07350B450B560B6A096A0A691569167A09790A7A157A160B28081718070A10171802171813070A0D050D3323220793130113411C0B230242231F18B80202B32510441FB80201B125242FCCF4ED10F61239E42F003FED5D3F3CFDCC1139391139390111123912393910C931304379401B1D210A120001121D1026000E211026000A111E1326000F200D2601002B2B01102B2B818181015D005D00161514062322262F012627262322061514163332373637170607062322263534003323027AB52E3023350C0C0D202136729DAD9368512E3A1C393F799F9CF00106C82C03AF814D2139302E30351615C7A597F044275511784686F6D3CF012A00000000020031FFED03ED0576002D003A00DB406D9828A928CB28C92CE32CF42C06006D2E7C2E8B2E9B2EAB2BAC2EBA2BBB2ECD2BCC2EC638DC2BDB2ED5380E032B4C290223080BDA04500A1C0B90111E2017501D1C1E92213231302F0417042227322F23170305343A04122D110134332D073A3E2727210B22042F122740170117B80200B63C37449E2A012AB80201B13C3B2FCCF45DED10F65DF4FD3C003F3C10ED3FED3F12393911121739123901111217390010F5EDFC01F50010F5EDFC01F53130437940183539282C352C3726003928372600362B342601 + 38293A2600002B2B012B2B818100715D01715D001716171134262322060735373E0137363717070E01150314163332363715060F0127350607062322023534123312363511342623220615141633022E3D28251B330C121F522D5A221025060201020220450B160B068B9D0738294960AAD3FDB773608B427E8C959403B1201525013E3D2E020321150C1A0C050E026939793BFCCF413401022102303B097B3D1A2D0107ADD90137FCA85C2901AD826BDFA3A1FC00030028FFE8035E03AA0013001C001D00D9405D69086A0C6F126C157B0779087A0C7D117F127D147D15FC0EF60F0D550866086011C404C712D404E609E20F083D08090A171803090A02090A03061739100301034703061C1C631D13079206A2060206410D0B1D18FE02421D10CF0A010AB80202B31F03DB10B80201B11F1E2FCCF4ED10F65D1239F4ED2F003FED5D3F3CED111239762F5D18FD111239390111123911123910C931304379402A0E1B000515251A261412171E0016171B00181E011918050E03260016111C1E0119011C1E01040F062600002B2B2B012B103C2B103C2B2B2B8181005D015D001615211E0133323637170E0123220235341233060706072126272623370262D4FD850ABE8269903D2329E1A3BCCDEEBFAC3C200E01A60B1B31732D03AAC3B3E8D46E650C7FD8011CB9C90124496536526431584900040036FE4203C203AF001300480056005700D04061494248438B428943AA1B050528053709431A4339436A036C38A614A618094113102E482C2B1A041626221B02264C10413209482C2B0329560951323229025633481F294F29BF290329474F33571A201907023E390E575726164C519026A0260226B80200400C5905333620592E3D45271613B801D2400E3CB95344101630169016A0160416B801FFB159582FCCFD5DEDF4ED10F4ED10CCD4FD10F65DED1112392F003FED3FCC3C3CFD76DC5D76FD1112392FFD1112173911123939011112173911121739113912393130015D005D121633323635342726272E01272E01272207061512263534363332163332363B011523161716151406232227220615141716332017161514042322263534363F0226272635343637363736353426232207061514163303C9BD7AA6D05434912552221662180C2F302765BAAA49B0511555130CAD120A11BDA019411D5F462E3801015C97FE9FB4A4C0334B420C2E17284571F5253C6171622513765E08FEF340735443160D02010302010E053F403602279A6075D24503512A1F3A3472BF09621F200F0A1D2F9B9EBC85492445443B0C12111F28255964141E30775FEE5D31487AC2024B00010012000003E50574003000B64016451601F9170109171A17021A08102F1F3002233F1C1FB801FB403B22033F001C3020241A3F1C1E20232B3F1C2F20230BDA04500A + 1C0B9029232B2B29231A11030627300410150F00273E1507302F1F1E0A24232F191AB80200B63210272B2F0403B801FFB132312FCCF43CFDE410F63CFD3C003F3C3C3C3FED3F123939111217390111123900F5EDFC01F52B2B2B2B015D00313043794010252616182616241E0117182517271E012B01103C2B818100715D0171373E013511342623220607353E013F0117113637363332171615111416171521353E0135113426232206151114161715211252331D380B150D2C811960023F315866A23B20314CFE4F5732415A4E923455FE471C0B3B6E03C038350302240D25081E07FD9A48223C884875FE686A400A1C1C0C3A6E019561787011FE1370380C1C000000000200280000020E0574000B0025005D4026230C0F3F0C1C25202423202018201050171C18921C201F100F041C25089502001C0725240A27B80200400A200B9505271F20DD100FB901FF00262FF43CFD3CF4ED10E6003F3C3F3F4DED1112173910F5EDFC01F510F52B103C3130123633321615140623222635033E013511342726232206073537363736331615111416171521A83C2C2B3D3D2B2C3C806B38090F300B15322BAF451C08023761FE1A05363E3D2C2B3D3D2BFB110A357501DD411929040E1F0E391D0C0708FD32723A081C000000000100250000020E057C0017004A402015000343001C1720241620120CDA043A0B1C0C901211040304170E0117160A19B80200B411122F0304B901FF00182FF43CFD3CE6003F3C3F1217394DF5EDFC01F510F52B103C3130373E013511342726232206073536373216151114161715212A5D420B143D0E211987BE07033C5EFE1C1C09395303D142192A060621243C0C14FB515733071C00000100210000063403A8004E00FA401C36193420021120A70E024F294F3C02103B104D1F4E033F372D431C29BE01FB002200400101001C003C01FB404C22043A001C4E2024243A1C282023373F1C3B2023493A1C4D20230C2005500B1C0C920F43491B37404948434037362D241B1405040C454E130F32453E17323E1F1F170F074E4D3C3B29280A50B80200400B23242F2E8F2DD02D02482DB80147400D464036372F418F40D040024840B80147B746041327492F0504B901FF004F2FF43CFDE41076F4765D183CFD3C1076F4765D183CFD3CE6003F3C3C3C3C3C3F3C3C4D10ED10ED111239111217390111123912390010F5EDFC01F52B2B2B2B2B2B112E015D5D3130005D015D37363736351134262322060735373E013332161D013E0133321716173637363332171615111416171521353E0135113427262322070607111416171521353E01351134272623220607111416171521214E1A28272D15150E4827B205050263904C673D20154A375F63A1361F3F52FE3D573715256C41402536395CFE355F3414216B3D762D3559FE + 391A07131D5702054A2E040523180D440A0E875A454626414B243E834AA0FE614733081A1C08365301AF612E522B1937FE005154031A1A0C448501189A3A624336FDDD4C3A011A0000020021000003E303AE0033003400B74059191A4D1A02960EA60E021A081F2110321F332F213F2105253F1C2120220343001C3320241C3A1C2020232E3A1C3220230C20043A0B1C0C900F2E2D251C1304030733120F293E17270F07333221200A34073426252F34041B1CB80200B73612272E2F030304B801FFB136352FCCF43C10FDE410F63C1239FD3C2F003F3F3C3C3C3FF4ED113911173910F5EDFC01F52B2B2B2B055D043130437940102728181A2818261E01191A2719291E012B01103C2B8181005D71373E0135113427262322060735363F0132161D013637363332171615111416171521353E01351134262322070607111416171521012547390C133B09130E29995E07035C344E5444386C3A44FE55493A40563B3D22364045FE4B01DC1C09355C01FB401A260202230C321F0A0993562031274CC3FE2D4840011C1C0A3D6601AB5671281735FDD04831021C03AE00030034FFE103C203AA000B001800190092402CC609E5090296109916A010AB16F50A05160014041717550A5410053A0818331902071233080B191544190B05B80202B61B0F440F0B010BB80201B11B1A2FCCF45DED10F61239ED2F003FED3F3CED31304379402C00170D250C010F2600170315260111090F260013071526010E001826011604182601100A12260014061226002B2B2B2B012B2B2B2B2B8100715D015D1A0133320015140223220035000706151412333236353402233734FDC7C60104FCC8C0FEF601593A64A18F70799A922502970113FEFCD8C7FEDA011AD5019E345BDFB2FECCCEA7AD01323C0000020009FE4203C203B1000C003300C440593609362196199925AA25A527E427F527080A2505274A2503A62401452401220810430D1C33DA242E431C32DE2318201150171C18921B0C0B0A03052E102E29332D1F110C0A05021E1B083E23071B070263290B33320E054426B80202400A351E272E2F11C0100110B801FFB135342FCCF45D3CFDE410F6ED003F3C3FED3F3FED11391117391112393901111217390010F5EDFC01F52B2B3130437940182428030703280526010724052601042702260006250826012B2B012B2B818101715D00715D24163332363534262322061511013E0135113426232206073537363732161D013637363332161514022322272627111416171521016167466C999F694A7AFEC25E3325330B13125F05C4050542325A5F8AC7EFB538294036426FFE117443D7C0B8B65B2CFE09FDAB06444903C04C2B0203211F0144090687422038EBCCC8FEBA0E1538FEB9652E082300000000010009000002B103AF00290088404CC41E0137 + 22011F29010343001C29202424431C2820230B20043F0A1C0B9210221F1E032B24242204030429141D1320801D01201D301D021D951D1027170729280A801A011A2B1327242F0403B801FFB4AF2B012B2A2FCC5DF43CFDE410C45D003F3C3F4DE4CCED715D1239113912173901111217390010F5EDFC01F52B2B015D3130005D015D373E013511342623220607353E0137363732161D013E0133321615140623222623220615111416371521095C3C25310A21123978173235070340774033403125264D162366505DFE132108315001C36355050421142A0913180A10A459643D2E293846713CFE3D5643022100000000020068FFED02C903B10031003201034021130013011602290D390D680C690D790B790C880C0A2908301C31D140011C210000B80191B331D1402DB80121400F222A181C19D1401B1C211A1F1A011AB80191B319D14015B80121402B21120D000A082226230D0A04051F3332120705332A0B320F1A01EF1AFF1A021A4608413200302701273422B801F340100027700FA00FC00F030F4600340134332FCC5D76D4185DE4ED10D45D1239ED76C45D71182F003FED3F3CED11173901111239123900103D1AEC181AF4E55D01103D1AED181AF4ED00103D1AEC1A18F4E501101A3DED1A18F4ED31304379401C28292021101106070629081E012011221E000728051E0021101F1E01002B2B012B2B81818181005D13331617163332363534262F012E013534363332163332363733132326272623220615141F01161514062322262322060723016A21172746874B57323F707B74A079357F0812100618071F14223E7546508A84D5B18F3C980E0C12051A0125013B723D7053422A4E254042865B7090280A0BFEE9613664563A5C4847749A769628110C03B900010019FFED023B04A100220057402A0911011B22021402391E2206400B210A47073E0F0B400A210B24401E210022022F141B1840112C1424232FCCDC1AC81ADC3DC41810FDC4CC1AC81A10D61AC81A003FFD76D41A18C81A3FCCFD3C111239313001005D011523031417163332363717070E01232227263511232E01353436373E013732161D010209CC020D18462435221A16347436762A176D05050918453D710D05039A48FDC04C27452225161E463A693965025E0306050A0B14394798040DF60000020012FFED03D503AA002B002C00A8404E4B074B1F5A075A1F6D076D1F79079B079B1F091F0D1F0E021D080A3A1C0E2023263A1C2B202314201050131C1490191C19261D100A09052B0E0006190B053E210B2C071C270A2F0F2C2C25100F10B80200B52E00012F2526B801FFB12E2D2FCCF43CFD3C10F63C1112392F10FDE4003F3FED3F3F3C3C1739113910F5EDFC01F52B2B3130437940122224020403260422011E0023240223051E002B01103C2B2B8181 + 015D005D0111141716333237363711342627352111141637150E0107060722263D01060706232227263511342726273525013D132563444125263C5A0143314F37343D1A5805024438555F574D4E22164801EF039EFD8044294C2D192C02244D300521FD404433031C0F0F1409220906A151273C3E3D900207501B11071C0C000001002AFFEC058E03A1003A01084086260726303915391B39213A22060907080E080F081409301822292277148714092702270327043702370337040632351A303039122D301B1C1B1C351A1415070607080839121414150706065312321B35351A302D2D5312222221222D3035321B06070814211C150D1811252838000E05111C3A2710061F180B3C140802151030100100100110B801FD400D47150635321B04391A301A011AB801FD400D4720390139261C222D02212621B801FDB547202601263B2FC67176FC1811121739DD10DC5D76FD711811121739DD76FC5D711811121739D6003F3C3F3C3CFD173C111217390705102B103C0710C4C42B10C407102B1008C40708103C07082B1008C4313001715D005D010E01151416171B013E01353426273533150E0107010E0123262703010E01232627012E01273521150E0115141716171B01373426272E0127352103B83C3A0D0BB6B20C1C2E2CFE19201DFEC00406060C02E2FEF90207050C02FED531202F01722E3129182572B4022B1414332E01A10382071A27152D1EFE2501B21C5B17251A061D1D052647FCEB09080604022FFDD30507060402E1792B071F1F0419291D71415DFEE401820C146D2B2D23041F00000000010023000003D50397003B011040B9E7070104000401001500160129022F02301D36582158225823761687048705B61CB61DC506E627124607480F481047170436353723350A08060A350617080A0A35161515290617161706172915282937232915282329153637350A37231539120A293912350A0A359606A506B606D60604172F1223062F12233723373735292317150A0608323A010F12033A1C10113B0300061D2F32031A1C1C3031031B0A37060A15043B1111493B352923173B11061B31401B011B3D313C2FC6DCC65D111217392F762F1811121739003F173CFC173C3F173CFC173C111217392E2E07052B102B5D2E2E072B102B0708103C08103C070810C40807103C080710C40710C40708103C0708103C313001715D005D01150E011514171617363736353426273521150E010F01011E0117152135373E0135342726272E0127070E01151416171521353E013713032E01273501DA2635351C2B3B1D312A26014233581BAB010833472EFE631D171F261224114317A11D0E1F34FED836342BE9C03A2C4A03971C01131E13582E43512E4A161A12031C1C042F27F7FE704E2E021C1C02021812134120371B6022FB2D1E0A + 130C071C1C0B223E015301235720071C0001FFDE0461025E04CE0003002AB7003D030517171A01B8010DB300190405B8010DB3214657182B2B4EF44DFD4E456544E6002F4DED313003211521220280FD8004CE6D00020031FFEC040005760038004500D240899833A933E337F437046D397C398B399B39AC39BA36BB39CD36CC39C643DB390B03364C3402404433374037422600443342260041363F2601433445260023080DDA071B07471E0404380D0D1C0E901626201F50251C26922B2E323D3A3B1F0305453F16013F333807453E2B320B060604422E3B0703042F19271B1F1A1D47424435194647B021718D182B2B4EF44DED4E10D6F63C4DF4FD173C1112392F003F3CED3FED3F11121739123910F5EDFC01F50010F5ED1112392F3C76DD3C0110F531304379002B2B012B2B818100715D015D001716173521352134262322060735373E01373E013332161707060733152311141633323637150E01330706263D010607062322023534123312363511342623220615141633022E3D2825FEC801381B330C121F522D5A22102401020202020102A2A420450B160B068C019D020538294960AAD3FDB773608B427E8C959403B1201525D059522E020321150C1A0C050E010169395259FCC6413401022102303B0107037B3D1A2D0107ADD90137FCA85C2901AD826BDFA3A1FC00FFFF0031FF190400057600270026000000000007002500FAFAB800000001000000000000BE665AE95F0F3CF50111080000000000A33D5B0000000000D03CCEACFE60FC930D9A0A2C000000090001000000000000000100000600FE0000000DC5FE60FE600D9A00010000000000000000000000000000002805C700210200000002AA005E02AA0036023900A505C7002104E300170473001705C7003105C7002102AA0021031D0015071D001705C700170473005504E3001C078D000902AA00B402AA0044038D004B038D002F04000031038D0028040000360400001202390028023900250639002104000021040000340400000902AA0009031D0068023900190400001205C7002A0400002302AAFFDE0400003104000031000000360036007E00CC010E0198024002CE037C040A045C04C4056205E806D40746088208C008FC09E40A720B380BD80CBC0D600DCA0E160F020FAC102410D4115612221284131E140214E6150815D615E400000001000000280071000600960009000200100010003B000007E806C300040001B800312BB800272B400F09CF54010F54013FD029019F540140410D01FB0001003001FB0001002001FB0001001001FB0001000001FB400B01002001900701900601F0414F0204000100EF0203000100C00201000100B001FF00B0020100BF0208000300AF020100AF02080002009F0202009F02080002007F0200007F0202007F0208008F + 0200008F020200800205008F02080007006F0200006F0202006F0205006F02080004005F020200500203005F02080003004F0202004F0204004F0208000300300202003F0204003002080003002F0201002F0204002F02080003001F0208B2010840BA01E5014D0152B50F1FC2710E1FBC014B014D0062001F0131B2864F1FBE01A60020000D018F0020000D0182400E200DDE200DDA200D8F200D7F200DBE018B0050000D016C0050000D0101400E500DD8500D43500D3F500D3A500DBB013B0028000D01034014280DBD280DB8280DA7280D7C280D76280D2D280DBE01B1004A000D01A7004A000D019440204A0DF74A0DC84A0D984A0D854A0D7A4A0D664A0D214A0D621C0D241C0D1B1C0DB8017EB60F920F900F0009B8017EB4900D92900DB801F5B3312F1F41B801F3B5331F2B2C361FB80189B2542C1FB80183B254AB1F4115018100290401001F018000290201001F017C00440201001F017901300201001F017801300401001F0177B22F291FB80173B23E9E1FB80171B23EE41FBC016B002E0401001F016AB233E41FB80138B2545E1F4109013300290401001F013200440801001F012DB23E931FB8012AB22CCD1F41110127002E0125001F012400330801001F012300330401001F012200330401001F0106B254261FB80105B4542C1FFF29B80101B21FFE88B80201B61FFB2F521FF62EB80401B21FF52EB80801B21FE129B802ABB21FDD2FB802AB40171FDB2F5E1FD93E4A1FC454261FC354E41FBF2F6C1FBA2CB80401B21FA944BC0401001F00A80130019A400B1FA52F931FA42F891FA23EB80401B21FA033B80801B21F9654B80801B21F9529B80401B61F8954261F732EB80156B21F7233B802AB400B1F6B2F6C1F6A2C4B1F632EB8019A400F1F2E2C371F532FBB1F512F721F4F2CB80401B21F4944B80401B21F482FBA0401001F01F3400D411D1F412F1D1F3D3ECD1F3B44B80201B21F392EB8019AB21F343EB80401B21F322EB80201B61F313E4C1F2B2EB80404B61F2A54311F2233B80201402D1F5567075F075507370735073007260725071E071D071408120810080E080C080A080808060804080208000814B8FFE0402B00000100140610000001000604000001000410000001001002000001000200000001000002010802004A00B801FF85B0018D16763F183F123E113946443E113946443E113946443E113946443E11394660443E11394660442B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B1DB0964B5358B0AA1D59B0324B5358B0FF1D594BB03553205C58B901E701E54544B901E601E545445958B9012101E7455258B901E70121445959184BB04C5058B801E64569B801E7456961B0405258B901E601E645B040614459594BB05653205C58B9002901E64544B9005401E645445958B902360029455258B9 + 002902364459594BB08953205C58B9002F01E74544B9004401E745445958B902E4002F455258B9002F02E44459594BB0CD53205C58B188294544B1292945445958B9052E0088455258B90088052E4459594BB8020153205C58B90130002F4544B12F2F45445958B90AB00130455258B901300AB04459594BB01D53205C58B133334544B13E3345445958B13233455258B133324459594BB02F53205C58B133334544B12C3345445958B15233455258B133524459594BB05B53205C58B133334544B12E3345445958B1A033455258B133A04459592B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B65422B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB35B9B819C456523456023456560234560B08B766818B080622020B1819B4565234520B003266062636820B003266165B09B236544B081234420B15B9C4565234520B003266062636820B003266165B09C236544B05B2344B1009C455458B19C406544B25B405B4523614459B3868D7145456523456023456560234560B089766818B080622020B1718D4565234520B003266062636820B003266165B08D236544B071234420B186454565234520B003266062636820B003266165B045236544B0862344B10045455458B145406544B286408645236144592B2B2B2B4569534273737373737373737373737373737373737373737475755E73735E00 + 00>] def + /CharStrings 40 dict dup begin + /.notdef 0 def +/space 1 def +/parenleft 2 def +/parenright 3 def +/colon 4 def +/D 5 def +/E 6 def +/F 7 def +/G 8 def +/H 9 def +/I 10 def +/J 11 def +/M 12 def +/N 13 def +/S 14 def +/T 15 def +/W 16 def +/bracketleft 17 def +/bracketright 18 def +/a 19 def +/c 20 def +/d 21 def +/e 22 def +/g 23 def +/h 24 def +/i 25 def +/l 26 def +/m 27 def +/n 28 def +/o 29 def +/p 30 def +/r 31 def +/s 32 def +/t 33 def +/u 34 def +/w 35 def +/x 36 def +/macron 37 def +/dcroat 38 def +/dong 39 def + end readonly def + currentdict dup/FontName get exch definefont pop end + %APLsfntEnd + 42/FontType resourcestatus{pop pop true}{false}ifelse + {currentfile 0(%APLT1End\n)/SubFileDecode filter flushfile}if + /FontType 1 def + /FontMatrix [ 0.00048828125 0 0 0.00048828125 0 0 ] def + /FontBBox{-416 -877 3482 2604}def + /UniqueID 4416489 def + currentdict currentfile eexec + 54544758EC884CF30C3CD503CEDBFF3839C47C3C3333173232E3FDBFF439491DB843E1924E63AA7726BBB0485AB56D93D8C0906F647A47162891E73FFC2A9873C4B1EAC5EEBDFFC4D06084FBD84139DF4583C6E259D10699944D1068C9C45667DCCCFB9B7EA01B606435EDCBD273ABAC093D14085CCBAC149BD7382E842CFE0D7FE4FD2EF589A2471F6074A80A8B675C2F7A50D63AC1EF90D787BADD11633CB01CF6EE3B37AAF9078A69AC4740E9B6525D78BBD839551A1CB80DB8682FA5E87591BBD6EE8B946063A2A58D9CA3685AB305495DC5FB5747EB8A9A059C4976C0FE4EEAB1D56FF47F1E9664ED9F4A7DAB763AF92B2F6CF2FA7DEC24710E0B9096E30F772BA7FEA9BDBE496C42ED2CEB58F54E80BDF57CE7B4DB6CCFE7182F43BF93CCA0767AF95D62C5D2C3DC6AE1E6D139F51A2C63432117F1714C5566572EE9967A715420ABDCD1D7BD74F8450B89965FCC81C6ACA565C5F3CCF91D430D1F953E4F1A645300A98DD8C47CD64555F08F422340A85404EAE0D3229C4F9336B9470CACBD6BBF3395104750A915CC6EAAC197668267B8C62D2764C8CD69FD937CA3C924D997A0EDE7964BEB9EA2F92EF70C5E5DA0AA5567765E71F2B911B3C55AC8266BDD340E521355EEF85826934CAF24FF8985D12C0AFA59F1D8B277D1FC249188DA98CAE72468909D2E803C1E1900E1EF02D5E10A01AC8CC687FE2CE17EC270360ABACABBD98210089123ADD92E1D9FB6BDF4BBBE74B907201962534C663604DABA9D75DF29121B652C4F639A2269EC2DC740A9397B2234B521F6370F13A4CFB15D5CBBC048D6AB9BDBFBEE35F74A2AA037E3C6E8721DA22FF021DEFB402CC0AC0F359266EF28C5A47D3CDBC304680333A5D6D7985D2F292A373F9400CF09CD9F7CEB2FA9BBA95F66C836FD59F529E8AD8676D800BB99EB10ACA68BC3E7EEE5346DD9B1722F26A96D60B31D37F4A84D668A2DE121B336A0DC52615785CDBBDCC47EA887B211AA257E8D0E7F3A4AAC86ABA1ADAB8826AB89FBFBE6B4C2542095120295FCAAE4686C73F42C58E2DEF8FE7DBBFB309D5AE398A0F04002644B8CFED7CD391D80E0CEBEF8FD09F54543FE42A2CE2CEACB635A13BBACBC2D5603B7A81100427FCC7BE0194E1A422B969653D222AEB04DC55916E062C6DDA2C443FEEFF9F53FA741144B8025CC9967833C5B12EC25C935CC882D932AB72A3347759EF0E9B6F0471141E76BEDABFF5199F66C45165281075F45497958692CA5A4953A41FBD728F366000465765885FF73F3E861E8DBA1B2F19B5D03A481F3A506C1EE7598A9C151335CA6351EA3D1F8C20E0A6F785DEE9012B0BE49C988629D8D06235F67DD759416762900A951A4970433EFC26AD9CA3909A0ED195BB795764A0DDC461D436B5ED256728DE98E1E4F77584214A4CAAEE21EE1FCFF18A6B191EC36FE79C2 + 71F4B7A2C45C3EB21B39EA3B203AA0A7998A9210EBBC360FCC83EA0E0C77B694A99EB9328B509D12DC1DD9D81E405265FA4D831AB67CF72DF741AD7BA7EE92AB2A59A9DD286FA19CAACDFABE9C151090ECC04300B5FD4FF91063EF27CF3CD0B5ADEBA3287A80ED32A055B2CD61171F25E75BAC86D349E71027167A8414A7EB6B2C616D53A9425FD9609C27A85B19CEEF831DFCB93EBBA1480FD8F61C678136255E8B22FD2D174D14E44F5089B9723434D1234C7668B9D7799CF65938726B2E7255B1D1086EDAF03EBEF30A8E1495CCC05C416941BC98AF41BE2E0CE2DCD2A69CA0CC7318BE5F502C0B209F97567802C3A7865621EDF434A0D59C9DA5837DED751F88E68E3E093A55F89FDD53CAA17B52EBE76264F25CC708D994F5D40EEA6AF9D59489D1D4FFD40346EF2B466498749990A19F6CAE773EBF135ABB55A5E7C6D109BFFA9CAD1F004B3AA001368515B189C7F4AA663992ADBE6DB90BBE3CB3FF8936BEB7C237F6D114E7C934F7E98EC10038B444A08909414E50EE0158B8255386561758CF1B04EF677D3A3669FBFEF55A35163671C706F5B5E30914767909B78849CCCA4D007E9DC6EA1C159638D9EFF6C4E399A98900BE4A58E6625E89E9E55FD6FD3BD8E8B8B0D3EE0E65E447E201A828A21B8C91015010D24A3A654A2B2801733562F44B4572A07A479FB6F82AC7DFC15B7821C72CD2DA432513A300B2CACB3BC9FA8E7FF9A86922340CAF04E207CCB593CD9B0B08FE50918DC1AAB4319F0F2B0DBD3D4D90B01BDBFB28DCA2EFAC411C7239C43C209DB2E80A5A71FB86C6D3948213C84E2C7B63D834395A7AA85D4706456FB0A76ACABDC7C345D3046AA989FB0742B768CA09520120812DB9CD7A71354427575CD2B4320939306DA129C87F0E7DD0FF59EA6F863B9B96715D2886142E6D1D8CADE91237EC8E51419C4E0698D1455B31C0991D72E804A35D4144D7DC1EE019A35B04885371B392DA2D7E439C31775BABD34E009B2A382C402546DB20E6D7FE0224C6DEFC1C27DD00B54D18990DBD04B25EB18420DE2472F2C3A2F0004283463AF5FAA722394D163AB4908DFA6701A0D9C2DF167CE806E27973F9C7BD53891975FDA4759DE1802660E5197B3D7CAB3D7F3B78A1187B33208F5BC5817722C689D19EFFB5FB41B751B976D8C0B61986147DFA7DD9AB019BAB3F256292375259314EA3194E6FE8BCAF9BA6AFACA3433E518AEDE68F719BA2551E24AF5CCF99353D4E85D22B9C4020C7A482EE4F458A5FE83080D6DE5566F121FEAF8EF1FE61A72D8E6504A9806C180C4F6CAF396265EE58DDD8C2EC25293490400F7424BABE84D31A93D6C198EBB0EF05BCC11C17DB52789035861903B6C64C595C7CD6CDEE76E36F859482DEA51E016677448BE6A1D3533256ADB4131B1B81EA157FB09DB41B6A3683952E1D7BB1136D8158583A + 3786357AFF3D563CF1D2C5C253B40CA788753C62E7B83A1B53E7B4CE7616BDA49E38E750EDA2BCCDEE277F7EA1167E7A0A4411993B24416226C1C84EBD510FA0A5A8E1C42DF81629A48DE7224C2EBA6001C3796EE47D4753A8E472B99D82435CEE1F9DBC923D7006CEA12075753A40CB4B977D2E173BDD6201C1D63DE50020A62C879565C4065749B983F14535BA768934C783808D628C106D5365530A058692ED0DA27BBE6B46589309AD8355696E719BE88909CCC54F17A041AD726C6E874A1A285D69530353B81F38B8B8A9AC7950C42276F1849430497F573CBEADA8A1D224878ED8628215098D37FF28958192D53DDCC694B4207CD471AFF85692BAE59E2B8EBB80FADC3C5F8E707910AB6C9A72B1785EFDD5486B01953B9AABD0B9C0ED27260BFE01CBCE0861B62ED57E854DE80D7C511B1F01EB508F02500954B4B045012BC8F081EA04D594F0FDA7D97AD86E0702BC4AE1A9A7D322FDC6E6E5A237F01150FB9C23B912820C93B555797B9301B3FC377F7BC47FF0098CC8DC521A3CBB22656100E349D9D91E818D8891A726067F6F8FD89A246E58ADDB87B59FE7F4559794F386535FC7D18128EA05B0D7166A3A964A13E22747477AF9CB2157854DAC9F1E8C9B29EC5B9DFBE25B131310701F1C3E55BF7BAA3ABB37837F53943C3FC59601A73AD0BE343F63D8AC61360FBA8223DCC37D1B28FA9948B4FCFBF8EE4471DE428C0ECEFC4747474D5B85961203CB3772CC42A3D28B8B01CF8C12EC14A5DA8EFE1E03074870F6BF679DDA4DD7A82E1E55BD7361FB203C9621E51C26AA9DF3F9760549EA74859279044A81F7C540A999321B6121CD1C5DC44473CDD7B23E3299E9E695F9FF16E38DF326673C332F7D4840A65ED7F10C215A198BA969440E2BC7EC0101249E38BB5BA881C3623A3F7B2CAAE9F155D3AF074A8A862BAFAEC6324D758C5B710EBA162E274E03BFE02737ED26B94FE6B557ADF4BA9A06F219D4B3E55CE7E4E549DB9D49793F0A94981429548B4F0E62EE518F3AAB2B3BD862E3AD0C1D902350D77EB0762F35F6D1A6275CF60B1BEDAD55DA839EFA5676DB1905958D2BCCD9D1BCD5C930BB4373B4E01F54C0224ECD10C0781296CB7562C336515BCC5C23182D4FBBDCA4DFB253505FC80E7883D2729D1CEF16B9043BA504A516051B1C0D974CD604358D6DB5647199BC38B15EB7A31414505AC7C90DA4C7B4236B2D3ADAAC1F28D46D5B05931182317A748E88332D7F77DE09A97179EA64AC8FB6B1C38330D3642C3216F550C2017D0F0F973B749A32C12CD22F1F259EFB428DC807DB59FD1F8A1302725617248DED58C1649C6D113BB8DB4B4264259CC1A32DD641BAB19DD53819D4C9D69EC721BC48DBB92BE0825693002034D1AFA21E93E6BAB1CAEF2F14A4BB2E8FACA8A4486FB8957CB1A50D1A363DC4A5ABF02E1C29B480 + FBC32EB861C3A3B27B38502C05CF4084C0218DD04741C6AD8D155C49E9A3EBAD3F468C6091599E5DCA64E49F5156EFF7B3F86C43B63851B1BF56A02172FDB2A7CCFEDF00DF8C38855A75AEDDD762BA2615649BB1C291EE40A23F356D061B7E639F2DDF82B89E45243742D0F5ADC86605B16E14D12B032C4D5EBF9497F64A90714EA0A2D90B423FC08C139A5AB838AED747BB6B363EB8C758B204C9F7E30C55736C6729C58876C09C07481CBCAB74BF9DD4415939F9D724415CC793C4DBA405C76922DFC590DBC7F84565BD903B74FBC5128497491C898ADC2D9289589B1C883EDD8842F17CFE4012EFA21C8A276376EE171FC99FB00B9F23DA6F87927C45D4084DBD53FC6AAF34A3257C28DDC029D6231ECC4A6CB1B80F730A675EE55E71DDAA8FE62D81CEFC105BADD6F7056C77437140E0DB6570A1AF644B314035EC80337A005B1778D83D60FAD068F93112BA82C885982D91862AE0093ABDD99B9F04C9E43155702C6EB535221B1E76EF350DD1DA4B1A7C70D2D2D3954EEACBBEAF4B418EF8B1004A79A29391EC0681BA078F89BDA0B1CE063FD682B7AD1BA10159E8759B737336870C639EB59BEB883EEA9246F6533170CA50A57226FA300FB1344393B9294F52D25B01DBADD7B4972A2E1045B39A3198A14A7B838C6DCEEB8D756F3D79D01867A8417D9FE3B209E4D612FE164D7E6B71D340A2D0FD0BBE1A442F0CD2E069D1201719D15646586E63928F0138C39D369BA126750044C560366535745F0C2E76B4372E17F53FCE1BE87A4834644ECD939C70FE32044D70B55EF3C6ABEAD1A453A047FC2BBD16DC3A3A508873798A06036299A3A9B0C63B589CA75750625F20D3CC336C9D452F4692DCA17C517E9CEED44628E82CC112C3BD7049EA1FC917E6252FCCF8C70DDB314ED875168E0D81017473B074B8911F57A65A95812B9CE8B353114FE70A0757ED6890D6538FF283B5B127E420C2817A0CB0E976EA908A2E92398E78331A8A9D5BC55B16C23B2DF58BA519390E2169A3AC74785D08F3580D9C80ED878DC199F2D759FF48FDA4EC0587C10779ACCA5DE81BCD9CD6CCC4916F8480181D17F78FE558AEF45F3439DD2048E85CFC5580729A5AC79C07512392F10B083A164A8AFD8AA35B83519296A3F9E0200C177D1989F7B17F74173268B6DB66BB450EFCEAC83515A7B0C3CB31396E13EBBB35E627EBC1168D9C39FC65F649D6945638F615575997E8C5FBF949E0AFC3462180FFB5BBE526F62787910CA2BC3FD31F4C9BF9A82DF2B33042D28E7FC3B30DD26D6237C1EBCE4530237B22ED80FBD622D8E18676AFCD81D8ECA14D03E6782759981962772F3AA56DD1F3849058D6308B2303AC7E002F1A38B4BC7DB6F6F28AD517286526145AAA238DDD50649F2A2D28A6DD1DB94A55B466417756C5240A8326775B1815A560244CCA8418CBED + 383055D7871C9A61EAB136DCF6F67C07EF862A5DF820C51717AA1E66BABAC56660603AA3E4AB9217104BD30EA125F8BE78516B151434E1713A16CF4692D7F2DC0C9D550A9032DB2322C659D96D1B371A76A9E07C88A2804CAD6BF5F719812D2BE0CC808EBCBF0F8FF227537486476FCD7B8B8EF2056A068E1CE1F14D997DD7D2B284859EC4045B17784FB5D3B9C19C41E2178B4C8E844B23457973A8C7C66E1D8CE0113C00ABE24F2FD3CB8E39B3B5C781CE318FC1A5D3E7FC873EC267A4C1E2DC174CD77E16519D53E6E3129F54B02E3C7756F418FF2DD408FF0A74BA6713F3B82739B8DF21586A0E35F68047C59E25AFB1F58A264D8846752639B1FCA87645A28D9D2F62AC70FF8DB0FA733F2FD32FDC3C34239631EC1AECBCE05B04ACC46CB761974E98AE36D0319A6A21179F350781137AF4023B6782E64FF613FB281F46CFBA076BA0FE583E77A4781715D215DC10866029C71B377F2EE4CD09E89757007391D19C36CA2902955C069658D084E9AF40F73F14094D72C2E395F8213AD2410AA4E44167E01D356976DAB3827E1C29D67DD6FD235898031C76B39A4132BBB019FD48978AA33EDF9AF73978BDB0C894647CBEE9DEB224A140FA2B33B6BA3A10B1BDA5FDD8FC73465327189183976AC1E8956C0ADF428E10FB25E9DEA374D0D4FF7B1F316130EB78BDFD0566B921765422E3F774523EA1BE9F62775D2FEA5DC84602C6EED375327C286982C8824270F08B18CF6371305DA786502CF95CE0112AA14FE9C0D2729B5E67CDFD51190264588E734E7DC8D7A1451E2044612CA79D8C536AC1178D40FA2FE1A91BB6F21FEB5305B84B578F3B813DED4DC2E905EB43F76D930858379D24E7D3134CF3407675EB33AE78822EE99E3D3CF45FA45E06B5D7C48EEAF3A919DCEAE54950326AACA409DA92B5AAAFA111E021B4DE835CDD787CFED6FE93E82C1A490355EF26DCA50A98253EA68218C9BD5CB06262F4D24E5DAF7153F5FCCF4D0DC73F555CD8ABBF1BCD6C6D347A0A53F816DFAFF5CBE7F398D520A9E463DD10A364D01084BD877DFD2B6DCA18EC9C594065812B6BB95D5C9D1E670ED743C07A504F9EE2A3AA714213DBB090E3E5E875A420B69FF6B812DC5424096AD61F8AFDF2CA2B9AF4A1AD45B4CAB279F97A95B0D34176FB36E7637587735DB886740DF71C6D804BF7F72DF125E6BA5431E95FC894A0ADE7F4F45AA0AAC339280BBFFADD51B906D592DE04D77E7687135476379F91EA693F69D8FE18D7FA27D04B8A8FC59C56088E0D6978ACD6A92D9581E8116384898161B1F2E9D13CB60FDAEC1B3B123B7D007B2BCA55E2098F906C63815150BA7AD2DF97024A6AA35847A67CCE5FE46D48B23B9A4354F99551FC446943863BF33564514D122E49C0214252B13DBCD7CF4D2774733DEA372A1878BDED6E4B7D26AFC55C349910EEF235 + 789CE8589E284E479E0CC2ACD4A7E286C8ECF8399A9E7B8D0A3E8E39C43BDEDC9E0169690A756B24403148C27A514C62B73B70C95113F709975FDFAF1DF6E34578C8F91C344CABF1BE5DC82D21B1E33BAC0C81652C12C01E1EAA5BCE375F845CE652091884E98D9B6C34D1D97310606449CD1E34DEF4AD73D69D78DA9F09D9A06DB0DB457273F9ACB7901ED26B9881CFA8B8EC4C487E414A25AA8DE54D2AEA4D04769B643B31278549B375EF7877A1FA46C3BEAF9504CE33764CDD9339695C967A67F69980F308D69FAB1E81030EEFA63AD06C9BADE9F6F2C084E2FE99300C33061BBE6E0E3580F5EE3FB3B6BF25D67178A04E31741D0EAC55400BAC0F54975BBC9EB1525E450769C76E1D2BD76E4EE161CC00926CC74F1BE61F9E3F6351954BBCBD7F1D4F6177E3E7134BD132FB1DBE132ADC9A9E1016D64C70E4D64FFD7AF70907BB3A1DDE300B02D25536A0EB08119DF66F03C90FCF8900744120EA0921C5688AE6F8DB5A0B23A14A20FDCECEDB84E3EE6F77207C18E20EA46AEA8EA09F52982B05392979829119036DD278CF2C5EDFD183196EEA3B70F40B92D6550476265061AB06A7B0361C26F84508338FE8C64EE7E34596C97346223C47EC250307444B41F7A02A0F5D16D7F7A828A7F0BDFD3109EDF5B5B2C467AD65E1E5546C86EAE4AE1AA2E13C3E3341E30BB02DA20CE4D2C93E58B5E48FDABFA6D1CC4D9556FBEC311EBE5DBA2B4256E80FD4C4C2D455527FD56B6351B2F5AE33A66E48A546769D19B324C361B42DC5A682E846631022AF98E5666949A9775E9C88F4075F94689247E95CCC652B683A6FB12EAA43E1CE466925C1D367948ABC4BE5F720E5B13177FC7BF3BD9321AECF18BBC5A139A0A56EEA15A1602ED3DEAE58962F7B6A6ACC2C836F203D904A7AC9D3639BCFACB3E99B391E222D4C81061EE721DEB52CB804D068EF9C66A805C55D8A0A391CE6EA38EC9B71EF286093781E964B5FEC0ECD390E394E0C9E91CA2065DF13F2677BCD7627D20F63D7050FDF9D68BA1F5626C9B69D72A8CF64F9FA96B7D29A233A14EEA3B6CC7A75953BE92AE02AC86360DF5333CB2369FB28E0E0CAC3D30BC47D7820095E26B7C28D58E1A6533C35CB2D81CC2233949CA7F89E349904055E70F4E1772E8A1D5020C90CA16B012DAB61106B969A768E1604D7A2D7BA1A34FAE4D42056F650C961E5FEEE6CB59B5A7EC51EB57AEFB8EEFD0FA55E3763BC6FB65E8E711FBC6887F11E7179EE1FECB57B24302E4EF7B3FDC06561D7A69791AEB4C0C7CEF8EDC23D0371E8E37185726DF51FF5623AABBC5A40E06D9DE9E6F61CD86A6B9E1CF0788A8AC4130F9EDB62259CFE50D4F099CB9EC9820C326422CBE8895E41822C8F0D5DB482497AABA5FB7701A3A1E218F81F719B58F7C96A68D68DD3EF07691A19BBA8FDC084636BCA6A3A874582A4E9A2 + 1E4C6690DF54EF2CAA42F9BB9EF4826C0CE08D30F68239EA3CD1FAB09539A78BC7CD319C9EA30967EB56F6D8A73ABF384543A067B8D0E474BE74FF95E855AF27350EC6C6BB6DFB3B0019415BB0D1F32616994F31D9E53BAD5084F8C0D1AEC257C127AF5EA11FDE585F67B6620501D26C96AD3BD1CFA3A44C76090EC5C7A59BEED0A006647EB9318753D1DF2C2537D17525C7961C44BAD69ACE4E5831F7D5D5C4FCF220CF5229C4A439DF5D71091DE3C4527B4145D7E6764CED8F8F75A7529A21E3A236FE9411200D1047D6464B353BB8017FBDF02834D17B945777F9F2AAF82966AE619D33612917A62B35AAE78330CB2FAF0E3F3682206440A5B92D8AF17B3BD0C4EAD2572606E3A1209D684FD5FA8DAEE9CAB93885076A568BA2901478F48ACEA77E14FAE10F339D44F1FB534A22E5E6580932D7526627CB92990D5176D9BDBC09B8213A09B103CB7252683442C243BDB465E1C06968F3677F83FFE5ADFF46DB0A5CE7F7BAA0A0442FBA5F74A58EEE93301E274105F175B6D17774642CD3F62D27962799776A1AA1390C6C3506EC36A9B541F40A652F2EFA60E30E2910E21F5BC7A005631674092CC5A0E1364016519F33A689668C73DE13F6CDD9AD1CD341D07BBCD5E0F4102E75903F52E4213A782329267ADD66F111371E5CC78356EDA188D5F4A01BDAD6D83D828F37F250574A9E2B45428719714FD3AA789ED49CBAFCFB02AEFFBBAA72125404585BF0046C9B82AE6E028F3CF8B11964277FC37CDC67B585F426729A694B32513C2D8C37B876D9769EB4B538EE1AFDC755F2A142DAEAD71C3A32533625ED0628465859D4F9E803D119369AF2E67B21F21DDACC1B58A2BB29C3CC199783DE48F9D3A093D6CE8033CFBDD5C8B0B23DFC367999633A6DB699466A0C0292632CC7551E87AB2C51D1C26153DE232FB737C157CDFFDD00F2F25F78B852F8EE56DD0FA7D582F04D3E44623AA6A42DD16905B723F5DF0DFB61CA6A5DEF0E73626EB8AF71DB4BCD7E615F039CDA8B98655AB2DEBDB69F44FC5E88E3BEC9CFC5709A38A02791321DF2AEF8FD5E181150BFF523BCD847AACBEA54596A2AA18E08F13912F63107EA5C9DEB07BB279150E2DBAB23BA862BCBFFB27CC6C6AD99A805A14F0E1A724E6DF4145B8B420B13BA10004CFCFE611BF3408DDB94E4BBA857A8D3DFD4807CCA8C170ECD145DB4A2007A3595D59DE525E43E7E59D9072229212970D0D5B56C7CCAA6E9B24133317865182F95AB9023D1AEABBEBB78E57CD224E35F4EC4004E80E5FAD78F068E561E560AC9B084A022638B3A89A39906C8F5FD0F3D97E30ED120FA4DE5BFA5ED0FACCA5898EC46D4743A7767DD20FC0486BBD95DA34F133799689AF767527112AB4CAD27BE833B9759A956A7DEEB260C81CA5DFF19544C3E91573EB5358A3958F24AE14567EDAFAE0F0A4D1855625F + 8E5513D787FCE21268A0C034344EBB06A180F6C08A20973D87BE4B0F34050A0B9EB13FD6478EA2EB7ED310F7885BAC90333BFF8831BE54A42CAACA7AEE3143B3438BE147B02D8D1BB1313862B95BBB023BBFA6B7157B5DFD684367DEF9D743CBE0121ABF2E0FE84F4BDF86835302C1953DFF0AFBB5222151C250A6052A9D0195B6A24A6640D8E3AAC9AE0AC0353C19E826512386BEF4DD6343DDE78034611E2DE2CCE067E5BB20CE30A1F089592EFC060304A67CAE4362EE9C788F4A0A6B1D0D4FB0451B61E4CDD432B14160444FC594E50B144E15E17A6EB47283D31BEE0F0FD4F57AA3A6C8E9D9807277ED06C864E7F4768DD3C232AC7ECC609A6AB0906423AB9B5D27FC5593F2F6C9169499E82611DDD8A0F940866F5573DAB8BB2916714FA9384888F4435E46A444291F370E33285AA943F90AC4253E70DF9AF1966E49826D00F3F4F903296B76FD7692AEDDAFB325E0747615BD50E7CF8C03801949F0626C500486BDEC29381FA0400F8143DEF61EDF1C0EC05436B1C2DE53223677EF800AFF514EC8F38F26DDDE7AECC5DE96B90D61D484E17D15109825E1E1387885617CC9B407CAF7CCF63A0713B60D3A6570CA3858ABCBA2A742773F53CA85C44FB8D36F6EE7487C853CC2BF336422E2DF0F6CA4F3429C01E93AD76640BF4ED3F6E417D295CC628D9D420F560AE9B63E1236E0A41C700E47801F7565F0E5EBC65B02106573A261CA5281080EEE389EF941C199A269BA3905E774653505324C0113A20B2A20D909242B3CEEEF477E6A278DAC475F6734DAA6E333FE9DAB97944A7A94DE6A022B21AA8647F51258DA7B090DC55B7C6A772DE87D2B0B9432C3280C9760DE10CA8B79771C0261DA5BAD8373E4D62E59000948E53DB66721ADA4FDA536C50DA1C7CE7BF5ED2496478C9A656D51C3210C432E617F433BAE4D14D1D2F3C43159AA2E88F531C069AE866ABCB617A98F2A95E101C96ABF4E608F7980AD9043516CDF21EBE68DA922FEDEFC2F7B3BC3A24F899327544E4A27C6532F1D34C485B194A8BE0E1D737A80B4F6BA429D8D39B75F45B3D284D374A300EB9D6AA351995BE326A7E5F423E99D64D321A7AD2893F011A585DB61932114B9F088392D739A42A4BAAB1F07368E016E4DF4BAB2FEA305340A257D1444DD59EA61E8525BF0EC0223E7EAAAFFA8CD117E5C3567D69AEBEFA07C011816C4DC98A4BED677827DA843E40D8E7CF7520B87961471DBA4288C97F0F28E4E17 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + cleartomark end + %APLT1End + %RBIEndFontSubset +/Times-Roman cguidfix +/F1.1/Times-Roman renmfont +%RBIBeginFontSubset: Helvetica +%!FontType1-1.0: Helvetica 1.0000.0.0000 + 14 dict begin/FontName /Helvetica def + /PaintType 0 def + /Encoding 256 array 0 1 255{1 index exch/.notdef put}for + dup 33 /plus put + dup 34 /hyphen put + readonly def + 42/FontType resourcestatus{pop pop false}{true}ifelse + %APLsfntBegin + {currentfile 0(%APLsfntEnd\n)/SubFileDecode filter flushfile}if + /FontType 42 def + /FontMatrix matrix def + /FontBBox[2048 -1947 1 index div -985 2 index div 2961 3 index div 2297 5 -1 roll div]cvx def + /sfnts [< + 74727565000900000000000063767420000000000000009C0000036C6670676D000000000000040800000A1D676C79660000000000000E2800000144686561640000000000000F6C00000036686865610000000000000FA400000024686D74780000000000000FC8000000106C6F63610000000000000FD80000000A6D6178700000000000000FE400000020707265700000000000001004000003CF05C0001005BD00280580001A042F001F0000FFD90000FFDA0000FFD9FE55FFE605C70010FE6DFFF1033B000000B9000000B902FE3F3C00C0008D009B00AF000600A800C00028005E009800C9016A00B9015C00B400D6011E002E0080000400B8004C00CC01FFFFD1006600A400AF007400C2009500B1000C0028006D0015004C008E0125FF7A000C0040004C00620084FFA200240038008600BD0039005E008E00EDFFA9FFB300400052005500AA00AB00C200CB012302B10413FFAEFFE4000800510074008400AA00D1FF4CFFAF0012002C004200500051008400BE012503DAFF680018003B0098009C009F00A100C100EC018201B4FF68FF76FFD0FFE100020018001C00530053007D01B401E103AF0486FF9CFFEAFFFE001F0028002A00520060009300A300AA00AF00AF00C001000145016B0174019301950240028202B404850517FEFD00060029004700470048006F008800B400B900C400F200F901EF02180310037403C5FF35FFF3000B004B004C0052005500650076007600870087008E00AB00BB0106013001430150017D0194019501D3022A025502580277027802E6034E035C037903D3047304B2058C0598060BFEF5FFBBFFC7FFD50017001D005B0072007E009C00C200D000F400FA01030106011C0125013B0142015E015E0180019B02B901A101B9025001C001D002AA01DF01E301EF01FB0205020C0215022B0274029302AB02C202CE03690395039903DF03F5043E050205A105E5062507DBFE62FE89FECEFF3BFFE1FFF800030008002100390042004E005F0061006F00700034007F008E00AD00AD00AF00BD00C400C500C900C900C900E3011C00ED00F800F901000112011A0132014D014D014E014F01660169019E01BA01BA01BE01E301EF01F602000200020902110217021C02530262026D028002D50280031B032A034A035A03AF03AF03C803D603FB03FB04050413041504470449008C046D049A049A04A604A804B204CF0539053E054E055605800589058C036305D105D6067E068E06B206EF06F00728074C076F078C00B400C900C000C10000000000000000000000000004012400AF0032006E0063014401620096014301A10161008A00740064018801EF01700028FF5D037E0347023000AA00BE007B0062009A007D0089035C00A1FFD803AA00D70093006C0000008000A70442001D0597001D00820030002A + 002A002A002A002A40292A292827262524232221201F1E1D1C1B1A191817161514131211100D0C0B0A090807060504030201002C4523466020B02660B004262348482D2C452346236120B02661B004262348482D2C45234660B0206120B04660B004262348482D2C4523462361B0206020B02661B02061B004262348482D2C45234660B0406120B06660B004262348482D2C4523462361B0406020B02661B04061B004262348482D2C0110203C003C2D2C20452320B0CD442320B8015A51582320B08D44235920B0ED51582320B04D44235920B09051582320B00D44235921212D2C20204518684420B001602045B04676688A4560442D2C01B9400000000A2D2C00B9000040000B2D2C2045B00043617D6818B0004360442D2C45B01A234445B01923442D2C2045B00325456164B050515845441B2121592D2C20B0032552582359212D2C69B04061B0008B0C6423648BB8400062600C642364615C58B0036159B002602D2C45B0112BB0172344B0177AE5182D2C45B0112BB01723442D2C45B0112BB017458CB0172344B0177AE5182D2CB002254661658A46B040608B482D2CB0022546608A46B040618C482D2C4B53205C58B002855958B00185592D2C20B0032545B019236A4445B01A23444565234520B00325606A20B009234223688A6A606120B0005258B21A401A4523614459B0005058B219401945236144592D2CB9187E3B210B2D2CB92D412D410B2D2CB93B21187E0B2D2CB93B21E7830B2D2CB92D41D2C00B2D2CB9187EC4E00B2D2C4B525845441B2121592D2C0120B003252349B04060B0206320B000525823B002253823B002256538008A63381B212121212159012D2C456920B00943B0022660B00325B005254961B0805358B21940194523616844B21A401A4523606A44B209191A45652345604259B00943608A103A2D2C01B005251023208AF500B0016023EDEC2D2C01B005251023208AF500B0016123EDEC2D2C01B0062510F500EDEC2D2C20B001600110203C003C2D2C20B001610110203C003C2D2C764520B003254523616818236860442D2C7645B00325452361682318456860442D2C7645B0032545616823452361442D2C4569B014B0324B505821B0205961442DB8002B2C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB8002C2C2020456944B001602DB8002D2CB8002C2A212DB8002E2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB8002F2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800302C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800312C2020456944B0016020 + 20457D691844B001602DB800322CB800312A2DB800332C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800342C4B535845441B2121592DB800352C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800362C2020456944B001602DB800372CB800362A212DB800382C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800392C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8003A2C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB8003B2C2020456944B001602020457D691844B001602DB8003C2CB8003B2A2DB8003D2C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8003E2C4B535845441B2121592DB8003F2C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800402C2020456944B001602DB800412CB800402A212DB800422C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800432C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800442C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800452C2020456944B001602020457D691844B001602DB800462CB800452A2DB800472C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800482C4B535845441B2121592DB800492C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB8004A2C2020456944B001602DB8004B2CB8004A2A212DB8004C2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB8004D2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8004E2C4B20B0032650585158 + B080441BB04044591B21212045B0C05058B0C0441B2159592DB8004F2C2020456944B001602020457D691844B001602DB800502CB8004F2A2DB800512C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800522C4B535845441B2121592DB800532C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800542C2020456944B001602DB800552CB800542A212DB800562C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800572C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800582C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800592C2020456944B001602020457D691844B001602DB8005A2CB800592A2DB8005B2C4B20B003265358B0401BB000598A8A20B0032653582321B0808A8A1B8A235920B0032653582321B800C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8005C2C4B535845441B2121592D00000000020042000004D005BD000300070043B800532BB800082FB800042FB8000810B80000D0B800002FB8000410B80003DCB8000010B80007DCB8000310B80009DC00BA0007000000562BBA0002000500562B3031331121112711211142048EB8FCE205BDFA43B8044DFBB300000001005C0000046F0415000B0037401C037A050220080B7A0A0A0D17171A067A040920030A7A00190C3F52182B4E10F44DF43CFD3CF44E456544E6003F4DF43CFD3CF431301335211133112115211123115C01B4AB01B4FE4CAB01B6A801B7FE49A8FE4A01B600000001005501DE024B029700030020400A002F03011A0500190405B80142B321BA48182B2B4EE410E6002F4DED3130132115215501F6FE0A0297B900000002002F0000044205930007000B00001335211521112311013521152F0413FE4FB2FE50041303A6A8A8FC5A03A60146A7A7000000010000000000006F400C9E5F0F3CF500110800000000005F4D8F0000000000D383C768F865FC270B9108F9000000090001000000000000000100000629FE2900000C01F865FCED0B910001000000000000000000000000000000040512004204AC005C02AA00550473002F00000036006A008800A2000000010000000400920009006B0007000200100010005D000007E80A1D + 00040001B800532BB800492BB8003F2BB800352BB8002B2B4118008001A6009001A600A001A600030069018B0079018B0089018B0099018B00040089018B0099018B00A9018B00B9018BB2040840BA0179001A014A400B041F5414191F180A0B1FD2B80106B49E1FD918E3BB0119000D00E10119B20D0009410A01A0019F0064001F01A50025017A00480028019AB3296C1F60410A01A9007001A9008001A90003008001A9000101A9B21E321FBE012C00250401001F0126001E0401B61FE7312D1FE531B80201B21FC227B80401B21FC11EB80201400F1FC01D9E1FBF1D671FBE1D671FAB27B80401B21FAA29B80401B61FA91D6C1F931EB8019AB21F921DB80101B21F911DB80101B21F751DB80201B61F6D29961F6431B8019AB21F4C96B802ABB21F391DB80156400B1F3638211F351DE41F2F27B80801400B1F2D1D4C1F2A31CD1F241DB802ABB21F201EB8012540111F1C1D931F3A1D4C1F1E1D45273A1D4527BB01AA019B002A019BB2254A1FBA019B0025017AB349293896B8017BB348283125B8017A403648289629482725294C1F252946272729482756C80784075B07410732072B072807260721071B071408120810080E080C080A08080807B801ACB23F1F06BB01AB003F001F01ABB308060805B801AEB23F1F04BB01AD003F001F01ADB70804080208000814B8FFE0B40000010014B801ABB41000000100B801ABB606100000010006B801ADB300000100B801AD401F04000001000410000001001002000001000200000001000002010802004A00B0018DB806008516763F183F123E113946443E113946443E113946443E113946443E113946443E11394660443E11394660443E11394660442B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B18011DB0964B5358B0AA1D59B0324B5358B0FF1D592B2B2B2B2B2B2B2B182B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B74752B2B2B65422B2B4B5279B376706A66456523456023456560234560B08B766818B080622020B16A704565234520B003266062636820B003266165B070236544B06A234420B176664565234520B003266062636820B003266165B066236544B0762344B10066455458B166406544B27640764523614459B36242725D456523456023456560234560B089766818B080622020B172424565234520B003266062636820B003266165B042236544B072234420B1625D4565234520B003266062636820B003266165B05D236544B0622344B1005D455458B15D406544B262406245236144592B2B2B2B456953427374B8019A2045694B20B02853B049515A58B020615944B801A6204569447500 + 00>] def + /CharStrings 4 dict dup begin + /.notdef 0 def +/plus 1 def +/hyphen 2 def +/u20B8 3 def + end readonly def + currentdict dup/FontName get exch definefont pop end + %APLsfntEnd + 42/FontType resourcestatus{pop pop true}{false}ifelse + {currentfile 0(%APLT1End\n)/SubFileDecode filter flushfile}if + /FontType 1 def + /FontMatrix [ 0.00048828125 0 0 0.00048828125 0 0 ] def + /FontBBox{-1947 -985 2961 2297}def + /UniqueID 4003230 def + currentdict currentfile eexec + 54544758EC884CF30C3CD503CEDBFF3839C47C3C3333173232E3FDBFF439491DB843E1924E63AA7726BBB0485AB56D93D8C0906F647A47162891E73FFC2A9873C4B1EAC5EEBDFFC4D06084FBD84139DF4583C6E259D10699944D1068C9C45667DCCCFB9B7EA01B606435EDCBD273ABAC093D14085CCBAC149BD7382E842CFE0D7FE4FD2EF589A2471F6074A80A8B675C2F7A50D63AC1EF90D787BADD11633CB01CF6EE3B37AAF9078A69AC4740E9B6525D78BBD839551A1CB80DB8682FA5E87591BBD6EE8B946063A2A58D9CA3685AB305495DC5FB5747EB8A9A059C4976C0FE4EEAB1D56FF47F1E9664ED9F4A7DAB763AF92B2F6CF2FA7DEC24710E0B9096E30F772BA7FEA9BDBE496C42ED2CEB58F54E80BDF57CE7B4DB6CCFE7182F43BF93CCA0767AF95D62C5D2C3DC6AE1E6D139F51A2C63432117F1714C5566572EE9967A715420ABDCD1D7BD74F8450B89965FCC81C6ACA565C5F3CCF91D430D1F953E4F1A645300A98DD8C47CD64555F08F422340A85404EAE0D3229C4F9336B9470CACBD6BBF3395104750A915CC6EAAC197668267B8C62D2764C8CD69FD937CA3C924D997A0EDE7964BEB9EA2F92EF70C5E5DA0AA5567765E71F2B911B3C5586B741EEB93F3C73016EC16BFF283758900903D203992EFC8BAFAF13579C602F38C94CF017316529A80F552C33559AB2C21302561FE61E935C1E32B3C98FAD5EE6DEF8E2A946709BA3E02871DE2815743DB8E498E69E94CB8A7501EED33553FB0969440DDC44F6C8FF2DBE00656FA8545D720AB78CDD5DB83A2D48C3AC50A9ED0D3E79BC5471543F4EF7C36C12B084DCB46BC762F868B0B759F7F6DBC0D5B99255F32D5A1F7736BE59D217748965B1B556B5A218F7ECAD06F4230A7066D5E8D3E06A2BF100EE8B8BF6152435EE06CC80B45FEF4DCBA805397DE4BC87C8D634429E1EAB5D0269333C17D07D7EAFF1C8FFBEA1546BA7F8B489E6FA8719199544F038020056D318A071F0BBFECD8787692C98C7F7E8AD77C3E2CFE18EAC5B06FB853566E4209160A48D7573D71172479F9A9AD5F83BA511CB4EAD802784B9C2463E5FE36CC25DDD76078B30CBC9F24E2823C48CD79FDD3E25E0F69BC66A2AF567AB7897310D5C6B49802630366AA88837988D1254F6A6B8F626AB7DD9C5EEE146CE944C139BB16EAF8F37CBC4D6CFE07C05959C4C6BB96 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + cleartomark end + %APLT1End + %RBIEndFontSubset +/Helvetica cguidfix +/F2.1/Helvetica renmfont +[ /CIEBasedA 5 dict dup begin /WhitePoint [ 0.9505 1.0000 1.0891 ] def +/DecodeA { +{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse + 1 index 1 index ge { exch pop } { pop } ifelse < +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000001010101010101010101010101 +0101010101010101010101010101010101010101010101020202020202020202 +0202020202020202020202020202020202030303030303030303030303030303 +0303030303030304040404040404040404040404040404040404050505050505 +0505050505050505050506060606060606060606060606060607070707070707 +0707070707070708080808080808080808080808090909090909090909090909 +0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c +0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010 +1010101010111111111111111112121212121212121313131313131313141414 +1414141414151515151515151616161616161616171717171717171818181818 +18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d +1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223 +2323232323242424242425252525252526262626262727272727282828282829 +292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f +2f2f303030303131313131323232323333333333343434343535353535363636 +36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e +3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646 +4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f +4f50505051515151525252535353535454545555555656565657575758585859 +59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263 +63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e +6e6e6f6f6f707070717171727273737374747475757576767677777878787979 +797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585 +86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292 +9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f +a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae +aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd +bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc +cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd +dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee +eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff +> dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling + cvi 3 index exch get 4 -1 roll 3 -1 roll get + dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind + exec} bind +def +/MatrixA [ 0.9642 1.0000 0.8249 ] def +/RangeLMN [ 0.0 2.0000 0.0 2.0000 0.0 2.0000 ] def +/DecodeLMN [ { 0.9857 mul} bind { 1.0000 mul} bind { 1.3202 mul} bind ] def +end ] /Cs1 exch/ColorSpace dr pop +%%EndPageSetup +0.60000002 i +0 0 0 0.39990199 setcmykcolor +q +0 0 94 136 rc +20.526587 120.473 m +74.407089 120.473 l +74.407089 132.47301 l +20.526587 132.47301 l +h +20.526587 120.473 m +f +0.100098 0 0 0 setcmykcolor +19.026587 122.006 m +72.907089 122.006 l +72.907089 134.006 l +19.026587 134.006 l +h +19.026587 122.006 m +f +1 J +1 j +1 0 0 0 setcmykcolor +1 0 0 -1 -259 464 cm +278.52658 342.49399 m +332.40707 342.49399 l +332.40707 330.49399 l +278.52658 330.49399 l +h +278.52658 342.49399 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 45.242985 129.726 cm +/F1.1[ 8 0 0 -8 0 0]sf +-12 3 m +(!"#$%&)[ 3.113281 4.449219 2.664062 3.550781 6.222656 0.000000 ] xS +0 J +0.60000002 i +0 0 0 1 setcmykcolor +1 0 0 -1 -259 464 cm +261.22461 461.61993 m +350.95898 461.61993 l +350.95898 432.66013 l +261.22461 432.66013 l +h +261.22461 461.61993 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 4.7245951 28.060499 cm +/F2.1[ 8 0 0 -8 0 0]sf +-2.5 3 m +(!)s +1 0 0 -1 25.144495 28.060499 cm +/F1.1[ 8 0 0 -8 0 0]sf +-11 3 m +('$\(\)*+,)[ 4.000000 3.550781 2.222656 4.000000 2.222656 2.664062 0.000000 ] xS +1 0 0 -1 4.7245951 19.060499 cm +/F2.1[ 8 0 0 -8 0 0]sf +-2.5 3 m +(!)s +1 0 0 -1 32.144497 19.060499 cm +/F1.1[ 8 0 0 -8 0 0]sf +-18 3 m +(\)&-*./\(0&+,)[ 4.000000 3.550781 4.000000 2.222656 4.449219 2.222656 2.222656 4.000000 3.550781 2.664062 0.000000 ] xS +1 0 0 -1 4.7245951 10.0605 cm +/F2.1[ 8 0 0 -8 0 0]sf +-2.5 3 m +(!)s +1 0 0 -1 22.144495 10.0605 cm +/F1.1[ 8 0 0 -8 0 0]sf +-8 3 m +(\(\)\(*+,)[ 2.222656 4.000000 2.222656 2.222656 2.664062 0.000000 ] xS +0.60000002 i +0.25 0 0 0 setcmykcolor +CM +1.7245952 31.8398 m +91.458992 31.8398 l +91.458992 88.099998 l +1.7245952 88.099998 l +h +1.7245952 31.8398 m +f +0 0 0 1 setcmykcolor +1 0 0 -1 -259 464 cm +261.22461 432.66019 m +350.95898 432.66019 l +350.95898 376.39999 l +261.22461 376.39999 l +h +261.22461 432.66019 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 4.7245951 84.439796 cm +/F2.1[ 8 0 0 -8 0 0]sf +-2.5 3 m +(!)s +1 0 0 -1 35.144497 84.439796 cm +/F1.1[ 8 0 0 -8 0 0]sf +-21 3 m +(12345676\(\)*)[ 7.550781 2.664062 5.777344 4.886719 5.777344 2.000000 2.222656 2.000000 2.222656 4.000000 0.000000 ] xS +1 0 0 -1 4.7245951 75.439796 cm +/F2.1[ 8 0 0 -8 0 0]sf +-2.5 3 m +(!)s +1 0 0 -1 36.644497 75.439796 cm +/F1.1[ 8 0 0 -8 0 0]sf +-22.5 3 m +(582954676\(\)*)[ 5.777344 4.886719 2.664062 5.777344 5.777344 4.746094 2.000000 2.222656 2.000000 2.222656 4.000000 0.000000 ] xS +1 0 0 -1 3.7245951 66.439796 cm +/F2.1[ 8 0 0 -8 0 0]sf +-1.5 3 m +(")s +1 0 0 -1 34.644497 66.439796 cm +/F1.1[ 8 0 0 -8 0 0]sf +-20.5 3 m +(:2;9.676\(\)*)[ 5.777344 2.664062 7.113281 5.777344 4.449219 2.000000 2.222656 2.000000 2.222656 4.000000 0.000000 ] xS +1 0 0 -1 3.7245951 57.4398 cm +/F2.1[ 8 0 0 -8 0 0]sf +-1.5 3 m +(")s +1 0 0 -1 37.644497 57.4398 cm +/F1.1[ 8 0 0 -8 0 0]sf +-23.5 3 m +(6762%$?&)[ 3.113281 2.222656 2.222656 4.000000 3.550781 2.664062 2.664062 2.000000 2.222656 2.000000 2.664062 6.222656 3.550781 4.000000 0.000000 ] xS +1 0 0 -1 3.7245951 48.4398 cm +/F2.1[ 8 0 0 -8 0 0]sf +-1.5 3 m +(")s +1 0 0 -1 48.644497 48.4398 cm +/F1.1[ 8 0 0 -8 0 0]sf +-34.5 3 m +(@A##&\)*2%$?&6762%$?&)[ 3.550781 4.000000 2.664062 2.664062 3.550781 4.000000 2.222656 2.664062 6.222656 3.550781 4.000000 3.550781 2.000000 2.222656 2.000000 2.664062 6.222656 3.550781 4.000000 0.000000 ] xS +1 0 0 -1 3.7245951 39.4398 cm +/F2.1[ 8 0 0 -8 0 0]sf +-1.5 3 m +(")s +1 0 0 -1 38.644497 39.4398 cm +/F1.1[ 8 0 0 -8 0 0]sf +-24.5 3 m +(\)&-*2%$?&676\(\)*)[ 4.000000 3.550781 4.000000 2.222656 2.664062 6.222656 3.550781 4.000000 3.550781 2.000000 2.222656 2.000000 2.222656 4.000000 0.000000 ] xS +0.60000002 i +0 0 0 1 setcmykcolor +1 0 0 -1 -259 464 cm +261.22461 376.39999 m +350.95898 376.39999 l +350.95898 362 l +261.22461 362 l +h +261.22461 376.39999 m +S +/Cs1 SC +0 sc +0 i +1 0 0 -1 45.115986 97.019897 cm +-28 3 m +(./\(0&.BCD"#$%&)[ 4.449219 2.222656 2.222656 4.000000 3.550781 4.449219 4.000000 4.000000 5.777344 4.449219 2.664062 3.550781 6.222656 0.000000 ] xS +0 j +0.60000002 i +1 0 0 0 setcmykcolor +1 0 0 -1 -259 464 cm +306.08908 351.89499 m +306.08908 362 l +S +311.09378 351.89499 m +306.08908 343.49399 l +301.08978 351.89499 l +311.09378 351.89499 l +h +311.09378 351.89499 m +S +ep +end +%%Trailer +%%EOF diff --git a/chptr15/p830f2.eps b/chptr15/p830f2.eps index f6daac7..11f2c06 100644 --- a/chptr15/p830f2.eps +++ b/chptr15/p830f2.eps @@ -1 +1,1073 @@ -%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Illustrator(R) 8.0 %%AI8_CreatorVersion: 8.0.1 %%For: (a a) (EMILCOMP) %%Title: (p830f2.eps) %%CreationDate: (11/14/01) (9:58 AM) %%BoundingBox: 18 2 140 110 %%HiResBoundingBox: 18.3652 2.9902 139.8994 109.5298 %%DocumentProcessColors: Cyan Black %%DocumentFonts: CoreTTI2k %%+ TimesTen-Italic %%+ TimesTen-Roman %%DocumentSuppliedFonts: CoreTTI2k %%+ TimesTen-Italic %%+ TimesTen-Roman %%DocumentSuppliedResources: procset Adobe_level2_AI5 1.2 0 %%+ procset Adobe_typography_AI5 1.0 1 %%+ procset Adobe_ColorImage_AI6 1.3 0 %%+ procset Adobe_Illustrator_AI5 1.3 0 %%+ procset Adobe_cshow 2.0 8 %%+ procset Adobe_shading_AI8 1.0 0 %AI5_FileFormat 4.0 %AI3_ColorUsage: Color %AI3_IncludePlacedImages %AI7_ImageSettings: 1 %%CMYKProcessColor: 1 1 1 1 ([Registration]) %%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) %%+ Options: 1 16 0 1 0 1 1 1 0 1 1 1 1 18 0 0 0 0 0 0 0 0 131071 -1 %%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () %AI3_TemplateBox: 78 53 78 53 %AI3_TileBox: -379 -305 208 464 %AI3_DocumentPreview: Macintosh_ColorPic %AI5_ArtSize: 150 144 %AI5_RulerUnits: 3 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI8_OpenToView: -25.2461 125.2461 4.61 1009 717 18 1 1 7 43 0 0 %AI5_OpenViewLayers: 7 %%PageOrigin:-379 -305 %%AI3_PaperRect:-12 781 600 -11 %%AI3_Margin:12 -12 -13 11 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI7_Thumbnail: 128 112 8 %%BeginData: 11000 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FD23FFF85227522752275227522752275227522752275227522752 %275227522752275227522752275227522752275227522752275227522752 %275227F8FD46FFF8FD38FFF8FD46FFF8FD38FFF8FD46FFF8FD38FFF8FD46 %FFF8FD0DFF7DFD10FF7D52FD18FFF8FD46FFF8FD14FF7DA8FD07FFA852FD %19FFF8FD46FFF8FD0BFFA8FF52A8527D7D7DFF527DFF7DA87D7D527D7D52 %A8FF52A852FF7DA852FFA8A852FFA8FD0AFFF8FD46FFF8FD08FFA87D7DA8 %FFFD047DFF27FF52A8FD067DFFA852FFFFFF7D27FF52FFFFFF52FD067DFD %08FFF8FD46FFF8FD09FF7D7DFFFF7DA87DA8FF52FF7DA87D7DFFFFA87DFF %A87DFFFF52FF27FF27FFFFFF27FFFFFFA87D52FD08FFF8FD46FFF8FD09FF %A8A8A8FF527D5252A827FF7D7DA85227A85252A87D27A8FF527D27A87D27 %52A87D2752A8A8A8FD09FFF8FD46FFF8FD38FFF8FD46FFF8FD38FFF8FD46 %FFF8FD38FFF8FD46FFF8FD0CFF52527D52A8FD13FFA827A8FFFF7D52FD0D %FFF8FD46FFF8FD0CFF7DA8FF27A8FD14FF27FFFFFF7DA8FD0DFFF8FD46FF %F8FD0CFFF8A8527DFFFF27FFA87D52A827FF7D527D27FFFFA87D27FFA852 %7D27FF52FFFF7D52A8FD09FFF8FD46FFF8FD0BFFA852A852FFFFFF52FF52 %7D52FF52FFA827FF52FFFF7DFF52FF7DA8FF27FF52FF52FF7DFD0AFFF8FD %46FFF8FD0BFF7D52FF27A8FFA852A8277D7DFF52FF52A8FF7DA87D7D7D52 %FF27FFA8527D7DFF27A8FD0BFFF8FD46FFF8FD0BFF277DFF7D52FF527DA8 %5227FFA852A852FFA827FF7D7D527DFF527D7DFF7D52FF52A87DFD0AFFF8 %FD46FFF8FD38FFF8FD46FFF8FD38FFF8FD46FFF8FD38FFF8FD46FFF85227 %272752272727522727275227272752272727522727275227272752272727 %522727275227272752272727522727275227272752272727F8FD46FFF884 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AFF8FD46FFF8 %AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9 %AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9F8FD46FF %F884AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AFF8FD46 %FFF8AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AF53 %AF59AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9F8FD %46FFF884AF84AF848484AF84AF84AF84AF84AF84AF84AF84AF84AF84AF2E %AF84AF2EAF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AFF8 %FD46FFF8AFA9AFA9AF7DAFA9AFA9AFA9AF7D5952AF27AF7E7D288427AFA9 %52A9AFA952A9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9 %F8FD46FFF884AF84842E522E5959AF84AF847D27AF842784522E2E845284 %7D2EAF84AF05AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AFF8FD46FFF8AFA9AF84AF7EAF84AFA9AF84AF52AF848453AF27597EAF2E %AF538484AF7D5984AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9 %AF84F8FD46FFF884AF84AF848484AF84AF84AF842E84AF2E59592705AF59 %2E597D59AF845259AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AFF8FD46FFF8AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9 %AFA9AFA984A9AF53AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9 %AFA9AFA9F8FD46FFF884AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF59AF59AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AFF8FD46FFF8AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9 %AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84 %AFA9AF84AFA9F8FD46FFF82E5227592E5227592E5227592E5227592E5227 %592E5227592E5227592E5227592E5227592E5227592E5227592E5227592E %5227592E522759F8FD46FFFD1CA86084FD1CA8FD61FFA91414FD7DFF6114 %1A60FD7BFFAF14603614A8FD7AFF3C14AFFF1460FD79FF841460FFFF8514 %85FD78FF3C14FFFFFFAF3C14FD77FF611485FD04FF841460FD76FF1460FD %06FF3C14AFFD74FF36146084608560846061143CFD73FF8514141A141414 %1A1414141A14AFFD78FF3C36FD7EFF84AFFD7EFF6060FD7EFF363CFD7EFF %6160FD7EFF858BFD7EFF3C36FD7EFF6085FD7EFF8584FD7EFF3661FD7EFF %3C36FD7EFFAFAFFD7EFF3C36FD3FFFFD3FA8363CFD3FA8F87D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D2E7D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %7D527D527D527D527D527D527D527D527D527D527D527D527D527D527D52 %2752FD7EFF2727FD7EFF2752FD7EFF2727FD7EFF2727FD34FF27A827A852 %A87DFD43FF2727FD34FFA8FF27FFFFA8FD44FF2752FD36FF27FFFFFF52A8 %A8277D527D7D7DFF7DA87D277D7DFD34FF2727FD36FF52FFFFFF7D7DFF27 %FF52A8FF52FD047D27FD36FF2752FD36FF27FFFFFF52A8FF52FF7DA8FF27 %7D7DFFA852FD36FF2727FD35FFA8277DFFFF527DFF27A8277DA827A85227 %7DF8A8FD35FF2752FD7EFF2727FD7EFF2727FD7EFF2727FD7EFF2727F827 %F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 %F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 %F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 %F827F827F827F827F827F827F827F827F827F827F827F827F827F827F827 %F827F827F827AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84272EA9AF84AFA9AF84AFA9AF84AFA9AF84AF %A9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF %84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AF %A9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF %84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF27F8AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84A827AF84AF84AF84AF84AF84 %AF84AF8452522E84A827AF2EAF84AF592E84AF84AF847D2E592EAF27AF84 %AF84AF84AF84AF84AF84AF84AF84AF27AF84AF84AF84AF84AF84AF84AF27 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84272E %A9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA952A9AF %A9AFA97D7DAFA9AFA9AFA98427AF7EAFA952A9AFA9AFA9AF27AFA9AFA9AF %27A8A984A92EA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AF53277EAFA9AFA9AF %A9AFA9AFA9AFA92EA9AFA9AFA97D7EAFA9AFA9AFA9AFA9AFA9AFA9AFA9AF %A9AFA9AFA9AF2727AF84AF84AF84AF84AF84AF84AF2E8427AF2E59277D59 %2E2E2E7DAF05AF527D2EAF275959AF842784AF842705AF84AF05AF27AF59 %845227848452598484F85984AFF87D05AF847D59597D2E2E5252842EAF84 %7D2E5284AF2759277D84592E2E2EAF27AF59842EA827597DAF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84272784AFA9842E7D535959AFA9AF84AF %7D27847D7EAF05AF27AF527DA92E527D7E59847D7EAF84AFA9AF84AFA959 %F8A8A92E842EA95284AF277D2E8453AF84A82752842EA959597D7EAF527D %7E5952527DAF847D5384F8AFA95959AF27AF2E84A927842EA95259847E59 %59AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AF2727AF84AF84AF84 %AF84AF84AF84AF27AF05AF2E848452842784842EAF05592EAF59AF2E8484 %AF84AF84AF59AF84592EAF05AF05AFF8AF84272E5984AF598484AFF8AF05 %AF2E842E7D84842EAF0559277D84AF2EAF845927AF2E848452845952AF27 %AF05AF05AF84AF2E8484AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %272EA9AFA9AFA9AFA9AFA9AFA9AFA9527E2E7E7D53847DAF008453AF7E27 %A9522884A97D52AFA9AF27AFA9AF528453AF7E277E27A97D287D27AF2752 %7DAF52847D7D7E277E5253AF538453AFA97D7E7D7EAF537DA9AF7DF87E7D %53847EAF537D7D847E27A97D2759A97D52AFA9AFA9AFA9AFA9AFA9AFA9AF %A9AFA9AFA9AFA9AF2727AF84AF84AF84AF84AF84AF84AF84AF84AF2E8484 %AF842E84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF2E8484AF845959AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84272EA9AF84AFA9AF84AFA9AF84AF %A9AF84AFA9522EAFA9AF05AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF %84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AF %A9AF84AFA9AF84AFA9AF84AFA9AF845253AF84AF285984AFA9AF84AFA9AF %84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF84AFA9AF27F8AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84AF84 %AF84272EA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AF %A9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AF %A9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AF %A9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AFA9AF %A9AFA9AFA9AFA9AFA9AF27F8270527052705270527052705270527052705 %270527052705270527052705270527052705270527052705270527052705 %270527052705270527052705270527052705270527052705270527052705 %270527052705270527052705270527052705270527052705270527052705 %270527052705270527052705270527052705F827FD7EFF2727FD25FFA8FD %53FFA8FD04FF2752FD0CFF27A827A87DA87DFD11FF7DFF7DFD13FF52A827 %FF52A8FF7DFFFFFF7DA8FD05FF52A852FFA852FD11FF52FD0CFF52A8FD08 %FF7DFFFFFF2727FD05FF7DFD06FFA8FF52FFFFA8FD11FF7DA8FD14FF7D52 %FFA8A87D7DFD05FF52A8FD04FF7D52FFFFA8FF27FD10FF7DF8A8FD0BFF7D %7DFD05FF52FFFF7DA8FFFF2752FD05FFA8FD08FF27FFFFFF52A8A8277D52 %7D7D52FF7DA852277D7DFF52FFFF52A8A8277D52FFFFFFA87D7D7DFFFF7D %7DFFFFFF2752A8FF52A8A852FF7DA8527DFF7DA852FF2752A8FFFF277D52 %FFA87D7D7DA827A827FF52FFFFFF7D7D52FFFF7D7D527DA8527D27FF7DA8 %FFA87D7DA827A8FFA87DFFFF2727FFFFFF7D7D527D52FD06FF27FFFFFF7D %7DFF27FF52A8FF27FD047D27FFFFFF27FFFF7D7DFF27FF52A8FFFFA8A852 %7DFD08FF52F8A87D7DFF277D7DFF52A8FD047DFFFF52F8A8FF27FF52A852 %FFFF27FF27A827A87DFFFF7D7D7DF8A8FF52A8FF27FF27FF7D527D7D7D52 %A852FF27FFFFFF27FFFF2752FD05FFA8FD08FF27FFFFFF7DA8FF52FF7DA8 %FF277D7DFFFF52FFFFFF52FFFF7DA8FF52FF7DA8FFFFA87DA87DFD06FFA8 %FFFF7D7D7DA8FF527D7DFFFD047DFD05FF7D7DFF52FF7DA827FFFF52FF7D %527D52A8FFFF7DFFFF7D52FF7DA8FF52FF27FF7D7D7DA87D7DFFFFFF52FF %FFFF52FFFF2727FD05FFA8FD07FFA8277DFFFF527DFF27A8527DA827A852 %277D27A8FFFF52FFFF527DFF27A8527DFFFF7D7D7D52A8FF7D7DFFFFA852 %7D7DA8527DFF27FF277D527DA852277DA87D7D7DA8FF27A852FD047DA8FF %FF52FF52FFFF7D52FFFFA8F8A8527D7DA8FF277D7DFF527DFF27527DFF27 %A8FFA852FFFF2727FD23FFA87DFD42FF7D7DFFFFFF27FD0DFF7DFFFFFF27 %27FD24FFA8A8FD41FF527DFFFFA827A8FD0BFFA8A8FFFFFF2752FD7EFF27 %27FD1BFFA8FD62FF2752FD1AFFA8A8FFA8FD60FF2727FD05FF7DFD14FF7D %FFFF7DA8FD5FFF2752FD05FFA8FD06FF7D5252FF52A8A852FF527D7D7DA8 %7DFFFFFF7DFD5FFF2727FFFFFF7D7D527D52FD04FFA852FFFF7D7DFF27FF %52A8FF5252A8FFFFFF27FD5FFF2727FD05FFA8FD06FF7D7DFFFF52A8FF52 %FF7DA8FF277DA8FFFFFF52FD5FFF2727FD05FFA8FD06FF7D27FFFF7D277D %F8FF277DA827A87DFFFFA87DFD5FFF2752FD1AFF7DFFFF7DFD60FF2727FD %1BFF7DA8A8FD60FF2752FD7EFF27F87D5252527D5252527D5252527D5252 %527D5252527D5252527D5252527D5252527D5252527D5252527D5252527D %5252527D5252527D5252527D5252527D5252527D5252527D5252527D5252 %527D5252527D5252527D5252527D5252527D5252527D5252527D5252527D %5252527D5252527D5252527D5252527D5252527D5227 %%EndData %%EndComments %%BeginProlog %%BeginResource: procset Adobe_level2_AI5 1.2 0 %%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation) %%Version: 1.2 0 %%CreationDate: (04/10/93) () %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) userdict /Adobe_level2_AI5 26 dict dup begin put /packedarray where not { userdict begin /packedarray { array astore readonly } bind def /setpacking /pop load def /currentpacking false def end 0 } if pop userdict /defaultpacking currentpacking put true setpacking /initialize { Adobe_level2_AI5 begin } bind def /terminate { currentdict Adobe_level2_AI5 eq { end } if } bind def mark /setcustomcolor where not { /findcmykcustomcolor { (AI8_CMYK_CustomColor) 6 packedarray } bind def /findrgbcustomcolor { (AI8_RGB_CustomColor) 5 packedarray } bind def /setcustomcolor { exch aload pop dup (AI8_CMYK_CustomColor) eq { pop pop 4 { 4 index mul 4 1 roll } repeat 5 -1 roll pop setcmykcolor } { dup (AI8_RGB_CustomColor) eq { pop pop 3 { 1 exch sub 3 index mul 1 exch sub 3 1 roll } repeat 4 -1 roll pop setrgbcolor } { pop 4 { 4 index mul 4 1 roll } repeat 5 -1 roll pop setcmykcolor } ifelse } ifelse } def } if /setAIseparationgray { false setoverprint 0 setgray /setseparationgray where{ pop setseparationgray }{ /setcolorspace where{ pop [/Separation (All) /DeviceCMYK {dup dup dup}] setcolorspace 1 exch sub setcolor }{ setgray }ifelse }ifelse } def /gt38? mark {version cvr cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put userdict /level2? systemdict /languagelevel known dup { pop systemdict /languagelevel get 2 ge } if put /level2ScreenFreq { begin 60 HalftoneType 1 eq { pop Frequency } if HalftoneType 2 eq { pop GrayFrequency } if HalftoneType 5 eq { pop Default level2ScreenFreq } if end } bind def userdict /currentScreenFreq level2? {currenthalftone level2ScreenFreq} {currentscreen pop pop} ifelse put level2? not { /setcmykcolor where not { /setcmykcolor { exch .11 mul add exch .59 mul add exch .3 mul add 1 exch sub setgray } def } if /currentcmykcolor where not { /currentcmykcolor { 0 0 0 1 currentgray sub } def } if /setoverprint where not { /setoverprint /pop load def } if /selectfont where not { /selectfont { exch findfont exch dup type /arraytype eq { makefont } { scalefont } ifelse setfont } bind def } if /cshow where not { /cshow { [ 0 0 5 -1 roll aload pop ] cvx bind forall } bind def } if } if cleartomark /anyColor? { add add add 0 ne } bind def /testColor { gsave setcmykcolor currentcmykcolor grestore } bind def /testCMYKColorThrough { testColor anyColor? } bind def userdict /composite? 1 0 0 0 testCMYKColorThrough 0 1 0 0 testCMYKColorThrough 0 0 1 0 testCMYKColorThrough 0 0 0 1 testCMYKColorThrough and and and put composite? not { userdict begin gsave /cyan? 1 0 0 0 testCMYKColorThrough def /magenta? 0 1 0 0 testCMYKColorThrough def /yellow? 0 0 1 0 testCMYKColorThrough def /black? 0 0 0 1 testCMYKColorThrough def grestore /isCMYKSep? cyan? magenta? yellow? black? or or or def /customColor? isCMYKSep? not def end } if end defaultpacking setpacking %%EndResource %%BeginResource: procset Adobe_typography_AI5 1.0 1 %%Title: (Typography Operators) %%Version: 1.0 1 %%CreationDate:(6/10/1996) () %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_typography_AI5 68 dict dup begin put /initialize { begin begin Adobe_typography_AI5 begin Adobe_typography_AI5 { dup xcheck { bind } if pop pop } forall end end end Adobe_typography_AI5 begin } def /terminate { currentdict Adobe_typography_AI5 eq { end } if } def /modifyEncoding { /_tempEncode exch ddef /_pntr 0 ddef { counttomark -1 roll dup type dup /marktype eq { pop pop exit } { /nametype eq { _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll put } { /_pntr exch ddef } ifelse } ifelse } loop _tempEncode } def /havefont { systemdict /languagelevel known { /Font resourcestatus dup { exch pop exch pop } if } { systemdict /FontDirectory get 1 index known { pop true } { systemdict /fileposition known { dup length 6 add exch Ss 6 250 getinterval cvs pop Ss exch 0 exch getinterval status { pop pop pop pop true } { false } ifelse } { pop false } ifelse } ifelse } ifelse } def /TE { StandardEncoding 256 array copy modifyEncoding /_nativeEncoding exch def } def /subststring { exch 2 index exch search { exch pop exch dup () eq { pop exch concatstring } { 3 -1 roll exch concatstring concatstring } ifelse exch pop true } { pop pop false } ifelse } def /concatstring { 1 index length 1 index length 1 index add string dup 0 5 index putinterval dup 2 index 4 index putinterval 4 1 roll pop pop pop } def % /TZ { dup type /arraytype eq { /_wv exch def } { /_wv 0 def } ifelse /_useNativeEncoding exch def 2 index havefont { 3 index 255 string cvs dup (_Symbol_) eq { pop 2 index findfont } { 1 index 0 eq { dup length 1 sub 1 exch getinterval cvn findfont } { pop 2 index findfont } ifelse } ifelse } { dup 1 eq { 2 index 64 string cvs dup (-90pv-RKSJ-) (-83pv-RKSJ-) subststring { exch pop dup havefont { findfont false } { pop true } ifelse } { pop dup (-90ms-RKSJ-) (-Ext-RKSJ-) subststring { exch pop dup havefont { findfont false } { pop true } ifelse } { pop pop true } ifelse } ifelse { 1 index 1 eq { /Ryumin-Light-Ext-RKSJ-V havefont {/Ryumin-Light-Ext-RKSJ-V} {/Courier} ifelse } { /Ryumin-Light-83pv-RKSJ-H havefont {/Ryumin-Light-83pv-RKSJ-H} {/Courier} ifelse } ifelse findfont [1 0 0.5 1 0 0] makefont } if } { /Courier findfont } ifelse } ifelse _wv type /arraytype eq { _wv makeblendedfont } if dup length 10 add dict begin mark exch { 1 index /FID ne { def } if cleartomark mark } forall pop /FontScript exch def /FontDirection exch def /FontRequest exch def /FontName exch def counttomark 0 eq { 1 _useNativeEncoding eq { /Encoding _nativeEncoding def } if cleartomark } { /Encoding load 256 array copy modifyEncoding /Encoding exch def } ifelse FontName currentdict end definefont pop } def /tr { _ax _ay 3 2 roll } def /trj { _cx _cy _sp _ax _ay 6 5 roll } def /a0 { /Tx { dup currentpoint 3 2 roll tr _psf newpath moveto tr _ctm _pss } ddef /Tj { dup currentpoint 3 2 roll trj _pjsf newpath moveto trj _ctm _pjss } ddef } def /a1 { W B } def /e0 { /Tx { tr _psf } ddef /Tj { trj _pjsf } ddef } def /e1 { W F } def /i0 { /Tx { tr sp } ddef /Tj { trj jsp } ddef } def /i1 { W N } def /o0 { /Tx { tr sw rmoveto } ddef /Tj { trj swj rmoveto } ddef } def /r0 { /Tx { tr _ctm _pss } ddef /Tj { trj _ctm _pjss } ddef } def /r1 { W S } def /To { pop _ctm currentmatrix pop } def /TO { iTe _ctm setmatrix newpath } def /Tp { pop _tm astore pop _ctm setmatrix _tDict begin /W { } def /h { } def } def /TP { end iTm 0 0 moveto } def /Tr { _render 3 le { currentpoint newpath moveto } if dup 8 eq { pop 0 } { dup 9 eq { pop 1 } if } ifelse dup /_render exch ddef _renderStart exch get load exec } def /iTm { _ctm setmatrix _tm concat _shift aload pop _lineorientation 1 eq { exch } if translate _scale aload pop _lineorientation 1 eq _yokoorientation 1 eq or { exch } if scale } def /Tm { _tm astore pop iTm 0 0 moveto } def /Td { _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto } def /iTe { _render -1 eq { } { _renderEnd _render get dup null ne { load exec } { pop } ifelse } ifelse /_render -1 ddef } def /Ta { pop } def /Tf { 1 index type /nametype eq { dup 0.75 mul 1 index 0.25 mul neg } if /_fontDescent exch ddef /_fontAscent exch ddef /_fontSize exch ddef /_fontRotateAdjust _fontAscent _fontDescent add 2 div neg ddef /_fontHeight _fontSize ddef findfont _fontSize scalefont setfont } def /Tl { pop neg 0 exch _leading astore pop } def /Tt { pop } def /TW { 3 npop } def /Tw { /_cx exch ddef } def /TC { 3 npop } def /Tc { /_ax exch ddef } def /Ts { 0 exch _shift astore pop currentpoint iTm moveto } def /Ti { 3 npop } def /Tz { count 1 eq { 100 } if 100 div exch 100 div exch _scale astore pop iTm } def /TA { pop } def /Tq { pop } def /Tg { pop } def /TG { pop } def /Tv { /_lineorientation exch ddef } def /TV { /_charorientation exch ddef } def /Ty { dup /_yokoorientation exch ddef 1 sub neg Tv } def /TY { pop } def /T~ { Tx } def /Th { pop pop pop pop pop } def /TX { pop } def /Tk { _fontSize mul 1000 div _lineorientation 0 eq { neg 0 } { 0 exch } ifelse rmoveto pop } def /TK { 2 npop } def /T* { _leading aload pop _lineorientation 0 ne { exch } if Td } def /T*- { _leading aload pop _lineorientation 0 ne { exch } if exch neg exch neg Td } def /T- { _ax neg 0 rmoveto _lineorientation 1 eq _charorientation 0 eq and { 1 TV _hyphen Tx 0 TV } { _hyphen Tx } ifelse } def /T+ { } def /TR { _ctm currentmatrix pop _tm astore pop iTm 0 0 moveto } def /TS { currentfont 3 1 roll /_Symbol_ findfont _fontSize scalefont setfont 0 eq { Tx } { Tj } ifelse setfont } def /Xb { pop pop } def /Tb /Xb load def /Xe { pop pop pop pop } def /Te /Xe load def /XB { } def /TB /XB load def currentdict readonly pop end setpacking % /X^ { currentfont 5 1 roll dup havefont { findfont _fontSize scalefont setfont } { pop exch } ifelse 2 index 0 eq { Tx } { Tj } ifelse pop pop setfont } def /T^ /X^ load def %%EndResource %%BeginProcSet: Adobe_ColorImage_AI6 1.3 0 userdict /Adobe_ColorImage_AI6 known not { userdict /Adobe_ColorImage_AI6 53 dict put } if userdict /Adobe_ColorImage_AI6 get begin /initialize { Adobe_ColorImage_AI6 begin Adobe_ColorImage_AI6 { dup type /arraytype eq { dup xcheck { bind } if } if pop pop } forall } def /terminate { end } def currentdict /Adobe_ColorImage_AI6_Vars known not { /Adobe_ColorImage_AI6_Vars 41 dict def } if Adobe_ColorImage_AI6_Vars begin /plateindex -1 def /_newproc null def /_proc1 null def /_proc2 null def /sourcearray 4 array def /_ptispace null def /_ptiname null def /_pti0 0 def /_pti1 0 def /_ptiproc null def /_ptiscale 0 def /_pticomps 0 def /_ptibuf 0 string def /_gtigray 0 def /_cticmyk null def /_rtirgb null def /XIEnable true def /XIType 0 def /XIEncoding 0 def /XICompression 0 def /XIChannelCount 0 def /XIBitsPerPixel 0 def /XIImageHeight 0 def /XIImageWidth 0 def /XIImageMatrix null def /XIRowBytes 0 def /XIFile null def /XIBuffer1 null def /XIBuffer2 null def /XIBuffer3 null def /XIDataProc null def /XIColorSpace /DeviceGray def /XIColorValues 0 def /XIPlateList false def end /ci6colorimage /colorimage where {/colorimage get}{null} ifelse def /ci6image systemdict /image get def /ci6curtransfer systemdict /currenttransfer get def /ci6curoverprint /currentoverprint where {/currentoverprint get}{{_of}} ifelse def /ci6foureq { 4 index ne { pop pop pop false }{ 4 index ne { pop pop false }{ 4 index ne { pop false }{ 4 index eq } ifelse } ifelse } ifelse } def /ci6testplate { Adobe_ColorImage_AI6_Vars begin /plateindex -1 def /setcmykcolor where { pop gsave 1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub grestore 1 0 0 0 ci6foureq { /plateindex 0 def }{ 0 1 0 0 ci6foureq { /plateindex 1 def }{ 0 0 1 0 ci6foureq { /plateindex 2 def }{ 0 0 0 1 ci6foureq { /plateindex 3 def }{ 0 0 0 0 ci6foureq { /plateindex 5 def } if } ifelse } ifelse } ifelse } ifelse pop pop pop pop } if plateindex end } def /ci6concatprocs { /packedarray where { pop dup type /packedarraytype eq 2 index type /packedarraytype eq or }{ false } ifelse { /_proc2 exch cvlit def /_proc1 exch cvlit def _proc1 aload pop _proc2 aload pop _proc1 length _proc2 length add packedarray cvx }{ /_proc2 exch cvlit def /_proc1 exch cvlit def /_newproc _proc1 length _proc2 length add array def _newproc 0 _proc1 putinterval _newproc _proc1 length _proc2 putinterval _newproc cvx } ifelse } def /ci6istint { type /arraytype eq } def /ci6isspot { dup type /arraytype eq { dup length 1 sub get /Separation eq }{ pop false } ifelse } def /ci6spotname { dup ci6isspot {dup length 2 sub get}{pop ()} ifelse } def /ci6altspace { aload pop pop pop ci6colormake } def /ci6numcomps { dup /DeviceGray eq { pop 1 }{ dup /DeviceRGB eq { pop 3 }{ /DeviceCMYK eq { 4 }{ 1 } ifelse } ifelse } ifelse } def /ci6marksplate { dup /DeviceGray eq { pop plateindex 3 eq }{ dup /DeviceRGB eq { pop plateindex 5 ne }{ dup /DeviceCMYK eq { pop plateindex 5 ne }{ dup ci6isspot { /findcmykcustomcolor where { pop dup length 2 sub get 0.1 0.1 0.1 0.1 5 -1 roll findcmykcustomcolor 1 setcustomcolor systemdict /currentgray get exec 1 ne }{ pop plateindex 5 ne } ifelse }{ pop plateindex 5 ne } ifelse } ifelse } ifelse } ifelse } def /ci6colormake { dup ci6numcomps exch 1 index 2 add 1 roll dup 1 eq {pop}{array astore} ifelse exch } def /ci6colorexpand { dup ci6spotname exch dup ci6istint { ci6altspace exch 4 1 roll }{ 1 3 1 roll } ifelse } def /ci6colortint { dup /DeviceGray eq { 3 1 roll 1 exch sub mul 1 exch sub exch }{ dup /DeviceRGB eq { 3 1 roll {1 exch sub 1 index mul 1 exch sub exch} forall pop 3 array astore exch }{ dup /DeviceCMYK eq { 3 1 roll {1 index mul exch} forall pop 4 array astore exch }{ 3 1 roll mul exch } ifelse } ifelse } ifelse } def /ci6colortocmyk { dup /DeviceGray eq { pop 1 exch sub 0 0 0 4 -1 roll 4 array astore }{ dup /DeviceRGB eq { pop aload pop _rgbtocmyk 4 array astore }{ dup /DeviceCMYK eq { pop }{ ci6altspace ci6colortint ci6colortocmyk } ifelse } ifelse } ifelse } def /ci6makeimagedict { 7 dict begin /ImageType 1 def /Decode exch def /DataSource exch def /ImageMatrix exch def /BitsPerComponent exch def /Height exch def /Width exch def currentdict end } def /ci6stringinvert { 0 1 2 index length 1 sub { dup 2 index exch get 255 exch sub 2 index 3 1 roll put } for } def /ci6stringknockout { 0 1 2 index length 1 sub { 255 2 index 3 1 roll put } for } def /ci6stringapply { 0 1 4 index length 1 sub { dup 4 index exch get 3 index 3 1 roll 3 index exec } for pop exch pop } def /ci6walkrgbstring { 0 3 index dup length 1 sub 0 3 3 -1 roll { 3 getinterval {} forall 5 index exec 3 index } for 5 {pop} repeat } def /ci6walkcmykstring { 0 3 index dup length 1 sub 0 4 3 -1 roll { 4 getinterval {} forall 6 index exec 3 index } for 5 { pop } repeat } def /ci6putrgbtograystr { .11 mul exch .59 mul add exch .3 mul add cvi 3 copy put pop 1 add } def /ci6putcmyktograystr { exch .11 mul add exch .59 mul add exch .3 mul add dup 255 gt { pop 255 } if 255 exch sub cvi 3 copy put pop 1 add } def /ci6rgbtograyproc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec XIBuffer3 dup 3 1 roll /ci6putrgbtograystr load exch ci6walkrgbstring end } def /ci6cmyktograyproc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec XIBuffer3 dup 3 1 roll /ci6putcmyktograystr load exch ci6walkcmykstring end } def /ci6separatecmykproc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec XIBuffer3 0 2 index plateindex 4 2 index length 1 sub { get 255 exch sub 3 copy put pop 1 add 2 index } for pop pop exch pop end } def /ci6compositeimage { dup 1 eq { pop pop image }{ /ci6colorimage load null ne { ci6colorimage }{ 3 1 roll pop sourcearray 0 3 -1 roll put 3 eq {/ci6rgbtograyproc}{/ci6cmyktograyproc} ifelse load image } ifelse } ifelse } def /ci6knockoutimage { gsave 0 ci6curtransfer exec 1 ci6curtransfer exec eq { 0 ci6curtransfer exec 0.5 lt }{ 0 ci6curtransfer exec 1 ci6curtransfer exec gt } ifelse {{pop 0}}{{pop 1}} ifelse systemdict /settransfer get exec ci6compositeimage grestore } def /ci6drawimage { ci6testplate -1 eq { pop ci6compositeimage }{ dup type /arraytype eq { dup length plateindex gt {plateindex get}{pop false} ifelse }{ { true }{ dup 1 eq {plateindex 3 eq}{plateindex 3 le} ifelse } ifelse } ifelse { dup 1 eq { pop pop ci6image }{ dup 3 eq { ci6compositeimage }{ pop pop sourcearray 0 3 -1 roll put /ci6separatecmykproc load ci6image } ifelse } ifelse }{ ci6curoverprint { 7 {pop} repeat }{ ci6knockoutimage } ifelse } ifelse } ifelse } def /ci6proctintimage { /_ptispace exch store /_ptiname exch store /_pti1 exch store /_pti0 exch store /_ptiproc exch store /_pticomps _ptispace ci6numcomps store /_ptiscale _pti1 _pti0 sub store level2? { _ptiname length 0 gt version cvr 2012 ge and { [/Separation _ptiname _ptispace {_ptiproc}] setcolorspace [_pti0 _pti1] ci6makeimagedict ci6image }{ [/Indexed _ptispace 255 {255 div _ptiscale mul _pti0 add _ptiproc}] setcolorspace [0 255] ci6makeimagedict ci6image } ifelse }{ _pticomps 1 eq { { dup { 255 div _ptiscale mul _pti0 add _ptiproc 255 mul cvi put } ci6stringapply } ci6concatprocs ci6image }{ { dup length _pticomps mul dup _ptibuf length ne {/_ptibuf exch string store}{pop} ifelse _ptibuf { exch _pticomps mul exch 255 div _ptiscale mul _pti0 add _ptiproc _pticomps 2 add -2 roll _pticomps 1 sub -1 0 { 1 index add 2 index exch 5 -1 roll 255 mul cvi put } for pop pop } ci6stringapply } ci6concatprocs false _pticomps /ci6colorimage load null eq {7 {pop} repeat}{ci6colorimage} ifelse } ifelse } ifelse } def /ci6graytintimage { /_gtigray 5 -1 roll store {1 _gtigray sub mul 1 exch sub} 4 1 roll /DeviceGray ci6proctintimage } def /ci6cmyktintimage { /_cticmyk 5 -1 roll store {_cticmyk {1 index mul exch} forall pop} 4 1 roll /DeviceCMYK ci6proctintimage } def /ci6rgbtintimage { /_rtirgb 5 -1 roll store {_rtirgb {1 exch sub 1 index mul 1 exch sub exch} forall pop} 4 1 roll /DeviceRGB ci6proctintimage } def /ci6tintimage { ci6testplate -1 eq { ci6colorexpand 3 -1 roll 5 -1 roll {0}{0 exch} ifelse 4 2 roll dup /DeviceGray eq { pop ci6graytintimage }{ dup /DeviceRGB eq { pop ci6rgbtintimage }{ pop ci6cmyktintimage } ifelse } ifelse }{ dup ci6marksplate { plateindex 5 lt { ci6colortocmyk plateindex get dup 0 eq ci6curoverprint and { 7 {pop} repeat }{ 1 exch sub exch {1 0}{0 1} ifelse () ci6graytintimage } ifelse }{ pop exch {0}{0 exch} ifelse 0 3 1 roll () ci6graytintimage } ifelse }{ ci6curoverprint { 8 {pop} repeat }{ pop pop pop {pop 1} 0 1 () /DeviceGray ci6proctintimage } ifelse } ifelse } ifelse } def /XINullImage { } def /XIImageMask { XIImageWidth XIImageHeight false [XIImageWidth 0 0 XIImageHeight neg 0 0] /XIDataProc load imagemask } def /XIImageTint { XIImageWidth XIImageHeight XIBitsPerPixel [XIImageWidth 0 0 XIImageHeight neg 0 0] /XIDataProc load XIType 3 eq XIColorValues XIColorSpace ci6tintimage } def /XIImage { XIImageWidth XIImageHeight XIBitsPerPixel [XIImageWidth 0 0 XIImageHeight neg 0 0] /XIDataProc load false XIChannelCount XIPlateList ci6drawimage } def /XG { pop pop } def /XF { 13 {pop} repeat } def /Xh { Adobe_ColorImage_AI6_Vars begin gsave /XIType exch def /XIImageHeight exch def /XIImageWidth exch def /XIImageMatrix exch def 0 0 moveto XIImageMatrix concat XIImageWidth XIImageHeight scale /_lp /null ddef _fc /_lp /imagemask ddef end } def /XH { Adobe_ColorImage_AI6_Vars begin grestore end } def /XIEnable { Adobe_ColorImage_AI6_Vars /XIEnable 3 -1 roll put } def /XC { Adobe_ColorImage_AI6_Vars begin ci6colormake /XIColorSpace exch def /XIColorValues exch def end } def /XIPlates { Adobe_ColorImage_AI6_Vars begin /XIPlateList exch def end } def /XI { Adobe_ColorImage_AI6_Vars begin gsave /XIType exch def cvi dup 256 idiv /XICompression exch store 256 mod /XIEncoding exch store pop pop /XIChannelCount exch def /XIBitsPerPixel exch def /XIImageHeight exch def /XIImageWidth exch def pop pop pop pop /XIImageMatrix exch def XIBitsPerPixel 1 eq { XIImageWidth 8 div ceiling cvi }{ XIImageWidth XIChannelCount mul } ifelse /XIRowBytes exch def XIEnable { /XIBuffer3 XIImageWidth string def XICompression 0 eq { /XIBuffer1 XIRowBytes string def XIEncoding 0 eq { {currentfile XIBuffer1 readhexstring pop} }{ {currentfile XIBuffer1 readstring pop} } ifelse }{ /XIBuffer1 256 string def /XIBuffer2 XIRowBytes string def {currentfile XIBuffer1 readline pop (%) anchorsearch {pop} if} /ASCII85Decode filter /DCTDecode filter /XIFile exch def {XIFile XIBuffer2 readstring pop} } ifelse /XIDataProc exch def XIType 1 ne { 0 setgray } if XIType 1 eq { XIImageMask }{ XIType 2 eq XIType 3 eq or { XIImageTint }{ XIImage } ifelse } ifelse }{ XINullImage } ifelse /XIPlateList false def grestore end } def end %%EndProcSet %%BeginResource: procset Adobe_Illustrator_AI5 1.3 0 %%Title: (Adobe Illustrator (R) Version 8.0 Full Prolog) %%Version: 1.3 0 %%CreationDate: (3/7/1994) () %%Copyright: ((C) 1987-1998 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_Illustrator_AI5_vars 112 dict dup begin put /_?cmyk false def /_eo false def /_lp /none def /_pf { } def /_ps { } def /_psf { } def /_pss { } def /_pjsf { } def /_pjss { } def /_pola 0 def /_doClip 0 def /cf currentflat def /_lineorientation 0 def /_charorientation 0 def /_yokoorientation 0 def /_tm matrix def /_renderStart [ /e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0 ] def /_renderEnd [ null null null null /i1 /i1 /i1 /i1 ] def /_render -1 def /_shift [0 0] def /_ax 0 def /_ay 0 def /_cx 0 def /_cy 0 def /_leading [ 0 0 ] def /_ctm matrix def /_mtx matrix def /_sp 16#020 def /_hyphen (-) def /_fontSize 0 def /_fontAscent 0 def /_fontDescent 0 def /_fontHeight 0 def /_fontRotateAdjust 0 def /Ss 256 string def Ss 0 (fonts/) putinterval /_cnt 0 def /_scale [1 1] def /_nativeEncoding 0 def /_useNativeEncoding 0 def /_tempEncode 0 def /_pntr 0 def /_tDict 2 dict def /_hfname 100 string def /_hffound false def /Tx { } def /Tj { } def /CRender { } def /_AI3_savepage { } def /_gf null def /_cf 4 array def /_rgbf 3 array def /_if null def /_of false def /_fc { } def /_gs null def /_cs 4 array def /_rgbs 3 array def /_is null def /_os false def /_sc { } def /_pd 1 dict def /_ed 15 dict def /_pm matrix def /_fm null def /_fd null def /_fdd null def /_sm null def /_sd null def /_sdd null def /_i null def /_lobyte 0 def /_hibyte 0 def /_cproc null def /_cscript 0 def /_hvax 0 def /_hvay 0 def /_hvwb 0 def /_hvcx 0 def /_hvcy 0 def /_bitfont null def /_bitlobyte 0 def /_bithibyte 0 def /_bitkey null def /_bitdata null def /_bitindex 0 def /discardSave null def /buffer 256 string def /beginString null def /endString null def /endStringLength null def /layerCnt 1 def /layerCount 1 def /perCent (%) 0 get def /perCentSeen? false def /newBuff null def /newBuffButFirst null def /newBuffLast null def /clipForward? false def end userdict /Adobe_Illustrator_AI5 known not { userdict /Adobe_Illustrator_AI5 100 dict put } if userdict /Adobe_Illustrator_AI5 get begin /initialize { Adobe_Illustrator_AI5 dup begin Adobe_Illustrator_AI5_vars begin /_aicmykps where {pop /_?cmyk _aicmykps def}if discardDict { bind pop pop } forall dup /nc get begin { dup xcheck 1 index type /operatortype ne and { bind } if pop pop } forall end newpath } def /terminate { end end } def /_ null def /ddef { Adobe_Illustrator_AI5_vars 3 1 roll put } def /xput { dup load dup length exch maxlength eq { dup dup load dup length 2 mul dict copy def } if load begin def end } def /npop { { pop } repeat } def /hswj { dup stringwidth 3 2 roll { _hvwb eq { exch _hvcx add exch _hvcy add } if exch _hvax add exch _hvay add } cforall } def /vswj { 0 0 3 -1 roll { dup 255 le _charorientation 1 eq and { dup cstring stringwidth 5 2 roll _hvwb eq { exch _hvcy sub exch _hvcx sub } if exch _hvay sub exch _hvax sub 4 -1 roll sub exch 3 -1 roll sub exch } { _hvwb eq { exch _hvcy sub exch _hvcx sub } if exch _hvay sub exch _hvax sub _fontHeight sub } ifelse } cforall } def /swj { 6 1 roll /_hvay exch ddef /_hvax exch ddef /_hvwb exch ddef /_hvcy exch ddef /_hvcx exch ddef _lineorientation 0 eq { hswj } { vswj } ifelse } def /sw { 0 0 0 6 3 roll swj } def /vjss { 4 1 roll { dup cstring dup length 1 eq _charorientation 1 eq and { -90 rotate currentpoint _fontRotateAdjust add moveto gsave false charpath currentpoint 5 index setmatrix stroke grestore _fontRotateAdjust sub moveto _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto 90 rotate } { currentpoint _fontHeight sub 5 index sub 3 index _sp eq { 9 index sub } if currentpoint exch 4 index stringwidth pop 2 div sub exch _fontAscent sub moveto gsave 2 index false charpath 6 index setmatrix stroke grestore moveto pop pop } ifelse } cforall 6 npop } def /hjss { 4 1 roll { dup cstring gsave false charpath currentpoint 5 index setmatrix stroke grestore moveto _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto } cforall 6 npop } def /jss { _lineorientation 0 eq { hjss } { vjss } ifelse } def /ss { 0 0 0 7 3 roll jss } def /vjsp { 4 1 roll { dup cstring dup length 1 eq _charorientation 1 eq and { -90 rotate currentpoint _fontRotateAdjust add moveto false charpath currentpoint _fontRotateAdjust sub moveto _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto 90 rotate } { currentpoint _fontHeight sub 5 index sub 3 index _sp eq { 9 index sub } if currentpoint exch 4 index stringwidth pop 2 div sub exch _fontAscent sub moveto 2 index false charpath moveto pop pop } ifelse } cforall 6 npop } def /hjsp { 4 1 roll { dup cstring false charpath _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto } cforall 6 npop } def /jsp { matrix currentmatrix _lineorientation 0 eq {hjsp} {vjsp} ifelse } def /sp { matrix currentmatrix 0 0 0 7 3 roll _lineorientation 0 eq {hjsp} {vjsp} ifelse } def /pl { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform } def /setstrokeadjust where { pop true setstrokeadjust /c { curveto } def /C /c load def /v { currentpoint 6 2 roll curveto } def /V /v load def /y { 2 copy curveto } def /Y /y load def /l { lineto } def /L /l load def /m { moveto } def } { /c { pl curveto } def /C /c load def /v { currentpoint 6 2 roll pl curveto } def /V /v load def /y { pl 2 copy curveto } def /Y /y load def /l { pl lineto } def /L /l load def /m { pl moveto } def } ifelse /d { setdash } def /cf { } def /i { dup 0 eq { pop cf } if setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def /XR { 0 ne /_eo exch ddef } def /H { } def /h { closepath } def /N { _pola 0 eq { _doClip 1 eq { _eo {eoclip} {clip} ifelse /_doClip 0 ddef } if newpath } { /CRender { N } ddef } ifelse } def /n { N } def /F { _pola 0 eq { _doClip 1 eq { gsave _pf grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _fc /_doClip 0 ddef } { _pf } ifelse } { /CRender { F } ddef } ifelse } def /f { closepath F } def /S { _pola 0 eq { _doClip 1 eq { gsave _ps grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc /_doClip 0 ddef } { _ps } ifelse } { /CRender { S } ddef } ifelse } def /s { closepath S } def /B { _pola 0 eq { _doClip 1 eq gsave F grestore { gsave S grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc /_doClip 0 ddef } { S } ifelse } { /CRender { B } ddef } ifelse } def /b { closepath B } def /W { /_doClip 1 ddef } def /* { count 0 ne { dup type /stringtype eq { pop } if } if newpath } def /u { } def /U { } def /q { _pola 0 eq { gsave } if } def /Q { _pola 0 eq { grestore } if } def /*u { _pola 1 add /_pola exch ddef } def /*U { _pola 1 sub /_pola exch ddef _pola 0 eq { CRender } if } def /D { pop } def /*w { } def /*W { } def /` { /_i save ddef clipForward? { nulldevice } if 6 1 roll 4 npop concat pop userdict begin /showpage { } def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash /setstrokeadjust where {pop false setstrokeadjust} if newpath 0 setgray false setoverprint } def /~ { end _i restore } def /_rgbtocmyk { 3 { 1 exch sub 3 1 roll } repeat 3 copy 1 4 1 roll 3 { 3 index 2 copy gt { exch } if pop 4 1 roll } repeat pop pop pop 4 1 roll 3 { 3 index sub 3 1 roll } repeat 4 -1 roll } def /setrgbfill { _rgbf astore pop /_fc { _lp /fill ne { _of setoverprint _rgbf aload pop setrgbcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /setrgbstroke { _rgbs astore pop /_sc { _lp /stroke ne { _os setoverprint _rgbs aload pop setrgbcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /O { 0 ne /_of exch ddef /_lp /none ddef } def /R { 0 ne /_os exch ddef /_lp /none ddef } def /g { /_gf exch ddef /_fc { _lp /fill ne { _of setoverprint _gf setgray /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /G { /_gs exch ddef /_sc { _lp /stroke ne { _os setoverprint _gs setgray /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /k { _cf astore pop /_fc { _lp /fill ne { _of setoverprint _cf aload pop setcmykcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /K { _cs astore pop /_sc { _lp /stroke ne { _os setoverprint _cs aload pop setcmykcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /Xa { _?cmyk { 3 npop k }{ setrgbfill 4 npop } ifelse } def /XA { _?cmyk { 3 npop K }{ setrgbstroke 4 npop } ifelse } def /Xs { /_gf exch ddef 5 npop /_fc { _lp /fill ne { _of setoverprint _gf setAIseparationgray /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /XS { /_gs exch ddef 5 npop /_sc { _lp /stroke ne { _os setoverprint _gs setAIseparationgray /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /Xx { exch /_gf exch ddef 0 eq { findcmykcustomcolor }{ _?cmyk {true}{/findrgbcustomcolor where{pop false}{true}ifelse}ifelse { 4 1 roll 3 npop findcmykcustomcolor }{ 8 -4 roll 4 npop findrgbcustomcolor } ifelse } ifelse /_if exch ddef /_fc { _lp /fill ne { _of setoverprint _if _gf 1 exch sub setcustomcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /XX { exch /_gs exch ddef 0 eq { findcmykcustomcolor }{ _?cmyk {true}{/findrgbcustomcolor where{pop false}{true}ifelse}ifelse { 4 1 roll 3 npop findcmykcustomcolor }{ 8 -4 roll 4 npop findrgbcustomcolor } ifelse } ifelse /_is exch ddef /_sc { _lp /stroke ne { _os setoverprint _is _gs 1 exch sub setcustomcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /x { /_gf exch ddef findcmykcustomcolor /_if exch ddef /_fc { _lp /fill ne { _of setoverprint _if _gf 1 exch sub setcustomcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /X { /_gs exch ddef findcmykcustomcolor /_is exch ddef /_sc { _lp /stroke ne { _os setoverprint _is _gs 1 exch sub setcustomcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /XK { 3 -1 roll pop 0 eq { 1 exch sub 3 {dup 3 1 roll mul 5 1 roll} repeat mul 4 1 roll K } { 1 exch sub 4 1 roll 3 {1 exch sub 3 index mul 1 exch sub 3 1 roll} repeat 4 -1 roll pop XA } ifelse } def /Xk { 3 -1 roll pop 0 eq { 1 exch sub 3 {dup 3 1 roll mul 5 1 roll} repeat mul 4 1 roll k } { 1 exch sub 4 1 roll 3 {1 exch sub 3 index mul 1 exch sub 3 1 roll} repeat 4 -1 roll pop Xa } ifelse } def /A { pop } def /annotatepage { userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse } def /XT { pop pop } def /Xt { pop } def /discard { save /discardSave exch store discardDict begin /endString exch store gt38? { 2 add } if load stopped pop end discardSave restore } bind def userdict /discardDict 7 dict dup begin put /pre38Initialize { /endStringLength endString length store /newBuff buffer 0 endStringLength getinterval store /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store /newBuffLast newBuff endStringLength 1 sub 1 getinterval store } def /shiftBuffer { newBuff 0 newBuffButFirst putinterval newBuffLast 0 currentfile read not { stop } if put } def 0 { pre38Initialize mark currentfile newBuff readstring exch pop { { newBuff endString eq { cleartomark stop } if shiftBuffer } loop } { stop } ifelse } def 1 { pre38Initialize /beginString exch store mark currentfile newBuff readstring exch pop { { newBuff beginString eq { /layerCount dup load 1 add store } { newBuff endString eq { /layerCount dup load 1 sub store layerCount 0 eq { cleartomark stop } if } if } ifelse shiftBuffer } loop } if } def 2 { mark { currentfile buffer {readline} stopped { % assume error was due to overfilling the buffer }{ not { stop } if endString eq { cleartomark stop } if }ifelse } loop } def 3 { /beginString exch store /layerCnt 1 store mark { currentfile buffer {readline} stopped { % assume error was due to overfilling the buffer }{ not { stop } if dup beginString eq { pop /layerCnt dup load 1 add store } { endString eq { layerCnt 1 eq { cleartomark stop } { /layerCnt dup load 1 sub store } ifelse } if } ifelse }ifelse } loop } def end userdict /clipRenderOff 15 dict dup begin put { /n /N /s /S /f /F /b /B } { { _doClip 1 eq { /_doClip 0 ddef _eo {eoclip} {clip} ifelse } if newpath } def } forall /Tr /pop load def /Bb {} def /BB /pop load def /Bg {12 npop} def /Bm {6 npop} def /Bc /Bm load def /Bh {4 npop} def end /Lb { 6 npop 7 2 roll 5 npop 0 eq { 0 eq { (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard } { /clipForward? true def /Tx /pop load def /Tj /pop load def currentdict end clipRenderOff begin begin } ifelse } { 0 eq { save /discardSave exch store } if } ifelse } bind def /LB { discardSave dup null ne { restore } { pop clipForward? { currentdict end end begin /clipForward? false ddef } if } ifelse } bind def /Pb { pop pop 0 (%AI5_EndPalette) discard } bind def /Np { 0 (%AI5_End_NonPrinting--) discard } bind def /Ln /pop load def /Ap /pop load def /Ar { 72 exch div 0 dtransform dup mul exch dup mul add sqrt dup 1 lt { pop 1 } if setflat } def /Mb { q } def /Md { } def /MB { Q } def /nc 4 dict def nc begin /setgray { pop } bind def /setcmykcolor { 4 npop } bind def /setrgbcolor { 3 npop } bind def /setcustomcolor { 2 npop } bind def currentdict readonly pop end /XP { 4 npop } bind def /XD { pop } bind def end setpacking %%EndResource %%BeginResource: procset Adobe_cshow 2.0 8 %%Title: (Writing System Operators) %%Version: 2.0 8 %%CreationDate: (1/23/89) () %%Copyright: ((C) 1992-1996 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_cshow 14 dict dup begin put /initialize { Adobe_cshow begin Adobe_cshow { dup xcheck { bind } if pop pop } forall end Adobe_cshow begin } def /terminate { currentdict Adobe_cshow eq { end } if } def /cforall { /_lobyte 0 ddef /_hibyte 0 ddef /_cproc exch ddef /_cscript currentfont /FontScript known { currentfont /FontScript get } { -1 } ifelse ddef { /_lobyte exch ddef _hibyte 0 eq _cscript 1 eq _lobyte 129 ge _lobyte 159 le and _lobyte 224 ge _lobyte 252 le and or and _cscript 2 eq _lobyte 161 ge _lobyte 254 le and and _cscript 3 eq _lobyte 161 ge _lobyte 254 le and and _cscript 25 eq _lobyte 161 ge _lobyte 254 le and and _cscript -1 eq or or or or and { /_hibyte _lobyte ddef } { _hibyte 256 mul _lobyte add _cproc /_hibyte 0 ddef } ifelse } forall } def /cstring { dup 256 lt { (s) dup 0 4 3 roll put } { dup 256 idiv exch 256 mod (hl) dup dup 0 6 5 roll put 1 4 3 roll put } ifelse } def /clength { 0 exch { 256 lt { 1 } { 2 } ifelse add } cforall } def /hawidthshow { { dup cstring show _hvax _hvay rmoveto _hvwb eq { _hvcx _hvcy rmoveto } if } cforall } def /vawidthshow { { dup 255 le _charorientation 1 eq and { -90 rotate 0 _fontRotateAdjust rmoveto cstring _hvcx _hvcy _hvwb _hvax _hvay 6 -1 roll awidthshow 0 _fontRotateAdjust neg rmoveto 90 rotate } { currentpoint _fontHeight sub exch _hvay sub exch _hvax sub 2 index _hvwb eq { exch _hvcy sub exch _hvcx sub } if 3 2 roll cstring dup stringwidth pop 2 div neg _fontAscent neg rmoveto show moveto } ifelse } cforall } def /hvawidthshow { 6 1 roll /_hvay exch ddef /_hvax exch ddef /_hvwb exch ddef /_hvcy exch ddef /_hvcx exch ddef _lineorientation 0 eq { hawidthshow } { vawidthshow } ifelse } def /hvwidthshow { 0 0 3 -1 roll hvawidthshow } def /hvashow { 0 0 0 6 -3 roll hvawidthshow } def /hvshow { 0 0 0 0 0 6 -1 roll hvawidthshow } def currentdict readonly pop end setpacking %%EndResource %%BeginResource: procset Adobe_shading_AI8 1.0 0 %%Title: (Adobe Illustrator 8 Shading Procset) %%Version: 1.0 0 %%CreationDate: (12/17/97) () %%Copyright: ((C) 1987-1997 Adobe Systems Incorporated All Rights Reserved) userdict /defaultpacking currentpacking put true setpacking userdict /Adobe_shading_AI8 10 dict dup begin put /initialize { Adobe_shading_AI8 begin Adobe_shading_AI8 bdprocs Mesh /initialize get exec } def /terminate { currentdict Adobe_shading_AI8 eq { end } if } def /bdprocs { { dup xcheck 1 index type /arraytype eq and { bind } if pop pop } forall } def /X! {pop} def /X# {pop pop} def /Mesh 40 dict def Mesh begin /initialize { Mesh bdprocs Mesh begin /emulate? /AI8MeshEmulation where { pop AI8MeshEmulation }{ systemdict /shfill known not } ifelse def end } def /bd { shadingdict begin } def /paint { emulate? { end }{ /_lp /none ddef _fc /_lp /none ddef /AIColorSpace AIColorSpace tocolorspace store /ColorSpace AIColorSpace topsspace store version_ge_3010.106 not systemdict /setsmoothness known and { 0.0001 setsmoothness } if composite? { /DataSource getdatasrc def Matrix concat currentdict end shfill }{ AIColorSpace makesmarks AIPlateList markingplate and not isoverprint and { end }{ /ColorSpace /DeviceGray store /Decode [0 1 0 1 0 1] store /DataSource getplatesrc def Matrix concat currentdict end shfill } ifelse } ifelse } ifelse } def /shadingdict 12 dict def shadingdict begin /ShadingType 6 def /BitsPerCoordinate 16 def /BitsPerComponent 8 def /BitsPerFlag 8 def end /datafile null def /databuf 256 string def /dataptr 0 def /srcspace null def /srcchannels 0 def /dstchannels 0 def /dstplate 0 def /srctodstcolor null def /getplatesrc { /srcspace AIColorSpace store /srcchannels AIColorSpace getnchannels store /dstchannels 1 store /dstplate getplateindex store /srctodstcolor srcspace makesmarks { dstplate 4 eq { {1 exch sub} }{ {srcspace tocmyk 3 dstplate sub index 1 exch sub 5 1 roll 4 {pop} repeat} } ifelse }{ {srcchannels {pop} repeat 1} } ifelse store /datafile getdatasrc store /rdpatch168 load DataLength () /SubFileDecode filter } def /getdatasrc { /rdcmntline load /ASCII85Decode filter } def /rdpatch168 { /dataptr 0 store 49 rdcount 4 { dup {pop srcchannels getint8} if dup {pop srctodstcolor dstchannels putint8 true} if } repeat {databuf 0 dataptr getinterval}{()} ifelse } def /rdpatch3216 { /dataptr 0 store 97 rdcount 4 { dup {pop srcchannels getint16} if dup {pop srctodstcolor dstchannels putint16 true} if } repeat {databuf 0 dataptr getinterval}{()} ifelse } def /rdcount { dup 0 gt { datafile databuf dataptr 4 -1 roll getinterval readstring exch length dataptr add /dataptr exch store }{ true } ifelse } def /getint8 { mark true 3 -1 roll { dup {pop datafile read} if dup {pop 255 div true} if } repeat { counttomark 1 add -1 roll pop true }{ cleartomark false } ifelse } def /putint8 { dup dataptr add /dataptr exch store dataptr exch { 1 sub exch 255 mul cvi databuf 2 index 3 -1 roll put } repeat pop } def /getint16 { mark true 3 -1 roll { dup {pop datafile read} if dup {pop 256 mul datafile read} if dup {pop add 65535 div true} if } repeat { counttomark 1 add -1 roll pop true }{ cleartomark false } ifelse } def /putint16 { dup 2 mul dataptr add /dataptr exch store dataptr exch { 2 sub exch 65535 mul cvi dup 256 idiv databuf 3 index 3 -1 roll put 256 mod databuf 2 index 1 add 3 -1 roll put } repeat pop } def /srcbuf 256 string def /rdcmntline { currentfile srcbuf readline pop (%) anchorsearch {pop} if } def /getplateindex { 0 [cyan? magenta? yellow? black? customColor?] {{exit} if 1 add} forall } def /aicsarray 4 array def /aicsaltvals 4 array def /aicsaltcolr aicsaltvals def /tocolorspace { dup type /arraytype eq { mark exch aload pop aicsarray 0 3 -1 roll put aicsarray 1 3 -1 roll put dup aicsarray 2 3 -1 roll put gettintxform aicsarray 3 3 -1 roll put counttomark aicsaltvals 0 3 -1 roll getinterval /aicsaltcolr exch store aicsaltcolr astore pop pop aicsarray } if } def /subtintxform {aicsaltcolr {1 index mul exch} forall pop} def /addtintxform {aicsaltcolr {1 sub 1 index mul 1 add exch} forall pop} def /gettintxform { /DeviceRGB eq {/addtintxform}{/subtintxform} ifelse load } def /getnchannels { dup type /arraytype eq {0 get} if colorspacedict exch get begin Channels end } def /makesmarks { composite? { pop true }{ dup dup type /arraytype eq {0 get} if colorspacedict exch get begin MarksPlate end } ifelse } def /markingplate { composite? { pop true }{ dup type /arraytype eq { dup length getplateindex gt {getplateindex get}{pop false} ifelse } if } ifelse } def /tocmyk { dup dup type /arraytype eq {0 get} if colorspacedict exch get begin ToCMYK end } def /topsspace { dup dup type /arraytype eq {0 get} if colorspacedict exch get begin ToPSSpace end } def /colorspacedict 5 dict dup begin /DeviceGray 4 dict dup begin /Channels 1 def /MarksPlate {pop black?} def /ToCMYK {pop 1 exch sub 0 0 0 4 -1 roll} def /ToPSSpace {} def end def /DeviceRGB 4 dict dup begin /Channels 3 def /MarksPlate {pop isCMYKSep?} def /ToCMYK {pop _rgbtocmyk} def /ToPSSpace {} def end def /DeviceCMYK 4 dict dup begin /Channels 4 def /MarksPlate {pop isCMYKSep?} def /ToCMYK {pop} def /ToPSSpace {} def end def /Separation 4 dict dup begin /Channels 1 def /MarksPlate { /findcmykcustomcolor where { pop dup 1 exch ToCMYK 5 -1 roll 1 get findcmykcustomcolor 1 setcustomcolor systemdict /currentgray get exec 1 ne }{ pop false } ifelse } def /ToCMYK { dup 2 get mark exch 4 2 roll 3 get exec counttomark -1 roll tocmyk 5 -1 roll pop } def /ToPSSpace {} def end def /Process 4 dict dup begin /Channels 1 def /MarksPlate { isCMYKSep? { 1 exch ToCMYK 4 array astore getplateindex get 0 ne }{ pop false } ifelse } def /ToCMYK { dup 2 get mark exch 4 2 roll 3 get exec counttomark -1 roll tocmyk 5 -1 roll pop } def /ToPSSpace { 4 array copy dup 0 /Separation put } def end def end def /isoverprint { /currentoverprint where {pop currentoverprint}{_of} ifelse } def /version_ge_3010.106 { version {cvr} stopped { pop false }{ 3010.106 ge } ifelse } def end end defaultpacking setpacking %%EndResource %%EndProlog %%BeginSetup userdict /_useSmoothShade false put userdict /_aicmykps false put userdict /_forceToCMYK false put Adobe_level2_AI5 /initialize get exec Adobe_cshow /initialize get exec Adobe_Illustrator_AI5_vars Adobe_Illustrator_AI5 Adobe_typography_AI5 /initialize get exec Adobe_ColorImage_AI6 /initialize get exec Adobe_shading_AI8 /initialize get exec Adobe_Illustrator_AI5 /initialize get exec %AI3_BeginRider currentpacking true setpacking %%BeginFont: CoreTTI2k %!PS-AdobeFont-1.0: CoreTTI2k 001.000 %%CreationDate: 11/7/00 at 8:46 PM %%VMusage: 1024 33176 % Generated by Fontographer 4.1.5 % 30 em space before and after for a-z and A-Z, for math variables. en space before and after basic math operators. opt 0-9 for sub and opt shift 0-9 for sup. sub for A-Z needs nudge to left. Last Update May 27, 98. Math Pi compatible. % ADL: 800 200 0 %%EndComments FontDirectory/CoreTTI2k known{/CoreTTI2k findfont dup/UniqueID known{dup /UniqueID get 4415770 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 20 dict begin /FontInfo 16 dict dup begin /version (001.000) readonly def /FullName (CoreTTI2k) readonly def /FamilyName (CoreTTI2k) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -133 def /UnderlineThickness 20 def /Notice (30 em space before and after for a-z and A-Z, for math variables. en space before and after basic math operators. opt 0-9 for sub and opt shift 0-9 for sup. sub for A-Z needs nudge to left. Last Update May 27, 98. Math Pi compatible.) readonly def /em 1000 def /ascent 800 def /descent 200 def end readonly def /FontName /CoreTTI2k def /Encoding 256 array dup 0/NUL put dup 1/Eth put dup 2/eth put dup 3/Lslash put dup 4/lslash put dup 5/Scaron put dup 6/scaron put dup 7/Yacute put dup 8/yacute put dup 9/HT put dup 10/LF put dup 11/Thorn put dup 12/thorn put dup 13/CR put dup 14/Zcaron put dup 15/zcaron put dup 16/DLE put dup 17/DC1 put dup 18/DC2 put dup 19/DC3 put dup 20/DC4 put dup 21/onehalf put dup 22/onequarter put dup 23/onesuperior put dup 24/threequarters put dup 25/threesuperior put dup 26/twosuperior put dup 27/brokenbar put dup 28/minus put dup 29/multiply put dup 30/RS put dup 31/US put dup 32/space put dup 33/exclam put dup 34/quotedbl put dup 35/numbersign put dup 36/dollar put dup 37/percent put dup 38/ampersand put dup 39/quotesingle put dup 40/parenleft put dup 41/parenright put dup 42/asterisk put dup 43/plus put dup 44/comma put dup 45/hyphen put dup 46/period put dup 47/slash put dup 48/zero put dup 49/one put dup 50/two put dup 51/three put dup 52/four put dup 53/five put dup 54/six put dup 55/seven put dup 56/eight put dup 57/nine put dup 58/colon put dup 59/semicolon put dup 60/less put dup 61/equal put dup 62/greater put dup 63/question put dup 64/at put dup 65/A put dup 66/B put dup 67/C put dup 68/D put dup 69/E put dup 70/F put dup 71/G put dup 72/H put dup 73/I put dup 74/J put dup 75/K put dup 76/L put dup 77/M put dup 78/N put dup 79/O put dup 80/P put dup 81/Q put dup 82/R put dup 83/S put dup 84/T put dup 85/U put dup 86/V put dup 87/W put dup 88/X put dup 89/Y put dup 90/Z put dup 91/bracketleft put dup 92/backslash put dup 93/bracketright put dup 94/asciicircum put dup 95/underscore put dup 96/grave put dup 97/a put dup 98/b put dup 99/c put dup 100/d put dup 101/e put dup 102/f put dup 103/g put dup 104/h put dup 105/i put dup 106/j put dup 107/k put dup 108/l put dup 109/m put dup 110/n put dup 111/o put dup 112/p put dup 113/q put dup 114/r put dup 115/s put dup 116/t put dup 117/u put dup 118/v put dup 119/w put dup 120/x put dup 121/y put dup 122/z put dup 123/braceleft put dup 124/bar put dup 125/braceright put dup 126/asciitilde put dup 127/DEL put dup 128/Adieresis put dup 129/Aring put dup 130/Ccedilla put dup 131/Eacute put dup 132/Ntilde put dup 133/Odieresis put dup 134/Udieresis put dup 135/aacute put dup 136/agrave put dup 137/acircumflex put dup 138/adieresis put dup 139/atilde put dup 140/aring put dup 141/ccedilla put dup 142/eacute put dup 143/egrave put dup 144/ecircumflex put dup 145/edieresis put dup 146/iacute put dup 147/igrave put dup 148/icircumflex put dup 149/idieresis put dup 150/ntilde put dup 151/oacute put dup 152/ograve put dup 153/ocircumflex put dup 154/odieresis put dup 155/otilde put dup 156/uacute put dup 157/ugrave put dup 158/ucircumflex put dup 159/udieresis put dup 160/dagger put dup 161/degree put dup 162/cent put dup 163/sterling put dup 164/section put dup 165/bullet put dup 166/paragraph put dup 167/germandbls put dup 168/registered put dup 169/copyright put dup 170/trademark put dup 171/acute put dup 172/dieresis put dup 173/notequal put dup 174/AE put dup 175/Oslash put dup 176/infinity put dup 177/plusminus put dup 178/lessequal put dup 179/greaterequal put dup 180/yen put dup 181/mu put dup 182/partialdiff put dup 183/summation put dup 184/product put dup 185/pi put dup 186/integral put dup 187/ordfeminine put dup 188/ordmasculine put dup 189/Omega put dup 190/ae put dup 191/oslash put dup 192/questiondown put dup 193/exclamdown put dup 194/logicalnot put dup 195/radical put dup 196/florin put dup 197/approxequal put dup 198/Delta put dup 199/guillemotleft put dup 200/guillemotright put dup 201/ellipsis put dup 202/nbspace put dup 203/Agrave put dup 204/Atilde put dup 205/Otilde put dup 206/OE put dup 207/oe put dup 208/endash put dup 209/emdash put dup 210/quotedblleft put dup 211/quotedblright put dup 212/quoteleft put dup 213/quoteright put dup 214/divide put dup 215/lozenge put dup 216/ydieresis put dup 217/Ydieresis put dup 218/fraction put dup 219/currency put dup 220/guilsinglleft put dup 221/guilsinglright put dup 222/fi put dup 223/fl put dup 224/daggerdbl put dup 225/periodcentered put dup 226/quotesinglbase put dup 227/quotedblbase put dup 228/perthousand put dup 229/Acircumflex put dup 230/Ecircumflex put dup 231/Aacute put dup 232/Edieresis put dup 233/Egrave put dup 234/Iacute put dup 235/Icircumflex put dup 236/Idieresis put dup 237/Igrave put dup 238/Oacute put dup 239/Ocircumflex put dup 240/apple put dup 241/Ograve put dup 242/Uacute put dup 243/Ucircumflex put dup 244/Ugrave put dup 245/dotlessi put dup 246/circumflex put dup 247/tilde put dup 248/macron put dup 249/breve put dup 250/dotaccent put dup 251/ring put dup 252/cedilla put dup 253/hungarumlaut put dup 254/ogonek put dup 255/caron put readonly def /PaintType 0 def /FontType 1 def /StrokeWidth 0 def /FontMatrix[0.001 0 0 0.001 0 0]readonly def /UniqueID 4415770 def /FontBBox{-20 -250 1190 868}readonly def currentdict end currentfile eexec d8061d93a824650eefe2785f13cd28a8a226cfb75c073a18612be9489bc742ecbc9bb9ecbcb2fc8bc626a843ddb9a6ad99a6c6e3ed60b625a64883accb7959375d71da9bc68d812f90e4114d1a583e0eb174e66568d7b4e36ccfe1adee64c9c93a32d193b8e71ebcabc27b9529aa98e46d6e812d79babc1747fffb1174d378 c19a80248a13aab64f5b729cc5a4d7e1226b75fe04dccb771059961eba8b3d37d4296589518a31572df20a5ae15c13016cb12a184d944803e95caa3d64e1097974d613e275e79074d0c1850e9fc92ec0602043125c79bce15f7692434ccfae4a39246eb809794869522d32f356bd31d591b6aa3537b0db7de4c633e705471b 56cb1bdc99107c070f33f914ce4671a58cf773db3450f4e74cba3acbae6ad87664e91214b0a6501af032fc3ad666785c407792f79bbe0e7fc11f1ed90df4cc87eea09bec89b68e5dc6af3f9671a3c93a52fc6bc68098ae41d05978b27d285b097590d209ddadcc6f1a275574f9adb94a570f7f54f8a038afe020e0ec97f89f d662f86bc4cf3eccafc8bd6ae67b62af43d64c5c2bcd21b95a55893a0406276c1a1b8868078798227abb6900dc579830fff66aa174b8804a4573c0dfbea5001e605af17f72b90ccecb154efd0e0dbea7b5b47aad3522a68f822806b62ac3bf2119b2bb6e61a70fee7914cae4b2b554e726171a1a3b15e69aa48740e9465ce5 2b1b71988ba321a1162c43a856a0600a6f656817681ecf1c1170f39aaf0206c49e614af62021885050b33e1fec3d6af972505c1539adc6765e35e7964c06b9ec4f0dc2b8c1a9b7398e821db818806d61168ac097d966b88976b393f2cca958b4cb2e752e42aa3faf157e41c45769a57937b98d076b3db68961fe2531eac4c7 840849920886d3f01a029033363b567a55e004031ba2f914641fd670925a3e8a706efcbc990cf0d269fd87c8233d8a94fdf0aaf0946a618efdf7ceb7daaea2871bbb8cff68a5365d6734d5d4d9d9a0c9e20c27270c7340c8e4ea4915899bf1a2b67b4e6859ce217eed1da5a4cdf6017e485c88bcb524ec145153066e0faf57 2c2aec3902b7c6b275f70089dcde09e9d7874ef2c7920a2b4f454b2f7cb7870bbaac674bdef3f3ae569f03618d6bd6a89a9f9557f32f2544c65a7218af09d89f5ba716a6de215efcf3048e4b42d5edd4de8501a9e367ef85e9bc4050e83fbe0e3c93efe5c87259085392e69f1e527406c93201842c846ef9cc6aa525e63b9d b686a91bb937a975f2a4863388d9b373a099e732074d2fd243b0378ae86e109ae457aa9e541125dfe0840814f7a42d3ce7a7b6ee074f0e2c2e9464c81cdafed01b26b9bdb9528913fc0efd9252d88005e0720eccd65cf6c3e4ea6f13f377e7b3d53fb423587628cddced96166245a8e78a1d1d5e62a860c678b72bcd20bf9b 4ceca76da93838aa2dddce9069f162bdd2958c53f28427a4ab4306fb506e7ae780e8614940fafde28f6ccd9a02e155ea6dc39b86e38180ed4c433ba3215e9589439f728d188c2b1dbd712af1998ebe7e69443c913ff21d450e360b5a783b41f4945055d9a91567abf5e2dfae32b1af82049396532635b8e9698ba4ad9a0b88 e391030c50f71ca58b21b16dbd3188ddaeb6643b19e99524f43249fc80d67f16b256577e035abbc7c891aeb6481f3d6048ee3b6131bf2b0fc17976df595582ed5e8eaaf32591a479652552c41810c74509002774d56665f191aaf62edb8b47751f29bd200705a7a5a6b5e76839d169ae47479c2d3d55a9d81ebdb6e091a156 0465578f38cc59c5363b768b9848811bc6d7d64d0704c30dbbc10ff11298b7491b91777f679927d5f963675608a56b75992d4a9df8156637930911be671121f68ea7f9efaf62ade22403433cd6bd31ff505fa60ac7fdc3f121f46178c0f9402c969f199bae8962776793df275d71331c072bfb9868afccc75bea8fce800811 9edd2e1e85ead892ae38f2c7108af408029033a2f8c9ad9f88e70553231e6fba660f8167bbec8c09c57c5a259689d59f44ccdf72f3630b2ade40550e220798b5f90aeeff509b83c2157f283fb8b409383c9cb83cdc60694eae1c5cec75f5176d8d1b6db268b0531f5d8c021c7a0180e3c3fcb65385b37d47e497f5437ebea4 dcb1e4549089e4e99dc12983d777cbe13000df4224eab53b2204350e983ea31f291e630355d2f32f84842ff91c54d51e137862a0a953f845cea933d45f3892a54d21a8e804829d774ed173bde0af43c1626621aad4d319a869de3d8413b7fbdb8a6a8120403bda4caffe3d1ffb7261835f6db642052812f614ee2f67f2dd2e f3099dfb4fe6301584c7b98989676787d499fc16fbc1949ad4728512a296af2f3a4a9e5452f36303bd5a2cb56ecc5938499abea2b92015f05f1bca82f6be0bc3a66284a8971b3cb37925e215638608dfc52e7067733ef9d0880133ed248aaabcd990b55f076e39b611178b736c3515fc45683bcab2a82e417744f2985cf776 84b3bc20178396bebd83ac04115632d6cea58604e84489bd59058fae5c1e50d3f5393858248eed60a7dd4e8d449f3e3a516d83ebe4067e979986f558cefcfa47ca4c243e8e77127c869fccb5754ae916ec77b6efc4a11e964bb75a9e8f94f5c3696e2387f514f4038d03233bfc8de50535d3365782767846cf67eb8080c2ab db2b71db26f75c4fbc4a66850c49317b5da373789ad8838805bc20d64c17d8411de90b3a55784f950240d8d8a5138237c0e0be911649d2232bd634fba2633d07c452e81e340ba18653ce37202cd6152b9cb7c52b321530c7f5d0f75fb5800b1e72a89b2f46f123de33a2a15a5380ab3c73ca1a1ad5ad85d3aef94b4d22e4c9 216c58967d01b23d9d987c64a6dae8df7a76f2de8a0e99e2a2059e5296bf67e65443dca555153019e0bc0153b5b7c7894544e008d256b83fe174dbd36e93afc0dc75626421eb5c09098971a67b5adbccee4bf4fefeaeac3cdc60faceeae1bd889ca3c8a7f3d344272aab06c793b1ccbeef4d6c138889e27cf7f81ea28fe737 aacf67ccd36b4561ada5da440f651450ebd05e2653a3f4d6e73920122b90b993fdece1e318e3af999ef288d8b0f0d3ca872cebd62b23bcf5087dec6c5357d70476dd49fb80d44d9895cb4edcf9085815faa666d849a99d8ec47a536e5a25a3b323da7374fee5a2472d935ab946c58a35ed87cf06de234fcbd984eb222c3460 ce30023c313fed96c0c21e2a2192c4c34c8925bc874451a07874b990df4333617cf84fba63fe9da98ed25d3fdb5008fc4892afbdeb56fb64e655e9ff702702863941b4be8edcaa9eee79392b3600e21a63518c13db5194ced922c53740f54fa2bc5e8a5d79929b3ef11d6b63879cd175ba96b8d28dfa486b7ba086120725c0 3b403317c3fa07ebb7e070ecb4d2810e21eaa6001198185ee5bac601504b55cf19bd4304b44e8a06ba7b735abe7a5c6bd49ea5c7996fa442707a19b7a49d3bc39c9f1592b8eb553e4a024d0063e169acf280e988cd7b26434ad85eb1439b3dac330de1db4bb24522eb8b91d1934240d0a69b7f92abb1ae4d0c5026bb2cb5b2 f801eafa2c6ba1cdcb4799aeba705078051a2b315c6c626455ea49f71a884c7576b846ceff0532576f233cc9a9674bad16833273af061b377b6e458536f48a17bc9319dbede65735ca726740317a26b702c5c2c3514475d163a27abd2d2ce9cc0db8319917d528674e0c244654ab491309794f40e1ec0f75614f4fe36ca89b 4a297261e259d67ffd9db7ce6935d8fee5a830a82865379565a700ee915941aff9d14849934453ab0247ce576b95dbf93c97d7a5b7523c8813d39351213da3cd71a951113512988778d24aab22143c1c03f171a1568f7276b39df66e823a77efac23ef23f39bc7fcf616100f70e1f7aa0260d181fddcb5329e617d05fbd5ac 6d99f546d2c4a517570fc8278b5e3d7ab94fd4f3e46fa5626443189145e97bbbb186b8c815ca0acdccf4a25c4c5bbe1a822bc082fe6d9f8302848edff90a9b18047663f17c9c2f9e6cd3af1b155b609d1aed56c791ecb6589b18cc534cf13a1e20c61120833b21fb50e6e5a005c10aa1748662bdb6f215bfdcb9173543af0b b4d77ce5d112382c6c40c07869b988ed9984a873a5909cb435101064713300a1cc1440e6edd8c5fd83bfbc7e02e7cab66689a1bf48f41e1d36f6cf505cfce07cd6b2e10bc22f3c1b731ee51f4e8d661361f1906cfacdc9a190808a1cfb9b0e221f3b7135ab45e45821a6ab6610d8c6d2a9b96989f47253cd6d386d2b8a7dd5 f07dc2e30977b62c13667848e173a4d0d15bf232de6ee11a27623712b7ebe72fc27edf4c9b8d19fd941febbac52b964b39df574088d0dc13b924db248c1d4ecd9bc6fac0c9b4b6283010a29be1bddca21137956b40832e6b26cb940306c4ea94ef72d6a2478f960e5b687c3967a5cecd138fabc2c8aaa65fdfb3da68bbba8b d800ead45dd4a3f0cbc9973054ac32c36ca1879e9e94e19ba2e430fecdba0e550db950854fd71322c50d681285669026afa396a1855553b12bd40c61c963459e6e85152e101a10015c6a602803c73ce5f50399180287213ce988445a0e83bd4141aee596719d6b3d6757227a0208b1353ab59d663fe7b5062a4ba90407544a c5da2927db04e83cf9c5dda9705244573a389e4cef6890eafac38239c207419ec1500d667e673a8c0cf60c7e496756370fe34c37652dfc582a058dea0a0f5d9fc0b350e40af19e5991cd8194fd36abd9ad528e4823884fc41f3d463d69897f0a4da0f79bc5f13f289f917e55a5a8d62c3769d775ca32db8beb9ecd1e84f4bb 5401458a9e745628d056ea96494ff207de79c55ee75f0731bd105ff2a442a8c9e80b42245537481a8eb35599ce826f7a46dc27d4a519b3a5efe82bcf1e5887beb75494efea24f452d7d4993d6bb7131d7c5fd51654ab849bf1112f6d685363a53f7077bac898185e6b5557ab4e7e8c8c23e5a7e1527549d0e67dedf780199e 0c469b087ad29b96615ba73e8399773ef13931e7dec0f42b6c12d4690b0a1e6311f3687fca067426731a3ac8fbe660f7e1631e8cf2ed5c73e6b3557ea7779d13269a5b2cf8a072fd68c4a0c749d66d9fdd091bf279642305f566d20eccd46c5a7ae7cce4de262d2cf29e02d0a811f39c77ad72176311f92d22b040eca7cc65 fbd46185cefadd51f1360c54d9335aa468014e7736247d8c7d54f610a34fbb97253d5d7f177d2074898e31a4b36b5451e3eafd20f24aaf91747a847a0f65e64054b2b7870ae6f7e4fdbfb6bcc6b34450b3ff318efbe8efdd50cdd38601b9491333bfbfabb3029dc791f3aa9269097953be59e9b2d67609abae5eb367dbe773 0e366dcb68d4a8b49bf369e480d6c72585eb3d3d53582686f91e88a8f9f57982c0a173d81c8176fe43ec9e096743359b77fdb9e3fe44339ca54a625e628c5cd332d2497dbd453de3421966d7743e3dfef3b9c777c946a696d440ee0fa4da3a4055e037444ea50dd535364dc08b091c6520cf2a549a7faf2fbc0bece55aac22 9722425160ea422caa9a9d63a598e8b3af81a4c06226ce1076e9fd4e574e70775b60af7c1bb84e0dba4780d95e420c550dc2c9012638281d1687cefbd38588171f7d3d49030e67587412e75bb3e9f1469fdf437edd38f49b0766393f15d344a20c6fba637553d00a023f3711180d6a8747cd09d50ce1688ebe8e5a949c8779 df79e20ff7df3a38ea6dad68625f1f69cf9a58b693c03dd48c13d9c38fd69ab6f53897a03598e6069c2119adf835116abf750149a6bb77031e21982bbbb7dec9bb16da55158f2f7a8a49e4e28c7869d48ae5c2df0429a6f3d14ca9683e3a5e6da11b5c1bd3290ffbb40bcea18edf01a20dd8a83fddb0c3704a82e434d03eea 5aafe94a22343f82fcfd1423afebdad29e6ca81b38248f9036b5f9e0ca634606e29633c311abe5443634d4fb3f24fe6e6fc69862bef7b484a74f34fe3da97b50b882221a03abdcb60008a2ea24f162a31d53691d5cc1087d1233729b166e0ff1c11b0d92cc7bf43e065e4e773d5d375e2e4a46122eda7ea300a5414c0c3afc 1a50ed85e855c5dd114a72f0ab06d6fae4ba15f32412a4baa22a2d3b1b98309ecfb9f8f48a1f162bb967eac6708033f718b8f006bc551202d9d972d217ee9537cc4d063bed24060b81d73774967fbd380e148a0d4778a27127798afc066b473ec9b0c5a614cb819fa57b5e0ce7e373e80423d0b5bcbc63dc8e013d9e398d10 58fd04ed2b5297d10993ac3c9dc735204dc8efcbdf608aa42a1719e4c4b9ae642b0691f97d96cc6435fb72cacbd285c90f838e91c34a7e221c073c5caa227a09126474a5ab7c65048f74cf3f9ed68c9ce7156a4adc10c234b497a10df9eebda6e11342fedc32fbb28ea88a49861cb3fc96290e0b43b0f3763e735e69188b3e 38f5b96e0edf4014351e332550cda072c25cd8cf546209304cf8432d8864a485e4ebaaff37cccfec19908466d963940f7af760b57de3e39ce4a29733f3f5fd9747bdde16cf475af24fe93b2df5f6bd7992eb6aab9c18876025fefa6917b90f860fdbaf7cbcfca7e5f4aed339a8628a007240184b31daf19b630695188c2f21 6b5902d4b384f82d2952c64477d229f99bb6355d42ae0951851d45fbccb0363d2ee5529179909c238a2ac078c4b543b936731ebf59365806a1d67a8138bb76aee02f84e09980ecaab40a240fd85e5024b3a286cd78850d3854f89260d8ecf1456ff46c20ddfb68298b5531bab764508d7f3eb41be3bc033125c016838db3d6 c1346e5423d7855d844b141e845b7df2f370fb875ade876353dfae59f631f83f192e3047d7d041d25d49114561885be97940b99bb7f47abcf9a417fa2acee0bb804be0a72b52def30a60780493f3a7a896a338f663ea7d352f0a875c80eb9a5ed1ea7a0b5620c5d2749ceb0a24c0a02b3c08134744a94ac8092d805b9f9c08 a508aa6ba372c264dfec115a2f3d870604ac0099eaaff87c75e1d26954a15a1e002f0829316d7364cde2b3c34a809ff72a0f9fa3332e19262b1c3262423045eee2530d7c2f6a88394add6bbe4098baa6155cb2dd09fd38b658053e466d4c13b1d8c1621020e91f83b8932d69adf517d5e9718dc8050e9281c690c39b5cf25d 4e367a41de636a8da3db2d4b5156e0a071863dd185bed2eec685e12e68f30afd3b58d61bbd3cb5532e77cff8b121a21281283136158d6898caa23ab1cde7657b96c2fd25df828b5c48a0da828232c2cdb26e0b7005a753d4a741e9fc226b0c72de2ce51164f0961fbd5002404858b9c6b27eeace58b7060fa6022535b167c0 9e637e1b0668a23740d6373b1380f02107781e87f2c71ad61422726d2a3c5b83be381dbb5a1425e6e1b3d4966d0b9ae0c1c0f7ad1ac56d9a8923c9045d01440066eebb28c8e6b4b6a0b7eb11b3bb3873a68c99e13ea811056d8698056dc4d724b81316db36abdb6708a85fa8feea17258f8fef11e4cdfb8ee0b65869dc94c0 843b751051603932ce78cc2df6901f286316cc1fd0be3dd1ed64ccb6631e0cd623eef9a79f4dcb0582a4b71762140ea7b9d072bdc86f08edabe3ee538f6ed36ec1f5037efd8db31fa2816dbd89b7d438f5fb672c69ac6d04e18623123af8b8394420fea23a8493540f76fb72da684e324d670fbfef9f8ffd037a724887293d 0f52d44b3b359ef6e5166930092e505cdb52ad23b3b980960fc39442eb2f461346dea66eb2c57f105a502a5780e866f8cd1eb5972f5e229f48b1a3f37d9872b3ee449f72a49ded67e32cefea7996cc630bf8a2ffd35090688f0ab92afe90d6c8d0f24690a35492adb76ac32bb45e7158608d5a1e092b663bccbd69a0835475 0e151fb402a981555e843c6e79578f23f8afcb5bc0e149bef56567f631b6ce2323c4a46d3a3f8586f2ce85d728d73976009b6baa686732ef9048960384539d179407640c52aad2857af06e570d9fd982dd6856572195046750343d55b3ec7d94258069db8ba09974382b441123617f0755bd92285ac3ac600caf707477cb5e b50e69cfb2f8f553fa1f5ea634e4aedf869e57f159f7ca4ca3313c538eca666a1218eacb68475c5d1bf2ef36d7b9f710cedfeac0a71f4f57cb8c77b68417e02fe6b11c64b0572503ef7002e6afeb0536b54f06877c75b5a3d643d62b0cd8a60ef3bddd415d27d12f3afcd3dffc30a18b7ea0e1626c6184fdaf1fc0470a7f2f 0cbd35c89b51feaf128b3c3bf2794aea25b0cbe21f0090534e15c241671d7b60d80047bed5ae5fe4775504e664a715706d8fbf6bd78735851d1a4fcfb44a29bc4a280294124fb3bbae16b12506202caa0c9a5cf9246c8829c2b614e0c8918a2b6030ee56532af0153ab812c274da1b05738275a6c0ba0af22b6382de80841d 78b67565294c01a885b611754ea0ba4a3c3ee3c053e54875a78a001b53f7b26ac3ab724cdc48e2c5a14a27ddb5e909eac5e41c2bd5ce5848327cd96258bff7253117fb479cfe5c3670958b84c8b798f99449f3818c3c1d10a4d694856f666ae25498811ad47074ccc2317ce438c8eaae2911c8c9fb75f81789d1e8ec4313ed f4245e109f537ec050a51024666b5081022680bd97433a67dac58bbd1f013c8849694c8b625cb584f1469edf7a694e78d833ab3d4564a886575e9cba3559558f95ce1d4b061b26f274e1ad23253bd63c05de0776ce09fe3b93150b4065ed8c9ee9795758170c216d007c31b1ba9e9086ceaf9f7dd7d43e939cdc45cfcecd15 f6c0efd9a95f7dec9baec0a512f481a6cde6cd1f2289f27383408996e671446fda1a39e04ecf51e4a96484012597b519fd3b882632d7c919f2572329541ef268b6bd1bff52778ba2743abee24c4fb2bf7ecb9ba6afbd624004acecdc3a9ec3a277cb3df18c7d3f7711e3caed6d4557d11541676111b6a86404abe734f8f30a 78143d822cc8de80e2cdbe7e9a21c4fb0a0310f956dbf23e989b5433359b72a0fd735db2101fbb7e9522c72742dc8501b91aeaa994e121e91f742fbdfc44772e2d3f7c195a1a4415c65db3f01ae3bc99fe636987ef362b2ad56a73dbff41bee18dcb86626a3074f38f439d0d6c120a67e08474c61df0316880bbee58fa234e 992dcbdfb555fdf51d8a5539a40da4993b43fc6ab02340c004081b45edbf23cd9469db156a8a237cbbba68bb834f3a436efc2a1920bd87db723342e60a5c5372c850182ef7cb2d7f61917abf38c96332a1927832c131fc9c3f0cd3bf7adeeba3794ebc4d062e30c5914f011a74ca3111f7f7f496f38424769062797af7692a 8d5d21f81d54e0efe6b0dacd03341dbe23ebad163134163ecd9ca33bffd91d2e5eb088d5367922e0da55d8ea3bc317ce852d4c24db9ad7b4f84e594cbf5f236f854c757a7244d5c60ced2a7e27995e28b730581c8f9b6d1176e66eecae8240cdf02b42ba95caefbb8b4dc82cf45873dfa637e3a5944c083ee5c5fb73ac02c4 ddeca3940b19e52ed7a565a8a330b36b2249ee7c73304946b4e904951e79f8713d0847bc3910ddd38afc19d17c754bd2d56e36637aaedd977853d37a7b289d5e23082098aec3917d342075251b333ead5ccf6442b63d0affdbafa4458f502a5ed48ed54a7841a15dff8424ba4ae565f2f3ae7426d57f87f3c0ec5a0fe0e630 58fd66f4e07deebe820d00743254c5aceefea368c96dd4502e35952e66e48c3a69024bba0003a83f5e832ba44effbc220950171451554066accf70808f8eb6e0aa6c0f903b56af89b97d494f5fa6eae244f0b5a03347a377f6d791ea71b8e3f06d072ccf5dafb1e49428468beae5f7f9f39474e5a8f185faeae0c2d4954cb6 f077edbcb7066fb7462806514de9031208d4c1ed5504f3ba555838da41cb7382f3190ea59ebc059ad50471fcf776ffbff5d3e46e5fea9dc9c70fb763e0315a2fb9cc8004812e5eb4988bc35597be8bce550cddab40962a5d42f6ad863ab0c8c3e58dac9856c3cfa282ab543019e5ac70c1eceb5ccc5af25f507fc7dc5a4a95 b114fa8610e9eb7f7bfc37afe1c3fe94f0268cc09083b9dfb2327b18802d2a623d34d8a555786ba49c3388c6f8126dc30de00572a07e750ca36ca5e5a62f64ef587085ae7a4f78756896c9a646376c987d6a63bc4b1b0b711d6d85eef9e0e7cbba27c96366af736b485ce96b16d8f9d921b377967b511b5cf8db57e7245dbf 800dc3dace88edf8e21cfac1728542b3dcb23796e28d31e781216a92bc96369b2e4b2eb5da23781cfe1e9fc08d546c731441e7ea4eb6c6292776a5397d8d66ac334904c3d74af2083938dfab70b66eb7adc3dbe6992d42daa97d71828f1ff4754550a7727dedfa72c4d5b3702a6a3b33f1866ebef207ed3044c09336b18327 40f5b651d4826c1bc8881848996d49602cc85e5ffba6cf576064eb0b070c0bba6277f26532048930277b85fd54d405dd7f415d00a94677882c0b41c848f7ae76300851a980f16d42e6ad0f4e85ef49de881188ae904d74a697b2168f618ec09e83035265bc550560830b5c3b97671e3165e481fb18b51d6196232010ecea8c ab31f9328362eeef6a7659071a380db48bd714e65d8c94cef971b1e7275e108404a0ebe22083eae29de4c9096dd1f21a03d0145c9e3339368332094a245d30d6e7e443a8a2f4cec7e532220a09ffc3a00ed489dd27faf21ee4f3087f1e5eff26fe2647c4ade8af2de4d5b6a3348bfa3fc0ebda66c6d72ec831d1bd5c3e403f 63856c68bfc54e63424687d4f01cf019785a65d9b9f1cfad5b9831db6e986782e76785af9977d422fc7c1f33e1f4a7535f8ea3c579e3077d485dc140aa6b79c725b238e0dcb499fb20b330e2107a46f0e8e6ca6baf209d5519447b11a08221cd3880671712df29a2cf21e595e3a5c8e9a98a10b9efbbc92691f1947aaaab4b 9ef3d1bc17b99985548b9d4e323a1de1175ed5e78d698c525d899205481d031028ce79c24aa38167447c4eeb2fd34261f1863d8d9a7106a420faa2e8e4bb69bb4b1f0e604165c23603c7d83a57ef6479d23c1545c1a9bc695223424f35dbfc532f9374bd56d82322d364c6f9a575a4bcbba95a1838103063a9ff5c1b344afe 32faf3601d714a6d9204244306f52e2646ab233ede79a3261b41692ce05802588b51d0d24f5ea09a9389035b52c5a94e8dbe23a762f0ceb6bfd789653f51eb0cc3b44ce9dda22e4c49a2875cf4259abc41c68f72cb94445f459a9bd66af3964cbf2a5aa8c5ff969c0cab446e98f72fc38204ff94c1548d9d57c78b7c2ff2fb 8e67cf0a4003044cb57ff0e5eec43f110729467484e0c93d6f56dcde2df34b6fb6fc5e6b91269f03f1fbe1c813c6a45e9f0165dc49295bc1e6da075b4cb6ed420d8d9b633ef4c6ba066a2f00aa418cb788ed3c9ae793668474b024921d53f4146a21d825bb5aee091b489020f4ff860dd5dc8b763c1dd91906c44d86cb55f8 32668604a8040241dbdeb32c7e4a5b3b5906f840cc3c516a09b3b0c33a96507889b2e92f2428c93a908a8c4b829d9ca4353c4964efacd741a58f81d26406489a333b90db67f40b85f3fd90006e9d6682603ba0cef50aea05124845f7ad1f93a37a4dd75dc450b8cd7cf2aecb5d9dc386e640c0b37d3bcb2ea8d1649c161d6a 817f0bdb785053a7b45e26b1ed08c16343882ca6a0fd31178e67b15ae6ee3896a851354cb1286591c54abd2e8b6fc6547aeab4c2fa2ea05d2df65d5a35ee09cd3b6f41e5c16897eac7953ed83c70ec4cdbc40771c81ceb8a46e5cc277584b8694a374442b18a9c85c5ced65393454c3a1133401a9afcf75ad075dd504a86b5 73761933c9a323958dff83fda7ed250a7608727e884cc0111fcfb897e835ba275eb8f28efb95d1ae869014ff606327127844b4be479f47141ec1ecb3771ff588f945c1a42a0999fd8774b262077245508f7721979fc102c15c01448184016ef20f67b0c5839d733319d8040fde6e24945c8b6d6bdeb18a40936667500338f1 7a5afe9f90c4a919ec89ed0063bba4ee85ae800efaa634a5b0135efa124d5e4bb9c5f662473534ac907ee59aa3b7ca6a7997f16e1c09940210209674e3a37e5899ba9b514559f2bcf7296daa669e54bb960c5e79ef4c42be2d28950a5c2fecea1c267fea64787b66fdd2898dcb95c523ab19d3863f8c3e03c5cc3f75648c6b 81adbe8ad896a91eb7b6e901f603f0d9b5615bdafaa580fb65fa6b0166f281b0972c4419ff7a9f70d17409ae3130fa82406c56a675b6df557280d218aca3175a62a748c66a5b95b3dca30c02db8a898c80567ea44345590c964a84e4099216e442820135395d32447c5cbc0b992e339ef096efefef09999795908f7d34285e 45af06289152b94949abf417b7648a4d08dac71780807fcc4d97134c395a03e32cda32e212dc178cc8d7e12bd92c1d29860fd225ff15f520436ff72e03f721f9a32880923a190713c605cfaf6b6e8babb6ab124e7468a42c401927d61073976577d12111be4a1a68ef6e7fbb1ae7ddb4c48f035b4b57bad3ec7f1161aa4273 59e3b6128011ec90cf38043f7c16f428e1b63dc8a3221c7048714a76d287847a43d9b439d31825270a7392a2878e8538d96f1e503aaea17e9fbb7e304636c655dcc22fca44d33a8493d42935ed7dca7179bc6d884587c3fa187357b530cd98ba8062551ec88655df8911956877dd3e9060dc795743dcdd0dd9cb56447ea2f7 5ad98adfca1f469d9705439c329214809769e58ed05c8f26c5d1fbe63efcde9727602e774da3cf691448c297fc4ff2e5a21bad840b3b3cdd48458fcdb3eb6ac021835b78bfb3a1b8738d1588e074bc2cb604d386a1a3ade601e71ecc14cd4d0fa76a1cecdeedc4946991bcd44468eeff0b0773af9a9b21afd6ed0868ca22eb 1bd3140308a3b23daad1a19007918cedcc60681a2f7af9d41a42f2fcaeb53f9f2721cb8867f5e123cb5b7c0f0bf6d57490b2462e43bd9ca49e780d7f706dd4715c6bedf7ec6460af6bc9413b36e7910399d529f7bef87241fd8626734a749394e806964ccf215af49b80fcdaae84397ff2fe6466eead079d31861eb9cfced9 f6f5700e6ab09631457c39b8f887b95552c52093fd6077ebbfffb8cbd3ba285d7cdd7d468e86412fc49b404d7d48cb6f319f6c74a39421a8cabedbab3ccde8a2987b8d3185eb6ab16367646d0daf8c23c4e4cc7ea50cdef14fabea7eb65349ca9edf6591a15249f402a7ef81f620486f2ac0b5c6cde82329327e356b9a381e c26788fbcbd0628665d60230353051fbb2c2c7e5ad8091548a394d9fc1bed5d97cc6e66cde33e0511dba7e00c28ea9bce6a2769e7123efc3293e70ff707a6737267a6e39cbb87cecdb545806ec32747fab3d55413fa45a0749db9272c9e2f2e30719c9ea9241f81a75390b230b06e852f0c2a5fe6f4b199e2624adc2540bab 17f8a73495e4bff343163678023085e116f891dcb7963565e1f52880dd66eb386ea3f08bcdd92a53f04d2aad7c529850a9327ba52c27189372185a6beca944e07f908230a58c046df0744315b1a769a148d3e7ffdab8e95c86a45a56936c92d41b9194a0453cb09a4c3d30e342afb890064a81ace239e38d3dc02de29f06ac 6a5ef21cd735cd87467baf1ba2bf663472bf785e7d22b480c6fdee540fffa6c0ec2ef38881bfe23e9b7d2a4d0050e5689b788e0fb919aee1a9ae6b23664e7d86b7d4f9ea0f5570abd5393f6ec836db530bd308d2fee73ed8c11bd82280ac4dabdd664d1fb5ffcbf094415679f4dd45f0da3a2c986643367bb3c5027f76c318 f10898a13cbba669b36603557841352e85c315fc94bdf312cac057a6f27b222ccdd3a916c0c000befe50e7436d0ca4f06e440720be0993e5ce3bb442a6936d773b0e0da6c3637018b626f8168b4ab2b0403edaafb30ffba6d4072813f92547e8b84666d59cd3dea6f57c44af2fb5dd43caf3c316bfa15e141153bed06d2122 de903a4c267ba0790a1f99d8986ecd51a84781dd462579721050dab0849f259425b1e71f403d0c50a8ef29a8d6870159c8e6edc396b0025b5972ad3525d9af7005bf8f8350d8a34b50bdf87380dfc95466c1d73a80a254bf98c5c0d00393fa0f7cd6fc1c1a16a4937c9ee69bfac73e860dd5266f2186f032ee568506bd0c53 721db7876711be826ff5c5c8b7b524389b74a385a10a525065ba0dd500229d98cae8feb024e334403ef68e2b76681fcf0b0b0feb85c38e42295d5bd45d00dcfa2e49a1a9318b69789184831df548f7d0eacc72a523e7358e9100a215f1f5d73d6116b8256922c1bca4e2a6ed84c639ccac8365648010f76ad9e6ab60e56de9 a5caec7f9369cf0dc664de27ec2078759303f2d0484aa36caf253a539f989ae851c147518eb3d991530d66e060d9a4495aa216f21934f4a1b071388a33a59f5a7a584f8fde110c281940a21ea430f3301af16b0d6518c277bfe63820c0be5834d03872ade4b2e1dd1e25971ec9a2c0deb0c63f1238f683561fbdbe2e4ac9e3 58ee63bee8a616204a8140d9a15aab73891eb06833a8bc111d52b11cf670f011dcc40eba92a985de25943bf5eedc18a8a38a04a6b5872d47021a3d5e1d08551be46e45ea44f7733176fac2812f49e71bdb3c9769a49fa1283dd6efff68680ba3e360e343688b52d11b839950e093740fe84a2d61021883a83e38ffb2e84f90 c44af4ea0afb852558a95d34dac13baedf162c84e6a3874e15e308ac5f84b5334243e6f832ce7fa2ea7f7ac969116924c3c2265942d7463df5c106f86a8988f015ca24ecbc0c3844490ff0e71a3a7b332ba72485738efb117bd52ed079b3c2b60c326a0ff773dfc499526bde79763ed9e3a897eea65a7ef3c7965fce7bb14f f84a69747fbc1fb98cb7c38e6729990cd4b63f1d5ed79475d253aec90323e5483bdc169bf8f8fb7e4ffb9efa365629d83b81cbc60ed44723f03645b06c31ba8563e5a5504ce5582a1d1a4c13461758f010e2702ea75de108b299070725f8017af466b10cda72cfd4b2a9d1bddc3adfe170bae4075af1023c58e8748e65cfac 9c7d849d88a9b707ebf36c5a8e51e2952eb5cc654d0509db8eb1d735c74dea2e40acd7e70a15420424ea54f88010c30f0d76c9513f694928723a7a317d94c243437a121c8097af6fcbe173ca8b9d24b2bc1cff9db0b67612d27ec8b026d4e7369c37b91bf16b6ad91cc078932b78273ca779c0d8241d5bb21e8732b7652cbf 08ae6395b50a7a6f995bbfc2750ef54b735b1f27d0136f83a2ec319e65068132e2b35fc4a0dcf1e4da580121307fa09efca7a72447f2ff36546ddddb0bdf0e2b916c923e4aea3e984c0485f524126ca89532f2d6eac77b4caa0eaae91c4ca54e9a0e318d7024cf576a2fc8dd06a76ff66b9d5d6a297863860ef34cf1ae07f3 5bbd9d8755446d2e8dab9aee81be1afdb8cd3e49aacfdd328b50c42bfa55f4b256a02311a2c8844a30d2b9f4a85f6c1f5e7bb6604c3f5dc72efe27ddc9e7964193aa92a741992df1a7b199660bba5ba46736bf70bb37dd2ec213de0dc40429cb1b5607457b8d63516b8142253f991c3f2f5632e817aba151c3995cd826daa8 a98c12e658f0c7a053d2480eb79179e1a3a8c4d70549ca812f76d4de133365a8c0e5e9dd84e0b2ab1aad7e422ec6e228f667c62cead78eee9f66e13747670e2e1c2fad27cccf4417e6bd54b8d1c960ee1ecd399e4241cbc66a296b2e67cbf251cdf9b09d8ec7050e8e2aff832873252b5b12c824089b1859bb4dea592c5256 c4478a820bf5c0e809c074cb1199cfcf141ccbfe47018b08e71c390faf9241ba818356b3823f918ef478611eaa5985023a2d278e9295bf203473f9d80ebe9524e1785309aec832c6b7e34b872d8e6e3a1a4504c6838acf9606c23b07434bd2f0e5315137e337cc182ee8381ed8f54405afb8936dbbcd1ac5df6ab8fa5cf61b 94bdb7db83a5dd5eb0a53082377cd254b0e4b528b37521855378238a46485d290d720a9f9d707d7caefc762327bbc451e2f365d10e44abf1beab8ab2bc9cce91e196b9cc9527813d9b293a7e6efd65e23d49e72cdc851705bb6aaaabedcd2adaaece01d449378f1710c4f240ba35ec48f9fcb9b76eaad7b5f4a6cc3a212073 6bcb6586c3e07c83b4110314f563123d90ea993c02f5b7eff445b2bca2facf34b492438b7bedb54bf4524769565bdf86021744d498f5d7e786fd85f6625d02caa2d8bc9320281a539ff9b75bdca106fa07db8a907a2d5ac7dd65715275ea3eec603e2a1a86056a20814ee2f1f773a3f687bc5b3d39778523d1583d96caf2a6 1ffc7ad65275dbb50f226e490b72583fc2f8e703e709a6ef73ce6744aa5144b3b7ed27228abb2d84704c164935b74530c636d6a13da6bd0594cf41dd78affdb57f9b5560490780ce191d8c453534cdd60b700f35b1ae31bfd9dc1fbfaba286a3130006c0637bc6ae014352368cfd72408977a2fd4316bec2bc80bed101e3e5 352279f99cb8163e58651c48f64f38c4e59c9d68424721a3420da2e4bc4e362b5c72719784f05931c293ee0c6ac3e33ebc9d3868958fc1adc1799e6a231489d4936f9941e019d4709061979915b31ab070300b1cf2ee1126997e477f82591d2a577bc1a7eef58fb1f889e712dadc91fdb9925341778812a3312b7105607654 d8c707ff3c9c796dacf7afd28499ad4fc0bf461ae1d4332de71455f6227df061e19da5d8131e047dbf0d1f9583585329ed0dfe23ccf1ee13518feb818b8f0c00b770649c297ff370892103c3769b53eaa15f377c41e12820def9c2a4aa77aab544204bba64e171dde2a1efc61d65b93595b558adc82a8bab8153b1862e9f02 dce65139873e35a18c45218dece2dafefdf07a4e6eb7101dd186bc3329232e992bad99eb530a7562262d8276c1375edb8e48d1844f69bf23e5ff28b9f338aad313b524d72012eda1b4041d88c32bbb4861b89592eb369289d9ac00de5618e03cfe9b8539f6c12b0995a63a9b4e0d78a62eea69767f7a91d4a48bb010f055e6 373afd3a5a0bec9d1a2a8380e74eef4a54fe68972e995b68e188868202cd94e238ca703e950b5bf0e8837de72dca4b63f5dea13954ed1ed08e28aeb6f48606bcd6586d59a3db656db1a216b4adb0c84a50643ebae055a3ab1e49a5af2d92a566faba326e414788c1752c98a0ee775c53b56bcd693c0c64af6bebf04c099cfe 0beeb1fe2eab5f0014403778f42583d25c0067f3598b15e62faafad0e3d5f3aa31980f02df0daceee5f9de422536c103e72d36acfeb950dbab37622e1340b75f22e63179558b5182ab03494bf69fbd5c98e7bb253c4d13ebfc8d91ad3ba0077567f6f8169284add000f0efafdc8c458ba8107e0d7c2484f15fc8bed50976db 212cfa761cbbddcad5a532b93beaacafa9643a88fac05c5b9ab4d9ccb8706ed5a2d34b4ca7bd94b310707306aecd6390f8031195203df40734d421fdb85f5c8cb53cec8a256fcd48b73280a40b1c587a8c704cfdeef75963f81bac932c3d229812decef3262511d55b40fc6469d083884ce3007d6bcdcb4ade0f29c422c2e4 7fb0ecba564edc8b68eabb8fc89c922ae3241998cfe134b7f56e336e6d3093ed9c63ef12c804a336ba82162af7bcf536fb9f67f694d483c4e7daacc3ad8c8a74b0e3e0cabe71b8a181ad12e611d1f89687a5c96f5f65a13c84465ebd61c30f2d13d435986438dbcadc2113ecf7d1a49a063946fe5ca415f623779b21946de0 921866efd848120cbb28874999dd01918d40416cf7cc32701d079c423576f5d7ec872f16599c86683d6a5b9ec1432bd5f35c6293e26a88f6a15b7539b8fb4e8fbaf55b74ed3a092f14636196f989e031160bb69e812c0cac70fcd843ec9e5c3323c5712da6145a733f31ebacd6a5c163c3893f2b282ff4231800cdf7993785 00956cf3f0dc1da7eea02fd910917ecb12466f13abb25d271ab9adddca9fba65483ac6a800393225ae46b907560c9e4f57e256b423622dc4146241d1bc6a2f0222236bd3ec8f4588753c3b67c06e1e574b50098db6d1f96f1f0d637254ff0ca8f8403fec4ec27cf91d4d194dfc629ff5385f0eb3de712fe0bf7ec8bc5f9884 101156a85cd14281237b7325a77e8e4fdfce63d630ebbf3561daa86bdf5a21b7ffb40ec2f05bb6f7c2aaa2fa1724306665fb9fe477451fc4fde5ee10cc0066a8849476310219b4e927a34221448e22529c897c8adc806915917273632415bb04840cbf5f9e2aab237c893201d8cd396f27c8ec5f01ced085259f321795e71d 5dd239534f05b30bef0b80c5ccc6f6f7052d2e8b9c2cc12ab619100711e0e6dae9151b4b71488c9f3124af5774739fde57219a1d0f7e4a8dc262d0ae4d40a322f81f0a3ecc5e91b926d1522885cc21375b80040d0abb46ebb24bf506be32c3bc21d21dcb2fc31962dc17eea080754ef7b4b34b35e046602e44599c9ae26604 01c32ee7fab7eafbc8e78c41a279981d2eaf8f1e475b4fd9a8a1dcd6d1b7725822d64fecc5a9f37c2fe873895920a1d44be6c1f90c6de819d3a394daf3e92ea1d19f5ecf7af0ea113ccb134bc2137e00dbe470a8fc05cde673488905bf11044580e31504c7b8dec357e154d775640a0d57c3f15c3eaa768551d5c1a50d6499 220d37c31cc5555eae1863fca09105c7839283d2486405893e08562b5f4d7f6472fcd054c1fa39c23b97d5e972823bd689a3fb9265a85d97f6bd0c6c3452bdbf568ed918d3f94ad14e2aa07de9e812732424daa896142769f00980dd6308dd60934187a0d976433aa3a5a4ab274e5ca25608a2e60596a87b8fe6c5d84770e1 890abab16a891bed100ef4ceaa05da9910eb439894ada184282f76319e9ce8a8fda3588c68cfe03629a30f56834248f16f8124f9cd16f6cafb8ffd8aff3fd9f7c09f47801d32628dd5f088ebe63fd25e2f09a98d7eeb8118b228b69fbd520f4f43fd3eba8d509ffac92b2d6b9c6cb9e41959abb9cacfad7b1aa4e65136f8da 9edf70269a820548fe65f66ed591e001a02312d8243c24122f091e5c681e448d1cd27ae9f1616c7811af77672d8dd6f848ea5b37024d1eaffca4d52ac6c26ca121a835ff676cb2f24fa18999913f5183d58b410196f8a161f79810d75ae2550142f0946c3db2094bf8ead972f86ea3538206227827bea7b44582835708cb55 ce28f25a547f2ccbf2801f23132a57d8e530eb410bc45c7de5f1d35fb099836e01ceb98d7d739cf9111373f4ddac6c934842478ffc4c4cd20499cc86e2df15ebaf7690dab56b3ec57c403c1903fbad8a113c24f5d3b925e55055fe730d43a7cb7eb83ddf841f4fbfd9b340d72c5927588aa0eea8cd3b4e05027aef294490ff b41ccf40b9ec4853a2844c68235075d6da0794d8e6c4d09376ab326ac9edbe6881211f37d95b7f9c2d4e5e6a76a16d3060de7896109cdbe1e18fec93094a912a83dbcde9cfd35da8cf11d8bd82bb7512fc86bc44747d2f4f258b1f4b572b892d74f442ddebfb3059407c70a6209049c93f172d279857d265b919eb24cf6e3d 4afbf10fcdd2ea40a6c6b88e6edaf384c19cc2c36341636a502b503f34b294bfe5f0150b17ad28e8ec8cb1ab9bcbf9d24054a4f934655ccc14ea67cc1c9262bea73c7c06a6c6a03b5ff06359e7e1e544f2fcda575f778272c05d90099fba8b3befb79407a935b8e92a0ccc69a058e5b8a1baeb4128d9e7e2818e4b4d77ecb1 e3e4bf74339cfc7b113e613f928fb0eb2f51981d5dc7a5f8bc7d70324e39acd4299b6af3815737ec1b60dfa1bf58a1caa3e335321934648e9b178c3db977ce6d9d003ae58197ce806656ecd646ad744aa2e6f79da9c9a283ed9e028d7d43934996cfbdeff5a38af4a3432c3449cc10dbb7fa5e64ef57c1985edf52c031f794 4a3d1889f417a99792e511bbad2c5280b9a1a803a2a7660e38506904f6313882d43f2b98a691c203093437aa48f5598db1ba16be38f0acf0dc436feac93362f0d974c2e7059ec28867993e7f5ac9480260d5abe3ebf978d4d1bf9bc7735527728603d033379229320a5cf4d17ddfeb3d1866bfa2327fcfcb23a82cc68ef80d 254b3c4dba4b55607c4b4d589e11c29bbfebff9ad30ed510beb9c015224be788097c809bc43c70d5bed736fcde876d68ac751ddac179ee62810a73bc1158a5ef02cfd9b5aa94f179be86c73ba6b857c9d53a94d75ae3c059e43dd66f62ec7be71641170093518c3cb6deb7053d3930891f4a9fd6083c5fa2a02d0e2661091e 9a6a19317d674ad89e183d16abb69443f6e359c96238b294e918aaf0de38e112b2acc59b64cc4b4f58ee7e043df5a6cd5668a66b358639535107e28f78c2d08dbd5eaea64db13b20355f71957d4f55033343a8cca9e5bfb1c27cc150d6384e04109eb3c09c25547186759c700ad3f47c9fc02ed4a97accbd5514e79c7b7e17 6d0581201a8053a338f49522e5b330a33c9c49bd3b3f47a85040f226f0284c58da22098717f811fbcc54ff00044e0756300acd478955cc3ef0cada8dc2ee473d346240bb9c565658b4473435be93832b2a4a7c0f448f25665992eaab8c68ceadce9b355d56dd5f87deaf429b9fc3189775c22101d9009230486d9d48b665b5 a409bc0cf9f4d4d9027d6382a1ce98b1aa8c119c36c2d09057ff0ded67208663e1cd1cb86326e1b0a5c505e15bb1086ad9775100a3fee5acd5f95a85b0cda25fae9291903827f7a8b602c00712aa432a68739fe71ad6097ba55fa234245109126649c05fd91cf9ea5e256cebf8b4407b79841ebc0c97b71bf7add8f6d0f9dd da8efc48e0fba8984c2ede403e1ce6da0c3677900f796ab64de3d122b1a1df771289e8e22af1ba4e70c04350ec7661a6d7a0a6df4d4261ebc5b0d16e40d4dd115807fc8227b7aeeb9f847a9b92ca69bbc544c440f800cb781e2092b0aa9cf643c1dbf1c752097a9d3b183e9178c8b9b9ec0cb55d055295f2bced19aadccef6 882470451310494973d5801a44953d3035475543f107304beae0d82716de5d7fd6d6a1b57a3a1b1f40c2e8dbdcc2e2de63b0692ef83b9396a90bd6fa65fd789594ad711036bd91abfb3c6efb1e3cf2acb15a8dac67e727627e07f4545e1b2424784c75d219fab22b8c40a7e6698ef1823bcbbf1fefb840a971e22a78726e4f c78ccba7a7a425fde67c4360b92891e7eccf1e20bb5d1679115782954ada2b2ee04e37262c9544b3ab63508c2653c73883c3e39b1e99b5ba87534e4cb26ba0e05195fff88398217274681c2f1bc41a3654f6fe4630d13667853a152ea45d7691a44852500e6f00b0252e73d81a7d03396e9dc1121546041b1cdf1e519e1e81 b65ab2d9e2bf71e6d50d029f7561b43f393922bdb68b8096b04b89143d8a790de1884ddcb5420d112535ff8caa1410aac9812e8a6ab252cf1e96576ffba3c5f12cdc6454589e3f65c1cb739c916df317e358bb2c36e95131f4866d19c371dc5e593da3fee9f043e5d8ef84a019d23c00f590f98bdb37927982bb14ebcf814f 5d8946baff5ce6f0ea2a610514b5bb30fda405c9d68ee9251a715231301df852384346f4dc78256bcc538d22b51acb541bbeafd2a674ee98949af5206ed377aaf36ae4438dd8e1e85b5b2c03cf63a1856bd391df20073b64561adc4c6a80befe701ec80e81d50bf58dbb65ba38f90db5b14036eeb359b5b5eca2a604100290 bfe3f719360a8760d9a4bef30dc932c0c7b84c45b1911d5cf46f4fefb588f2117cfbb0e74206032aed7432f59a806abecee8c7720263d7724d13386f95970adf45a5bfce9fcb611942c060d6c5f199ac9dcdc13ac7caf87834aa779e5fdb1bffb0762d862fd23bc3d789799f8837e675c0977253ee6b1433828a68a4ede93f 3aaa59003c881a48ac0c4d36a2519a0d8e8091eb45587ea4b630db4f0498d6b91b5243625ea70fc40949c9d7a1d6716389f53be2259c058414ca42aa43e4ed07daa8069066736f70947974081a32dd6b399a5ad9ca0aa6be68ef1c97b75d721af2b976591214efa42d8d04cb408025d7539e7e6a04792d5a40c75aab608714 2faed50d7428e22c925ba239206a7ce52d008a954cb1c5a19fc5bacdf878ab9f9ca708dabdd7b1b033aca4723e480ed7bbf2ab9c2712ed7a93396feab7af6d65c09cc1cfffd980cfeaa3bc43400103f81b0a41ebd0cd2cdcc545a7023a4e7c978f1a0ad222a69e70f29f2069d7d5440ee83ef6eb5d293c5729d55cc8ec0b39 9e8ebe3cbfe3054a4d1f7fa426e6e8c1c32fad093ca8ee5e39ed8332a8555dc2ac5074abc57a1fdd89fcbff009f1d7bc6ffe88cbe8086df2256d1aaffca14de6342404c07fa9967b80348e892838637f19ffb6ac5e440d8557fada886c45191db22b00e48890507f887e6ff2c18602898f35e47b165edec654ccfda9fa4b2d 8796274d612992512f13be4c40f0c3f715e2465adfdd83511a402d6a7bacd01dc5bda489f586a2bc53307dcdf9e6ab4228f31b8c4fe31f41bf2730586ded6cb0bc118f90f2e64bde46d50f39f4883cd1d308c9b96132550299b424468e8429f4a5fc35aab14f82d8e05b8761f783f02e705c6ad9d8b272b215693c3f73b222 71b84c45f600281937d7fc82f82f63da29c41e6760678b8cfa5da74795114d200541e7a71cab487e3253780a54e7aa7de00424370e034828446e5ccb333f622daa996ffce8df4016bf12b3056e7df694d042f1015b10546f6806c1663c1c01400c7eff9707fd154420543a1db61481034f0e7bf4be5ca1df1c7c2960f948f6 f041d5c00e1b4499d568d90871b8874b79ba5a06f9b996765ad8a53e314faa94f2c5fd614f94f5e0b816c860f5461874b5963fa2efefa46d7fc7efae71f4798910cbeecc10df65240a1abec6b7afd32f7cfb126d4b10ea7364d0f7bbd494897081351f685cea063d7a57fa8ee816050159566df66cb18ba4532587d597de07 0ef6159ce9752df2bfa951e87a89aa0f8e1a3fd742b438e635d6aecc27b7471ba6726becf0d8cde69d20b016e35d361c755446083ae1915210033ba083a37a7b2c7307e05861226f2428c9a083db8495e81be9a942c66f955613e7e6a356d9f3cabd14aab3ca872baa845118cecdffce4b7d5de6bb4d642d79f2cf6491c8fb 960b1b034a0c3c26fcfc34de0a72c52c39ce6f7bc74bf38075c610c6852904a2fa1c5e678a02a8c5a3ff302ce5be6a645deb7af7744e4f8f1d061aa2b452cc49e1bf3dbc31236785de642bd78239ceed7f2d9db82673e46c14b408c5edb85862189fb3114a603f7dd10f66561f818580ccf2b9f5f6a44ab0ed2a8470972a34 7a1c84d78676bc6edd4cf80af21bb3e850d0186baa5102e2d3a47d3f9f8e937402235a8943be63c6ffe084a64bbead2b49d30b6b77e0d4e76c644b022cb23e74efb2d5a62725d0a796bb12c01d8f1bb9c00ba5757bbfaba83f524919d8ca7fe5ad6c29df3a921b9eeef21e5acdfdd20c66a4f11479df2c56dc3cae8aa53814 e2089e85856465c02e21385d030661cda732879825567e58952fc0e24402a681db247fe5837c2d8b70a4ab89c3431e6bb6b0aed6ed02407b2268e54f6de1b36db8985d9578dbe83f80c72b96579ff14afb4b70f774b970b9a004eaf70e3b52dbd5384905702e07f7991165ddc8d25811d0ef3c426af0f25b7ebc83401d5b98 df6b0c6bec0bb55d403bc0250d089680bfc58c3991a477bf412348937c85d0b61087663ec5b9f1c1f177c11c02ddb22aaad118b3d798fac0a877e865e7f1c6a675f22d0e067b646c4ae7291f2ef3b64866ef0e00c99827cbea118058392c8b8806fdab2df015a3e716f5d7cc0ec2e74c31be322e7321ffaad21e1dbec3e21d 275a878bac2e5fefc70a7946748cb3a014d38f251865263bd2769d65df4d6fdffd42a6dadd42bb36fae076af524aaf3b4c5a0deaef3bfb776e836ca9078d16c9c25fd1e1046fdcbdf8a2043281444b12b67f02bc82ca833ab61e98d51091b6d9cb9cfd68245bfe23f918781a394f951d9b244a593b992840167157fc03b779 481de675fce74bf97a3f9df2c28a21d13ffcfcc3f1ef77822b14a6d49d8d18e4c64280d585cbb323d8d8357025293e84848fe6d23e9a4160fb89d5a80ecee7e82180e112a43d806f15987906a59e2c7490a3b9b4ea5872df4825083d596ae3c725f34353f225d7bf4609e065ea70a41ea921fe540675de32cfa44bad53030f a6f049afa511b9c6c92be626151fc57015f96134510dba3987ac9474aac7ac6111c0c90ded671785f6a70b588452d228572fb393c58383d2e8389e8b32ae6072dd16e12d7ba4e8c964ee01c314bb3608babe6c7775a394a29e39a386f2b67e07302d4588db1f281592904181ff70ee7110af1c5b740bad0e674c1ca5125d26 3db2a608b4008cf781e5d7bbc1f308445bb357660bbb04f20b7936dc980d0393d82628c671e3f571ef11b5c4ab302c301c9b9c54f5afc9621430a31dbecb57ebd21946b85028d7da5e7b5bb5f5779e8d339a1483a6dbc65e7e11bb28b6e483793e244a770975489039db04c435074f4aea7cd104809bd4d945cb525a3fef9a cb3df5abf3b4f7dcf9166a89c87cc43bb18b0009ee69b4a4c16faffa426354d8a95b16ca2a20cc084c1bac5d6ecf754356fdb74c3dbf8a45188e67c207261a193504c5016d93c29c1d17bc4285f98235c4f2a5e47f134e9af60a4d986c6de43fb0824965a93b1413ae61ec2b36079d6b7ddc79fff11260885c1278e62733ac 575c7329219d3a3facc377f1f47bec62a7bf04cebb023f9bab479a3ed822d047e88ec66214e09e5290fedf0b12ba67d2152864a408b5a878e1ffea7237889d89f189b2a2efc2d40765bb36fa79d66339631d8f43110a006b8ae0ffee0a0cefc59c8ce5def7d92a82a96587296d44dc17cf749c5cc970e2b3ce3f445f60642d 6c2006ecbd7220759c97a42c41dcff631125c3c820d3033c53c7a19a37bef6fa4b85661fdcec7ee9b61a17b049afb914e266cf2c7f9d057a0c9822d14f5113a656abac632374ec339c1d78dba49470488ebe43b269b8a97d19a789d124bcdf030f12c701b28ba6d9b2636ee4506e2f8ff42bf874019e549ac63f501be6fc87 cfd2a3e729817ab3bc7c0430dfe99f5f2e699de1c9a7dbea42f2d0deaf17acf723cd0fd26faf34c82e10ba6839c4f8f268dfbfcfb33319bb57f5a5ea7faa1661c2d2a78e62d25fe9d42690eb46e08ccd915b7a5b0b954b75dfaf985b2949d133b373bcfeaeb5b31475799e3f4b18b83162a0ff799cad2f1ef0aab4943ccf60 e4d7618dc743fb16f6a4d46f7f273649557b8b8189f8dff7a20ec56cdb2b20f3634acb308aafa078fb3517721533451bad2620f770c20b939b0847027a2aff4d588f0101183dc1d94f730af2977df4981c4b7ed4719caf657c762945699ca98879a07577eb0dd0d805154a77a49a4490031d3ab153be94b19018f2d57f7687 a26cfa08a156262fb91b2c3afc1f8377928155fc56f3f65ea08712b520b2a4a23ba0fce37dbe9242fb6412d90a6e4afa1f4f6f7421c60c214c8eb15eb90a896778ad5a5445e788a20dfcae081db4cd05a23c07210f7c515f205509d827a52738c744738e043fd036017342945bf8d2ab189bda08ecc7ef710a5121ff105b41 dfb239fd0868fbcb9dd11e02b1064d86a300a28da3aaeb5ae9b1af574000735cd5085b0815001321901a340c04e16788c8594becebdfaaab70eb8c403fc35f40fd1de7dc73c8b144f5dd47fecc544d26943ea490d9994970421419c636ccab2882d3a0aed68c613aa9b177e5c3f23293fe191d744a8002c629d3ad9714bd50 85d563aefb274388b203516083766998adddf405c5d833f4538399fc4ed9d42a06ea0dfa9b068f88141861fe00e39fecfa903311722ba68d83826dc4206b6a6dd77120c40a4ee894170e4c818675edcc271ff218d786c12c0656c511d57fb459526566df6c9ffa600a5126756532933401156d9d8dd894f3a059c6221b7f6f d324370dc9385a383009136cc85b2376fc7373ae015ba1957e687673d58aa4a2cb56ec98aca62d3ed60b100d319948306f0bf3b5b4d3cb1b4f5a898079555b6190f0409ccf7d43cd4ebedfabee0997db51785c27addd405679e26885b9829f8f6e73e9ff77265c60ecf27a58aafaf597d94538c38fe5d96aaec95134a6e710 48c23e67c3c36af80fb0ff801ad60dacda2f410e6ef81105d4260057d1cc62d091de176d5dc6725d32070a5bffa4717ad10d78f4a4f5eb94afd5a67ca5305d3828cbf483e7c5f30c888b263d2292798e4fc4b8309e78bf6a874966a8e6697d7c2417d6532d5d7547139fcfa4965af98b93edb85e5246bf6c17074d707ad198 0464342ba5ca4ab242fc05413148bccf5b135691798d08a895fda348ce18194e3ee2189cfe56180dee7e6e40ea473a4f0d9e240373da47755a04bfeb294cf75462d450f5cf928c0bfbcbc2509b57758ba2793f2d865fe32c976996ab8b266f8e0eba2bde009becd921e077815ab18b679ede19b20dacba333da94630271add 14574bcf924f674181e9f8673747c65cbb7b0aa60cd94d1231cc86695020d28adae77deacab87569b4adb808980109e353797925127a6e5d660f3eb40de04244635a4618eff3d9ff38a706093d2b1eb87083f033634609a2aed18c1a2080ff1f69b9d78bdbabedf35b279a1e10caf4084020d7743429c716dc1f7e764feff2 8fb6ffd43931de8abb547cbaac2c12a28d3b5df701195a7ff2494f181f9d93a8b6ff47d17e838376674884e56fdd980ad3db34bb5e57f955293cfe735d40c79bc932de1ebd7954aa5ff2f29ffda42d995d5d20e78d84b40898036b91ce0edac2f90adb022d07ce71bba4db0727a39803692ed80cca8d1ffe2b63cbd87f2d29 ac564ad076bec831092cc3e0188f725a6538348d994f4b6effb49cd3736a5d03f832157922f3cf58ec9f2f98e3445b762eb77d01cf6593b92e32901302b8f939c083b47d3bc09d5c672a80122864d99577b962da12b6d59fc7b02d5863a1181ec512a112cee2e99c40eb08d41bd1500b7e2a981fd0a1e9ae1879afece91560 682a196664827a7acd721e6ec1fa93f003560b5b9095cdb83ab0f969469d081d2ad061f37579fa56b148a9e9a5ac65d9b1710fdd2c7ff4170dc48d427bf65abd2c79f6649bd4002376b6f513e9b47631e8e7715bbdbed28a8effa5aac5c81ee36d9939d09e3e778e60c04229e1ebaa46c2afde0316ebcca2987377e33d00fc cfb92ce07ef400a7041db25d7735efa3fd49b5bf5bf3b6367933489bb0464e42f354e5e91079b53d4fd9970fbc46809dc4ada0eb180ccf26096a55fa2a6424a2ced91b259c871d9abc65539a7a9f95e47e9bcca802951b055aa1129c40bf48e20e6db2e62923a676e0604a87de2be3f8e2714d7142a5c11912d1dc442e6251 76281a20e8f40a9bf065bea5b8a5790d894836fe3a913b883dcd7ca8fe2ce893d01cd6fb373ba255c5765fd63d8a043bb3f63314ac624c499bc62e06d043a3628023c6c024fdfa5b9b4f0299affc7f4a42231b2a8d9a9dd979c8398d48916dd5e96a4668de984ee49148d2a2c4a116fb9127ead73b517f54aeb97699ea9314 824902012bd70590e89ff5827cc9a9f0827c16a572087f322251a0014eacbc1ffa5148517d2298a3779dbc15318a7346b6af444b69b1e9fa703bd12c403dea39c6159eef31234838b3a4b4c99a4044342b0001fc0a14e4df59a050d852c8542e5c7a638f903be2c5c7b829bdb70f6977ebcab5057f8ea42589cfc31c2fc568 3bd18b6302a3fa3957e71d34aae983d8fd8975127c13d514960cb56047a8c5e5dbb921903d5d532ac114fd776ec6b1da0bbbb1feef9ff896003315038cd3b315af06d9b8dfa67040c16bef6bc13dd511723cd48f5c38bda90290d5b1bc98e413d92c799f01699bd8575409f2a0805c9a517cecd735c775e142b072f52502bf d2262dd03042a11250fc2a6d9617d36b6bad440ade92841c02ecf9b700c53bfcdc757e07bdc0f51bd7ce9fac659abdf170e65275cadb8bbe531e41d555c9d481d94a6f5ed902d54bad193e3876e8e475f21f09ec231e6d8e0c2e500ddaf64497da66c7ce6424f3834a38fb00ad9bdde9496ea7b8d3b92cd02388d38872303b 47d1504b40b25281c1dcf1c8e240b76bc8c34771724c46720ee33f242c0feca8eebc279e1c00446cf09c2a588f682b889661cb150c80ecfde4abe4fbe09bcbd71e16db9328b8e4b6200addcd6e07dfd34f7a539ec9dc1ade4a7012dc4fe61a16799f41f51228746d77e4c43427d25c3224a0c3c7c48e0ef2a907fa3c19cd55 12ae5a9147ef976a144acc7202c98d6c9f8cc48bc04c9a2f75c29d28cd4b27bb4fda7329525b7924b2b31e6904713fe81abd547cbcb76c6ac9b33b58fdfd98647f2df8507c272a20326f9fb32b388255fef7f486dee896e9203fb030ef08926d215e0567eeb029042080df6d952a4124761d8f82af8bf3751fe570ffe61e58 d1563982d3fb818d9ac879279c2adae1dcbfa7ee6d3f736c95a64b2d4f736b58563343fe8d5016e6a83b415ad5892a04391de54f5f525dda2254f123c0c28435f462e77e24bd10b3e0681a42c5dde5aa5973dd37bf26a98bc3119a67c11495b573b6b96a0e8d3f8f1bc50beb11a8f98a39df4c5218e787f46159b7b6954e15 44cf770a8b562de94ce856ae380c747b15d35cd1e2e119e243e19808d90f76b8fd724baf307acacfce970337402db889157bdacb6cebdb6c2be2fe3c406f5e070a976aaa4cebbd88a38ffaa9831c40b5c08a0eb161f4338cbc887e57d0c70acc8eb9755774aad9600d1e6cf1a54b337f56072ab0562918f91605ebd84c50aa 0018f0e9a7c1d6d95fa043d1260b0a62e1f17df50480d490d9e64a78be6368508ee98bf477bf0d7754b5ab601369d96aa01326b2f65cf242ac495586fb72edacab999fc0d1261284e9d7b7a7631fa7b965a0c2f6249ce04c6f455b920a6cd84e200883a5b5fb1c863dc778d361f656f991aef6df709359a9b26d051cfdd1b3 cea069876b5dfe068d3c0dacd7bab8544de524cc85fe2f76ecbda30748b42e63d4cfaf23ba158440cfe3fc683ac13b1ecb2bb9beb25c7ed835518f20626810b5938db1e5131543f8f471ec7e7573b535ffb40afdcf91999d1a500ca7dedbd4fa633a335428a2dc34073cd1587603f0b793803c7bcf59b391e7916c5ffff5f4 c289c7258a06164f9eb5d359988f198cad18735f5cc962311994a673cff4facc09cda3c3a8be5fffd55e0c728ca4860e6ddfb07fd7933da412f722dd86a47280e86b1879a68554d79c049cc463d4dbf0a9cf1d279d130ab86932bcfd499061829a89ce6937cddcb7bc1111b7bb42f04bf85153562c92c19ac40df87efee42f a255b849d961d93f3b7147ec44d83eab7bd1aeab8a641a8757108c42d444555de656a7906f5e562a892815dcf2c62e460c38bc2b62c97515af290c096110160839361618a3804ba71ffe3f5619d7acd0d99d3b7adf8b58d3b3624987a41c4f9806f4dc593d10cef953af0346524857c963fca7ce880fd9f2bbee3515554576 1712a0705e17a725eab5fa3518f05ec0ad19b982de3b6af3b2d6b3f3ed8d4fbc60549e39d4bf7ec5e954366f6f998097814c8b360ea626d262943012b9165f6a78401343ada99680340e8a95a5530b9efe0c92332bdb36c5cbad027284e545221b51e0fb109a9e0dd8b20d99509c7e672f620522411b2711d1881ebb40bb84 b4eb5ca5bdb5038cc878d522399dd23417c8ed92e665f8b9b7168aa406f25e3bfca474506f0296fb4ecd65b4bf2b5f500b8a0f515e790c21ff308aa423adc8d2d7824049d5aa3eaa4d8eba47799c841c6acbdae8af4705e24957cece9157a9388dc0772d4734d2049ecb2472a5b7d2a922d6c10a91f1bd285741c5b5ff84c3 7438bf372b5a3b4cd89a089196de83bcff620d8bef8c750a18b7d4dfa7519b3ea727204f67519f7f8b54e0b4a23f27c778328ffcd553fc4502991c421c43993993990f29d81a94b0fa0afb0c118de1766ced530571a976f0ae83490ca0327f08a7877749aaf5836273b8827dd34073d1ad4aee026025a0098117278e5ed5fb b25d5db62cbe16825977d61c5d64a28884ecd3a421f3133e6cba08ad285cdc5abb907a8aee7882190b58943625b7c87e1c4041f62abe27d6c740cf47915adc890927b5e9651571dc43bbcb4e6e3b09c9d4eaf0407ff11b8928c8408c88006cbc43159dc3e00e62258a9325e99c2af88bccfd2f4e5b61c3d8ee8b427eab2353 7a83f70638ffce15e71a168a08939ee767cb071ae9dacdd2e91231b7a33bab3751e89672306e5f5a19e0f0ff0f832927de17dad8aafb282792e9e73c0ecab36951cb97cf8ae52babcad550fc7fbf1fed90e16ac62b3956ca24b4c03cf388bac972253fe8662692bc9adb6771ff077d93e26d82e15be27a9a2bc12721cd6274 3c868486c55ca94c3320d4c4b8e551b8d9db9485f16a15591b45541087ded0caa47079b810065a6c9eed684eee0e01e78f4ac12fa166ce45fff799cd407cb534911717f5e857ab8fce56433649f309980ca4ee6885a5ef2eba569ce99ca6a559707cd03e816274ae3247cf0cd457657ba98d983ab7f61d2ac665c25fb27a40 9c9c859968bab85f2bb7b051f4075b38fa4f59db287373771577d010ab1d7a6197deb858ef7ca13173c114e91c959977e9cda683ca884b3871ed950713b79f942709c30f24990f8d8e1c1bb632929df6ab0f27d86bbb93792235956ee6e06be9c91228a598554b27bf3573c06c05cd91cdcbf248b2cda2b868b48c1e0d0829 5ef141998e97ad73ec74a5b6ea5ff33efd2ce19cf94cc841070d9187c3256b949081530c98bb131aaa054000fb63566e3df69e02a3e4d1fadf7305d462998254427f6fc6700549dd0c93b1e0ace0a0bf26b79a3704edb92368dddef40973a84b1c0fe6e6cf103795c7e0b6449e105b6ef4013ef4bfbaccd8e7aaf981bab634 db142ba82ebe8258afef80175952195cf42f5cbc838791bde557eede39cf2678bd79a3c4f83443c11aa39d52b0ff432502814e5a9fd042390ecc47a088d3ab47d6ca2ac380f7e3ca0135e15aba28f710149c776bedd6fa036314824888b2ab9cbb83937ce4680334e2c9bee022b21bf106c0baa56910b0cf26607229d9c21a 4a9b9d17a05c5f449cf82ff0a863bfe2a00a6670c5ea7db676241150517496d4911486999ab4c017d8b2a47840b55bf28e3efd42aa34c89e500aa5ed4da6634528e454f341fa21ca452b49821a55fc6e8fc1a0a01ec4e2fb160789b8505b1dca6025aa54ff0859e64398ea1439d0db1087b216d6a7c7c7de15221cf4eb730d 62235b9ed489651e4ccbbeefa3206ca92b4fec143a3409607c00ad50b54e023123f6a010243fa576c6b074e893328a662fe6642733f1aff4aceedd6e49b5e8b179df6854456b71f5bd1fbfca32733c8964acdc99c5b24a7cd9ec6269c76abef7bbb237f93bbb1c448f4daed7f7cea618eddce121cf44c918ca9e9f3ee2532e 61cbec16a8640f4d5f8203c16887a5c006b27e4af16d512106b8a02af99c523a18d8105b7d0af93393612a30b3e530f241276295c6d4f643b4430cdec4b319e9a99b1fb6c43e427f708fa9b1a2e2fc77dd831d4e05bdce9256ae7bfd3c6a71f9fc6fa3d6e4249d240809396994de2555652d2f25fb74540b148a9a3289fdcb 801c8ba363640112f478dc6be10c7de29e17843e8a57757142cc9fe28a8aa02f9d472293ce9fbb7bb93afba6978c6a596ead60f18cb3735dbba06aed97fa9aa0f5d868ca64c66ad83ea6ce91f68f7b99c3f029ca35079ff03c70038896f4c19c91d95b6bcb76af5ecf0acb9594b4c46ed9d59ba1939d7f79b4219d9d319710 5b16b2bb3c50d7914d1d95f264e6ac564b13db6db0bbf8f089210110a1d844e6e2270fd9184e6265b4f5c419febb4b2b0f902d9537d8c82f1aac708ae639cc5e8d8609c8a0fde85055c151d2c0d188941f61d917037ec899e352f96fd9674b85dadc834f875d86b471a2721478bfa4893b14bbcac48ab49e90fd6ad24f3739 d96164963ded594d13a4555072dbcb01af60715f54c61c120c562e4152f53a3f4d834a5250914d48f227d2e90e1ae8aa1b920f181818e458460728d2fea2c82f457e96405ad86204a9a774f15374247867316b2f76b09b80a9fd31005e065e42ec9b5b9caf1b4cdec3280eb0d00fb550479c27bf283235eeba6f970b3326f5 745ea6e8efc5b7e2e7657bfa57c998b7fd23ace93a0a359f2188fa7caae57e076c221e1ca8612aecd1fa47372b84f4be83ad8ab3b48d337feb56d4d755cacf941b3f1220d831f420376cd4d7ba8a5ffb5ea30e0b8b802e815a3157579fba77bef630268abf7d6684ee726a1675ec70bfa89b34bffbcad37fc4f4ffb721285e 142b4fb73dcdff8fd7677f0e597f99aa33278aec2920c92fd1da6d8ae6d8ee3abc597fd52f176acaece163b98e14a4353c03d03c160e2d139af8d664680944045313d361d18e01781304ae4f42e90655e623223b22f08e3a8f95fd3e897099558cf441f5602ca08a14abbdd87edbedb3f8657e1539538e562856bae5c93115 bfead3b2dd33536dc829f669a055aade1518aaa13a3856f49dbd8fa005d8a8662933af598831b5a6eec8a2907566f60e05e723e145464e960b372961ec0237f5b2c99b68e75a47b4a4a90638cac3bea1117dc9715b4e14b6bcfb321826f68964f2adc109a171e2fb08478430c859bdd9603ed78e38ec9f0b790d2cdc85476f d601dd756cccfaffcbf8ec65557605ac62013f826dcbb53707760e23c9a9367696d5f08f67a68a39ea0245acca17616a97611bb64c3e3c6aadb6bc32d8b715ff1680b84f5694b93e3a688d4b74997883aad5e9bf87839d90a2b04c216908f6036761a26dd29cd4a39d266a07c39ef5e1192f7f2fc399dedef45ee7316b144a 8bdd71acf86cd05bce345a350312d1459f7355f8b400b2196f234a1ccd98ebc88d95a4cc9c3a733b18abfd56284ae7e661810db272b872694e3bd6d0d0bf7bc3a05cdd21bb355faebd0d47c32aeed5032713a944092dcb37ea37ff4f52c15d94dbae606e600a59c862e0987a33a4a88c86567945476fe9a5b82a167be4f2ec 53594b44428b20d6187a883fa274aeade2442fcd2ae5f8f0f6c26206439766e91cbd8624c6b102c4a662a6b7fc647ed84a8895abb750a4034409890c9bfe96f35620b1bc4db470e657cf0efbc34a061f876059003b516b61608ea77c186e6e83706acc7d95b523929ea6df4ed64e9e9eb1ee31f5c329331afcf4376c11f177 f7e57fc03b333b037b1118c703c0e38c169a137837e56853919677a61f2cefa5006fb63b3dec00a8e681d5052ca8e1a6d18faf65cf47e14407bf44330a7b53b50465f092af9f0341fac69e4d9d6deabae03f8fa2f817554655d4a3020b9a69b987a9d949a617359cda99e12cec5f0d37d1ba7332f7a46d91d23d095489e180 ffb68209d323428d22882bac41312e9b0a46af9d0b1bab83f503790824b3ed6e90ce8f896dd27398d46b6434f67e189341d6ecb9923133b0477a1b147c15805f2f05cfc50fe33a0a2f5383d1461104b91e8c7198ee2efba391309e231ef1483781fed70ded16f66b83b898fe922188fff753bad970cd53fdbead8b2fe3b5d8 01384688fbe34e8fd7ac5a0c8eff2cca73a3fb582735420c7cf23cc25517e4929956be9a2c5b75ccbe3eb7ae0dd414f5804a9293380878a6fa7106dd10f6c414f92bbf8bd8e3c927fe9d5ae5a4c7c0ecd5f390661576f376cef283fd15d5c1a4bd189ffd4447ac8ec834cf6b7f14ce953351e228d130cff97af507dff1d277 adf618a344babb8926489695724892a1dc83d64c998a4ef8deaf76739006d30c18c76fb57b93810f41229daa76f7bf91158dc4fa335c57e6627a604abbaf14932f523860e94aafaeefcab92183079f755e83276b6712bb22a494312b6bc8abc55f0bc64679f02219bedfd4b25cb20124f766951f66cf5eea6ede3317c16409 374ffe5017bc06349493ad5df3578e3b7f1c88bd557b183e183e5784de6f3e9991624a964b8b907bc91a8e9d3abc961bca12d11e7ad8d98dcd7fd918c60ac64d923fb638ef043bcd153ea47ed4c37ed5ea78612446c4f9d4024f817cc5b4ca509f546b22add2575053d1f689549964063cbe96787a9eb2dc252306e45cf484 5fdd5a8d8f35e7f22003c375dbeb53f0dbaebd169160a034a10a6f95a4485774d2c509c51b3ac00fb4204234e6e847ff84cda0dd5bab7a79b7399bc8dbe231e4896817d6fe4bf03ccd937c8bcceb3e37e561677a1253c741ccee03b1861bba44fc91d1467a2e5b66eed4f85ce3070dcbc921b08e6fbb49eca02fee32a11a77 34cc6b555c5e7d7403de20a97ecfbc07ff2dd08eb3e7a9c682aba6414d3061e8643a1ec413f23e7daa12cb5279aa2a895eda11d6bd0a024664e5ece549a30a8c924e71701a17e61483d243b72b3f1193a0625e31e3bfb4ea395d7f0c0c3706e90afe004a763422fb1306c44e7e4d5125ce30e2a47f4d635b7bc377338ffaf3 3b06ede9ff7c969965bf2b15202a3062f3f9dc587ded512030a7ecfd76363caaf0eeae8c0c33b8815b48f8afa164dd5b1af0d6b284a6cb9ddb4b6ccfa849c15a4a410ce270aa117e285552b8730f5c94cc5643a44b366457f4db40ee48c44b58c5a5e9d0baa46eaa2828b5d6d5ed9e307f5885b911056b73dd823a523d1ffb 03c7d9738f06433a00a2e23be010a1468b92698bd7fbca10fc359bfe1a9e13686b2d70815fd0de9c09a1760b871d1707b77a09158e96b8b40f4ebb28de3530eb6f52febf5497f3f1311f6f45a5ae81d61baaad56395ecec7716b388d5805f2eb9f15fc73f805a5cc6fe57224beeb1432e0edcfb8814d9b7d04162ceb28c0af 627dd977c8d7528f7ce0483ea3034b3d732cafa31580705f9aee1f323fc9638044834fb9bfb26590d19d7b6adf4a40221cd634ec1f254cc7a13feb6b8d59a163c2b98af9dcb49dcf2784d1992de5bed3f72fd807850467180308d14db493d33c28c43058957116a35ac1b9b3c638eb15b90da10f617a704b42980b51f96931 8f7499cd96f626aa312e5146e474b23e0b63be58edeccbd9e770f4b1a504b78da7ea74a08286c88d9dc40578e6c7d36a8b303bc1c0507c63fd65c62cbaf2098c89fcf89136e91c6375baa7a4e0fd169c4f0dcd1a8376ea0d4cd39763e4249e9e23313e218cfc1defe83f2e550008eaf6e988b3169c4b6cdd104d2b5b530410 459e8e2d318690ae384b761d34bc3d9ea002b6bb6886b178186b3ff71665fa1ecd6f8a7232f1f048802345012cf219418919eb12a5baa247ca1275ce402061d7fb7aa95629e6feb84074757a1162d67618b765850faaba995fc08f7df21c0bb62e1188988e64e64cb910f243c4f5db283e3e1f6d3faf155e79403164e40746 683a390d1e3459337dd3d91981f3754724ed56a047631774b6cb77b10346ee7f7585643e74f600339c306b9fe29d4217a0fb3568a439074d9cf38df972ea9c6ca2878ead2ae81b8ab4863f2f890934a2a43eee5eebcd8500db5cc1a2dd2e042a506aee34d5f2a7c0ec86dd4f4cc3538f8014533d3d40238b9a328425578e17 3aa0f1f5873b9c783e42848da516c25790ce61f5ec0a869bec9c0da3490b08923aa4b93cb8e07eaf9a23e8fd6b08b2a5660135fda241ee597e44e1e7964fd371746335b2acb831a6ac3e65815b9732fb5b5abc570677a79ce8bd441227b8df145ecca0aa9b84f13cfe0a77bf7d6f1810549bd431d67828810256f01f03ac88 52d004fe 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark{restore}if %%EndFont %%BeginFont: TimesTen-Italic %!PS-AdobeFont-1.0: TimesTen-Italic 001.001 %%CreationDate: Tue Nov 13 14:14:26 1990 %%VMusage: 31391 38283 %% The digitally encoded machine readable software for producing the %% Typefaces licensed to you is copyrighted (c) 1988, 1990 Adobe Systems. All %% Rights Reserved. This software is the property of Adobe Systems %% Incorporated and its licensors, and may not be reproduced, used, %% displayed, modified, disclosed or transferred without the express written %% approval of Adobe. The digitally encoded machine readable outline data %% for producing the Typefaces licensed to you is copyrighted (c) 1981 %% Linotype AG and/or its subsidiaries. All Rights Reserved. This data is %% the property of Linotype AG and/or its subsidiaries and may not be %% reproduced, used, displayed, modified, disclosed or transferred without %% the express written approval of Linotype AG and/or its subsidiaries. 10 %% Times* Italic 13249 %% Times is a trademark of Linotype AG and/or its subsidiaries. 11 dict begin /FontInfo 10 dict dup begin /version (001.001) readonly def /Notice (Copyright (c) 1988, 1990 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype AG and/or its subsidiaries.) readonly def /Copyright ( The digitally encoded machine readable software for producing the Typefaces licensed to you is copyrighted (c) 1988, 1990 Adobe Systems. All Rights Reserved. This software is the property of Adobe Systems Incorporated and its licensors, and may not be reproduced, used, displayed, modified, disclosed or transferred without the express written approval of Adobe. The digitally encoded machine readable outline data for producing the Typefaces licensed to you is copyrighted (c) 1981 Linotype AG and/or its subsidiaries. All Rights Reserved. This data is the property of Linotype AG and/or its subsidiaries and may not be reproduced, used, displayed, modified, disclosed or transferred without the express written approval of Linotype AG and/or its subsidiaries. 10 Times* Italic 13249 ) readonly def /FullName (Times 10 Italic) readonly def /FamilyName (TimesTen) readonly def /Weight (Roman) readonly def /ItalicAngle -15 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /TimesTen-Italic def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /UniqueID 33457 def /FontBBox{-169 -225 1015 928}readonly def currentdict end currentfile eexec d6da8fa53e1072ba14a9320338be966c83d0f051a44055620b41ea551b4176d9b3df145b01a8f8144c583ef4103049afe1e06bb2e77c7e6a853e01a7cefee9f1739689bc6e4e5b18011c883944a71ae99d6a656ecdd9684c828e2b7f7eabb9077eb32e70126273d37267aba529c4666788f1b25a8697566252d002a1127644 4a676eeb9d235e74cf4ff2e7846af108ce9898faf9bdcc02ea2088674b36c7edbe5eed7d8dc25c9f672286101c0392738461b3b1b6b6c01f29a9c67df0ae2a5596827cdd6d624bd266835c613415e6e83ae9328d7f08a84e965ced6e28656b871fdbb9f413b6d32f413720f4d17f44d4afa4ee5b5578901b58b1bb30cc1ed8 6a502aa3bc396389320d0d79e1472c5e22e574e93b1f9cc32c637c6ea71123a69fd5d2806648a7e0b41f46cfbfae148dc35a4b2abb604e6a3f769ebb8e7a77df10c37847093edd944704a3c5d74cbea66fd62f4ef39a544f2c6794d45a222a6392c3e3710852fedff426ea61f14767f0361ca5564de0c6bb8935b182bee574 6c075086899a66d39033fe0f08242c09c36bf1a2d76b9673017b6f849ebeafd13ad40c194473359306e14937cd237d918492fe84e64dc20e35d6fbdeeec5f40969824f274911e8dec16657ad0b0c52c316f9d619b4bc489e9d3f60b399ddef8d4e68f2d20bda49f6e6b70d0bab171f8bd196b32b131b1eb1b343a51edd3587 a7917930f9b6eca58f2aa550d77b8f44634bec8b21d075b9dfa0e789a0e5372e3c41e92644774276317d14983eb5c2666890e22b81fdc82fb8bae7df75f7acbf351170d849993e4c3ea55fb75e0777ad4a9cd8100341cba09a206a0ec67ef5fc5ed330d5ec39f856bdfa2e10bca6fdf3bcfde874043fe08004bd09d2362f14 e3b5d4a1ccd1b7f263acf1514e997ff54c4bd59df5b2839ca8deb8edeca1524d748f4ebb4af41344b5a474ac90203831498bdc06f3cf82dac5648686e32645787a869f7df93a5480f48f47ef2aa615dd2374c69066d5bd9a6a800e225dbf14112057d0906044cdc1c21f881057ea05bdfd5ef2628e892e117f6ab80b943afc e7c45a92567cc1f552e0f9f7a9cc5b24c2c5234e8cb4f15b98a2952aedc874b4c9efd557b2cb02670794e426ae8559decf0786593ef2fc253703aca50578f5d3ed4816fa2bd2eafc808033cb6e989ff0e7a86459532524ea2a71aef104c5a608f2ecc201d83c908794666459ccbde94e047292a5685ede97d68043457b35dc 748031611baef1b9177ff3f6bf5d37eb0045050ccbaf281b0e9f6bd9e976a3b69d525b8d3bf6a3de792be21b4925d682a0db23cc48aeb365ae30ee1bea0d0d7f91c8aef494c395ce22cd92a89444f07060235145c82be80b1d99ca6cf976659c24303ef09aea432da81931d19b49525a407c4fed9d32e1baa93dfb8f01991f a9d9ba72f84afb0a34163d226873436a672a185ae61060ebfad6217739c2d1dee88c8f5906ddfc53d6718c93746d93eaca2634989e0a6edba6c5896701f8667b8a0b3347b4fcd5b53780e394d9d2548922ef340c1ab2f57071a1c9525bb59405436280387e9a83d5c16287f5e818b82b42ceca13ae6689aadde56ddbca7a75 43e76f10423b39617f870a3452d3551532b0c786d9cf9a6e90c72375e0ff591d15cdd9823269da6bf4604ef6b0cbb8c7fc46f5c9d84acb6339c5e151f3352ad734375fb5084931b4fec204d8f435dd7fe3d5fc06568b384570b8a0a3b360345f2df218901082a4e8b92be65a3ed98c6e6d432eee883bddc975bcfce2b1f8e4 942dddbbf03968a34c5d9cef8932dde96e3021c340ff1cec4bb72466019777719d6d143cd43ef9475c51857fa8478d756ce9418ba038640b44cbdef8bff78e6cf391357eb6fb4e5e6e11f7febc87df84d93e21262610d221b4fcaba8d8544a9f7533691aeccfdc03d166eda1201bb472e26d492243cc44aab146d1b71a45c9 1822b3eeaff3c3d63fdbf46b9770c52bf2df22dad35ee80b4afd8a76db17fc0c8426183c082d71e276ca1ad9ef207a09a1d7b26fe8dd4d347585ab5ccc2d6cfe180505aeb8066f9985b8ae9272ddc538e6862c88b3f79ef37265f3fa6d92d8bf13be82b32e2edbf188fe838118d10f326174c89ff57dcb91ef3ad8beddd0e0 d7dd09e8de1f4020fb0cc21eb04a4422c98a21b90887356a79f159cf0ba0ba5f46985a0f799d0137f594f9f52e7e180b3df06b0f9e0bb6bdb6c1c49abce19dc725c17ba0fe70d27fcd96c7d2dce67303802bd05991896bad3478f9ac2a249d44e76a4cf9deff0abb7300205878cc0ed61cbd68bc9804ba89e9a6d7f593093d d3fff69bf0e7c693291c5563ddf61a94b110521ee9497f8b7d8ffdd881c6a34376565ac96fa23f67673a872fa09a582e6418ed9c1f2bd24da369d806fbf2cd880e5165cbb0ac15ca4ac0fa3eac58ea3136ac4e5602f5acebbb6dfa955045c91d84af31dc0adabd5ecee84aadd77d2b2f19e58735953895ea67cf70bbba24fc 4b42b2d7f72d74ee469421aafb2216efe32083a7631a8f4d5ea3228c5883ea385ab9dab0870297e9bcbf1e749fb409df20c182ae9fae44f1da54e7b0f05f0c7edba5e8c29901270b140af115d622a347dac4720cc128dca9bae7dedb27481ffe895dd64c1f3e640c4a2f43cb1ad6d4c1db6bfdf1dcba59f8537c8a446cd389 580ed383df8f0ab9ef3747beb64903bb1891fc507fcd23309982ce69c01434be9bdd4b9cf9517842e9423baa10b185b944e5e3992a938fe94d2a34da517b5d810e7e050455294401752a31eb5dbef806e761f43003b81d217b2102b5aa2faf23310b883c79be00c0c16a4e7e53e0737a9ac4a1207c12018aebf9dc08be0065 55a6604fb505dd5dcf7935c12b00ffa1220098150741eeaadae95b9c9d57a9fe7fd1fd37996c6a88f130009ed2eccfb9576fcb4bbedd7dfe506656f441cea76f627c6e3664a7862a1246b349b5a2168d6a4dabc9fa300f7c8ff229f09f2855da7718de9e93fdd2213dc90a5d78e6b1ed244dfd401a31be63a7a1aa6190ed8f 4b2314ac850070d19bd1449253111faf578d3300ad825e835a916a52ce0bb350a1005ca7aec97917359ec26fd759069b4e2b2a36d12c6c98ab2ef2cd9e5059f6c9508b30693cdabe2970ae48d82ff078b00f70764e44329d24e5e9a2b45541823223bf72f8f25dee4efff1e63d1a842309ea1c8257f2121398db82ecea9491 41282a3612d5e109d20742c96619028f9d9572c7d498923eee9b65c816e3519327806aeb9c1eaa4165835c928ae15086b454dfc9e23276deab0abf4375b43c09a076349145e790496f7c7cb6c41add8040c81f6657a50e1309a3634f37cb698990d6c817424f99131339bf3e700255bfacf9c121a5d45d1d96816a00b8f3e7 da143075f2a4c5a3974a7d1c726108dc2c801ab1c8fd9b8782587a349fe38490e90962f08fcd56a8b61516f4bfea696ceb93ee5b7fe530100cb7eb2f51647abf23c8aa8b34196544f126f5cd890470ae95c555f63e731e343ef6609a9bcf9d23f2b6b68d5f8b83b37f97ec8a092ee43c66d8931ba1bc6eae4918533b098ded 771f7a865eba898c594fd15922b8693fa5c98e2b8ee3f40df39d0144b18d7c37e591188a6645b7150fd053f4af69f5d10eeee89944d04efbbd6e7f47d2a1f3094756e0b7a5d5fabf5b416a445e88e54e42208510acb115d3aa54bab7c0ab88d400a5507d72116237235d67d2c2aa18310448d39d41e13ebfbc656d6c83c128 0b110c8013b81f32f99b8dd2cdea0c74a8da3087fc29c843728e6e407004a519e89567b43b2202924d9276e59619ac0e8f8481d4f6c3bf466f725cb7f7cc15c8886bc44c3dad61a37c1c024604e5db7ad2d647356d184191e7470ac3014379f6c9e72ac24c0c057a3a48bf925034c1ee55a8f4083193a172f546d5b3a39e26 7fd5615ab1f31d031bd55fb170078b632b8b4797a810e8086f0ecded27e234d0bff0a2fd0c375d97bc7736e47bd1e96a1ebc12adcf37107ac7e99c3facc793769ead514d5124dc5e93d9e274d887213a2d4dbb1f558c460a4c59c04a3a267e9d86738b59d64a9bcee75aaf8a5eb38e5e3a4d9ebe2a93d5feec2307096149ef c8e0c8262a722397867df76b7f5633f076b385e9e858383469e2d31fc3df451da2444232d57582bc9eb59d1ef2365f7d0e326f98a7d2c69ea2f039ba516edefd7cfbcf47c3fbf9b15b0077685528a176ee3ef3f92e8711c92d39b1e1565561298402f444f4421bb98c3e5978079fbc5346ea4ac7004c28c3c56e0c66ba9e9e 48561af6ea8a0068b2d840ad463de37a0b7fe9b3aae819b7ce855a752a1f439e8d307fdcef32571c15319c1edb53e48d31d844e61c11044fd06c01fc8944c5855e16a4f0bf9fbc8383a265e8a1fbd4db61ded4d9c96b59982585d83828feea903856883b73cd51d482e7fb531058cff17f0f316b696a2ef3aa7b3e0bd04ec0 b371ef1d05a873bb9a84e5008c386d5b9fa074d37a2eb6af6ef273e835ae387f94d81f410115d7f863e2b69ce5bc9f18673205a7e9f8e49eeb3c12beaf7333b5a3f90e513dbe48651f043d4cfe80e39e7076d5c36cc79fb205a01febe65fa481b794a736cf2464284f5908cbb8bc1eb9bccaf759e67f176658928c17e18bb9 7d57bdce2a965718669353307b572b6e07b7cfdc04ed4ea30b4c88acfb9525037f7f9f031ca4f5f4f7970b76be54f7f2ad1c0c257bb66498d99bafd3e70c65a54f1df256364e65582e0d04f637a353d5ae542ce843218f410b5d216ccb87ed43c848cf3ae95a00f15f9d91e41798f8203b2ae16896d6227ec944b1db950c6a b50ab4c8db1ecf084a1f870e3626da5372528328b42c91cfcf942427e274c5b7ec46f75d53eadbfd8e59dac0ea3cacab7b9c130928d5228c8aa2ff1a3fd1aee09265f2f515d5c5cf2c880214fd667893dd9870f0f0c796f8c0d9cd82b110612cd199ab452043183abbfa41babc9db2da20222d468ce4ab11c078b9bbfb7d5c 8099aaaf7219a02d3f23686e9adc3c525b0556522c292c3a312fe70f50916d5f9cb2db05af787e8afb257439c948ca06441ce8c85367ca0692d1aba356f58ca492644aa28267334d39cf9fe70eae4e8f26168bf8793fb43f86f9b7fa9b5bd67e296776bf8674490da708c62c45e51bc92e490c9bd2c1f4c94e3c479d91a741 374ca4d18401de1cff68c0816349d11971d468268610830c15dc05d6c5081329b43f33d35940d0f507986328d40307f715db714dbb45b14d24d4510c29121f0edb3d39198966957dc4a32ccb21acaa4715e339375d60a8b1d1d3ab48e24a559b3721a0192ddf74ce13d144c166a6e4aacd5a12b6d41e8ce89d39f446672d2d 34e4a895aa889d627257a4987dad3cba5df85a1c9cc82ca5e6a5fda254b4680255d2ee56ad4134235c901c289188a6916abb4864380afce68f85bda708c83c63de64cba36d4950795d711c5aef45d6721ea4ae584dcc5d7e16eefa30cabb9caeff660a85bcbbe911cd2bccb37aa4497affee6985d78cf9f2bcbc72c9a2b24e 1148ceb88d3eed44a41a2d1467e0b59b37b7a6ef4f4f3def592b7d803039a3a57b25e9cbe635e75bbc25be2e1d132a2d9ec3921dac29a634992434211ad29cd483e75f8c6b96cf848a23864e553a2b7e79fa524ad9f9a60528b634a289240fdc8980afb4aab282f52599cfc78ffe5e627dd5aeceb146dcf7a94d5d679ed020 29ed4d88459a2a246e31ecd51e5b3fa106e4e85a75e868bcaee212ea5701ab19a77af34457a97f4f00e5a7ed794defac69501f16dd354f458b04b611626ef20ccc75ddda81352caf05f3a157250930e3e5bf6fd2788a1bcb560c5ad59a392d8a6fb7e55c4aeb178558b04eb5765786eac1f278fc6544ae486c847d03adbb9e 15f96a40d80776ef95eec74a4c543343dcd67b99f32a3d9bd300efbd10efabdb32658496a58c93887f454eb8021d2e38a1499c18c74017a54cf45eee72f3e7b5c209964a2b26f5a86bdfc44e97df0f40d226f6daba966a6965f82b1efe1530fc14a9b2acfb3082ab0165e307889b00d8080d9f71e0ad2c0d0fd94fba6eaf06 9d7f0275c5245214730b3ab6349f3c27bb817e17377d33321a83be26da98ce030ce219312b5f4718cacf57593de57ecafb2df68708312598bc68eff702fc02131fd939cb8a8ff2d17b5ab13dedf75e218ae2f583c4dc04befc16ce2b3727b7857c6c03442629572529a19b0aaef845089a5e74ad971d7e46090c0ff63ca396 f912246f2e65797395400919b09b49b3aea1657cf9a1c886e6d26b0688cf6e71faf8b457ce8f52bf2afffadf6c596709781e421c1e558d2db6e15aaa1cda66a7667801d9024e262309154486259e18d7769e2acb44611cba15ca2c9aedab6a1c69e80e3427acbb0be22ef83420b1bcbe3329b06bd82372dcdb92aa34f47224 acc8c60f4151a3cf5fd0322f308dd343dd403bfee30ab156293eaee9a504d5b4e75c589b8ee076c7a04382be14568ba052e630d33e9f9dfeeb219821f4387b3655dbb49314e16192248d9b608bb127deadb8c7e4bff48e44ce932f12e657a759592aff7aa54ad78f194b547ac2d614ad21a8b57efd18d7add5cfc71261cbcd 7fc007f2686e670da4cfb9e164e91edb6d19d69d84a48d7f961d1e15d327f4ef22be084f7e09a818c8dee62d487071b21a23c6f618b28dd6d7064facb266e6ef9051159f13b93d9b554bfe74fe0cc33fd72028903754800cfc5fc87fe4c66e7dc1f32d17b9f787ad8aabe247c5d7c1e77e46e8038c3f78d6daad1035fc79b0 65ab0555d064d6bffae9c46d6f0acc65ac72f0e84b60914b248d3ae494968484553b5c71c4f9a039f1d85bfdb006398ec2a62d49c942413d22d899bb113b860b5e424681ea5caefa85373c6c3fec64a5a2f73f5c70da901b5c14b00e6d0d7ad72cef2958714e55554e8cf3e58a16373fd20d77c42c6095b4665ebcc8396104 13a218cfc6962b69183a3d372c59f4ae94766841953b654f64382169572aeb2d38dd909762b1dee012164a09ca195445145e12374d41fc50791ddff80d9e8c6851ec390dd2d29d15e1996740f1523f30b487bd670e02974491d64e7a1a43f64247d4080738a622c8d85218e903863c24a452e939a1449cbc61a7d0bbea9240 770992691f99613530e2ab30533fddb9615950b45a6206e9ccb3d5b934153f3108d2b4af6bf226643d33285a11eadedd796021cfe1313d783c2bc084a3358a8b6cd4e81b8d382b71c694054b909bb68791260503eafa182928e4eaa659e2faecd02a7ae5f33a8ceadd1305b08e31bd1c0507acf97412d1769961e1eb0e3a74 c53e2dae2128a439374577d600f0c189ca1344e6a28d08995d3e91c363cc706a80355cd62fa3faf0e60518df4a961dbcf6c6f069d2eec34a650fe1328dbde9469e320c24b061a2bc6352469671dd78bef5221f4a4bf83492d164d7e4ea6b91547620b6910a32588de4882082b662889dc1deafb572384fc1ec7d7db94c135f 943b7b5de5f84b0afc3ebbc6d0a533b815854dff84d8b1f5414824e7d04455d72d316af6ab2e775f07131250a790da26a3a651077f6e572e8b28ad3b10a5e449f1e32b00231c2f4fa5ad552e66e0b3ddb19b05fbc75940cd559c3d1247137ff33e04f1dae978c5759f304384cb5e8a482c2f546b47b2c5abacf82556c76329 47dc8d9eef1a9a1acd4dd3f80f0556f5fde714796c6ba4501c407c4e9c3e8a6fd09fd09e15bcdf49e39f65caa137dfe3832325ee179e351a119922de93bde9176127c908ee91cdde757d2411f216e78d989f454550352875b7b6ef780bd59af906d4ae195661fc7a4e2158a9d9ad75ef9c85c8a511f922dd56712a9e44012f 5925c5dc14ad59219833d909cd9d400cfe0b7f643aa739d4aafa1062b0b7e42d0456d6c996d3a7ef942ac9c83c0b7bbbee6293b86df36776f75116884ecc0b8ab65e585443d093d32fc011eb0c265f5717e263c1bff58d0bc2304580b1905d9f4cb63a6f3d1616acc7d4f4ca5a9f57662c7d42cf9edc7849fd347a8ac64131 89df822fab26ed268ded87de584b5e51acf9e14f8f317968c12bf21082cd0d5eeaa018cab0956f9e49e8c12f8d9821912c690d985ba43f4f1e2b7bee5ef03e7a90e6bc7ebb5f88c1a23c4d6217263eb9b285b3c69a4b442479f0a7b5df9e7d3f4a4f871daa1a4d12dca0082b3760d39016f2a8d337d487906a1c9b43ca6d39 2cee156c8630870516efc9429c9da582c2dade08fd1b774b6853dd258d8421d5bc772321c8c0bed602bf78b4376e17464a8373442903d9c3824bde361789b510a741dac94750b607cacb03965b11a0ff8445a855dd274efd936eb6f8556b86a33c0a15ba24676094445dbd9bb8dd33d92fe4796ecd5c753a102dc1d31afe0a 0ca85f553b69ea1e545bc8c0405a8286b7256e4e79031d630ed534a02359a4e75f7b6de96374977e6cd6da0d041a5610d3d4ae42f58adf97d68dd05bd4334d37862d2338b983358cc99959dfe2f5767f249795de9d04c9ae4141e069c006bb1f6bb293ddef8cb473a660a4d08729b12a36a85240ba8449763054284f6df3b2 6b7144d1eda38d575c8d9d44f00c70ca9b8df85ea361b773e4721e6e90372b97e4e2b7fcc1e0866f49a84cd3a9705adbf51f3dfac0f887d0f9eb449208438dccd75fb84eb0d50adafb23aebe5cd185760a89119bb856762b04dd6307c5b9360236a794dfaa9ef9b5ac992edffac57816046a2a3f22f4b3113bdb587d44ca11 5334cbf50ece10a5425d62868dd59e97276e4e87a7160200cf7f8e6bdaed02b5ca60ac795add49ba103cca0aa0c74dcb2a326318674c4df4224bd65048b505dd5fa141b7247d776e58c6cb6130a72d117f42f0bafb7cdcfad4c0595b243dc57d1a69392660ef00a21aa330a2aeb28fbb0fa9c9616bc6a5625b59585a83a092 918fd8ceb1484891bd01e98fd9daed2f200271fc59bbc830faae1cadc2b8ab54f751434a0d0ab62c7333e4eb0facea35973d29c2241e139dd4c0cee49bc7a089118f488d451bb9052138a2eee304b6e14ac2d51564697a1119ea64aa88c3c43bca91935d6fff0be7f7e84678e6560df1b90a617551a2a360b95a5e30d97cbf 8de77c3d6bb8d1d0bdc602bed1539c24f6642b6cbb6df001ce874b3fd190145ecec60473dfed2db3c279e4721e9de58159ad71a3ea6bc2ae38378967325e4ef074a1a4945858dec8bc4c9092eca503ce943b87241b6fe3d5f287037d7e7cf75872576c5a1dfb42d5267e6f21d9be84d91da3bd4a63a9c6e4ffdbd67fc06274 f2f4422448df4ea0a8898ffd49a16f4b0f8cbdf2b8edce92cb969d1c3c1b413dea058a71ed519025ca011380137e48616690bcc6523c32b2f305d380aee7328b55c199f32d864f3eb644c2fbc093f5fc24b59be326d77a9782a2ab54f8df8a039d01fcdb4de2869378ae50304ec4746fec5d8a9fbfe6a115fd38b6ae8519d6 854c58651828d138ebb525b310744362091f1bf3aa9357f5f38b219ac851a64b5c99ad5a22f3a29b0acf2d0f3696c297ddfe505c189c065b978478e4d34d7e9d13ef70e396429c2f190f87e9d3373d9a8abd7295f452fe820b372b8839cd79fe166b0d603169a3312fec08937111230573426a61a5af67d2b82d10d7aca4a0 08d66a9e7ff0ed4902bcd4397a24e50e4b8123267a5191be5ca1d915f1a679d7e1573d24163989751af6e307ff3326beaf9636dfaa43d67cc491d849c509e363007fb211db31cd35c9b95ac12519952ba032906815159e0756df91e7106c6834d427ea6a095d82e362a79e5e5e4e2b2e2e7685d1c2d25fbeabd89090682014 a59159d28eeb491c7edf9c751c18e5d51690e48c76d7d67d4882a2133e74fe48a8f7f379231a3b1601e09f26e6ef15b3b978524707a87f31de9dfacbe40a8052b9b1126aa3a8ee341195bf0749ebad59bc087df2c0c8c12ab2844fed88ce0e2e6a57ebffed20ad7952c284d3f2ded94c4cab01cc056e00573c2130928c220d e185c9345ad2f001239f4d17adeb890203326334b470fe80f879c3b5e9d29a9e3b31deb9e6cdd126a77fbbefdc4c130cced8f09be1efdb71776b9908c3a828a4eef8d95e6e1f2b55d251dd7929443f54692b1200cbaa47289f06d6501a5ff91849ab972d7c73425cb1427280cded7393b8ab9af6ce26331ea44fa926093cee 34704b634b9c30cc62d8b73e97bbb38c49317be603cb4d138a4204c22370d8340dad14c1bf6b178d74ce1c7eb7697574274db6e5aba5060531ea839537bd2b6d8f0e6d1989771427a529ee3e4857ce5653fdaf0c21801c02b1a5707353f50b1f1b3af38043833d5e898b3ce923c989ce4c97f5db9326921e0bdc8a766d85fb 1bd4e365f7f4a9c544174824c37b11011667392f6c40f8b52f2d73822159d1d2182e2be6f119885a320631e62ec1ec3bad28363aadb24399ae29ac82d8ece681d9a23e576efab3563208ab70c2d9e9ae3a34049a9ce7537b6a8c59169c98214b80619923b5571154f31114c07fd0648beb5c7834d2b6c6d64629bded7d30f7 5b5a330d28195fd8619e8bdd8102c91fc2470dd2c5c949c9cd23f654e63b891fa132d5331587147d823ffadd173a29a04715192223d045bcb11e9f34ab115d6082decefb8e355ed7e6d58e86480b19e7ea697ab4b138f1a333c585ef1a68f38429ca0cacb2fef7fa6c2e26be4b16b677c97bcf95ddb2d73a58ed74eb623121 e958f4a959459c236fd66a991297ab792c1218bb8fd7f8d362698fd2be653f6eb725b40d89aeac61b8d023dc4159d889b0195430270cce3bf9fb8af9d29f20f585a17cf0683ce37d591eaa6421966605b990c07e4e1b674f7c75d2508fcb130d2eca09d20d0f81fbb90a6eb457aeb115415e3709b1e5eb4e95bd8a193205d0 7ef649570792e4ca1bf8fc492dd124680ea26807bc3dd7fba008bb5ee28f61f94bd386f1b37ef86159f13b0a2d998dead329e06f8f00847cd5fc3c493840d33118ef7c855821892c52510fe07708cc2ee340cd2316071fe6249cc0704cf72a9ed8b4ca9332a1e3ecf53d0cd6570e1037ad43e5dd8d437e8fbd915d553fab89 8f9440c0b335ef3806bf7ac103732e8281de549d57339a11ce140aaa2d024e29854e1336b0f55aa52c423eb1a7aa0f6eec7e3c7ad45e809fd822792075675a8bc7763905fb652e7d0ae18d85ec9f708e8b6d28c3c34d68d27a9b741ed1eff5fa75309992174b354644b905c664ffe679a7c333a1a2126f1a7da1ab3c6d976f 41123e5ca48d1e040d2765c691ac4f8593676efa875b33a075ef779da4d97147d822a574799bf2ea6509b5fbf8f19eead2eba222d9e2ad8bc6bf3cde8acc9dff383079e22452d2499e27d6c3d1cd02acd87a7014cbfb9c82fdff8d41621de1077bb4614dd62a2bc2c0dddea376a0308a6d9b707480c5ca6c14a379f2bcb041 cc0d56e34a6fbf8fd1f6f00ce8810e6bd33735c1dae0d6e051ec3ce70d50bf354c6ee8dc91288c5fc15101c6ad3bd8475d24bf9f34237cfa5a76d67d920dcf6af9fb900f442dd01af5614fbaa457bdc6771f4d5b0f53a56fc91b921fb8bf656b43e9ffeb5e4620d1e21bbc029299dda1e2840836f385e55d25221664cb6a03 106c74ed60db42ad6ec83cc42dc997a4944323cbfe5e76a4badaecc91b4401bdeacb20b1f053cb38744ce5100707752e1eb7dfbec40cc7cd343c7ca44ad0f9589dd936b2bf49bf29e3fea04aca77ea5acf09e5da57c46f644dde266c0a45c2d824c1a5a152e533b08fa30e88d8a5d7dfed2a50a2eadd17536ed758273d88e0 cc39f6c3579c7ac3840968c24932af682032a7d00dbf3ed2d0b5839a9afb1d7f6119cb2f848d9ee384bd784ad2758252660e21391793efc05539c901b03a1c2a541d0b15f77cab0a46e88a9455a491eefe25ffed3afdcf78252ff591d6d9676ab68cebb6a4e26b5522c52e87f220678577957ea8fd23e360a77d052cce3761 7584548a1463c94d4974884d0a6981aecf0f269097ad3d0ef5a65df863641e17078c01cdf202cdbf0b7e35def759d074e2703d4a8e0550b98fc24a713b40c3532fe84ae09a56e10bb167d2d99a5f4d7d0bbc999cccc3c19c5ed3b9ca09a1e8d80b85198512ad0ccf5afc45fca4376eae50690ec1f9a9fc4983f005bc8f005a 63066d76acb296a72c17657ce543545cbc46b210650d95ba7ad3a4e83b581e5d402bd8974b25f33a995fd0391c7924cbe629d170929225307cf6b8b032deb988c924bcc2849db70fb910de4c44772383b77d62faeb6119e254a0f3b37201ae53366e81dfd31df9bcc776cc03626da30f137641daebeda536805b066b5579a4 c94be73b6bb6948336a6c4da5a90696d3d8cb73b33ca0b975e0e2c6276b5bd5895070514ee971538e9d4ab4c8e56c9e142d66d60e66e4969abe46b3b2ebd11cc2ec9ec466fed22052baa393f75216f0b2a068f7bbe84493d5ec97abdd95bf8bad8df8f6a938401e4b449c8ca81c3a66c8e7c19b3e4501e49716549661eb538 5538e19884f7d2e184ae995ea9cd2f16cc000a8371ef0386a643b902ba7c46b0cb7c856fcf8091319746110ca2e5e4e10307bf5cc626e24aa8b77a80127c6837b58fd9f947d8c8eba343199aaad765ea6930a3c5e9ccba55bbd2d08e66219f469c54b5247aa85bbce7585f4245f990e57859c636c1681f5a9af0bd37caae30 1fef914c4fe24c4a804090678449d9562b47f32d7555cb54c5e126aec52ad93ada349a1f8720946aa34d69928fd72507e81bd8a000a0353c5f9e159b4ebdab441dd7633cd0a0f70e4f2600fa8eb16667f6ed5c844bb514b6f0b67d44fa18584820a3a11efee05018120e2795863edeb3e45ea67deb9fd654ef7546e2db6aab a0507209918b697744b17235d472b6856ac78eec6324ef3e485fc2bdc114b7c00b2583ade68761309b587747e27fbfab654d905370d2d25f16903060d197c0fa6235e50937c5dfa6a86e554a2c80d05b26fc88f181a9e5e020c1728687552c706577b11c3e27451e04fd380fcd9eebc25d03b7dbbcf4b787946e6478a9ec0d 95bec2b405a45b9a0da0f99552f38af51333713784768e4282a548a7f5c0006bf19d8ef0cfa6d03dc5d37fb179a10bd65a94673873e8c52e37a5e1fca481e21d9d8e0cd9d9bf464ac13ffaeeb74b874aeeef3b7bdcbb8de66aeb22d76c4479ca091c9c2447644deb0366d012a99fab8c922494502821b7e31ad5366b511ae3 ecec1380672c43ef71182078abf1730e3b922a15403d088c0f6695a73a0e2384c60fd84249929a55b986cf1c19c21c3da9014de253ed00bb2258640076d34684e0bc94277f0c2b72eddbe949d58afd2bda269a45851808b69e3fab113421f5baaba1bc62143f1a48937bc89f9969bf2e1b1218e1ba00a49ca166b80308665c b18b585f06bd9fdaaa618e311c558c69bbe333a7d19b7c5a730d5cb5c98bdecc7d7d1618936d16ec2a97e56d7c92db0ac87df3739181c0773bfce35402222171b2d72dd8062c5d92d1e9ab246dfbbc831bb2051f2bc620b2d25f0efbe8ab088f1f6da3c561b8ff859518845780940a63e57d229f2e365ded0bebabbd117953 fb6e835b56773e7a78c7c68087e54678eec8517ae8ae577e0f2ded11891e470d889f17cbb25765d731864dfc39e15684c9bba6fed0c03efb23d40fc8cce9add58588820f673d425d7129711bc0497c7197bdde7a9d65f3b871760511eb1485d4061cf47189c1d1836f6b022780aaa6359a2858335ee8278514c0a251513a1d fc26ded9c34ca49f01d2769ae57b80881bca8710bbb9df2dc211cad013a51991d93efc067faa3f11982a95f1248bca83ff116ba63776dd4096dc151c060c3b1aa1500580513f8e680c0d6526ed5ce529bbbe5b787c3017ba43e63c599631140569566f6327729f4859ffa6aec183aee795581b6da1c5bf274c320d8bdaf66c d91d4ffea2782c4cb72c845e6a028186b29e26238d30042e7e546296b902526379169bd7055fc07608ca2a245c3f8e224565a6e4d70b58677fb7aa4986361b5fed0dcceeb62165bf919b7fa8ef7296ec4bfd0ab5379d7f4bde0315e565a0c5443c9e7f525d62424ea62ffd9bc2362a7794063772b499539865ae4b5e9d9093 3aaa0a47f72df0003a6fa737832af3c1f04f338f0fabd532b1604798d17f7bf6ae29273eeca9e6390023e8bd800ad7c3e6f11056edd7238a19e1496c16101cfba75db4652be28ac671abb0c496345e522ce9447f3a6c3fcae7d4341b7d3a5dcbd55404ce9a2368623f9ea96a6e72502ff6207d356dee99e3b5a1dde980f701 aa1049f538b18d8a81dbf62ba4692be26911e0ad94d2de4e865a8315c98732a668e91cca4f6668cc52aede77d6dade1e78d32b5b67aacee404c35fd2badb3bea5a6af392055f711faaea8d4959670033ebe14561611fb98d543088d11faec19755cff6f54a3c0f5d3eb995d2d60f33003ba3f400edceae9ef7b99bebb8c192 31ca2793f8cb66cc22bd2a7d7d0d500ea6f4ad5b5de891a1a1722ad06d393fa3770b3bd3a504d7925b5a8f0141562689cd99345c1bb6d43127f929731cea3351f97698225a89e4edde4fd514eb9888d59e236f4bd80644b702fedfe97224b5ad3b05c5ea8de602d1b00452632eab5d5f78230efefb0db990f3646c8a62081b 87a95d3d6d64d6a6599a2d5d6faeb54fa5ad807d80ae3742010a4fb49280a989fcf265fd7c72ae4c87d1ce5f814248764a72111d5c801e9326d6225acb2d366b65608c8d0253bffebab1fec05cf980f558f9bb26e34a15fd7c78dde1bc5af7d0b56bbdac4229109cd906c5703a878690dd4cff35b3ad686276c92390932d3c 0ea05d7d13ba761c43acbf72fd50971a99a82023633176ee975d912c1552a7c43b890433f1b9b7b7b0245d9f92ca15f38e7dd7e0e0514044f531dd1642f3d9c65e35b8c511642dc139c2cd94d1faa5801cad9f291d14acbee552eb14a1014f778b2e2d125249ea3c5932bedfd2fa4a566b92a8ccc8b53604c7091986989200 4ea033dd58b7effe8d747f465454d25edb33485afcf90ad9b32d7d855acfeda488a4ffc64b6003d242b42de3082f6f39be5bedfb8d53b28cfff303b87582f0c49a5e0877ca3addf04c9bc1dba460b4028b9667b6bab47891ac20d9e8d3ff76ba4aaa65d99d10eed831a73afc4e79533ab6076d2112d7b46629398081ac65df 24e0a0b8b94abb5d32ca12804f2e60c0875ff2330778ddf22f5f2da2f76b67509c3d019f826b0bf0d45d4e9b390448967a947704e70de6c36c809d549f7eece6eae1a5ce85b015d6a18503d44d75f050b89db8dc5bc4474583eb84a537d602946c2b46314f6aac58ab13748abf8b9af16c85c492652ab77a423c9c9d5c5fc3 f2212b3ef114de7166f77dbb35c9efee7404ade6ab21188f2438ad94b726f9ec80f56d8323a2ceac8c6b033b5ab648a877165474379d6557b2793323487b4fa736528fbb3ce843ef3cb577bdadb9a2a5fa3ca25441df1aa7a4581ff982f3f5ef9ce736cc73451c3b5c1d96925436576b30e42a9a304130feb73b56a92b835f dddaa9e5751fa79d2c84ab171f85ac96febc9843e9a43f11afb32876973b186f4aaed68d32e1f479acc655a075ae20dc0bc91ed4df94a1ba3580003e285f1ad324be3817ebfd292d33f1b6757052a61a75278e04771d0d1ca85d8ea98382971f4e64e53ae3beb49246aefab351742c4d3004128521956859fdbf667a37da00 1df8de910a83485df820092ed0993b850230bb466cf2892edbee68c4f23993acfd2fa96d38d43f2ccac0715df3a28d5f60b51b2769eafa4d7de795afcc0b76ddc61148de7bcd930c722ca3bad640e906013430818d1d4f3c5c38c22cf1300ca511ff3959c23296fc005028da3327ea9170d7d8c04fca0793f76abf73d141bf 58f040707c5e31186ba0ee5b7deb6eaa23706dfcfe3f0a9fe42a744cca3e5a282ab9e62945f9b43a43499e583bd285a435345ce083385f7ddb085b8bec64bec2ea4c114ed769a00f1adf70c65e0aad012dfc7c6c1945f8c8e69edb0f782551d80c11f59044a7268f3af1717dac38d6101b5a75c7c8e97d8dad4720bee12423 fcf1bddf3ea9d58fdaefee5fa0deb5f424553de930bf19ef0f250a2b992bf29f3d4fd5d0d88df252e7e1e6724480bb7b5b91dac5c3c87bc3fde51a8682ea975f0bab8fd50f8afe3d252992bb65e42b4e3b2c270e31ba3b9c5f6731acf11ba289530988703ac04e1e26b1032b059e6a432b9c241aee435a8852257a0d47972c 8cb36f4a90fdd93cb2c0e7a22abcbdc30f74da3cf0197f656cea94fe7b7286ffb7e24175b2bdd9bdbcc3dc3fddd312fa0310a508e914f94b067891e3c5bb313b275408537639c5ca895e00d2f6f2ba54843ec331f309a474fe811700c784914c3d6077fd6b3c3738a11ce6953e9d2d27f524e83a07f405fc697e2c21bd5fe8 563bf1e9bf4055193f23c94984d12c31b8c70e1adcefc9478e78ff47421797f7ebb3ce4940d0a13a195a36784435a68d5fdeda8c49956b09910f910d683edd3e53ea686b91932ad0a2d7a4ceb12a598b52632d4f833a99a8f9ba25be56f4964590505914f9a254f3e9a84f85cac7da25a9de1750ab4d0795e32467d2e7897f 57d429a1743f90c531188b465d0eccb2904ceeb0fb1c75c87667d46d6a8d5473e6b575a8447e9b864734b1f078a52bd483e0ab78f4bfd456ef43208a99dc74f944166031c109be578905997b301afb391ef9a8e37e054e3746d4985a3f459f1d7c817b6867592059ed0b35e3ba197d9e49d2b53d096a265af251d2c933d62f c2e85feedeeabbfb9e72b17ec02396127e8e199c95a132dbc4671151092036bf5827a9b406a70971d82ba852fca2dc75a962122229a5cc4bf1d8af303a1ca22361615674f36c071c8ce011581cf207c507e9a96f150195bab9cfa2666d795a2c56d9649dd701619d919a22a3e3fb162661b9290e2297113145cf551c44b79e 1e49f3da72ee4023a436f3aff606731e52ae03dff1b3674c77dc647b8ca27fc19516a903dcfc8ed6f18106302e2145a01373f4a53a9eb3085ab77710d5dfe1351857379a63206c3fb42a4182f34e859ed9ec77945947776a18f43812fb81f0abeb0d886bebb6b6f92b4107d33158073b09f6bdd73e2240f937a537c205113f 38f7032cd800e2c0a6fec0518455cf64db9a43ee1ef84fa68acd0d7fceb5305e93768da7fee6b98f6e52b89de7d34799e0226f281bee78840f034a8bb3cafd25ec6e1ceb6051a994192dd68ad7d163b01e5b9acc652effb5d2c45cf980640c0bc4940d4e80ddfe547082475ad05c4dee0d6fcd8cb9958f8bbaacad39af5a67 ff74658618796d091b80089db3326c89d75b82468735db2a87cf5b9ff36c7b28f4c9c209e2bbd1f169627f2bee284d3d62da3dd4e80b3ed243f15106be74f39caf262fbd673c36b9428b0ada8c025978e57e5c5c2abc9b37c18d79bae2b864aaf75c0441eac8567001948790435cea49b5d6ab51f63cb3a488497df044c2e1 696ee85b030771c629d4ecc0fcbdc8f875b54c27a5375343fc1c15d6c283a6bbcf72637391c1975ac317c0b494637c5e50e9155bb952558e6987e9e80aba30a0be23d262578a742e9b7750aa9ca3178161fe338868ffae0ca0e1f7636d326d4f567eadffda50f45ef107864a9481aa341784f95a077579f843ddf6e6b794f4 05da40868c911ce8ce914255ec55cc5b977bcb0077157d97bf95b0e90ac27983d53a62b9767f1096e660e055587e0b330e13917d027fb18c18d775e70f3475de294ebcc7e640d2503fd11d3a30e6e69292d2c402bf13557f4f093b04a52f17ad5c4583aad49dad76d99ab99ceac3e2f6f132944426b96c2e6396f709f0c492 76f884abcabc7243a4c171653b6a73608cb083b75caa42c70b3afcf61f692ca72d2c8061685261065ba441b081f8ffb311f45636fe8f6a5545e20a1983566cf0fe66d7dc2cba63dbf87f0f7cbe40135fd5084e8446ec9fdf01ac834f18f20e880aa4dce55f2ad8de58ac6d73093c7ec0ec805d0bd8a4e00791d3401f6c5781 f20ba14977ee9c410f5f9adf29133072e0b3d6eacb3d96b8c561c182e11f2fbf380b81910a28d6b4cc0ef18422bf4e5b51f8108cd0c0019cc76aecd9445c6d4d69f951982b812f519d661e56a0f8b79620914effc1671925508f137c2ea1b0758d21932a8b03e9b4d4c70a59484a4c0cc52bbfb623510c6b9cd017951f9c0a 8fcbd5b3cad1508373c6802bed9b094a85479880cd86253a4e28ba11dc0acd64acd538ffe810ce23f60a285ee45674263119a10cb9893d08b71c26ecb4ceeaadcde1d1a536162804381dc4250b7113d390b0684f05fc5bb5ac1937e2f0dae30140bb3651bd6eabc93835a0b3435fb9f3823a8cee924ef2449b97c96395d654 153f482e1b9df9b1d985b0ab6b91628698894cd5ff7b6c643641cf2f934b28c5e7a1264579b3cd8a2ca01a543c8583e1796e22832dc63e592d7f166fca7216ee5cf77e78f4c8cc47cd1bed852e0e6daa0eeafe8510bb1ffb40b84635b3ac24dc30cdc2b099f8fdd941397e4ccbdb7ed181706eebf017ecb565f110b0cbd41f 48c048ee9b3704f530f3b8a020a70d85398052ca4762d992fc175c15e05e61af755670bf5c08b35571759c20754de25f0e9dcb43bdbfbb1aee8f36e348918fbf086c89886971fdea310ba054249b9879a385739ae3cc29ee5f8d169c249f7bd7fa7afc14ec29bd7bb80edc82f038460c7326a3524b97d2634df1ffe7e056db c25872ffc373b30d20a51e5cb1560aac80294baf50ea0d990b1b945a363c1e9bd4e6a7fe38731783ef6679f5d34673b6d189fb3780156a7697ca0d56813e97ee35a06ab955b149f6bef307073ba9135672be3b411e8dfbcdcc670cc7d6042c6c46fb3be48a9a2205a42d6a05cb0612fc7b67b175542359aaefc88a709ed1de b8def2e3adfee55fadb0d037b0ff26de891a9b715deb71ea9f05616fd8814eaf98589f7e03d9b4a8b4e3dc7015bb9c03f99aed6aef38f01c0bf291806665aa48de4bf0f9ab154a7540865980640ff6b484ea28f89f5ce18551d0e2f497fee95ebc6b61b4d577ed16d8c7a90aad7f8bbc1fd5f23ae88baffc06b5f1d143078c f6dc5fa42074e00c6dd3a8a987f48c7ae0bc29b0b777802ff7a7afca5271e0f662ad0356e78104644b0e2fe38abc0dc66fc67c6498c2d3d0a2b05b451d9dc8c92c81b2b6589e8f926aa0ef8938871ce77ec28cde889ce93f4539d7fe8a8adf62739888ca724dac1c7067ff37f1a400df81df9cb882a14fec6b868b9b8730f3 789c610eb51cad8271fd430148a04e365c6ca4ce27c3adf253db4302ec53e99397df25f1dbded0a45602df192d941c2186f32704a772702cce66cce81825fef3fb3fed34cb79af28d680d2b204863e40dfdab3ecff48ea492dcb35d25630f77e2b956be9b4ad3861ca38c16d14f67b82bb1de6c8d370f8e1fd94f7890a1b4c b53e672e777ec6c97113c0f83717d8e04e5bf9a442cc003f8967c7d24f8ee68c63eb149eefd92d13b9bbf2da14576a8db326bd4a4db91f201e648e178a7fa6ee08efbda008a7d2d5d343e7c9f4099154f9687dbebd58a3d1497b0741ffe096699dcb25e412179bbff830e09cf135624998490091eb6c286fe30be509c3b1ba 5f1abf062d0a734e5549229a986d5b25f6ad64fbdedbb73de383ba2fd0ae71228c41cf9bae8d787f6b1150fd86e1c3e7c1addc29fb46ff897d8ee433531677e48e6665391f74d2eed1f40006aa084167e001000d9fc6244b26a78bf1ff00a4149a81fa973ba9239540a7582f7fe7a08abf4fef2178c4ab4689b6c747ec0a00 3a8f43f3c6882ba78fcf3e84098960701298b8254cc6e5d67f3af1258bea3fcbceab77f9105174c4b5bd3336e4caa847908af9cc88450202722f83078aa94da8c9098fee46699c028ead4d6e284b84f86153df4e2b8b9279b49abe5d38a0e2545cef501c6dd68e409bf5201d7f9531259bd62ac386bbc68fdf11fd4088a071 034b765a4a53bdb4bf1a81587e99777450d88558abe09b2fb5c4c897a91e4bcd19c331410cf7b2cab6e8212a5451312751f2dd5cbad4c137f741dbb08773ea6c5651ca4907ea25c6d3f21ab14730b99e11f31e0f189ffd5bdef33979c48b29359af54c094d90931b21d460120e0262cd86e32c9653fbb1f55caee37462cdb1 4e2ea921af18b803900bc043a2e40633756886d42c38dbc229627d059d9cb309ef6fd67a8a7ef2e4899aea3f47963abac76ed19a98fb5e644237a919193fa4d593f5fa83f825548c06b2bdd20fc520e381049719077d84f6e4f8ef244f86951bc9988461fb389a472e67622a7a6d48b1aab8d46279647796bbf6b1edca4cce 505ec5ce9aed5ce2f3d3957e447e8d7de3503fbcf4d20e2875721df3fd38f981ad0b2b4851ebb2748311fcec59a961f9083540ccbf52fcfb04667d3826d8bc02d95d395b6bf9581053dc4e634d76807a37fb7b4d774d20fafec26cba659da2da6b7f5905e50dfb057b5838e487738e2501e1a1bea3ca32b5d8e6a45b876aa3 8b1ea6821f61ac6d560d39dbe5f7fda3d3f264144c8498b667d55ff8b421f745954e4eab9639d769cfc91861b86f5cd24f8059228f14bfbcec9869a5d08c317bc8804b4799d831d3bbc8d64f2e2c9dca64f4bd148f3fd5f89899c40e92677093e5ab7e04dd450384ebb3e333d6685e36383c7f238e95ea3c5464de62f75ff3 f1126608c4943ea38eb9b4809dd60a052cc3378960d1c2a930861c33838cd6e30151a7d7bd3acfc1f4b3db7cd467cf3937874e41b931f99b7203771411e415e5f2ef866cb0ce8f6515e2fbb37f1c14ea85158597fab4b5056cf095f4316f8fcb8b0150ef62b03ef81d3a6357576cb7eae42c046c9f903d0257422d8b986296 dc5a84ea81d6d7c21a5b464c1a8117495ca731ee650725e1860c1cbe802f6970b047cb546c05a514c6223c718d065a0f9dec8fb7d9e29d6e61fa09c86609fbac4f965bc9fb36e7c2a81e812e7875494a1bdd45dfcf756c70c802df0ac71eb7218c3d53531a0a6f2f2aac0c36a809867fc6214d4fee6d2024909372b89fe9ac 287875179fd26f425a6b9c8d86f7ae987b7771e2a065de665bb46aee9b70e4bd8e5b5adda4af477fccd49cade26bf938cae1dc9aec813ff3af431f42fd6985090cff3f8fea3e87226d733143841e99861fbd2e405f70b5bbdbb4a08df0742af8380d2bedc114c0831853269ef2b3311783ac993e5bcdb8bfdf671a3a49e2b6 255af7d63f07b52d8cfbee1db9f3149d8829499783cd8b177d9993fae35402f8015e65df772f89296297c8e751f149670172d98b56793a636161652a7ae0ab0b1560c044ea96edab8eafa73999b9a686c81e16833caef777a6ccce42688b12a9e0f9a1a88ea48b4461eda473107d6e33396531624b439a72ea1812bde3016c 0d6d10ec7e0ec7776ef62fd3e37f7dae1097067d313e88ac92ef88a5bb4376b1d93d6a8550263a7abb056fa3a2444de21cf2a50a28e8eaf7000d0a746d2a03a296fbfa1f6b9379a7d421ab44098371fd43013e1167ec6d2ca0df53c025a5d9b2cfef9acd35c467d835481d537ad554d646f4430822a6d94b14327c536db0d2 0609b069b187e02d2d3a763684b8229c493356a6b306088da72f6c0a397d6c40c14af42c0845cb74acfe8740afb00acd3768486c9e86205cb0f79b7718893f0105d95e85a1bbfa415b5109df74fb8e44095f19d46a99ab6c19f07c867ef505d462017b244b66d871c443f3b99238eeef85ab60223bbbe74b7fc32e154101ef 48fbddd66a95f652cf238910c4703602cad02644c79898a472d1a5867ee4d99559022ba9923188a09ca544b9efb83db51ae23c602e042deb087e87609b9c926c8ea5b2b758765e72988fb5be8555a013beb7d5ffeb4bb01668acf9afea79b6632ebb6e4487473d330ebc86251a5d7ea5f643fc1bd242e31f3db864df460981 47e892dda49747954c9812759df2eec325f737be3967f5ba5f0b535704a6c9112373478d4ca3e3c81f85b2da2e54c456fac005083e25ab92f1a322865b3a96bea48dd002093f8f2f154da85c96b4e91fe2d9f5884f4e2bfc1fca32abbd6131ed1089b63591d8bcab55220788e0f9790de46200077316841cb1e2c8d4bac070 b92cdc9298d70cfa5c1084445c25fa9cb2b05e7bd9d8b09dc86023c4220211aa051181d4018267e01e8459bb64fcdfc89c03b452b11b5f019e41673cc6fbd646a0a93298b9057117e6bf5b491ecdbd0b820a963943aaadd16f70fb2c719693a8bfe3953a64eb534970a847e0dfcaf2b00d64a65d44ed42662618abd352afd9 9645416e1b80239052ab8fa26f6e19db465e62c6819afb9f7ba5e47988cf5b075a2190de2dcb288f9c21788a091d7af2f690b38165dc7c20a0b81664fa4e5cac2af6331ed1d9274195e440ad5360d54744ae05fc812cab3bf1031560a527b0886a30ae6a139cd406b354001eec2fa1445d96b546a37b8c5536ee3539eea742 73d17ec745ad6b124edc2f5c804186288264ce6f9c0b908bf4cf70316f8755d57d22f610cf85cb4057f5c041e33d49cf798e3a65b1431b0c3f2f34c3dfc96687cb91aa4e7de919c3f2e36368a3d50a9e922b54c2c08c6ab065d6eb502ce6ac5b15ff05870bba78622a4f6c6a09b7acf520b6e120a6e23c7d34f2427c86046e c8ee934708653b8e41a7ebb4ecafe5fd53811301b0b4eb7663dea18429d2676ffebee4131bd670c7179e0aa1f7d1aa29a3eb70a709ad2032f426dcd6d026faa160328f4f1ba69bed1910fa767dca194cfec85eade1fa3f533d182eab70965651a23eaa4b1a514586bd0b248d389ced895687f0850dad7100ef7e26f1e70074 d9e3ca68b75450a0422ab6449b00be477901226daad83e511edeb0d953c002562dfe443d5a707f86556fc97447bcf59b40ced75d60d876ed0818b29f50c308a2678eb1aca98f015797ea2bae1fcb65a25c6ad156c94e5aa68696385e723ce581326aca90caa2d5062dd6a6834cf888bcd45290a8bfee0b16d12af2ee7cc26b 549d2f947e832ea3229e4d6f246d3e70c9310d57b9e36f57f2e21ede5008d4361b70b0f6981f7d16930a6f0c2a5ee4afdda21bb49a7b82838645d0f3e643a86f64ac756b17c473819fe0dc914287da418775b6e917311951abe4fd42bbf19943d48fcb665c7c175ba3f98d9c0fc3dbe4f1792785439d02518798c4dd9d51a0 507c1e65b1cba328907c030d989d1768b981444db41066dd91492816cf8b5e45167b59715a02252c1891041349e66dff565fec4abb171dba879d965d3907cb3342e0391910703cb3dacb1e80e29922ccd2909412c7930054c26ed764cea353ae2d4493982858fcb9a9a82dc1141e1b18b83aecd539b482bf384f4b81d8fb3a 19a667b876a45792b67cb317f9496e4b26ab84933eb498b85f46344adbba56c93b134c57d600830d9042add9ae42266fc7c376e16769df127fbffec0d1d7d224d48fcc9cd42d0ae5f0cd7d61b4a14fff1f409fc50910ac00231bfa0187326c39e4301cf2b4b24806486d5cadb91926276a887761711ce056053a71e0d24bad 49552b02e060e1b226425e7ee6b9a160673a6191e770a3ec2fb79511ac0b7bcd74e63dd7a57cf046aaa890ceac9be6acb54258bbac66a10d080a00d908a5502c0e3407fc96e3fe0a672bb51e0f4f1375de96b422d5ee2875b5f37282045035d2e6a9759500ece5f06726eaff41d66b5d39a68e0b7d078cdbd996fc0e6a3370 f98007ac217fa57ba34c058155d84f3d588d2874fb988d40233fbca2afd5131f1990d13edccba7ca5c51f344420c76e013543628cfad2d1a578eaf18a63cd041ab75524b078832814311c2b3fbf1e75ca2ad8771369d21e1e0f7fd3568b3a6dbcd9e63ab51dbf2f1ff232ed52e1afc1953be22d1f99fce41a336607540c186 da1c92f6ab1d2568c5dbf54fb3a7830bdd342d64f5cda1f881009882c66fa43813a5e3148278de31d0c457ee63d791e6e9401ffcdc04637acea2568c936c6a1145643a1fe87b7fd49c33fd873dafb9ab3329540e46e2ef2ee518009ff9c7f5bd3f31d115ca33cc67b858b0d08525518164cf483cb9507add35d9b211098e4f 3df92a68df25ad716a3624b909ed483a7cceb134d6cefa1c854d43c3d3c2c1265cbf6d07ba20c98ef74a5b67695750b5545445b9d3a39b0d201151d775d795c059c3c21bb4a453c885aa8584470717e7b0ded210c31a26584f53f51d8e9e5a5b8045b8271b08fc1440c94200b545cc29b756b0f91e09026c5e219b0c5777a2 d0b2bdc2bbea2117d48b29424d6bea51a26a63a0406d5d0967de9ba7c256f637d9a6e827407e3a1039aeff8e10a1170349f88ecd6c7557b8032e233a08d3287edee787c29a28c5c2b0bf67d6822a52c5704b35dfe138882b72af6500342cc05d76bc0fe3a2afb272277ed935873758f26c08daf7f356fa7ef6dea848a0fd55 c73e9376dc45e74d79cd47248154c9b0d3009be8580a8b3c84ac31061d49663d2264c9dd5baeca72dffda2c157f7cedfb0102c666dfddbf3ee7afdf95a08584530c260bae5e7f9d9f6447320a3e836d2ef895dd17f479cb05e9db3d93f1a7125c7cc5786b65d0d73203437ea3a450917220f70256029d52445bf9c5e9c0535 67fedb8115dedbcee3df7ba6b8d440ed32885202795a5ce81d658afa0718567c09be918813eced285c400aa469af7ab624264cf821b9b855b8058e98e38c7b55cea6ca166424fd27fb0a8a79d05e3a8819942b5db318b81acac079be21e5a1e93b5f63524c72ff122775a33acb5b63da7f9704d1366ab8bc1b9956c5afa39a fb3c8ee710a786183021c928173420d41b7b45b465e26178c8dab23b3bab351df731247efb831405fc581d8fc2ff2be4743a36c67198b05f17dc434eed5247793410ce7640309e0967b313589bfe70645480828f61cb27c63531365bce563bd193aaaba8930357c6b1416fd27d5ef26e3e7412585e09a3258aad2a1adfe660 dd341a16c70329ddccb3a1679103ce1ff2684316ea0fbfd984734e87e0005e90b7bfa0f784671f0b2a6874cd9d134d42f81c281a601af76044abee0ed880caf01b2cfb91137944f400b71469bf89cfd790cd0a6e02b0f4c1ea7b797c7a89d1efcacb97f0c91b31707b709e6b53401df3663d26eb14a87a86f2db256adf654a 78e342927fe5986c02184fa35ce27b4c309d0ccfc7058b0ffeb87ba00d1996ac8530c62a7563282d97ff9978955e9189c48ae83f026c6fdba0a43707a03dde15734486a52a42ce6e6985f31f53726a69ef42c1f981d29ed9f35f245626d8060d438ab34bd1dc48ee691c7efcfcff1c7d37dc60c9f5951958cb9850c46899f5 c46f2409e374e21b6a63190d14bd3ae98c26c440f7c9d24e7461d0ebaae69b1dfb204639a45ef4a5558e89690818d93470e5578e1c5047a2e125e5c23068d0add366d8764287314e7ff2de039f955b452811be6874ee23356798dd16f45e764ab1405372735260c4a1c762a62bcfff8c6265b87e8541e72a081131bf46c7f9 9522682e4c57db5d6098c4df5db160827f363e1ef730091c716d116b9fbb396bc5ddb19e2954b8db60fa33ef3c9cf7a6eef85505e8b2b65ce2dbb8fbd6c1c0c171862b3db6bed43f65c135bc8edbb2d402f23c8f4a1a033027781c00852ba43b4db07eaf491d0efc75aa490940dc04503ed1bb5509af49cb15efd1b896c937 a72a929fca167ce3ce85f8463b1b807f4b2bdeae97018e3338bbe49e1bedcae63fe2555e82ca12ee2659108100fa40ef2f748fcc62c0a69353a6f14105f92c054e8f38d1fc4895a058df204fadc20ca4fed757d2a2e44523630ad8fdde13c1419c06fa8880e05441d4ccdad68d162570a12b264ddc8444b6d0ebaaca336c9f b9771fb4647e532491b2bddaf6e7cca30fac9583ef454f1fdcdcf505e16ad64d8e8f236c87eaae8f2cdeebadbe20b627f7d13ab93c1c9ec2d4cc8cbb8abf92ba61cc269b0cc110ae5bc9f203ebe0b3f0d48822eba80769446ddcea30d9eaeba86c9674fb42c4014434bf2a5d8b39b86f4cce161c4571a3cb0f35d9514aee73 0fe22ea71a4b834916d45ecf1664899fb3fec4c3a5302f31b25997d09e284ae3d2b733a9214d8054f4498d4021fad843a28503651be31ef7c4900037b28a21a5bf1b9702506eb22818d4e0ca587e501b5dc905a232792a1c1f354ed939c196da1a8dd48f9d3350b68c8420f36f643b27b2194873519075c974cb89ffaeaf89 3f1fe35d96e376fb7c3fde94dc0b1e7c8d281226fa91743fb4551d46facaf45ec06e317e8a0b987a7bc35c851ddc0936724f3884dd220340f9d4407d76fc7d401818f75b5a70f442960e4c5f6637c236de73d24c1dd18f4b191c63fe0f479d23fb5219079902be1341b1d723000155e776480a12183d498aa4a9f9e2cbb03a b417cc899a3f90a54e30831c0645c798e5cfd5e301fb8d36599f2b15f652acd631a5ec1eca33b4733c640cf64ae0a395b80cd59e78e70b049365c4f9c2f9078005932c9c45e81a5d547509bfd1e45aa280ff9926e82a4598248746554a67a632d4be51e972875fce346d96bb0e1c531a345f8e3a983d144ab261494b87dd50 a8a51c1844be308ed3805e57f0056d76fbc66c216eb5eb26d026f839f56aded94f2026cafd3b441d8b0d55c536dab9abce708e31513d5562101555b3e8e8dad6efa39aa84c6ca68e9afa20f343e4dce17156524481b3a3cb214cc8c6c14ab26965b57e23409414a3b15056afac164b006596cc362d9017dfb214c2aa14a968 3a3186c54066735fa0506d9de9c06a4ba9d8ace7e6c8dbc4797e94ca3222b5e43567062a7b6b6f7467c27e238cf80a888d4e032aa85ea4ce5f47af2596d84aa03e2acbda1d17c7603ae3c9a05ca7ed80477ffa172ab33b6df2150f9bac006d96021519339d59e8473e1423d9e61eb34e79af1b6658e83544705282a9a7ad7b ee026d63ab79b2215930f084c374a5834dbcb839e95fa164e10087474c6f9ec39643afb2b1abea66e2243dd5696efc3e3f9f17667a578e6c97ce84d251a3e42b7732f06689612c3c144c205c1f8ff63a8cdbc765a103763376149dbe5c2665e768feee963bfd1191c97abeb24d98bc8b49e10d02545874c7e909d46204a981 89783f1b53c95718391dfad14e2cfbc997684998cf9a84f8736fc3bc1e0057fc51774e6075f8a042a916be21436076328c6d5b8a8cd5c0c8060f42a611894d7a0bca5b8e2924e33f3a11bf1a27a66d734ce482b77ecfd0be683e057378ccee9ddf40bac043a2fbec8221ae90793346b0cf2589e353250976b8cfe5e0626b97 c9cbe5e8c7353682c34938541c27e628d5c3a3ff577e23cae76f9d84c49510dca6cc49433c05d64f12e597f8b70d2b6d6b386e5fef02c6ddabb83496e073b90ff32667b8128b79bc0dcfa915eb0fde567d8510333055d9a646dc1cd77c956c012eefe5fb91ceb3d8778604b3930a2080e40b201a9187847bc8c79a241063ef 503ed3417992da684afcaa71e23de5def99dfe20540224f414bc1a252b4899e6e29281b183497f9b4dce8e6f1787a6211a6fde218eff8fd820d4c0688b25894b54a6c61125815cf7f4aad4f9fc975029ac300d5ec37795ad40c635e64b1097459da88ed044f3e391a740f21d55913a835ea6b41b1dd3eeb9ccdb9c7ce5d52c f1ef7a86d1453d188015a75aa40213ed41aebd9e459ff519be30380520436d82fb9a99c013cd40659a12fe8934b4d55391033b73f03474ac72498f0e3c814f90ebbccdf9e8548fa77045f0d1ad337ba4d2b042f548b6e97d385d5ae02c90afeca2f0d75720433a1877cbbae659e2ee470f740c1dfedb35187e7ffc4cd3b6a5 459fb11f87c0a8451b8ba93f84f958d7c4db56655a91bfc98ca4a024a2ff1dd959d8a254da489b1ad465d748332e347abc1fa4092bc19c8be92bea38e52244094ea65c3795a96e8fb243175d5458142c270639695dd51b4ac0f410255bf0c862f3955cc39043a021c2f878a6d4ed2a326e9c178b593088512fe7f19df67e4f c5d9bac7fe5df30b01e788861138f08e53359b01a29b9c6ed846350765bf1f71f7906810c9aac25de080d0831290a2d0bae5f1f47f05cab9d642e5f98e4fcd87bd5002dc2d6ccecf2756c80ee3332ea70d39a139f6bd456c869fbdc377e12e7ff90af1d943d2d956c2a4003fd3af6280bf34d0b63f0f42c80ca0cf4b0f152e 37e18993ce6c339b8638277d47902443d94f609d103279fdc17e9099873b48a254b33b1770072a1af68d3b217dd06cff429ec7e612ff23de81c047282c15825760285d0e236c12524ac7d198145142f6f97ea52e7a55a5ce030f99ca5517180453e1ca4ea1dec3a77da5ee5cbbda7a1c853696135e1b0da5ac642b3bb11024 0ecb5d00ccf05e6a78df14faed035c31a8bf1be7b01ddec742f685212de346f57023fa50791175473b8017b72dfb58f615de4695436b8228781e4d0063ec06aad6cdf891353fa27f9dc983ee3c0290586a83183491c0da514f4e0d7790ca6015926b6aebdb5ed5750de8bcd4a16a0b57c6685c0c1c0071e1db3f31e5e5bde0 dfcb75eea39853dc1472c7622dc87e33e6062d8371476220d03cf097b085b7bb0fd993b4b4d035b0360c4316435670aef62bd0e5f87635b259cb6998328588479ce5d19e50a7aef79dda212dcf9eef3413718828df2dbeb152649bcada40606dea873fec53d6ef2c6e26ef5526d21cd194eeefa710820a1427231be80cbecd 218f9215987fc1ef6dfd36b3dde3795a5842d9deed58305d81afafe06ed23f5be8de8084e89b396fe827629e6f468b9947612e2769ddb9376c8b85dfdd19184836bff8dc0c920378e07280a6861d63f34d1b2e98fdebfdeafae8c13e40603e9c5e18c0f8efe1133b03bd387de351d7b15eaad2f7a209ed1dcac702d1d9d04f 5841da7c1e3761919d5d6bbbb967bc1c0cc63d0e7fbcadf449cf757594ccef1b6baa49a5012f0537a8dc6d2d4b82cbbbbaf56eadc45ee7c5aad432b273f3743507fd2c7359f9ff9b981b909fd9b42120ecca238c439d54b867ebff025390e9727e642e85a1d5edf46f0249899a988133c252abe6fb4c1cfc51b9b6f2ed1b12 9213fbfe59717de73f2dcaf955cdda7c6afa753dbf04670212ec27e779392d6513a81f7ae69120200dfe962e9c11863c7a5020de7ceaa85c2dba6165044497e9e4ee8d8236d76682b8b7009de1a5a1d765da59c57e8a8dafdfc11c20c6e0b3f846d8ffb16803d6cbe50852e9add509f618acc0c2e8665f6a77a68f612e7af4 4941094508f8cb75654cc069db2621f02554ae63c350ace6a46ffd540cbd86958cb00912a633a654c82c443aab4ed7042678325bf5893c83e70f7de3fc8fff5bd044be7ba55b58948705bee60ab8a897f7f7a0b91000b04039bbe217f94a8c1b369a5e0cf3d6bcfcdc4f8a0dc94e07ab20a778f43671e5f83eb97ffe2ff8e6 7408b94cc3aad19d1381690cf9ed8a3a73072b75328c2e50655e872ec13c753e77d75ba32476998981e502129b49fde54f25fa4a58ce689ada03a7c7755dac52c90c3ee2368d23f0fe561c220c9525ab10019f5310437cfec099a081c79f6079a3b43cacd735d222f0e0d23cecdd21c3749b2f7dcccc271064109dc381e9cb a6f5bd28d9ce2d622ded84e3362f0a28f33f83ce55e70748ab350d6e54363f2b3c491ab164124bd0947c438147589165955ba1761d70b0cb11aeeae601ed112b969b6d72645b4f760211e5d4e4972847eb71952327017596b10490ed30a07bd3bf200e012ec5bea40c2ba333c53f637c8c60454e8bab1bf5208b7e1a00b3da 7a74491f378ffcded1feb97d119c77ac23b7a383ee1149929a721d7f431e8d21cb57787cfa5279487b493d65fe77791ccdd1502dd457fab6859c1854ef581cdc16e93aaadf8af13ae1998f6f781ed955d858595737efded1ce39d18bf8624b0d2d467586f6b3be8ecc05cf0f4d3e2641703110b4fcdae550583b116825a53f 795e63fe562c1a5c725e62182874e0288b5d44eaf6e47d0de8ca6e19c0eb7c162d5907bd04ac709e76e20e38b9c6f495097e2a179780aaafce11b463c39a375284863e8fdcf05ba75d67cdb5fca3178a42f3ec8d932a9f32503831f39ee32376551c68cf4e9f7e859857be04cfd9bdf3e7cd59da1b25f96aa837cca63b3368 01d84df27da8d1c86b256dd4af704c4062fd71e701189672298adf6278b688a8e80c12fc95be6bce372260cb1873938d4432d4756549f0789ec6d4d788d41c8c890626599c6cc18baf34bfc7db34aac045748c3178df8cb58fd05630c255419cfd1536dc8e51802a64044aa32d65ec342e2fa9a3e990abd18acbb01f7bbf7b 68a58da1d7afd6a926c74315ccb638703a4b2692e955cdcf3ca1ba70d5263ace78ef0580cb4c13e1c9d79f77351a0ecb2be583dd388b0a9c7f948671e91e2834c7e3681f4a06a8d2efbb0d3cab1870461955ae8134230d122a956e998b73cfa71c660fb1f9d8a66ac2a4aaa0478ee2b3a7b46bb2ea1d02b94dcb07b40d48fd 344b3bad5d86fe6961245fe9b202d218f70345d1f259417a69182adc29490febee695efa92e17656de79141390c424ee438337a4407d58c473a3e69d708716aebdf74d8d9fa1a8d6588073d25cc5d1b984dd4d669c56c59aa53b52d9ed5a41114e268b9226e4b3cc946a9fe6debdafe6b11452967bd05b36f29af0efbc5be5 62a08574f3796f44044aeca0f82d8e72474d62651334d8003397e65ee3ed020307e9428610c16cc57ad024b3e8a26232ad6e0dfe5f98412d83c5e96c8096e32f88633af8ff118c853acdb212d10dcee9c0a769a43495dde5381a3a6c99d18bfdb9d6b24434d20d9cd6d3e4f495e67479438a7427f5cee97b487716d405416f 7773a9673a2e27c0c16c5932c6bd79d142b4508d8597ee34c3d61f6734ebbfb8bde1f1ac4a6bf47c24cec18e42d9fd5b2f9aaa713a969719de7df948f7cbf79e5fb7c8b45e8edb9b7a5b94f6a67eb70345e4d318b0313078448fc40838d8ade4dd7bfa86d01e4d02e11017bcb13aa2f96100884e285800359e0b88674ac7c7 05b3119cf2169f7b445727aa70e2107dfe5a7c8483641debc9e32e6d07f20911f1e0480ce6757160e67f10362ead3e19f87229f671135731a5cef89d3cbed50d44331202778aaaad18480eff1446674370b632b22b4ae6227076b30d78029c21e3cba2a3061a7a3adca47ed5bfd30e5dec45fd2e3660d1a0b88d58b081cda1 96795ef3af5c226c8e9e37d0502b96aa3019cb82d55b8335504124f661d878c8ee9016d89040d53c69874eaee5a6313f8fbf9444b3b026616c467eed8ad2974b893c7b5f3ee223b5eb90b9e1092eae3e408d726c64c40d5cb4c34faa2675f71707fc4d4a02a3897b91b71ab85db1fa8ad38b27d6861fdf30ce11d271c9cee4 3a4341eb76152fb179bfe02ea2b394090a87bd54535c8f41ca574118b577712b296962fe34551c5bf392b58a2d52c87bbd5c7ac6155f9921665669599dbb9bbcb4a00697771e39d2c5adc2c2150801f044c3d1c0a45f1c291e39ef8578288d4d595cc50ed4ec5c14ce2520426b1c5e0294154c36317f48f4a5473f004d6f80 931b8cb7e687336fab4f2d147a8c090953ee5914a95872ba670edbf42b1e8acb5618a5288725979bb9c91b97006075f0aafab2e831731e9d651dbfd21f25f2f6f9ad30b0f75d942673c7e0235ab29921e02d9548e196e74f20d7ef1233c9329b7c1944b0dd9b75bca1c67e40fd5d1aaf65e986837cefdc23e4692a9da6ba11 fa4d477b151a68227dbdfeb607bcce58644bf28786ba69b2fc4d96a941898a71b366b71e1b20c3a6dea18c6a519d33fcc37c789f11b06fad33c69a037b1c87e33051e6005db2b06bcfa834b740c0b218a479d499ed200bec20b7a096e8638da0b95d517a83f7b0b37d4b574d5d152621bbd0b360270c827e612090ae4b5aad ad537b45a3164794804576c1e7deae47e8eb37eb8c1018d32e426166c967892239dc7b174debfdfce97520ffe7ceb54ac749d67f2694e3509c5ff159a84d32ef37c7e06b667236459bbf27fe5ef27872039d083e3d2dc554f13c798e09efb5df96b58328f59c5b3fc3047c079a34d0d731d4b570ba59995eeb9c72df2143c6 4c62cc5afe360c75a4d9ab3cdf54a8913bb84de4de74e0285e87d1521ff2270a395efd99d8972686a807c99644d8df8e20763ced33995e505f75ffe694fcbd0d8f8560135ee959fad1aaaf91e0dd854132aba65b71e12980e478ca59890445057d5afa26b9c9a8f97915116a58519bafb31d6e265759e4868fdbbfd81a937a 1ed8db8b464b95210457bdab032c1358c8a4c5dfb6501458a2086ade30dd448fc49cdf849d3ba8358b39eb6cbfb89838ef04b79b914308c779e2ba058c440160793897f068b521a45edf81c667143a5db719b9cc8b51a7f448d2e0f67ef3c86258511c5c1c6fb84ab9a2db5897e295e14ff108e263846d7f0442d414216318 a1be445afee8af882b9e8e17a43a37052b8b378478f0887da41275c105ae18b9298e6b5d0dbbda8fedeebee6adbba4ffc984440229c7f45ca95bd71b6abbae15ad63bfe3a8f86386b8c40a968119580297a4caedd63d069ae5e28f99171e006abfdd0335f405407c218dbb8927697c65fceb34925bcd26786122a645a32bfa c9fd27a76444d2f1bce4a6ab0a3c718a8a5da1450d01686db5efe343e75db1dfcb2899b5476e819d1aea0ddb00682b76941f597857bf836a47046342f120e148d522ce920847693b1ce3674d39a63ba9028cda2bba9377d36a9575a4167dba39fc57daf0e22a3d71c14848239408c65070b82754ea7f4297427485835b9354 7f259e8bcfd11cff171b3f6e6afcce5873b2a6a4096ea04c7fe82e28ed6ee14b91bd7bda67b92a315af135061d914ff2c3d67ca967780fdc60403195fea04886d07fb270eb5f9b9da42f4a204b8e978361551e1479bc6ac39f4c8f69be805d446e0869ded263ba50a67e790f83039e32cccb600ab240e6760dd7bb8d833732 bb0820bb5bf8dad30929de9614667d632a744666a5577af2b8cf7d6d262cc7d73859d29b283656d701feb26978b0478b89770aa815a5f85fd7c358c3cbbea845ef0e3b5a584f9ac4d678e6e7ca88b77af1d63f3262a159711b9907a39673f14056f2940ccdbfd9a1d82943c48e376c117a4866b957d10bb9db7f9c2550d304 b26fadc45e282a3324483e3849bb9345958379c033b3707ca86b6f37c949a1a0d3f0d3a84a8ae326345baf4a16ffe3af76a2ab6e6b0d462324f9b005b9089d9b13ae6e381759a9b3469836e909414f36225f271502b598af4be79a45b2932ef059007e60c4272a9376d70c811b248c76571ba41f15955c96fa71461e52c2b1 b18905aba38a52bff889b7b0fd8a6ef68aa84674232af9bbf82130c806c11be1a7245edaf784f68c68edaa2b36ba0dca058a837b39e40f92bdc85edb8fbbadbd29cc49ee333e7f946da1f2f2e7d96623ee8bac7631e3e49631aef7aa2517fa2ca5e35d1ea0900b450c015adcf525658b70f98209148207c2b50a462f9ef627 8e79f28095064ec2b8e44695c17103e7745d58991f3f0f90a248bebf7ca4e06ecaef2196441b6d6b65c03b80652f318ea14e885f250cb70ebf217725a214fbc72c84de35f3e7a6809b45de06423c67274d9967ad1535ee362c4378f44ceb22dde21685a6505c0c5976667353494065be4a9544454b654513044b2ebf79ae94 5569c7dcb9757cae6b9909b59ea65c4f2b0415dde774039e6d8a9ad2684e6b633055d5647743a10cbf4e0d40338256639db88d0aa7eb86fa38bf8d4ca650d649aaa6c3defbca976575850ad994be6378f9b1caaf9edcddc33a12ae97ed73ae04d8914e238517948fe1e88891491706affc32b6b43ee0cfd56ce25abbd631d6 2f54d25611915f6372f56affbe4230f8e4cd96d9054370ac3647c156e8cd508d5cb76e40b7b795885c5941bd649a229156dbb83ed945b3f0e9025972cc79692b04a5466615db81f1157757e08b4e51e0fd249f36f3b819c40067d43ca1fc36d5b31e1eb2757da561ad15dfa42c6565624c76cd4da094a4f807a7bf7aae7612 839c28aa5a8bbe97314b974f17e0a1ad3aca60871ab41065c9e40df78ca7f39a4aee9511bd0e14b1f465cb6c4bf97047f14fd05c0aee43b8b319984e9974948c87a86f52be137a87236da3a309c13b412f7777935f155e097b16361239a4f2b0dc8313f0c882001ed7e5c9ee6316cbb48db3ef25d3e444136bed1528db3cbb 0b0ade02d4289335ab08ffd673888e3cbc1bc86e98ba4b642bb984a49e2e9adb64c4422147372cab29901fa33d9c6b26af216a87936711f6dd3d6818785e5b9d0a9df44dbcecf5ca7cda41b8d32c9845ff888801f7bc3472ea26f578c47bdc2d1d0798b88b0db9a35a3db85f5f603443dbc411c8ee0738b7d94202933c31c0 dbb6efa41b45f65e3f29f66569e8720f8d8ba4508f5ad02d0ab8ac8f90f67cb2d8557561f86625b91d0c897b4914e6e716a39ba65056de5ea3b34f2b74e3ac393c422b17df411bab7cdb45bb37012358fd73ae65c7aa5ccd89fc6530fff77fc7fa5fe0ad7d7233d027504e5aa18f6223cde73b224c9b21552fcab4d2c5ee95 bafa7eb198ffe8f6931ab288123f06e423ba1b32640018ab815d29102e66a91639719ac32b3d0b8399045e3cb3a768c0bdf7c74d5483853b726d1806588718f82a6795a22ace1b7b9cda41c3899bc55e3a3beb3b7aaef5c090b48b7c37bb273eb5d1ef2125f0b882d08e54bd051ab2938a0aa07effd5253bd1e84cdf0e3a6f 0b5e930b20c943117d9eaec54206f22b318f8112cb32997961ec5760d7290c767898b1283cda63621c45824ad1416b1cd86cb50f481d354821158a75177025fbd053bea18714f6b3ba713e8616fc671d2c505da7641e4a18caf4762bf906d677926cb43a8273e280e32264f6e1d2e97ec89870a38c8c1d77ac194d1b2ade81 5bb7d2b3f8ea5124091c8d9ff7e08a7e498767b5427e10929047c61b4b4c06361f4d56c61a7bcd3dd6aff504de0d07a0cef0e88049217460cb30fa2ab5f72d9772ca2cbce8f1879dd5a26a29a7bd228b4076b55cf58b775597bedf14cbe75d6d302c62b2f6473b2c9cd1382d1a4626a69856e32e653181fe9c4b1dd1dca603 6e0965524f66f29aef7c92c891fb4de2333891470243d345d775cf14ee8d3d9b5424b4d69629ed3991189cb7d6aab1bd4ae4e1ccb151003ef385f13526d0dd6d8fc8e4da043cca1e1b41396af347d5f357c24398b502d3ade4f0b6c2b61694893c9650b207d793c98c2b08bfde9ce62efa6c54531efdad60fa3142b0db4f3a e251907f734a3ca244e895c716a7deed59b0d3f46ee2436e4ce4cd5500685385d7870d095dba27193b58e77240211934b46aba9520566a5d29999ae5c3b98734dc95863b83e6c45973faaa7620f85622eba49cfc9374958c76283b347061f47dad85470338db6aad64039253139baaba8e55fbc1e2e1cf693314b312c1f1ac d3a088585c0471f0ae2c807b1f278a4179b0fc628282f9555b3131011b53dce14507ea558d88115616d57a77568354a591446019d34c5506ba8e82cecb91bc952422266e9dd68f1365c3e4ec28ae9f50dca810f3baaf060ec98fcc56a0154c329d24e5e9a2b4557cccb8a96d24a43dcc8e6c49adb359c1786a17bc5fb2457f 07fe6ccc86442f7ccd337dc093d7511d825227fd0bf8cbb65cca464db42440a64019af4b8e420b4b7d1cf1acd91a4958d4d489aad13b8e803c13c88c1de3e08ee4309a0336ea5beeb7a80d01055bbf10e41597966d5c602dfa61599415c7598bc9a5216062b7add807c15f6692feec2d0c6681113ee8a10808d38d42bc7190 9e549e11acc4770bc9549d864ee840032544ca52cff9aeb0152fc96fe6c2f24b63361a0eae8dd97572f2134ccd1d64fa7a2490c488ae577dfc84b0b7de18fe20d213f2116be98cca76973e22bfa8c30f7db5ea3346c1fcb9e960ded3e4f69e233aca0fd5981d32216dba1dc2d86ff24a302106aa734c590ac1e9192d87164e c4fef0b66d824f0c977cc3cb1c3e1c1c3f2c0f580970b3cdd327a0c6f43c5c6c524acaeb31becf2f801e068b3ae11ef37c70c39fcca9f65f2a253247ebbcd22c79c22c8b88a7fc1c65270801ef74360450d0cbfd22781b0502f0b37075fa6b166db71c93b131a2e2cbbd3b7f9d88feddd51b59ebef55d54836dce961d0d4a0 f44efd1937194e5a88d5888c8709afc9005826d418683bf7643d2b0e6a34d3ca7db2863f75c0b7ce96f3e1bb1483af95fb5e5c27bf5d1953f502447fd9bc52e76f8a2cf6f06e146228e065bfe3da2f8f2851fd4ea2fa61b5c552d84086898ee603e0e9b56641fb09a8e9a8c6951130b533da7c6bfdd4455ba3b76afa7e8b20 b587d669fe66d6a39680cc6ec8a4235790bfb686d16d590cd65f58d6b9c59c2589d88c121ae8cdc2ab11995964e4f207e4d977e63fad961b2b252a90511a35186da15ba6a27f251895bcaa087c7330ea94744d5a2bffc59f1aba6d08f9932d89bc018bee925e89931712d43d192bc909302c96e4014268163004c2febe0abf b2da765b09e9200d6dd01e99f6b7097bc5af75ea0429b4a06a9a21a86fbead29966b22944d9c4163cfe8e363f033c589212eeb6b6c58c74e3e66f8d4c29d6567e1193e5900add2039943e4ed1760d5febee7be8a58d54df904b0588b74e48d0d174655553ed4ba2d2535ac284c14860776b21535b9c94b156668960f2780df ecbd0455b6ee17ff6ac6ed064f64d0cc1bed58b3e0fe5c377d0001322ff709082b6254bfc69e01929b4ce79c2e9ac331032f9adb53584d9d0e497b8bfb4e7ec5368229437406f9c2d58acf4758abeb67a8e0f9e5bec701b93fcc9d2fdaab9bc510174db7c46e55e059e1388d4ac5bd2e15a90d113fcd9ba2c3d229fd8307f1 aa81bbe3ac7703e6b0a6a9d4296bf793404a4cfede15e0ea549be8ea8b4cd6617cc30ff3758e950729cc1fd30a3550b4dbe6051794a2f3295d8e939c75c76ecec23d0c643c5a03645ad533ce88db5be24f4083eebe4fd1382adb3128b8b39ce201466764fc8261246dcafcee6e7f656b98664c18875fe33321073b06ec0f30 42f591a8bed0a6888cac9582bb07979b03de84ba8776b0b469816ff032944f919adc5e23514cebbce26f21b8d7fdff7e9d58423a23443ffaa27454d659050b1083647e20633a8b97f10a8f0e00535eed7ed5ac726ea7875261a903412a56c6d0a636d7f563b12668d4e260aa0b403e8d540098dc605f21226e8309e74a233c d884a418f68f130213aef0dc65a4095b0f2d3efa692afbc0e8866c06dd67dfd56fff4ae4efb4cfe9a2519ec645b60ff2ed7c78f85f6fdacb0841a9d14189d5b5b2966dece89f30343d9e58fc4216c8392a0520b9e0655994c7faefd0180ec956e5ce944a030951dedfb788ff02be6cc167c66ff244676c5a81e007e75ca147 2d52362d307dd8983a9272b89236f93913562d3a7c3338b14cfa48b6a918efaf2ccd7d9bc6d657daeef3aa7c6ef4355eff3bcca1696e082e9bbf6e29141ecc9b7a1a2eb3eef120ed56462892fa01820366c4702b861686f6148daf2e46e867d1245b7b99781d19c2a3764facfe39bb5137fec49ee51569395b5bf2ed9fe71e fd0e26945cc9471c4f88f8a886570bc61423b343d859560b3aef41de2f9df3e818652c2066b154a966fb73f43a134224d83638e24ed91bfbc0e656e0cc518de7aedc97159840abd1a39356440aaf7f2c513f808f113b6ddd012f01f30547fa4603e33acc6bca4843a84cadcaf2d319c26925f29ec56da1783db5e03a19b304 8f610d9ef04d016c61d1c751a4e9065e9841e62cc7ef8a3db78bb21480efae9cd04108779cb0d638772aedce6368fa2aff3dd23c5afaac43ffb6b07edc79b66f28647ef91191a26b562d8f0708e85270e557369acd1ecb8f089847959462717e0b2132ae5c120aeaac3c658e9aa987cad8ed55ed5b6f6dccccc286b5bb9d84 fef8a2157275dbf55493c5e63a092c14693b2d30c6977797f644a667f5810a12d4f7cbe7c713af75fface8b4de933d4082cbc5c7ee3cb1f36077e5cb50dd87b92ce3b2df1ff8553c2c7267c2a443c8d8a150ec66b1f141e9b0bd315f9410ff7e18c03044700e9917a0d41bfb93f47eefb72b8ad13253108dabc1ac0b36782f c3fc4d62b6d5f77d13a17e7d602c1675c6b65134efbb2be8cc648b8ecedd4fe76bf9910f872743d963e6462e5a8d9e6eaf1eebbae6066fd078e1c177b9ae99343a605583957de216ff574c882e1371d020dd913deca591b8a8b11589f7cd735f75d708937681a29d35feeeb53a00238f4967f53a3ea92830598e7357758c7b 5cc5c2e360270b786592ea51f632b3ec761c92f562cfc8c6808e05ff82308cbfba663d3658a89f1f9df332492b42b3db86cbe3a905c62fc5160a31297f05beeca4d27c0fcce2996c80d516bbe7bf7029147c7e9ed11969558f95e192b517b9b33f0082523ece5b7d2e08e54ddc2f3c27878bdd026d2ba5968b4e2ccc5400f7 34d183e9c7f1d93a6df1f3e6f4e24f4f92ed54db37a12a6166959833bbb755a273666bbab9c1f6d9ff4d9f2b647de891b228f92c1327b05a6f5e8fc08dbc689b52bf06918746ec812a5a4db8f7164321b29e22c30a856fdd499749b13c99818b6953e9013dcb9609f8357fc0d2546f426ca3f68936a207fd786d2820da10e7 514132b15942103c2a3c5647b619b0aae5de4865fb60f66fbc5912d6b3bacb8dfeb0db1de0e07d29680dda34cd4a65d6ba84b5ce71c1520c7a13f252c9cdc9c1fa7b1d3b188c4addf78a8b578e14671e7f81386067ade0ded12ce8f5c2cdb2100cff190af6da962ba20e5d1d52a6c35254659f89e5843c8bca4359c1da7c99 1488b52d18e536bfe310ce24e0d29bf5adcd616ca5d3e973a69ce8b6e683a71e05db5503825d34d596953a5af95525fc84c9da753ee8d56fe3847f5a9a2e1576cb1af75b7e2b0c0a592ac2dd5fd3d2f1b2b572d608fe6425d7ab17adafc1148750c7265eb881e3ceab6e62310559a74bb7b3d564c829c4fd2f6b467b716719 b9a27d14369502a5b78ace9c8cd23e8ccade464dd8412d4068e57511f5e072765285dfd739af0ed3af9d8f1da45b51bb00add8e33cc6f2768499e8d9336b2425b6d8e50cbcd49b48327b3a680190182fbd499a6cfd433581a533da7026cab0af509b06f5080847348e4637ce48acc61d51bbe392ff6cc1bf9b7044f76efc67 cbbc53c0a7434120627b2cca4046d3d75cc3e14417bdf5e8b064d27f90b34ea4820b2029fc482542a65c92243496847bbc35e60632ca89aaec1dccb839aeeb8807aa2ab152fe6dbdbb3901a71f9abf588e01346071f844263978ef38b8b43c5d7acab06356f0e5483435d46fc0f5398ea25d6b8f6565e8c32608862018688a a679d31440b83876221af3266091b022d40c68de68f820ed861838da63ee5176a3886d840140d6a30ff602d43eadf1dc0367829d41e99a10602334a642cac7380dc643520a9960b2092a2ee815a1f0c72ce3ff2e76306f3fed481663b3951e70f95e2dbc59b9393236830c973b3b89e5c825c2d69187f93e42d17c2a07cb3e 2eee178f6a418a73019af604528bb10ccd1bccc90603d29e16db19d2b6b48bc350e4d94748a3b864355e577da3c407a8d575b0a469ec9063f11a779f4901b05aca7526c989a7b08007137075a3580d71a4c61de20d314cf055682774accdd45c96c581d5b1dc5133e8a69373015589ab57cb2b0143517a545a614e291ef39d bcc63f1c19444d6eca425dbbe5bec06058b88151484e8b087e7acde2058fb260d92d7f30a580afa743e33dbd0ecb7dc9dd556e1d13c6f1ded3470626eb886f2ec420a2d67e228f561cd96fa3cf2c1b31a541620d7ceab9854b78c7f511ac585c97423415242537bd07249079bfce48a5f4d482f4caec4cff5e639d320c23b8 5fea65d9f5bbea5f482246e9c762ccde2714e43e68aaae98fb1537bd3be2728cea84454d32e0cce66eacc04188ec736b12dca3517e2e8154169ec6a6c81872a0b590698c894d6d84b63a351b8afe592e19d5da90cfbe3bcbdba71577c0923de12d7a4b7cdf5f64eaec4445e50b5ade1f510c74aa53d30a36fa317c43c6fa47 37d3fcc09b9e2c85b7a62f5557e74cf21387d72603d64f8ba60ab8c932dcbd2b5f5f4b3ebbe7b8b2d5aaeb9154d22e1ed0f866062b277299c3f6c4e1bd3e91a98e488d8201b33c55ebe6eeb91b3eb42e5a6301d95ff21889efca92502aab405516acc5a533f998dd55944a37f3c926ebaba5a545f6a2a33ab44cc093bd5b5d d1e36438ebc4a71713895ca93b3384efd3b350a1a5edcc3ae364e7d532712c65e0f8d19e8b689dec69217de65e1f39a0e20641941b0fea81f86414d11abedc636f74def51198dc13469c14598e49d40cf45dc4efa46d5ee9a26df24bf3f30c216a5ae20467e1bd669c856e4568a0aa4f0c69093407dc050b9d4d4127208401 cf2b26f44ea22e11e1eac9adf3f3625c50445910eae65587a62d5452d30767a22d9b527dc1f4c1c8a1a441928439223909fa1037e30c7b3ad6c9a868a5421887846b59d454f98dd05e270cd66f99c6b13bd579ba06395ce25f791e9642e8b7b7c02069088b1386088fb9d4a15a6ce9224db3ea3598f31084111b4e61127507 f988658487d7db1f02387875549bc60db2d0d447e12c30da729f38d32063bcbf6d034ca4773e4849705787c1a3861bdd0f67b3fcce8ab2b43d933e01d633bf17dc4f83397e298ca2088865d38659cee03dc34b627955ed851ed2838a4355e111a936ceb53f664afc9814bb316b49cdc96355b85abd42884348134e9fae3618 e41806bfaa0803501d06f8f2652d153cc113beae358ebd5871b74287b7f6238dc43858226c0cc34490e7859d814b753e9bcdfb235c5cf28e989159dc90472591cb5368cea54b64e00399688912fa429eed02bd8f52f3bc32bbe2ded1aba8bd5c8b0710ba223bcb75480f58c7c7f092aa4699cc29f234001d387e89fa3829e6 c367da7e9206616911c56973de4894836b342ee38bd3281ddb764ab95dc977fe28d491913c06c383b24835da0db431c460ba97e453ad48ecad94ab288371cc9eb23a506745f8e5a719d400fd659e6727cccb95da275319aea1dd6bd2a9a057e34920a18fd354cb55923e207ffd18d7e0e0b52c777a3696a5afe9a3d58a1ad4 41a9f473a6afba9553bfce78b64ba99e99c3e29b5bce68a3a8440f4c9b525473ebcf658a3a333abedbb60170aa80dea073c26290e7daa7b116452c5d66c00f0586bee9a7e135607185f6b2f3a5e84d4f8fb19d45a1b7b227fa8c94e77b0ca7b68d1aa2596f2ebac453b431b0d686bb25d252fc9cb5bcd1367e24906dd3a63a 7810045d7068947fafd4abfc7ff2f6680d4569d0164eca0a254c2235c26a8e0ab73470082719b10d2d5e2fc9836897af4d8743dbd294cd2320ec6d12b91bb31f0535c99fd705d717c29aa14fdd456e7d9e8803dadafdd864273a757a1106425df342604ab8744f2d35270e0091632f6256d00381d34cd167f81c7c25a742ed 9f732852d873639021e56aa1ac0da15a18f45a78dfb7f9beea3314b4e62e21c0695271824213f44b4b12f3379b9e72a0af805e496d6e97a5f2bdaec4db3eb73ff2a77d6ca608b03069df507fddc7296e9f3eaee2072b70541b129edf6940fd18e10365d9ec8cd3138cd690089c6228d0805fb6527036e75c9ff6f19a5fd751 09b4bf2c4761378f8283a4d6adb7394ca9ba90603b505a13e524d6b89d91cdc247d9303593e087a697912414e2092f29a00977cf5f3ee719ffc1d414fd9707e5d9bd10f401cbed22640df87fd3762a83d7635e90feea4afa002a2464ca5507bdb52883b53247755bd57090909a5e4bcb6f9db8199394a3fffbb3b6ab0cf35f 62ccbc2d7a545e85b2d734213a00cd5bc08c3462580b8d857ea1b4f68577b3f411c8cae512cccf495798f5725b1497c0c18fd1bb0c4a86285f80296222f8524081437d3c82f7f54f6459660476a795acac0c6ba4ae6608e07f4b6c847a6b66431d7334fbf2013f653852d0ae3a02e1974837a008ad7e2aa4790bfff41318be 045e139fd2b7d66d5e8ab19c44071123130b21d4c0d869fcde287371faa71a40800858a1a6ea2b11d894d54bd19bb3d318d438e97dfc5efd3012616caae849110b7f8af6c666deab0bb2551a303607fe35db480c7a4c554a1b05ce843dacbe2e011963196c81515f51e4e84252c768033557c73290c1088082c4203d503aa2 20b3e168a0b15ca1e5e8595d91786604a10baf84cf0d415a6ce5ce36b5a7a999cdf6182080340fa256ff2c1089142def2dc0390f2627efaddc4ea330cd834c3ee54a44290c2c74f41a148830b750cd07c4344f082fc484fe2de0de6090585336031c2c0e0f3edac6e21a23ebeb69a18d6c55974157b45397701ee18c1c6c8e 54a0d915ded093f903801aa48e07e1c24f254c8186ea7cb55aaf6cd028111c79e4facba06b942b52c52522ece7923adeba27965c0ea51b98e5c5b300c87d3671bb2c0d79ecd048e88898290e0388987bf24409941d167bebd3553a596b9f83e2ecc9f4be273c1c57fadec42e682e4be0f5c21fb1d667e97b0db8758f34811e 1c05e79f055e6a8975a45016bf0858c1b0c0de765b8a5b96a28b9f8836475ba1b9c2af7210902e1ddd51c69295fe87fe0e4163570d059c2f87c3ac6991635f448e20ca2eacf7e7fa9c658c9bd8a95e4109b2430aecd0be8627212cd354e44e841bd7c84d987a45cbc982bc8609bdd84c7f73a25ce1e0fd98f3be1c4c9bb646 dcdb9cfc98b1ca8ab5ecba0baab9f32650709032675169029bac3d3384ee6d4bd2c0d940088ac3bb89f4ba77339a80e45d094b37e7d2121554fd57a8b139e6252cbdec0a65e402c5b5399cb0a7f2c2dedea56126d9cf3d2727c6a21153324c4c74844f6738f1f5395f3c671a44c7c51239e9d336a937975b35d4d4e58d5fb2 3406d8939121b86551d20e6084ce7757155703dad1cc71f04bff30a1076f7cca38f35754e1005d280dfaefed32fd1e6d605e55c3baaeab91b341d04a39fbd3c46d06d91a9b1d3fb7597821c7f146abcc9357fab6c605b9cc1ff08890b74992cc4fd0d1f0327555ac5dc7e58c814fd84070ce5d74878fdb4d143913928f38e1 d4b76eed550ee31aaf6d7af34e9984ccf17385a4f68011e1c2aaa6bc3525f20878039d95a24ff47a2bea9a2f85bc5cd2140d741e525ae6ac884406bcb964f77ede85180d2595d2148dc8c7a490a837b1972be2b4b5bdc06eb00e0f3938a8005505eb153d65e98134ce52bbff0dcc2616f191471170a956f1184e6cac02b136 807e3b97dba5150d4c6f30bd51f18d9389680b7891238764b13144bed5584c69a7c774b64bdc73c1e6609f051bd426f3db2b7e02008bc5b4b228e4f42443d39cc3fd235c155cdd4ac52b0c885ebd0b52211f4a472a4cf5d1c6330cd14986d9823b73cd5105f0e5fe1ab6da1fd00b3ae53e9a86680d75396117961e6a07fff1 ff8df2a0aa94e1a4e39df882734505f896b56afcc88336a19c24ff4ef6ed2d77a6a35b8882d108d1b334d734e4c59e856e4431d8f36d631af9b8bb319ef151d48c0cb3b6cd50302ddcd6f7711914cbcc5eac57489cf54fc425ccc80348f7eaf676e284b45be85bf6b6208fb0fe78701251e9b1e588c4d12323fb577e25430e bec1455bbaaba8eef9c50bb999d8a3330f543aabe43e50e265632c064d005a352569dfed8bb17eac75868b704621a622f9a919c4d428b635db9b03b86da6d8cb6e84d5208ed7cb2c621e822e174e4f6801b12414846346aa33bdc7fc23b2ea7d27912f440506df8010e5680e83500c7d51a63817c068d1ea4588d646e7cc51 ee3cc7b53b170901ba3a9c033483e3c51b2d08cfd8cfadd27431b1a274b4e6d15cc6e5c648354cd98f7ee80ea8160ea9d554f63137d5b23ab2d95be9efce8d7b83143b3c8991227e8df38d314180597603547d906b15ee22d67c398e0a8662718facad3b0a9319b74f384d3b8949ad0c4e6f33c61293cd4bf058d0675fb10d 40fdd8ea513251d8131852571e10f9ea07fcd622e213d399ffaaa210caf7eb8f7d687876b9279e0ac8eb530c85b99bd0a37cafea550f30d36903cfdf3e7cf99c6537074e68c702f8ba5b5d169b60a870cd2e3fb14cbc7ce15086945d4555f72072c197026c6a929ebf5834f149eceb505bddbfa472fd7fb497f5397eafd608 1229df8afda387f0e2b41b786590becec0f294481f4e5f22eebfc7b4a8f070d6c20c56ed7ee378dc3e2a2c0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont %%BeginFont: TimesTen-Roman %!PS-AdobeFont-1.0: TimesTen-Roman 001.001 %%CreationDate: Tue Nov 13 14:05:42 1990 %%VMusage: 29467 36359 %% The digitally encoded machine readable software for producing the %% Typefaces licensed to you is copyrighted (c) 1988, 1990 Adobe Systems. All %% Rights Reserved. This software is the property of Adobe Systems %% Incorporated and its licensors, and may not be reproduced, used, %% displayed, modified, disclosed or transferred without the express written %% approval of Adobe. The digitally encoded machine readable outline data %% for producing the Typefaces licensed to you is copyrighted (c) 1981 %% Linotype AG and/or its subsidiaries. All Rights Reserved. This data is %% the property of Linotype AG and/or its subsidiaries and may not be %% reproduced, used, displayed, modified, disclosed or transferred without %% the express written approval of Linotype AG and/or its subsidiaries. 10 %% Times* Roman 05249 %% Times is a trademark of Linotype AG and/or its subsidiaries. 11 dict begin /FontInfo 10 dict dup begin /version (001.001) readonly def /Notice (Copyright (c) 1988, 1990 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype AG and/or its subsidiaries.) readonly def /Copyright ( The digitally encoded machine readable software for producing the Typefaces licensed to you is copyrighted (c) 1988, 1990 Adobe Systems. All Rights Reserved. This software is the property of Adobe Systems Incorporated and its licensors, and may not be reproduced, used, displayed, modified, disclosed or transferred without the express written approval of Adobe. The digitally encoded machine readable outline data for producing the Typefaces licensed to you is copyrighted (c) 1981 Linotype AG and/or its subsidiaries. All Rights Reserved. This data is the property of Linotype AG and/or its subsidiaries and may not be reproduced, used, displayed, modified, disclosed or transferred without the express written approval of Linotype AG and/or its subsidiaries. 10 Times* Roman 05249 ) readonly def /FullName (Times 10 Roman) readonly def /FamilyName (TimesTen) readonly def /Weight (Roman) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /TimesTen-Roman def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /UniqueID 33454 def /FontBBox{-170 -240 1000 935}readonly def currentdict end currentfile eexec 51b62e6485ff502ba0e8c3bcb14f6df4972381b4871adb09ac9eb79905b00499b284d3bc90f488ed47606695c14ace6e5337c00685f36ee2c0a1233aeca83a807417f1870e6f126918756d17aa284826c2964c8e734b64842874c6005391a75b8f8303745e9c4f94828e10908c61a58271cd38185f3d7704d452d4a652419d 25e4a46d383fe3aac944f6a617d700dff78e6ccc82da82c9bc5f020ab9ee6e25daa1e0cf17cae6ca458b0b3bafb1d380dc4c7e6ffa6bdf1558786cbd6467946be05a920199a251fc35d28f6d4b8902f468b31c03124bbbd9a4faba60c491d17ebd8208279a4fd59061d91ff6e369f4f66e67e6ded1c82c0141120838f851d9 8e405b14fd0e04ed329f016107e6206e9c9d67a7e33def897d2f79f491b64124220ce830d9c723f002428556a6ca7a39c1fc69176dc03a5816d67c95b2f9d97e00450c23dba119c1239a5addff139e5cd228353cd96a466a6c20ace8d2937c63deda65e99e7431e7a5ae2f86bf85b44cafe6f279869cc893d6b3f4ccbc210d 2720c1536962867d23f57c41db6e47edaf612b15866d7beb42f68d55f5d962f624c975305fa1b7faf241a8ab9494f1bceb958efd210832088b660401956c5b14d821f1aadfa9431e4bdb0e332285419de9a2b3bb99aec22122b48f22eb6a3f9bde585265d803eb67692abfcb28b8d945f5c2ed4c4e94c3816678f7d9a4e5fc 324ea6c0a20da9787aa4cfc1d9bc73099b44836310e3490f5e4cbd27939138e746385a57a6bd53a97473189b7f1a60cff16282156385e51432a7a87ce4cec8bc2e021add7b19783740e8f7fc628b6c71bfe43e4b35948260149c96ca6ebbf0706b3d38ab61a01e20ed7acbceaebc21e646da9db30dacaaeba11a6fc1426262 3a0ce8e0e9e57cd482a25667c3040b965b712457f44c3a1413e63f559276bf384b385fc9feef93cb188ea08a73e8bccf3e0d5dfd2efbc5302ccba867e561becfc9db7e7da2203df4693c3aae0fd1792ec06c8244cc7998c64379f67d46d45eb6e20b215948777b353538d4dc3f1b7c158fe0072aee473c4ededf605490e58a b6af02548b14c96bc8c0b47e19d7d955fd019029a8d6a23b4f3e8e9ef5c5033d4c395ca0d63b83737e5bb1122f10e401ec9e127d056a4a283df85dc40cdd2ded2c16dcd06066a067c907f17439719c569a573a79ccd058bf1336fe2cc0a1e921328aa43a8112548c286374763ca60ee973e1281ba472c651b6c0e4db280733 49bcad08ddd302bede73f545d7765da889501aa89bfb4705319e03c8992994547620b6ff6d300b674b39d0fd2c66eb3f32e1faca71bd775d168451ff7951bf7836fbb8bafbb0d412652fdd149bdd0da38d05e1fc22efac25ec67cd3921fee95ad6270751c0044b5f26e5f97ee7fa05cc5b34bc25825e5deb81e613a4684e99 ed9e61da035b5d3d8dfa178282d911e1bf8564ff657d7a02a43164d87af4f24447a142dee2462e4041ea77cb71312dca73c63cb785390412dc9bdff494c9bb09a402e3d2d148afbdd8c68f846703ad61a68fb5860425a0a66b863a82193af0d61849898039e3e524fcf40edd5be7d223f76533c466c1612cbdcedf63a67866 a2735137c452931b41fab734278171ef27a8126e518eec5d9bb3870fda3a19a4d9f9021d2131047cde97c614054fe17fd9e3970c1801701022a7b69ea1be414fbbb025bc62165cd0ab1954db74d1421b2e233346d6c5559634a7cf42562909fd8b505294f65a9979f2283665ef4785d07682db2d717f52c70b1cecf007b0af 22592dc9688346820526afd221f749cdafec2eb64db7060981c0d94a18bb3b61bf8b85668a6f63147ba54a1bb05e94abe9db2d7a8ab87e22ba6b2531826a242c6caf7d0ae98c694e5ba06b869a13dbacb6e3bd8e69c7eb84e9764345e1435227689cebe154566cbe7c25cc0f3074a56cd3f34b8992c25a463b7beaeac1cd4e 433947b36c636eb0dc19c1b3ae516b3dc15988e7531145702745437bcbf3a8cb6ea25d04e14fbf09f964064c491bcaa37e544540fa7ff1f0400c0291ac583091ea13a0c9d17543da820dd9c5af45069afdfab5a9d77e517abfcf1416d57ccd346b64de6efe447e2c637cd97cd1f2079bd9703b66b8e5337211096aec287ee0 c4f0faf924e545fc237f12812c403aea2047a4341f9ff8bf0fd12ebeb418318a398b8aa7af5e54c2ffde9b1db2fa31637f0f93d999727251d5872ca1b05469e4ab8e21d413637f89aca4e09ef5044524a9f4373df7894a63d567679f5829c91564696985b0c6bc9ed200a6af87b8e9e5f79c767c6cc7fc91fda820b5f93906 441e51ab2478f8a58c7c2c6ab0a05a8f919a4814a4f02e7c762f7d3fb0b4f93822b8ac1b9e0ceab70a9912a873fa4f3241fe187f69ec9b7ff08f9ad83802c008678089553368525eab86aaef316f90750d8333d90f27f791aaff106c0be6cbc3315751a0049ed44aecb448aa29595ad68c8d3971b5681c3e96976903263259 6949d8670fbc1621de97149261408faa0457c024b5be2977da6f998a28e0f2eea1716d3bdcaf737a46fbaf2d74cd475517d9d817da00587181add8b88f023a1a61be8f56b4368d1fc3518966e1f71ba1c29f330fbce755432d5eb0d2c89e9e26e5404b71839f9889245060e4123cc30396db16c2dff1478d201928102b57ca 172615a85645c637f3e6709788baee28b5d5cb9a1f4987f4422b5008f83cce1c184163d20b27b99fa58208e085f229f4f6819e04aa9311ec234d08afbafcba0e4435be9f8f9c31ad6a2bd09badc4b026d06977093eb0d2b8315b1c5dc76213c0ccb2545288bf96d063e4c9a8f1654f3f89f9cc880928b765354add5cbaa42f a469c5d22111244c25eccb32c1b9012f843c2a6fcaf7600029fa3269c4ca8fcaaa2ae89cdf27b0f24a45c7082769e086f4b74e7ab02e80acbfcc0308ea50903e40d203f4eeb282556778b0918c240d96039ffd1536dc31e62b8ae304fd54844d0c4804c3020cd66bf2a8ce41ba676babd00d84b6d0d276bce91688ec3823c7 4cdd6ec411a9a270715f3826af723dafe918f4977c960f45475206cb2889a8efb319ad1bb229ab217aa5e26d65c7c20da60e71c525642a0ee0c3980e0cf8f18985081e4e95c8d8357c5ea5397579db5093957d96299a3a9133e192183a037957e228d693c4a2485026f913154548213a5213a984401d5e656910b2e8e04bd1 75e9e4d51a12b7f02b47dfd9898020c454c648d1f74876eb0a9c6a98d46bf51825d967547727ded51f666abd6ea381e2165b72fb4c1deb08fb0b4d7f94e35c7f0e714242be1ff44798bdb9ea8eec2bc2f928eac244cad6fccf3a80c45bfd28130763ebf5bd98c054bffcf381d10b3e16285924e18f07273025a21251b9b343 b8e5c5069829b0e12e8e578462ccc3a2d6baf878198e2f6dcf7fcc705e278aba84a14ef8e9084b7be1fb6fc053fdeee3b31bdfd3366cbfcd5814ad8bbb0b6477b07298ac1d4b8d733b893ffe8f1c16d81e53bb8e39e92b6f7c3c281bf48c0a67aae051bb59e9dd5388f018edd4f48ecdb11bb413c31fc8d802f04aa4b481fa b9e21193280f1a11824ba4cbc18bf8af3c4a3cef362a46a01c4a8bca957857bbf8228a27878cbea1ffd2f3b931e0ebe96ce3f3acadb9b6546b99618b4f749e11aa30e9a488efd0d6f4fa49c77ca5a107d4db49c6d16db3a04309c40e6a8c4882a6491fd13e0c8a67abd7922e56cd832224b4ebed84207f14c6efdf25eb1794 076e09ace85a36a5f1c3442e43edbf55b6746e856edbc940145061419a69b7ca56480a667d6003abb4d674c78c4da2a79eb8426466bafbe13a062f050b7c40deb9f529685c6fb60ceafca4ef094fcd1a67fcfee4687b504790aa88e0740f8195cbc9bad1a9c95aaeaa363910a89977b96e5779964a0bfd7abafe5a70673984 98894cd5ffb2daf6112cebcad3654dadd076ed17b84368dfe42f76b50909676c0fd124fd7ff8e62b50b29e64478aa0e2d38a7d4bde1bc0d5e7242105ca4cdf85a9a9606a16cf8753aa4d6a891421b0dbd54b40f95495016f22571fb74265ce0fdf476ee119e7260cc919c26fdae4894d369a4741b7f9299fa71b099115f131 11d8540598409deec44abe75de174590d5b0c8f6406202f5579c8af3aeb035a5b10732c78593e793c77c971c35ec0eb7f99fe0a75aca00ea4c0fc2f033a900ce4b17cd4a77813d9395f97beb023542b6b437aaba9a041846007e05c700da9d33ac963b3f72a701f74735408059532684fb8d0f4a7f787f5cc83e44c93803a1 0f419882aabed65094a6878b5eb6c973e26b49d2d1fc3ade9dbfb3d56d04ca4e9c680f5daa595c3c78a4b349d06ddbd1298f498fefc2e5b1ab6cd38848170e451203550d17b5dc1058639e781f081518c6b25883c39405cb29e40a02dfb62ab5934335f9596cb58e74064149394d734a3cc1caaeae16d8d4acd132c6b29ca2 9367a378ea3536b17efb9e67ad284076c3af01612fc415263369b46fb981c1a28a1e7f460b4ed946950e4aefe53b44cbbd7950d5e833a615cf820084a70429e1d518b07469f871f6ec5507ce6ec720eb46949d67f1e0722b516bdd7ae4951fc53fcbb22ac8f22e301219c65a48a352eefc3bb472772e5261042d438bb2eceb a1b53b169d9ea3ee5d9e9fef300e5cc8dc8d5add69a45f99bc7c411b500d335a7919499d35a59ebc8462afcc492a24a9abff9a7b28819d6e0791839b8a78c6a77091cbc440febfa978a6810a6033795059e1d4bd53f51714c6a30d0ec52dcc4056dac19012baa41d97908d3031f622a6c3778e4fd10160104e67973a1b99d4 5c6f1b71aa7a91316033cac035e848c5480ca1d40968884c8bf80684c43e3ea2dad857a5fbfc44a0b0d109d39a63c61dc847519248ba2077129f916298be987493a4ee48701305f2ead205873dc545967f3110cd50529d480b614b4ee069c2374eb59fcb058472b117ee339bd0a11514b911e68551e63301196d45ff894243 d36c9f35a527ef27223d106f14ce8459a9754cad920a8a3046517a1fa1d71580ad4c81be4c1aa8c93d08bfe7ce8f338cf15de598dde8d62b04725ad11f5d369bbfb6fedd36c3661bae1e77864aebad37f3168d7fc7a266062d438cf966417e5c3804bd54967c9e2ea800aecbb1949f647fcd7d0948dd626f3c508ec08bed4f a998770de01f3b42faf62fe8b1f587be58117f39a4af296dbc01e9b49abb615c85150748ddb9bc98b7c5c251127b60983e62f460ef50708cc72627b8695dad7575d4905e86683b5474c4e42868258794e336735d2a68128ae32b4aff8f85b4490fb18def9cfc5768d40cb8dbc4f42360b6777f3bf84d45f2d9c636cf7678a1 c441bc597f0cb27d67c5807a4b5820eef817df182a9d6af7cba27fe66e3afa451e3152fad421993f727acdc48ff6b2c1c50274b4a68add206550a6a5aa60bc8771ce2e21f5731533befe6f85f2fda046bbdbfb5de481ddd1aa2aebede8617c29c21d320edad8cd3cb42a73fb02e83e9ec5598000ac66ecc1e562dbb640e88b 326a4d9f118085017218467469c219f43907704fc566f3dede66586a091c2d759bfb4705319e03c44adaf6b7cd0a0d2cb3568258a32cea5cb29bdb435a1fe8af1e4e777c396aeed8d99fd36d0ec52efbd7ac650d3f053e1cc01cfd053ab3d700c2fdbbdbfb9dbacd469fc371d452a1ea89ef801aa8970f2c4480d4a547d584 0491a2950d17b2312c3cc813fc626436b4d6bbda36c6adbf129cf2e8b68471003bc55da5c9bfb4e15f08db12ebf0b5ebf0fb96b520655d7547f7c32696272f94b2cd1f4d0bb064d053e9662d6949cc83e1fb75e854bf8b43772997528142d0c7c5454e2474756157053f80dd5fa573c6c799426de0ef1c80263a4567a29435 49e2132176b234d6994ee256da244305b1973b882a0b3a2c6be75e28e3f43e30afda482ae2a122a36d71c266fc183cdb09a3f165862df2d07e15f9e5b74a7d788d265304c99bf7f56ae197af805fb43ad55819ee4499fe29c867a27f60233f6a73c03c44ec877fc9440fac73944d7d145629dfcc4c229410505f0773617314 e596d904bed3487d1ca08ff47cffb0036dad4bf9bb573b167ef1dfaede26730d90301c2023727ace851965e55430417fde47c018ef03dd1624c32b594941505a1f351271087ef6b5b734e85b21626241291fdfbfc9cfbb6a9a88c7747df22630d5e3afac00f805581bece6e02426ccfdc91e41e88b83e3328dd1be9093ffed af9ff9e6c384554da50dfd7a0be89a6a900c38d8c2a0f73a02a8d97a27783a5aeabb846c2e9301dc3cc675b5b1ea73b291ba659cf38ad3a434d23d766fd1ad0c46e815579e4782e8d2407951efd37837c4d60bb88baeab8527349e67eb5fe8e0cba8ef7054fa99d0174ad838180256ec2b520f0ee7762c6f2e9df52cb8c141 ba7e23715f81530a41d70126c263cac0eac2ffb1fd1289118849d702d3894e55dd7f3cb81dbe8753ce47d49c275e97c00faf46740c6313e016c99301815f44f3b6a179d47c749c39282d63236607d85b6fb3932b45a1cc8dc24e7ffbe05135b57b3e5f34c48aa355f27b3f65291e279da718c1badd55422b4cf3d87a466238 54941c818bb0549bb37670ba762c5cc86b07b9156513b922f1fc0a0701ac712b6e5572d85cd88270d0566b149f356a25c5a94fa2d0a7a5157265ca385334a9ecfc2dd2dab0c7d006e8aa9edcb31623020ccf408f1199e124cfc2e4578a20dad7f9a2a7950636e77b53623276734bb8da51b8108e5ff9de659fe022ca0748ca 08fb1a8c024ab92368fcbcabe13396b78fd465b829d77ab2144e8105873dd475c6725de079047e14eebee449bf8babc5f12e84ff1409bd9cecbd18e755156c07aa4eff9a3c91d6970e6f22fd35e31924d4eebb5935f5d8a6f7825e132aa0b7fcc9a89731945ae4514d3f0ce540d1b91c1b22598af2f977241dba3d50763ace 1ce3109c07d1135d8732372e8f13e41da0518bb2146611dcd211bff2a5359aeb911acb26bb09fd97f0b5984151d6f06608a930e6b542dd3e595f5a7adb0ef9c6c74a1abf015f58dd9937546e30b9a9d7a4cf77b3185993322b70f647ad9c4d66169f46e016345663c4ae2eded6ff9e2c5cd5e468bfca328aab4016e65aab79 d3fed9cefc47baf19325431c8eb39ff4c1fb06fb497aad6b15b3363cc1707dd1a7685100103966e88138cb39eb7fa56b146bedfce51cb6000cf4a37cfaf6d93299380ee742c6c7b8d81794f9e1dfff50620ab8d32ce6312448b7eb44f94238574b3850012a2e3a98ccae6616b7eb75d5462df6f0edf2f772b9ba1eb0fcde7e dbb65a77baebc4f3812c8c96de0444f2f4533e9a8b3bdf550736f4a7585265adc8ce164b8b98052b2277aaa7ffc2c43e70a033d22dfd04fd3112d9e9292d2248d258bafa49b59cedfc74f0072ca4b5d7338a9cb7d436a91f3cd5cbf2c0e7ceba4d4b731320b17992a8ae8e156924a66b87dd3487e12bb8b6137529b401dc07 b1dcd1349bb97a22159f491471b5474cd1c28fa680899bc12e61faf3261c1095c6e99efff2f96eb89dbc803a0ffe8196520d2d39d669b301b8475a7459d0c632b30994e5598e11fd113631d6a71483c7af50bf9ec766a1fd54b4ae233ed72c4be82f144432fffa0760f9e48b6e393260ab22b29d4a7a7dc7d39682ce210eb3 0e76fd67008e94ee1e41bc99c3842cdd551a9dc82fd271c4cf663fbb5a897fc70c0c112539d8c1bd020e2692f52deff864dfc3c8d3b997e0d96f9f02adbbf79aaeaafe69a87e754f663beb1506268f7cfb02c3769e04994eaee3e749aab507ce826eca38c7707bde43b932f0bd53bbcb0808db0525e61cf68c8aab24cc0345 979a7f9107f8f273afcc98104e5446a05301137e26af12ba4acf3eeab4b4a5776f0d0d4f4427d09733b17f229ba16d772bc0d343b00cb9d0e1da56f41806b7c3d559593f6670b3d69aebc3d5fd8a3a235f31bcdfd22d6bbafae0af10568a5db4b0b2d7e87b0cdaaedd0dd902f4502c97a4d41b9a7b9fbbaf983413d70a60e5 540998cb3cdfb12c0bc5761c8ca9db4fa44cb78f95ef6e1c8a6f98d56892045008b9f0fdf407936c722589e5bb475141b5cd2531ed987b9b2c65e0e4038581975d4c14cbdc6b1e647c78e1dc02d360997739b475689a0bd7f24fb7409f9492d7ed57cfc8475028bfc9d56c2218507344c8076e9abf8c67873874aa5d0ab358 6ad890f143b42d4f0f8f1d9563f8e2f7a3b21cafa86a47d4bf24e9cad5c0df48bae8b27ce50418ba70121b4c7693be101ca11e0738994066cc9c49f4f5bc054f2c628fd3a05fe0f58fee49572ab58eb149f1afe69359a0f5d4378cd76cce4b2c03b6343e10f6f851c5e21a4c79f1b59e76674b284abef617d8f90d810d36b5 6f55a202bb5a041391b0323ce00483af93ce8e99fbe25e0d2c79aa6e402212cbb08693f1416f2c18620539faf5fe5d6c0011df0177a39169e6adafc3d125cd7a6daeff4a170c35d1cb9980c7468bd80dd7ea52706722ff76a9cd9a02face03c89e37f0ac3493c307c101f7a1612268b74d8447920f21ccd9aa169a4281516c 1a794193f47850cdbb6d79732cf8bb5836952bb7e9a810b4012f7e1203739ff643ad42824baf001f33fbe147ef04079f4900e80d05cbb6570a1efde151232bbaae1e14cb46d2f4c59bb7c271344e9dd19ec876c63b73b5478e0dcaa1e64700584e7659c5a02eee2646e6534dcf78427d4b6c7376e14e40010eafd2067740e2 bdf76e009f63fcc7846457ff009df676093cb1fc4d345bb35aac66b2cae26bc4ca22f427a417e985ab34458d845fcfaf15219cc600daaee45cd4331f5a34136c32cfcffb9caa15e34aa8e053c50c6e55852dd73e3f488993ebfa5191f29e0e520beccfcc4de3f08d16459cf36171ff04864bf6983bdc22f847763268196bec cdc06da211027897552320ff402049bf5338ede7972ce31b82574ff2fa097d0d0fd209084d5e7a124358cf18b5435a722fab14bd90c887e46e608fefaf5844558fc66f62d0c682d6e2345f0852df867a277b34b82948b08e564153e0beb068f9357a68a158bce6001323f1c7e2b5a239821477b11bb41b19409ed9bb6621ec e9778fca9178a19091ffd183b2c8b28ddf6cb0d75b0db838431bc75fbd8860ea942c80ae7a63514fcfe93512770074b37946a626dacef4207120854ec3e0a334b8fd270b9265bcb56b38e7ffea840104575b5650b445ef120dfc5f5a4aa3f5332b63a73183f2889f3c32c369a83d6c12357a9b4f22d8e8ca3440ce3d0d4c1b 76ba75d605cb1aa003273afb9640ae33d0da240229654276d8342894f60d3490dc62cf9ba98629179f79a0de87ac96cb364a3cad254852b891880d78f6849e24a80ca67c6bf0dc0b7df1e973c43b785f07b8e3614a006ac26cb85e2995a0699643267d78c267ff79974d9dd63429b0b4f6a4bda6d6189048b9bff9fcb3475d 4cebb0d436cf5ddcab39d7f8cecba09919adc285783f7f8bb8280a08bf3b160ab6244e308b71b7d3db781a79ad3d1840a43183474f18374a064dc6e679c63a984b251d8d3c27d4003bd43439057574c8d57327dbf5f68700637a7a410649c605b6eeda5cc71203edd64407896a8c0db39d0052ddba5f3c5656255089191a56 d862977071495846a54aa7caf76cc90580513f8e680c0e13a7b96b1f6f3a3c129b9a489f5956e6167d13f0393362a839dc652e74866a06d58a7d4f793c4789bf8064c7da8b95771beaf53637586e7609dcd33cd7d80fab98eed57ac0f655425af57c831dce21b7ed2fa6961e269e3696ebdba10c126651f8dfcf7200b2e0d0 50718d8b0ee3f446e5e3fbe232469fa3deb1ebe778cbc9dc46dead54f0a56d5902afa345219004f020fe8f330769bf6022839b01c40735dbd3af6b4d823d3e689897f848e4cc8cb72e9c4ae9504b61b966d8405d6650b711b6ab5594b9c96eef761543b216f3ed2653a4c22c57c063cefa09389e625981e9e86b8422586381 a2e857f0349caab0264a277c71d7ebc4a072cbaefb31c17f3acbc07c26cce9f0eace9f97b59ea655fb65ed0e596cc5e17867e7d078a5b82ef3ad12eecc19a3f9cded0dc81faa6de3ee1df963a90c2497c3d2fa00de5a7557245732330efed68e974a93655e2c838f8722e868e91267f3a8cb6ea25d04e27ad7e1148e26b683 08704ea00c55139e06e1ecbc2020e1f1705e360af0c31bc8808bc7ca340daab36fd55c33f348e99f8c2632f2fa1d1d444293ddc745491671116e2599c929ae962133c1b87264d7f713b9fa2ba1712b96264fccc9396dff39031c67fb14ab1a8ba8fd68191ece265686deff079987bc9bc90420ff4b8e1512aa32caa780403a 174ac33624d6fa136e6cebe11b1b02fc1a3ccd7cbbefe38b94b74b70620c15ed2078e982a315a512c26bba6f2dafcd1b14cbf07f07829ddf5b012bdaedcd9e965d487a531503e4722989215a462364518dc6472569ce04fb8c003c603361f2b147fb2764f5c428bdfebea5899974b94cd6d74cbcc72c8c0aec3d2dacbe7178 a86b1c6cc490b27180a23fc1d0700524145222540cc8e22b84f4ee447d1a705e2b4f691a078b5c134ebf763cc4b02277d32a3333f5ac92fbb8384d322df308a1528597848eeae0c2119f4930bcecf4dd5a9b8947d9937ad96a43ad3624f746cd15ebff2995fea48ea28d40ffd0bd03e55c7b5743911173f1443303f076564f ab4b4f7a0129112e2287c4dc021daa989b6fa0f9f253ce7cc4406addb4d2eaa0513683ba8f9a089f79b8fc6f5bee64a8035eca16027616157b8dffdd1bfb8aa74d052e9da430ebf247d53ab00def146e17348b68ec3e4611aed7835d11fe87a25bde2d8bf41bc4645895200036d413cd431fdbebffe78a1dd6cae1980aa7fe 4ea327701adf7deefc86c2bd275288e1319bca216bb36ac9a49a2fe89939f38c3e8517c72fb28644f16f7f35d31ce2012724fbccdd4302654935db65847338ec52dfea0a7111aa41b9d30d7bf01e8db68a8da0dd2b344272abde7a2094d4ab34f3f501d96658913ac77bf753172ff090a1e5dbd0f276d923b65322113b410b 401ebdc56fdb44a14ef31c430ae3a02237fbbb9ead73c18a3d4a425ddbc4eda66e38652c7a11fddab2e8f894184c8bacaa0369f6f537ca8baf9a8f516e237639f7b15e200fd3cd22e26794dd31f41579697d4cde1ea66ca18355138b72cd50473c15519d35696b9e9b02ac56f6a0d7ad64ac49a3c48f0c0695549451f1ed8d 8305d04f54e657424071108faa203ee7d6c6bcc0d2a2523be4a6ec2d917b2d0952f031a38527d47270ebb2c6263a2613775be150a415ce3fbd3860f09352327840acd5cb6edf0075b6747d3a461625e9fdf4debca255f2683993e13deb59f98a3fe4807f51ef3824186ebbb899f1f0d80c1a6f1702630d51f74fe23ae21d08 cd15d491c7b0770f840e526147b46d021414bca5fa2f6619741a94b7ee65be5f9a3a30c8a03cb82fabc120f1a49e750f353ec28271df4705f5024551745bb0fe5518987d74cd155a6bdf7112dcfe34df4319d5198b0e2b61956c0569be200c8b9c075f564c1bc7e8fbe2dd356769a5b047b3ae8446d1ffba8e7bfeb7bc672f 963062e6c698c68a377b6515fb51d40cea544bedf32f019b92cbabcbe1406f8cf62647a84b487004dd8da6b54b276903e6f827ff38db9a0ef43641cf2ad2cc7eb08612b1cffccb6014898c6a5d49a8cdf6d55510604e46328a4dcebebc5b4c434413114bb2b3870e1ca695c7c675b15a3383bebc69c2ebacac70fcf0588d47 9a4ce18daed68295aa13e1b9c63d7c63248d15c610528e8ad70ceb6c4be3c79a6e74499c62bf4807a6a6d2dbe77fa744efca59058620d20fa2a4b4e916e564810bdc72068d0b6ff4cbdf0ab90bd32bfe3ef8bb694fa3b95192b12925c6ca72bb4d4aabffceeaa68d6a4abd35c9dfe4e45276a3fe841e90dfa9d97c6019ddf3 f36a25ce6769f173b9a3ef2b599daf8b496a6d4cb723b3506afb02ef912f0ba83fbe6e8026b0f77442278f6149728719b3e025c57a53339ddad510d469827d4a2d059cd0a4ebdab21685e1f0eabf9f6fbbbd7bb701fb5242f559e959c55fdbb551f84ae11f158fecb416d6366497473fc6d8447e650a084e55e65a1d906ed6 d5d205c57692bb1eeb8ec0a3654eac3d797aea3201ffaa1103551fdfd8b7783e2ff5e922a495fb2d6a55ae15825274401e6058ec8fb4859f069c6b0cde19ac933475ef320d9ce89981faf8dea062325278cd320ad6ae33cb6ebfff253d82ad42848adccad2a20b2c55eb8288ccba70dcce53371e202c87b44e64e6eaac19bd b3dfd8f423c064543291a49164b64e84433a04eaf21a7e76c18a276c4202cfe53e05255647eb850426b91c807a8d3dce45db762501f1f169d22c83cdc57ffc4d280d3218612e57e042cd0342176869d7d5cb1e4ff4f894e84311806b7b6219dddc6e7795029d63959b16b5af5e4e4b9c0b80c19961b8f69f2498a7a941bfb2 efe547bbea7110f9d8b3a56958c97b9b3be9e36b1077768e2152a895b0064c2a1f07d06405820fede66ab3c00191687370e6e5f8b252a3da5ff5956b72fd270ef54e9dd02633c9de8f24c5203d336ec0faf4987d20b4367318fd2f0ba4f03552f50e6b8d236bd379d67157edc230299cd98c4d0d4ccf7b75d76ad97d382f02 08f4c8454c7e9abcdbdd8b938e8deb3e81648e0dff29a32b02b13cc8aa84cf813a791e24f75c1feef1b0abe75d1facb0f56a7698f813a72748bdf9d864f32d8b7df54045108183042379372dd6bd0eeb60626d9bd62aaa280c3dbc341e3ec294f0c5819adfe194320e1009237eba1c61ad84f492695e7e7ea12b8c5149cf85 0da2bcd08fa415ee2e0efad61825a55e3d5d48f68d60952443d1aaebbbcde3ec592fc94dc8799802f79193ca09e97486b1bc46bb02c5ba02664244ef90b0c1fe73376df003ff44161ee8ab536137d357ed694e98d21163175cf4ed852b153e4b00c7f57dfb0c455973bc014b71a472b04d498e52871f715583773fa3016d1e e48e221781c126e5f54bff3a0a1b03a8364f271d62dc9fd3331c5af4bc4d40b3cc225048d57b280a2a479d555bf6306bd02542f26a1d25341d090b72221f25b2b9f30feeb153e1137eb926a24b62b1c9016ee53b10a78922a43824f0ea97205c6f0f8f21b194764d40a05692d46a3a062a9cb28d4835aef36fca60231aa5e8 0bd0155df3dcb626b91817401eb0ea2bbdf69c1bd54eb15052b43c312d888dfa9dfe5c4c2df4185d7ec1a576b112ecd277758a6398c54bd4ee325de4a89f75f3a5b374e9a61790e3d10344d9546fd64bcb45da065c41b58a82c9c5c6f1b05da826fca8a5b7bcf5c53904ceb274937f2444bfb35529879ccd4b508c0c634e42 5b766f4616047b6ac4fa5a3f59684f62e79850e23026f878b7c4a9ec9e96591465e3631f6c9355f85f4862c3a60d32454b48cc1a74e7d82546a76a5668a21d59f859059400dce8b26f81c36a4e087957f7bef4c1bbaf542df5db23138a57b6157c5bc2b5f9aa7c72ee4b5029485426a77ce57b8fee04e05446a434afba150d e7b8a8fda35d75615125b05312dfc874405d5347aebdbc076867c3436f9628e390a1830cf5c449e00154e17ab62035cfafd8e2d9ffcf04f6dc4039f8700f48bedd665f1e489a6fe7802508068d7296dcb5e43887ba5754d8c26a5885099f04c15e6e9613ad96903bd9a544a97111738fc6736bee239b9e94a9e5872695922c c4a693850921736dbb89d2013c76ea286ab8ee857c4cfe0da2acc1c70a4704a30ff2af5e9d81ccbad53eea498e8cee6834bd86865b5280aa93835f8900f38c584d81d8db54c25c29ac19896204aeccbd1039438e027dcb6aca0f52bef35ee40c902ec49a1686c6f7eca9a1c6fe8c6436b52f349debf8628d2b74cd21b33ac8 fc45a78b0f2d0ffc83f022e8b2f75f7fdbb0bc45c919f99678441fbbd87e64ea9aebd3d903c2daf103df62097484801a17880283fc69efa7265362bcf151e7e6a9df2227bf9a2065bb76e16b67c4f05d1024c7cef8468493fcbda13256477fa0989733a68a8e54343787a20f400bb45b011b4a2dc83027c88d10ae64b46c42 d2aed0a3d2a74fa3fad2c719723b75072e83fac9d80fe4313e3098d4379a16da0f12730d989c16bd281410f5f989e3e7178567cd79c9921f9052683cabf07514891f939999f84796765757800f627366b0bdd1019efbb4b7b2a1e87134f2101fbea7e762cb626eedcd36add78fdac40b5ad10561b2b0ea69993ff4ea21c6e4 5e3407e380b5d29f017a9e79ab4d18198051b78fdf0c6384bc7187c53080c5eef9559fc573585294943433213efe756db99ebec9e2d3645dce13f258a59270daaa56666df5acb8d0ccfe5c3bb6b89d24ad70221a520109bc0516625b63be0ba0fa64cdb1edadbf1720f358e33a82f6a51ec0239dae6edeb5189c8ada83253d a53090d58f1cb3265faeea03d6effe307f8f05b2a512f81046fae9f30e98fd4315801438c0202ac1414848a005796dd0b06c9dacf0f52d995b6d44f166aad72038dfb984c29b376c2edf9e63dc4af856223583c158df2c1277968992e7964ca2b7cdebee059b7c1a564d8fdb939eb0e8409fc7467524fea8c9660d18d1f413 cfc2502d208cc35360331b6fa805a3d3e98ba2d56994a1b3a7f35ea6046ea61167970f14ea5a13e7c1f608c16acd106e0b78b6dffb956c2a61a576ded39c70fc2e41aa55d606577db46dddf1212f0a9c66be42db6d4bbe2419bd5cc152d6353fa23d506dfff5543148570862266aebf3bcf5ba887dc0daaba8deaf72fb5137 3baef5d23b7335d5a4651aaa465c87732c990ed2f1b4abc7be39d11916922d40a83e241d23117756dda9f5cab6d89ec8a88fa3b4f84dddb50da17bbd491844edf6d2537943c692f9e5e4b15b61e4f06bc7d1926f73cf38c2f14640cb67379818222af0e9f5dd19dc5e9771af901160a13fb9d00cd36563594086048d1258b2 790a4fad46a4f5344347421a90bfed1ab996dc9c23b095166d188377704458c263f128b5594719dc62b292b9bb9ce8070ffc57761f83f0268e7c9d4ecaa88721f9f0d933fe2bd31f2c646fe2b24cdcc5e874d836c6da4b9553f55f7a49a8e9a3c076f5189595477a1ee38b5a4a98f90fa94d30a1ed350dad8ae8c0b3f2cd07 48b16b7daa153efda4776def5f71136219aee935325402418310e54df48474a67d942aca729757fe8128ad8be1d7166f0f3519da2fa7a0e3914336ea460876d3fbdae0047e9672065550b5abb7bcbb720396bd5fa2225d9eac86c09bf4584aea466aa2b5533e012a9d596f152e58fcd2ab0cb3d431ae54bc3d0a34919a00f2 8ceff9875798b95245c8f55d69c83ad4f4fb97e67477bb827d3143d6cc6344313b664815c9050cb93e9f056eb29c42c6a68094e569708d20e0ae8caaa7cd758a32eacdb8fb033327b1e7f97b5d956ecd51f6d9058c5bec339c9aaa5b806dd25a5effad6e6377151b472959f04acb82c0e8af924f43333a5bf90bcfebe387b3 abdd9c011dc0a10b6771bb528cb85901f80ad7025a885dc6247e70b5f9971a22df2a989e9225e3955dc9571a0f21723220d0c8fc77ebe114d6a33386199f0db91dbb33e1a83919c0851391ddde7081f4419de0e61fd87a2146f337a9bb9df2b599a5800dea3071ff13e48032de608c6afa0d2cb9f52c764391e77c66744c5b 29334aa285b15bcf0db6eeeda51e6c7319cf19f5495ac4cc2a31c6dc98ba684bdb42a57a59fb3e7b648810ed93114570ad9f3a0171cc693aede8ec746301f9d32bc106c041851c0bd515a53c41bbaf329be739dd75f7e1cd9c897f1232a10692cef61630333950755a9d06d3fe72088b79299980a63190bdecc4037acda3e3 60337cb8c7b9890028560f1671cb65a2bb377309f96876a83083e1eb928c302da89f7b303702069f22f38deea2f56a29653139478592dfe0f7af0196b0d85a3cbb088fa051f9b83c4264eff485d9b8b6ea443ead8ff0814bc47f0a1e1ea215f6752254e1093ae03fe3dc9bbc9bdd0491e35fe66c2bc6826aaddc5ee33ab049 bffa8fc1f26b6cb88c4c09f1099a0ef6c9ddcea44f79a5cf320c4ea273657c5e64718b4b17119583cb6b2ba9ca1ae234268a5e8f8520a706ea8e8482f1282804c6a252e331b989a0370ca8554ea3effce3039eb15f3204417e86fc3de8ad709adb6ee6b82d0d0d72a75145813e2e39aae8c967758184607e101f54090893a6 597d5c557bf75b6b4125bac8877e17a8d96a17b9bcfae706ed328a327e45f158847cf3050e20ff0d5dc28c65865e84499b20e767071e2556aeb3e1681e48ba9ba70cd4cca0e788c06936501c787fb5c9ad58c99b08449953091a6dfd54c8da2b9a047dc41069b4c2fc5fea284a062aa5b8f8ed721610bb05c79dbd468ce6d0 9a0b12a4929af65275c9362b5111d964098b7f7767ccb6da0333419c78af6f9bf8a06b709bc88f33c35ce3b138b966f7575f97cfac9d00948d6f7e20b3132aa3d5582a2f47e05672b69c7f2f5576e60d08c93f5f3864ddf00d7ed09bd9311ca51bfa227eb0e0425c50d771583fcedbdf610002cf14ea1c0cdc16fc200cf795 4d2688529159b8adbba501992f289a4d1809a6f1dc177f244a7a4d2021937ca79f664ff3bd3d5d6bbf46e1e0bd7e5f9b054681f53df64e44eb961b46ae29323c9f6120919ed784a47bf111ffeff327b9922188fb08efe5ae6b848d03c8ef3f598fd66d4c8c029fa07e7a2ed8f1e2e3fa8d0e04f23048052944b57a64494bc5 5cfe88b9c891edc5c610b3fc881e3fa4c98e2dc9763060a95a11f190501d569a5582061759eba1ddaae8c8b35ae045c59d2e2a32f4a21739f5eb4d5998ac31993da2157edffa746f4f4d33e978c6957a462842ef23ae16d6787c8143f5b265a25fb5a6c29bba44f50068eee7cecc8b9dfd64b7c39aefb21985ab1422786aea 4a41358310f21ea602236c21b5eed2a5e7db7531d7f44843342dc2023e74e84aeec17e8fa750445888ba0f6c0c2d508b3996e6cf37f9dd82d153bfb3fd49850cea64917fad43d373d429cabc80b83393e2192bf5817b024faa4003bf3f9f3cf2335a5af309f7b119cbeafd2bad6739af8220d5cc17b251c2917b2d2d925b4c e087b61694f943f615d969d5807b40fff5eeee761579135508d534df848d686d6a5855f3249ed3a53758e1a342e6b32f46ec9e7fe0606710533e493dab80a0561de49898f0b8e827c3ff7c65939f9a0b5f84a3f8cabbfd22161afc887b9e3ccbe18a358455ac68f509c13b0f07d1a7fd008f0ab306a9266e2e97a92ee1d940 79141b9631e5ae3ccba1276b64166fbb884ee354ebb588e48ec5c00a5d63e05e913a1469f262701bd2e8f0b1ff20c6e18d9ee6c064f9523742bbc77c2d0a4824577006c6621270cb94de1bbb94836eaf493824e8be655ccf7df2f2a9b97a6532433d79d59efb7a97f47e7deb6995cc3df9091535805ff464898573b3dfb45b c2c39a6e1ddc64366a88f8a01df3eb44f14a5ae97e0650cd250ada4eefee03c36946835d5731fb130e3542584faaa487b6b9c1ec3113e5d5bea3880437c491d739c720388a59bcd5ea4f8449b0a5ba8e65d4f9d15b7f28999e2ef689f8a423bee4fd71c3df1cbc368c387257780a9280b8a7e8bcc9460f34370555caf7e735 e7afb5cab68a48c09ef890cf4e35d6a01fef9fa1d6ed4e5fb3f0ae5db152cbb3251c46ed65a8a046cababb9f52a1477c45b261e86f1785d1f3b3b46b125ac44dd30cca9c014a798cd5674fb80587add88961ac4dc3c87c97e60b6ecd9dcc30bf09e1b0d7fa780147ed38ff204c0830cc04e8bf3175d2df37b069b6620b446e e8afb74161e7c6255ef31e9315e7b2fa588bebf63097d9278f17a4652ca7bb85e6668bb999343959a2a4b6d292097e50fb67adccaad8466261b84bb4930cf92f05ebf662d6102d701972bb695030230734a6f364e116f2017c43032350b0fb1ce13c205474f1c9e0bdc1682ebd4a051807720cff36d1b617758212fd167e20 1186b248fde763bfa88ced6773620296676028ec3a5d4547a97a355a931a931fb9bf9616b68f9f090be7599519b1e02b1cb38b64d3dbc6722cfeab945baede1486d9cee2cb756af5dbd5e82b72c9b001e627cbfd8057d4e017641ff2930fc81b993f23fb70f33243e076ef5364abe1b82f6423c735cdf84f0b092d9d5f43c3 f23270900cb05b30af20506364b1bc1c67e97096e2db79cd9080aac2b2b58e5ee03ef57de638a5d120a8973a0af31fedab9f5d1579751eaa14d6b789b89edd29242d1e51cd787d05540cec3755f1e16ee9de04e287fd879330ee2be793ff926e4925a1c7848a74ef47626459628146584b5b14c797fb95fda9f156bea71f51 182091d2dece6436c8e6dcb7a56c40af2f3feb7d92f5af1b7f5e02ea01ea2384952ee3c50f5481c1b03c7916eaccf318caf08c816826b0b203fa9366c98eba7f4107a87ee8a16b6d43922ac05eb9947a20997c8a404063732ba890852461f0c462a5dc8d765cf81c8a6634bd68fcb308bdd3f1f0fd405ca602bcf4ba7750e1 c55117902b477d2b1f121c1b232a774ab07430a26a2808f18ac44ecb649697e38c8947a3e3aca82d1620a784d0b5721e86912d4dd0a3a72986163cf3eec5840e2fffce118807680a6ce9b5ba75869a6003894b80be879d57ebbec481766c5747c5b3a64867db8a49d151448952f8fffb1caf04d04a13798a503e3e48d95714 82075421607eacdd9485d51bebf8fd4f0c5eac3117b8eaa7f8f309eea82ecff89a17e5d599c6a6fce98140519568f4b0444d6ee0d139a4ae4bb29b855fa8c9ce0f12d853156243bd9e5539a5bd300aa0a37ac36bad83467f2081e7269de53e4bbf588d1de90d1f32d6da54ff0902a3d2af5af13966b999f296c75247b05ab5 b0e27f6750cbc45e381f90b4ee29f5215d9f20f396e39d77a1f2108030bddf668e4ca24e394535b5b2b39aee7534df1ab55dc5fb5178673c8d3e9cdaa7fb6df7d0a93d8e61e1dd7f0e3f80fe12b07ea7458ffce54a194c9665959241cec49b04471f8b598d8b904324a65a81bff6d53d627c712033d8fb601a79379e95c9de 4050bfc25521ca496bdda178eb6e02667552111e0705caed7b13940af754ff10658cda7cb1a7fc457b46e9691bbacc2c4ad270b79d307cd128d10b95dff0b64ad48e0d7ffa91710f59fee8687f683d5db13ae92a81eff37043d3971288284595d00ab18484b51cb7b13ce695b398bb8563b417258a2eaa876c94246e5a376b c92ed80f93feee90a9684220c249cb6fba96a55b566ea5e71f58a3a1171b01dc1e7dc1f4d82ba799b2de155e8c123ca962cdba8aafe51f48f4fe27e5ff6670f405a60f330d889b7bac453480469d61c85d8547ce73a3fc3db4b61739c8600e59e2325b72368d86bcbf8ce1c93f6b5dbbec35d1e01942567c9f22a9e5d0ccd6 814ae2c77f14254bcd1df6e20fc8aa0c873c000b277d1dbcd043b330047148dfda105d1dd7f020d6e1d62a8bf5f55ae5961882c627519bb97ccea8fe375715787385e968e98cebe9c72413bc35736ec8bfb17da48d072bac1b800d056f70e1e66e800640702b9f7dfc10bf179bea283e13e869777a04078742a498565bd54c 24f49f228cd5cf10458c225e78e6863d961cdd7fe428545fa4b0dfe47b666adfe2a51ad893eefbac07ea29b6b5ba13fb01684d5ff7e7a4b56c9c5988f8c42f79e9b25b4f9f7bceeace10a5d7fb44fd70ceff7dc5550ce8863508a91bde646b3a8b290a836930545360e6e793a372beb2fdd77726a247444776fa4698084e65 27de27c154a44f56d485a01fc04ddf2084d15d6956c1e1ff143f6249ab83b27a968457e63df8fdf5259abc0cd61f0ff2f254a51dcfc1cf294c5d2978273db0bfa908670dea1846874ddae604b7a7a93f4439751508766ce2536ef2b3030efbfd94725f9211fbdb38a8dfc3580c85b1ffca8f3cc521b6d566e06e3a32567ad2 a5f480cc9019c36b2c2849e05e2eeb2139d35b4484824db30b395a16d80a8a5d94977d1bc14e8cf07d0cb5fc246f29221bef180355f0f88dddbdbbdbf472bb327626fa4770c0850c95befe6a353ca86b4039a6427898b69738291f89bf92cefcf4bb6ae3f096926c0132861fed1decf1c2e218957afdb4a07852b2c8d2d518 6ef72e3f119e6d1d8df313f63b26e55753df2a2baff2f7bd46a423c9e5906e2521d061ebdea086e533e6d27afa8a8d5ec496b5def85b30bbfeb5b8406e49964d4a076234780cbe34a5df4095e74da937a8d8048afb77803cb81cd0605ffd63632f29e5608c01b2b73ab0d3ede8ee470913ef2d8e5b71da588b173a0c793a8d 5e8b2c7e8e2d7c3f10f5dd6a70c6739dee3788a4e7cf2995fcc04617789f60bb9d53efd70754980046fc50a8b73a5149c1dc0499bd2e887bc40c42d81cd8fa02803c8b5216cf4bf388c1c5bafd3a450069486be7270a90c5059e94c956911744ce9d05e48b26701e7258a0a8769d421fd87452939d43575acd5ab1d1618fd2 909385baa9ca0be621789e8948384dd4ce61cdef52cba5eb5c82014538ecab8b2345b31cb4f4e4d491cf41f79b91622c837570d9fadd84938f56f81eb49739ab37c4cef79aa65af94dbd73b9bc5c80731184c37f121669d7de126ba30432cde57615955cd22881c1848b68cc0a7253237690665633ed6f7909daa1f5dd915d b471c078a4517e249786dd1ca550f83c141c39d592119a221402928eb330db76805091c170a26bdef0c747009e6af87cd65bfca6c9554924265173508c5d8091461fda5969ad5cd0a0a4edc5cca719a2cfffd932577b3dc426e6fb8621e8199798162f13606f5c0d0745d8a17d72514e6c607dc42f813b18f941d0ad099586 ca51e2dc15b21f08bfdd4f4831e2142f3dc2817f6c6f4c7bfd288c26035b47ab5765192d92104599cb2aaf6cbe3ab19a35ff08aba855d8d862a4feb225cae9478db9f07f9163db809d157def659d776fc53b15fcccd9c79a54c8dc75b6681af34e13be3f2c112ee34d14d7bfc487a5f350294808b07c64c213a24b802a1572 0e891b39929958039b1cfeb84b4055a403d70dfe25cdb1252375162ea7b99e3d16421424c14144343f5579b0a20458075c297004719bd021749282d0220352c6b796221b80cc8343542203f5313750a372621e20093b588ff2845fe6fc44a56b021d5c67401d46dcdfd4914e77ec49e8a5fbed4e64a0962cb43bdfb9f4120a c9512e5633b89e6e3f95ae56fe67b07ca1af72589a7021bd86df5259bd2187c5c13f38ec1d233f2bcdf5d1e85e7cfc272aaf5a88ef1194d12a282dbeecbe25a5037eca1004e156221c3709fa119d1bcfc3960fd6783c1559f30fe6c2842ef05ce3207e8a4924167d770563052e77f6b799c146c3bc38e1d9c23df4904ff890 b7525eaf3c89687941f91597a826fe72244a81f11565ed6c04b867343f76f877f9833470a41e916c274ebef126a78769469982ae234701bab026d733629d77523c12e65277770d23b08493dfa560ca4206fe3df2032baee55a4d05f37a7dae060bf270c333d6e0a345ec4d9f3dcf2c085bb4412a9563fa5db9d982570c94c1 827d015bd3e33787700b7843246613fe4d695df22ad2a10d69892ca4897cbec35120ab12995cf276b600d43483d38320f52744911af81b83b9b830149f437c46c33e61dfe25d543d880ad10ca1ecb8e105302882934e65d597129101c455a5a385cf713c5464a8dc354444b11f82bd23a2abf89a715e2fff9e6b6043c6f2a1 655542f62c3fc1b647f64784848b50a22f855b93705ddbe49439cc9c88c7d23f2e5f49fa1058d6aebed6e354e0459f133fa6c6fb5a527c4cb1f9da0ea48645f79f022e317ba9665819d2d8a8335cc86fee7f0252ad4ca261c2aeb4018dbf746ca19af88ea8159549b928cb168ee3c4770852f48d15327a2c146ca9e0688c85 aff9bb0d4f8087402b0b8db77f85d769a75a5acf82de33937c6944fd2e3660d14d30dfdc6ead11c746a31da701072e4b1061a67adf3c402cc01cafb69f67a6bebf4ed7f120763c2b9379c9db12ba29e6a4de53fbeedc9ae7433e038b3738d76f573ece8c606ec69a886bc2cc8c8e66809bb008c289552bb9e4330dfa1cce90 e080552e5adb0718ad97e4bd94b1467d5295fddb42ce6a912dcdfc5e6582f397922f0da7e12b0e7eb659474db260657d87ecebf8897576f2f9bcd1720301064c1d3a070c55f35dd4a264039c7e4db58f507900e52c9bf39c25731708650fb5547a02e085a5c4796ab736486dd0b480466e37388be68eb96baa3512884751ea 56340c30de071303952bd00ddaa7eb1978c17387db410b75ba044505a2eb9545b6de8364b15efa72c76ac77478c9e6bc6358132c84b62af1b74913f829d05ae042dfd62ca63954b3aa99fdf49406cc202bf6a78e0c44913dd8b82679a0493b53ee4c1b4d7187b5639199e37512a6cf238b82451e87a871517b426ffe8ca9b3 ce6b6f88a3041a6ee7bf6de9ada6ee0f3f4ab6c299b5235c27e13c2aea099e06285a4770d073be60db515f83b94a585318ffc7e81951984dd5e6b8c3092136f221dc0d31e7f0ae63e79021084569a5f2692198c4df0b6d776eeb78a6a9164acdd900d4024a773643429c773578e0f672e9cda04e46d97270c4256f9c1a4e54 9a1f6ea48dea613320b6da7725ab30ba5c653803749bdb5384d67a61d20f1e98edc5c2e2eaa7780bbe820332c38ec40d1030d1d11ca03e30e9d161eae96e84d72e0a1e2c2697597591a2868eb2352481929a5606c49667153c6fade98d5d6567f604dae36c4051469407dd10d7220acb67129ebb445cd7f36e713a6be19259 b14b8b83bfb193d58c80e3e25641759230dc27310214c5bd7e89788eb6e4e4f34b8c8dc1f6b751f330aff30a7d98ff1ffa33122c6ca2d0af43e68b0314baf3dedb694dc9cef11e40b6061f0d96778ddc6afc7329a3864ad6fa368b1e270e47142362c4f7cbb56fad9690044bfdafef91e82bca10610295c7e4920f66befaf2 876b958434a800ad3d550147dac0c80acab2ea585a609e8d0d8d1d7bbb1725d12635a3436c3ca09e6cd316c285e9fb2345094f88850ba2517b946d66ca35ec9e6ba502b7c27580debcf791de773b72ce2f6ffcdc43e93c5710eb663b916358f8b225375e1d9cedf072e62716421ab83544f8beb81dc0c3c86a3b29de257032 344b146b51c9b0876a9c40f4f61343aca5ce98bcd1ba27da33cd700efc7ea0e22204e280d5bc616e45acad4a35076fd0529cc5fa9676d8973f6703246facb9110ed97271000d4aaa05e6e9933ead325537e22946d11e6127de65d1295bd51ab0bb969f68b464da1f5d684c1433aa424f238a00b02c3b0e7c484a66340cc916 0f7c15a32d0c033e52d4622226ede5035f938d86233ae13e2afea797cebdd4d1e7ef1d7afc38e131f8161406ae13de0e01e436acbb8d8639bdb67fa512a8af4ecd3b562b107f3df99165d87e44db630ea150e6ddd4c6896d42c2be5d012fcdeaab16060d850b60a589f861bbe2ae50ee2cb9f816b7b3fc934e47ab5075817d 8e4ddddb92ea7a809da9a7239170f6f120bb4e567ab3cc3dd7064e9c09936bd545cb2db641f604c8f19c85cc8935aa41a3e45b4ca86842e702f573a3e6387be939dc0f216eb7704b5f772473f86a6aa6cc8023a16fe331b160f206131a64f4bcc5e8e46d7174f0bf590457c9232491646de18bc47e2a33c3e258df94e0b1cb b5054b8ed8e53ba9c2d27bcf0a26229fe4f033a09a4e308af4867d00881d3a11b7460c5b56e6a1f91a7a537907a29d26c289560877eaf674044d408f127d1546c44aa9f4504d892caba583d73e991b500bb76e87c56497d31776fa389ad0d5ecc683169078f05e54e924110c8d51e821c40341d5333b3dc8a69bdcfc009940 ecbe3b94aceff1c4cfe5753971229b091384ba15096b73be6ec57ef32d9a0feb671756f31d4bc979d6ba4dcde7c1f4488801a1ff4793728d61f10b237416c5572554a5d090bc44d0e0d1e0f98ffb3d708a96b7bd4ab8f45219cb6ec22dd6f3b8a563b49970eda9e261529dfbd0f3b08ab1e68f614496d3c7d3b4cfcd48acd1 1ccd0be0aa003d7d1a70ce1f253c9db09f0187a60a13e1e6e1a285fcfd4920d7b05144b8e78985d7c9638cdc8251aece19d99c4cea5bd62c8df4db555373c27949c7b12ffb5493d0ff9693af6955a33f5e9386bb227879ebbfa67789e63953ef30cfbcbe2eb9c0fb8856aecceed67206ec05a50b69d765e93b09586588d7b6 42ac4f609eb0adbcc06c11ab30858be3a3e0a26d340dd82a704bd1e6fd76671e2b850ada79070c8bd1bdf5e6259948c1adaee6ab1ffa78dbb99f4b453b79393bd66de3a7faa118b7892a53ec298dc8e3aa193287a3c877254ac87d0564132da7a885383d37a0304850ec4ea743a5c66a4c7e3d60090ddab70ea1a9e60a6b2b 53342c93d6282f8e35b5b5a2365e1a2c183b33680522368db250762ceaa97cbbe7ec7c07ecc04a886e568d48065fb64cc06fb02c41db2693c87b9d765acf6c06b79d80affbff447654071064f1b972533f64c1013ce836dde9fd019a7dfddf76a8ff5c92d18cc2404e9527633b12cb1ad630a27adb99b16056610820a19796 39639f42751e42dc06fab6673f2beb48b232a38598a4f964db50d9927a09c922520d49f85c2ab7d9373d9552382f0c7da5bd5cd6ed1e65587823df89e4a8485edff2dcc8353cbf3a08c92a817b8d3e61a486a9a5ca78ecdc9bcf6f498c3d2762a3b631af4bb8d47cc32481c82b2aa4d9b76b9449b71753b6a82f8a8550edcb 4b69b531576c84efd6b76c4504c5fcfa46badd78d3b1edd546a83b12d6580f657fccd8f1ffb9cf96c6041753249ba20b34606f7414cf3ef960da726d59dbc08cffcaa6234f6d4982a4ca0e59b68bb69dbe9069dc7428e87f6134ade1100ed47286841ef47606d8d146df9d6ae7467fe8bb011f225bad418cff5defd7557251 cf7f0bf70c1238a34f0a9c9b407d0b3269fde717a8d287eceb0c7bde4c32b75376c55c138587a3e73cd045e59622b017d3c3f213ec0c5fc8a82816ec1f540412e94c09b1901f0bbd3cc7a144eee8233221ee0e10c0144e4c17c8443ba58b434e991beb2afa0c2f2c4f762793de1df60205386479890f40247ace9cf9a6369f f9a5bbb7e3dc36cbc22e0a8d375a88f052550e67987c259e7171f10ad20f1529acf9656e3a937db9ed852b8653c1ded792ff94f05d3bd66d2312c3e9fc89c16c7e62b776c53272a89989b7c4dc9ef4a1d697b6708393343a25ac094d88ca78993aada35cc8513188f1f8584e6c6845bd498760be9d036898922de2a3cc9e32 bbd6ff8629cee8a511c3e3e1e7eec952c54cc790e126935b0d680c4988aa9fd2c93e896a907fd8516d7b3f14f28df7e6871e9cfc21099276a51b47f06113e914dfff1c154aaec1bb1b01f6e20ef5110607832fc57746541b1321d17154a6cebf9ca0a4b819f382f6eea3b055775dca6e99708a077c6cf6de22df7dc22f25b0 90728f308051a8eef96a59edc716339e8fe41b96c86e8b66aab3ce55bf4549f08b4af6f3c3852e4630bd1e5d9b877acc726b56fce48842ab3b155f799ecb57e7335f973f6abcc92abc93a618bbf3b5419161310acb2ce7538a933885bbbde46382638f81383076587f13a3453f6d7c2fe3b95a3aba4bfd86a35d8a29461b3d 34b7aeacfdfc1e5d10b0d702ed613132ec0b8b604aede789f475acad193a5602b08a3b134f85608f6be7008659e0b089ac9b686a58b2cfba92f057f358c88001bb6ef4643cbe2124e1aba8c41dfa3dbac01a2794ece49a6b775ac58969ba2bda31a0aa470eed382b46434f4d29f0dd9daf245011dc5e804c89ce30718868e6 e85d82eca96d062a2782274e69ad02df45c2bd7cdcf9ddcde99c4051aa470f4bddd9db94fc0970626515663573f55bcc679819142ec08f8d0a8dae65f9d842730ba374eb164a815c5435503adc4d5a36a878279f8664c42cae71916914a88441cd8c278f7016bad419fe628da49fe26104a83bc727e341ecae8588622d1cd0 f6aaba765767fe2e322d05e65fdf8ec69217b8dac7960350972f5cbad813f6c630b463eec76d0225981b01a8173d94be4f5fa13340c577e59257951afc38f16bc272afa5809c48a9c6c2e1221454f1fac954331f84357724f7fec91249474d852016fc4d1ad1bef25380443566c9755aa9f51ab11e329f885553edc38596bd 98f7ef6f008b367f4094e4e091bdad9db9b9324a09146ef5ecd4b226abead64b36607e740cbdb4b7e183bbb01b10fd9611c9441b0f4a32820ffb35ed97d4cc3db02f7bfacdf3d8ff43fd481cba41564fd28effb08e68a4d9b3d0a4bd71f7bc540b312cd27fe9ae9db9476e5bde90dc4f7d449d94e9ed5f7d2efcb9f43c9474 1c0d61f67d5002515d41c4fed9a0d310e83aae3bf245d5eee62038bbbb8af2944718fb582129b55d653152678c15312781764f4899ecee6ee2eda0927b2c55b6273d08d7abdf87890328c39092998a3ecddada4bc65fdab0b9ea4ea5629429d614391e229a9ca2013cac445910b97c18df2bad6a4c6c704f91ec539f198cd5 5390f995515962dd31ed9fc0146170df8ea0155797c0e807309b667e0cfe87ccd3a3892c23f58f716e32bda6fca8e67fdc201a7b7d524f10d3772fcab5cdaa56bf3b27de2e0b183d62046667ad0d26d1158dd5f159541335f74a41894d208c2c111b1779a870c686ba7a958b821fb43371ae07fb50a80e808c17feb6ef9f55 219037a18369ef6da39d8f139e404a24635d7ff6c745df94981504bcbe7f7d38255beb8ad0a5c44037f7f75075d5123882732d60bf7f9b2cb8304f6e8f95d8646b8c60575be57f65414f20dc832c6af46ef7e79f3cb3e35655e64c4840c2f33d88cd15e518ca89be5b0c0fdeedf04b99de95ea50561cab6ae678c172be2b3b 0618812baff1a6d6eb4cb7d1b06c51b1551a43133e75ee2d12882b42110f3e57eeda27a04caba3b1fc133dfd0f406ac4deaad24d6e53c263d86342cdd703aa3a08ca5b90cb113b1f1302d4891a9dc44f8aa78d70be1caa42ec0cb865cd373fb23ed6ce941ec06c735abf187ce93016e260cfc5d1ca9063e57303807e1609da 8b1106832b3ff74ded7244b973599485e6c4b3084394e694f705be4c1eb577c18524921c0aee5d1bca598d5b1495ff515e198ec7db2000809462e768c1e6c27b48a4c6e0c172352d806a8943adbd74a632fbf6e292e1aba62db85bd2ee8684e17429b3fc5000a28a7551a079c9c2592ed83d8461eef44f6b31b9caa45bf5a4 03dc98f01a263ff46e00385d7b53dccafd0f4da548170692e50ea51a26a84b773bf6c7dfae848c06c313c019bdcbfb732b852a6c6c69b03f6561221da592d0d977bb503ed4b2a882126ed79332eaaa6d2746486ad16c76ec25fe93f3e07c70db46706dae2a40a9401b4b8cf719fa828ff96fac1eda09166d6885bb3ee902c1 4179555659ee4c2436959a6ac64fb4663560db01275429975123a7acc99a06499a29448397e9cd61e576588221d6a32ca0aeffa97e2aa1967ddf2550ad72d4a6bb3c1e125d09623e457f946a4cfdffbc5632b043775d769efd3feb10c5b819e2b678955dcb5c50a47827a6902fe5147589cc9360c68ccf1671cc0aba6880f3 a19c0687cbfa9242d8f24680026b9d7d6ea6948715cdea0f3d52ed9d1d2f959601771923194fba57cd3b70b3f533d7c78dd08e062e41ac958d590f25849b4e93d6b633cbec004c6538d377e2d32faff5f04ac31b7c66d2d5ce1da52d8a1d3c522f99b3a089043add8b2a1ee44a7386fc270bfe189c942b664373cc85c60acc b7181ac4ffd460e4e71d2c76013f482efae7abee4b327093ac2804d1afc861f7a7de8603da9913b002be5c04091dafa9eb412eb7f48a0753f03b0e046821bd66e6563cbdf3edbcefab69535947dbe6f2f7c8788786635a7a6790d775f0dbbc60eead3879dd1cb4fcdb3a003bc3f02945555b3457c568385adcc1650464d66b a6d776fd94b338082116244f37a914fb5f348501fcfa1a37311c6a3d3f1eb115074d5b1e33ee4b172aae2437004f2839b125f8dc2425f819e57eedd51cc73e6272916ef1bb9340e8a0bf4fe911003207214cf5f7ecbdaa23ca72c81627a3fab6f0a76ca04de4b67da13d08c5cffa79df6466751ea4c69d13f08ba0bc31edd0 39a8d67b5dc15f1fdd373745a6337716602129cd8a9974551671a7eb1babfdae4553a4002366a78bb2b4d2346e3975d03f8154475aebed9c12dc961fe7ff34a7f77cb7b5b8d7e41a223d73e4bd95bd856324608c3accc2d972df4e79b437016bcd8a7682dbffc536ce4d4aa891ab6af7c770898cdff852834bae533fe11756 0d4c3486da44ba4a23720f35586d15eb2040b27fce195c542b4ce946e75c12561cc4beb9f043e9895f2dc210b8d15db940b4b1af7d3960828f1e7a8495f1e3f1311534e24d19fb92eff6b05fdb116e6681479fa1cb7ee1d04c2d9650c094ad66055dab234b2bf211987de3e5f1e5eedcf97208074f99927bb58a05a7735117 57fb105f9e82ff844b8a861ca8660209153c7ae1360af278bce884eb3e26566ed7c495107182ec50ac555202b66ca9f95e1246aa410116e768528aee5f545b0d776c28e28d351c470d0275cde551a32fa6ae6d1bc7fb7c90365a3f8a1deabe99b9112cd328a10a4bbecd411f1e8334d5cdba159dd322e8a6f7e3d8d93b9583 ba37326fddfe7e8d930a765c7e4aa87247422056a50a327dbe823a93e5813a97b83d1cded17a83baedcfd94fdbd1f6dcc08cd809ed9e03169c78dc93affa4c6e0a4332864dbefceb736b3b3132703c61c71b6982287c86299b9ff6721360899e6ba980fa73155c79429b6d1ca439ba58850219b9d60526eae7678859923751 f3ffd8204491d2a09d51fed4f671fcdcd41f63dbb58f68acd11b8ec154556fca3d23f8b40dac74c7ea21e46764536efbe9bd334d393953e7852f219082a184bd90a7ba1c3e85fb2446238a9b6ea9dc427f8fa3ca3e8f4366688c606de7bcdc7e61f72edc0a96b2ffd1ad28e4ba954261f8cb773ec2c3f6a8ff6920af26de98 04c302a1279270f0d573ce99d8054eca2f02084d4c7779fcbb647e339f3cf54e5e91077eec3e69eca4a2ad60493e013d1c85f4c0b8b04d7d86b2582bd35e67087fd1de0c0dbc364675fe2f51d88aa599589c634a9f0b323064cf28f3e321166e1071db9dd71adad5897ecee3d1e0ca4842a6711607a381c3b8157faaf4eb03 216d346f7e5321e5faf343386b2607b6ec5fd4c030357ac2cc2384e7344068e27b1d6e6065f5d0bf931da564cca7691b2a1a72b43dbbdbf684fd5b3ffafa35d0550aed1ac330875957035990b6065f78c2b4f0b22bbb06a82ccef074e0d6964b140dc069db4d92586ae352aadc5571a17fb7dc964ab1555bedef347e4dc5b9 0b4badaf5cb181319f1ad11b60b7ef5b95bfad43e6fc4b9abd90803d3a7a41cd10b22e5b66d3e56ea0d4084a9f8db63d98a75b4ffcb3828f67c424e3190a40b2df45b981b3124c03b55d577f05025e1e0889b33739991e4d8c2b8373f76061b3c3a1854f3b4b4f44bd036855bd4303914cee69b04f02a5cbf8cf0f7b6a51d8 4e789cdabcde13883a341066ccd74254d3f377de9be47c64b1a2412865114891ed25f5d0542ae2a6c11aec6bb66b27b6aa1c6a28ef27b0360834a6ce60649cb70e97c6a4f9489e0bebcdbb46bc2f51255fe8d0881829f66397c5e57a4011c08e5cadff39f0c26aaaea0e7cdbd363af1442ed1afceaadb83511e863829af4e1 c42d93e592ff9c47bc36a56271a35025a74f291310d5b65a7abdc466c76ac1b0574c338c507d23cef2791b9a193da6318dd61faff56aefe9417c387778fcc6b3d3c903ddf1ea5ceddbefb3a2646fe4f3b15752e4a1f57faf206de497e428c08d7f4234fd32b11bb83c7a646fa654dd74c365d8b33b62d32f7dcf1b883a1e12 56197ea77555244d3d1e9d06d04396020b114ec2990696a00459acbd561ee5c5396fc723aaa010576684caafde78da712f50e74d2df22c358eb7c24c8fd39c0bd5f40ca0b16c060983950832b0d0339348be4c02a297a7e2dc8866ab678ca26f53ea01b9edb5aea29c91d24ad9cac013b0a73e668e84dec3c885677d19a739 830bf8c6a7fe244bd71006dc910f0b4af82a3628b945d2f942b86cdec1b353d96a3fa2700fb12996d3e63168884283b19c4a77a10f22bdcf87ee97f89157949d963ea85987216b8a32054fe13a01b7970595663382c70fa98ecbd07230178a8343c08322b00afab948e5839b9280a3c068e305dba97af618fa5d4907c06e34 f61e4625bc185a65a0bc360c41f643f70587645f996c63aee43dca8d3c73e7ab81dc4dcaec6f5cbef04c10df686f515ef2db993ca9c2b75d0894851e3230d8675f880947ff321b34f10099d75c764f9a61ef86a074d44a18185c06d3b9c128e79fad780b9400a216c28343f1ad1f55cf676da41cdb39070a5f2f5119d304d3 247cb7d8a91950e7bb94aebdba401f5b67e7a50962080baf6273cbb8d996c429e32d27b07bb30fb981439f2810d7ba1c304ddef4ac8aefe0232822bc6ad9c3b9e37b2989e77159c249e16b9bfd64a78aa4a186a365d9a57c38dc89f701060030d2ff9a745c7c15e97414e06dd013bff7ba8440a0627516be9d92f2733e1857 efa857985abad042914f02f7943f6d85a54e0bebddb5bdae06b272b7c356626c450ca587b5f6c46b4a00118a537bc89ce006da1f274b0761b2b4ebcb258c35e6afcc229b20d20db288c6a97c5202f566b0bbdda11aff10c32e5fc2753ce5ec8142172f5cc17d6366ab015d3f9cd387c8a39f2eb775b37ba436ece08eeda6dc 2b5452dd8bb0b102f5682ad6ef62944fcfd74017414861e7dc4b1cc706d359b6479a0cc2daaa60c17bcd9239243034d9bd15700875d1029f3cf39f54ce3ccf5ba394af8ebb1afede6c4cf5813fbedb618ea04de2d79fbed727e79535f6069c4b6c848d37f67a0539523897e5072daae6fe514c125165a370d026a9d98812cc 69d8979495426fa510ae8b17836459916790404d3148c4743a0811d077837b529cf58ee95c28bbfd51c55d5022a68e7d50d3e34135ce0871231ab01ccd3b21e39019c0aba05a6bc060e96b2e044cf2c2b4b42925f7eab5d5368cb00329d3fda53f446b2fc2a49ca1b2508c8c12bedb475d0899b768a3fac4f57ffda84e0306 8fea90eb79c2c2e89db1a8ded5b4422ff9a04d37131d4286c83b80121ff208f1cd6ac7ebe706f259ef944a2a7c62dd09a3eab41b4ac46948acb0f339591374cadde70d145cb9b842dc9519bb496bfaab2077dfa5835c84178a26937acbc891c962efd45f9dcaec3a90d525b1fdad8f866d011798c228e53334ebd3b85fedde cfc4d576339424e4a8240d3408f53e26a32c5955e227f2e5f12b0063c76fe278dfa61bbf46f757b1accd268d122dd372eebc634e8e89d9624bbe80065f79fa6a6f9ea063004863e5d62f33ff16f9912016c3a3e325b1700522200c4709ac7a6c726db06bf2d460cfd19aad64de6f85a2ca1503dbe85d92b56f4081a6b6445b de690ebfd596196c0465e428956e91713b1023c82c3e06b652a1fe4233c38b99a223bd4fae279f4767b67ee016511dd3801a7e47a99d2edd6161a83fe64c5a6b3b609255ccad9b48d4007d42eeea28fcc7a3db58f8c843a2e6ed51bfced51bcf70f337af2047138f0b6795cd160b9c38dc9b6d3c0f1963515e0ef8bb00380d 2de1c3df1ce536ad62151bee23ad672f856945d7134bd9d9ee4367cb2c02019b0b6ff445b231fce02da72545e309a6b72ca03ab794abd89fa2406f4b3e3a204e1d2b26f2e4d147a919f9511ca4c3a0d6343fc0ea0fdaf8f75c7e20e08d13fb399caa0ac61b92b7ae6d92e23ba9b288789052622c7b3d7a07c0f3bbc62172e8 01986876e927e0059fa6777e53f5252d559d45dde0f137c800c99c094cf5b0f6775139e92bfcc4d19cbd4209b3fa6f8a0a19f4e17cc140ae1b55f8173aa1cc55bb148b74eec1bea4f65a0e112054772e722a09142c381feb22704cc8fd7454928f37a5b9d945f72df2b53f81b9b41526a52c64d06ec2145538a5e6a2a99930 119618fb0ab25396cba9a1a3bcba85c29b1bebde20c7d877d40a256e1c523f49ad5cdcd45ab006506f4a23bcc61c9d734d4dcbd04b7d98c80314ef111136b9238fdfb0b773381b51bd4d2320d83d3e90c0bc23eccebab3ce622f3523f8e13fc6149c9bd54d53ed7f3bea588d1e7a729f0d29d8fa4af77f11b2125f8a46d164 852ad15e6d95fc97a872386b3aee60cfcbfa5ea58114a35f89b3f501486295bf233447da21f1132b1f2c7ae38c4bd4f521ac1a6ada60fb742f39381a5554d8d83eb2dfbf343e8e76bbb4a4e968480147d51d8042299fa21dff54820eef11c3dd8e68a57dec312739612c7930c8825e866ea4adbf719641b0c687bad0d06b12 6910a323f406464ce13e0ddd62ac7884d09e1abde60a452d7f86a58004946984d8b9afa6a989d3d6003904ef42491bddc627940b142493c2e4210c351b0d1bd11388e8d6e7f89bc9fbe660fcb6ecf9c369c02fde1f4a5fae7907a2affead065cee2d12d389b91f171bbe65b61a54968f87f3a220820ab1841f95974dbdfb55 ff1b31cb803aa31ab2db479033fb5cd27c9eed2e515b550403806e3001ec81469534c500392393723604835ba9d036995e988ada6f7b9d1996674122db60728f7281c8a705b59dfa0cfdab48d8a07eabc14387c2d3ac933730c202c276427b33af46a6ba21c9176d651dee87be9a528f887b613df7626ae6c3518390a4a1ab da5e6aeee60bb1547ac718db269b74e3b0545c2b4184c7c22aa6c9c4d472069e33026482adedb4abd07a238f17327ae2920f2997dc4e45b0b63a1b8a7cf848bb09167dfd3aef24641d2a4a2328e6ac651e570a17685f3f4e0d60a18b748dc872b57c70099c92b9b4c05e406dc369120b6355d9f64dbe0e038d4d241a61047a dc6bb25bf149c62a15e809789e906e95c132a3136c91749e1599d93443cd7ea34b644c9c9f19cb414e8a8708775323f4745389c71c80e5c0850e9ba01a9da22362c0bb8a1fe0bee1ca2e808262138b944cc266db6c1d7ca4a60a3f9df1bf7e51cdec5c658730ea415fd054c277f44e2986b66581b2a549fe85bc456d4200d9 868af6cc5830114912fcc394def0a71c0a623d7bcd80f48e9c11b3e2d296a252c742d0f39d83b6301cd12e29d3e961b8ac895af694a095b77cd2c96f85f39732efd7ba811ae7a86b840e7a851ef175f8d0021b3a94f236eee7e0d5a90ce5cef82ed1f78679136d90b2476287350930e3d7395fb7453692857c1cebf5db1c61 380663877967f29f50ce53afb87c364a54e24a680ff0719ec440412e009010e81561d216cd1a5463b9ae07fb9b455e7509522e799121ece54afc0727130eed43b58ab12cbe2b13e9aac4a2ddef070c20eb3f76804b6a5d0222d21a44341193ea30f524559c9adc92ecbe4d254579c92e4d0a153782b97b83c80e0d938cbf0b 8aa00781141720e31989444c427f8e1f309108a51e255d1a3cc9a27d568bd48ec4b91b6df16ac646ab1918186199eeea1948ab0311ac8154a6584511f1e6c069bbb96febdc9e6977e535148eac4f6b4c976cdaef4af0dd687472e14f46b6142f898c3bb6d6c16c9eb5fae1c40fb54f72951a5449dcde81de6b485d92fb6cd5 b5b7232c4b4c60db7df7860dbecfe7fb54ef171010e4f7d9309c4d99541d6799be52b4df81efb631f75d8b79c0ec388c9ed7053094071b3c99f764d2f79e57ca6ac1dbf97a8fb0cf7639c17d3f52e16817b9a169b69c139aa92267dc422ab194c85b77d045f06cb0b7f43dda4ef0c1531fbe03a4030d26efe9d9ec1471b2e2 d04c3b4c99697eca853ceeee89b8abad5c2ff831ca7a697d2c63f96451259c9f9d6604bb11a05c02b4b8a399dac2ad7fb762c12ad20221f5fa84a3d3c044a2365a2e9afe70b9317e5a3493b150410d79ee9a6bac533502f86aa34bb661c8130a00406ac111723e979a029dc8ec59a3a6a3860c5956a69b9ad442a205b0dbb8 ede400ff2d0b3c1acebfb708cc3a280701b040a994a73e5c6f24d6fcef1f0620fcee794ca3262ca20acb4a40f83f20c47e1acc3ac5e11d6e285474d224d5e8db87ae856012452602c227ec55c41630c1e41f800c152211106be2a1917576111b439ea35de4210bb8abbbe78d29353832a44328fd4a4ad560a4c439e237b75e 8b6c68b5948dfc09864017ad2fa5f92a2dcee4a2843518e0b1688ff897610f1dbf4f155449c55ff7b4c2fa63cbe4474471d8a7841c730c25e3e4ad5964424baecb8a79b85aadd61124a2ab94d315c1bca1f95889cebf29c1dbad781c295d0f11288ed22077237dbd0321a089899b8bba3f8b4801ac80c63949f34f890ecc53 cd045ef991ef9890c788bead8ede06f3d77234d60941eb1bd621cf13bd7a8af422a026c031af95ece001ff031280a719ceef8182edc42561c940b621a55576ed3eb0af2ec114ca126b07569886a0e6d7012b6fd933a9ec3ebbe4b0239019494212ea15b43fd7586325d9f8e20c52548992b87cf375ee56e8332b7bdf64d82c 5772c0a3fc1b1a2ac0fb3dc92d175b4ef24e729efd4e61c16be179d2a92fea9337cd7b8aa9c6dfcb80d3c4fd8046cf88c67d39b60b7a47f114dc4fb75660577f66c051e53e9a1402a15128a996357ddba604c93ac9da54c99278fb90b01a8e9d3382170dff0d3a08a1ecdd99d49582dcb65c8dab44840ef72f00fdf9c6a3e0 3fedff1720cd7983b99a051f91e48d410de647e3af1a452c2fe99f4cd1a1581a53eabaa7bffef4fd1d9fcd58ed582266355eeb3f9680aaae539f3848c746cfa259d1e1adbbd2f67e8368d37e501f7b8e8fdad9cca83f8da5207d6f5e02a3b131eb7318cf6fbbd24e85b0bc1565fad145fe0b1179c652bb05ae2f489a6a51c7 79294a47838b509de408e4488b85b58f67df55e5e20dccef396aca3f782efe0015b679e6e0708d95a048ab8766f0ef4e5d863c8df265bab0ed4c8fbc0f33937b3872db50b1c69b5c58dfd7f72c48a8be55ab7d00d81767e86cc5bb6180eeff34785d087db262c8002ddf2c84f1bd2c30f35dd6847386856421851854e0c982 fe66390758a2fc167948458b090e11e2549235c77d4f3584781c9b86f3a8205102141f5a9e15cf131e12ccc45ce92ae4eeb2baf056b4a14d49a072b6ecc5e4fcb34f15cffc3cd60d74da3610953cc79696784ccc82bce2c60a304b38eebc840adb840513c6bffafa550e835f72f777934f5573563a57bc66e71abade7ae3ac 73c3e03b68fc7bba799c4676a65d930d067f3fa85cb87b42e394dfcbc6c4dea90da8f7d2bfceaec38e1e1324927a663295bdce05315152538841a16da4ab75635dc626d8f327effac3786dfcbe0d5c9854d07088527a98624a9cd2223549285805f0947dc643fb35c4f5113e4d53ea3c4594c469de72f97fbd6350a60499b7 a3769b2bdc5276055e40af1a8aca5a71d0b67fd35264e89581e0f8fab486cd9c8af6e742576726cb2376a30aec686b95055277a3e73bd5021585a08288dfd16017a3b511c5a4055ef07d1628973daefc55513703f1c0269abb16e336ee597b94665b4937d3276aaec921d2adb849c1bfaf4338220c013d4d58cfb85b4854a4 1b4dc5c39047a69fde52ab5e5f58104bd94b65990eb49546a3253fec0834a81148f32cea4ab69ba372b2db3990159a6477a77fd9738ae09f7851c89a9e20f415cd6c5614898569e80e9f782d11c20c0c8301f6695891d60ca1b252c91bd98e19f69b8f3fb2f7876e222284c329a7092fb18f012dfd2bfb3395a0fc6912adc2 760ecbf72631d1f6f9053410e8e0d1a2932ace3687848340e93e59a403c811692342cd943df5c15161c681268c09d64c2432795e16c66836fbe8e09def5172b221f76291aa64c3e1d7a9cee1c5268035b246dfc6f0b3e3fc0e52bc50f8d611a1d0993264d032fe86d79dc753d4cad424e5eb5dec307a563da64246469d99b1 20a933210c9229cd665e4e6708fc27ce4307ec78d6cc7003aa16d09904aa7ce00c87a7aff5cbfed7068eb434000ad1ff14310db1b7a3f00301b47ab67b51d87e33e788c580d04b9558087babc32ee6e21b5b2612a2ec98c33add43f276a9bda977e79ad01e55f8b8ce4932d24cd1c519e67e3c09b0f0fb37709edf5eb05803 eb7ebd63f918e5daea5490d154f07c06c4cdb2b6b8dd7bd83c8a3fc5b32a9887c36453e287a6a15336331fbd7bc5f184fcbc8df77f5bbc3fac7750cbbf1d5e455df0b8b2d6e5c3b67c26ec8dd66d9e8365347a40109543e5c9b60c73eedd1d1a412b85e7c570322c99f49f4e3587987a38342f86d8e6ac3618755f52be8557 6e81331d3d98002ac9e77f3425a0c52173e8cdb6a84e804d117657f2d28f60f43523304b4c8e151da16b1ffb120f46980d3e54ae7ea0388cc58aca79b9915b0b1a3ffffd89aa067dc6c9bf201be91b6ed553479bb28652d6890f2b021eb9a71a4fb7e72bf6ae5c19c2be04db78e615c9fd83302ec22969ca21defc48fea88c d4a3beb0867770202664d3ba186a80c08af784664993a67c8751664cd6b7e007c9fb84e79a39deb9a3dcab04084aa64f69b5e1ffeb241ce0b8edaf5041d7fd896aa0c0318b6e9116512c8d5dd2b427134b845e9b74edf02bc060d29799565208a3ce5bececcd2428d526093ac620099d1398d4aebd188fa58cb910606d42bc e7d76afd1242ee0bef6defcf6fd734f990afd1efadec99d77a72ef16abc8e9454b23441bfdbd5b2d9452fb080465b29a1ea0d25f7672f30a6528de7aa61cc2e50e259d7a4976220b15e141774b598ceaea48b4132ffdb29f68602468cfc11e71b8acbc36329b3e0bb9ec27fcff6af6c20224caca52e950ccf85d7c5e0ec04a 5a8e8e2ee4da07da9c10fe3af67532c07b907587623286e60dad282363a74223dfea06ace7603029a1139ab16a0e627f5a32a737bdcc3be57a6b278cfa1509ec93366b8f617faaef887c7c686b1dd063503a31081a89eede0a2234032aab0883ad0e02ab4503fac2eaab793e26bc474e262748f572ec7dee5cbcab75bb5195 25136a7c3b5d592a2010a4c62b43c72fcb0c58d4d485f9debe1ba2917cfee3af3d8fa5120f732cada12182b9759b7e9a2e9263f1cbcf27e6c9b57021aa4a69ca2cb6308912edc4f8d28c82262662e841a0733ff4a48495f9965c15d9784f9c286d992f466a17786af839b7ccb66c54838d9092d674e090c9d2be9378b12bee 55f7fc9e45596ba934b874e792f578309f2db01bc18a0b0586c30ca6bee285edf32c1814b6c8f0b25f89d2bef8b1393ef5ee2f71a4e2621396b69364efe41a9c3cdc0a0e0af1f19abef5b1d7975dca62a5b6834542c29cb9730d4de4681f1259a14e0dcb92597291123a6904c43e2dc61e41d88ba05d24988276b98a3dc968 ae817bd5f6d8da95d4964c164c516a33307aa898aa683321c8ee6747f5bd2e516c90f456c1b0ab3c3c17a8050490a55b7e091cd5119bbdbcf06d3a3fd0af3f4b594960cb82df76523254afef464d169a723d32cf046bd23d4292ce513d06f4e924072475ba19951bbca551322ca5a7da35b822a9f95d500b9bc0e0fb22ff42 812f7666049acf1bcdb427f161ad618a00692a744f9e202775e92ce6f1d478fff48a5909eae512a42bff0c6f59e6c03bb16c08286d7f5703df98e96f8a6b1a85e8dd51fb7466dddfacffc4a343f4181655155ccf23ba2b5efcf376965827f896d93dc16e2080a32dcf9e2f1d251839d55f9304cfad2dbb6190603ccc404b45 345f8816b3cbce1fa2d4c52b0683c02776a69ccbb1bd4c91626ce99f36feb360e37551c1d603938c1932c837a26f3f9ee3447c28d94f3fa7bd80e91d97cfb91c825386f951f7b49d7ea6097df1fff1f9728bc7612072eb6cd00d42e92d99c58363f468e819ce1645eccc610ceeba2d9fe375ce84874e5309426b5da0a1d6c5 e220451980506760d1f15bf459b7941c3cdcef3e173955557c3eff05d57aa911c974fbfafde4e8b7e44e60b608aeaec1c8952f787a4f3db5e36f68209aa0e72ee42c9dab5476731f98efd132bcbf540e65be27d43acab56cf09b182c160931be67293896f86c7754a8d839ead2a46df891e2c68e29302af82524a445c7a719 1ca22bbd34c35e32793c63c6a06264ed44a80392d6dc2a358ac6111b684665aceaca7d912ac32b97918c21c29fe5303b4e7f2c125534f612d192e80dbb1c333ff69218579d5ff15edaeb546c1a37ce0376a717afbdb2a895a4a212f6afea3bade69d5403199b82c4cb3818f5de5b968d2cc7125a0b56402e90e80bb99a3540 1156ac7fc66a030c6baebd6fbc99450ab8289966e8fb784db1098794baaaf6e425a4ec28bae84ca9b4eae3a88c58dce22f587195337627263fde9d4a839340e3c2aeac65159e07713005d8e2c5bb02143687b4f9b94a7b8dc563d9ea6cd4312ef5193de4a7cb80c03669843a5be26e6f72066f4bb4398d6d45bd2932b53eef 3b422a0cd5a7ffd3e0c6e48b9863992f2a5fc9111f3454e9b6ed1beecebe3901429dce3fcdb12818e0fc0580a470d339adac821461c809c57d94643c400667bd81a45243f5b6dfd9a8ab0c9037f4b85121e4bef524408a49a27e1e84a54460bf90ffbd273566b2e72a359c5dc976173de26d425e5e08daaff0f2dbd5a8208e 5d5682c1cc88dc6cf13236594be412b3078fb4162bbcd5fb72a9c85bfa86e9738dc5af7ef3114060e73fa0b1d1eed6eb6cb001d1408a4eaaffa863cc8443a9584005001d94dde3e6864fc87b1ba74809c2af1fc3f809919638fdc57e43bacf1a93980f97f712b27f0e28d973485168413a40de15360c612be853ecb38fe8a7 85e68af029690a4fab6f46bf09d5e0580540645356acde2f64ad0abc4e688cfacbad33e80e873e38073e81e208609af12997c3f6c4e1f5db61175e7de14cd2c0b11dc4dfebe479b8a1bcf3c72d5bbc8f24bf41c1e32e3d242e0ecee5a7e91a79164e352e645bdde2e2ea4e4fa73a51dbac6f3fb12a2e52c931faaea002e632 ed96496f3f6ac6a5c2fbbe514bf15ac568f28e94f08c2d5dd438fd6d0bb1d78bed781f2a592dce57eec4981b61dc14f7e92ab5fd9984a66d5d5a9f0ed99bb5657677be57f825d2fa131247d58e1bb4e05777dca12c1b867b4bc8600c0625e17a5762c8b53e40edab3da7a3e06a850727a673cf1fb83e309cc24035adec1a00 542b0baee896f3159b914f386ef735724ac978e6726e092e5c4f7c8f2d03a26ac3e8767b13433fcb62a70abe33805894df64f5b5610805790c0fb51a4940bfa3065f8eb363a22f7443a14cd875b36aee9ce235e7ea278bb4ba79894a6e0be9481c8968c7923540a9f3562735a841c6265c9a59fc46a79f9d86955edcab2de4 59e9653265dd7bdadab75e6b5403ba677a0911f16c02c1aca1207a80b63339b198bc2ed97d9be44ffcc539de6a09efd6ed3ba7fc86793c605eed99667f647e554a973fbf703c805621dd01027136ca6612623702af39e044e2310a57ab6436a0c2bb9338f66f741cceae5ad97437c183d1616b0f0f82b8c169406a60ff9a3c 8c4d64f8c428f431aa6d6f210032a9d1a690cc9f0e8bc0a8eb092e0a4dff5210fe1d04aae62cdeb09d63b590413afd725b7c69a625626e84bd6de7a9a7dc581740f15a6c33b37fd1c4b0d603620f766b2caede6c58e98232039bf1bcc679ca49c69d94f2f9ff6bc90e42ec4eea2a95f36ec9c4c05ac2727c8dca53cff8b52d 77758f701a73ee7ede506aa45303488608e3278ada7cdb5d0e278024eddaf5b3d71a9e78e09aef38bc1cb9505bd2d5ff7740c01d2cf99d3234e37ebee8bc234a84d246f9d34417ff4b46722c7f7c1f02c88e61c1d07dc9e9e250c27f5921fd79580f2c7960946bcf066460b6a06b56c8a6faf33febc37211a4076d26f23a3c 37caf7a67a61d6a83852619d92b0a47b045610dd8ad197fba14b73c7e521cd1f302257bb4fc9f73c640757151beaac43c7e9c1f57e855d07b7719159af3c3fcfc5f8f0ee36f54afb496e06d2ed4b5b805d8b8aaf98b86a23e129c91661bdcce80d03447f0c136cd494d4673fd203ca4c4daaa785b9b6d5b9b5bef548353a5d 80621a70c8a110f82cc7dda3c13357d058452641c314663f0cfecc25b0dca60ac3c087489239a74723f279be5cce18c58f0426bc79119e4acc48635802d53ce7b79454510c168a9c2eda73621fceba43bfa2faef93ea709b7489cf1cb8d579b798193f06b506c277fd37c5a20cf06531ae664a44dd3c15042c8d037b462792 a887f13493d8fa2e1d6b363b108be4e1e5322c9c5507f692dde3893f900eeefa8b0ac181b12db6e5a19ef26c5ccab730e35be6880bb76c0698b783e5d70d62e7c8a257e56aab3c2f1630f956471d6ea1814ae2d248ab828fd84fa0293591576a21dd10bbdddb6afac43405dc2349bc952d246f36f2fa53938eb25008bfeab9 3ee79e61e8b8484646bab5c5435726f5944849715f4fa5ab626d06c2f4d3b979f75e1dbe41a69fb51df35cb8405c669642155d2e1af0d8c9bfc755a243d7472c62d3ebba5eaf9ffd78f286bd564d714f24d15f5244060411d7f6bbf7eb1bb40ebdf280bc8e2dbc3bb5c08c7bc54987c7fbce2204ea4fb6d4d0cd702608a115 1ce65a55a72697b84ecfaaef7377ca2232f61c0b5d50601848c836dc8904ef730fac47f13317870461374472d742ba2aaa28e408f33bb60f406361cbcc1dbb3881e28a15f3596164b300bb41cb8ca6c2e8711deddf7e217e6dc88dd2cfdf39e583723defcc1b71b1277aba6cb197e612d8292ff4a656d0e3bb6dc3ed945611 e90704e747134e376db710d8f8306e7603f83857da83686e53231c0221bc669c8e1ab002bdfab188211f28497a5bcbb94403fe9e3e98e83e78e050b6abf9b731774fe0eb94644e65a66249d897c5800999da92681963063ebe3fbe290ff13a942e3aa0b85a36437cc74b8eb62a705349a148c70343d786f64b23dcfca752e9 48739f58e50b227d688722f0007034f2bb589b221b450e4e5995a363f9dd0ff043e3c8f1319848dfba748cc99262649dddb2a2a05ef8130d873b4926275bccab6a6d847a1a33512ca8fe6753bff36e417c090bd5749f74e70a49d71614b4950c65cb615dcffb96336f52cb1a948b99fce25af2dca24a683f968c529aa9b57b f0186e0b4f7f1c075669b6ed3b7e1dfd06bbc54b4fc9d5fce169a20000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont setpacking %AI3_EndRider [ 39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis /Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute /egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde /oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex /udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash /.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef /.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash /questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef /guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide /.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright /fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex /Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex /Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla /hungarumlaut/ogonek/caron TE %AI55J_Tsume: None %AI3_BeginEncoding: _CoreTTI2k CoreTTI2k [/NUL /Eth /eth /Lslash /lslash /Scaron /scaron /Yacute /yacute /HT /LF /Thorn /thorn /CR /Zcaron /zcaron /DLE /DC1 /DC2 /DC3 /DC4 /onehalf /onequarter /onesuperior /threequarters /threesuperior /twosuperior /brokenbar /minus /multiply /RS /US /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /grave /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /DEL /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /degree /cent /sterling /section /bullet /paragraph /germandbls /registered /copyright /trademark /acute /dieresis /notequal /AE /Oslash /infinity /plusminus /lessequal /greaterequal /yen /mu /partialdiff /summation /product /pi /integral /ordfeminine /ordmasculine /Omega /ae /oslash /questiondown /exclamdown /logicalnot /radical /florin /approxequal /Delta /guillemotleft /guillemotright /ellipsis /nbspace /Agrave /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /divide /lozenge /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /apple /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron /_CoreTTI2k/CoreTTI2k 0 0 0 TZ %AI3_EndEncoding AdobeType %AI55J_Tsume: None %AI3_BeginEncoding: _TimesTen-Italic TimesTen-Italic [/_TimesTen-Italic/TimesTen-Italic 0 0 1 TZ %AI3_EndEncoding AdobeType %AI55J_Tsume: None %AI3_BeginEncoding: _TimesTen-Roman TimesTen-Roman [/_TimesTen-Roman/TimesTen-Roman 0 0 1 TZ %AI3_EndEncoding AdobeType [161/degree 173/notequal 176/infinity/plusminus/lessequal/greaterequal 181/mu/partialdiff/summation/product/pi/integral 189/Omega 195/radical 197/approxequal 198/Delta 214/divide/lozenge 240/apple /_Symbol_/Symbol 0 0 0 TZ %AI5_BeginPalette 0 0 Pb 1 1 1 1 ([Registration]) 0 Xs ([Registration]) Pc PB %AI5_EndPalette %AI5_Begin_NonPrinting Np %AI5_End_NonPrinting-- %AI5_Begin_NonPrinting Np %AI8_PluginGroupInfo (Adobe Path Blends) (Adobe Blends Plugin) (Live Blends) %AI8_PluginGroupInfo (Adobe PatternOnPath Brush Tool) (Adobe Pattern Brush Plugin) (Art Brush Tool) %AI8_PluginGroupInfo (Adobe ArtOnPath Brush Tool) (Adobe Art Brush Plugin) (Art Brush Tool) %AI8_PluginGroupInfo (Adobe Calligraphic Brush Tool) (Undo New Calligraphic Brush) (Calligraphic Brush Tool) %AI8_PluginGroupInfo (Adobe Scatter Brush Tool) (Adobe Scatter Brush Plugin) (Scatter Brush Tool) %AI5_End_NonPrinting-- %%EndSetup %AI5_BeginLayer 1 1 1 1 0 0 1 0 79 128 255 0 50 Lb (Layer 1) Ln 0 A u 0 O 0.25 0 0 0 k 1 R 0 0 0 1 K 800 Ar 0 J 0 j 0.5 w 4 M []0 d %AI3_Note: 0 D 1 XR 52.0723 75.4399 m 106.1924 75.4399 L 106.1924 88.04 L 52.0723 88.04 L 52.0723 75.4399 L b U 0 To 1 0 0 1 52.0723 78.96 0 Tp 0 Tv TP 0 Tr 1 O 0 0 0 1 k 1 w %_ 0 50 XQ /_CoreTTI2k 8 6.944 -2 Tf 0 Ts 100 100 Tz 0 Tt %_0 0 100 100 Xu %AI55J_GlyphSubst: GlyphSubstNone 1 TA %_ 0 XL 0 TY 0 TV 36 0 Xb XB 0 0 5 TC 100 100 200 TW 25 TG 0 0 0 Ti 0 Ta 0 1 2 2 3 Th 0 Tq 240 Tg 9 0 Tl 0 Tc 0 Tw (+) Tx 1 0 Tk /_TimesTen-Italic 8 7.424 -1.8 Tf (run\(\)) Tx 1 0 Tk (\r) TX TO u 0 O 0 0 0 0 k 1 R 0 0 0 1 K 0.5 w 52.0723 88.04 m 106.1924 88.04 L 106.1924 109.2798 L 52.0723 109.2798 L 52.0723 88.04 L b U 0 To 1 0 0 1 79.1328 100.3799 0 Tp 0 Tv TP -19.3318 0 Td 0 Tr 1 O 0 0 0 1 k 1 w /_TimesTen-Roman 8 7.48 -1.92 Tf 1 Ta (\307) Tx 1 0 Tk (interface) Tx 1 0 Tk (\310) Tx 1 0 Tk (\r) Tx 1 0 Tk 2.66 -9 Td /_TimesTen-Italic 8 7.424 -1.8 Tf (Runnable) Tx 1 0 Tk (\r) TX TO u 0 O 0 0 0 0 k 1 R 0 0 0 1 K 0.5 w 18.6152 3.2402 m 139.6494 3.2402 L 139.6494 24.4805 L 18.6152 24.4805 L 18.6152 3.2402 L b U 0 To 1 0 0 1 18.6152 16.2002 0 Tp 0 Tv TP 0 Tr 1 O 0 0 0 1 k 1 w /_CoreTTI2k 8 6.944 -2 Tf 0 Ta (+) Tx 1 0 Tk /_TimesTen-Roman 8 7.48 -1.92 Tf (T) Tx 1 50 Tk (imer\(in a :) Tx 1 55 Tk ( SlideShowApplet\)\r) Tx 1 0 Tk T* /_CoreTTI2k 8 6.944 -2 Tf (+) Tx 1 0 Tk /_TimesTen-Roman 8 7.48 -1.92 Tf (run\(\)) Tx 1 0 Tk (\r) TX TO u 0 O 0.25 0 0 0 k 1 R 0 0 0 1 K 0.5 w 18.6152 24.4805 m 139.6494 24.4805 L 139.6494 37.0801 L 18.6152 37.0801 L 18.6152 24.4805 L b U 0 To 1 0 0 1 18.6152 28.7998 0 Tp 0 Tv TP 0 Tr 1 O 0 0 0 1 k 1 w /_CoreTTI2k 8 6.944 -2 Tf (-) Tx 1 0 Tk /_TimesTen-Roman 8 7.48 -1.92 Tf (applet :) Tx 1 55 Tk ( SlideShowApplet) Tx 1 0 Tk (\r) TX TO u 1 R 0 0 0 1 K 0.5 w 18.6152 37.0801 m 139.6494 37.0801 L 139.6494 51.4805 L 18.6152 51.4805 L 18.6152 37.0801 L S U 0 To 1 0 0 1 79.1328 41.5 0 Tp 0 Tv TP -10.4687 0 Td 0 Tr 1 O 0 0 0 1 k 1 w 1 Ta (T) Tx 1 50 Tk (imer) Tx 1 0 Tk (\r) TX TO 0 R 1 0 0 0 K 1.2 w [2 1 ]0 d 0 XR 79.1309 65.6025 m 79.1309 51.5156 l S /BBAccumRotation (-1.570796) XT []0 d 84.1328 65.6025 m 79.1309 74.0024 l 74.1309 65.6025 l 84.1328 65.6025 l s LB %AI5_EndLayer-- %%PageTrailer gsave annotatepage grestore showpage %%Trailer Adobe_Illustrator_AI5 /terminate get exec Adobe_shading_AI8 /terminate get exec Adobe_ColorImage_AI6 /terminate get exec Adobe_typography_AI5 /terminate get exec Adobe_cshow /terminate get exec Adobe_level2_AI5 /terminate get exec %%EOF \ No newline at end of file +%!PS-Adobe-3.0 EPSF-3.0 +%%HiResBoundingBox: 0.000000 0.000000 126.000000 111.000000 +%APL_DSC_Encoding: UTF8 +%APLProducer: (Version 10.12.4 (Build 16E195) Quartz PS Context) +%%Title: (Unknown) +%%Creator: (Unknown) +%%CreationDate: (Unknown) +%%For: (Unknown) +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 0 0 126 111 +%%EndComments +%%BeginProlog +%%BeginFile: cg-pdf.ps +%%Copyright: Copyright 2000-2004 Apple Computer Incorporated. +%%Copyright: All Rights Reserved. +currentpacking true setpacking +/cg_md 141 dict def +cg_md begin +/L3? languagelevel 3 ge def +/bd{bind def}bind def +/ld{load def}bd +/xs{exch store}bd +/xd{exch def}bd +/cmmtx matrix def +mark +/sc/setcolor +/scs/setcolorspace +/dr/defineresource +/fr/findresource +/T/true +/F/false +/d/setdash +/w/setlinewidth +/J/setlinecap +/j/setlinejoin +/M/setmiterlimit +/i/setflat +/rc/rectclip +/rf/rectfill +/rs/rectstroke +/f/fill +/f*/eofill +/sf/selectfont +/s/show +%/as/ashow +/xS/xshow +/yS/yshow +/xyS/xyshow +/S/stroke +/m/moveto +/l/lineto +/c/curveto +/h/closepath +/n/newpath +/q/gsave +/Q/grestore +counttomark 2 idiv +%dup (number of ld's = )print == flush % *** how many +{ld}repeat pop +/SC{ % CSname + /ColorSpace fr scs +}bd +/sopr /setoverprint where{pop/setoverprint}{/pop}ifelse ld +/soprm /setoverprintmode where{pop/setoverprintmode}{/pop}ifelse ld +/cgmtx matrix def +/sdmtx{cgmtx currentmatrix pop}bd +/CM {cgmtx setmatrix}bd % pop the ctm: our gstate ctm on host is now identity +/cm {cmmtx astore CM concat}bd % reset the matrix and then concat +/W{clip newpath}bd +/W*{eoclip newpath}bd + +statusdict begin product end dup (HP) anchorsearch{ + pop pop pop % pop off the search results + true +}{ + pop % previous search result + (hp) anchorsearch{ + pop pop true + }{ + pop false + }ifelse +}ifelse + +{ % HP is the product: we use this method of stroking because of a bug in their clone printers with certain T3 fonts + { + { % charCode Wx Wy + pop pop % charCode + (0)dup 0 4 -1 roll put + F charpath + }cshow + } +}{ + {F charpath} +}ifelse +/cply exch bd +/cps {cply stroke}bd +/pgsave 0 def +/bp{/pgsave save store}bd +/ep{pgsave restore showpage}def % dont' bind +/re{4 2 roll m 1 index 0 rlineto 0 exch rlineto neg 0 rlineto h}bd + +/scrdict 10 dict def +/scrmtx matrix def +/patarray 0 def +/createpat{patarray 3 1 roll put}bd +/makepat{ +scrmtx astore pop +gsave +initgraphics +CM +patarray exch get +scrmtx +makepattern +grestore +setpattern +}bd + +/cg_BeginEPSF{ + userdict save/cg_b4_Inc_state exch put + userdict/cg_endepsf/cg_EndEPSF load put + count userdict/cg_op_count 3 -1 roll put + countdictstack dup array dictstack userdict/cg_dict_array 3 -1 roll put + 3 sub{end}repeat + /showpage {} def + 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin + 10 setmiterlimit [] 0 setdash newpath + false setstrokeadjust false setoverprint % don't use F +}bd +/cg_EndEPSF{ + countdictstack 3 sub { end } repeat + cg_dict_array 3 1 index length 3 sub getinterval + {begin}forall + count userdict/cg_op_count get sub{pop}repeat + userdict/cg_b4_Inc_state get restore + F setpacking +}bd + +/cg_biproc{currentfile/RunLengthDecode filter}bd +/cg_aiproc{currentfile/ASCII85Decode filter/RunLengthDecode filter}bd +/ImageDataSource 0 def +L3?{ + /cg_mibiproc{pop pop/ImageDataSource{cg_biproc}def}bd + /cg_miaiproc{pop pop/ImageDataSource{cg_aiproc}def}bd +}{ + /ImageBandMask 0 def + /ImageBandData 0 def + /cg_mibiproc{ + string/ImageBandMask xs + string/ImageBandData xs + /ImageDataSource{[currentfile/RunLengthDecode filter dup ImageBandMask/readstring cvx + /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd + }bd + /cg_miaiproc{ + string/ImageBandMask xs + string/ImageBandData xs + /ImageDataSource{[currentfile/ASCII85Decode filter/RunLengthDecode filter + dup ImageBandMask/readstring cvx + /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd + }bd +}ifelse +/imsave 0 def +/BI{save/imsave xd mark}bd +/EI{imsave restore}bd +/ID{ +counttomark 2 idiv +dup 2 add % leave room for imagetype and imagematrix +dict begin +{def} repeat +pop % remove mark +/ImageType 1 def +/ImageMatrix[Width 0 0 Height neg 0 Height]def +currentdict dup/ImageMask known{ImageMask}{F}ifelse exch +% currentdict on stack +L3?{ + dup/MaskedImage known + { + pop + << + /ImageType 3 + /InterleaveType 2 + /DataDict currentdict + /MaskDict + << /ImageType 1 + /Width Width + /Height Height + /ImageMatrix ImageMatrix + /BitsPerComponent 1 + /Decode [0 1] + currentdict/Interpolate known + {/Interpolate Interpolate}if + >> + >> + }if +}if +exch +{imagemask}{image}ifelse +end % pop imagedict from dict stack +}bd + +/cguidfix{statusdict begin mark version end +{cvr}stopped{cleartomark 0}{exch pop}ifelse +2012 lt{dup findfont dup length dict begin +{1 index/FID ne 2 index/UniqueID ne and +{def} {pop pop} ifelse}forall +currentdict end definefont pop +}{pop}ifelse +}bd +/t_array 0 def +/t_i 0 def +/t_c 1 string def +/x_proc{ % x y + exch t_array t_i get add exch moveto + /t_i t_i 1 add store +}bd +/y_proc{ % x y + t_array t_i get add moveto + /t_i t_i 1 add store +}bd +/xy_proc{ + % x y + t_array t_i 2 copy 1 add get 3 1 roll get + 4 -1 roll add 3 1 roll add moveto + /t_i t_i 2 add store +}bd +/sop 0 def % don't bind sop +/cp_proc/x_proc ld % default moveto proc is for xwidths only +/base_charpath % string array +{ + /t_array xs + /t_i 0 def + { % char + t_c 0 3 -1 roll put + currentpoint + t_c cply sop + cp_proc + }forall + /t_array 0 def +}bd +/sop/stroke ld % default sop is stroke. Done here so we don't bind in /base_charpath + +% default sop is stroke +/nop{}def +/xsp/base_charpath ld +/ysp{/cp_proc/y_proc ld base_charpath/cp_proc/x_proc ld}bd +/xysp{/cp_proc/xy_proc ld base_charpath/cp_proc/x_proc ld}bd +/xmp{/sop/nop ld /cp_proc/x_proc ld base_charpath/sop/stroke ld}bd +/ymp{/sop/nop ld /cp_proc/y_proc ld base_charpath/sop/stroke ld}bd +/xymp{/sop/nop ld /cp_proc/xy_proc ld base_charpath/sop/stroke ld}bd +/refnt{ % newname encoding fontname +findfont dup length dict copy dup +/Encoding 4 -1 roll put +definefont pop +}bd +/renmfont{ % newname fontname +findfont dup length dict copy definefont pop +}bd + +L3? dup dup{save exch}if + +% languagelevel2 ONLY code goes here + +/Range 0 def +/DataSource 0 def +/val 0 def +/nRange 0 def +/mulRange 0 def +/d0 0 def +/r0 0 def +/di 0 def +/ri 0 def +/a0 0 def +/a1 0 def +/r1 0 def +/r2 0 def +/dx 0 def +/Nsteps 0 def +/sh3tp 0 def +/ymax 0 def +/ymin 0 def +/xmax 0 def +/xmin 0 def + +/setupFunEval % funDict -- % this calculates and sets up a function dict for evaulation. +{ + begin + /nRange Range length 2 idiv store + /mulRange % precompute the range data needed to map a sample value from the table to a range value + % this data looks like [ range0mul range0min range1mul range1min ... rangeN-1mul rangeN-1min ] + [ + 0 1 nRange 1 sub + { % index + 2 mul/nDim2 xd % 2*dimension# we are dealing with + Range nDim2 get % ymin + Range nDim2 1 add get % ymin ymax + 1 index sub % ymin (ymax-ymin) + % xmin = 0, xmax = 255 (2^bitspersample - 1) + 255 div % ymin (ymax-ymin)/(xmax - xmin) + exch % (ymax-ymin)/(xmax - xmin) ymin + }for + ]store + end +}bd + +/FunEval % val1 fundict -> comp1 comp2 ... compN +{ + begin + % the value passed in is the base index into the table + nRange mul /val xd % compute the actual index to the table + % since there are nRange entries per base index + 0 1 nRange 1 sub + { + dup 2 mul/nDim2 xd % dim + val % base value to use to do our lookup + add DataSource exch get % lookedupval + mulRange nDim2 get mul % lookedupval*(ymax-ymin)/(xmax-xmin) + mulRange nDim2 1 add get % lookedupval*(ymax-ymin)/(xmax-xmin) ymin + add % interpolated result + }for % comp1 comp2 ... compN + end +}bd + +/max % a b -> max(a, b) +{ + 2 copy lt + {exch pop}{pop}ifelse +}bd + +/sh2 +{ % emulation of shading type 2. Assumes shading dictionary is top dictionary on the dict stack + /Coords load aload pop % x0 y0 x1 y1 + 3 index 3 index translate % origin is now at beginning point of shading + % x0 y0 x1 y1 + 3 -1 roll sub % x0 x1 y1-y0 + 3 1 roll exch % y1-y0 x1 x0 + sub % y1-y0 x1-x0 + 2 copy + dup mul exch dup mul add sqrt % length of segment between two points + dup + scale + atan % atan (dy/dx) + %dup (rotation angle = )print == + rotate % now line between 0,0 and 1,0 is the line perpendicular to which the axial lines are drawn + + /Function load setupFunEval % may need to setup function dictionary by calling setupFunEval + + % this is now specific to axial shadings. Compute the maximum bounds to fill + clippath {pathbbox}stopped {0 0 0 0}if newpath % x0 y0 x1 y1 + /ymax xs + /xmax xs + /ymin xs + /xmin xs + currentdict/Extend known + { + /Extend load 0 get + { + 0/Function load FunEval sc % evaluate the function to get a color and set it + xmin ymin xmin abs ymax ymin sub rectfill + }if + }if + % paint the rects. The sampling frequency is that of our table + /Nsteps/Function load/Size get 0 get 1 sub store + /dx 1 Nsteps div store + gsave + /di ymax ymin sub store + /Function load + % loop Nsteps + 1 times, incrementing the index by 1 each time + 0 1 Nsteps + { + 1 index FunEval sc + 0 ymin dx di rectfill + dx 0 translate + }for + pop % pop our function + grestore % origin is back to start point + currentdict/Extend known + { + /Extend load 1 get + { + Nsteps/Function load FunEval sc % last element + 1 ymin xmax 1 sub abs ymax ymin sub rectfill + }if + }if +}bd + +/shp % this paints our shape for shading type 3 +{ % x1 r1 x0 r0 - + 4 copy + + % fill interior arc + dup 0 gt{ + 0 exch a1 a0 arc + }{ + pop 0 moveto + }ifelse + + dup 0 gt{ + 0 exch a0 a1 arcn + }{ + pop 0 lineto + }ifelse + + fill + + % fill exterior arc + dup 0 gt{ + 0 exch a0 a1 arc + }{ + pop 0 moveto + }ifelse + + dup 0 gt{ + 0 exch a1 a0 arcn + }{ + pop 0 lineto + }ifelse + + fill +}bd + +/calcmaxs +{ % calculate maximum distance vector from origin to corner points + % of bbox + xmin dup mul ymin dup mul add sqrt % (xmin2 + ymin2) + xmax dup mul ymin dup mul add sqrt % (xmax2 + ymin2) + xmin dup mul ymax dup mul add sqrt % (xmin2 + ymax2) + xmax dup mul ymax dup mul add sqrt % (xmax2 + ymax2) + max max max % maximum value +}bd + +/sh3 +{ % emulation of shading type 3. Assumes shading dictionary is top dictionary on the dict stack + /Coords load aload pop % x0 y0 r1 x1 y1 r2 + 5 index 5 index translate % origin is now at first circle origin + 3 -1 roll 6 -1 roll sub % y0 r1 y1 r2 dx + 3 -1 roll 5 -1 roll sub % r1 r2 dx dy + 2 copy dup mul exch dup mul add sqrt + /dx xs % r1 r2 dx dy + 2 copy 0 ne exch 0 ne or + { + % r1 r2 dx dy + exch atan rotate % we are now rotated so dy is zero and positive values of dx move us as expected + }{ + pop pop + }ifelse + % r1 r2 + /r2 xs + /r1 xs + /Function load + dup/Size get 0 get 1 sub % this is the size of our table minus 1 + /Nsteps xs % at some point we should optimize this better so NSteps is based on needed steps for the device + setupFunEval % may need to setup function dictionary by calling setupFunEval + % determine the case: + % case 0: circle1 inside circle2 + % case 1: circle 2 inside circle 1 + % case 2: r1 = r2 + % case 3: r1 != r2 + dx r2 add r1 lt{ + % circle 2 inside of circle 1 + 0 + }{ + dx r1 add r2 le + { % circle 1 inside of circle 2 + 1 + }{ % circles don't contain each other + r1 r2 eq + { % equal + 2 + }{ % r1 != r2 + 3 + }ifelse + }ifelse + }ifelse + /sh3tp xs % sh3tp has the number of our different cases + clippath {pathbbox}stopped {0 0 0 0}if + newpath % x0 y0 x1 y1 + /ymax xs + /xmax xs + /ymin xs + /xmin xs + + % Arc angle atan( sqrt((dx*dx + dy*dy) - dr*dr), dr) + dx dup mul r2 r1 sub dup mul sub dup 0 gt + { + sqrt r2 r1 sub atan + /a0 exch 180 exch sub store + /a1 a0 neg store + }{ + pop + /a0 0 store + /a1 360 store + }ifelse + + currentdict/Extend known + { + /Extend load 0 get r1 0 gt and % no need to extend if the radius of the first end is 0 + { + 0/Function load FunEval sc % evaluate the function to get a color and set it + % case 0: circle1 inside circle2 + % case 1: circle 2 inside circle 1 + % case 2: circles don't contain each other and r1 == r2 + % case 3: circles don't contain each other and r1 != r2 + { + { % case 0 + dx 0 r1 360 0 arcn + xmin ymin moveto + xmax ymin lineto + xmax ymax lineto + xmin ymax lineto + xmin ymin lineto + eofill % for the bigger radius we fill everything except our circle + } + { % case 1 + r1 0 gt{0 0 r1 0 360 arc fill}if + } + { % case 2 + % r1 == r2, extend 0 + % r3 = r, x3 = -(abs(minx) + r), x1 = 0 + + % x(i+1) r(i+1) x(i) r(i) shp + 0 r1 xmin abs r1 add neg r1 shp + } + { % case 3 + % no containment, r1 != r2 + + r2 r1 gt{ % the endpoint we are drawing is that with a circle of zero radius + % x(i+1) r(i+1) x(i) r(i) shp + 0 r1 + r1 neg r2 r1 sub div dx mul % this is point of beginning circle + 0 % point of ending circle + shp % takes x(i+1) r(i+1) x(i) r(i) + }{ % the first circle is the bigger of the two + % we find a circle on our line which is outside the bbox in the + % negative direction + % x(i+1) r(i+1) x(i) r(i) shp + 0 r1 calcmaxs % 0 r1 maxs + dup + % calculating xs: (-(maxs+r2)*x2)/(x2-(r1-r2)) + r2 add dx mul dx r1 r2 sub sub div + neg % maxs xs' + exch 1 index % xs' maxs xs' + abs exch sub + shp + }ifelse + } + }sh3tp get exec % execute the extend at beginning proc for our shading type + }if + }if + + % now do the shading + /d0 0 store + /r0 r1 store + /di dx Nsteps div store + /ri r2 r1 sub Nsteps div store + /Function load + 0 1 Nsteps + { % function t(i) + 1 index FunEval sc + d0 di add r0 ri add d0 r0 shp + { + % fill interior arc + d0 0 r0 a1 a0 arc + d0 di add 0 r0 ri add a0 a1 arcn + fill + + % fill exterior arc + d0 0 r0 a0 a1 arc + d0 di add 0 r0 ri add a1 a0 arcn + fill + }pop + + % advance to next + /d0 d0 di add store + /r0 r0 ri add store + }for + pop % pop our function dict + + % handle Extend + currentdict/Extend known + { + /Extend load 1 get r2 0 gt and % no need to extend if the radius of the last end is 0 + { + Nsteps/Function load FunEval sc % last element + % case 0: circle1 inside circle2 + % case 1: circle 2 inside circle 1 + % case 2: circles don't contain each other and r1 == r2 + % case 3: circles don't contain each other and r1 != r2 + { + { + dx 0 r2 0 360 arc fill + } + { + dx 0 r2 360 0 arcn + xmin ymin moveto + xmax ymin lineto + xmax ymax lineto + xmin ymax lineto + xmin ymin lineto + eofill % for the bigger radius we fill everything except our circle + } + { % r1 == r2, extend 1 + % r3 = r, x3 = (abs(xmax) + r), x1 = dx + % x(i+1) r(i+1) x(i) r(i) shp + xmax abs r1 add r1 dx r1 shp + } + { % no containment, r1 != r2 + + r2 r1 gt{ + % we find a circle on our line which is outside the bbox in the + % positive direction + % x(i+1) r(i+1) x(i) r(i) shp + calcmaxs dup % maxs maxs + % calculating xs: ((maxs+r1)*x2)/(x2-(r2-r1)) + r1 add dx mul dx r2 r1 sub sub div % maxs xs + exch 1 index % xs maxs xs + exch sub + dx r2 + shp + }{ % the endpoint we are drawing is that with a circle of zero radius + % x(i+1) r(i+1) x(i) r(i) shp + r1 neg r2 r1 sub div dx mul % this is point of ending circle + 0 % radius of ending circle + dx % point of starting circle + r2 % radius of starting circle + shp + }ifelse + } + } + sh3tp get exec % execute the extend at end proc for our shading type + }if + }if +}bd +/sh % emulation of shfill operator for type 2 and type 3 shadings based on type 0 functions +{ % shadingDict -- + begin + /ShadingType load dup dup 2 eq exch 3 eq or + { % shadingtype + gsave + newpath + /ColorSpace load scs + currentdict/BBox known + { + /BBox load aload pop % llx lly urx ury + 2 index sub % llx lly urx ury-lly + 3 index % llx lly urx ury-lly llx + 3 -1 roll exch sub + exch rectclip + }if + 2 eq + {sh2}{sh3}ifelse + grestore + }{ + % shadingtype + pop + (DEBUG: shading type unimplemented\n)print flush + }ifelse + end +}bd + +% end of language level 2 ONLY code + +{restore}if not dup{save exch}if +% languagelevel3 ONLY code goes here + L3?{ % we do these loads conditionally or else they will fail on a level 2 printer + /sh/shfill ld + /csq/clipsave ld + /csQ/cliprestore ld + }if +{restore}if + +%currentdict dup maxlength exch length sub (number of extra slots in md = )print == flush % *** how many entries are free +end +setpacking +% count 0 ne { pstack(***extras on stack during prolog execution***\n)print flush}if % *** BARK if anything is left on stack +%%EndFile +%%EndProlog +%%BeginSetup +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 0 0 126 111 +%%BeginPageSetup +cg_md begin +bp +sdmtx +%RBIBeginFontSubset: Helvetica +%!FontType1-1.0: Helvetica 1.0000.0.0000 + 14 dict begin/FontName /Helvetica def + /PaintType 0 def + /Encoding 256 array 0 1 255{1 index exch/.notdef put}for + dup 33 /plus put + dup 34 /hyphen put + readonly def + 42/FontType resourcestatus{pop pop false}{true}ifelse + %APLsfntBegin + {currentfile 0(%APLsfntEnd\n)/SubFileDecode filter flushfile}if + /FontType 42 def + /FontMatrix matrix def + /FontBBox[2048 -1947 1 index div -985 2 index div 2961 3 index div 2297 5 -1 roll div]cvx def + /sfnts [< + 74727565000900000000000063767420000000000000009C0000036C6670676D000000000000040800000A1D676C79660000000000000E2800000144686561640000000000000F6C00000036686865610000000000000FA400000024686D74780000000000000FC8000000106C6F63610000000000000FD80000000A6D6178700000000000000FE400000020707265700000000000001004000003CF05C0001005BD00280580001A042F001F0000FFD90000FFDA0000FFD9FE55FFE605C70010FE6DFFF1033B000000B9000000B902FE3F3C00C0008D009B00AF000600A800C00028005E009800C9016A00B9015C00B400D6011E002E0080000400B8004C00CC01FFFFD1006600A400AF007400C2009500B1000C0028006D0015004C008E0125FF7A000C0040004C00620084FFA200240038008600BD0039005E008E00EDFFA9FFB300400052005500AA00AB00C200CB012302B10413FFAEFFE4000800510074008400AA00D1FF4CFFAF0012002C004200500051008400BE012503DAFF680018003B0098009C009F00A100C100EC018201B4FF68FF76FFD0FFE100020018001C00530053007D01B401E103AF0486FF9CFFEAFFFE001F0028002A00520060009300A300AA00AF00AF00C001000145016B0174019301950240028202B404850517FEFD00060029004700470048006F008800B400B900C400F200F901EF02180310037403C5FF35FFF3000B004B004C0052005500650076007600870087008E00AB00BB0106013001430150017D0194019501D3022A025502580277027802E6034E035C037903D3047304B2058C0598060BFEF5FFBBFFC7FFD50017001D005B0072007E009C00C200D000F400FA01030106011C0125013B0142015E015E0180019B02B901A101B9025001C001D002AA01DF01E301EF01FB0205020C0215022B0274029302AB02C202CE03690395039903DF03F5043E050205A105E5062507DBFE62FE89FECEFF3BFFE1FFF800030008002100390042004E005F0061006F00700034007F008E00AD00AD00AF00BD00C400C500C900C900C900E3011C00ED00F800F901000112011A0132014D014D014E014F01660169019E01BA01BA01BE01E301EF01F602000200020902110217021C02530262026D028002D50280031B032A034A035A03AF03AF03C803D603FB03FB04050413041504470449008C046D049A049A04A604A804B204CF0539053E054E055605800589058C036305D105D6067E068E06B206EF06F00728074C076F078C00B400C900C000C10000000000000000000000000004012400AF0032006E0063014401620096014301A10161008A00740064018801EF01700028FF5D037E0347023000AA00BE007B0062009A007D0089035C00A1FFD803AA00D70093006C0000008000A70442001D0597001D00820030002A + 002A002A002A002A40292A292827262524232221201F1E1D1C1B1A191817161514131211100D0C0B0A090807060504030201002C4523466020B02660B004262348482D2C452346236120B02661B004262348482D2C45234660B0206120B04660B004262348482D2C4523462361B0206020B02661B02061B004262348482D2C45234660B0406120B06660B004262348482D2C4523462361B0406020B02661B04061B004262348482D2C0110203C003C2D2C20452320B0CD442320B8015A51582320B08D44235920B0ED51582320B04D44235920B09051582320B00D44235921212D2C20204518684420B001602045B04676688A4560442D2C01B9400000000A2D2C00B9000040000B2D2C2045B00043617D6818B0004360442D2C45B01A234445B01923442D2C2045B00325456164B050515845441B2121592D2C20B0032552582359212D2C69B04061B0008B0C6423648BB8400062600C642364615C58B0036159B002602D2C45B0112BB0172344B0177AE5182D2C45B0112BB01723442D2C45B0112BB017458CB0172344B0177AE5182D2CB002254661658A46B040608B482D2CB0022546608A46B040618C482D2C4B53205C58B002855958B00185592D2C20B0032545B019236A4445B01A23444565234520B00325606A20B009234223688A6A606120B0005258B21A401A4523614459B0005058B219401945236144592D2CB9187E3B210B2D2CB92D412D410B2D2CB93B21187E0B2D2CB93B21E7830B2D2CB92D41D2C00B2D2CB9187EC4E00B2D2C4B525845441B2121592D2C0120B003252349B04060B0206320B000525823B002253823B002256538008A63381B212121212159012D2C456920B00943B0022660B00325B005254961B0805358B21940194523616844B21A401A4523606A44B209191A45652345604259B00943608A103A2D2C01B005251023208AF500B0016023EDEC2D2C01B005251023208AF500B0016123EDEC2D2C01B0062510F500EDEC2D2C20B001600110203C003C2D2C20B001610110203C003C2D2C764520B003254523616818236860442D2C7645B00325452361682318456860442D2C7645B0032545616823452361442D2C4569B014B0324B505821B0205961442DB8002B2C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB8002C2C2020456944B001602DB8002D2CB8002C2A212DB8002E2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB8002F2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800302C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800312C2020456944B0016020 + 20457D691844B001602DB800322CB800312A2DB800332C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800342C4B535845441B2121592DB800352C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800362C2020456944B001602DB800372CB800362A212DB800382C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800392C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8003A2C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB8003B2C2020456944B001602020457D691844B001602DB8003C2CB8003B2A2DB8003D2C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8003E2C4B535845441B2121592DB8003F2C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800402C2020456944B001602DB800412CB800402A212DB800422C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800432C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800442C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800452C2020456944B001602020457D691844B001602DB800462CB800452A2DB800472C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800482C4B535845441B2121592DB800492C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB8004A2C2020456944B001602DB8004B2CB8004A2A212DB8004C2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB8004D2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8004E2C4B20B0032650585158 + B080441BB04044591B21212045B0C05058B0C0441B2159592DB8004F2C2020456944B001602020457D691844B001602DB800502CB8004F2A2DB800512C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800522C4B535845441B2121592DB800532C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800542C2020456944B001602DB800552CB800542A212DB800562C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800572C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800582C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800592C2020456944B001602020457D691844B001602DB8005A2CB800592A2DB8005B2C4B20B003265358B0401BB000598A8A20B0032653582321B0808A8A1B8A235920B0032653582321B800C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8005C2C4B535845441B2121592D00000000020042000004D005BD000300070043B800532BB800082FB800042FB8000810B80000D0B800002FB8000410B80003DCB8000010B80007DCB8000310B80009DC00BA0007000000562BBA0002000500562B3031331121112711211142048EB8FCE205BDFA43B8044DFBB300000001005C0000046F0415000B0037401C037A050220080B7A0A0A0D17171A067A040920030A7A00190C3F52182B4E10F44DF43CFD3CF44E456544E6003F4DF43CFD3CF431301335211133112115211123115C01B4AB01B4FE4CAB01B6A801B7FE49A8FE4A01B600000001005501DE024B029700030020400A002F03011A0500190405B80142B321BA48182B2B4EE410E6002F4DED3130132115215501F6FE0A0297B900000002002F0000044205930007000B00001335211521112311013521152F0413FE4FB2FE50041303A6A8A8FC5A03A60146A7A7000000010000000000006F400C9E5F0F3CF500110800000000005F4D8F0000000000D383C768F865FC270B9108F9000000090001000000000000000100000629FE2900000C01F865FCED0B910001000000000000000000000000000000040512004204AC005C02AA00550473002F00000036006A008800A2000000010000000400920009006B0007000200100010005D000007E80A1D + 00040001B800532BB800492BB8003F2BB800352BB8002B2B4118008001A6009001A600A001A600030069018B0079018B0089018B0099018B00040089018B0099018B00A9018B00B9018BB2040840BA0179001A014A400B041F5414191F180A0B1FD2B80106B49E1FD918E3BB0119000D00E10119B20D0009410A01A0019F0064001F01A50025017A00480028019AB3296C1F60410A01A9007001A9008001A90003008001A9000101A9B21E321FBE012C00250401001F0126001E0401B61FE7312D1FE531B80201B21FC227B80401B21FC11EB80201400F1FC01D9E1FBF1D671FBE1D671FAB27B80401B21FAA29B80401B61FA91D6C1F931EB8019AB21F921DB80101B21F911DB80101B21F751DB80201B61F6D29961F6431B8019AB21F4C96B802ABB21F391DB80156400B1F3638211F351DE41F2F27B80801400B1F2D1D4C1F2A31CD1F241DB802ABB21F201EB8012540111F1C1D931F3A1D4C1F1E1D45273A1D4527BB01AA019B002A019BB2254A1FBA019B0025017AB349293896B8017BB348283125B8017A403648289629482725294C1F252946272729482756C80784075B07410732072B072807260721071B071408120810080E080C080A08080807B801ACB23F1F06BB01AB003F001F01ABB308060805B801AEB23F1F04BB01AD003F001F01ADB70804080208000814B8FFE0B40000010014B801ABB41000000100B801ABB606100000010006B801ADB300000100B801AD401F04000001000410000001001002000001000200000001000002010802004A00B0018DB806008516763F183F123E113946443E113946443E113946443E113946443E113946443E11394660443E11394660443E11394660442B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B18011DB0964B5358B0AA1D59B0324B5358B0FF1D592B2B2B2B2B2B2B2B182B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B74752B2B2B65422B2B4B5279B376706A66456523456023456560234560B08B766818B080622020B16A704565234520B003266062636820B003266165B070236544B06A234420B176664565234520B003266062636820B003266165B066236544B0762344B10066455458B166406544B27640764523614459B36242725D456523456023456560234560B089766818B080622020B172424565234520B003266062636820B003266165B042236544B072234420B1625D4565234520B003266062636820B003266165B05D236544B0622344B1005D455458B15D406544B262406245236144592B2B2B2B456953427374B8019A2045694B20B02853B049515A58B020615944B801A6204569447500 + 00>] def + /CharStrings 4 dict dup begin + /.notdef 0 def +/plus 1 def +/hyphen 2 def +/u20B8 3 def + end readonly def + currentdict dup/FontName get exch definefont pop end + %APLsfntEnd + 42/FontType resourcestatus{pop pop true}{false}ifelse + {currentfile 0(%APLT1End\n)/SubFileDecode filter flushfile}if + /FontType 1 def + /FontMatrix [ 0.00048828125 0 0 0.00048828125 0 0 ] def + /FontBBox{-1947 -985 2961 2297}def + /UniqueID 4003230 def + currentdict currentfile eexec + 54544758EC884CF30C3CD503CEDBFF3839C47C3C3333173232E3FDBFF439491DB843E1924E63AA7726BBB0485AB56D93D8C0906F647A47162891E73FFC2A9873C4B1EAC5EEBDFFC4D06084FBD84139DF4583C6E259D10699944D1068C9C45667DCCCFB9B7EA01B606435EDCBD273ABAC093D14085CCBAC149BD7382E842CFE0D7FE4FD2EF589A2471F6074A80A8B675C2F7A50D63AC1EF90D787BADD11633CB01CF6EE3B37AAF9078A69AC4740E9B6525D78BBD839551A1CB80DB8682FA5E87591BBD6EE8B946063A2A58D9CA3685AB305495DC5FB5747EB8A9A059C4976C0FE4EEAB1D56FF47F1E9664ED9F4A7DAB763AF92B2F6CF2FA7DEC24710E0B9096E30F772BA7FEA9BDBE496C42ED2CEB58F54E80BDF57CE7B4DB6CCFE7182F43BF93CCA0767AF95D62C5D2C3DC6AE1E6D139F51A2C63432117F1714C5566572EE9967A715420ABDCD1D7BD74F8450B89965FCC81C6ACA565C5F3CCF91D430D1F953E4F1A645300A98DD8C47CD64555F08F422340A85404EAE0D3229C4F9336B9470CACBD6BBF3395104750A915CC6EAAC197668267B8C62D2764C8CD69FD937CA3C924D997A0EDE7964BEB9EA2F92EF70C5E5DA0AA5567765E71F2B911B3C5586B741EEB93F3C73016EC16BFF283758900903D203992EFC8BAFAF13579C602F38C94CF017316529A80F552C33559AB2C21302561FE61E935C1E32B3C98FAD5EE6DEF8E2A946709BA3E02871DE2815743DB8E498E69E94CB8A7501EED33553FB0969440DDC44F6C8FF2DBE00656FA8545D720AB78CDD5DB83A2D48C3AC50A9ED0D3E79BC5471543F4EF7C36C12B084DCB46BC762F868B0B759F7F6DBC0D5B99255F32D5A1F7736BE59D217748965B1B556B5A218F7ECAD06F4230A7066D5E8D3E06A2BF100EE8B8BF6152435EE06CC80B45FEF4DCBA805397DE4BC87C8D634429E1EAB5D0269333C17D07D7EAFF1C8FFBEA1546BA7F8B489E6FA8719199544F038020056D318A071F0BBFECD8787692C98C7F7E8AD77C3E2CFE18EAC5B06FB853566E4209160A48D7573D71172479F9A9AD5F83BA511CB4EAD802784B9C2463E5FE36CC25DDD76078B30CBC9F24E2823C48CD79FDD3E25E0F69BC66A2AF567AB7897310D5C6B49802630366AA88837988D1254F6A6B8F626AB7DD9C5EEE146CE944C139BB16EAF8F37CBC4D6CFE07C05959C4C6BB96 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + cleartomark end + %APLT1End + %RBIEndFontSubset +/Helvetica cguidfix +/F1.1/Helvetica renmfont +%RBIBeginFontSubset: Times-Italic +%!FontType1-1.0: Times-Italic 1.0000.0.0000 + 14 dict begin/FontName /Times-Italic def + /PaintType 0 def + /Encoding 256 array 0 1 255{1 index exch/.notdef put}for + dup 33 /r put + dup 34 /u put + dup 35 /n put + dup 36 /parenleft put + dup 37 /parenright put + dup 38 /R put + dup 39 /a put + dup 40 /b put + dup 41 /l put + dup 42 /e put + readonly def + 42/FontType resourcestatus{pop pop false}{true}ifelse + %APLsfntBegin + {currentfile 0(%APLsfntEnd\n)/SubFileDecode filter flushfile}if + /FontType 42 def + /FontMatrix matrix def + /FontBBox[2048 -606 1 index div -845 2 index div 3401 3 index div 2468 5 -1 roll div]cvx def + /sfnts [< + 74727565000900000000000063767420000000000000009C000005446670676D00000000000005E0000007D6676C79660000000000000DB800000E98686561640000000000001C5000000036686865610000000000001C8800000024686D74780000000000001CAC000000386C6F63610000000000001CE40000001E6D6178700000000000001D0400000020707265700000000000001D2400000766057400000538001A05550013036D001A0000FFDA0000FFE80000FFF1FE5AFFFE0534002DFEAAFFE1031C000000A0000000A00000000000000000002100AA009400C20078007D0021008200B80028002A0046000300A8004D005900E4014000300002009B0087009400F600180047006B01E0001A00AB006800CE0003002500450097001600470064007600B800260043008700B500DC0037005B007900B100C900D60021002C0052005500C402ADFFD20031009800D001B70403FF90001A002E0036006D0084008EFFAC002D003D00470080008601230173FFED005D005D006D0082009100A200D4FFD2FFDA0007000A0028002A003C003D0051008700B10109011E014001850006000E00100025003000500055005600A200B401080247FF72FFDA0013003400400041004800580068007B008C009A00B100C300DA015E027403ADFF44FFBDFFCF0000002400250026002D0039004A004F007200740087009700B600B900F90156020EFF24FFA1FFB9FFC7FFEF000000020005001D001F0024003D004B0058005D0067008E009A00B800C900D800DA00DA00E400E6010C013B014101500185019801C701D30245032D038703B20410051FFFF8001C00210027002A002A00300037003B0055005C005F00610072008D00A400AD00B100EA00F6011801240134014401A1021D02290266026F02C402EF0403048B04E4FFEA00000002000200030007002E00350039003E004C004C0055006D0077008A008E0090009300940096009A00A800C000CB00DC00DF00ED00F900FC0105010701080128012F01340149019801D801DE020E02160223024202DF032B033E036F04D104E40545FE8EFEF2FF58FF59FF71FFBBFFC7FFDE0007001D001F002D0039005B005E005F0064006700760079007E008000800080008300830088009F00A600A900AA00AF00BE00C000C800CB00CE00D200DD00DF00EB00EC00ED00ED00F400F800FC00FD0108010C011001100115011C011C0125012D013B013E0140015001510176017E018001830184018E0198019D01B401BB01CA01D302470258025D027D028802BC02D102D302DC02E802EC02F70309031D0321038703C90447045A04AC050E055F057B058005AF0636FDF4FE37FE57FE5EFE76FECDFF07FF0EFF2AFF76FF7DFF9EFFB8FFB9FFF0000000020008000F00170023002A002B004B004C004E004E00500051 + 005D006200630066006B0072007800960097009A009B009F00A900AC00AD00B700C300CA00CE00D100DA00DD00E600ED00F700FB00FD00FE01000104010501190123012A0132014001470151015401550158015C015E015F016601680171017A017B0180018B018B018E0191019801A101AF01B101C301EA01F401F602000205020C02110220022C024202470255025502610266026D027B028702920295029A029F02A602A702B002B402CB02D102EE02FE030B030E0325033703370345034C034E03610371038E03A303A603AB03CC03D003ED03FC03FD03FD04340439044F047B049404C204DA04DA04F00511052F053805550564056B056E058A059505AD05B205DD05FB063606B00723075207820788079707AD009E00C6009900A200000000000000000000000000BD001500000000000000000000000000000000000000000000000000000000000000000000000000000000009B00AE02CD024500E000EB017B0183023800C9003101AE0050045A00C400E4011C02FA029601CA0079004B006301AF001605740002054B001D054B0018039700130000FFE30000FFED0000FFEAFE420000054B001DFEBDFFD6031E0000006AFFD60580004C008A007B0012005500CD00E80409014E0028005F0334001F006400820030002A002A002A403231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A090807060504030201002C4523466020B02660B004262348482D2C452346236120B02661B004262348482D2C45234660B0206120B04660B004262348482D2C4523462361B0206020B02661B02061B004262348482D2C45234660B0406120B06660B004262348482D2C4523462361B0406020B02661B04061B004262348482D2C0110203C003C2D2C20452320B0CD442320B8015A51582320B08D44235920B0ED51582320B04D44235920B0042651582320B00D44235921212D2C20204518684420B001602045B04676688A4560442D2C01B93DADEEEB0A2D2C00B911163DAD0B2D2C2045B00043617D6818B0004360442D2C45B01A234445B01923442D2C2045B00325456164B050515845441B2121592D2CB00143632362B0002342B00F2B2D2C2045B0004360442D2C01B00743B006430A2D2C2069B04061B0008B20B12CC08A8CB8100062602B0C642364615C58B00361592D2C45B0112BB0172344B0177AE4182D2C45B0112BB01723442D2C45B0112BB017458CB0172344B0177AE5182D2CB002254661658A46B040608B482D2CB0022546608A46B040618C482D2C4B53205C58B002855958B00185592D2C20B0032545B019234445B01A23444565234520B00325606A20B009234223688A6A606120B01A8AB000527921B21A1A40B9FFE0001A45208A54582321B03F1B235961441CB114008A + 5279B31940201945208A54582321B03F1B235961442D2CB9187E3B210B2D2CB92D412D410B2D2CB93B21187E0B2D2CB93B21E7830B2D2CB92D41D2C00B2D2CB9187EC4E00B2D2C4B525845441B2121592D2C0120B003252349B04060B0206320B000525823B002253823B002256538008A63381B212121212159012D2C4569B00943608A103A2D2C01B005251023208AF500B0016023EDEC2D2C01B005251023208AF500B0016123EDEC2D2C01B0062510F500EDEC2D2C20B001600110203C003C2D2C20B001610110203C003C2D2CB02B2BB02A2A2D2C00B0064365B007430B2D2C3EB02A2A2D2C352D2C76B01B23701020B01B4520B0005058B00161593A2F182D2C21210C6423648BB84000622D2C21B08051580C6423648BB82000621BB200402F2B59B002602D2C21B0C051580C6423648BB81555621BB200802F2B59B002602D2C0C6423648BB84000626023212D2CB4000100000015B00826B00826B00826B008260F10161345683AB001162D2CB4000100000015B00826B00826B00826B008260F1016134568653AB001162DB800322C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800332C2020456944B001602DB800342CB800332A212DB800352C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800362C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800372C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800382C2020456944B001602020457D691844B001602DB800392CB800382A2DB8003A2C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8003B2C4B535845441B2121592DB8003C2C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB8003D2C2020456944B001602DB8003E2CB8003D2A212DB8003F2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800402C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800412C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800422C2020456944B001602020457D691844B001602DB800432CB800422A2DB800442C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0 + 032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800452C4B535845441B2121592DB800462C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800472C2020456944B001602DB800482CB800472A212DB800492C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB8004A2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8004B2C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB8004C2C2020456944B001602020457D691844B001602DB8004D2CB8004C2A2DB8004E2C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8004F2C4B535845441B2121592D00000002FFED0000062305380003000700424009040745000506450201B8022A40130303000A0607450100190802034505045909FEB9016C00182B10F43CFD3C4E10F43C4DFD3C003F3C10FD3CFD3C10FD3C31302311211127112111130636B8FB3A0538FAC8B803C8FC3800000000010055FE8B0284055A00120036400A040B1F0A0212110B1300B8017640140AC39F07AF070207242F0E3F0E020E19138875182B4E10F45D4DFD5DE4E4003F3F3130015D0106070607060215141617072602353437120102845F38653F382E253C236B615179014B053B645596C8B2FEBD6BA8D7AE0CB60173B8F4BC0119012500010021FE900250055E00120034400C0A0B1309120A0312130B1100B80176400C0AC39007A0070207240E8914BA01F6019600182B10F6FD5DE4E4003F3F3130015D133637363736123534022737161215140702012168375E3D35323B29265F6D4379FEA7FEAF705290C5A8013E91B1010E560C9AFE7FC5DFADFEC6FED800000002FFE3000004B40538000C003400F340834A0346195D036D03B52FC61FC42FE71F08061C761C020C2A2B2C2C0B34110D1D341912181D192723261D27332C321D33112C29340B12080C280C2A291222232320122828290B2C2C2012111112232934222A0C7602472A842929271908281A1A1902343328270829282203352305501E3611352812102E118311D311031111350A36352FCC2B103C012F5D2B3C2B10C00110D6FD39111739003F3C3C3C3F3C10ED1112392FF4FDE61239111239870E2E2B7D10C4870E2E182B7D10C401111239392B1112393911123939 + 180010ED0110C00010ED0110C00010ED0110C00010ED0110C087100E3C057DC43C3130005D015D001633323635342623220607030136373637133E013534262735213217161514070607131E01171521032703060706151416171521023720139BD79273292E0A85FDF2481B2A1BFC080F444C01FB9261B8A0579CBD1C4847FED1FC847507060A424AFE0902E6038FAA815C1423FE2BFD3406141E5F038A1B491B2F2304212445BAB2623522FE0A4A46032102970AFE551B18311B2F240321000002001FFFE903CE038B000D004500CE40860A0445445B3F683F79047629762F77448904872D8644A8430C0C330E340C351A331A341A351B442942384254206620A61EA620B933B834B835C833C834C835130B21373720120C040902030C37121237371F1220201A17183002274507402D212E462537313009433E0B402D212E492E471A063A41462046281A1042207220022020470A47462FCC2B103C012F5D2B3C2B10C00110D6ED111239762F3D1ACC181A003FEDF4ED76DC3D1ACC1A183FEDF4C4870E2E2B7D10C40111123917001112173901101AC83130015D005D00262322070615141633323736352617161F01373E013F013216070E0107030607061514163332363F013E013F01170E01232226353436370E0107060706232226353437363302EA422FA38C7B4533978C802E2B170D051604060B710903020404045C1E15250F0B09150F1108140E3E18687E3925291B0D12553E494334305184BCC2D0031A44FADC9F5049F3DDB2B92916240E4C0D09010D07090D0F0EFE9A75559A160E0D0C0C0E07130E4015855F342724872E1E7336411B12857AD2E4ED000000020028FFE803C9057B00240032009C4024472F562F672F7826742F89248A258826A91EA826B91E0B072635264726032F15240A7000B8011340352809230A4B0F15242B3214000F19282D2B321415151F122424000F002B4319073227200B283A1C24332804000100102424330A34332FCC2B103C012F2B3C5D2B10C001D6ED003FED3FED3F870E2E2B7D10C4001112392B1112393911123939180010F5ED2BFC01F51112393130005D015D013E01353426272E0127353E01373E013332161507033637363332161514070623222726370437363534262322030615141633015A06050D18072137204B40076B17050902C75A3F6E756E85D9D3E26756560701C79A8B523E9F917E323604AF16230C0D19070202032305080A011808080DFD0C803A65916BF9D9D32E2D1B47E6CFAC4E5DFEE4F7A3272F0000020040FFE7034B0387001C0029008040516B007A000206070614171466147614871489259714C404D604E504F3040C0504014029210A0A22102227030740142115471043190B290D3A1C472A401421151F330006200640066006CF06EF0606062B2A2FDCD65DED + D41A3DCC1A181076D618FDC0003FED76DC1A3DC8181A3FED1112392F1A3DC8181A313000715D015D1237363332161514040F010E01151416333237363717060706232226352436353426232206070607060740C8C6D34E5CFEAFBA390D0A734F4B54305B1A2D5495966AA00194F02423417D32351F111301E7D0D0484790CD17072931255862321D4B17393C6B968CBDD569262D6F46524B2833000000010055FFEA023B05740025008840480618012523230007700068280623074B0C230F0E00042818190C154018211949190F270023231F120F0F0E0C0015431D0B0F26280E10100F01420F600F700F800F040F0F260A27262FCC2B103C012F5D712B3C2B10C0003FED3F870E2E2B7D10C401111239762F3D1ACC181A00111239392B1739180010F5ED2BFC01F587100E7DC43130005D013E0135342607353E013736373217010E0115141633323637170607062322272635343736370174040237522D751238500707FEC50B040E132474281B56305354241C2B08050804BD0D1A08220F01210610030A140AFB4E2B1209131B803C137F3153121B41192A192100010025FFEA03D503890040011140A805271E3F2827253A391436296A3D9927A927B927C927C63BD927D339D63B0F043D043E271C363C353D473F590B563D771E871293150B0B3609371801163D044027202847281D2C0B013D21120B6F0A230B4B0F33321E1D011206392411390F28402721284928421E3332321F121E1D1E3F111240401F120000013937160F074028000A24432C0B441D641D841D031D241E441E621E841E041E47421D1E101E1E420A0110004248412F76CC182F2B3C2B00103C017D2F182B10C4100576C85DC85D18003FED3F2B3C003F3CED87052E2B0E7D10C4C4C4870E2E182B7D10C401111239762F1A3DCC181A2B11123911121739180010F5ED01F5101AC810CC00111239762F3D1ACC181A303101715D005D33133E0135342623220607353E013F011617033637363332171615140607030E01151416333236371706070623222635343637133E0135342623220706070E010725AD160721300C170E413720B30602857A5290722C203D0A0883040A0E101A444D1D5230524B223F05047E0A07171D4B724345353D42026A4E21131D210302220A0A07270405FE52BB5BA111215618341EFE210F2B090F183D641A6F2D4F2D3B11260E01E628330B182388517057A5D90001003400000323038E002D009B404EC52901500F0104050507061B1D1D02296F1FEF282823294B2C1F0F1E02091628051E14160F051F14152F021D1D1F121E1E1F2C070F163309071E281D0A0C462F061F011F10761E881E021E472F2E2FCC762F5D182B3C5D011076D618003F2B3C003FEDCC3F87052E2B0E7D10C40111393911390011123912392B111239111239180010F5 + ED2BFC01F587100E7DC4C4083C0EC43130005D015D001615060703373E013332161514062322262F012E01232206070607060723133E013534262322060735373E013301AA070101641648C1572F33332D1F20090C040B0827933A232B1B2D9AA60E111E250C2419284EB905038E0B070A05FE7D2B8DE93E282D3B1810160607DA7F4D7F5093025A34521A1E200403210810240000010055FFE903CB038C004400F94092501601023B1A311A32251D25312532351D540657185638583A641D6437951D96360F402A202B482B461D3738383A39393A35351B076F0068280623074B0A4044351D0E041B2822242F143938222104351D0D0E0E1F124444001B35351F121D1D1C0A071C281B0614372F303D0B44451D46280010464456449444C444E444054444450A1C10421D541DCB1D031D1D460A46452FCC2B103C012F5D2B3C2B103C017D2F5D182B3C2B10C010C018003FE4ED3F2B3C003F870E2E2B057D10C4870E2E182B7D10C4011112173900111239392B1217391A180010F5ED2BFC01F58710087DC408C40EC401111039762F1A19CC181A3130015D005D133E0135342623353F0136160F01030E01151416333236373637363733030E0115141633323637363736371706070623222635343637363F01230607062322272635343637EA02033346939F05080103B107061A153BB1453E34203C97BD05080C0F0F20180B1D12251C2E3263552C380A0B121C16078A4F897A211B34040502D20A11092B131C1D1E010A050EFD58191C06171AD271657C4DA8FD3B14220B0D1317180B24162D134C376F30331A3E27466955E55FA30E1C48151A1700000100920442031204AA0003001B400C000104020305012C005A71182B002FFD0111333312393931301337210792180268170442686800000002001EFFE804A10576000D004B00CA406B26262529282A34213535492A28124625152A2440342135112A09021524224B2841353404040902410406110415402F352A3534024D11121540401F122A2A241F23204B22000927104B204B304B034B0730373A024344303A0B0D3A472A4C282425282904102A2A4C0A4D4C2FCC2B103C012F2B173C2B10C001D6ED003FF4ED10ED3F5DED3FF5ED870E2E2B7D10C4C4C418011117391112391112173900111217392B11123939111239392F1A3DCC1A1802082F3C76DD3C011076C92F181A3DCC11123910CC2F313036163332373635342623220706150017161713213721373E0135342623220607353637170F013307230B010E011514163332373637170706070623222726353436370E012322263534373633D038438F847C283D988E7F01E921130B4DFEDC18012A0705031D1B111D1871C8090235A217A76F8304051B0A1D351F36170E253A67521B16290C0C4CB56B5782C8C7BDAB5BE6D8C13D50 + F6DCA202A32616350115681D111B0A27140202210F250A0BCA68FE63FE24101B0B1B10331F4116153739650C183E155C3674947C81DAE6E5FFFFFFDDFF1B04A105760226000C00000007000BFF4BFAD90001000000000000F9BF08E25F0F3CF50111080000000000A252B00000000000D03CCEB0FDA2FCB30D4909A4000200090001000000000000000100000600FE0000000CE1FDA2FDA20D4908000225000000000000000000000000000E04E3FFED02AA005502AA002104E3FFE30400001F04000028038D00400239005504000025031D00340400005502AA00920400001E0400FFDE00000036007600B60184025402F0037203F204DA056E0650066C0740074C000000010000000E0087000600C000080002001000100050000007E807D600040001B800462BB8003C2BB800322BBC029C010C003C001F0295B250391FB80294402B50391F90069007029D49AD4902AD72AD8B029D729D8B02AD1FAD3A029D1F9D3A02AD20AD50029D209D5002B80290B33A341F15B8028BB2471F14B8028AB2471F13B80289B2471F12B80288B2471F11B80287B2471F10B80286B2471F0FB80285B2471F0EB80284B2471F0DB80283B2471F0CB80282B2471F0BB80281B2471F0AB80280B2471F09B8027FB2471F08B8027EB2471F07B8027DB2471F06B8027CB2471F05B8027BB2471F04B8027AB2471F03B80279B2471F02B80278B2471F01B80277B2471F00B80276400F471F000101010009010200080008404114023D016E0070000D016A0070000D015B0070000D01530070000D01140070000D01100070000D0104B4700D6F700D410A01CF0068000D01C70068000D01630068000D0113400E680DEF680DE4680DC7680DC5680DBE0168004D000D011D004D000D010540144D0DCD4D0DB04D0D8A4D0D3C4D0D324D0D2A4D0D410A01F2004A000D01E4004A000D0121004A000D011E40174A0DF64A0DD54A0DD14A0DAD4A0D634A0D344A0D254A0DB801D74011850DDD850DA9850D26850D23850D1D850DB801AEB40F4B0F0009BB01AE004B000D01D0B2502C1FBC01C300200101001F01C1B220BB1F411901C0003A0401001F01BE003A0401001F01B9001F0401001F01B600430125001F01AF00540125001F01AB00270801001F0160B250351FB8015EB2503D1FB8015CB2505A1FB8015AB2505E1FB80159B250621FBC015700500125001F0154B220E41F4111015200200401001F014E003A0401001F014D008B0201001F014C008B02AB001F0148B21F671FB80144B243621F4109014100430401001F013E00540156001F011CB2502C1F410D011500200401001F0111001F0401001F010E001F0156001F010DB41FCD1FED3AB80156B21FEA1FB80125B21FE554B80401B21FDF27B802AB400B1FDE27E41FCC50931FCB50B80201B21FC254B802ABB21F + BF27B80156B61FAE1F9E1FA827B802ABB21FA527B80156B21F9D50B80201B21F9C20B80801B21F9654B802ABB21F9528B80401B21F9428B8019AB61F9227CD1F7E3AB80156400B1F7D1F9E1F7A28CD1F6E43B80125B21F6D43B80125B21F6728B80801400B1F6628E41F621F811F5227B80401B21F4F20B80125B21F4C54B80156B61F493ACD1F4728B802ABB21F4627B80201B61F4520CD1F4228B80801B21F401FB802ABB21F3F28B80801B21F3743B80125B21F3628B80801B21F331FB80401B21F318BB80125B21F2F27B80156B61F2D50931F2C54B80201B21F2B28B80125400F1F241F721F2143671F551F091F0990BB018300070090017E403907909F07908007907307906B07906A07905607904807903807902E07902207901E071408120810080E080C080A080808060804080208000814B8FFE0402A00000100140610000001000604000001000410000001001002000001000200000001000002010802004A4118028A00080288000802860008028400080282000802800008027E0008027C0008027A00080278000802760008028AFFE0B300000100B9028A027CB41000000100B9027C027AB300000100B9027A0286B300000100B902860278B300000100B902780276B300000100B80276B302010802B80276B24A0000B801FF85B0018DB0068858B001B0018E1BB000B0018E59181616763F183F123E113946443E113946443E113946443E113946443E11394660443E11394660442B2B2B2B2B2B2B2B2B2B2B18763F183F123E113946443E113946443E113946443E113946443E11394660443E11394660442B2B2B2B2B2B2B2B2B2B2B182B2B2B2B2B2B2B2B2B2B2B2B2B014B5079BF001F01EE0007001F01BF0007001F01B1B6071FCE071FAC072B2B2B2B2B4B5379BF009001EE0007009001BF0007009001B1B60790CE0790AC072B2B2B2B2B181DB0964B5358B0AA1D59B0324B5358B0FF1D594BB02E53205C58B9023F023D4544B9023E023D45445958B900DE023F455258B9023F00DE4459594BB05A53205C58B9001F023F4544B9003A023F45445958B901AA001F455258B9001F01AA4459594BB06353205C58B90020023E4544B90050023E45445958B902770020455258B9002002774459594BB0E453205C58B1723A4544B13A3A45445958B904BD0072455258B9007204BD4459594BB0E453205C58B18B3A4544B13A3A45445958B904BD008B455258B9008B04BD4459594BB01B53205C58B127274544B1432745445958B12227455258B127224459594BB02453205C58B127274544B1542745445958B12E27455258B1272E4459594BB03753205C58B127274544B1282745445958B14727455258B127474459592B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B + 2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B65422B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B4569534216003F3F182B103C012F070CB0062342B00723422B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B73737373737373732B2B2B0000 + 00>] def + /CharStrings 14 dict dup begin + /.notdef 0 def +/parenleft 1 def +/parenright 2 def +/R 3 def +/a 4 def +/b 5 def +/e 6 def +/l 7 def +/n 8 def +/r 9 def +/u 10 def +/macron 11 def +/dcroat 12 def +/dong 13 def + end readonly def + currentdict dup/FontName get exch definefont pop end + %APLsfntEnd + 42/FontType resourcestatus{pop pop true}{false}ifelse + {currentfile 0(%APLT1End\n)/SubFileDecode filter flushfile}if + /FontType 1 def + /FontMatrix [ 0.00048828125 0 0 0.00048828125 0 0 ] def + /FontBBox{-606 -845 3401 2468}def + /UniqueID 4461026 def + currentdict currentfile eexec + 54544758EC884CF30C3CD503CEDBFF3839C47C3C3333173232E3FDBFF439491DB843E1924E63AA7726BBB0485AB56D93D8C0906F647A47162891E73FFC2A9873C4B1EAC5EEBDFFC4D06084FBD84139DF4583C6E259D10699944D1068C9C45667DCCCFB9B7EA01B606435EDCBD273ABAC093D14085CCBAC149BD7382E842CFE0D7FE4FD2EF589A2471F6074A80A8B675C2F7A50D63AC1EF90D787BADD11633CB01CF6EE3B37AAF9078A69AC4740E9B6525D78BBD839551A1CB80DB8682FA5E87591BBD6EE8B946063A2A58D9CA3685AB305495DC5FB5747EB8A9A059C4976C0FE4EEAB1D56FF47F1E9664ED9F4A7DAB763AF92B2F6CF2FA7DEC24710E0B9096E30F772BA7FEA9BDBE496C42ED2CEB58F54E80BDF57CE7B4DB6CCFE7182F43BF93CCA0767AF95D62C5D2C3DC6AE1E6D139F51A2C63432117F1714C5566572EE9967A715420ABDCD1D7BD74F8450B89965FCC81C6ACA565C5F3CCF91D430D1F953E4F1A645300A98DD8C47CD64555F08F422340A85404EAE0D3229C4F9336B9470CACBD6BBF3395104750A915CC6EAAC197668267B8C62D2764C8CD69FD937CA3C924D997A0EDE7964BEB9EA2F92EF70C5E5DA0AA5567765E71F2B911B3C55AC8266BDD340E521355EEF85826934F311A01D47A37EC44804573682C74DB681BB4C04B20580D7EA90A1C3058C274014E60DEF828F7E43458A43BBCAF743C12FFE9B891B63B3979ED15E5473BE8F5CB67D3AF90B957F81D6455C0DD949A0290134C026E78F1443F95ACEC6A68E9B82012859AC6D51FF2DD241D5CC2C8B4D127793D12E5165B69A980CB42D1EB6AAC4545066357A015AF3980DE7B7E4AB474CFE3E8B56F29D6D496B41DDC8A8445295BD55EED8DF04373DDAD27D0539AE29ABC5B7205CEC20CE1F3F8DECCD7CBBC49B3C0E79804C92AADEF6A1CC6EE74FF7159413E61309D68D90F2B81C09D5D6BFA3E6C8A2FCA49D8F7D3EA11281F7DDCE1CBC42E141A2A9854E06620966F103DC679A545CF27277AA27EB413091F5D28B17348317B95452DCA743F1C0A1899D49D26C7BFE6A86ACB5204D4B2AE2923A864BC4FB687F0B640BA61B6FFA9CB8D71F3C3B21DF54773356E91F962F93016D7A41208E9196B1956A7CE299286DC6F99262C02F83AB9D39036CFF2095A4C75B192A1E631C72899E5F13AC4644DDFCADA79A60DECA75AD41834059A0BD816FBA549103770AE88D0233FEF81D1DC07C61435CAFE8F0AA82930D4FD0CD15B03DB5A4BCCE24D4245ACA9D15BE0C4EF82B2A8BF6B06EF1E142DD63A32D94192E9301B539BD1098C7ECBCC2B23E3C5D9A0DDC07DB45BCA38E7471A78818F0291886D7CFEEE3EC3C67E9872261588BF05A290AE09E90CCB0A4DE92F58C7E4D8165DAC7D343A6B8D558AF9C53ECCA7CBE88C49C40CFCF4113CE4A7738F71AFA0A721189264CDF5DF7B + 0F1A8ABFA8D8036943AB0789F80B528BF8F70D9F46F4F5A7DE18D41796467B0B81928AF279815B5CE0C9C38910D6BAF510B519344B07234A25BCA525865BABEFB3179A33771EC465BD97EA1D1435271A984BA0E4F0CEA192CBDA8A430AEDE41256C26A94AA4847F9A2A82107F54E126D8FF75970BB97141E72FD319D61790A589EFAA99739B1FB4ACC9A51FDC66F373935707D5CC1C1461661E34B594971AB87131AB6E026F1D558C08F51203FFC55F64EC0996019069F658A31188F49E52695EC2B0D676E7EAEE3C3BE7C3A950A8F3D46B8B0FD5AFF9B907FB1086287A32E64B679BE0D2AFDB0142DFE4C3AC04141A02E401E082B2D330018063D06844D5870D79E2E7F97E3A824C74C917741B7D44CAE7BB8F6CC3267B54C1A27CA22C224D4B056CD473077BFF5450C74CD7FC9F5CD2198837758A5DB43A8EE64F020B6A073FDEC8C832D527CFA44B8FDBEADA99018F4DE4342CDF83010EE337CDE372FBE768AF01EA8BFAFD13395297A9ED4B36DC3580E985A68B6FEB721ED3B79C26DD5D812CC652393112A7D3F9D95589AECEE70A87CFEBA865BB44CD7EF31ECA037507C3A986A375819D8DA80401AD099452235A4F0F6DC4943FEF93602E963C7D281CBF7CD14CFD8018BFC78258154EC7DD33114EF46DA94D74F2F5D48F6DEFEC362BC6F2E4571241684A2688FE57A98A95D403CC19658F7E825CDD98AE118259D67FFC7AFC9B870968B3099A4F6EAF1BD14B93888C914CE469CC1A88DAEDC16CDF8EADB785411EAA4FC51ADCBFCC2506950516D0F599E546D2729563F19415EC2266DAE0AD769A0A63F4A4CB86B725228385D7F51B6049B39C94C68E8905614D115C5739BEED25343C5E099C778ED16FEF34F39F057F43C8931DF0BED40ACF6A6E7398529FEC223349B439BD97C86E90AA15F656BFCDCFF645CFB0998FD763799D1DA86DB18C2F4738BFE1E1F3C25379A0720482C704CB0EED96773167B9D098D5B7BC347CA9BA7265BCD72EE2EBD39C12BF8A68BACC78AD1C4937407CC7A2D8182AC56A096475369927DE6CD35CD5E2AF3D5CDA6D23D41014CB395BDEF0D936BF76E472DC64CCCFDD36A990E7590ED562910AF3A1F3F11D736C1D6092FA96A4BC7C284C8F6EC0DED92A787B3E3A2192AEE1EDF51BB0FC07234FE081B7FC2B082AA5AF5AA898B23BA5B88B3EAB527DF1A818C3AC3C07C885BBB2BAB0F5240B67EB4EB49814A0AADA7C0A4CB387432BA9E3F5908FEDFB64B31917BFEF62E7CBA69F1C9FE5E8B922A383E0A97C00A424465E78C325AD2510939D218FB6878CE00460728C7E1ABF496F46D6D014B0E86D7E79C249111D30B34E9DA0C457236FEAF1E519DDC57C0FA53DC5343FA2083AD8C82A0CD584EECDAE15EF490D81CF9E9C48E29C3427642D1FA2D8F937CCE57BB2B5E89F021BB7A1D5A8F3E857DFF4981E49007B1 + 6A5FAB9A7E923BF143095631141123F4CE352DD802782A5C2D89C1F781CEFD1C50E9D426E53B55717A39CB4F817EEA1688498E4D04EE3ADBD66D5E9E067205C88D96A25AB8E392AB6EA8140947B21F4907830F5C6CBDC1A1AF0C5117140E6BF666F34C4B3160E4870A429B1ABA725CDD06CBB04E0E5372B209B269897A60CB24EC7E45FA94C08A2274C5995895AE1396A76B80952EC8126331FE57AC340B03D235DEFE31728331A389E9AC390286A6CCC30B96C6B1B9FB72F5B9EAFD6C5147348BFA6A35A182592941DB025D4A1144D9FF0FF18B77D0BBA44674CCF32161E7AAB75C347315E9EB1E5C07B6D4B9814B5A9BE1D9B5BE06A67AEAE3F9E6D60A33530AC94C4C0F6C4244062039B6B5BBCCB0BE3A09647ADDF398B022FCB86A862B98DDAA5B7C18FA8F25D9297D62AAC8B47BFBF5E937EF562CFDD111005FCE1E62539740DEE08EDB7D0A50D7157D2EBC998E6EC35D56E3F1A2356A6E5BCD88A1016C56B4E10CEB5D47272D17D96F3ECED4497B83934F987AB8A5CDE7A6212911EB0861160B403752A095CA5EA63E54F15159C55586A02C73BEEBC2CC1FCE1A9282B48DA0919BB9FE5381992675CC0EBB317256D18920336BA5F56F9EC13C85B2848A1FF77485CADD24694778771D14B1FACC11F233C42A1DCFEAA2EF781DC07C0078BD384E50E01C2998CC7FDC474D63154838C2168C25ED74FD78D526A7285057759D0153917674E5FB2861F6F1287E37EDFC725553D53208ECB7B1EFE7476876F12CDAF13CCFCE6F7F1994C8B81DF67838722EC844CA5116306C39B965689A92A1D3825EF37EC2FDBBB412129DD6754CBD7021E3F5D5FD090E3A5CDBE87364853D3B96263441261B4824A8F0B723ED5C6C097B7A2697D63A1EEFD497F23AEDD6658BBA1FE2BF2765F0ECE79DC25D7B0472B81925E6DC840C508CBDD34678E41DD3FD7B8BB6FAF18F8FBE82F1039E424BC906FA95374EB97721831E9DA0E1B306F2312A3BC700DCEFCD3391A65CAED4C445AA3A87325EACE0CDBCA3080894B3246543FD3390B067CE3C6EE9A687CE4DE359D8ABFACE07ADE1AA4BD39021EA5E702AE90B049B19998C487B645FEC8B245BC179CBD2AD16E73ADD214BFF48A4AA53A13F99ED7BE6CE4F1F2991B0C29EB6D5C354732CA63A1DBDD5A733032B6AD417048E6B52A5F914E2357852F8607D96DBEBEA3BC7BDD2419A2BFE02E414B12830E388C8468535F5400393DD5E0D2930451CABD7243AFBAE72C2A32EE5022DD7424E4559F1DCE9658ACBAD52F4518BA5FBC71D600C0137E4AF9268BF5FE591A2E188C979BD400DDCC8230097AB3D7CCCAAE34F18AD780B00B1FC680DF3987B1662BA3CCFF61347F5FC03F09C263426F81ECEBB640E4D663E4286F17EF7542984746DE03A194F4151E8B4EEF1D49D51EAB6902EB9A5CB7DC1788440AB2D6C649DF77B + C6C13BE03863876DAC9576706E2EAED7FABFC29BC5FACF7B2B1418E71AF52963FD0A9328E0DD44F91B0A7D3B4916D538AD7D1582993628B65BE34D9DDECF77D29301BA3294E507FC8E5974791B96CAE48EE60AA9A8942A3B3DC166004ABBDF9FDF4896F96A4930812AB770D0048F42844FB8AFD293263B6FD7E2D042E0B9628ECA5C9E5059C5E6DBEAF97D6B1FF9D7726BDA419636E5D63282A14C606355EE2B05A74E37CB475D770D0C68484FD7C399257E5CED0DF5B8C3677616A5FD3F4EED2E58AE0AA89E16D382C111584DA6EC86A4312AD4034FDB2BFEAB2FB45A5739C6DB2AABEB6C8E314AF60B098B4DBE3AE9FE6C03197BE6A02773095B2E0BD0E426B86C1DCE8AFAE10507943F857270FECB578C9DC698CC58F9B5302A18797FBD0B5D69B3A9B3FEE9A6358C8259A27813B5CCDD87F2994840CA0D2D418167210C6179F90598958CD6416FBB40283601DF19D4C7BDE1F1053CAEEB61EC00B51660EFB9FA6547140880281A9F87B796EC537E2B93DD4FE6B0EFFF58EE7B2F65C3F4CDAD20EF296B52FC36B2FF05C0ADE173780CD82360620386325CD537A537F8F3FC6F9D6E2D72EA4A733981FC11067ED2C4BE03CAACF73C1C31CF2E72B6DC7072CDFD448B02565FB873B4 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + cleartomark end + %APLT1End + %RBIEndFontSubset +/Times-Italic cguidfix +/F2.1/Times-Italic renmfont +%RBIBeginFontSubset: Times-Roman +%!FontType1-1.0: Times-Roman 1.0000.0.0000 + 14 dict begin/FontName /Times-Roman def + /PaintType 0 def + /Encoding 256 array 0 1 255{1 index exch/.notdef put}for + dup 33 /guillemotleft put + dup 34 /i put + dup 35 /n put + dup 36 /t put + dup 37 /e put + dup 38 /r put + dup 39 /f put + dup 40 /a put + dup 41 /c put + dup 42 /guillemotright put + dup 43 /T put + dup 44 /m put + dup 45 /parenleft put + dup 46 /space put + dup 47 /colon put + dup 48 /S put + dup 49 /l put + dup 50 /d put + dup 51 /h put + dup 52 /o put + dup 53 /w put + dup 54 /F put + dup 55 /parenright put + dup 56 /u put + readonly def + 42/FontType resourcestatus{pop pop false}{true}ifelse + %APLsfntBegin + {currentfile 0(%APLsfntEnd\n)/SubFileDecode filter flushfile}if + /FontType 42 def + /FontMatrix matrix def + /FontBBox[2048 -416 1 index div -877 2 index div 3482 3 index div 2604 5 -1 roll div]cvx def + /sfnts [< + 74727565000900000000000063767420000000000000009C0000041E6670676D00000000000004BC00000588676C79660000000000000A4400001C0868656164000000000000264C0000003668686561000000000000268400000024686D747800000000000026A8000000706C6F636100000000000027180000003A6D617870000000000000275400000020707265700000000000002774000006C305740002054B001D054B0018039700130000FFE30000FFED0000FFEAFE420000054B001DFEBDFFD6031E000000B4000000B402FE3F3C0026001C007D00980003007D00DE00350017002800E3013E000300B400D000DF004C005A00C4004A00AB0147008A004E0039006D013D002401D200360045009E00BE00170079006F00D000460091002100B400BAFFC20017003600AB00B800F60009001D003D0058005A008C0099FFC400A000E800F5FFA1FFEA0033008500B800D5FFE2002F0080008C0002001A00250045006A0070012D0274FF87003E004E009800BA00DE0116FF3E00150034003C004400670068006D006E0084009800BD00D500D7011C0000002D0030003D00460057008B0093009700B000C6011F017B019D0409FF68FF6A0056005A006A006D009200C400D000E700F1011101BF01C7FF1CFFB4FFFF0002002300380042006D0092009C009D00A100A200B400BA00C700C700E400ED0153015703230334FF0DFF32FFFBFFFF000F001C0040004B005C006D006D007C0085009800C500CB00CB00DF011F01280136015501700180018A01C7024203130407054EFF82000000080026003D003D004F006E0073008B00900095009E00A800AD00AD00C300D300E3010901230241028002F40311034004510576FF7FFFAFFFBEFFCF00030005000E0039004B004B004C00740078008800890092009200B600C200D800DF00F000FD010701100117011F01B401DD01EB020002110229028002CA036F038A03AF0400049C04DD053E0587FEA6FEE4FF67FF95FFCBFFF8000200020007002500280037003700380039003F00510053005900640068006B007D0098009900AF00B100B900D000D500DA00DD00FD00FE011E013601370142015A017A01A301C401CC01F702020210021F022902290287029F029F02C002CC02D5031A031D03280331035E0396039F03A8049305640571059405B106EB0788FE63FE64FE76FE7CFEBCFF4BFF97FFACFFC0000700210028002D003000480049004C0051005400560066007A007C0085008A008C009900AF00B300B500B500B600B900BB00BC00CC00D000E100F400F600FC00FD0109011001170118011F01300139013C013E0142014301440149014B014F01540155015701580161016A017D017E0184019C019C019D01A101A301B401B401B901BB01CB01D001D701D701E401EC01EC01F702050207 + 0218022302260240024B024B025702570261026302680269026D028D028D02A602AF02B402B80300033E03460361036103B003C003D503D703DF03F9041A0474047B04C104CC04DA04E404F204F6051005300555055606180639067606A406B3076B07AD07DA00B200D500AE00BB00000000000000000000000000630079029602FA007E0247009100C8000002CA024800DA007D01B301A4002D00A5009C0034003400DC00DC0040004000310031000A000A00820030002A002A00004027262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A090807060504030201002C4523466020B02660B004262348482D2C452346236120B02661B004262348482D2C45234660B0206120B04660B004262348482D2C4523462361B0206020B02661B02061B004262348482D2C45234660B0406120B06660B004262348482D2C4523462361B0406020B02661B04061B004262348482D2C0110203C003C2D2C20452320B0CD442320B8015A51582320B08D44235920B0ED51582320B04D44235920B09051582320B00D44235921212D2C20204518684420B001602045B04676688A4560442D2C01B9400000000A2D2C00B9000040000B2D2C2045B00043617D6818B0004360442D2C45B01A234445B01923442D2C2045B00325456164B050515845441B2121592D2CB00143632362B0002342B00F2B2D2C2045B0004360442D2C20B0032552582359212D2C69B04061B0008B0C6423648BB8400062600C642364615C58B0036159B002602D2C45B0112BB0172344B0177AE5182D2C45B0112BB01723442D2C45B0112BB017458CB0172344B0177AE5182D2CB002254661658A46B040608B482D2CB0022546608A46B040618C482D2C4B53205C58B002855958B00185592D2C20B0032545B019234445B01A23444565234520B00325606A20B009234223688A6A606120B0005258B21A401A4523614459B0005058B219401945236144592D2CB9187E3B210B2D2CB92D412D410B2D2CB93B21187E0B2D2CB93B21E7830B2D2CB92D41D2C00B2D2CB9187EC4E00B2D2C4B525845441B2121592D2C0120B003252349B04060B0206320B000525823B002253823B002256538008A63381B212121212159012D2C4569B00943608A103A2D2C01B005251023208AF500B0016023EDEC2D2C01B005251023208AF500B0016123EDEC2D2C01B0062510F500EDEC2D2C20B001600110203C003C2D2C20B001610110203C003C2DB800272C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800282C2020456944B001602DB800292CB800282A212DB8002A2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800 + 2B2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8002C2C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB8002D2C2020456944B001602020457D691844B001602DB8002E2CB8002D2A2DB8002F2C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800302C4B535845441B2121592DB800312C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800322C2020456944B001602DB800332CB800322A212DB800342C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800352C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800362C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800372C2020456944B001602020457D691844B001602DB800382CB800372A2DB800392C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8003A2C4B535845441B2121592D0002002100000597054B000300070043B40201490506B80156401C0004074903000A0504490303021A090607490100190809EB214652182B2B4EF43C4DFD3C4E10F63C4D10FD3C003F3CFD3C10F43CFD3C31303311211127112111210576B8FBFA054BFAB5B803DBFC2500000001005EFE93026F056800110045401C0C0D04030D080C1304040C0D03110D131317171A04AE084811191213B8010BB3218352182B2B4EF44DFDF44E456544E6003F3F1239390111123912393900C910C931301213363717060706111017121707262702115ED080AE13A145792E51E01A7B8FED035E0107A162218079D3FEA1FEFCA9FED893213BAC011D016B00000000010036FE93024705680014004A40200902010F100706100706030B0F070F06101106131617171A14480BAE0F191516B8010BB3214D56182B2B4EF44DF4FD4E456544E6003F3F12393901111217390010C910C93130005D00020706070607273637361110270227371617121102474E4B4F84573B139A477E3A51D41A9E88D10163FEF6767E6D481D21757AD80163011FB60101932158B2FEEEFEAC000200A5FFEF018903AD000B00170035401C022A0807112A170B1917171A142A0E0B2A05 + 050E191819C321FC6F182B2B4EF43C4D10ED10FD4E456544E6003F4DED3FED31300006232226353436333216150226353436333216151406230184452C303E402E2C459E41402F2F464237030D3F442C2E413F2FFCB0422F2D43412E2C4600000001001700000461054B002400A9405A0EC80B1B0F0A010A7C0E1D981A1B0F1901192D1D034A001B24282404211B0828231498171B001801182D141F211B2328231D140E03191F031F1E2404130E0F2E0814132C1D1E1E2308022423081918FA094B300A500AD00A030AB8020AB526121F290403B80203B126252FCCF43CFD3C10F65D4DF4F43C003F3C3F12392F3CFD3C10ED3911391112393901111217392B10F55D01EDEC2B2B10F55D01EDEC0010F55D01EDEC3130373E013511342627352113232E01232122061511213236373311232E01232111141617152117793B4272044307391574ABFEE8291701288348163030174882FED84574FDC2250D3F8503776D430826FEDA8D4B1C29FE374E77FE26774DFE40713F0925000000020055FFE503ED056800360037012F40261123790A7B0B8A0B8A0CE724E525074B08590A5525020B0A0725890A890D8725DB0AD4250736B80107400D357E40593169310231A12C2E1BB80107401F1A7E40561666160216A1261328250D0A04041F2E371303042E2E0940341B35B80169400F001B360D100A2522281B0737191B1AB80169B51C1B1E1B5807B80133400F371B10302BEF2BFF2B032B39365822B8017CB700103010021039382FCCD45D7DEDE41810D45D1112394D7DED18F4181AEDF4ED2F111239123939113910EDF4ED1A003FED3F3CED111739101A3DEC5D1A18F4ED101A3DEC5D1A18F4ED7172313043794034202D0512240E2255000929075501052D0755012012225500230F25550024250E0D082A0A55012928090A062C04550021111F5501002B2B103C103C2B103C103C2B012B2B2B2B8181005D13161716333236353427262F01262726353436333216333236373313232E01232206151417161F01161716151406232226232206072303018434467AB5628F482F97AF4F2F57CEAA46C50E261D082A2D3132DD6C547D303065B4A94544F3BD5FCF0F2419042D3D01E5019C8A528F7C6F644A2F5E6D323361759BCE452421FE4CC59C63584F38393E6F68575878A1D8482C1901B403CC0000000001001C000004B8054B00170095403E06C8031B02AF01AF02029F019F02025F015F02021F011F0202114A1B0D2D2208211B0C2D2313C8161B021713110006010808110D06132E0100020D0C0819B8020AB2024B01B80108400E070829121F115F119F11AF110411B80108B2004B17B9020900182FF4F4F45D3CFD3CF4F4E6003F3C3F3C4DFD3C1139390111123911123900DC3C01EDEC2B2B015D5D5D5D10EDEC3130132113232E012B0111 + 1416171521353E01351123220607232804850B31246FB2724A7DFDAB824072AA7B1F32054BFEA4A463FBE877390925250A4285040062A5000003004BFFF1038903B4000B00400041010C4066EA26FB260207274606020C239A0A9A39A90AA90BA80DBC09CA09CB2FCB30DC09DC30DA31EC09ED300F57082C312A171C1F141F00330F0F010F49322E3639312C0F0A00061408143325072E3E360B083E3D0B4107413927100B2F412A403179292F2AAF2A022AB80200400A4318271B442242044440B80201B143422FCCF4EDF4FDE410F65D3CE6111239FD3CE42F003F3FED3FED3FED11121739111239762F5D18EDCC111239390111123931304379403B3E3F23280C17010702250D2606261226010E042600073E041E001524171E0016171326101E012728030C00260101000E0F053F081E001127141E01002B2B103C103C2B01103C2B103C2B2B2B2B2B2B2B81818181005D01715D010607061514171633323635243736253534272623220706151416151407062322263534363332171615111417163332363715060706232226270607062322263501024B734B903C27304279FE00915C011314226B332E2E0A25151D2D30ADA7C24525080D29171E252025383A443D034C365B52567E017D022A262E59715B2B1C4A396B613C67556628431A1B2F0C390838160D3B2446997E4584FE6F3A16270E1B34271926583D422036795D02ED0000000002002FFFED034B03AF0022002300A940498B17A408C411D611D618E211E61E07350B450B560B6A096A0A691569167A09790A7A157A160B28081718070A10171802171813070A0D050D3323220793130113411C0B230242231F18B80202B32510441FB80201B125242FCCF4ED10F61239E42F003FED5D3F3CFDCC1139391139390111123912393910C931304379401B1D210A120001121D1026000E211026000A111E1326000F200D2601002B2B01102B2B818181015D005D00161514062322262F012627262322061514163332373637170607062322263534003323027AB52E3023350C0C0D202136729DAD9368512E3A1C393F799F9CF00106C82C03AF814D2139302E30351615C7A597F044275511784686F6D3CF012A00000000020031FFED03ED0576002D003A00DB406D9828A928CB28C92CE32CF42C06006D2E7C2E8B2E9B2EAB2BAC2EBA2BBB2ECD2BCC2EC638DC2BDB2ED5380E032B4C290223080BDA04500A1C0B90111E2017501D1C1E92213231302F0417042227322F23170305343A04122D110134332D073A3E2727210B22042F122740170117B80200B63C37449E2A012AB80201B13C3B2FCCF45DED10F65DF4FD3C003F3C10ED3FED3F12393911121739123901111217390010F5EDFC01F50010F5EDFC01F53130437940183539282C352C3726003928372600362B34260138293A26 + 00002B2B012B2B818100715D01715D001716171134262322060735373E0137363717070E01150314163332363715060F0127350607062322023534123312363511342623220615141633022E3D28251B330C121F522D5A221025060201020220450B160B068B9D0738294960AAD3FDB773608B427E8C959403B1201525013E3D2E020321150C1A0C050E026939793BFCCF413401022102303B097B3D1A2D0107ADD90137FCA85C2901AD826BDFA3A1FC00030028FFE8035E03AA0013001C001D00D9405D69086A0C6F126C157B0779087A0C7D117F127D147D15FC0EF60F0D550866086011C404C712D404E609E20F083D08090A171803090A02090A03061739100301034703061C1C631D13079206A2060206410D0B1D18FE02421D10CF0A010AB80202B31F03DB10B80201B11F1E2FCCF4ED10F65D1239F4ED2F003FED5D3F3CED111239762F5D18FD111239390111123911123910C931304379402A0E1B000515251A261412171E0016171B00181E011918050E03260016111C1E0119011C1E01040F062600002B2B2B012B103C2B103C2B2B2B8181005D015D001615211E0133323637170E0123220235341233060706072126272623370262D4FD850ABE8269903D2329E1A3BCCDEEBFAC3C200E01A60B1B31732D03AAC3B3E8D46E650C7FD8011CB9C90124496536526431584900010028000003100576002600774037370A010809190A290A030626033F001C26DE24213F1C25DE2303210526131618119518330B011F05391E1D07060626250A031E20280128B8020440090E1D212F072F030103B901FF00272FF45D3CFD3CCCF55D3910003F3C3F3C3C3CFD3C3FEDED113939111239392B2B011810C4183130015D005D373E0135112335333437363332161514062322262F012E01232207061D01331523111416171521286A43ABAB2B52DB588B30221D2A1D110E26224C1B0FFBF93D81FDEB1C05456F0282439E6DD1463B2134232C1A151D4B2841ED43FD7E713F091C000000010012000003E50574003000B64016451601F9170109171A17021A08102F1F3002233F1C1FB801FB403B22033F001C3020241A3F1C1E20232B3F1C2F20230BDA04500A1C0B9029232B2B29231A11030627300410150F00273E1507302F1F1E0A24232F191AB80200B63210272B2F0403B801FFB132312FCCF43CFDE410F63CFD3C003F3C3C3C3FED3F123939111217390111123900F5EDFC01F52B2B2B2B015D00313043794010252616182616241E0117182517271E012B01103C2B818100715D0171373E013511342623220607353E013F0117113637363332171615111416171521353E0135113426232206151114161715211252331D380B150D2C811960023F315866A23B20314CFE4F5732415A4E923455FE471C0B3B6E03C038350302240D25081E07FD + 9A48223C884875FE686A400A1C1C0C3A6E019561787011FE1370380C1C000000000200280000020E0574000B0025005D4026230C0F3F0C1C25202423202018201050171C18921C201F100F041C25089502001C0725240A27B80200400A200B9505271F20DD100FB901FF00262FF43CFD3CF4ED10E6003F3C3F3F4DED1112173910F5EDFC01F510F52B103C3130123633321615140623222635033E013511342726232206073537363736331615111416171521A83C2C2B3D3D2B2C3C806B38090F300B15322BAF451C08023761FE1A05363E3D2C2B3D3D2BFB110A357501DD411929040E1F0E391D0C0708FD32723A081C000000000100250000020E057C0017004A402015000343001C1720241620120CDA043A0B1C0C901211040304170E0117160A19B80200B411122F0304B901FF00182FF43CFD3CE6003F3C3F1217394DF5EDFC01F510F52B103C3130373E013511342726232206073536373216151114161715212A5D420B143D0E211987BE07033C5EFE1C1C09395303D142192A060621243C0C14FB515733071C00000100210000063403A8004E00FA401C36193420021120A70E024F294F3C02103B104D1F4E033F372D431C29BE01FB002200400101001C003C01FB404C22043A001C4E2024243A1C282023373F1C3B2023493A1C4D20230C2005500B1C0C920F43491B37404948434037362D241B1405040C454E130F32453E17323E1F1F170F074E4D3C3B29280A50B80200400B23242F2E8F2DD02D02482DB80147400D464036372F418F40D040024840B80147B746041327492F0504B901FF004F2FF43CFDE41076F4765D183CFD3C1076F4765D183CFD3CE6003F3C3C3C3C3C3F3C3C4D10ED10ED111239111217390111123912390010F5EDFC01F52B2B2B2B2B2B112E015D5D3130005D015D37363736351134262322060735373E013332161D013E0133321716173637363332171615111416171521353E0135113427262322070607111416171521353E01351134272623220607111416171521214E1A28272D15150E4827B205050263904C673D20154A375F63A1361F3F52FE3D573715256C41402536395CFE355F3414216B3D762D3559FE391A07131D5702054A2E040523180D440A0E875A454626414B243E834AA0FE614733081A1C08365301AF612E522B1937FE005154031A1A0C448501189A3A624336FDDD4C3A011A0000020021000003E303AE0033003400B74059191A4D1A02960EA60E021A081F2110321F332F213F2105253F1C2120220343001C3320241C3A1C2020232E3A1C3220230C20043A0B1C0C900F2E2D251C1304030733120F293E17270F07333221200A34073426252F34041B1CB80200B73612272E2F030304B801FFB136352FCCF43C10FDE410F63C1239FD3C2F003F3F3C3C3C3FF4ED113911173910F5 + EDFC01F52B2B2B2B055D043130437940102728181A2818261E01191A2719291E012B01103C2B8181005D71373E0135113427262322060735363F0132161D013637363332171615111416171521353E01351134262322070607111416171521012547390C133B09130E29995E07035C344E5444386C3A44FE55493A40563B3D22364045FE4B01DC1C09355C01FB401A260202230C321F0A0993562031274CC3FE2D4840011C1C0A3D6601AB5671281735FDD04831021C03AE00030034FFE103C203AA000B001800190092402CC609E5090296109916A010AB16F50A05160014041717550A5410053A0818331902071233080B191544190B05B80202B61B0F440F0B010BB80201B11B1A2FCCF45DED10F61239ED2F003FED3F3CED31304379402C00170D250C010F2600170315260111090F260013071526010E001826011604182601100A12260014061226002B2B2B2B012B2B2B2B2B8100715D015D1A0133320015140223220035000706151412333236353402233734FDC7C60104FCC8C0FEF601593A64A18F70799A922502970113FEFCD8C7FEDA011AD5019E345BDFB2FECCCEA7AD01323C0000010009000002B103AF00290088404CC41E013722011F29010343001C29202424431C2820230B20043F0A1C0B9210221F1E032B24242204030429141D1320801D01201D301D021D951D1027170729280A801A011A2B1327242F0403B801FFB4AF2B012B2A2FCC5DF43CFDE410C45D003F3C3F4DE4CCED715D1239113912173901111217390010F5EDFC01F52B2B015D3130005D015D373E013511342623220607353E0137363732161D013E0133321615140623222623220615111416371521095C3C25310A21123978173235070340774033403125264D162366505DFE132108315001C36355050421142A0913180A10A459643D2E293846713CFE3D5643022100000000010019FFED023B04A100220057402A0911011B22021402391E2206400B210A47073E0F0B400A210B24401E210022022F141B1840112C1424232FCCDC1AC81ADC3DC41810FDC4CC1AC81A10D61AC81A003FFD76D41A18C81A3FCCFD3C111239313001005D011523031417163332363717070E01232227263511232E01353436373E013732161D010209CC020D18462435221A16347436762A176D05050918453D710D05039A48FDC04C27452225161E463A693965025E0306050A0B14394798040DF60000020012FFED03D503AA002B002C00A8404E4B074B1F5A075A1F6D076D1F79079B079B1F091F0D1F0E021D080A3A1C0E2023263A1C2B202314201050131C1490191C19261D100A09052B0E0006190B053E210B2C071C270A2F0F2C2C25100F10B80200B52E00012F2526B801FFB12E2D2FCCF43CFD3C10F63C1112392F10FDE4003F3FED3F3F3C3C1739113910F5EDFC + 01F52B2B3130437940122224020403260422011E0023240223051E002B01103C2B2B8181015D005D0111141716333237363711342627352111141637150E0107060722263D01060706232227263511342726273525013D132563444125263C5A0143314F37343D1A5805024438555F574D4E22164801EF039EFD8044294C2D192C02244D300521FD404433031C0F0F1409220906A151273C3E3D900207501B11071C0C000001002AFFEC058E03A1003A01084086260726303915391B39213A22060907080E080F081409301822292277148714092702270327043702370337040632351A303039122D301B1C1B1C351A1415070607080839121414150706065312321B35351A302D2D5312222221222D3035321B06070814211C150D1811252838000E05111C3A2710061F180B3C140802151030100100100110B801FD400D47150635321B04391A301A011AB801FD400D4720390139261C222D02212621B801FDB547202601263B2FC67176FC1811121739DD10DC5D76FD711811121739DD76FC5D711811121739D6003F3C3F3C3CFD173C111217390705102B103C0710C4C42B10C407102B1008C40708103C07082B1008C4313001715D005D010E01151416171B013E01353426273533150E0107010E0123262703010E01232627012E01273521150E0115141716171B01373426272E0127352103B83C3A0D0BB6B20C1C2E2CFE19201DFEC00406060C02E2FEF90207050C02FED531202F01722E3129182572B4022B1414332E01A10382071A27152D1EFE2501B21C5B17251A061D1D052647FCEB09080604022FFDD30507060402E1792B071F1F0419291D71415DFEE401820C146D2B2D23041F00000000020057004903A5035A00200040003E401F003A2A1A090912003312E821002ACB3D361A421D16CB09194142E9218356182B2B4EF44DFDC44E10F64DC4EC002FC4FDC41112393D2FC4C4C43130852426272E012F04373637363736373E0133321615140706071E01151406232026272E012F043637363736373E0133321615140706071E011514062302010B070A3904DF5F0C072D0C2D4130593C221D07090C452D9756B10C0901810B070A3904DF5F0C072640482E553B221D07090C442C9956B10C094908080A3704CC5109072D0A28392C503E221B0C0A1C5F3CBD6CEE160B0C08080A3704CC51090726393F294E3D221B0C0A1C5D3CBF6CEE160B0C00000002005A004903A8035A001A0035003E401F002A1D0F020209172409E833173521CB2A1A370FCB1A06193637E9218356182B2B4EF44DC4EC4E10F64DFDC4002FC4FCC41112393D2FC4C4C43130853E0137262726353436333216171604150F030E010F01222635241237262726353436333216171604150F030E010F012226355CB2558334520C0906221E50011C070C5FDF0E3D + 080C090C0187C344992C440D08071D22590113070C5FDF0E3D080C090C74F468A1476E1E0A0C1F1E53FA05070951CC0C3E06050C0B18010454BF3C5D1C0A0C1B225CF006070951CC0C3E06050C0B00000001FFDE0461025E04CE0003002AB7003D030517171A01B8010DB300190405B8010DB3214657182B2B4EF44DFD4E456544E6002F4DED313003211521220280FD8004CE6D00020031FFEC040005760038004500D240899833A933E337F437046D397C398B399B39AC39BA36BB39CD36CC39C643DB390B03364C3402404433374037422600443342260041363F2601433445260023080DDA071B07471E0404380D0D1C0E901626201F50251C26922B2E323D3A3B1F0305453F16013F333807453E2B320B060604422E3B0703042F19271B1F1A1D47424435194647B021718D182B2B4EF44DED4E10D6F63C4DF4FD173C1112392F003F3CED3FED3F11121739123910F5EDFC01F50010F5ED1112392F3C76DD3C0110F531304379002B2B012B2B818100715D015D001716173521352134262322060735373E01373E013332161707060733152311141633323637150E01330706263D010607062322023534123312363511342623220615141633022E3D2825FEC801381B330C121F522D5A22102401020202020102A2A420450B160B068C019D020538294960AAD3FDB773608B427E8C959403B1201525D059522E020321150C1A0C050E010169395259FCC6413401022102303B0107037B3D1A2D0107ADD90137FCA85C2901AD826BDFA3A1FC00FFFF0031FF19040005760027001A000000000007001900FAFAB800000001000000000000BE665AE95F0F3CF50111080000000000A33D5B0000000000D03CCEACFE60FC930D9A0A2C000000090001000000000000000100000600FE0000000DC5FE60FE600D9A00010000000000000000000000000000001C05C700210200000002AA005E02AA0036023900A5047300170473005504E3001C038D004B038D002F04000031038D002802AA002804000012023900280239002506390021040000210400003402AA0009023900190400001205C7002A040000570400005A02AAFFDE0400003104000031000000360036007E00CC010E019C028802FA03E20470053605D6064A06EE075807A40890093A09B20A340A960B300C140C940D060D280DF60E04000000010000001C0071000600960009000200100010003B000007E806C300040001B800312BB800272B400F09CF54010F54013FD029019F540140410D01FB0001003001FB0001002001FB0001001001FB0001000001FB400B01002001900701900601F0414F0204000100EF0203000100C00201000100B001FF00B0020100BF0208000300AF020100AF02080002009F0202009F02080002007F0200007F0202007F0208008F0200008F02020080 + 0205008F02080007006F0200006F0202006F0205006F02080004005F020200500203005F02080003004F0202004F0204004F0208000300300202003F0204003002080003002F0201002F0204002F02080003001F0208B2010840BA01E5014D0152B50F1FC2710E1FBC014B014D0062001F0131B2864F1FBE01A60020000D018F0020000D0182400E200DDE200DDA200D8F200D7F200DBE018B0050000D016C0050000D0101400E500DD8500D43500D3F500D3A500DBB013B0028000D01034014280DBD280DB8280DA7280D7C280D76280D2D280DBE01B1004A000D01A7004A000D019440204A0DF74A0DC84A0D984A0D854A0D7A4A0D664A0D214A0D621C0D241C0D1B1C0DB8017EB60F920F900F0009B8017EB4900D92900DB801F5B3312F1F41B801F3B5331F2B2C361FB80189B2542C1FB80183B254AB1F4115018100290401001F018000290201001F017C00440201001F017901300201001F017801300401001F0177B22F291FB80173B23E9E1FB80171B23EE41FBC016B002E0401001F016AB233E41FB80138B2545E1F4109013300290401001F013200440801001F012DB23E931FB8012AB22CCD1F41110127002E0125001F012400330801001F012300330401001F012200330401001F0106B254261FB80105B4542C1FFF29B80101B21FFE88B80201B61FFB2F521FF62EB80401B21FF52EB80801B21FE129B802ABB21FDD2FB802AB40171FDB2F5E1FD93E4A1FC454261FC354E41FBF2F6C1FBA2CB80401B21FA944BC0401001F00A80130019A400B1FA52F931FA42F891FA23EB80401B21FA033B80801B21F9654B80801B21F9529B80401B61F8954261F732EB80156B21F7233B802AB400B1F6B2F6C1F6A2C4B1F632EB8019A400F1F2E2C371F532FBB1F512F721F4F2CB80401B21F4944B80401B21F482FBA0401001F01F3400D411D1F412F1D1F3D3ECD1F3B44B80201B21F392EB8019AB21F343EB80401B21F322EB80201B61F313E4C1F2B2EB80404B61F2A54311F2233B80201402D1F5567075F075507370735073007260725071E071D071408120810080E080C080A080808060804080208000814B8FFE0402B00000100140610000001000604000001000410000001001002000001000200000001000002010802004A00B801FF85B0018D16763F183F123E113946443E113946443E113946443E113946443E11394660443E11394660442B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B1DB0964B5358B0AA1D59B0324B5358B0FF1D594BB03553205C58B901E701E54544B901E601E545445958B9012101E7455258B901E70121445959184BB04C5058B801E64569B801E7456961B0405258B901E601E645B040614459594BB05653205C58B9002901E64544B9005401E645445958B902360029455258B9002902364459594B + B08953205C58B9002F01E74544B9004401E745445958B902E4002F455258B9002F02E44459594BB0CD53205C58B188294544B1292945445958B9052E0088455258B90088052E4459594BB8020153205C58B90130002F4544B12F2F45445958B90AB00130455258B901300AB04459594BB01D53205C58B133334544B13E3345445958B13233455258B133324459594BB02F53205C58B133334544B12C3345445958B15233455258B133524459594BB05B53205C58B133334544B12E3345445958B1A033455258B133A04459592B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B65422B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB35B9B819C456523456023456560234560B08B766818B080622020B1819B4565234520B003266062636820B003266165B09B236544B081234420B15B9C4565234520B003266062636820B003266165B09C236544B05B2344B1009C455458B19C406544B25B405B4523614459B3868D7145456523456023456560234560B089766818B080622020B1718D4565234520B003266062636820B003266165B08D236544B071234420B186454565234520B003266062636820B003266165B045236544B0862344B10045455458B145406544B286408645236144592B2B2B2B4569534273737373737373737373737373737373737373737475755E73735E00 + 00>] def + /CharStrings 28 dict dup begin + /.notdef 0 def +/space 1 def +/parenleft 2 def +/parenright 3 def +/colon 4 def +/F 5 def +/S 6 def +/T 7 def +/a 8 def +/c 9 def +/d 10 def +/e 11 def +/f 12 def +/h 13 def +/i 14 def +/l 15 def +/m 16 def +/n 17 def +/o 18 def +/r 19 def +/t 20 def +/u 21 def +/w 22 def +/guillemotleft 23 def +/guillemotright 24 def +/macron 25 def +/dcroat 26 def +/dong 27 def + end readonly def + currentdict dup/FontName get exch definefont pop end + %APLsfntEnd + 42/FontType resourcestatus{pop pop true}{false}ifelse + {currentfile 0(%APLT1End\n)/SubFileDecode filter flushfile}if + /FontType 1 def + /FontMatrix [ 0.00048828125 0 0 0.00048828125 0 0 ] def + /FontBBox{-416 -877 3482 2604}def + /UniqueID 4416489 def + currentdict currentfile eexec + 54544758EC884CF30C3CD503CEDBFF3839C47C3C3333173232E3FDBFF439491DB843E1924E63AA7726BBB0485AB56D93D8C0906F647A47162891E73FFC2A9873C4B1EAC5EEBDFFC4D06084FBD84139DF4583C6E259D10699944D1068C9C45667DCCCFB9B7EA01B606435EDCBD273ABAC093D14085CCBAC149BD7382E842CFE0D7FE4FD2EF589A2471F6074A80A8B675C2F7A50D63AC1EF90D787BADD11633CB01CF6EE3B37AAF9078A69AC4740E9B6525D78BBD839551A1CB80DB8682FA5E87591BBD6EE8B946063A2A58D9CA3685AB305495DC5FB5747EB8A9A059C4976C0FE4EEAB1D56FF47F1E9664ED9F4A7DAB763AF92B2F6CF2FA7DEC24710E0B9096E30F772BA7FEA9BDBE496C42ED2CEB58F54E80BDF57CE7B4DB6CCFE7182F43BF93CCA0767AF95D62C5D2C3DC6AE1E6D139F51A2C63432117F1714C5566572EE9967A715420ABDCD1D7BD74F8450B89965FCC81C6ACA565C5F3CCF91D430D1F953E4F1A645300A98DD8C47CD64555F08F422340A85404EAE0D3229C4F9336B9470CACBD6BBF3395104750A915CC6EAAC197668267B8C62D2764C8CD69FD937CA3C924D997A0EDE7964BEB9EA2F92EF70C5E5DA0AA5567765E71F2B911B3C55AC8266BDD340E521355EEF85826934CAF24FF8985D12C0AFA59F1D8B277D1FC249188DA98CAE72468909D2E803C1E1900E1EF02D5E10A01AC8CC687FE2CE17EC270360ABACABBD98210089123ADD92E1D9FB6BDF4BBBE74B907201962534C663604DABA9D75DF29121B652C4F639A2269EC2DC740A9397B2234B521F6370F13A4CFB15D5CBBC048D6AB9BDBFBEE35F74A2AA037E3C6E8721DA22FF021DEFB402CC0AC0F359266EF28C5A47D3CDBC304680333A5D6D7985D2F292A373F9400CF09CD9F7CEB2FA9BBA95F66C836FD59F529E8AD8676D800BB99EB10ACA68BC3E7EEE5346DD9B1722F26A96D60B31D37F4A84D668A2DE121B336A0DC52615785CDBBDCC47EA887B211AA257E8D0E7F3A4AAC86ABA1ADAB8826AB89FBFBE6B4C2542095120295FCAAE4686C73F42C58E2DEF8FE7DBBFB309D5AE398A0F04002644B8CFED7CD391D80E0CEBEF8FD09F54543FE42A2CE2CEACB635A13BBACBC2D5603B7A81100427FCC7BE0194E1A422B969653D222AEB04DC55916E062C6DDA2C443FEEFF9F539F9C1D4C9CB9A299E9969CC5F44F3A58AE0B8A701A95FEF33E0AAB04B9C501F212C6CD1B99829A773AB4AD34ACB536957F91DFA25BA8AC5D746CC20E9D1323336E6AB8D7D91D71C1161E050158FCD3BC05FA47E38C2BF0D4316E086DCCA7F0B143EA111A2AFFD8B6E4539B2E29B5DD21D61215E302480ACE5C60451D77F9822D4C676E13A8D72E87A66FE5748D29A67C8EA29BBC13FDAC2812014FB33F042BD4079D9B203D39ED8D7AC6B0B1453B88B19A8F5A112BA1CD03B10518C03077A + F245FF7B2DC0EC28340FF88EFAE4910E6564E9EFE4FF2B535A6E47DF29E2F39966478AD0CC3255F74888ABE3ABE435EF3AC0C32A289BC2FE5F8BF2606E6B0EFDED911DC75A4B78E7BD3030DF7EEBB3573579EEFC5F4AEE7D5CB9E69F8033CF6ACD443DF75CDB6F492B7984BE130B681F6D7513729B61937602D003FABAFB4ABF6C961B3CB15DE48BF7B96F2BA1E727FAB7AE8E16EFDBA464318820E90252F4A2695E68E5F7126C4E9FF23157DDC9AB7EFD29A8E0BFDECAE929AF758294F01780812A0519561835C0F9FFF970F0F97FE0619C4C51A30CB43A69379013E7326E9916293C76F6B0B361E2A7770E535A63E33AB38A08270D51253D25B9C1A3A0A963DD9A4F888F9A9FE51F00D763875091BFEF718649A64149D75FF93ED3C0A7003B59D59115EBB186DAD0B5F96D9E6775944944849A51D2C787B2F5FD061113F69F5A61005963A5067970D24F22AB7CA68A329BCE1CB0EDFC15361547C4FCB161F847A9C19CA167428DA0058C238434BDA7E98A790DAF9CF011BFCCD98E58EAE351CDEF3796A2B31087EEB1148958286E0EF86ABB9ABE2A92C3986E8E3AFCD8318E0739421E1AAE6C803DBCF1108B72999D4E2ABAC324C4D58931F9A284277F12D98816C38093C4A2D50007AE1481B0E9EE706A13CBD71233305D5E9A873DD2758D6A86915182D07A0179CF41F5F523594A6447311C2CD5CBAC8659A1CD4224188ECDA34E2FFCC0B6C8CF6B41A375BDA96742ED6B6D0B7B9F369D0A3A70B44726F9EECB1D2057524EFB2939C0A1C3B8D2420B9CDF18CF48F424E4713B83D7659A39D9D24E2C295EB39EF20405EE781BBE2FC66347FAF9341227346B39F30C7D0DBFB78C459421578BC39153E05E572B7F907473701033797C863D81F1C5900F69B993B2E87B8B73B5A8943ABAEB710B2857536A747206CBF8575988B0BCC04F989B21B70A201960DD718E2C298B1E1B009DCD0B37CF63B97928FAC06F46461BAFD863D2247B862E9188B04056094CF1CB36E12498DD2F987FDC41113BCD3215595E4A21550FD0A053D2C7965D034E62B9E740EF57CD25F1858D1F849D7EF2F18344D55D1618FF58177D2129159D9DA3E84E7B00F043E8FB50CC37ABFB65914A0F0DBDD644F97F6BBB3275E39DCADBD8968E533BFE8DD1CB4B97A84388A76B37B9291A12D3FC17F400A471E736BDB747AE4986A567E8D387AF2F580F53B38277FFA40693A3185C804730CF7DC4CD7E8CDAF6B56D11E0024E24791F09891FCAF99DE0B24913683C4182D94ABFCA4AFB214698EACDBD16CDFD68651ED2377620A5746192F31C1F71DA41E7ECF1142356917C7EF0D71361161A5EEDB18660FC73C9D920BF10AE0584DBE2546A34EB551E2CF0EE82FFDCA133B6235F7D846BDDAE6EF7FD0BAEA87F6C0DAF61E74E6069B9A5C10ED1893ACE303E16ACB24B58E85F9C3B19 + 67D1C6BADD1105953776EA74C3B3A664CDA8CE739C662E3379C4FB947B0048F52B3F49B3629EC2B878C6B6CB7A9EB0EA0854DAAD6337181A6F58CF4950F98AACA026B44EF7AF38143C6BC39E7D9C90551BF1E51226F614C97FD4F50A7834B1CF507BF5975011D678E064A7C226CBDACB9ECDC772511F3A7979A9E6D1DB0C387C301303CE8E090868F4893C641DCB1176D8932A4FD7CFE657989E3604BC4CF8E6E9BB4FDE7A1DAB496609074584F7DA1AB049A5356796438D6B01AF9F800DAFC78CAD19006CD61675DA83C4141DBA5B425857CFC6C3BC8B45115DEB76B993076B4F404A5C080A80DFBA40330FFD8A63429B15D335FE128D3295987894B7C038BA230861226D52BAF8C20CE84B16EABE959A54F0D20745A591AC1C9BE0E49A394843CED7B2E3F1568A440395D200948C07999D3BD1D7EC85DC7218C4D5947468420A73F00469C35E3D5A61E83276A2147F92F59C87C09F4C886CC3D24B517FD2D679E70235A4E329B678225AF5268B176DBDD786019B13966B25F3A1B26BE793E163223DA41BCB2B9E3A0C33B04409D806F74467F6DD0465198E6E825B409407D97D349E4E37FAC9CC114D49CF84320B112E7155184A91498C1862F94A7E6F811F5D97ED5ED44C5359E1B4F5AD34604AA1B6D24C9E5E1ECBBFCC6DB09548131237F9075F7DD74DDBC5479D1A3ED8589F370579A7970E20C9A533917E11B5E3C3F3D2AA022D0138E9FC5DD05747866BC598C5FD2DFA6397D3FE1E333B84D12F22DA0761B68E3B302886579C3B3965291017B8BE9F4A6A36F1A60864EA3DF20699F96C6A11BEB00927EA8ADC9AFDE2027C8AA65BEDFE565DDBBC658FF3F575ED832F8C43A3EC80E2AC8798358708331AFC17E115FFB4625F29F185DBD317A42DC00ED2622C7CE5E409071CD3962DBBBDED207351252281DBF02667E7DEE88D5733B9646BA64034C4F901226E0F11E319CD92217F743B6D43DB0EE56708FCE38998A0B5899A69395F6F5530492303ADCFFCDE390AB910EFB78E82DB1B6F7D3FFE35267CB6F62FBDA30311BA0095999AF995C74F1B6EF2BA7E6DC814F0BCC646CF616FB91CD985FCEDCB88490DE4199A11C9A63F487112FA4FF2ED0F4520A8CF71DC7C3F9A814D2E31EE48A2DA38C84C0A837C5FCA7B1D41065D50FEF63B7681FFAAD8D08B1EB1530B1D204E88D8DC4D0E256AD53CFED80899561D1073C7033BAFB5C6059462374262B330604F19424D128D19C506F6BE9CAD76A416BAF0D2CA22F4132E5F7D6F9A5A9D747ED2E9BEE4F0FC8BAA194D61FAFFF7E354A1409187EAE21D93AC6D26E9FB17ECC1A6882F409685E1EFAEE98C23C1F9534A9903C4DE159C21925CB1A5BBCEF835CF2AA5414D31342DE8302C3410F090AB06209B17FF8D3F3945CCDB7CB0B1412566E00113D031F430FB5858D2AB029D317EC819095644B6CC + 1F894D067A0EB73434585FF7D61E48AD73704F429B81BE83E2C4BE7637DE1AA7B281D6D085CAFFDD996FEBE234A30D771D80E3608E73382C4365B0D2C6B0CF762F1399DD84CB17F7E6E8425582633B14221601DBC3558228F7439430D89D3F11720C7C0207C78B4CE461CE1E8201449B4BD01EE09EC61CAF96862762922DC4A0008176CB282262339AA5F4671A29357701BECC8B737F64A485C9CBCFDCF023DBFA180F04D6A6F21B86D6A617D83A60FFE658107DAD0C1A6ED6781811DBC8F10F2224F7385D6616D4BF97F53386099CCBFE9E47F0469F27666B9E155A86E8091F19AC5641C7127DC2695DB3562CE666C08CCD367EE8FE344793AABAFA73C97A401E37D3FA9CC0486581D59CB2B94A803CF3B315A76AA6B6A7A68AB523688A722F6F783B36CF94025D26D64DADF7DFB750EEEF15EDC4ED79CEF513FB7AEF209CF138F57FACB7426634A0519DB07485EF597AD9C489F85802F6DDF7CA05BFB51F8C2A1C92E25F115997F088441799E239FB89C4F2EC3E7573C97186E1953DB1BC9903BFAF12907F95E5614171EE88F91E30B68846581BB4700A242ACDCD5B28142BF1C89D546D6A49B948374917B53A1833F89D5DC370725C2DFE255F690B9442E9AA922EF4DF37ADBCC1931D3278693F27D7567AC69737006F81BAD5D2F4E49318293B1802985EAA7E44DFE553C624BB7D6BCCD461FBE4E96E48668EC78C0F22C80DE5230DAD082E24CFFEA32F7B22C0C04E520B569CB4C0F3CA7EDFCDF4255FA985651F6C78ED715A0ECCE0501F36C95F99693DE2F7A6072A6A85E00B5B789775639C75AFAEBBA663F692C06ED98F420182DC365FBF6340213DFE70F1B43A4CBBB8E097F9649BCCE19088AB8F29CFFF0349C5E5028D9A4A09A6A1C691869E686FF37540C1B432FD54C45A2B537BB7861B85197DFC4085FEE3E5CF6FE88A2DCFFFFB39456517C7F6180D837EC31742CF6364CF1E8DA3F3C2656ABBD22C41CDEEF310D76FBEE62589D3947495210CF026BBBA880232357CD32876F69A914E3BEB038A73F4158EEE8C0DA3F077DAB40FB882BBB33C48A8491FAF9DE070E752EC3F88E0137F32FCF013F723AEC27D166A33CAFAA8275794FCF4CAB76721FD232C6D0D83430EDEE88B0C37EA4792C28E7B06BF71A88C68F5D0C30C6A09D2A4D5B36C54AEF25205B9B8300539CC066031DA5E73DEA8EB4585148CE998BF39851C7BAF6F98130A45725F35871CD39577437B1618D0A53B5CFD0DF6676C13C46F56C4F5A6A9E14467A98A95AEB295E8B8BDCAA2BC8C276D18BC3760598A9B788542F44BCC0722CBFFD73DF4087E516D6B099F9DD9461F55B7C253A697BF7347D89F33B11C631B48F21B184A4644A945D630CFE68B00A1393F63A0E71A47EB26473CDF078D9A4F550493CED3F7A5CE352DE453BA5254C633C3DECB5403CFB57A12CEFA413F + 2FA39BCAF6798A3EB5F7C4BEAFBC5DC604C9E839C5086B8025E6B82681038CAB52817F4CA8D5A16DA5F214334E710538AEC63174C3A4C887EAF88D8CEF434B431990A1597A6823139A9A2026608CDA671D439EB6151EC3D7F1C0D4028403D6BA1CB67AA210A71E2A4F84165C274FCEC0764538E4330579FBE3665CE873D472B7C755E3861D1DFD8FF313A13989209EA9402B1636765348CC9840751A7667FC9A9B5E74A8B84C55254FF60D6D483D01231429B5153050A1305DBB168E3FCEADCFA6DB781E307C08FE13A98A6E410EC4379D736DC9672B1A81D08834FE94EE8B61E3062C63227C46DB911902A42C5270BBBB6C429F78B51E08206125F3119396267F593291D0348291B0803E420ACDC4695221515277CE5E4C71D1C64107E5B6E9A4CA0B0BBA1DAD9AE99999C263AACD3626743103B3F416ECE733828CD124F499DEB383570B3DA83930023B04531254CD85E0A153A04351D1B88F00FFE340F73A46FF7E6C89089E7F1C98EBC9CB83800DEC91C58EEE2F5FF8FF100C219E94871062B812821BB8301EAA0EED2292A1D90F967693F3E37DA106641919CD03D564B5593B7BAE47D821434587B3B98639C897D98E6BDCF8EBE8EC790B27CE64708AF85BDCFE85464F95EC53C5C78CB492926587120D0833DF8F0BF751A3AD11FEA4CA91B08014E95A93CF85E59E14C19E13E3C9191310B8CBC237F10E13D9C3E95268099491B1399818A9DAEE21E9779430BDAF97C66A101C0E44EE072138829B56E04DE154859E68AD25FAC511663142760C0E87C893F4716D101A17CB4AA2F447A21C64BB8BBF3F2A2D51F1223BE31945B664093BD68FB62AD4B8E8695A9FC4B2F8BC54B7339B9D1EA42089DA36C2C170F7B333AB295D7D54ADF873B919A6F7F1E56DDA9760758C9ED1898764EA68CEC8AF8CA586ADC77CB38A2F02FAE6180F4F17E83D09A11232D3FAFAAF41B9A01D3CEA734E18EB5E238C16DF8BBB3DF3F663BB96E31A231D6F687AFD67408D39F998646FB507823FD928C5CCE573F6BE8CB6FDA32A5930912CD6D4C0931F039E00ACAA88DB1EFB27074F529B98EC2D9CB885059DC96B2DAFC15E8540F6B50C83BA4CABE03629369034D12A89D8F4C53CA38E6C39423B519F52F730427ED68820509C6C2909D50ABC421565A6ADD1E9359EA4D3BBC7A3D11A9CEBF4870ED81E1F3AF3BF1A7D030E7D3A2F405C14BF503A80B2E16CDDE9C69408D68767BEBE26C38938AB94A152AEE3AE30D68359B7C762369A4454B036BFB3CEB0B64E264AF49B7AA07A256D83120D4DF34A579D66FACEE9E2CB963D074C32CB13390433AA886B012C1457B64E6E22480C8E604AA8E069CE5C5406AB4BE4A05E2A0FE098481A703022B8F23144F46C0889161428BE9D0B0872C115584E62F18516AB49F9BE79DC6CB7FA82213DBC01BE467B49967C76E6C7E981 + 7E18E3EF914280F6E5627A18EBEA38343B2A568402D3A4DFB98838C95C86C3C4EB23B805110FAA42D161A8E12C374894232F10BFCCA4848B590A09843052C8C2F08815666A07E394B3E1320637CAD680C07B43A3EDB992F3823B207DCCB1C587991187BD59E4EC0BFDE82887E27B8FF53CDAF9A5293C9DD6D140553C871E32B703AAA81DA392F8AAEBDECE3B0BA9E80647AAFE4A7496CC0C742F0D1C5BAAAA3AD312EE0CC308293A45FA9995722BDF691A77BE3166D20B8ABA6EBA1EC69715B8821F8EF279F16DD77D76306713B23AC78C677457B1A929D8D8251D89236EF93B6DE247F74AA2E7DFF1B7BD4E9313F33E24FC2CD28E9E06A5894EF9CDBBE43E5A06C619AB5C4158E4F0006995EDFAFCDCF97645D696021970150FEDB9C825A3EC034C4BE7A4465FE6D9A2737F32607A7FB22E34072292E9828936B5C298FD9DC90C3CFBA7A7DF9D4B376B7B73C861BBF17DD9A36F0770AF9E51ED256ADB2EDE9823F6F4B00A7A88103D8F57CB2DF5FBC4F4F76654051C715D61707AD6830900CDA5E23408951B6DE113F8A128B4B25552BFAE7AFC12C59611445CAAE59BC4C93F739138A18D02F535FD6249575622CE515B10DF4D036684A78AF1A4F6780014ADFB08A975249A2FC36434D35B59BB492C5FFFA70F4F2F50522872EC4B68053682C4E50AD7E69BBB2BE68168D4F6617983D914CF294C7A1CBADBFFE58311929417EF77E67F176DCC5B2F312DF3CC17B4432DCAB96DEDE8F247A8722CD9F57A24F562D34AC9F80D606ADB7B8EE627D3869671C4011D9ABFE626D50FAA1A8836E82817F44DD7443B6B5F264D4E70B6F78D463FE8C924625977047B9E04397B832964028ECC08C6A12D1A74B6580FDFBA5806D6E13A1754F93740F756266F9261C2EC8602BED655D3284941012B264ED5220CFB01B0A8497CE7FD3D1C1BF8BD0AFF2B37552AC50FC4B9474CC9BDC54504DF2665BEB0CEE1669AFFC60649E55B287CB7926D520107E3B0761FBE547262EC0ABFE3 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + cleartomark end + %APLT1End + %RBIEndFontSubset +/Times-Roman cguidfix +/F3.1/Times-Roman renmfont +%%EndPageSetup +0.60000002 i +0.25 0 0 0 setcmykcolor +q +0 0 126 111 rc +35.572285 74.939796 m +89.692589 74.939796 l +89.692589 87.539803 l +35.572285 87.539803 l +h +35.572285 74.939796 m +f +1 J +0 0 0 1 setcmykcolor +1 0 0 -1 -243 451 cm +279.0723 376.56021 m +333.1926 376.56021 l +333.1926 363.96021 l +279.0723 363.96021 l +h +279.0723 376.56021 m +S +0 i +1 0 0 -1 38.572285 82.960197 cm +/F1.1[ 8 0 0 -8 0 0]sf +-2.5 3 m +(!)s +1 0 0 -1 56.492188 82.960197 cm +/F2.1[ 8 0 0 -8 0 0]sf +-8.5 3 m +(!"#$%)[ 3.113281 4.000000 4.000000 2.664062 0.000000 ] xS +0.60000002 i +0 0 0 0 setcmykcolor +CM +35.572285 87.539803 m +89.692589 87.539803 l +89.692589 108.7796 l +35.572285 108.7796 l +h +35.572285 87.539803 m +f +0 0 0 1 setcmykcolor +1 0 0 -1 -243 451 cm +279.0723 363.96021 m +333.1926 363.96021 l +333.1926 342.7204 l +279.0723 342.7204 l +h +279.0723 363.96021 m +S +0 i +1 0 0 -1 61.801186 104.3801 cm +/F3.1[ 8 0 0 -8 0 0]sf +-18 3 m +(!"#$%&'\(\)%*)[ 4.000000 2.222656 4.000000 2.222656 3.550781 2.664062 2.664062 3.550781 3.550781 3.550781 0.000000 ] xS +1 0 0 -1 61.960957 95.380096 cm +/F2.1[ 8 0 0 -8 0 0]sf +-15.5 3 m +(&"##'\(\)*)[ 4.886719 4.000000 4.000000 4.000000 4.000000 4.000000 2.222656 0.000000 ] xS +0.60000002 i +0 0 0 0 setcmykcolor +CM +2.1152201 2.7402301 m +123.14922 2.7402301 l +123.14922 23.980431 l +2.1152201 23.980431 l +h +2.1152201 2.7402301 m +f +0 0 0 1 setcmykcolor +1 0 0 -1 -243 451 cm +245.61522 448.75977 m +366.64923 448.75977 l +366.64923 427.51956 l +245.61522 427.51956 l +h +245.61522 448.75977 m +S +0 i +1 0 0 -1 5.1152201 20.200399 cm +/F1.1[ 8 0 0 -8 0 0]sf +-2.5 3 m +(!)s +1 0 0 -1 63.535122 19.200399 cm +/F3.1[ 8 0 0 -8 0 0]sf +-49 3 m +(+",%&-"#.\(./.01"2%03456&\(,%7)[ 4.609375 2.222656 6.222656 3.550781 2.664062 2.664062 2.222656 4.000000 2.000000 3.550781 2.000000 2.222656 2.000000 4.449219 2.222656 2.222656 4.000000 3.550781 4.449219 4.000000 4.000000 5.777344 4.449219 2.664062 3.550781 6.222656 3.550781 0.000000 ] xS +1 0 0 -1 5.1152201 11.2004 cm +/F1.1[ 8 0 0 -8 0 0]sf +-2.5 3 m +(!)s +1 0 0 -1 22.53512 11.2004 cm +/F3.1[ 8 0 0 -8 0 0]sf +-8 3 m +(&8#-7)[ 2.664062 4.000000 4.000000 2.664062 0.000000 ] xS +0.60000002 i +0.25 0 0 0 setcmykcolor +CM +2.1152201 23.980499 m +123.14922 23.980499 l +123.14922 36.580101 l +2.1152201 36.580101 l +h +2.1152201 23.980499 m +f +0 0 0 1 setcmykcolor +1 0 0 -1 -243 451 cm +245.61522 427.5195 m +366.64923 427.5195 l +366.64923 414.91989 l +245.61522 414.91989 l +h +245.61522 427.5195 m +S +0 i +1 0 0 -1 4.1152201 32.799599 cm +/F1.1[ 8 0 0 -8 0 0]sf +-1.5 3 m +(")s +1 0 0 -1 55.535122 32.799599 cm +/F3.1[ 8 0 0 -8 0 0]sf +-40 3 m +('&\(,%./.01"2%03456&\(,%)[ 2.664062 2.664062 3.550781 6.222656 3.550781 2.000000 2.222656 2.000000 4.449219 2.222656 2.222656 4.000000 3.550781 4.449219 4.000000 4.000000 5.777344 4.449219 2.664062 3.550781 6.222656 0.000000 ] xS +0.60000002 i +1 0 0 -1 -243 451 cm +245.61522 414.91989 m +366.64899 414.91989 l +366.64899 400.5195 l +245.61522 400.5195 l +h +245.61522 414.91989 m +S +0 i +1 0 0 -1 62.664085 45.5 cm +-10 3 m +(+",%&)[ 4.609375 2.222656 6.222656 3.550781 0.000000 ] xS +0 J +0.60000002 i +1 0 0 0 setcmykcolor +1 0 0 -1 -243 451 cm +306.13089 386.39771 m +306.13089 400.48441 l +S +311.13278 386.39771 m +306.13089 377.99771 l +301.13089 386.39771 l +311.13278 386.39771 l +h +311.13278 386.39771 m +S +ep +end +%%Trailer +%%EOF diff --git a/chptr15/p832f1.eps b/chptr15/p832f1.eps index d20c068..086aaa0 100644 --- a/chptr15/p832f1.eps +++ b/chptr15/p832f1.eps @@ -1 +1,909 @@ -%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Adobe Illustrator(R) 8.0 %%AI8_CreatorVersion: 8.0.1 %%For: (a a) (EMILCOMP) %%Title: (p832f1.eps) %%CreationDate: (11/14/01) (9:58 AM) %%BoundingBox: 3 11 148 50 %%HiResBoundingBox: 3.0918 11.0879 147.542 49.9683 %%DocumentProcessColors: Cyan Black %%DocumentFonts: TimesTen-Roman %%DocumentSuppliedFonts: TimesTen-Roman %%DocumentSuppliedResources: procset Adobe_level2_AI5 1.2 0 %%+ procset Adobe_typography_AI5 1.0 1 %%+ procset Adobe_ColorImage_AI6 1.3 0 %%+ procset Adobe_Illustrator_AI5 1.3 0 %%+ procset Adobe_cshow 2.0 8 %%+ procset Adobe_shading_AI8 1.0 0 %AI5_FileFormat 4.0 %AI3_ColorUsage: Color %AI3_IncludePlacedImages %AI7_ImageSettings: 1 %%CMYKProcessColor: 1 1 1 1 ([Registration]) %%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) %%+ Options: 1 16 0 1 0 1 1 1 0 1 1 1 1 18 0 0 0 0 0 0 0 0 131071 -1 %%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () %AI3_TemplateBox: 76 29.5 76 29.5 %AI3_TileBox: -195 -292.5 392 476.5 %AI3_DocumentPreview: Macintosh_ColorPic %AI5_ArtSize: 150 144 %AI5_RulerUnits: 3 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI8_OpenToView: -29.5 104 4.71 1009 717 18 0 1 7 43 0 0 %AI5_OpenViewLayers: 7 %%PageOrigin:-195 -292.5 %%AI3_PaperRect:-12 781 600 -11 %%AI3_Margin:12 -12 -13 11 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI7_Thumbnail: 128 36 8 %%BeginData: 5598 Hex Bytes %0000330000660000990000CC0033000033330033660033990033CC0033FF %0066000066330066660066990066CC0066FF009900009933009966009999 %0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66 %00FF9900FFCC3300003300333300663300993300CC3300FF333300333333 %3333663333993333CC3333FF3366003366333366663366993366CC3366FF %3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99 %33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033 %6600666600996600CC6600FF6633006633336633666633996633CC6633FF %6666006666336666666666996666CC6666FF669900669933669966669999 %6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33 %66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF %9933009933339933669933999933CC9933FF996600996633996666996699 %9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33 %99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF %CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399 %CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933 %CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF %CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC %FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699 %FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33 %FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100 %000011111111220000002200000022222222440000004400000044444444 %550000005500000055555555770000007700000077777777880000008800 %000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB %DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF %00FF0000FFFFFF0000FF00FFFFFF00FFFFFF %524C45FDCAFFA8FD69FFA852FD07FFA8FD0BFF7DFF7DFD07FF527DFD60FF %7DFFA8A8FFA87D7D52A8FF7DA8FF7D7DA827A8A87DFFFF7DFD06FF52F827 %52FD5EFF7DFFA8FFFF7DA8A87DFF7DFF52FF7DFFFF7DFF7DFFFFFF7DFFFD %05A827F8F852FD5EFF7DFD04FFA87D527DFFA87D7DFF7DFFFF52FF52FFFF %FF52FD06FF52F87DFD5EFFA852FF7DA8FFFD047DA852A852FF52FFFF7D7D %7DFFFFFF7DFD06FF7DFD75FF7DFFA8A8FD7CFFA8FFA8FDE5FF52FD13FFA8 %FF7DA852FF52FF7DFFFFFF52FD05FFA8FF7DFD56FFF8F8FD07FFA87D7DA8 %FFA8A87DA87DFFA852A852A8FFA87DFF7DFFA87D7DFFA87DFF52FFFFFF7D %FD53FF52F8F8F8FD06A8FFFF7DFF7D7DA87DA852FFFFFF7DFFA82752FF7D %FF7DA8A8FF7DA87D7DA87DFFFFFF7DFD53FF7D52F8F8FD08FF52FF527DA8 %FFA8527DFFFF7DFFFFFF52A87DFF7D52FFFF7D52FFFFFF52FFFFFF52FD56 %FF27FD07FFA852A852A8525252A827A8FF52FF52A87DFF52FF52FF527D52 %FF277DFF7DFFFFFF7DFD7BFF7DFFFFA8A8FD7CFFA8FFA8FDFCFFFDFCFFFD %2EFF143C363C363C363C363C363C363C363C363C363C363C363C363C363C %363C363C363C363C363C363C363C363C363C363C363C363C363C363C363C %363C363684FD10FF85143C363C363C363C363C363C363C363C363C363C36 %3C363C363C363C363C363C363C363C363C363C363C363C363C363C85AFFF %AFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFF %AFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFF60AF %FD10FF60AFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAF %FFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFF6035FFA9FFA8FFA9FF %A8FFA9FFA8FFA9FFA8FFA9FFA8FFA9FFA8FFA9FFA8FFA9FFA8FFA9FFA8FF %A9FFA8FFA9FFA8FFA9FFA8FFA9FFA8FFA9FFA8FFA9FFA88584FD10FF607E %FFA9FFA8FFA9FFA8FFA9FFA8FFA9FFA8FFA9FFA8FFA9FFA8FFA9FFA8FFA9 %FFA8FFA9FFA8FFA9FFA8FFA9FFA8FFA9608BAFFFAFFFAFFFAFFFAFFFAFFF %AFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFF %AFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFF60AFFD10FF60AFAFFFAFFFAF %FFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAF %FFAFFFAFFFAFFFAFFFAFFF605AFFAFFFA8FF847D7D7D847DA87DAFFF7D7D %AFFFA8FF597D27FF52FFA8FFAFFFA8FFAFFFA8FFAFFF52A8AFFFA8FFAFFF %A8FFAFFF7D7DAFFFA8FF84FFA88584FD10FF847EFFAFFFA8FFAFFFA8FFAF %FFA8FFAFFF27A82E7D52FF59FFA8FFAFFFA8FFAFFFA8FFAFFFA8FFAFFFA8 %FFAFFFA8FFAF8485AFFF84FFAFA82EFF84FF59FF84FF84A852FF84A8AF52 %84FFA87D84A8AFFF84A852FF59FF59FFAF7D2EFFAFFF84A87DFF84A87DFF %52FF84A8AF5284FF60AFFD10FF60AFAFFFAFFFAFFFAFFFAFFFAFFFAF7DAF %FFAF7DAFFF84A884A852FF59FFA8A884FF597DAFFFAFFFAFFFAFFFAFFFAF %FF605AFFA8FF7EFFA87DF8A8A87DA97D52FF7E7D527D52A87D2728FF52FF %28FF52FF527D7D527E7DA87DA9527DFFA9527D7D7E527D7D7E7D527D52A8 %52FFA960143C363C363C363C363C363C363C363C363C7EFFA8FFA9FFA8FF %A9FFA8FFA9FF7DFFA9FF52FFA9FF52FF28FF27FF527D5252A9527DFFA9FF %A8FFA9FFA8FFA9FFA88585AFFFAFFFAFFFAFFF2EFF59FF597DAFFF597DAF %FFAFFFAF7D847DAF7DAF7DAFA85952597D84FF59A85952AFFF59FF84A859 %FF84A8597DAFFFAF7DAFFF608B6085608B6085608B6085608B6085608B3C %AFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAF7DAFFFAF7DAF7DAF7DAF7D52 %FFAFFF59FFAFFFAFFFAFFFAFFFAFFFAFFF6060FFA87D84FF7DA8597D7D52 %84527D5259527D5252FF52A852FF27FF2EA852A859FF52FF52FF52A8AFA8 %F8A8AF7D7DA8AF7D7DA884527D5252FF52A8AF8484FD10FF8584FFA8FFAF %FFA8FFAFFFA8FFAFFF27FFAFA827FFAFA827FF2EA827FF2E7D27A88452A8 %FFAFFFA8FFAFFFA8FFAFFFA88585AFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFF %AFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFF59FF %AFFF59FFAFFFAFFFAFFFAFFFAFFF60AFFD10FF60AFAFFFAFFFAFFFAFFFAF %FFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAF %FFAFFFAFFFAFFF6035FF2727F8272727F8272727F8272727F8272727F827 %2727F8272727F8272727F8272727F8272727F8272727F827F827F827F827 %F8272727F8272727A88584FD10FF607EFFA9FFA8FFA9FFA8FFA9FFA85227 %27F8272727F8272727F8272727F8272727F8277EFFA8FFA9FFA8FFA9FFA8 %FFA9608BAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFF %AFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFF %AFFFAFFF60AFFD10FF60AFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAF %FFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFFAFFF605AFF %AFFFA8FFAFFFA8FFAFFFA8FFAFFFA8FFAFFFA8FFAFFFA8FFAFFFA8FFAFFF %A8FFAFFFA8FFAFFFA8FFAFFFA8FFAFFFA8FFAFFFA8FFAFFFA8FFAFFFA885 %84FD10FF847EFFAFFFA8FFAFFFA8FFAFFFA8FFAFFFA8FFAFFFA8FFAFFFA8 %FFAFFFA8FFAFFFA8FFAFFFA8FFAFFFA8FFAFFFA8FFAF8485608560856085 %608560856085608560856085608560856085608560856085608560856085 %60856085608560856085608560856085608560856085608560FD11FFAF85 %608560856085608560856085608560856085608560856085608560856085 %6085608560856085608560856085608560FD7FFFFF %%EndData %%EndComments %%BeginProlog %%BeginResource: procset Adobe_level2_AI5 1.2 0 %%Title: (Adobe Illustrator (R) Version 5.0 Level 2 Emulation) %%Version: 1.2 0 %%CreationDate: (04/10/93) () %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) userdict /Adobe_level2_AI5 26 dict dup begin put /packedarray where not { userdict begin /packedarray { array astore readonly } bind def /setpacking /pop load def /currentpacking false def end 0 } if pop userdict /defaultpacking currentpacking put true setpacking /initialize { Adobe_level2_AI5 begin } bind def /terminate { currentdict Adobe_level2_AI5 eq { end } if } bind def mark /setcustomcolor where not { /findcmykcustomcolor { (AI8_CMYK_CustomColor) 6 packedarray } bind def /findrgbcustomcolor { (AI8_RGB_CustomColor) 5 packedarray } bind def /setcustomcolor { exch aload pop dup (AI8_CMYK_CustomColor) eq { pop pop 4 { 4 index mul 4 1 roll } repeat 5 -1 roll pop setcmykcolor } { dup (AI8_RGB_CustomColor) eq { pop pop 3 { 1 exch sub 3 index mul 1 exch sub 3 1 roll } repeat 4 -1 roll pop setrgbcolor } { pop 4 { 4 index mul 4 1 roll } repeat 5 -1 roll pop setcmykcolor } ifelse } ifelse } def } if /setAIseparationgray { false setoverprint 0 setgray /setseparationgray where{ pop setseparationgray }{ /setcolorspace where{ pop [/Separation (All) /DeviceCMYK {dup dup dup}] setcolorspace 1 exch sub setcolor }{ setgray }ifelse }ifelse } def /gt38? mark {version cvr cvx exec} stopped {cleartomark true} {38 gt exch pop} ifelse def userdict /deviceDPI 72 0 matrix defaultmatrix dtransform dup mul exch dup mul add sqrt put userdict /level2? systemdict /languagelevel known dup { pop systemdict /languagelevel get 2 ge } if put /level2ScreenFreq { begin 60 HalftoneType 1 eq { pop Frequency } if HalftoneType 2 eq { pop GrayFrequency } if HalftoneType 5 eq { pop Default level2ScreenFreq } if end } bind def userdict /currentScreenFreq level2? {currenthalftone level2ScreenFreq} {currentscreen pop pop} ifelse put level2? not { /setcmykcolor where not { /setcmykcolor { exch .11 mul add exch .59 mul add exch .3 mul add 1 exch sub setgray } def } if /currentcmykcolor where not { /currentcmykcolor { 0 0 0 1 currentgray sub } def } if /setoverprint where not { /setoverprint /pop load def } if /selectfont where not { /selectfont { exch findfont exch dup type /arraytype eq { makefont } { scalefont } ifelse setfont } bind def } if /cshow where not { /cshow { [ 0 0 5 -1 roll aload pop ] cvx bind forall } bind def } if } if cleartomark /anyColor? { add add add 0 ne } bind def /testColor { gsave setcmykcolor currentcmykcolor grestore } bind def /testCMYKColorThrough { testColor anyColor? } bind def userdict /composite? 1 0 0 0 testCMYKColorThrough 0 1 0 0 testCMYKColorThrough 0 0 1 0 testCMYKColorThrough 0 0 0 1 testCMYKColorThrough and and and put composite? not { userdict begin gsave /cyan? 1 0 0 0 testCMYKColorThrough def /magenta? 0 1 0 0 testCMYKColorThrough def /yellow? 0 0 1 0 testCMYKColorThrough def /black? 0 0 0 1 testCMYKColorThrough def grestore /isCMYKSep? cyan? magenta? yellow? black? or or or def /customColor? isCMYKSep? not def end } if end defaultpacking setpacking %%EndResource %%BeginResource: procset Adobe_typography_AI5 1.0 1 %%Title: (Typography Operators) %%Version: 1.0 1 %%CreationDate:(6/10/1996) () %%Copyright: ((C) 1987-1996 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_typography_AI5 68 dict dup begin put /initialize { begin begin Adobe_typography_AI5 begin Adobe_typography_AI5 { dup xcheck { bind } if pop pop } forall end end end Adobe_typography_AI5 begin } def /terminate { currentdict Adobe_typography_AI5 eq { end } if } def /modifyEncoding { /_tempEncode exch ddef /_pntr 0 ddef { counttomark -1 roll dup type dup /marktype eq { pop pop exit } { /nametype eq { _tempEncode /_pntr dup load dup 3 1 roll 1 add ddef 3 -1 roll put } { /_pntr exch ddef } ifelse } ifelse } loop _tempEncode } def /havefont { systemdict /languagelevel known { /Font resourcestatus dup { exch pop exch pop } if } { systemdict /FontDirectory get 1 index known { pop true } { systemdict /fileposition known { dup length 6 add exch Ss 6 250 getinterval cvs pop Ss exch 0 exch getinterval status { pop pop pop pop true } { false } ifelse } { pop false } ifelse } ifelse } ifelse } def /TE { StandardEncoding 256 array copy modifyEncoding /_nativeEncoding exch def } def /subststring { exch 2 index exch search { exch pop exch dup () eq { pop exch concatstring } { 3 -1 roll exch concatstring concatstring } ifelse exch pop true } { pop pop false } ifelse } def /concatstring { 1 index length 1 index length 1 index add string dup 0 5 index putinterval dup 2 index 4 index putinterval 4 1 roll pop pop pop } def % /TZ { dup type /arraytype eq { /_wv exch def } { /_wv 0 def } ifelse /_useNativeEncoding exch def 2 index havefont { 3 index 255 string cvs dup (_Symbol_) eq { pop 2 index findfont } { 1 index 0 eq { dup length 1 sub 1 exch getinterval cvn findfont } { pop 2 index findfont } ifelse } ifelse } { dup 1 eq { 2 index 64 string cvs dup (-90pv-RKSJ-) (-83pv-RKSJ-) subststring { exch pop dup havefont { findfont false } { pop true } ifelse } { pop dup (-90ms-RKSJ-) (-Ext-RKSJ-) subststring { exch pop dup havefont { findfont false } { pop true } ifelse } { pop pop true } ifelse } ifelse { 1 index 1 eq { /Ryumin-Light-Ext-RKSJ-V havefont {/Ryumin-Light-Ext-RKSJ-V} {/Courier} ifelse } { /Ryumin-Light-83pv-RKSJ-H havefont {/Ryumin-Light-83pv-RKSJ-H} {/Courier} ifelse } ifelse findfont [1 0 0.5 1 0 0] makefont } if } { /Courier findfont } ifelse } ifelse _wv type /arraytype eq { _wv makeblendedfont } if dup length 10 add dict begin mark exch { 1 index /FID ne { def } if cleartomark mark } forall pop /FontScript exch def /FontDirection exch def /FontRequest exch def /FontName exch def counttomark 0 eq { 1 _useNativeEncoding eq { /Encoding _nativeEncoding def } if cleartomark } { /Encoding load 256 array copy modifyEncoding /Encoding exch def } ifelse FontName currentdict end definefont pop } def /tr { _ax _ay 3 2 roll } def /trj { _cx _cy _sp _ax _ay 6 5 roll } def /a0 { /Tx { dup currentpoint 3 2 roll tr _psf newpath moveto tr _ctm _pss } ddef /Tj { dup currentpoint 3 2 roll trj _pjsf newpath moveto trj _ctm _pjss } ddef } def /a1 { W B } def /e0 { /Tx { tr _psf } ddef /Tj { trj _pjsf } ddef } def /e1 { W F } def /i0 { /Tx { tr sp } ddef /Tj { trj jsp } ddef } def /i1 { W N } def /o0 { /Tx { tr sw rmoveto } ddef /Tj { trj swj rmoveto } ddef } def /r0 { /Tx { tr _ctm _pss } ddef /Tj { trj _ctm _pjss } ddef } def /r1 { W S } def /To { pop _ctm currentmatrix pop } def /TO { iTe _ctm setmatrix newpath } def /Tp { pop _tm astore pop _ctm setmatrix _tDict begin /W { } def /h { } def } def /TP { end iTm 0 0 moveto } def /Tr { _render 3 le { currentpoint newpath moveto } if dup 8 eq { pop 0 } { dup 9 eq { pop 1 } if } ifelse dup /_render exch ddef _renderStart exch get load exec } def /iTm { _ctm setmatrix _tm concat _shift aload pop _lineorientation 1 eq { exch } if translate _scale aload pop _lineorientation 1 eq _yokoorientation 1 eq or { exch } if scale } def /Tm { _tm astore pop iTm 0 0 moveto } def /Td { _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto } def /iTe { _render -1 eq { } { _renderEnd _render get dup null ne { load exec } { pop } ifelse } ifelse /_render -1 ddef } def /Ta { pop } def /Tf { 1 index type /nametype eq { dup 0.75 mul 1 index 0.25 mul neg } if /_fontDescent exch ddef /_fontAscent exch ddef /_fontSize exch ddef /_fontRotateAdjust _fontAscent _fontDescent add 2 div neg ddef /_fontHeight _fontSize ddef findfont _fontSize scalefont setfont } def /Tl { pop neg 0 exch _leading astore pop } def /Tt { pop } def /TW { 3 npop } def /Tw { /_cx exch ddef } def /TC { 3 npop } def /Tc { /_ax exch ddef } def /Ts { 0 exch _shift astore pop currentpoint iTm moveto } def /Ti { 3 npop } def /Tz { count 1 eq { 100 } if 100 div exch 100 div exch _scale astore pop iTm } def /TA { pop } def /Tq { pop } def /Tg { pop } def /TG { pop } def /Tv { /_lineorientation exch ddef } def /TV { /_charorientation exch ddef } def /Ty { dup /_yokoorientation exch ddef 1 sub neg Tv } def /TY { pop } def /T~ { Tx } def /Th { pop pop pop pop pop } def /TX { pop } def /Tk { _fontSize mul 1000 div _lineorientation 0 eq { neg 0 } { 0 exch } ifelse rmoveto pop } def /TK { 2 npop } def /T* { _leading aload pop _lineorientation 0 ne { exch } if Td } def /T*- { _leading aload pop _lineorientation 0 ne { exch } if exch neg exch neg Td } def /T- { _ax neg 0 rmoveto _lineorientation 1 eq _charorientation 0 eq and { 1 TV _hyphen Tx 0 TV } { _hyphen Tx } ifelse } def /T+ { } def /TR { _ctm currentmatrix pop _tm astore pop iTm 0 0 moveto } def /TS { currentfont 3 1 roll /_Symbol_ findfont _fontSize scalefont setfont 0 eq { Tx } { Tj } ifelse setfont } def /Xb { pop pop } def /Tb /Xb load def /Xe { pop pop pop pop } def /Te /Xe load def /XB { } def /TB /XB load def currentdict readonly pop end setpacking % /X^ { currentfont 5 1 roll dup havefont { findfont _fontSize scalefont setfont } { pop exch } ifelse 2 index 0 eq { Tx } { Tj } ifelse pop pop setfont } def /T^ /X^ load def %%EndResource %%BeginProcSet: Adobe_ColorImage_AI6 1.3 0 userdict /Adobe_ColorImage_AI6 known not { userdict /Adobe_ColorImage_AI6 53 dict put } if userdict /Adobe_ColorImage_AI6 get begin /initialize { Adobe_ColorImage_AI6 begin Adobe_ColorImage_AI6 { dup type /arraytype eq { dup xcheck { bind } if } if pop pop } forall } def /terminate { end } def currentdict /Adobe_ColorImage_AI6_Vars known not { /Adobe_ColorImage_AI6_Vars 41 dict def } if Adobe_ColorImage_AI6_Vars begin /plateindex -1 def /_newproc null def /_proc1 null def /_proc2 null def /sourcearray 4 array def /_ptispace null def /_ptiname null def /_pti0 0 def /_pti1 0 def /_ptiproc null def /_ptiscale 0 def /_pticomps 0 def /_ptibuf 0 string def /_gtigray 0 def /_cticmyk null def /_rtirgb null def /XIEnable true def /XIType 0 def /XIEncoding 0 def /XICompression 0 def /XIChannelCount 0 def /XIBitsPerPixel 0 def /XIImageHeight 0 def /XIImageWidth 0 def /XIImageMatrix null def /XIRowBytes 0 def /XIFile null def /XIBuffer1 null def /XIBuffer2 null def /XIBuffer3 null def /XIDataProc null def /XIColorSpace /DeviceGray def /XIColorValues 0 def /XIPlateList false def end /ci6colorimage /colorimage where {/colorimage get}{null} ifelse def /ci6image systemdict /image get def /ci6curtransfer systemdict /currenttransfer get def /ci6curoverprint /currentoverprint where {/currentoverprint get}{{_of}} ifelse def /ci6foureq { 4 index ne { pop pop pop false }{ 4 index ne { pop pop false }{ 4 index ne { pop false }{ 4 index eq } ifelse } ifelse } ifelse } def /ci6testplate { Adobe_ColorImage_AI6_Vars begin /plateindex -1 def /setcmykcolor where { pop gsave 1 0 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 1 0 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 0 1 0 setcmykcolor systemdict /currentgray get exec 1 exch sub 0 0 0 1 setcmykcolor systemdict /currentgray get exec 1 exch sub grestore 1 0 0 0 ci6foureq { /plateindex 0 def }{ 0 1 0 0 ci6foureq { /plateindex 1 def }{ 0 0 1 0 ci6foureq { /plateindex 2 def }{ 0 0 0 1 ci6foureq { /plateindex 3 def }{ 0 0 0 0 ci6foureq { /plateindex 5 def } if } ifelse } ifelse } ifelse } ifelse pop pop pop pop } if plateindex end } def /ci6concatprocs { /packedarray where { pop dup type /packedarraytype eq 2 index type /packedarraytype eq or }{ false } ifelse { /_proc2 exch cvlit def /_proc1 exch cvlit def _proc1 aload pop _proc2 aload pop _proc1 length _proc2 length add packedarray cvx }{ /_proc2 exch cvlit def /_proc1 exch cvlit def /_newproc _proc1 length _proc2 length add array def _newproc 0 _proc1 putinterval _newproc _proc1 length _proc2 putinterval _newproc cvx } ifelse } def /ci6istint { type /arraytype eq } def /ci6isspot { dup type /arraytype eq { dup length 1 sub get /Separation eq }{ pop false } ifelse } def /ci6spotname { dup ci6isspot {dup length 2 sub get}{pop ()} ifelse } def /ci6altspace { aload pop pop pop ci6colormake } def /ci6numcomps { dup /DeviceGray eq { pop 1 }{ dup /DeviceRGB eq { pop 3 }{ /DeviceCMYK eq { 4 }{ 1 } ifelse } ifelse } ifelse } def /ci6marksplate { dup /DeviceGray eq { pop plateindex 3 eq }{ dup /DeviceRGB eq { pop plateindex 5 ne }{ dup /DeviceCMYK eq { pop plateindex 5 ne }{ dup ci6isspot { /findcmykcustomcolor where { pop dup length 2 sub get 0.1 0.1 0.1 0.1 5 -1 roll findcmykcustomcolor 1 setcustomcolor systemdict /currentgray get exec 1 ne }{ pop plateindex 5 ne } ifelse }{ pop plateindex 5 ne } ifelse } ifelse } ifelse } ifelse } def /ci6colormake { dup ci6numcomps exch 1 index 2 add 1 roll dup 1 eq {pop}{array astore} ifelse exch } def /ci6colorexpand { dup ci6spotname exch dup ci6istint { ci6altspace exch 4 1 roll }{ 1 3 1 roll } ifelse } def /ci6colortint { dup /DeviceGray eq { 3 1 roll 1 exch sub mul 1 exch sub exch }{ dup /DeviceRGB eq { 3 1 roll {1 exch sub 1 index mul 1 exch sub exch} forall pop 3 array astore exch }{ dup /DeviceCMYK eq { 3 1 roll {1 index mul exch} forall pop 4 array astore exch }{ 3 1 roll mul exch } ifelse } ifelse } ifelse } def /ci6colortocmyk { dup /DeviceGray eq { pop 1 exch sub 0 0 0 4 -1 roll 4 array astore }{ dup /DeviceRGB eq { pop aload pop _rgbtocmyk 4 array astore }{ dup /DeviceCMYK eq { pop }{ ci6altspace ci6colortint ci6colortocmyk } ifelse } ifelse } ifelse } def /ci6makeimagedict { 7 dict begin /ImageType 1 def /Decode exch def /DataSource exch def /ImageMatrix exch def /BitsPerComponent exch def /Height exch def /Width exch def currentdict end } def /ci6stringinvert { 0 1 2 index length 1 sub { dup 2 index exch get 255 exch sub 2 index 3 1 roll put } for } def /ci6stringknockout { 0 1 2 index length 1 sub { 255 2 index 3 1 roll put } for } def /ci6stringapply { 0 1 4 index length 1 sub { dup 4 index exch get 3 index 3 1 roll 3 index exec } for pop exch pop } def /ci6walkrgbstring { 0 3 index dup length 1 sub 0 3 3 -1 roll { 3 getinterval {} forall 5 index exec 3 index } for 5 {pop} repeat } def /ci6walkcmykstring { 0 3 index dup length 1 sub 0 4 3 -1 roll { 4 getinterval {} forall 6 index exec 3 index } for 5 { pop } repeat } def /ci6putrgbtograystr { .11 mul exch .59 mul add exch .3 mul add cvi 3 copy put pop 1 add } def /ci6putcmyktograystr { exch .11 mul add exch .59 mul add exch .3 mul add dup 255 gt { pop 255 } if 255 exch sub cvi 3 copy put pop 1 add } def /ci6rgbtograyproc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec XIBuffer3 dup 3 1 roll /ci6putrgbtograystr load exch ci6walkrgbstring end } def /ci6cmyktograyproc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec XIBuffer3 dup 3 1 roll /ci6putcmyktograystr load exch ci6walkcmykstring end } def /ci6separatecmykproc { Adobe_ColorImage_AI6_Vars begin sourcearray 0 get exec XIBuffer3 0 2 index plateindex 4 2 index length 1 sub { get 255 exch sub 3 copy put pop 1 add 2 index } for pop pop exch pop end } def /ci6compositeimage { dup 1 eq { pop pop image }{ /ci6colorimage load null ne { ci6colorimage }{ 3 1 roll pop sourcearray 0 3 -1 roll put 3 eq {/ci6rgbtograyproc}{/ci6cmyktograyproc} ifelse load image } ifelse } ifelse } def /ci6knockoutimage { gsave 0 ci6curtransfer exec 1 ci6curtransfer exec eq { 0 ci6curtransfer exec 0.5 lt }{ 0 ci6curtransfer exec 1 ci6curtransfer exec gt } ifelse {{pop 0}}{{pop 1}} ifelse systemdict /settransfer get exec ci6compositeimage grestore } def /ci6drawimage { ci6testplate -1 eq { pop ci6compositeimage }{ dup type /arraytype eq { dup length plateindex gt {plateindex get}{pop false} ifelse }{ { true }{ dup 1 eq {plateindex 3 eq}{plateindex 3 le} ifelse } ifelse } ifelse { dup 1 eq { pop pop ci6image }{ dup 3 eq { ci6compositeimage }{ pop pop sourcearray 0 3 -1 roll put /ci6separatecmykproc load ci6image } ifelse } ifelse }{ ci6curoverprint { 7 {pop} repeat }{ ci6knockoutimage } ifelse } ifelse } ifelse } def /ci6proctintimage { /_ptispace exch store /_ptiname exch store /_pti1 exch store /_pti0 exch store /_ptiproc exch store /_pticomps _ptispace ci6numcomps store /_ptiscale _pti1 _pti0 sub store level2? { _ptiname length 0 gt version cvr 2012 ge and { [/Separation _ptiname _ptispace {_ptiproc}] setcolorspace [_pti0 _pti1] ci6makeimagedict ci6image }{ [/Indexed _ptispace 255 {255 div _ptiscale mul _pti0 add _ptiproc}] setcolorspace [0 255] ci6makeimagedict ci6image } ifelse }{ _pticomps 1 eq { { dup { 255 div _ptiscale mul _pti0 add _ptiproc 255 mul cvi put } ci6stringapply } ci6concatprocs ci6image }{ { dup length _pticomps mul dup _ptibuf length ne {/_ptibuf exch string store}{pop} ifelse _ptibuf { exch _pticomps mul exch 255 div _ptiscale mul _pti0 add _ptiproc _pticomps 2 add -2 roll _pticomps 1 sub -1 0 { 1 index add 2 index exch 5 -1 roll 255 mul cvi put } for pop pop } ci6stringapply } ci6concatprocs false _pticomps /ci6colorimage load null eq {7 {pop} repeat}{ci6colorimage} ifelse } ifelse } ifelse } def /ci6graytintimage { /_gtigray 5 -1 roll store {1 _gtigray sub mul 1 exch sub} 4 1 roll /DeviceGray ci6proctintimage } def /ci6cmyktintimage { /_cticmyk 5 -1 roll store {_cticmyk {1 index mul exch} forall pop} 4 1 roll /DeviceCMYK ci6proctintimage } def /ci6rgbtintimage { /_rtirgb 5 -1 roll store {_rtirgb {1 exch sub 1 index mul 1 exch sub exch} forall pop} 4 1 roll /DeviceRGB ci6proctintimage } def /ci6tintimage { ci6testplate -1 eq { ci6colorexpand 3 -1 roll 5 -1 roll {0}{0 exch} ifelse 4 2 roll dup /DeviceGray eq { pop ci6graytintimage }{ dup /DeviceRGB eq { pop ci6rgbtintimage }{ pop ci6cmyktintimage } ifelse } ifelse }{ dup ci6marksplate { plateindex 5 lt { ci6colortocmyk plateindex get dup 0 eq ci6curoverprint and { 7 {pop} repeat }{ 1 exch sub exch {1 0}{0 1} ifelse () ci6graytintimage } ifelse }{ pop exch {0}{0 exch} ifelse 0 3 1 roll () ci6graytintimage } ifelse }{ ci6curoverprint { 8 {pop} repeat }{ pop pop pop {pop 1} 0 1 () /DeviceGray ci6proctintimage } ifelse } ifelse } ifelse } def /XINullImage { } def /XIImageMask { XIImageWidth XIImageHeight false [XIImageWidth 0 0 XIImageHeight neg 0 0] /XIDataProc load imagemask } def /XIImageTint { XIImageWidth XIImageHeight XIBitsPerPixel [XIImageWidth 0 0 XIImageHeight neg 0 0] /XIDataProc load XIType 3 eq XIColorValues XIColorSpace ci6tintimage } def /XIImage { XIImageWidth XIImageHeight XIBitsPerPixel [XIImageWidth 0 0 XIImageHeight neg 0 0] /XIDataProc load false XIChannelCount XIPlateList ci6drawimage } def /XG { pop pop } def /XF { 13 {pop} repeat } def /Xh { Adobe_ColorImage_AI6_Vars begin gsave /XIType exch def /XIImageHeight exch def /XIImageWidth exch def /XIImageMatrix exch def 0 0 moveto XIImageMatrix concat XIImageWidth XIImageHeight scale /_lp /null ddef _fc /_lp /imagemask ddef end } def /XH { Adobe_ColorImage_AI6_Vars begin grestore end } def /XIEnable { Adobe_ColorImage_AI6_Vars /XIEnable 3 -1 roll put } def /XC { Adobe_ColorImage_AI6_Vars begin ci6colormake /XIColorSpace exch def /XIColorValues exch def end } def /XIPlates { Adobe_ColorImage_AI6_Vars begin /XIPlateList exch def end } def /XI { Adobe_ColorImage_AI6_Vars begin gsave /XIType exch def cvi dup 256 idiv /XICompression exch store 256 mod /XIEncoding exch store pop pop /XIChannelCount exch def /XIBitsPerPixel exch def /XIImageHeight exch def /XIImageWidth exch def pop pop pop pop /XIImageMatrix exch def XIBitsPerPixel 1 eq { XIImageWidth 8 div ceiling cvi }{ XIImageWidth XIChannelCount mul } ifelse /XIRowBytes exch def XIEnable { /XIBuffer3 XIImageWidth string def XICompression 0 eq { /XIBuffer1 XIRowBytes string def XIEncoding 0 eq { {currentfile XIBuffer1 readhexstring pop} }{ {currentfile XIBuffer1 readstring pop} } ifelse }{ /XIBuffer1 256 string def /XIBuffer2 XIRowBytes string def {currentfile XIBuffer1 readline pop (%) anchorsearch {pop} if} /ASCII85Decode filter /DCTDecode filter /XIFile exch def {XIFile XIBuffer2 readstring pop} } ifelse /XIDataProc exch def XIType 1 ne { 0 setgray } if XIType 1 eq { XIImageMask }{ XIType 2 eq XIType 3 eq or { XIImageTint }{ XIImage } ifelse } ifelse }{ XINullImage } ifelse /XIPlateList false def grestore end } def end %%EndProcSet %%BeginResource: procset Adobe_Illustrator_AI5 1.3 0 %%Title: (Adobe Illustrator (R) Version 8.0 Full Prolog) %%Version: 1.3 0 %%CreationDate: (3/7/1994) () %%Copyright: ((C) 1987-1998 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_Illustrator_AI5_vars 112 dict dup begin put /_?cmyk false def /_eo false def /_lp /none def /_pf { } def /_ps { } def /_psf { } def /_pss { } def /_pjsf { } def /_pjss { } def /_pola 0 def /_doClip 0 def /cf currentflat def /_lineorientation 0 def /_charorientation 0 def /_yokoorientation 0 def /_tm matrix def /_renderStart [ /e0 /r0 /a0 /o0 /e1 /r1 /a1 /i0 ] def /_renderEnd [ null null null null /i1 /i1 /i1 /i1 ] def /_render -1 def /_shift [0 0] def /_ax 0 def /_ay 0 def /_cx 0 def /_cy 0 def /_leading [ 0 0 ] def /_ctm matrix def /_mtx matrix def /_sp 16#020 def /_hyphen (-) def /_fontSize 0 def /_fontAscent 0 def /_fontDescent 0 def /_fontHeight 0 def /_fontRotateAdjust 0 def /Ss 256 string def Ss 0 (fonts/) putinterval /_cnt 0 def /_scale [1 1] def /_nativeEncoding 0 def /_useNativeEncoding 0 def /_tempEncode 0 def /_pntr 0 def /_tDict 2 dict def /_hfname 100 string def /_hffound false def /Tx { } def /Tj { } def /CRender { } def /_AI3_savepage { } def /_gf null def /_cf 4 array def /_rgbf 3 array def /_if null def /_of false def /_fc { } def /_gs null def /_cs 4 array def /_rgbs 3 array def /_is null def /_os false def /_sc { } def /_pd 1 dict def /_ed 15 dict def /_pm matrix def /_fm null def /_fd null def /_fdd null def /_sm null def /_sd null def /_sdd null def /_i null def /_lobyte 0 def /_hibyte 0 def /_cproc null def /_cscript 0 def /_hvax 0 def /_hvay 0 def /_hvwb 0 def /_hvcx 0 def /_hvcy 0 def /_bitfont null def /_bitlobyte 0 def /_bithibyte 0 def /_bitkey null def /_bitdata null def /_bitindex 0 def /discardSave null def /buffer 256 string def /beginString null def /endString null def /endStringLength null def /layerCnt 1 def /layerCount 1 def /perCent (%) 0 get def /perCentSeen? false def /newBuff null def /newBuffButFirst null def /newBuffLast null def /clipForward? false def end userdict /Adobe_Illustrator_AI5 known not { userdict /Adobe_Illustrator_AI5 100 dict put } if userdict /Adobe_Illustrator_AI5 get begin /initialize { Adobe_Illustrator_AI5 dup begin Adobe_Illustrator_AI5_vars begin /_aicmykps where {pop /_?cmyk _aicmykps def}if discardDict { bind pop pop } forall dup /nc get begin { dup xcheck 1 index type /operatortype ne and { bind } if pop pop } forall end newpath } def /terminate { end end } def /_ null def /ddef { Adobe_Illustrator_AI5_vars 3 1 roll put } def /xput { dup load dup length exch maxlength eq { dup dup load dup length 2 mul dict copy def } if load begin def end } def /npop { { pop } repeat } def /hswj { dup stringwidth 3 2 roll { _hvwb eq { exch _hvcx add exch _hvcy add } if exch _hvax add exch _hvay add } cforall } def /vswj { 0 0 3 -1 roll { dup 255 le _charorientation 1 eq and { dup cstring stringwidth 5 2 roll _hvwb eq { exch _hvcy sub exch _hvcx sub } if exch _hvay sub exch _hvax sub 4 -1 roll sub exch 3 -1 roll sub exch } { _hvwb eq { exch _hvcy sub exch _hvcx sub } if exch _hvay sub exch _hvax sub _fontHeight sub } ifelse } cforall } def /swj { 6 1 roll /_hvay exch ddef /_hvax exch ddef /_hvwb exch ddef /_hvcy exch ddef /_hvcx exch ddef _lineorientation 0 eq { hswj } { vswj } ifelse } def /sw { 0 0 0 6 3 roll swj } def /vjss { 4 1 roll { dup cstring dup length 1 eq _charorientation 1 eq and { -90 rotate currentpoint _fontRotateAdjust add moveto gsave false charpath currentpoint 5 index setmatrix stroke grestore _fontRotateAdjust sub moveto _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto 90 rotate } { currentpoint _fontHeight sub 5 index sub 3 index _sp eq { 9 index sub } if currentpoint exch 4 index stringwidth pop 2 div sub exch _fontAscent sub moveto gsave 2 index false charpath 6 index setmatrix stroke grestore moveto pop pop } ifelse } cforall 6 npop } def /hjss { 4 1 roll { dup cstring gsave false charpath currentpoint 5 index setmatrix stroke grestore moveto _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto } cforall 6 npop } def /jss { _lineorientation 0 eq { hjss } { vjss } ifelse } def /ss { 0 0 0 7 3 roll jss } def /vjsp { 4 1 roll { dup cstring dup length 1 eq _charorientation 1 eq and { -90 rotate currentpoint _fontRotateAdjust add moveto false charpath currentpoint _fontRotateAdjust sub moveto _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto 90 rotate } { currentpoint _fontHeight sub 5 index sub 3 index _sp eq { 9 index sub } if currentpoint exch 4 index stringwidth pop 2 div sub exch _fontAscent sub moveto 2 index false charpath moveto pop pop } ifelse } cforall 6 npop } def /hjsp { 4 1 roll { dup cstring false charpath _sp eq { 5 index 5 index rmoveto } if 2 copy rmoveto } cforall 6 npop } def /jsp { matrix currentmatrix _lineorientation 0 eq {hjsp} {vjsp} ifelse } def /sp { matrix currentmatrix 0 0 0 7 3 roll _lineorientation 0 eq {hjsp} {vjsp} ifelse } def /pl { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add exch itransform } def /setstrokeadjust where { pop true setstrokeadjust /c { curveto } def /C /c load def /v { currentpoint 6 2 roll curveto } def /V /v load def /y { 2 copy curveto } def /Y /y load def /l { lineto } def /L /l load def /m { moveto } def } { /c { pl curveto } def /C /c load def /v { currentpoint 6 2 roll pl curveto } def /V /v load def /y { pl 2 copy curveto } def /Y /y load def /l { pl lineto } def /L /l load def /m { pl moveto } def } ifelse /d { setdash } def /cf { } def /i { dup 0 eq { pop cf } if setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def /XR { 0 ne /_eo exch ddef } def /H { } def /h { closepath } def /N { _pola 0 eq { _doClip 1 eq { _eo {eoclip} {clip} ifelse /_doClip 0 ddef } if newpath } { /CRender { N } ddef } ifelse } def /n { N } def /F { _pola 0 eq { _doClip 1 eq { gsave _pf grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _fc /_doClip 0 ddef } { _pf } ifelse } { /CRender { F } ddef } ifelse } def /f { closepath F } def /S { _pola 0 eq { _doClip 1 eq { gsave _ps grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc /_doClip 0 ddef } { _ps } ifelse } { /CRender { S } ddef } ifelse } def /s { closepath S } def /B { _pola 0 eq { _doClip 1 eq gsave F grestore { gsave S grestore _eo {eoclip} {clip} ifelse newpath /_lp /none ddef _sc /_doClip 0 ddef } { S } ifelse } { /CRender { B } ddef } ifelse } def /b { closepath B } def /W { /_doClip 1 ddef } def /* { count 0 ne { dup type /stringtype eq { pop } if } if newpath } def /u { } def /U { } def /q { _pola 0 eq { gsave } if } def /Q { _pola 0 eq { grestore } if } def /*u { _pola 1 add /_pola exch ddef } def /*U { _pola 1 sub /_pola exch ddef _pola 0 eq { CRender } if } def /D { pop } def /*w { } def /*W { } def /` { /_i save ddef clipForward? { nulldevice } if 6 1 roll 4 npop concat pop userdict begin /showpage { } def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [] 0 setdash /setstrokeadjust where {pop false setstrokeadjust} if newpath 0 setgray false setoverprint } def /~ { end _i restore } def /_rgbtocmyk { 3 { 1 exch sub 3 1 roll } repeat 3 copy 1 4 1 roll 3 { 3 index 2 copy gt { exch } if pop 4 1 roll } repeat pop pop pop 4 1 roll 3 { 3 index sub 3 1 roll } repeat 4 -1 roll } def /setrgbfill { _rgbf astore pop /_fc { _lp /fill ne { _of setoverprint _rgbf aload pop setrgbcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /setrgbstroke { _rgbs astore pop /_sc { _lp /stroke ne { _os setoverprint _rgbs aload pop setrgbcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /O { 0 ne /_of exch ddef /_lp /none ddef } def /R { 0 ne /_os exch ddef /_lp /none ddef } def /g { /_gf exch ddef /_fc { _lp /fill ne { _of setoverprint _gf setgray /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /G { /_gs exch ddef /_sc { _lp /stroke ne { _os setoverprint _gs setgray /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /k { _cf astore pop /_fc { _lp /fill ne { _of setoverprint _cf aload pop setcmykcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /K { _cs astore pop /_sc { _lp /stroke ne { _os setoverprint _cs aload pop setcmykcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /Xa { _?cmyk { 3 npop k }{ setrgbfill 4 npop } ifelse } def /XA { _?cmyk { 3 npop K }{ setrgbstroke 4 npop } ifelse } def /Xs { /_gf exch ddef 5 npop /_fc { _lp /fill ne { _of setoverprint _gf setAIseparationgray /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /XS { /_gs exch ddef 5 npop /_sc { _lp /stroke ne { _os setoverprint _gs setAIseparationgray /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /Xx { exch /_gf exch ddef 0 eq { findcmykcustomcolor }{ _?cmyk {true}{/findrgbcustomcolor where{pop false}{true}ifelse}ifelse { 4 1 roll 3 npop findcmykcustomcolor }{ 8 -4 roll 4 npop findrgbcustomcolor } ifelse } ifelse /_if exch ddef /_fc { _lp /fill ne { _of setoverprint _if _gf 1 exch sub setcustomcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /XX { exch /_gs exch ddef 0 eq { findcmykcustomcolor }{ _?cmyk {true}{/findrgbcustomcolor where{pop false}{true}ifelse}ifelse { 4 1 roll 3 npop findcmykcustomcolor }{ 8 -4 roll 4 npop findrgbcustomcolor } ifelse } ifelse /_is exch ddef /_sc { _lp /stroke ne { _os setoverprint _is _gs 1 exch sub setcustomcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /x { /_gf exch ddef findcmykcustomcolor /_if exch ddef /_fc { _lp /fill ne { _of setoverprint _if _gf 1 exch sub setcustomcolor /_lp /fill ddef } if } ddef /_pf { _fc _eo {eofill} {fill} ifelse } ddef /_psf { _fc hvashow } ddef /_pjsf { _fc hvawidthshow } ddef /_lp /none ddef } def /X { /_gs exch ddef findcmykcustomcolor /_is exch ddef /_sc { _lp /stroke ne { _os setoverprint _is _gs 1 exch sub setcustomcolor /_lp /stroke ddef } if } ddef /_ps { _sc stroke } ddef /_pss { _sc ss } ddef /_pjss { _sc jss } ddef /_lp /none ddef } def /XK { 3 -1 roll pop 0 eq { 1 exch sub 3 {dup 3 1 roll mul 5 1 roll} repeat mul 4 1 roll K } { 1 exch sub 4 1 roll 3 {1 exch sub 3 index mul 1 exch sub 3 1 roll} repeat 4 -1 roll pop XA } ifelse } def /Xk { 3 -1 roll pop 0 eq { 1 exch sub 3 {dup 3 1 roll mul 5 1 roll} repeat mul 4 1 roll k } { 1 exch sub 4 1 roll 3 {1 exch sub 3 index mul 1 exch sub 3 1 roll} repeat 4 -1 roll pop Xa } ifelse } def /A { pop } def /annotatepage { userdict /annotatepage 2 copy known {get exec} {pop pop} ifelse } def /XT { pop pop } def /Xt { pop } def /discard { save /discardSave exch store discardDict begin /endString exch store gt38? { 2 add } if load stopped pop end discardSave restore } bind def userdict /discardDict 7 dict dup begin put /pre38Initialize { /endStringLength endString length store /newBuff buffer 0 endStringLength getinterval store /newBuffButFirst newBuff 1 endStringLength 1 sub getinterval store /newBuffLast newBuff endStringLength 1 sub 1 getinterval store } def /shiftBuffer { newBuff 0 newBuffButFirst putinterval newBuffLast 0 currentfile read not { stop } if put } def 0 { pre38Initialize mark currentfile newBuff readstring exch pop { { newBuff endString eq { cleartomark stop } if shiftBuffer } loop } { stop } ifelse } def 1 { pre38Initialize /beginString exch store mark currentfile newBuff readstring exch pop { { newBuff beginString eq { /layerCount dup load 1 add store } { newBuff endString eq { /layerCount dup load 1 sub store layerCount 0 eq { cleartomark stop } if } if } ifelse shiftBuffer } loop } if } def 2 { mark { currentfile buffer {readline} stopped { % assume error was due to overfilling the buffer }{ not { stop } if endString eq { cleartomark stop } if }ifelse } loop } def 3 { /beginString exch store /layerCnt 1 store mark { currentfile buffer {readline} stopped { % assume error was due to overfilling the buffer }{ not { stop } if dup beginString eq { pop /layerCnt dup load 1 add store } { endString eq { layerCnt 1 eq { cleartomark stop } { /layerCnt dup load 1 sub store } ifelse } if } ifelse }ifelse } loop } def end userdict /clipRenderOff 15 dict dup begin put { /n /N /s /S /f /F /b /B } { { _doClip 1 eq { /_doClip 0 ddef _eo {eoclip} {clip} ifelse } if newpath } def } forall /Tr /pop load def /Bb {} def /BB /pop load def /Bg {12 npop} def /Bm {6 npop} def /Bc /Bm load def /Bh {4 npop} def end /Lb { 6 npop 7 2 roll 5 npop 0 eq { 0 eq { (%AI5_BeginLayer) 1 (%AI5_EndLayer--) discard } { /clipForward? true def /Tx /pop load def /Tj /pop load def currentdict end clipRenderOff begin begin } ifelse } { 0 eq { save /discardSave exch store } if } ifelse } bind def /LB { discardSave dup null ne { restore } { pop clipForward? { currentdict end end begin /clipForward? false ddef } if } ifelse } bind def /Pb { pop pop 0 (%AI5_EndPalette) discard } bind def /Np { 0 (%AI5_End_NonPrinting--) discard } bind def /Ln /pop load def /Ap /pop load def /Ar { 72 exch div 0 dtransform dup mul exch dup mul add sqrt dup 1 lt { pop 1 } if setflat } def /Mb { q } def /Md { } def /MB { Q } def /nc 4 dict def nc begin /setgray { pop } bind def /setcmykcolor { 4 npop } bind def /setrgbcolor { 3 npop } bind def /setcustomcolor { 2 npop } bind def currentdict readonly pop end /XP { 4 npop } bind def /XD { pop } bind def end setpacking %%EndResource %%BeginResource: procset Adobe_cshow 2.0 8 %%Title: (Writing System Operators) %%Version: 2.0 8 %%CreationDate: (1/23/89) () %%Copyright: ((C) 1992-1996 Adobe Systems Incorporated All Rights Reserved) currentpacking true setpacking userdict /Adobe_cshow 14 dict dup begin put /initialize { Adobe_cshow begin Adobe_cshow { dup xcheck { bind } if pop pop } forall end Adobe_cshow begin } def /terminate { currentdict Adobe_cshow eq { end } if } def /cforall { /_lobyte 0 ddef /_hibyte 0 ddef /_cproc exch ddef /_cscript currentfont /FontScript known { currentfont /FontScript get } { -1 } ifelse ddef { /_lobyte exch ddef _hibyte 0 eq _cscript 1 eq _lobyte 129 ge _lobyte 159 le and _lobyte 224 ge _lobyte 252 le and or and _cscript 2 eq _lobyte 161 ge _lobyte 254 le and and _cscript 3 eq _lobyte 161 ge _lobyte 254 le and and _cscript 25 eq _lobyte 161 ge _lobyte 254 le and and _cscript -1 eq or or or or and { /_hibyte _lobyte ddef } { _hibyte 256 mul _lobyte add _cproc /_hibyte 0 ddef } ifelse } forall } def /cstring { dup 256 lt { (s) dup 0 4 3 roll put } { dup 256 idiv exch 256 mod (hl) dup dup 0 6 5 roll put 1 4 3 roll put } ifelse } def /clength { 0 exch { 256 lt { 1 } { 2 } ifelse add } cforall } def /hawidthshow { { dup cstring show _hvax _hvay rmoveto _hvwb eq { _hvcx _hvcy rmoveto } if } cforall } def /vawidthshow { { dup 255 le _charorientation 1 eq and { -90 rotate 0 _fontRotateAdjust rmoveto cstring _hvcx _hvcy _hvwb _hvax _hvay 6 -1 roll awidthshow 0 _fontRotateAdjust neg rmoveto 90 rotate } { currentpoint _fontHeight sub exch _hvay sub exch _hvax sub 2 index _hvwb eq { exch _hvcy sub exch _hvcx sub } if 3 2 roll cstring dup stringwidth pop 2 div neg _fontAscent neg rmoveto show moveto } ifelse } cforall } def /hvawidthshow { 6 1 roll /_hvay exch ddef /_hvax exch ddef /_hvwb exch ddef /_hvcy exch ddef /_hvcx exch ddef _lineorientation 0 eq { hawidthshow } { vawidthshow } ifelse } def /hvwidthshow { 0 0 3 -1 roll hvawidthshow } def /hvashow { 0 0 0 6 -3 roll hvawidthshow } def /hvshow { 0 0 0 0 0 6 -1 roll hvawidthshow } def currentdict readonly pop end setpacking %%EndResource %%BeginResource: procset Adobe_shading_AI8 1.0 0 %%Title: (Adobe Illustrator 8 Shading Procset) %%Version: 1.0 0 %%CreationDate: (12/17/97) () %%Copyright: ((C) 1987-1997 Adobe Systems Incorporated All Rights Reserved) userdict /defaultpacking currentpacking put true setpacking userdict /Adobe_shading_AI8 10 dict dup begin put /initialize { Adobe_shading_AI8 begin Adobe_shading_AI8 bdprocs Mesh /initialize get exec } def /terminate { currentdict Adobe_shading_AI8 eq { end } if } def /bdprocs { { dup xcheck 1 index type /arraytype eq and { bind } if pop pop } forall } def /X! {pop} def /X# {pop pop} def /Mesh 40 dict def Mesh begin /initialize { Mesh bdprocs Mesh begin /emulate? /AI8MeshEmulation where { pop AI8MeshEmulation }{ systemdict /shfill known not } ifelse def end } def /bd { shadingdict begin } def /paint { emulate? { end }{ /_lp /none ddef _fc /_lp /none ddef /AIColorSpace AIColorSpace tocolorspace store /ColorSpace AIColorSpace topsspace store version_ge_3010.106 not systemdict /setsmoothness known and { 0.0001 setsmoothness } if composite? { /DataSource getdatasrc def Matrix concat currentdict end shfill }{ AIColorSpace makesmarks AIPlateList markingplate and not isoverprint and { end }{ /ColorSpace /DeviceGray store /Decode [0 1 0 1 0 1] store /DataSource getplatesrc def Matrix concat currentdict end shfill } ifelse } ifelse } ifelse } def /shadingdict 12 dict def shadingdict begin /ShadingType 6 def /BitsPerCoordinate 16 def /BitsPerComponent 8 def /BitsPerFlag 8 def end /datafile null def /databuf 256 string def /dataptr 0 def /srcspace null def /srcchannels 0 def /dstchannels 0 def /dstplate 0 def /srctodstcolor null def /getplatesrc { /srcspace AIColorSpace store /srcchannels AIColorSpace getnchannels store /dstchannels 1 store /dstplate getplateindex store /srctodstcolor srcspace makesmarks { dstplate 4 eq { {1 exch sub} }{ {srcspace tocmyk 3 dstplate sub index 1 exch sub 5 1 roll 4 {pop} repeat} } ifelse }{ {srcchannels {pop} repeat 1} } ifelse store /datafile getdatasrc store /rdpatch168 load DataLength () /SubFileDecode filter } def /getdatasrc { /rdcmntline load /ASCII85Decode filter } def /rdpatch168 { /dataptr 0 store 49 rdcount 4 { dup {pop srcchannels getint8} if dup {pop srctodstcolor dstchannels putint8 true} if } repeat {databuf 0 dataptr getinterval}{()} ifelse } def /rdpatch3216 { /dataptr 0 store 97 rdcount 4 { dup {pop srcchannels getint16} if dup {pop srctodstcolor dstchannels putint16 true} if } repeat {databuf 0 dataptr getinterval}{()} ifelse } def /rdcount { dup 0 gt { datafile databuf dataptr 4 -1 roll getinterval readstring exch length dataptr add /dataptr exch store }{ true } ifelse } def /getint8 { mark true 3 -1 roll { dup {pop datafile read} if dup {pop 255 div true} if } repeat { counttomark 1 add -1 roll pop true }{ cleartomark false } ifelse } def /putint8 { dup dataptr add /dataptr exch store dataptr exch { 1 sub exch 255 mul cvi databuf 2 index 3 -1 roll put } repeat pop } def /getint16 { mark true 3 -1 roll { dup {pop datafile read} if dup {pop 256 mul datafile read} if dup {pop add 65535 div true} if } repeat { counttomark 1 add -1 roll pop true }{ cleartomark false } ifelse } def /putint16 { dup 2 mul dataptr add /dataptr exch store dataptr exch { 2 sub exch 65535 mul cvi dup 256 idiv databuf 3 index 3 -1 roll put 256 mod databuf 2 index 1 add 3 -1 roll put } repeat pop } def /srcbuf 256 string def /rdcmntline { currentfile srcbuf readline pop (%) anchorsearch {pop} if } def /getplateindex { 0 [cyan? magenta? yellow? black? customColor?] {{exit} if 1 add} forall } def /aicsarray 4 array def /aicsaltvals 4 array def /aicsaltcolr aicsaltvals def /tocolorspace { dup type /arraytype eq { mark exch aload pop aicsarray 0 3 -1 roll put aicsarray 1 3 -1 roll put dup aicsarray 2 3 -1 roll put gettintxform aicsarray 3 3 -1 roll put counttomark aicsaltvals 0 3 -1 roll getinterval /aicsaltcolr exch store aicsaltcolr astore pop pop aicsarray } if } def /subtintxform {aicsaltcolr {1 index mul exch} forall pop} def /addtintxform {aicsaltcolr {1 sub 1 index mul 1 add exch} forall pop} def /gettintxform { /DeviceRGB eq {/addtintxform}{/subtintxform} ifelse load } def /getnchannels { dup type /arraytype eq {0 get} if colorspacedict exch get begin Channels end } def /makesmarks { composite? { pop true }{ dup dup type /arraytype eq {0 get} if colorspacedict exch get begin MarksPlate end } ifelse } def /markingplate { composite? { pop true }{ dup type /arraytype eq { dup length getplateindex gt {getplateindex get}{pop false} ifelse } if } ifelse } def /tocmyk { dup dup type /arraytype eq {0 get} if colorspacedict exch get begin ToCMYK end } def /topsspace { dup dup type /arraytype eq {0 get} if colorspacedict exch get begin ToPSSpace end } def /colorspacedict 5 dict dup begin /DeviceGray 4 dict dup begin /Channels 1 def /MarksPlate {pop black?} def /ToCMYK {pop 1 exch sub 0 0 0 4 -1 roll} def /ToPSSpace {} def end def /DeviceRGB 4 dict dup begin /Channels 3 def /MarksPlate {pop isCMYKSep?} def /ToCMYK {pop _rgbtocmyk} def /ToPSSpace {} def end def /DeviceCMYK 4 dict dup begin /Channels 4 def /MarksPlate {pop isCMYKSep?} def /ToCMYK {pop} def /ToPSSpace {} def end def /Separation 4 dict dup begin /Channels 1 def /MarksPlate { /findcmykcustomcolor where { pop dup 1 exch ToCMYK 5 -1 roll 1 get findcmykcustomcolor 1 setcustomcolor systemdict /currentgray get exec 1 ne }{ pop false } ifelse } def /ToCMYK { dup 2 get mark exch 4 2 roll 3 get exec counttomark -1 roll tocmyk 5 -1 roll pop } def /ToPSSpace {} def end def /Process 4 dict dup begin /Channels 1 def /MarksPlate { isCMYKSep? { 1 exch ToCMYK 4 array astore getplateindex get 0 ne }{ pop false } ifelse } def /ToCMYK { dup 2 get mark exch 4 2 roll 3 get exec counttomark -1 roll tocmyk 5 -1 roll pop } def /ToPSSpace { 4 array copy dup 0 /Separation put } def end def end def /isoverprint { /currentoverprint where {pop currentoverprint}{_of} ifelse } def /version_ge_3010.106 { version {cvr} stopped { pop false }{ 3010.106 ge } ifelse } def end end defaultpacking setpacking %%EndResource %%EndProlog %%BeginSetup userdict /_useSmoothShade false put userdict /_aicmykps false put userdict /_forceToCMYK false put Adobe_level2_AI5 /initialize get exec Adobe_cshow /initialize get exec Adobe_Illustrator_AI5_vars Adobe_Illustrator_AI5 Adobe_typography_AI5 /initialize get exec Adobe_ColorImage_AI6 /initialize get exec Adobe_shading_AI8 /initialize get exec Adobe_Illustrator_AI5 /initialize get exec %AI3_BeginRider currentpacking true setpacking %%BeginFont: TimesTen-Roman %!PS-AdobeFont-1.0: TimesTen-Roman 001.001 %%CreationDate: Tue Nov 13 14:05:42 1990 %%VMusage: 29467 36359 %% The digitally encoded machine readable software for producing the %% Typefaces licensed to you is copyrighted (c) 1988, 1990 Adobe Systems. All %% Rights Reserved. This software is the property of Adobe Systems %% Incorporated and its licensors, and may not be reproduced, used, %% displayed, modified, disclosed or transferred without the express written %% approval of Adobe. The digitally encoded machine readable outline data %% for producing the Typefaces licensed to you is copyrighted (c) 1981 %% Linotype AG and/or its subsidiaries. All Rights Reserved. This data is %% the property of Linotype AG and/or its subsidiaries and may not be %% reproduced, used, displayed, modified, disclosed or transferred without %% the express written approval of Linotype AG and/or its subsidiaries. 10 %% Times* Roman 05249 %% Times is a trademark of Linotype AG and/or its subsidiaries. 11 dict begin /FontInfo 10 dict dup begin /version (001.001) readonly def /Notice (Copyright (c) 1988, 1990 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype AG and/or its subsidiaries.) readonly def /Copyright ( The digitally encoded machine readable software for producing the Typefaces licensed to you is copyrighted (c) 1988, 1990 Adobe Systems. All Rights Reserved. This software is the property of Adobe Systems Incorporated and its licensors, and may not be reproduced, used, displayed, modified, disclosed or transferred without the express written approval of Adobe. The digitally encoded machine readable outline data for producing the Typefaces licensed to you is copyrighted (c) 1981 Linotype AG and/or its subsidiaries. All Rights Reserved. This data is the property of Linotype AG and/or its subsidiaries and may not be reproduced, used, displayed, modified, disclosed or transferred without the express written approval of Linotype AG and/or its subsidiaries. 10 Times* Roman 05249 ) readonly def /FullName (Times 10 Roman) readonly def /FamilyName (TimesTen) readonly def /Weight (Roman) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /FontName /TimesTen-Roman def /Encoding StandardEncoding def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /UniqueID 33454 def /FontBBox{-170 -240 1000 935}readonly def currentdict end currentfile eexec 51b62e6485ff502ba0e8c3bcb14f6df4972381b4871adb09ac9eb79905b00499b284d3bc90f488ed47606695c14ace6e5337c00685f36ee2c0a1233aeca83a807417f1870e6f126918756d17aa284826c2964c8e734b64842874c6005391a75b8f8303745e9c4f94828e10908c61a58271cd38185f3d7704d452d4a652419d 25e4a46d383fe3aac944f6a617d700dff78e6ccc82da82c9bc5f020ab9ee6e25daa1e0cf17cae6ca458b0b3bafb1d380dc4c7e6ffa6bdf1558786cbd6467946be05a920199a251fc35d28f6d4b8902f468b31c03124bbbd9a4faba60c491d17ebd8208279a4fd59061d91ff6e369f4f66e67e6ded1c82c0141120838f851d9 8e405b14fd0e04ed329f016107e6206e9c9d67a7e33def897d2f79f491b64124220ce830d9c723f002428556a6ca7a39c1fc69176dc03a5816d67c95b2f9d97e00450c23dba119c1239a5addff139e5cd228353cd96a466a6c20ace8d2937c63deda65e99e7431e7a5ae2f86bf85b44cafe6f279869cc893d6b3f4ccbc210d 2720c1536962867d23f57c41db6e47edaf612b15866d7beb42f68d55f5d962f624c975305fa1b7faf241a8ab9494f1bceb958efd210832088b660401956c5b14d821f1aadfa9431e4bdb0e332285419de9a2b3bb99aec22122b48f22eb6a3f9bde585265d803eb67692abfcb28b8d945f5c2ed4c4e94c3816678f7d9a4e5fc 324ea6c0a20da9787aa4cfc1d9bc73099b44836310e3490f5e4cbd27939138e746385a57a6bd53a97473189b7f1a60cff16282156385e51432a7a87ce4cec8bc2e021add7b19783740e8f7fc628b6c71bfe43e4b35948260149c96ca6ebbf0706b3d38ab61a01e20ed7acbceaebc21e646da9db30dacaaeba11a6fc1426262 3a0ce8e0e9e57cd482a25667c3040b965b712457f44c3a1413e63f559276bf384b385fc9feef93cb188ea08a73e8bccf3e0d5dfd2efbc5302ccba867e561becfc9db7e7da2203df4693c3aae0fd1792ec06c8244cc7998c64379f67d46d45eb6e20b215948777b353538d4dc3f1b7c158fe0072aee473c4ededf605490e58a b6af02548b14c96bc8c0b47e19d7d955fd019029a8d6a23b4f3e8e9ef5c5033d4c395ca0d63b83737e5bb1122f10e401ec9e127d056a4a283df85dc40cdd2ded2c16dcd06066a067c907f17439719c569a573a79ccd058bf1336fe2cc0a1e921328aa43a8112548c286374763ca60ee973e1281ba472c651b6c0e4db280733 49bcad08ddd302bede73f545d7765da889501aa89bfb4705319e03c8992994547620b6ff6d300b674b39d0fd2c66eb3f32e1faca71bd775d168451ff7951bf7836fbb8bafbb0d412652fdd149bdd0da38d05e1fc22efac25ec67cd3921fee95ad6270751c0044b5f26e5f97ee7fa05cc5b34bc25825e5deb81e613a4684e99 ed9e61da035b5d3d8dfa178282d911e1bf8564ff657d7a02a43164d87af4f24447a142dee2462e4041ea77cb71312dca73c63cb785390412dc9bdff494c9bb09a402e3d2d148afbdd8c68f846703ad61a68fb5860425a0a66b863a82193af0d61849898039e3e524fcf40edd5be7d223f76533c466c1612cbdcedf63a67866 a2735137c452931b41fab734278171ef27a8126e518eec5d9bb3870fda3a19a4d9f9021d2131047cde97c614054fe17fd9e3970c1801701022a7b69ea1be414fbbb025bc62165cd0ab1954db74d1421b2e233346d6c5559634a7cf42562909fd8b505294f65a9979f2283665ef4785d07682db2d717f52c70b1cecf007b0af 22592dc9688346820526afd221f749cdafec2eb64db7060981c0d94a18bb3b61bf8b85668a6f63147ba54a1bb05e94abe9db2d7a8ab87e22ba6b2531826a242c6caf7d0ae98c694e5ba06b869a13dbacb6e3bd8e69c7eb84e9764345e1435227689cebe154566cbe7c25cc0f3074a56cd3f34b8992c25a463b7beaeac1cd4e 433947b36c636eb0dc19c1b3ae516b3dc15988e7531145702745437bcbf3a8cb6ea25d04e14fbf09f964064c491bcaa37e544540fa7ff1f0400c0291ac583091ea13a0c9d17543da820dd9c5af45069afdfab5a9d77e517abfcf1416d57ccd346b64de6efe447e2c637cd97cd1f2079bd9703b66b8e5337211096aec287ee0 c4f0faf924e545fc237f12812c403aea2047a4341f9ff8bf0fd12ebeb418318a398b8aa7af5e54c2ffde9b1db2fa31637f0f93d999727251d5872ca1b05469e4ab8e21d413637f89aca4e09ef5044524a9f4373df7894a63d567679f5829c91564696985b0c6bc9ed200a6af87b8e9e5f79c767c6cc7fc91fda820b5f93906 441e51ab2478f8a58c7c2c6ab0a05a8f919a4814a4f02e7c762f7d3fb0b4f93822b8ac1b9e0ceab70a9912a873fa4f3241fe187f69ec9b7ff08f9ad83802c008678089553368525eab86aaef316f90750d8333d90f27f791aaff106c0be6cbc3315751a0049ed44aecb448aa29595ad68c8d3971b5681c3e96976903263259 6949d8670fbc1621de97149261408faa0457c024b5be2977da6f998a28e0f2eea1716d3bdcaf737a46fbaf2d74cd475517d9d817da00587181add8b88f023a1a61be8f56b4368d1fc3518966e1f71ba1c29f330fbce755432d5eb0d2c89e9e26e5404b71839f9889245060e4123cc30396db16c2dff1478d201928102b57ca 172615a85645c637f3e6709788baee28b5d5cb9a1f4987f4422b5008f83cce1c184163d20b27b99fa58208e085f229f4f6819e04aa9311ec234d08afbafcba0e4435be9f8f9c31ad6a2bd09badc4b026d06977093eb0d2b8315b1c5dc76213c0ccb2545288bf96d063e4c9a8f1654f3f89f9cc880928b765354add5cbaa42f a469c5d22111244c25eccb32c1b9012f843c2a6fcaf7600029fa3269c4ca8fcaaa2ae89cdf27b0f24a45c7082769e086f4b74e7ab02e80acbfcc0308ea50903e40d203f4eeb282556778b0918c240d96039ffd1536dc31e62b8ae304fd54844d0c4804c3020cd66bf2a8ce41ba676babd00d84b6d0d276bce91688ec3823c7 4cdd6ec411a9a270715f3826af723dafe918f4977c960f45475206cb2889a8efb319ad1bb229ab217aa5e26d65c7c20da60e71c525642a0ee0c3980e0cf8f18985081e4e95c8d8357c5ea5397579db5093957d96299a3a9133e192183a037957e228d693c4a2485026f913154548213a5213a984401d5e656910b2e8e04bd1 75e9e4d51a12b7f02b47dfd9898020c454c648d1f74876eb0a9c6a98d46bf51825d967547727ded51f666abd6ea381e2165b72fb4c1deb08fb0b4d7f94e35c7f0e714242be1ff44798bdb9ea8eec2bc2f928eac244cad6fccf3a80c45bfd28130763ebf5bd98c054bffcf381d10b3e16285924e18f07273025a21251b9b343 b8e5c5069829b0e12e8e578462ccc3a2d6baf878198e2f6dcf7fcc705e278aba84a14ef8e9084b7be1fb6fc053fdeee3b31bdfd3366cbfcd5814ad8bbb0b6477b07298ac1d4b8d733b893ffe8f1c16d81e53bb8e39e92b6f7c3c281bf48c0a67aae051bb59e9dd5388f018edd4f48ecdb11bb413c31fc8d802f04aa4b481fa b9e21193280f1a11824ba4cbc18bf8af3c4a3cef362a46a01c4a8bca957857bbf8228a27878cbea1ffd2f3b931e0ebe96ce3f3acadb9b6546b99618b4f749e11aa30e9a488efd0d6f4fa49c77ca5a107d4db49c6d16db3a04309c40e6a8c4882a6491fd13e0c8a67abd7922e56cd832224b4ebed84207f14c6efdf25eb1794 076e09ace85a36a5f1c3442e43edbf55b6746e856edbc940145061419a69b7ca56480a667d6003abb4d674c78c4da2a79eb8426466bafbe13a062f050b7c40deb9f529685c6fb60ceafca4ef094fcd1a67fcfee4687b504790aa88e0740f8195cbc9bad1a9c95aaeaa363910a89977b96e5779964a0bfd7abafe5a70673984 98894cd5ffb2daf6112cebcad3654dadd076ed17b84368dfe42f76b50909676c0fd124fd7ff8e62b50b29e64478aa0e2d38a7d4bde1bc0d5e7242105ca4cdf85a9a9606a16cf8753aa4d6a891421b0dbd54b40f95495016f22571fb74265ce0fdf476ee119e7260cc919c26fdae4894d369a4741b7f9299fa71b099115f131 11d8540598409deec44abe75de174590d5b0c8f6406202f5579c8af3aeb035a5b10732c78593e793c77c971c35ec0eb7f99fe0a75aca00ea4c0fc2f033a900ce4b17cd4a77813d9395f97beb023542b6b437aaba9a041846007e05c700da9d33ac963b3f72a701f74735408059532684fb8d0f4a7f787f5cc83e44c93803a1 0f419882aabed65094a6878b5eb6c973e26b49d2d1fc3ade9dbfb3d56d04ca4e9c680f5daa595c3c78a4b349d06ddbd1298f498fefc2e5b1ab6cd38848170e451203550d17b5dc1058639e781f081518c6b25883c39405cb29e40a02dfb62ab5934335f9596cb58e74064149394d734a3cc1caaeae16d8d4acd132c6b29ca2 9367a378ea3536b17efb9e67ad284076c3af01612fc415263369b46fb981c1a28a1e7f460b4ed946950e4aefe53b44cbbd7950d5e833a615cf820084a70429e1d518b07469f871f6ec5507ce6ec720eb46949d67f1e0722b516bdd7ae4951fc53fcbb22ac8f22e301219c65a48a352eefc3bb472772e5261042d438bb2eceb a1b53b169d9ea3ee5d9e9fef300e5cc8dc8d5add69a45f99bc7c411b500d335a7919499d35a59ebc8462afcc492a24a9abff9a7b28819d6e0791839b8a78c6a77091cbc440febfa978a6810a6033795059e1d4bd53f51714c6a30d0ec52dcc4056dac19012baa41d97908d3031f622a6c3778e4fd10160104e67973a1b99d4 5c6f1b71aa7a91316033cac035e848c5480ca1d40968884c8bf80684c43e3ea2dad857a5fbfc44a0b0d109d39a63c61dc847519248ba2077129f916298be987493a4ee48701305f2ead205873dc545967f3110cd50529d480b614b4ee069c2374eb59fcb058472b117ee339bd0a11514b911e68551e63301196d45ff894243 d36c9f35a527ef27223d106f14ce8459a9754cad920a8a3046517a1fa1d71580ad4c81be4c1aa8c93d08bfe7ce8f338cf15de598dde8d62b04725ad11f5d369bbfb6fedd36c3661bae1e77864aebad37f3168d7fc7a266062d438cf966417e5c3804bd54967c9e2ea800aecbb1949f647fcd7d0948dd626f3c508ec08bed4f a998770de01f3b42faf62fe8b1f587be58117f39a4af296dbc01e9b49abb615c85150748ddb9bc98b7c5c251127b60983e62f460ef50708cc72627b8695dad7575d4905e86683b5474c4e42868258794e336735d2a68128ae32b4aff8f85b4490fb18def9cfc5768d40cb8dbc4f42360b6777f3bf84d45f2d9c636cf7678a1 c441bc597f0cb27d67c5807a4b5820eef817df182a9d6af7cba27fe66e3afa451e3152fad421993f727acdc48ff6b2c1c50274b4a68add206550a6a5aa60bc8771ce2e21f5731533befe6f85f2fda046bbdbfb5de481ddd1aa2aebede8617c29c21d320edad8cd3cb42a73fb02e83e9ec5598000ac66ecc1e562dbb640e88b 326a4d9f118085017218467469c219f43907704fc566f3dede66586a091c2d759bfb4705319e03c44adaf6b7cd0a0d2cb3568258a32cea5cb29bdb435a1fe8af1e4e777c396aeed8d99fd36d0ec52efbd7ac650d3f053e1cc01cfd053ab3d700c2fdbbdbfb9dbacd469fc371d452a1ea89ef801aa8970f2c4480d4a547d584 0491a2950d17b2312c3cc813fc626436b4d6bbda36c6adbf129cf2e8b68471003bc55da5c9bfb4e15f08db12ebf0b5ebf0fb96b520655d7547f7c32696272f94b2cd1f4d0bb064d053e9662d6949cc83e1fb75e854bf8b43772997528142d0c7c5454e2474756157053f80dd5fa573c6c799426de0ef1c80263a4567a29435 49e2132176b234d6994ee256da244305b1973b882a0b3a2c6be75e28e3f43e30afda482ae2a122a36d71c266fc183cdb09a3f165862df2d07e15f9e5b74a7d788d265304c99bf7f56ae197af805fb43ad55819ee4499fe29c867a27f60233f6a73c03c44ec877fc9440fac73944d7d145629dfcc4c229410505f0773617314 e596d904bed3487d1ca08ff47cffb0036dad4bf9bb573b167ef1dfaede26730d90301c2023727ace851965e55430417fde47c018ef03dd1624c32b594941505a1f351271087ef6b5b734e85b21626241291fdfbfc9cfbb6a9a88c7747df22630d5e3afac00f805581bece6e02426ccfdc91e41e88b83e3328dd1be9093ffed af9ff9e6c384554da50dfd7a0be89a6a900c38d8c2a0f73a02a8d97a27783a5aeabb846c2e9301dc3cc675b5b1ea73b291ba659cf38ad3a434d23d766fd1ad0c46e815579e4782e8d2407951efd37837c4d60bb88baeab8527349e67eb5fe8e0cba8ef7054fa99d0174ad838180256ec2b520f0ee7762c6f2e9df52cb8c141 ba7e23715f81530a41d70126c263cac0eac2ffb1fd1289118849d702d3894e55dd7f3cb81dbe8753ce47d49c275e97c00faf46740c6313e016c99301815f44f3b6a179d47c749c39282d63236607d85b6fb3932b45a1cc8dc24e7ffbe05135b57b3e5f34c48aa355f27b3f65291e279da718c1badd55422b4cf3d87a466238 54941c818bb0549bb37670ba762c5cc86b07b9156513b922f1fc0a0701ac712b6e5572d85cd88270d0566b149f356a25c5a94fa2d0a7a5157265ca385334a9ecfc2dd2dab0c7d006e8aa9edcb31623020ccf408f1199e124cfc2e4578a20dad7f9a2a7950636e77b53623276734bb8da51b8108e5ff9de659fe022ca0748ca 08fb1a8c024ab92368fcbcabe13396b78fd465b829d77ab2144e8105873dd475c6725de079047e14eebee449bf8babc5f12e84ff1409bd9cecbd18e755156c07aa4eff9a3c91d6970e6f22fd35e31924d4eebb5935f5d8a6f7825e132aa0b7fcc9a89731945ae4514d3f0ce540d1b91c1b22598af2f977241dba3d50763ace 1ce3109c07d1135d8732372e8f13e41da0518bb2146611dcd211bff2a5359aeb911acb26bb09fd97f0b5984151d6f06608a930e6b542dd3e595f5a7adb0ef9c6c74a1abf015f58dd9937546e30b9a9d7a4cf77b3185993322b70f647ad9c4d66169f46e016345663c4ae2eded6ff9e2c5cd5e468bfca328aab4016e65aab79 d3fed9cefc47baf19325431c8eb39ff4c1fb06fb497aad6b15b3363cc1707dd1a7685100103966e88138cb39eb7fa56b146bedfce51cb6000cf4a37cfaf6d93299380ee742c6c7b8d81794f9e1dfff50620ab8d32ce6312448b7eb44f94238574b3850012a2e3a98ccae6616b7eb75d5462df6f0edf2f772b9ba1eb0fcde7e dbb65a77baebc4f3812c8c96de0444f2f4533e9a8b3bdf550736f4a7585265adc8ce164b8b98052b2277aaa7ffc2c43e70a033d22dfd04fd3112d9e9292d2248d258bafa49b59cedfc74f0072ca4b5d7338a9cb7d436a91f3cd5cbf2c0e7ceba4d4b731320b17992a8ae8e156924a66b87dd3487e12bb8b6137529b401dc07 b1dcd1349bb97a22159f491471b5474cd1c28fa680899bc12e61faf3261c1095c6e99efff2f96eb89dbc803a0ffe8196520d2d39d669b301b8475a7459d0c632b30994e5598e11fd113631d6a71483c7af50bf9ec766a1fd54b4ae233ed72c4be82f144432fffa0760f9e48b6e393260ab22b29d4a7a7dc7d39682ce210eb3 0e76fd67008e94ee1e41bc99c3842cdd551a9dc82fd271c4cf663fbb5a897fc70c0c112539d8c1bd020e2692f52deff864dfc3c8d3b997e0d96f9f02adbbf79aaeaafe69a87e754f663beb1506268f7cfb02c3769e04994eaee3e749aab507ce826eca38c7707bde43b932f0bd53bbcb0808db0525e61cf68c8aab24cc0345 979a7f9107f8f273afcc98104e5446a05301137e26af12ba4acf3eeab4b4a5776f0d0d4f4427d09733b17f229ba16d772bc0d343b00cb9d0e1da56f41806b7c3d559593f6670b3d69aebc3d5fd8a3a235f31bcdfd22d6bbafae0af10568a5db4b0b2d7e87b0cdaaedd0dd902f4502c97a4d41b9a7b9fbbaf983413d70a60e5 540998cb3cdfb12c0bc5761c8ca9db4fa44cb78f95ef6e1c8a6f98d56892045008b9f0fdf407936c722589e5bb475141b5cd2531ed987b9b2c65e0e4038581975d4c14cbdc6b1e647c78e1dc02d360997739b475689a0bd7f24fb7409f9492d7ed57cfc8475028bfc9d56c2218507344c8076e9abf8c67873874aa5d0ab358 6ad890f143b42d4f0f8f1d9563f8e2f7a3b21cafa86a47d4bf24e9cad5c0df48bae8b27ce50418ba70121b4c7693be101ca11e0738994066cc9c49f4f5bc054f2c628fd3a05fe0f58fee49572ab58eb149f1afe69359a0f5d4378cd76cce4b2c03b6343e10f6f851c5e21a4c79f1b59e76674b284abef617d8f90d810d36b5 6f55a202bb5a041391b0323ce00483af93ce8e99fbe25e0d2c79aa6e402212cbb08693f1416f2c18620539faf5fe5d6c0011df0177a39169e6adafc3d125cd7a6daeff4a170c35d1cb9980c7468bd80dd7ea52706722ff76a9cd9a02face03c89e37f0ac3493c307c101f7a1612268b74d8447920f21ccd9aa169a4281516c 1a794193f47850cdbb6d79732cf8bb5836952bb7e9a810b4012f7e1203739ff643ad42824baf001f33fbe147ef04079f4900e80d05cbb6570a1efde151232bbaae1e14cb46d2f4c59bb7c271344e9dd19ec876c63b73b5478e0dcaa1e64700584e7659c5a02eee2646e6534dcf78427d4b6c7376e14e40010eafd2067740e2 bdf76e009f63fcc7846457ff009df676093cb1fc4d345bb35aac66b2cae26bc4ca22f427a417e985ab34458d845fcfaf15219cc600daaee45cd4331f5a34136c32cfcffb9caa15e34aa8e053c50c6e55852dd73e3f488993ebfa5191f29e0e520beccfcc4de3f08d16459cf36171ff04864bf6983bdc22f847763268196bec cdc06da211027897552320ff402049bf5338ede7972ce31b82574ff2fa097d0d0fd209084d5e7a124358cf18b5435a722fab14bd90c887e46e608fefaf5844558fc66f62d0c682d6e2345f0852df867a277b34b82948b08e564153e0beb068f9357a68a158bce6001323f1c7e2b5a239821477b11bb41b19409ed9bb6621ec e9778fca9178a19091ffd183b2c8b28ddf6cb0d75b0db838431bc75fbd8860ea942c80ae7a63514fcfe93512770074b37946a626dacef4207120854ec3e0a334b8fd270b9265bcb56b38e7ffea840104575b5650b445ef120dfc5f5a4aa3f5332b63a73183f2889f3c32c369a83d6c12357a9b4f22d8e8ca3440ce3d0d4c1b 76ba75d605cb1aa003273afb9640ae33d0da240229654276d8342894f60d3490dc62cf9ba98629179f79a0de87ac96cb364a3cad254852b891880d78f6849e24a80ca67c6bf0dc0b7df1e973c43b785f07b8e3614a006ac26cb85e2995a0699643267d78c267ff79974d9dd63429b0b4f6a4bda6d6189048b9bff9fcb3475d 4cebb0d436cf5ddcab39d7f8cecba09919adc285783f7f8bb8280a08bf3b160ab6244e308b71b7d3db781a79ad3d1840a43183474f18374a064dc6e679c63a984b251d8d3c27d4003bd43439057574c8d57327dbf5f68700637a7a410649c605b6eeda5cc71203edd64407896a8c0db39d0052ddba5f3c5656255089191a56 d862977071495846a54aa7caf76cc90580513f8e680c0e13a7b96b1f6f3a3c129b9a489f5956e6167d13f0393362a839dc652e74866a06d58a7d4f793c4789bf8064c7da8b95771beaf53637586e7609dcd33cd7d80fab98eed57ac0f655425af57c831dce21b7ed2fa6961e269e3696ebdba10c126651f8dfcf7200b2e0d0 50718d8b0ee3f446e5e3fbe232469fa3deb1ebe778cbc9dc46dead54f0a56d5902afa345219004f020fe8f330769bf6022839b01c40735dbd3af6b4d823d3e689897f848e4cc8cb72e9c4ae9504b61b966d8405d6650b711b6ab5594b9c96eef761543b216f3ed2653a4c22c57c063cefa09389e625981e9e86b8422586381 a2e857f0349caab0264a277c71d7ebc4a072cbaefb31c17f3acbc07c26cce9f0eace9f97b59ea655fb65ed0e596cc5e17867e7d078a5b82ef3ad12eecc19a3f9cded0dc81faa6de3ee1df963a90c2497c3d2fa00de5a7557245732330efed68e974a93655e2c838f8722e868e91267f3a8cb6ea25d04e27ad7e1148e26b683 08704ea00c55139e06e1ecbc2020e1f1705e360af0c31bc8808bc7ca340daab36fd55c33f348e99f8c2632f2fa1d1d444293ddc745491671116e2599c929ae962133c1b87264d7f713b9fa2ba1712b96264fccc9396dff39031c67fb14ab1a8ba8fd68191ece265686deff079987bc9bc90420ff4b8e1512aa32caa780403a 174ac33624d6fa136e6cebe11b1b02fc1a3ccd7cbbefe38b94b74b70620c15ed2078e982a315a512c26bba6f2dafcd1b14cbf07f07829ddf5b012bdaedcd9e965d487a531503e4722989215a462364518dc6472569ce04fb8c003c603361f2b147fb2764f5c428bdfebea5899974b94cd6d74cbcc72c8c0aec3d2dacbe7178 a86b1c6cc490b27180a23fc1d0700524145222540cc8e22b84f4ee447d1a705e2b4f691a078b5c134ebf763cc4b02277d32a3333f5ac92fbb8384d322df308a1528597848eeae0c2119f4930bcecf4dd5a9b8947d9937ad96a43ad3624f746cd15ebff2995fea48ea28d40ffd0bd03e55c7b5743911173f1443303f076564f ab4b4f7a0129112e2287c4dc021daa989b6fa0f9f253ce7cc4406addb4d2eaa0513683ba8f9a089f79b8fc6f5bee64a8035eca16027616157b8dffdd1bfb8aa74d052e9da430ebf247d53ab00def146e17348b68ec3e4611aed7835d11fe87a25bde2d8bf41bc4645895200036d413cd431fdbebffe78a1dd6cae1980aa7fe 4ea327701adf7deefc86c2bd275288e1319bca216bb36ac9a49a2fe89939f38c3e8517c72fb28644f16f7f35d31ce2012724fbccdd4302654935db65847338ec52dfea0a7111aa41b9d30d7bf01e8db68a8da0dd2b344272abde7a2094d4ab34f3f501d96658913ac77bf753172ff090a1e5dbd0f276d923b65322113b410b 401ebdc56fdb44a14ef31c430ae3a02237fbbb9ead73c18a3d4a425ddbc4eda66e38652c7a11fddab2e8f894184c8bacaa0369f6f537ca8baf9a8f516e237639f7b15e200fd3cd22e26794dd31f41579697d4cde1ea66ca18355138b72cd50473c15519d35696b9e9b02ac56f6a0d7ad64ac49a3c48f0c0695549451f1ed8d 8305d04f54e657424071108faa203ee7d6c6bcc0d2a2523be4a6ec2d917b2d0952f031a38527d47270ebb2c6263a2613775be150a415ce3fbd3860f09352327840acd5cb6edf0075b6747d3a461625e9fdf4debca255f2683993e13deb59f98a3fe4807f51ef3824186ebbb899f1f0d80c1a6f1702630d51f74fe23ae21d08 cd15d491c7b0770f840e526147b46d021414bca5fa2f6619741a94b7ee65be5f9a3a30c8a03cb82fabc120f1a49e750f353ec28271df4705f5024551745bb0fe5518987d74cd155a6bdf7112dcfe34df4319d5198b0e2b61956c0569be200c8b9c075f564c1bc7e8fbe2dd356769a5b047b3ae8446d1ffba8e7bfeb7bc672f 963062e6c698c68a377b6515fb51d40cea544bedf32f019b92cbabcbe1406f8cf62647a84b487004dd8da6b54b276903e6f827ff38db9a0ef43641cf2ad2cc7eb08612b1cffccb6014898c6a5d49a8cdf6d55510604e46328a4dcebebc5b4c434413114bb2b3870e1ca695c7c675b15a3383bebc69c2ebacac70fcf0588d47 9a4ce18daed68295aa13e1b9c63d7c63248d15c610528e8ad70ceb6c4be3c79a6e74499c62bf4807a6a6d2dbe77fa744efca59058620d20fa2a4b4e916e564810bdc72068d0b6ff4cbdf0ab90bd32bfe3ef8bb694fa3b95192b12925c6ca72bb4d4aabffceeaa68d6a4abd35c9dfe4e45276a3fe841e90dfa9d97c6019ddf3 f36a25ce6769f173b9a3ef2b599daf8b496a6d4cb723b3506afb02ef912f0ba83fbe6e8026b0f77442278f6149728719b3e025c57a53339ddad510d469827d4a2d059cd0a4ebdab21685e1f0eabf9f6fbbbd7bb701fb5242f559e959c55fdbb551f84ae11f158fecb416d6366497473fc6d8447e650a084e55e65a1d906ed6 d5d205c57692bb1eeb8ec0a3654eac3d797aea3201ffaa1103551fdfd8b7783e2ff5e922a495fb2d6a55ae15825274401e6058ec8fb4859f069c6b0cde19ac933475ef320d9ce89981faf8dea062325278cd320ad6ae33cb6ebfff253d82ad42848adccad2a20b2c55eb8288ccba70dcce53371e202c87b44e64e6eaac19bd b3dfd8f423c064543291a49164b64e84433a04eaf21a7e76c18a276c4202cfe53e05255647eb850426b91c807a8d3dce45db762501f1f169d22c83cdc57ffc4d280d3218612e57e042cd0342176869d7d5cb1e4ff4f894e84311806b7b6219dddc6e7795029d63959b16b5af5e4e4b9c0b80c19961b8f69f2498a7a941bfb2 efe547bbea7110f9d8b3a56958c97b9b3be9e36b1077768e2152a895b0064c2a1f07d06405820fede66ab3c00191687370e6e5f8b252a3da5ff5956b72fd270ef54e9dd02633c9de8f24c5203d336ec0faf4987d20b4367318fd2f0ba4f03552f50e6b8d236bd379d67157edc230299cd98c4d0d4ccf7b75d76ad97d382f02 08f4c8454c7e9abcdbdd8b938e8deb3e81648e0dff29a32b02b13cc8aa84cf813a791e24f75c1feef1b0abe75d1facb0f56a7698f813a72748bdf9d864f32d8b7df54045108183042379372dd6bd0eeb60626d9bd62aaa280c3dbc341e3ec294f0c5819adfe194320e1009237eba1c61ad84f492695e7e7ea12b8c5149cf85 0da2bcd08fa415ee2e0efad61825a55e3d5d48f68d60952443d1aaebbbcde3ec592fc94dc8799802f79193ca09e97486b1bc46bb02c5ba02664244ef90b0c1fe73376df003ff44161ee8ab536137d357ed694e98d21163175cf4ed852b153e4b00c7f57dfb0c455973bc014b71a472b04d498e52871f715583773fa3016d1e e48e221781c126e5f54bff3a0a1b03a8364f271d62dc9fd3331c5af4bc4d40b3cc225048d57b280a2a479d555bf6306bd02542f26a1d25341d090b72221f25b2b9f30feeb153e1137eb926a24b62b1c9016ee53b10a78922a43824f0ea97205c6f0f8f21b194764d40a05692d46a3a062a9cb28d4835aef36fca60231aa5e8 0bd0155df3dcb626b91817401eb0ea2bbdf69c1bd54eb15052b43c312d888dfa9dfe5c4c2df4185d7ec1a576b112ecd277758a6398c54bd4ee325de4a89f75f3a5b374e9a61790e3d10344d9546fd64bcb45da065c41b58a82c9c5c6f1b05da826fca8a5b7bcf5c53904ceb274937f2444bfb35529879ccd4b508c0c634e42 5b766f4616047b6ac4fa5a3f59684f62e79850e23026f878b7c4a9ec9e96591465e3631f6c9355f85f4862c3a60d32454b48cc1a74e7d82546a76a5668a21d59f859059400dce8b26f81c36a4e087957f7bef4c1bbaf542df5db23138a57b6157c5bc2b5f9aa7c72ee4b5029485426a77ce57b8fee04e05446a434afba150d e7b8a8fda35d75615125b05312dfc874405d5347aebdbc076867c3436f9628e390a1830cf5c449e00154e17ab62035cfafd8e2d9ffcf04f6dc4039f8700f48bedd665f1e489a6fe7802508068d7296dcb5e43887ba5754d8c26a5885099f04c15e6e9613ad96903bd9a544a97111738fc6736bee239b9e94a9e5872695922c c4a693850921736dbb89d2013c76ea286ab8ee857c4cfe0da2acc1c70a4704a30ff2af5e9d81ccbad53eea498e8cee6834bd86865b5280aa93835f8900f38c584d81d8db54c25c29ac19896204aeccbd1039438e027dcb6aca0f52bef35ee40c902ec49a1686c6f7eca9a1c6fe8c6436b52f349debf8628d2b74cd21b33ac8 fc45a78b0f2d0ffc83f022e8b2f75f7fdbb0bc45c919f99678441fbbd87e64ea9aebd3d903c2daf103df62097484801a17880283fc69efa7265362bcf151e7e6a9df2227bf9a2065bb76e16b67c4f05d1024c7cef8468493fcbda13256477fa0989733a68a8e54343787a20f400bb45b011b4a2dc83027c88d10ae64b46c42 d2aed0a3d2a74fa3fad2c719723b75072e83fac9d80fe4313e3098d4379a16da0f12730d989c16bd281410f5f989e3e7178567cd79c9921f9052683cabf07514891f939999f84796765757800f627366b0bdd1019efbb4b7b2a1e87134f2101fbea7e762cb626eedcd36add78fdac40b5ad10561b2b0ea69993ff4ea21c6e4 5e3407e380b5d29f017a9e79ab4d18198051b78fdf0c6384bc7187c53080c5eef9559fc573585294943433213efe756db99ebec9e2d3645dce13f258a59270daaa56666df5acb8d0ccfe5c3bb6b89d24ad70221a520109bc0516625b63be0ba0fa64cdb1edadbf1720f358e33a82f6a51ec0239dae6edeb5189c8ada83253d a53090d58f1cb3265faeea03d6effe307f8f05b2a512f81046fae9f30e98fd4315801438c0202ac1414848a005796dd0b06c9dacf0f52d995b6d44f166aad72038dfb984c29b376c2edf9e63dc4af856223583c158df2c1277968992e7964ca2b7cdebee059b7c1a564d8fdb939eb0e8409fc7467524fea8c9660d18d1f413 cfc2502d208cc35360331b6fa805a3d3e98ba2d56994a1b3a7f35ea6046ea61167970f14ea5a13e7c1f608c16acd106e0b78b6dffb956c2a61a576ded39c70fc2e41aa55d606577db46dddf1212f0a9c66be42db6d4bbe2419bd5cc152d6353fa23d506dfff5543148570862266aebf3bcf5ba887dc0daaba8deaf72fb5137 3baef5d23b7335d5a4651aaa465c87732c990ed2f1b4abc7be39d11916922d40a83e241d23117756dda9f5cab6d89ec8a88fa3b4f84dddb50da17bbd491844edf6d2537943c692f9e5e4b15b61e4f06bc7d1926f73cf38c2f14640cb67379818222af0e9f5dd19dc5e9771af901160a13fb9d00cd36563594086048d1258b2 790a4fad46a4f5344347421a90bfed1ab996dc9c23b095166d188377704458c263f128b5594719dc62b292b9bb9ce8070ffc57761f83f0268e7c9d4ecaa88721f9f0d933fe2bd31f2c646fe2b24cdcc5e874d836c6da4b9553f55f7a49a8e9a3c076f5189595477a1ee38b5a4a98f90fa94d30a1ed350dad8ae8c0b3f2cd07 48b16b7daa153efda4776def5f71136219aee935325402418310e54df48474a67d942aca729757fe8128ad8be1d7166f0f3519da2fa7a0e3914336ea460876d3fbdae0047e9672065550b5abb7bcbb720396bd5fa2225d9eac86c09bf4584aea466aa2b5533e012a9d596f152e58fcd2ab0cb3d431ae54bc3d0a34919a00f2 8ceff9875798b95245c8f55d69c83ad4f4fb97e67477bb827d3143d6cc6344313b664815c9050cb93e9f056eb29c42c6a68094e569708d20e0ae8caaa7cd758a32eacdb8fb033327b1e7f97b5d956ecd51f6d9058c5bec339c9aaa5b806dd25a5effad6e6377151b472959f04acb82c0e8af924f43333a5bf90bcfebe387b3 abdd9c011dc0a10b6771bb528cb85901f80ad7025a885dc6247e70b5f9971a22df2a989e9225e3955dc9571a0f21723220d0c8fc77ebe114d6a33386199f0db91dbb33e1a83919c0851391ddde7081f4419de0e61fd87a2146f337a9bb9df2b599a5800dea3071ff13e48032de608c6afa0d2cb9f52c764391e77c66744c5b 29334aa285b15bcf0db6eeeda51e6c7319cf19f5495ac4cc2a31c6dc98ba684bdb42a57a59fb3e7b648810ed93114570ad9f3a0171cc693aede8ec746301f9d32bc106c041851c0bd515a53c41bbaf329be739dd75f7e1cd9c897f1232a10692cef61630333950755a9d06d3fe72088b79299980a63190bdecc4037acda3e3 60337cb8c7b9890028560f1671cb65a2bb377309f96876a83083e1eb928c302da89f7b303702069f22f38deea2f56a29653139478592dfe0f7af0196b0d85a3cbb088fa051f9b83c4264eff485d9b8b6ea443ead8ff0814bc47f0a1e1ea215f6752254e1093ae03fe3dc9bbc9bdd0491e35fe66c2bc6826aaddc5ee33ab049 bffa8fc1f26b6cb88c4c09f1099a0ef6c9ddcea44f79a5cf320c4ea273657c5e64718b4b17119583cb6b2ba9ca1ae234268a5e8f8520a706ea8e8482f1282804c6a252e331b989a0370ca8554ea3effce3039eb15f3204417e86fc3de8ad709adb6ee6b82d0d0d72a75145813e2e39aae8c967758184607e101f54090893a6 597d5c557bf75b6b4125bac8877e17a8d96a17b9bcfae706ed328a327e45f158847cf3050e20ff0d5dc28c65865e84499b20e767071e2556aeb3e1681e48ba9ba70cd4cca0e788c06936501c787fb5c9ad58c99b08449953091a6dfd54c8da2b9a047dc41069b4c2fc5fea284a062aa5b8f8ed721610bb05c79dbd468ce6d0 9a0b12a4929af65275c9362b5111d964098b7f7767ccb6da0333419c78af6f9bf8a06b709bc88f33c35ce3b138b966f7575f97cfac9d00948d6f7e20b3132aa3d5582a2f47e05672b69c7f2f5576e60d08c93f5f3864ddf00d7ed09bd9311ca51bfa227eb0e0425c50d771583fcedbdf610002cf14ea1c0cdc16fc200cf795 4d2688529159b8adbba501992f289a4d1809a6f1dc177f244a7a4d2021937ca79f664ff3bd3d5d6bbf46e1e0bd7e5f9b054681f53df64e44eb961b46ae29323c9f6120919ed784a47bf111ffeff327b9922188fb08efe5ae6b848d03c8ef3f598fd66d4c8c029fa07e7a2ed8f1e2e3fa8d0e04f23048052944b57a64494bc5 5cfe88b9c891edc5c610b3fc881e3fa4c98e2dc9763060a95a11f190501d569a5582061759eba1ddaae8c8b35ae045c59d2e2a32f4a21739f5eb4d5998ac31993da2157edffa746f4f4d33e978c6957a462842ef23ae16d6787c8143f5b265a25fb5a6c29bba44f50068eee7cecc8b9dfd64b7c39aefb21985ab1422786aea 4a41358310f21ea602236c21b5eed2a5e7db7531d7f44843342dc2023e74e84aeec17e8fa750445888ba0f6c0c2d508b3996e6cf37f9dd82d153bfb3fd49850cea64917fad43d373d429cabc80b83393e2192bf5817b024faa4003bf3f9f3cf2335a5af309f7b119cbeafd2bad6739af8220d5cc17b251c2917b2d2d925b4c e087b61694f943f615d969d5807b40fff5eeee761579135508d534df848d686d6a5855f3249ed3a53758e1a342e6b32f46ec9e7fe0606710533e493dab80a0561de49898f0b8e827c3ff7c65939f9a0b5f84a3f8cabbfd22161afc887b9e3ccbe18a358455ac68f509c13b0f07d1a7fd008f0ab306a9266e2e97a92ee1d940 79141b9631e5ae3ccba1276b64166fbb884ee354ebb588e48ec5c00a5d63e05e913a1469f262701bd2e8f0b1ff20c6e18d9ee6c064f9523742bbc77c2d0a4824577006c6621270cb94de1bbb94836eaf493824e8be655ccf7df2f2a9b97a6532433d79d59efb7a97f47e7deb6995cc3df9091535805ff464898573b3dfb45b c2c39a6e1ddc64366a88f8a01df3eb44f14a5ae97e0650cd250ada4eefee03c36946835d5731fb130e3542584faaa487b6b9c1ec3113e5d5bea3880437c491d739c720388a59bcd5ea4f8449b0a5ba8e65d4f9d15b7f28999e2ef689f8a423bee4fd71c3df1cbc368c387257780a9280b8a7e8bcc9460f34370555caf7e735 e7afb5cab68a48c09ef890cf4e35d6a01fef9fa1d6ed4e5fb3f0ae5db152cbb3251c46ed65a8a046cababb9f52a1477c45b261e86f1785d1f3b3b46b125ac44dd30cca9c014a798cd5674fb80587add88961ac4dc3c87c97e60b6ecd9dcc30bf09e1b0d7fa780147ed38ff204c0830cc04e8bf3175d2df37b069b6620b446e e8afb74161e7c6255ef31e9315e7b2fa588bebf63097d9278f17a4652ca7bb85e6668bb999343959a2a4b6d292097e50fb67adccaad8466261b84bb4930cf92f05ebf662d6102d701972bb695030230734a6f364e116f2017c43032350b0fb1ce13c205474f1c9e0bdc1682ebd4a051807720cff36d1b617758212fd167e20 1186b248fde763bfa88ced6773620296676028ec3a5d4547a97a355a931a931fb9bf9616b68f9f090be7599519b1e02b1cb38b64d3dbc6722cfeab945baede1486d9cee2cb756af5dbd5e82b72c9b001e627cbfd8057d4e017641ff2930fc81b993f23fb70f33243e076ef5364abe1b82f6423c735cdf84f0b092d9d5f43c3 f23270900cb05b30af20506364b1bc1c67e97096e2db79cd9080aac2b2b58e5ee03ef57de638a5d120a8973a0af31fedab9f5d1579751eaa14d6b789b89edd29242d1e51cd787d05540cec3755f1e16ee9de04e287fd879330ee2be793ff926e4925a1c7848a74ef47626459628146584b5b14c797fb95fda9f156bea71f51 182091d2dece6436c8e6dcb7a56c40af2f3feb7d92f5af1b7f5e02ea01ea2384952ee3c50f5481c1b03c7916eaccf318caf08c816826b0b203fa9366c98eba7f4107a87ee8a16b6d43922ac05eb9947a20997c8a404063732ba890852461f0c462a5dc8d765cf81c8a6634bd68fcb308bdd3f1f0fd405ca602bcf4ba7750e1 c55117902b477d2b1f121c1b232a774ab07430a26a2808f18ac44ecb649697e38c8947a3e3aca82d1620a784d0b5721e86912d4dd0a3a72986163cf3eec5840e2fffce118807680a6ce9b5ba75869a6003894b80be879d57ebbec481766c5747c5b3a64867db8a49d151448952f8fffb1caf04d04a13798a503e3e48d95714 82075421607eacdd9485d51bebf8fd4f0c5eac3117b8eaa7f8f309eea82ecff89a17e5d599c6a6fce98140519568f4b0444d6ee0d139a4ae4bb29b855fa8c9ce0f12d853156243bd9e5539a5bd300aa0a37ac36bad83467f2081e7269de53e4bbf588d1de90d1f32d6da54ff0902a3d2af5af13966b999f296c75247b05ab5 b0e27f6750cbc45e381f90b4ee29f5215d9f20f396e39d77a1f2108030bddf668e4ca24e394535b5b2b39aee7534df1ab55dc5fb5178673c8d3e9cdaa7fb6df7d0a93d8e61e1dd7f0e3f80fe12b07ea7458ffce54a194c9665959241cec49b04471f8b598d8b904324a65a81bff6d53d627c712033d8fb601a79379e95c9de 4050bfc25521ca496bdda178eb6e02667552111e0705caed7b13940af754ff10658cda7cb1a7fc457b46e9691bbacc2c4ad270b79d307cd128d10b95dff0b64ad48e0d7ffa91710f59fee8687f683d5db13ae92a81eff37043d3971288284595d00ab18484b51cb7b13ce695b398bb8563b417258a2eaa876c94246e5a376b c92ed80f93feee90a9684220c249cb6fba96a55b566ea5e71f58a3a1171b01dc1e7dc1f4d82ba799b2de155e8c123ca962cdba8aafe51f48f4fe27e5ff6670f405a60f330d889b7bac453480469d61c85d8547ce73a3fc3db4b61739c8600e59e2325b72368d86bcbf8ce1c93f6b5dbbec35d1e01942567c9f22a9e5d0ccd6 814ae2c77f14254bcd1df6e20fc8aa0c873c000b277d1dbcd043b330047148dfda105d1dd7f020d6e1d62a8bf5f55ae5961882c627519bb97ccea8fe375715787385e968e98cebe9c72413bc35736ec8bfb17da48d072bac1b800d056f70e1e66e800640702b9f7dfc10bf179bea283e13e869777a04078742a498565bd54c 24f49f228cd5cf10458c225e78e6863d961cdd7fe428545fa4b0dfe47b666adfe2a51ad893eefbac07ea29b6b5ba13fb01684d5ff7e7a4b56c9c5988f8c42f79e9b25b4f9f7bceeace10a5d7fb44fd70ceff7dc5550ce8863508a91bde646b3a8b290a836930545360e6e793a372beb2fdd77726a247444776fa4698084e65 27de27c154a44f56d485a01fc04ddf2084d15d6956c1e1ff143f6249ab83b27a968457e63df8fdf5259abc0cd61f0ff2f254a51dcfc1cf294c5d2978273db0bfa908670dea1846874ddae604b7a7a93f4439751508766ce2536ef2b3030efbfd94725f9211fbdb38a8dfc3580c85b1ffca8f3cc521b6d566e06e3a32567ad2 a5f480cc9019c36b2c2849e05e2eeb2139d35b4484824db30b395a16d80a8a5d94977d1bc14e8cf07d0cb5fc246f29221bef180355f0f88dddbdbbdbf472bb327626fa4770c0850c95befe6a353ca86b4039a6427898b69738291f89bf92cefcf4bb6ae3f096926c0132861fed1decf1c2e218957afdb4a07852b2c8d2d518 6ef72e3f119e6d1d8df313f63b26e55753df2a2baff2f7bd46a423c9e5906e2521d061ebdea086e533e6d27afa8a8d5ec496b5def85b30bbfeb5b8406e49964d4a076234780cbe34a5df4095e74da937a8d8048afb77803cb81cd0605ffd63632f29e5608c01b2b73ab0d3ede8ee470913ef2d8e5b71da588b173a0c793a8d 5e8b2c7e8e2d7c3f10f5dd6a70c6739dee3788a4e7cf2995fcc04617789f60bb9d53efd70754980046fc50a8b73a5149c1dc0499bd2e887bc40c42d81cd8fa02803c8b5216cf4bf388c1c5bafd3a450069486be7270a90c5059e94c956911744ce9d05e48b26701e7258a0a8769d421fd87452939d43575acd5ab1d1618fd2 909385baa9ca0be621789e8948384dd4ce61cdef52cba5eb5c82014538ecab8b2345b31cb4f4e4d491cf41f79b91622c837570d9fadd84938f56f81eb49739ab37c4cef79aa65af94dbd73b9bc5c80731184c37f121669d7de126ba30432cde57615955cd22881c1848b68cc0a7253237690665633ed6f7909daa1f5dd915d b471c078a4517e249786dd1ca550f83c141c39d592119a221402928eb330db76805091c170a26bdef0c747009e6af87cd65bfca6c9554924265173508c5d8091461fda5969ad5cd0a0a4edc5cca719a2cfffd932577b3dc426e6fb8621e8199798162f13606f5c0d0745d8a17d72514e6c607dc42f813b18f941d0ad099586 ca51e2dc15b21f08bfdd4f4831e2142f3dc2817f6c6f4c7bfd288c26035b47ab5765192d92104599cb2aaf6cbe3ab19a35ff08aba855d8d862a4feb225cae9478db9f07f9163db809d157def659d776fc53b15fcccd9c79a54c8dc75b6681af34e13be3f2c112ee34d14d7bfc487a5f350294808b07c64c213a24b802a1572 0e891b39929958039b1cfeb84b4055a403d70dfe25cdb1252375162ea7b99e3d16421424c14144343f5579b0a20458075c297004719bd021749282d0220352c6b796221b80cc8343542203f5313750a372621e20093b588ff2845fe6fc44a56b021d5c67401d46dcdfd4914e77ec49e8a5fbed4e64a0962cb43bdfb9f4120a c9512e5633b89e6e3f95ae56fe67b07ca1af72589a7021bd86df5259bd2187c5c13f38ec1d233f2bcdf5d1e85e7cfc272aaf5a88ef1194d12a282dbeecbe25a5037eca1004e156221c3709fa119d1bcfc3960fd6783c1559f30fe6c2842ef05ce3207e8a4924167d770563052e77f6b799c146c3bc38e1d9c23df4904ff890 b7525eaf3c89687941f91597a826fe72244a81f11565ed6c04b867343f76f877f9833470a41e916c274ebef126a78769469982ae234701bab026d733629d77523c12e65277770d23b08493dfa560ca4206fe3df2032baee55a4d05f37a7dae060bf270c333d6e0a345ec4d9f3dcf2c085bb4412a9563fa5db9d982570c94c1 827d015bd3e33787700b7843246613fe4d695df22ad2a10d69892ca4897cbec35120ab12995cf276b600d43483d38320f52744911af81b83b9b830149f437c46c33e61dfe25d543d880ad10ca1ecb8e105302882934e65d597129101c455a5a385cf713c5464a8dc354444b11f82bd23a2abf89a715e2fff9e6b6043c6f2a1 655542f62c3fc1b647f64784848b50a22f855b93705ddbe49439cc9c88c7d23f2e5f49fa1058d6aebed6e354e0459f133fa6c6fb5a527c4cb1f9da0ea48645f79f022e317ba9665819d2d8a8335cc86fee7f0252ad4ca261c2aeb4018dbf746ca19af88ea8159549b928cb168ee3c4770852f48d15327a2c146ca9e0688c85 aff9bb0d4f8087402b0b8db77f85d769a75a5acf82de33937c6944fd2e3660d14d30dfdc6ead11c746a31da701072e4b1061a67adf3c402cc01cafb69f67a6bebf4ed7f120763c2b9379c9db12ba29e6a4de53fbeedc9ae7433e038b3738d76f573ece8c606ec69a886bc2cc8c8e66809bb008c289552bb9e4330dfa1cce90 e080552e5adb0718ad97e4bd94b1467d5295fddb42ce6a912dcdfc5e6582f397922f0da7e12b0e7eb659474db260657d87ecebf8897576f2f9bcd1720301064c1d3a070c55f35dd4a264039c7e4db58f507900e52c9bf39c25731708650fb5547a02e085a5c4796ab736486dd0b480466e37388be68eb96baa3512884751ea 56340c30de071303952bd00ddaa7eb1978c17387db410b75ba044505a2eb9545b6de8364b15efa72c76ac77478c9e6bc6358132c84b62af1b74913f829d05ae042dfd62ca63954b3aa99fdf49406cc202bf6a78e0c44913dd8b82679a0493b53ee4c1b4d7187b5639199e37512a6cf238b82451e87a871517b426ffe8ca9b3 ce6b6f88a3041a6ee7bf6de9ada6ee0f3f4ab6c299b5235c27e13c2aea099e06285a4770d073be60db515f83b94a585318ffc7e81951984dd5e6b8c3092136f221dc0d31e7f0ae63e79021084569a5f2692198c4df0b6d776eeb78a6a9164acdd900d4024a773643429c773578e0f672e9cda04e46d97270c4256f9c1a4e54 9a1f6ea48dea613320b6da7725ab30ba5c653803749bdb5384d67a61d20f1e98edc5c2e2eaa7780bbe820332c38ec40d1030d1d11ca03e30e9d161eae96e84d72e0a1e2c2697597591a2868eb2352481929a5606c49667153c6fade98d5d6567f604dae36c4051469407dd10d7220acb67129ebb445cd7f36e713a6be19259 b14b8b83bfb193d58c80e3e25641759230dc27310214c5bd7e89788eb6e4e4f34b8c8dc1f6b751f330aff30a7d98ff1ffa33122c6ca2d0af43e68b0314baf3dedb694dc9cef11e40b6061f0d96778ddc6afc7329a3864ad6fa368b1e270e47142362c4f7cbb56fad9690044bfdafef91e82bca10610295c7e4920f66befaf2 876b958434a800ad3d550147dac0c80acab2ea585a609e8d0d8d1d7bbb1725d12635a3436c3ca09e6cd316c285e9fb2345094f88850ba2517b946d66ca35ec9e6ba502b7c27580debcf791de773b72ce2f6ffcdc43e93c5710eb663b916358f8b225375e1d9cedf072e62716421ab83544f8beb81dc0c3c86a3b29de257032 344b146b51c9b0876a9c40f4f61343aca5ce98bcd1ba27da33cd700efc7ea0e22204e280d5bc616e45acad4a35076fd0529cc5fa9676d8973f6703246facb9110ed97271000d4aaa05e6e9933ead325537e22946d11e6127de65d1295bd51ab0bb969f68b464da1f5d684c1433aa424f238a00b02c3b0e7c484a66340cc916 0f7c15a32d0c033e52d4622226ede5035f938d86233ae13e2afea797cebdd4d1e7ef1d7afc38e131f8161406ae13de0e01e436acbb8d8639bdb67fa512a8af4ecd3b562b107f3df99165d87e44db630ea150e6ddd4c6896d42c2be5d012fcdeaab16060d850b60a589f861bbe2ae50ee2cb9f816b7b3fc934e47ab5075817d 8e4ddddb92ea7a809da9a7239170f6f120bb4e567ab3cc3dd7064e9c09936bd545cb2db641f604c8f19c85cc8935aa41a3e45b4ca86842e702f573a3e6387be939dc0f216eb7704b5f772473f86a6aa6cc8023a16fe331b160f206131a64f4bcc5e8e46d7174f0bf590457c9232491646de18bc47e2a33c3e258df94e0b1cb b5054b8ed8e53ba9c2d27bcf0a26229fe4f033a09a4e308af4867d00881d3a11b7460c5b56e6a1f91a7a537907a29d26c289560877eaf674044d408f127d1546c44aa9f4504d892caba583d73e991b500bb76e87c56497d31776fa389ad0d5ecc683169078f05e54e924110c8d51e821c40341d5333b3dc8a69bdcfc009940 ecbe3b94aceff1c4cfe5753971229b091384ba15096b73be6ec57ef32d9a0feb671756f31d4bc979d6ba4dcde7c1f4488801a1ff4793728d61f10b237416c5572554a5d090bc44d0e0d1e0f98ffb3d708a96b7bd4ab8f45219cb6ec22dd6f3b8a563b49970eda9e261529dfbd0f3b08ab1e68f614496d3c7d3b4cfcd48acd1 1ccd0be0aa003d7d1a70ce1f253c9db09f0187a60a13e1e6e1a285fcfd4920d7b05144b8e78985d7c9638cdc8251aece19d99c4cea5bd62c8df4db555373c27949c7b12ffb5493d0ff9693af6955a33f5e9386bb227879ebbfa67789e63953ef30cfbcbe2eb9c0fb8856aecceed67206ec05a50b69d765e93b09586588d7b6 42ac4f609eb0adbcc06c11ab30858be3a3e0a26d340dd82a704bd1e6fd76671e2b850ada79070c8bd1bdf5e6259948c1adaee6ab1ffa78dbb99f4b453b79393bd66de3a7faa118b7892a53ec298dc8e3aa193287a3c877254ac87d0564132da7a885383d37a0304850ec4ea743a5c66a4c7e3d60090ddab70ea1a9e60a6b2b 53342c93d6282f8e35b5b5a2365e1a2c183b33680522368db250762ceaa97cbbe7ec7c07ecc04a886e568d48065fb64cc06fb02c41db2693c87b9d765acf6c06b79d80affbff447654071064f1b972533f64c1013ce836dde9fd019a7dfddf76a8ff5c92d18cc2404e9527633b12cb1ad630a27adb99b16056610820a19796 39639f42751e42dc06fab6673f2beb48b232a38598a4f964db50d9927a09c922520d49f85c2ab7d9373d9552382f0c7da5bd5cd6ed1e65587823df89e4a8485edff2dcc8353cbf3a08c92a817b8d3e61a486a9a5ca78ecdc9bcf6f498c3d2762a3b631af4bb8d47cc32481c82b2aa4d9b76b9449b71753b6a82f8a8550edcb 4b69b531576c84efd6b76c4504c5fcfa46badd78d3b1edd546a83b12d6580f657fccd8f1ffb9cf96c6041753249ba20b34606f7414cf3ef960da726d59dbc08cffcaa6234f6d4982a4ca0e59b68bb69dbe9069dc7428e87f6134ade1100ed47286841ef47606d8d146df9d6ae7467fe8bb011f225bad418cff5defd7557251 cf7f0bf70c1238a34f0a9c9b407d0b3269fde717a8d287eceb0c7bde4c32b75376c55c138587a3e73cd045e59622b017d3c3f213ec0c5fc8a82816ec1f540412e94c09b1901f0bbd3cc7a144eee8233221ee0e10c0144e4c17c8443ba58b434e991beb2afa0c2f2c4f762793de1df60205386479890f40247ace9cf9a6369f f9a5bbb7e3dc36cbc22e0a8d375a88f052550e67987c259e7171f10ad20f1529acf9656e3a937db9ed852b8653c1ded792ff94f05d3bd66d2312c3e9fc89c16c7e62b776c53272a89989b7c4dc9ef4a1d697b6708393343a25ac094d88ca78993aada35cc8513188f1f8584e6c6845bd498760be9d036898922de2a3cc9e32 bbd6ff8629cee8a511c3e3e1e7eec952c54cc790e126935b0d680c4988aa9fd2c93e896a907fd8516d7b3f14f28df7e6871e9cfc21099276a51b47f06113e914dfff1c154aaec1bb1b01f6e20ef5110607832fc57746541b1321d17154a6cebf9ca0a4b819f382f6eea3b055775dca6e99708a077c6cf6de22df7dc22f25b0 90728f308051a8eef96a59edc716339e8fe41b96c86e8b66aab3ce55bf4549f08b4af6f3c3852e4630bd1e5d9b877acc726b56fce48842ab3b155f799ecb57e7335f973f6abcc92abc93a618bbf3b5419161310acb2ce7538a933885bbbde46382638f81383076587f13a3453f6d7c2fe3b95a3aba4bfd86a35d8a29461b3d 34b7aeacfdfc1e5d10b0d702ed613132ec0b8b604aede789f475acad193a5602b08a3b134f85608f6be7008659e0b089ac9b686a58b2cfba92f057f358c88001bb6ef4643cbe2124e1aba8c41dfa3dbac01a2794ece49a6b775ac58969ba2bda31a0aa470eed382b46434f4d29f0dd9daf245011dc5e804c89ce30718868e6 e85d82eca96d062a2782274e69ad02df45c2bd7cdcf9ddcde99c4051aa470f4bddd9db94fc0970626515663573f55bcc679819142ec08f8d0a8dae65f9d842730ba374eb164a815c5435503adc4d5a36a878279f8664c42cae71916914a88441cd8c278f7016bad419fe628da49fe26104a83bc727e341ecae8588622d1cd0 f6aaba765767fe2e322d05e65fdf8ec69217b8dac7960350972f5cbad813f6c630b463eec76d0225981b01a8173d94be4f5fa13340c577e59257951afc38f16bc272afa5809c48a9c6c2e1221454f1fac954331f84357724f7fec91249474d852016fc4d1ad1bef25380443566c9755aa9f51ab11e329f885553edc38596bd 98f7ef6f008b367f4094e4e091bdad9db9b9324a09146ef5ecd4b226abead64b36607e740cbdb4b7e183bbb01b10fd9611c9441b0f4a32820ffb35ed97d4cc3db02f7bfacdf3d8ff43fd481cba41564fd28effb08e68a4d9b3d0a4bd71f7bc540b312cd27fe9ae9db9476e5bde90dc4f7d449d94e9ed5f7d2efcb9f43c9474 1c0d61f67d5002515d41c4fed9a0d310e83aae3bf245d5eee62038bbbb8af2944718fb582129b55d653152678c15312781764f4899ecee6ee2eda0927b2c55b6273d08d7abdf87890328c39092998a3ecddada4bc65fdab0b9ea4ea5629429d614391e229a9ca2013cac445910b97c18df2bad6a4c6c704f91ec539f198cd5 5390f995515962dd31ed9fc0146170df8ea0155797c0e807309b667e0cfe87ccd3a3892c23f58f716e32bda6fca8e67fdc201a7b7d524f10d3772fcab5cdaa56bf3b27de2e0b183d62046667ad0d26d1158dd5f159541335f74a41894d208c2c111b1779a870c686ba7a958b821fb43371ae07fb50a80e808c17feb6ef9f55 219037a18369ef6da39d8f139e404a24635d7ff6c745df94981504bcbe7f7d38255beb8ad0a5c44037f7f75075d5123882732d60bf7f9b2cb8304f6e8f95d8646b8c60575be57f65414f20dc832c6af46ef7e79f3cb3e35655e64c4840c2f33d88cd15e518ca89be5b0c0fdeedf04b99de95ea50561cab6ae678c172be2b3b 0618812baff1a6d6eb4cb7d1b06c51b1551a43133e75ee2d12882b42110f3e57eeda27a04caba3b1fc133dfd0f406ac4deaad24d6e53c263d86342cdd703aa3a08ca5b90cb113b1f1302d4891a9dc44f8aa78d70be1caa42ec0cb865cd373fb23ed6ce941ec06c735abf187ce93016e260cfc5d1ca9063e57303807e1609da 8b1106832b3ff74ded7244b973599485e6c4b3084394e694f705be4c1eb577c18524921c0aee5d1bca598d5b1495ff515e198ec7db2000809462e768c1e6c27b48a4c6e0c172352d806a8943adbd74a632fbf6e292e1aba62db85bd2ee8684e17429b3fc5000a28a7551a079c9c2592ed83d8461eef44f6b31b9caa45bf5a4 03dc98f01a263ff46e00385d7b53dccafd0f4da548170692e50ea51a26a84b773bf6c7dfae848c06c313c019bdcbfb732b852a6c6c69b03f6561221da592d0d977bb503ed4b2a882126ed79332eaaa6d2746486ad16c76ec25fe93f3e07c70db46706dae2a40a9401b4b8cf719fa828ff96fac1eda09166d6885bb3ee902c1 4179555659ee4c2436959a6ac64fb4663560db01275429975123a7acc99a06499a29448397e9cd61e576588221d6a32ca0aeffa97e2aa1967ddf2550ad72d4a6bb3c1e125d09623e457f946a4cfdffbc5632b043775d769efd3feb10c5b819e2b678955dcb5c50a47827a6902fe5147589cc9360c68ccf1671cc0aba6880f3 a19c0687cbfa9242d8f24680026b9d7d6ea6948715cdea0f3d52ed9d1d2f959601771923194fba57cd3b70b3f533d7c78dd08e062e41ac958d590f25849b4e93d6b633cbec004c6538d377e2d32faff5f04ac31b7c66d2d5ce1da52d8a1d3c522f99b3a089043add8b2a1ee44a7386fc270bfe189c942b664373cc85c60acc b7181ac4ffd460e4e71d2c76013f482efae7abee4b327093ac2804d1afc861f7a7de8603da9913b002be5c04091dafa9eb412eb7f48a0753f03b0e046821bd66e6563cbdf3edbcefab69535947dbe6f2f7c8788786635a7a6790d775f0dbbc60eead3879dd1cb4fcdb3a003bc3f02945555b3457c568385adcc1650464d66b a6d776fd94b338082116244f37a914fb5f348501fcfa1a37311c6a3d3f1eb115074d5b1e33ee4b172aae2437004f2839b125f8dc2425f819e57eedd51cc73e6272916ef1bb9340e8a0bf4fe911003207214cf5f7ecbdaa23ca72c81627a3fab6f0a76ca04de4b67da13d08c5cffa79df6466751ea4c69d13f08ba0bc31edd0 39a8d67b5dc15f1fdd373745a6337716602129cd8a9974551671a7eb1babfdae4553a4002366a78bb2b4d2346e3975d03f8154475aebed9c12dc961fe7ff34a7f77cb7b5b8d7e41a223d73e4bd95bd856324608c3accc2d972df4e79b437016bcd8a7682dbffc536ce4d4aa891ab6af7c770898cdff852834bae533fe11756 0d4c3486da44ba4a23720f35586d15eb2040b27fce195c542b4ce946e75c12561cc4beb9f043e9895f2dc210b8d15db940b4b1af7d3960828f1e7a8495f1e3f1311534e24d19fb92eff6b05fdb116e6681479fa1cb7ee1d04c2d9650c094ad66055dab234b2bf211987de3e5f1e5eedcf97208074f99927bb58a05a7735117 57fb105f9e82ff844b8a861ca8660209153c7ae1360af278bce884eb3e26566ed7c495107182ec50ac555202b66ca9f95e1246aa410116e768528aee5f545b0d776c28e28d351c470d0275cde551a32fa6ae6d1bc7fb7c90365a3f8a1deabe99b9112cd328a10a4bbecd411f1e8334d5cdba159dd322e8a6f7e3d8d93b9583 ba37326fddfe7e8d930a765c7e4aa87247422056a50a327dbe823a93e5813a97b83d1cded17a83baedcfd94fdbd1f6dcc08cd809ed9e03169c78dc93affa4c6e0a4332864dbefceb736b3b3132703c61c71b6982287c86299b9ff6721360899e6ba980fa73155c79429b6d1ca439ba58850219b9d60526eae7678859923751 f3ffd8204491d2a09d51fed4f671fcdcd41f63dbb58f68acd11b8ec154556fca3d23f8b40dac74c7ea21e46764536efbe9bd334d393953e7852f219082a184bd90a7ba1c3e85fb2446238a9b6ea9dc427f8fa3ca3e8f4366688c606de7bcdc7e61f72edc0a96b2ffd1ad28e4ba954261f8cb773ec2c3f6a8ff6920af26de98 04c302a1279270f0d573ce99d8054eca2f02084d4c7779fcbb647e339f3cf54e5e91077eec3e69eca4a2ad60493e013d1c85f4c0b8b04d7d86b2582bd35e67087fd1de0c0dbc364675fe2f51d88aa599589c634a9f0b323064cf28f3e321166e1071db9dd71adad5897ecee3d1e0ca4842a6711607a381c3b8157faaf4eb03 216d346f7e5321e5faf343386b2607b6ec5fd4c030357ac2cc2384e7344068e27b1d6e6065f5d0bf931da564cca7691b2a1a72b43dbbdbf684fd5b3ffafa35d0550aed1ac330875957035990b6065f78c2b4f0b22bbb06a82ccef074e0d6964b140dc069db4d92586ae352aadc5571a17fb7dc964ab1555bedef347e4dc5b9 0b4badaf5cb181319f1ad11b60b7ef5b95bfad43e6fc4b9abd90803d3a7a41cd10b22e5b66d3e56ea0d4084a9f8db63d98a75b4ffcb3828f67c424e3190a40b2df45b981b3124c03b55d577f05025e1e0889b33739991e4d8c2b8373f76061b3c3a1854f3b4b4f44bd036855bd4303914cee69b04f02a5cbf8cf0f7b6a51d8 4e789cdabcde13883a341066ccd74254d3f377de9be47c64b1a2412865114891ed25f5d0542ae2a6c11aec6bb66b27b6aa1c6a28ef27b0360834a6ce60649cb70e97c6a4f9489e0bebcdbb46bc2f51255fe8d0881829f66397c5e57a4011c08e5cadff39f0c26aaaea0e7cdbd363af1442ed1afceaadb83511e863829af4e1 c42d93e592ff9c47bc36a56271a35025a74f291310d5b65a7abdc466c76ac1b0574c338c507d23cef2791b9a193da6318dd61faff56aefe9417c387778fcc6b3d3c903ddf1ea5ceddbefb3a2646fe4f3b15752e4a1f57faf206de497e428c08d7f4234fd32b11bb83c7a646fa654dd74c365d8b33b62d32f7dcf1b883a1e12 56197ea77555244d3d1e9d06d04396020b114ec2990696a00459acbd561ee5c5396fc723aaa010576684caafde78da712f50e74d2df22c358eb7c24c8fd39c0bd5f40ca0b16c060983950832b0d0339348be4c02a297a7e2dc8866ab678ca26f53ea01b9edb5aea29c91d24ad9cac013b0a73e668e84dec3c885677d19a739 830bf8c6a7fe244bd71006dc910f0b4af82a3628b945d2f942b86cdec1b353d96a3fa2700fb12996d3e63168884283b19c4a77a10f22bdcf87ee97f89157949d963ea85987216b8a32054fe13a01b7970595663382c70fa98ecbd07230178a8343c08322b00afab948e5839b9280a3c068e305dba97af618fa5d4907c06e34 f61e4625bc185a65a0bc360c41f643f70587645f996c63aee43dca8d3c73e7ab81dc4dcaec6f5cbef04c10df686f515ef2db993ca9c2b75d0894851e3230d8675f880947ff321b34f10099d75c764f9a61ef86a074d44a18185c06d3b9c128e79fad780b9400a216c28343f1ad1f55cf676da41cdb39070a5f2f5119d304d3 247cb7d8a91950e7bb94aebdba401f5b67e7a50962080baf6273cbb8d996c429e32d27b07bb30fb981439f2810d7ba1c304ddef4ac8aefe0232822bc6ad9c3b9e37b2989e77159c249e16b9bfd64a78aa4a186a365d9a57c38dc89f701060030d2ff9a745c7c15e97414e06dd013bff7ba8440a0627516be9d92f2733e1857 efa857985abad042914f02f7943f6d85a54e0bebddb5bdae06b272b7c356626c450ca587b5f6c46b4a00118a537bc89ce006da1f274b0761b2b4ebcb258c35e6afcc229b20d20db288c6a97c5202f566b0bbdda11aff10c32e5fc2753ce5ec8142172f5cc17d6366ab015d3f9cd387c8a39f2eb775b37ba436ece08eeda6dc 2b5452dd8bb0b102f5682ad6ef62944fcfd74017414861e7dc4b1cc706d359b6479a0cc2daaa60c17bcd9239243034d9bd15700875d1029f3cf39f54ce3ccf5ba394af8ebb1afede6c4cf5813fbedb618ea04de2d79fbed727e79535f6069c4b6c848d37f67a0539523897e5072daae6fe514c125165a370d026a9d98812cc 69d8979495426fa510ae8b17836459916790404d3148c4743a0811d077837b529cf58ee95c28bbfd51c55d5022a68e7d50d3e34135ce0871231ab01ccd3b21e39019c0aba05a6bc060e96b2e044cf2c2b4b42925f7eab5d5368cb00329d3fda53f446b2fc2a49ca1b2508c8c12bedb475d0899b768a3fac4f57ffda84e0306 8fea90eb79c2c2e89db1a8ded5b4422ff9a04d37131d4286c83b80121ff208f1cd6ac7ebe706f259ef944a2a7c62dd09a3eab41b4ac46948acb0f339591374cadde70d145cb9b842dc9519bb496bfaab2077dfa5835c84178a26937acbc891c962efd45f9dcaec3a90d525b1fdad8f866d011798c228e53334ebd3b85fedde cfc4d576339424e4a8240d3408f53e26a32c5955e227f2e5f12b0063c76fe278dfa61bbf46f757b1accd268d122dd372eebc634e8e89d9624bbe80065f79fa6a6f9ea063004863e5d62f33ff16f9912016c3a3e325b1700522200c4709ac7a6c726db06bf2d460cfd19aad64de6f85a2ca1503dbe85d92b56f4081a6b6445b de690ebfd596196c0465e428956e91713b1023c82c3e06b652a1fe4233c38b99a223bd4fae279f4767b67ee016511dd3801a7e47a99d2edd6161a83fe64c5a6b3b609255ccad9b48d4007d42eeea28fcc7a3db58f8c843a2e6ed51bfced51bcf70f337af2047138f0b6795cd160b9c38dc9b6d3c0f1963515e0ef8bb00380d 2de1c3df1ce536ad62151bee23ad672f856945d7134bd9d9ee4367cb2c02019b0b6ff445b231fce02da72545e309a6b72ca03ab794abd89fa2406f4b3e3a204e1d2b26f2e4d147a919f9511ca4c3a0d6343fc0ea0fdaf8f75c7e20e08d13fb399caa0ac61b92b7ae6d92e23ba9b288789052622c7b3d7a07c0f3bbc62172e8 01986876e927e0059fa6777e53f5252d559d45dde0f137c800c99c094cf5b0f6775139e92bfcc4d19cbd4209b3fa6f8a0a19f4e17cc140ae1b55f8173aa1cc55bb148b74eec1bea4f65a0e112054772e722a09142c381feb22704cc8fd7454928f37a5b9d945f72df2b53f81b9b41526a52c64d06ec2145538a5e6a2a99930 119618fb0ab25396cba9a1a3bcba85c29b1bebde20c7d877d40a256e1c523f49ad5cdcd45ab006506f4a23bcc61c9d734d4dcbd04b7d98c80314ef111136b9238fdfb0b773381b51bd4d2320d83d3e90c0bc23eccebab3ce622f3523f8e13fc6149c9bd54d53ed7f3bea588d1e7a729f0d29d8fa4af77f11b2125f8a46d164 852ad15e6d95fc97a872386b3aee60cfcbfa5ea58114a35f89b3f501486295bf233447da21f1132b1f2c7ae38c4bd4f521ac1a6ada60fb742f39381a5554d8d83eb2dfbf343e8e76bbb4a4e968480147d51d8042299fa21dff54820eef11c3dd8e68a57dec312739612c7930c8825e866ea4adbf719641b0c687bad0d06b12 6910a323f406464ce13e0ddd62ac7884d09e1abde60a452d7f86a58004946984d8b9afa6a989d3d6003904ef42491bddc627940b142493c2e4210c351b0d1bd11388e8d6e7f89bc9fbe660fcb6ecf9c369c02fde1f4a5fae7907a2affead065cee2d12d389b91f171bbe65b61a54968f87f3a220820ab1841f95974dbdfb55 ff1b31cb803aa31ab2db479033fb5cd27c9eed2e515b550403806e3001ec81469534c500392393723604835ba9d036995e988ada6f7b9d1996674122db60728f7281c8a705b59dfa0cfdab48d8a07eabc14387c2d3ac933730c202c276427b33af46a6ba21c9176d651dee87be9a528f887b613df7626ae6c3518390a4a1ab da5e6aeee60bb1547ac718db269b74e3b0545c2b4184c7c22aa6c9c4d472069e33026482adedb4abd07a238f17327ae2920f2997dc4e45b0b63a1b8a7cf848bb09167dfd3aef24641d2a4a2328e6ac651e570a17685f3f4e0d60a18b748dc872b57c70099c92b9b4c05e406dc369120b6355d9f64dbe0e038d4d241a61047a dc6bb25bf149c62a15e809789e906e95c132a3136c91749e1599d93443cd7ea34b644c9c9f19cb414e8a8708775323f4745389c71c80e5c0850e9ba01a9da22362c0bb8a1fe0bee1ca2e808262138b944cc266db6c1d7ca4a60a3f9df1bf7e51cdec5c658730ea415fd054c277f44e2986b66581b2a549fe85bc456d4200d9 868af6cc5830114912fcc394def0a71c0a623d7bcd80f48e9c11b3e2d296a252c742d0f39d83b6301cd12e29d3e961b8ac895af694a095b77cd2c96f85f39732efd7ba811ae7a86b840e7a851ef175f8d0021b3a94f236eee7e0d5a90ce5cef82ed1f78679136d90b2476287350930e3d7395fb7453692857c1cebf5db1c61 380663877967f29f50ce53afb87c364a54e24a680ff0719ec440412e009010e81561d216cd1a5463b9ae07fb9b455e7509522e799121ece54afc0727130eed43b58ab12cbe2b13e9aac4a2ddef070c20eb3f76804b6a5d0222d21a44341193ea30f524559c9adc92ecbe4d254579c92e4d0a153782b97b83c80e0d938cbf0b 8aa00781141720e31989444c427f8e1f309108a51e255d1a3cc9a27d568bd48ec4b91b6df16ac646ab1918186199eeea1948ab0311ac8154a6584511f1e6c069bbb96febdc9e6977e535148eac4f6b4c976cdaef4af0dd687472e14f46b6142f898c3bb6d6c16c9eb5fae1c40fb54f72951a5449dcde81de6b485d92fb6cd5 b5b7232c4b4c60db7df7860dbecfe7fb54ef171010e4f7d9309c4d99541d6799be52b4df81efb631f75d8b79c0ec388c9ed7053094071b3c99f764d2f79e57ca6ac1dbf97a8fb0cf7639c17d3f52e16817b9a169b69c139aa92267dc422ab194c85b77d045f06cb0b7f43dda4ef0c1531fbe03a4030d26efe9d9ec1471b2e2 d04c3b4c99697eca853ceeee89b8abad5c2ff831ca7a697d2c63f96451259c9f9d6604bb11a05c02b4b8a399dac2ad7fb762c12ad20221f5fa84a3d3c044a2365a2e9afe70b9317e5a3493b150410d79ee9a6bac533502f86aa34bb661c8130a00406ac111723e979a029dc8ec59a3a6a3860c5956a69b9ad442a205b0dbb8 ede400ff2d0b3c1acebfb708cc3a280701b040a994a73e5c6f24d6fcef1f0620fcee794ca3262ca20acb4a40f83f20c47e1acc3ac5e11d6e285474d224d5e8db87ae856012452602c227ec55c41630c1e41f800c152211106be2a1917576111b439ea35de4210bb8abbbe78d29353832a44328fd4a4ad560a4c439e237b75e 8b6c68b5948dfc09864017ad2fa5f92a2dcee4a2843518e0b1688ff897610f1dbf4f155449c55ff7b4c2fa63cbe4474471d8a7841c730c25e3e4ad5964424baecb8a79b85aadd61124a2ab94d315c1bca1f95889cebf29c1dbad781c295d0f11288ed22077237dbd0321a089899b8bba3f8b4801ac80c63949f34f890ecc53 cd045ef991ef9890c788bead8ede06f3d77234d60941eb1bd621cf13bd7a8af422a026c031af95ece001ff031280a719ceef8182edc42561c940b621a55576ed3eb0af2ec114ca126b07569886a0e6d7012b6fd933a9ec3ebbe4b0239019494212ea15b43fd7586325d9f8e20c52548992b87cf375ee56e8332b7bdf64d82c 5772c0a3fc1b1a2ac0fb3dc92d175b4ef24e729efd4e61c16be179d2a92fea9337cd7b8aa9c6dfcb80d3c4fd8046cf88c67d39b60b7a47f114dc4fb75660577f66c051e53e9a1402a15128a996357ddba604c93ac9da54c99278fb90b01a8e9d3382170dff0d3a08a1ecdd99d49582dcb65c8dab44840ef72f00fdf9c6a3e0 3fedff1720cd7983b99a051f91e48d410de647e3af1a452c2fe99f4cd1a1581a53eabaa7bffef4fd1d9fcd58ed582266355eeb3f9680aaae539f3848c746cfa259d1e1adbbd2f67e8368d37e501f7b8e8fdad9cca83f8da5207d6f5e02a3b131eb7318cf6fbbd24e85b0bc1565fad145fe0b1179c652bb05ae2f489a6a51c7 79294a47838b509de408e4488b85b58f67df55e5e20dccef396aca3f782efe0015b679e6e0708d95a048ab8766f0ef4e5d863c8df265bab0ed4c8fbc0f33937b3872db50b1c69b5c58dfd7f72c48a8be55ab7d00d81767e86cc5bb6180eeff34785d087db262c8002ddf2c84f1bd2c30f35dd6847386856421851854e0c982 fe66390758a2fc167948458b090e11e2549235c77d4f3584781c9b86f3a8205102141f5a9e15cf131e12ccc45ce92ae4eeb2baf056b4a14d49a072b6ecc5e4fcb34f15cffc3cd60d74da3610953cc79696784ccc82bce2c60a304b38eebc840adb840513c6bffafa550e835f72f777934f5573563a57bc66e71abade7ae3ac 73c3e03b68fc7bba799c4676a65d930d067f3fa85cb87b42e394dfcbc6c4dea90da8f7d2bfceaec38e1e1324927a663295bdce05315152538841a16da4ab75635dc626d8f327effac3786dfcbe0d5c9854d07088527a98624a9cd2223549285805f0947dc643fb35c4f5113e4d53ea3c4594c469de72f97fbd6350a60499b7 a3769b2bdc5276055e40af1a8aca5a71d0b67fd35264e89581e0f8fab486cd9c8af6e742576726cb2376a30aec686b95055277a3e73bd5021585a08288dfd16017a3b511c5a4055ef07d1628973daefc55513703f1c0269abb16e336ee597b94665b4937d3276aaec921d2adb849c1bfaf4338220c013d4d58cfb85b4854a4 1b4dc5c39047a69fde52ab5e5f58104bd94b65990eb49546a3253fec0834a81148f32cea4ab69ba372b2db3990159a6477a77fd9738ae09f7851c89a9e20f415cd6c5614898569e80e9f782d11c20c0c8301f6695891d60ca1b252c91bd98e19f69b8f3fb2f7876e222284c329a7092fb18f012dfd2bfb3395a0fc6912adc2 760ecbf72631d1f6f9053410e8e0d1a2932ace3687848340e93e59a403c811692342cd943df5c15161c681268c09d64c2432795e16c66836fbe8e09def5172b221f76291aa64c3e1d7a9cee1c5268035b246dfc6f0b3e3fc0e52bc50f8d611a1d0993264d032fe86d79dc753d4cad424e5eb5dec307a563da64246469d99b1 20a933210c9229cd665e4e6708fc27ce4307ec78d6cc7003aa16d09904aa7ce00c87a7aff5cbfed7068eb434000ad1ff14310db1b7a3f00301b47ab67b51d87e33e788c580d04b9558087babc32ee6e21b5b2612a2ec98c33add43f276a9bda977e79ad01e55f8b8ce4932d24cd1c519e67e3c09b0f0fb37709edf5eb05803 eb7ebd63f918e5daea5490d154f07c06c4cdb2b6b8dd7bd83c8a3fc5b32a9887c36453e287a6a15336331fbd7bc5f184fcbc8df77f5bbc3fac7750cbbf1d5e455df0b8b2d6e5c3b67c26ec8dd66d9e8365347a40109543e5c9b60c73eedd1d1a412b85e7c570322c99f49f4e3587987a38342f86d8e6ac3618755f52be8557 6e81331d3d98002ac9e77f3425a0c52173e8cdb6a84e804d117657f2d28f60f43523304b4c8e151da16b1ffb120f46980d3e54ae7ea0388cc58aca79b9915b0b1a3ffffd89aa067dc6c9bf201be91b6ed553479bb28652d6890f2b021eb9a71a4fb7e72bf6ae5c19c2be04db78e615c9fd83302ec22969ca21defc48fea88c d4a3beb0867770202664d3ba186a80c08af784664993a67c8751664cd6b7e007c9fb84e79a39deb9a3dcab04084aa64f69b5e1ffeb241ce0b8edaf5041d7fd896aa0c0318b6e9116512c8d5dd2b427134b845e9b74edf02bc060d29799565208a3ce5bececcd2428d526093ac620099d1398d4aebd188fa58cb910606d42bc e7d76afd1242ee0bef6defcf6fd734f990afd1efadec99d77a72ef16abc8e9454b23441bfdbd5b2d9452fb080465b29a1ea0d25f7672f30a6528de7aa61cc2e50e259d7a4976220b15e141774b598ceaea48b4132ffdb29f68602468cfc11e71b8acbc36329b3e0bb9ec27fcff6af6c20224caca52e950ccf85d7c5e0ec04a 5a8e8e2ee4da07da9c10fe3af67532c07b907587623286e60dad282363a74223dfea06ace7603029a1139ab16a0e627f5a32a737bdcc3be57a6b278cfa1509ec93366b8f617faaef887c7c686b1dd063503a31081a89eede0a2234032aab0883ad0e02ab4503fac2eaab793e26bc474e262748f572ec7dee5cbcab75bb5195 25136a7c3b5d592a2010a4c62b43c72fcb0c58d4d485f9debe1ba2917cfee3af3d8fa5120f732cada12182b9759b7e9a2e9263f1cbcf27e6c9b57021aa4a69ca2cb6308912edc4f8d28c82262662e841a0733ff4a48495f9965c15d9784f9c286d992f466a17786af839b7ccb66c54838d9092d674e090c9d2be9378b12bee 55f7fc9e45596ba934b874e792f578309f2db01bc18a0b0586c30ca6bee285edf32c1814b6c8f0b25f89d2bef8b1393ef5ee2f71a4e2621396b69364efe41a9c3cdc0a0e0af1f19abef5b1d7975dca62a5b6834542c29cb9730d4de4681f1259a14e0dcb92597291123a6904c43e2dc61e41d88ba05d24988276b98a3dc968 ae817bd5f6d8da95d4964c164c516a33307aa898aa683321c8ee6747f5bd2e516c90f456c1b0ab3c3c17a8050490a55b7e091cd5119bbdbcf06d3a3fd0af3f4b594960cb82df76523254afef464d169a723d32cf046bd23d4292ce513d06f4e924072475ba19951bbca551322ca5a7da35b822a9f95d500b9bc0e0fb22ff42 812f7666049acf1bcdb427f161ad618a00692a744f9e202775e92ce6f1d478fff48a5909eae512a42bff0c6f59e6c03bb16c08286d7f5703df98e96f8a6b1a85e8dd51fb7466dddfacffc4a343f4181655155ccf23ba2b5efcf376965827f896d93dc16e2080a32dcf9e2f1d251839d55f9304cfad2dbb6190603ccc404b45 345f8816b3cbce1fa2d4c52b0683c02776a69ccbb1bd4c91626ce99f36feb360e37551c1d603938c1932c837a26f3f9ee3447c28d94f3fa7bd80e91d97cfb91c825386f951f7b49d7ea6097df1fff1f9728bc7612072eb6cd00d42e92d99c58363f468e819ce1645eccc610ceeba2d9fe375ce84874e5309426b5da0a1d6c5 e220451980506760d1f15bf459b7941c3cdcef3e173955557c3eff05d57aa911c974fbfafde4e8b7e44e60b608aeaec1c8952f787a4f3db5e36f68209aa0e72ee42c9dab5476731f98efd132bcbf540e65be27d43acab56cf09b182c160931be67293896f86c7754a8d839ead2a46df891e2c68e29302af82524a445c7a719 1ca22bbd34c35e32793c63c6a06264ed44a80392d6dc2a358ac6111b684665aceaca7d912ac32b97918c21c29fe5303b4e7f2c125534f612d192e80dbb1c333ff69218579d5ff15edaeb546c1a37ce0376a717afbdb2a895a4a212f6afea3bade69d5403199b82c4cb3818f5de5b968d2cc7125a0b56402e90e80bb99a3540 1156ac7fc66a030c6baebd6fbc99450ab8289966e8fb784db1098794baaaf6e425a4ec28bae84ca9b4eae3a88c58dce22f587195337627263fde9d4a839340e3c2aeac65159e07713005d8e2c5bb02143687b4f9b94a7b8dc563d9ea6cd4312ef5193de4a7cb80c03669843a5be26e6f72066f4bb4398d6d45bd2932b53eef 3b422a0cd5a7ffd3e0c6e48b9863992f2a5fc9111f3454e9b6ed1beecebe3901429dce3fcdb12818e0fc0580a470d339adac821461c809c57d94643c400667bd81a45243f5b6dfd9a8ab0c9037f4b85121e4bef524408a49a27e1e84a54460bf90ffbd273566b2e72a359c5dc976173de26d425e5e08daaff0f2dbd5a8208e 5d5682c1cc88dc6cf13236594be412b3078fb4162bbcd5fb72a9c85bfa86e9738dc5af7ef3114060e73fa0b1d1eed6eb6cb001d1408a4eaaffa863cc8443a9584005001d94dde3e6864fc87b1ba74809c2af1fc3f809919638fdc57e43bacf1a93980f97f712b27f0e28d973485168413a40de15360c612be853ecb38fe8a7 85e68af029690a4fab6f46bf09d5e0580540645356acde2f64ad0abc4e688cfacbad33e80e873e38073e81e208609af12997c3f6c4e1f5db61175e7de14cd2c0b11dc4dfebe479b8a1bcf3c72d5bbc8f24bf41c1e32e3d242e0ecee5a7e91a79164e352e645bdde2e2ea4e4fa73a51dbac6f3fb12a2e52c931faaea002e632 ed96496f3f6ac6a5c2fbbe514bf15ac568f28e94f08c2d5dd438fd6d0bb1d78bed781f2a592dce57eec4981b61dc14f7e92ab5fd9984a66d5d5a9f0ed99bb5657677be57f825d2fa131247d58e1bb4e05777dca12c1b867b4bc8600c0625e17a5762c8b53e40edab3da7a3e06a850727a673cf1fb83e309cc24035adec1a00 542b0baee896f3159b914f386ef735724ac978e6726e092e5c4f7c8f2d03a26ac3e8767b13433fcb62a70abe33805894df64f5b5610805790c0fb51a4940bfa3065f8eb363a22f7443a14cd875b36aee9ce235e7ea278bb4ba79894a6e0be9481c8968c7923540a9f3562735a841c6265c9a59fc46a79f9d86955edcab2de4 59e9653265dd7bdadab75e6b5403ba677a0911f16c02c1aca1207a80b63339b198bc2ed97d9be44ffcc539de6a09efd6ed3ba7fc86793c605eed99667f647e554a973fbf703c805621dd01027136ca6612623702af39e044e2310a57ab6436a0c2bb9338f66f741cceae5ad97437c183d1616b0f0f82b8c169406a60ff9a3c 8c4d64f8c428f431aa6d6f210032a9d1a690cc9f0e8bc0a8eb092e0a4dff5210fe1d04aae62cdeb09d63b590413afd725b7c69a625626e84bd6de7a9a7dc581740f15a6c33b37fd1c4b0d603620f766b2caede6c58e98232039bf1bcc679ca49c69d94f2f9ff6bc90e42ec4eea2a95f36ec9c4c05ac2727c8dca53cff8b52d 77758f701a73ee7ede506aa45303488608e3278ada7cdb5d0e278024eddaf5b3d71a9e78e09aef38bc1cb9505bd2d5ff7740c01d2cf99d3234e37ebee8bc234a84d246f9d34417ff4b46722c7f7c1f02c88e61c1d07dc9e9e250c27f5921fd79580f2c7960946bcf066460b6a06b56c8a6faf33febc37211a4076d26f23a3c 37caf7a67a61d6a83852619d92b0a47b045610dd8ad197fba14b73c7e521cd1f302257bb4fc9f73c640757151beaac43c7e9c1f57e855d07b7719159af3c3fcfc5f8f0ee36f54afb496e06d2ed4b5b805d8b8aaf98b86a23e129c91661bdcce80d03447f0c136cd494d4673fd203ca4c4daaa785b9b6d5b9b5bef548353a5d 80621a70c8a110f82cc7dda3c13357d058452641c314663f0cfecc25b0dca60ac3c087489239a74723f279be5cce18c58f0426bc79119e4acc48635802d53ce7b79454510c168a9c2eda73621fceba43bfa2faef93ea709b7489cf1cb8d579b798193f06b506c277fd37c5a20cf06531ae664a44dd3c15042c8d037b462792 a887f13493d8fa2e1d6b363b108be4e1e5322c9c5507f692dde3893f900eeefa8b0ac181b12db6e5a19ef26c5ccab730e35be6880bb76c0698b783e5d70d62e7c8a257e56aab3c2f1630f956471d6ea1814ae2d248ab828fd84fa0293591576a21dd10bbdddb6afac43405dc2349bc952d246f36f2fa53938eb25008bfeab9 3ee79e61e8b8484646bab5c5435726f5944849715f4fa5ab626d06c2f4d3b979f75e1dbe41a69fb51df35cb8405c669642155d2e1af0d8c9bfc755a243d7472c62d3ebba5eaf9ffd78f286bd564d714f24d15f5244060411d7f6bbf7eb1bb40ebdf280bc8e2dbc3bb5c08c7bc54987c7fbce2204ea4fb6d4d0cd702608a115 1ce65a55a72697b84ecfaaef7377ca2232f61c0b5d50601848c836dc8904ef730fac47f13317870461374472d742ba2aaa28e408f33bb60f406361cbcc1dbb3881e28a15f3596164b300bb41cb8ca6c2e8711deddf7e217e6dc88dd2cfdf39e583723defcc1b71b1277aba6cb197e612d8292ff4a656d0e3bb6dc3ed945611 e90704e747134e376db710d8f8306e7603f83857da83686e53231c0221bc669c8e1ab002bdfab188211f28497a5bcbb94403fe9e3e98e83e78e050b6abf9b731774fe0eb94644e65a66249d897c5800999da92681963063ebe3fbe290ff13a942e3aa0b85a36437cc74b8eb62a705349a148c70343d786f64b23dcfca752e9 48739f58e50b227d688722f0007034f2bb589b221b450e4e5995a363f9dd0ff043e3c8f1319848dfba748cc99262649dddb2a2a05ef8130d873b4926275bccab6a6d847a1a33512ca8fe6753bff36e417c090bd5749f74e70a49d71614b4950c65cb615dcffb96336f52cb1a948b99fce25af2dca24a683f968c529aa9b57b f0186e0b4f7f1c075669b6ed3b7e1dfd06bbc54b4fc9d5fce169a20000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndFont setpacking %AI3_EndRider [ 39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis /Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute /egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde /oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex /udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls /registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash /.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef /.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash /questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef /guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide /.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright /fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex /Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex /Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla /hungarumlaut/ogonek/caron TE %AI55J_Tsume: None %AI3_BeginEncoding: _TimesTen-Roman TimesTen-Roman [/_TimesTen-Roman/TimesTen-Roman 0 0 1 TZ %AI3_EndEncoding AdobeType [161/degree 173/notequal 176/infinity/plusminus/lessequal/greaterequal 181/mu/partialdiff/summation/product/pi/integral 189/Omega 195/radical 197/approxequal 198/Delta 214/divide/lozenge 240/apple /_Symbol_/Symbol 0 0 0 TZ %AI5_BeginPalette 0 0 Pb 1 1 1 1 ([Registration]) 0 Xs ([Registration]) Pc PB %AI5_EndPalette %AI5_Begin_NonPrinting Np %AI5_End_NonPrinting-- %AI5_Begin_NonPrinting Np %AI8_PluginGroupInfo (Adobe Path Blends) (Adobe Blends Plugin) (Live Blends) %AI8_PluginGroupInfo (Adobe PatternOnPath Brush Tool) (Adobe Pattern Brush Plugin) (Art Brush Tool) %AI8_PluginGroupInfo (Adobe ArtOnPath Brush Tool) (Adobe Art Brush Plugin) (Art Brush Tool) %AI8_PluginGroupInfo (Adobe Calligraphic Brush Tool) (Undo New Calligraphic Brush) (Calligraphic Brush Tool) %AI8_PluginGroupInfo (Adobe Scatter Brush Tool) (Adobe Scatter Brush Plugin) (Scatter Brush Tool) %AI5_End_NonPrinting-- %%EndSetup %AI5_BeginLayer 1 1 1 1 0 0 1 0 79 128 255 0 50 Lb (Layer 1) Ln 0 A u 0 R 1 0 0 0 K 800 Ar 0 J 0 j 1 w 4 M []0 d %AI3_Note: 0 D 1 XR 73.0801 18.5371 m 93.7197 18.5371 L S U u u 0 O 0.1 0 0 0 k 0.5 w 3.3418 11.3379 m 72.8223 11.3379 L 72.8223 25.7373 L 3.3418 25.7373 L 3.3418 11.3379 L B U u 1 R 0 0 0 1 K 5.6045 14.5342 m 70.5596 14.5342 L S U 0 To 1 0 0 1 5.8262 15.7578 0 Tp 0 Tv TP 0 Tr 1 O 0 0 0 1 k 1 w %_ 0 50 XQ /_TimesTen-Roman 8 7.48 -1.92 Tf 0 Ts 100 100 Tz 0 Tt %_0 0 100 100 Xu %AI55J_GlyphSubst: GlyphSubstNone 1 TA %_ 0 XL 0 TY 0 TV 36 0 Xb XB 0 0 5 TC 100 100 200 TW 25 TG 0 0 0 Ti 0 Ta 0 1 2 2 3 Th 0 Tq 240 Tg 9 0 Tl 0 Tc 0 Tw (:) Tx 1 55 Tk ( SlideShowApplet) Tx 1 0 Tk (\r) TX TO U u u 0 O 0.1 0 0 0 k 0 R 1 0 0 0 K 0.5 w 93.1729 11.3379 m 147.292 11.3379 L 147.292 25.7373 L 93.1729 25.7373 L 93.1729 11.3379 L B U u 1 R 0 0 0 1 K 108.5293 14.5342 m 131.9355 14.5342 L S U 0 To 1 0 0 1 108.2051 15.7578 0 Tp 0 Tv TP 0 Tr 1 O 0 0 0 1 k 1 w (:) Tx 1 55 Tk ( ) Tx 1 55 Tk (T) Tx 1 50 Tk (imer) Tx 1 0 Tk (\r) TX TO U *u 1 R 0 0 0 1 K 1 J 0.4 w 101.2002 45.2036 m 97.3604 43.0435 L 97.3604 47.4834 L 101.2002 45.2036 L 101.2002 45.2036 L B *U u 0 J 97.3604 45.2686 m 91.1201 45.2686 L S U 0 To 1 0 0 1 60.3999 42.4883 0 Tp 0 Tv TP 0 Tr 1 O 0 0 0 1 k 1 w (1:) Tx 1 55 Tk ( start\(\)) Tx 1 0 Tk (\r) TX TO *u 1 R 0 0 0 1 K 1 J 0.4 w 55.52 35.6035 m 59.3599 37.8833 L 59.3599 33.4434 L 55.52 35.6035 L 55.52 35.6035 L B *U u 0 J 59.3599 35.6685 m 65.7202 35.6685 L S U 0 To 1 0 0 1 66.8198 32.8882 0 Tp 0 Tv TP 0 Tr 1 O 0 0 0 1 k 1 w (nextSlide\(\)) Tx 1 0 Tk (\r) TX TO LB %AI5_EndLayer-- %%PageTrailer gsave annotatepage grestore showpage %%Trailer Adobe_Illustrator_AI5 /terminate get exec Adobe_shading_AI8 /terminate get exec Adobe_ColorImage_AI6 /terminate get exec Adobe_typography_AI5 /terminate get exec Adobe_cshow /terminate get exec Adobe_level2_AI5 /terminate get exec %%EOF \ No newline at end of file +%!PS-Adobe-3.0 EPSF-3.0 +%%HiResBoundingBox: 0.000000 0.000000 149.000000 44.000000 +%APL_DSC_Encoding: UTF8 +%APLProducer: (Version 10.12.4 (Build 16E195) Quartz PS Context) +%%Title: (Unknown) +%%Creator: (Unknown) +%%CreationDate: (Unknown) +%%For: (Unknown) +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 0 0 149 44 +%%EndComments +%%BeginProlog +%%BeginFile: cg-pdf.ps +%%Copyright: Copyright 2000-2004 Apple Computer Incorporated. +%%Copyright: All Rights Reserved. +currentpacking true setpacking +/cg_md 141 dict def +cg_md begin +/L3? languagelevel 3 ge def +/bd{bind def}bind def +/ld{load def}bd +/xs{exch store}bd +/xd{exch def}bd +/cmmtx matrix def +mark +/sc/setcolor +/scs/setcolorspace +/dr/defineresource +/fr/findresource +/T/true +/F/false +/d/setdash +/w/setlinewidth +/J/setlinecap +/j/setlinejoin +/M/setmiterlimit +/i/setflat +/rc/rectclip +/rf/rectfill +/rs/rectstroke +/f/fill +/f*/eofill +/sf/selectfont +/s/show +%/as/ashow +/xS/xshow +/yS/yshow +/xyS/xyshow +/S/stroke +/m/moveto +/l/lineto +/c/curveto +/h/closepath +/n/newpath +/q/gsave +/Q/grestore +counttomark 2 idiv +%dup (number of ld's = )print == flush % *** how many +{ld}repeat pop +/SC{ % CSname + /ColorSpace fr scs +}bd +/sopr /setoverprint where{pop/setoverprint}{/pop}ifelse ld +/soprm /setoverprintmode where{pop/setoverprintmode}{/pop}ifelse ld +/cgmtx matrix def +/sdmtx{cgmtx currentmatrix pop}bd +/CM {cgmtx setmatrix}bd % pop the ctm: our gstate ctm on host is now identity +/cm {cmmtx astore CM concat}bd % reset the matrix and then concat +/W{clip newpath}bd +/W*{eoclip newpath}bd + +statusdict begin product end dup (HP) anchorsearch{ + pop pop pop % pop off the search results + true +}{ + pop % previous search result + (hp) anchorsearch{ + pop pop true + }{ + pop false + }ifelse +}ifelse + +{ % HP is the product: we use this method of stroking because of a bug in their clone printers with certain T3 fonts + { + { % charCode Wx Wy + pop pop % charCode + (0)dup 0 4 -1 roll put + F charpath + }cshow + } +}{ + {F charpath} +}ifelse +/cply exch bd +/cps {cply stroke}bd +/pgsave 0 def +/bp{/pgsave save store}bd +/ep{pgsave restore showpage}def % dont' bind +/re{4 2 roll m 1 index 0 rlineto 0 exch rlineto neg 0 rlineto h}bd + +/scrdict 10 dict def +/scrmtx matrix def +/patarray 0 def +/createpat{patarray 3 1 roll put}bd +/makepat{ +scrmtx astore pop +gsave +initgraphics +CM +patarray exch get +scrmtx +makepattern +grestore +setpattern +}bd + +/cg_BeginEPSF{ + userdict save/cg_b4_Inc_state exch put + userdict/cg_endepsf/cg_EndEPSF load put + count userdict/cg_op_count 3 -1 roll put + countdictstack dup array dictstack userdict/cg_dict_array 3 -1 roll put + 3 sub{end}repeat + /showpage {} def + 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin + 10 setmiterlimit [] 0 setdash newpath + false setstrokeadjust false setoverprint % don't use F +}bd +/cg_EndEPSF{ + countdictstack 3 sub { end } repeat + cg_dict_array 3 1 index length 3 sub getinterval + {begin}forall + count userdict/cg_op_count get sub{pop}repeat + userdict/cg_b4_Inc_state get restore + F setpacking +}bd + +/cg_biproc{currentfile/RunLengthDecode filter}bd +/cg_aiproc{currentfile/ASCII85Decode filter/RunLengthDecode filter}bd +/ImageDataSource 0 def +L3?{ + /cg_mibiproc{pop pop/ImageDataSource{cg_biproc}def}bd + /cg_miaiproc{pop pop/ImageDataSource{cg_aiproc}def}bd +}{ + /ImageBandMask 0 def + /ImageBandData 0 def + /cg_mibiproc{ + string/ImageBandMask xs + string/ImageBandData xs + /ImageDataSource{[currentfile/RunLengthDecode filter dup ImageBandMask/readstring cvx + /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd + }bd + /cg_miaiproc{ + string/ImageBandMask xs + string/ImageBandData xs + /ImageDataSource{[currentfile/ASCII85Decode filter/RunLengthDecode filter + dup ImageBandMask/readstring cvx + /pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd + }bd +}ifelse +/imsave 0 def +/BI{save/imsave xd mark}bd +/EI{imsave restore}bd +/ID{ +counttomark 2 idiv +dup 2 add % leave room for imagetype and imagematrix +dict begin +{def} repeat +pop % remove mark +/ImageType 1 def +/ImageMatrix[Width 0 0 Height neg 0 Height]def +currentdict dup/ImageMask known{ImageMask}{F}ifelse exch +% currentdict on stack +L3?{ + dup/MaskedImage known + { + pop + << + /ImageType 3 + /InterleaveType 2 + /DataDict currentdict + /MaskDict + << /ImageType 1 + /Width Width + /Height Height + /ImageMatrix ImageMatrix + /BitsPerComponent 1 + /Decode [0 1] + currentdict/Interpolate known + {/Interpolate Interpolate}if + >> + >> + }if +}if +exch +{imagemask}{image}ifelse +end % pop imagedict from dict stack +}bd + +/cguidfix{statusdict begin mark version end +{cvr}stopped{cleartomark 0}{exch pop}ifelse +2012 lt{dup findfont dup length dict begin +{1 index/FID ne 2 index/UniqueID ne and +{def} {pop pop} ifelse}forall +currentdict end definefont pop +}{pop}ifelse +}bd +/t_array 0 def +/t_i 0 def +/t_c 1 string def +/x_proc{ % x y + exch t_array t_i get add exch moveto + /t_i t_i 1 add store +}bd +/y_proc{ % x y + t_array t_i get add moveto + /t_i t_i 1 add store +}bd +/xy_proc{ + % x y + t_array t_i 2 copy 1 add get 3 1 roll get + 4 -1 roll add 3 1 roll add moveto + /t_i t_i 2 add store +}bd +/sop 0 def % don't bind sop +/cp_proc/x_proc ld % default moveto proc is for xwidths only +/base_charpath % string array +{ + /t_array xs + /t_i 0 def + { % char + t_c 0 3 -1 roll put + currentpoint + t_c cply sop + cp_proc + }forall + /t_array 0 def +}bd +/sop/stroke ld % default sop is stroke. Done here so we don't bind in /base_charpath + +% default sop is stroke +/nop{}def +/xsp/base_charpath ld +/ysp{/cp_proc/y_proc ld base_charpath/cp_proc/x_proc ld}bd +/xysp{/cp_proc/xy_proc ld base_charpath/cp_proc/x_proc ld}bd +/xmp{/sop/nop ld /cp_proc/x_proc ld base_charpath/sop/stroke ld}bd +/ymp{/sop/nop ld /cp_proc/y_proc ld base_charpath/sop/stroke ld}bd +/xymp{/sop/nop ld /cp_proc/xy_proc ld base_charpath/sop/stroke ld}bd +/refnt{ % newname encoding fontname +findfont dup length dict copy dup +/Encoding 4 -1 roll put +definefont pop +}bd +/renmfont{ % newname fontname +findfont dup length dict copy definefont pop +}bd + +L3? dup dup{save exch}if + +% languagelevel2 ONLY code goes here + +/Range 0 def +/DataSource 0 def +/val 0 def +/nRange 0 def +/mulRange 0 def +/d0 0 def +/r0 0 def +/di 0 def +/ri 0 def +/a0 0 def +/a1 0 def +/r1 0 def +/r2 0 def +/dx 0 def +/Nsteps 0 def +/sh3tp 0 def +/ymax 0 def +/ymin 0 def +/xmax 0 def +/xmin 0 def + +/setupFunEval % funDict -- % this calculates and sets up a function dict for evaulation. +{ + begin + /nRange Range length 2 idiv store + /mulRange % precompute the range data needed to map a sample value from the table to a range value + % this data looks like [ range0mul range0min range1mul range1min ... rangeN-1mul rangeN-1min ] + [ + 0 1 nRange 1 sub + { % index + 2 mul/nDim2 xd % 2*dimension# we are dealing with + Range nDim2 get % ymin + Range nDim2 1 add get % ymin ymax + 1 index sub % ymin (ymax-ymin) + % xmin = 0, xmax = 255 (2^bitspersample - 1) + 255 div % ymin (ymax-ymin)/(xmax - xmin) + exch % (ymax-ymin)/(xmax - xmin) ymin + }for + ]store + end +}bd + +/FunEval % val1 fundict -> comp1 comp2 ... compN +{ + begin + % the value passed in is the base index into the table + nRange mul /val xd % compute the actual index to the table + % since there are nRange entries per base index + 0 1 nRange 1 sub + { + dup 2 mul/nDim2 xd % dim + val % base value to use to do our lookup + add DataSource exch get % lookedupval + mulRange nDim2 get mul % lookedupval*(ymax-ymin)/(xmax-xmin) + mulRange nDim2 1 add get % lookedupval*(ymax-ymin)/(xmax-xmin) ymin + add % interpolated result + }for % comp1 comp2 ... compN + end +}bd + +/max % a b -> max(a, b) +{ + 2 copy lt + {exch pop}{pop}ifelse +}bd + +/sh2 +{ % emulation of shading type 2. Assumes shading dictionary is top dictionary on the dict stack + /Coords load aload pop % x0 y0 x1 y1 + 3 index 3 index translate % origin is now at beginning point of shading + % x0 y0 x1 y1 + 3 -1 roll sub % x0 x1 y1-y0 + 3 1 roll exch % y1-y0 x1 x0 + sub % y1-y0 x1-x0 + 2 copy + dup mul exch dup mul add sqrt % length of segment between two points + dup + scale + atan % atan (dy/dx) + %dup (rotation angle = )print == + rotate % now line between 0,0 and 1,0 is the line perpendicular to which the axial lines are drawn + + /Function load setupFunEval % may need to setup function dictionary by calling setupFunEval + + % this is now specific to axial shadings. Compute the maximum bounds to fill + clippath {pathbbox}stopped {0 0 0 0}if newpath % x0 y0 x1 y1 + /ymax xs + /xmax xs + /ymin xs + /xmin xs + currentdict/Extend known + { + /Extend load 0 get + { + 0/Function load FunEval sc % evaluate the function to get a color and set it + xmin ymin xmin abs ymax ymin sub rectfill + }if + }if + % paint the rects. The sampling frequency is that of our table + /Nsteps/Function load/Size get 0 get 1 sub store + /dx 1 Nsteps div store + gsave + /di ymax ymin sub store + /Function load + % loop Nsteps + 1 times, incrementing the index by 1 each time + 0 1 Nsteps + { + 1 index FunEval sc + 0 ymin dx di rectfill + dx 0 translate + }for + pop % pop our function + grestore % origin is back to start point + currentdict/Extend known + { + /Extend load 1 get + { + Nsteps/Function load FunEval sc % last element + 1 ymin xmax 1 sub abs ymax ymin sub rectfill + }if + }if +}bd + +/shp % this paints our shape for shading type 3 +{ % x1 r1 x0 r0 - + 4 copy + + % fill interior arc + dup 0 gt{ + 0 exch a1 a0 arc + }{ + pop 0 moveto + }ifelse + + dup 0 gt{ + 0 exch a0 a1 arcn + }{ + pop 0 lineto + }ifelse + + fill + + % fill exterior arc + dup 0 gt{ + 0 exch a0 a1 arc + }{ + pop 0 moveto + }ifelse + + dup 0 gt{ + 0 exch a1 a0 arcn + }{ + pop 0 lineto + }ifelse + + fill +}bd + +/calcmaxs +{ % calculate maximum distance vector from origin to corner points + % of bbox + xmin dup mul ymin dup mul add sqrt % (xmin2 + ymin2) + xmax dup mul ymin dup mul add sqrt % (xmax2 + ymin2) + xmin dup mul ymax dup mul add sqrt % (xmin2 + ymax2) + xmax dup mul ymax dup mul add sqrt % (xmax2 + ymax2) + max max max % maximum value +}bd + +/sh3 +{ % emulation of shading type 3. Assumes shading dictionary is top dictionary on the dict stack + /Coords load aload pop % x0 y0 r1 x1 y1 r2 + 5 index 5 index translate % origin is now at first circle origin + 3 -1 roll 6 -1 roll sub % y0 r1 y1 r2 dx + 3 -1 roll 5 -1 roll sub % r1 r2 dx dy + 2 copy dup mul exch dup mul add sqrt + /dx xs % r1 r2 dx dy + 2 copy 0 ne exch 0 ne or + { + % r1 r2 dx dy + exch atan rotate % we are now rotated so dy is zero and positive values of dx move us as expected + }{ + pop pop + }ifelse + % r1 r2 + /r2 xs + /r1 xs + /Function load + dup/Size get 0 get 1 sub % this is the size of our table minus 1 + /Nsteps xs % at some point we should optimize this better so NSteps is based on needed steps for the device + setupFunEval % may need to setup function dictionary by calling setupFunEval + % determine the case: + % case 0: circle1 inside circle2 + % case 1: circle 2 inside circle 1 + % case 2: r1 = r2 + % case 3: r1 != r2 + dx r2 add r1 lt{ + % circle 2 inside of circle 1 + 0 + }{ + dx r1 add r2 le + { % circle 1 inside of circle 2 + 1 + }{ % circles don't contain each other + r1 r2 eq + { % equal + 2 + }{ % r1 != r2 + 3 + }ifelse + }ifelse + }ifelse + /sh3tp xs % sh3tp has the number of our different cases + clippath {pathbbox}stopped {0 0 0 0}if + newpath % x0 y0 x1 y1 + /ymax xs + /xmax xs + /ymin xs + /xmin xs + + % Arc angle atan( sqrt((dx*dx + dy*dy) - dr*dr), dr) + dx dup mul r2 r1 sub dup mul sub dup 0 gt + { + sqrt r2 r1 sub atan + /a0 exch 180 exch sub store + /a1 a0 neg store + }{ + pop + /a0 0 store + /a1 360 store + }ifelse + + currentdict/Extend known + { + /Extend load 0 get r1 0 gt and % no need to extend if the radius of the first end is 0 + { + 0/Function load FunEval sc % evaluate the function to get a color and set it + % case 0: circle1 inside circle2 + % case 1: circle 2 inside circle 1 + % case 2: circles don't contain each other and r1 == r2 + % case 3: circles don't contain each other and r1 != r2 + { + { % case 0 + dx 0 r1 360 0 arcn + xmin ymin moveto + xmax ymin lineto + xmax ymax lineto + xmin ymax lineto + xmin ymin lineto + eofill % for the bigger radius we fill everything except our circle + } + { % case 1 + r1 0 gt{0 0 r1 0 360 arc fill}if + } + { % case 2 + % r1 == r2, extend 0 + % r3 = r, x3 = -(abs(minx) + r), x1 = 0 + + % x(i+1) r(i+1) x(i) r(i) shp + 0 r1 xmin abs r1 add neg r1 shp + } + { % case 3 + % no containment, r1 != r2 + + r2 r1 gt{ % the endpoint we are drawing is that with a circle of zero radius + % x(i+1) r(i+1) x(i) r(i) shp + 0 r1 + r1 neg r2 r1 sub div dx mul % this is point of beginning circle + 0 % point of ending circle + shp % takes x(i+1) r(i+1) x(i) r(i) + }{ % the first circle is the bigger of the two + % we find a circle on our line which is outside the bbox in the + % negative direction + % x(i+1) r(i+1) x(i) r(i) shp + 0 r1 calcmaxs % 0 r1 maxs + dup + % calculating xs: (-(maxs+r2)*x2)/(x2-(r1-r2)) + r2 add dx mul dx r1 r2 sub sub div + neg % maxs xs' + exch 1 index % xs' maxs xs' + abs exch sub + shp + }ifelse + } + }sh3tp get exec % execute the extend at beginning proc for our shading type + }if + }if + + % now do the shading + /d0 0 store + /r0 r1 store + /di dx Nsteps div store + /ri r2 r1 sub Nsteps div store + /Function load + 0 1 Nsteps + { % function t(i) + 1 index FunEval sc + d0 di add r0 ri add d0 r0 shp + { + % fill interior arc + d0 0 r0 a1 a0 arc + d0 di add 0 r0 ri add a0 a1 arcn + fill + + % fill exterior arc + d0 0 r0 a0 a1 arc + d0 di add 0 r0 ri add a1 a0 arcn + fill + }pop + + % advance to next + /d0 d0 di add store + /r0 r0 ri add store + }for + pop % pop our function dict + + % handle Extend + currentdict/Extend known + { + /Extend load 1 get r2 0 gt and % no need to extend if the radius of the last end is 0 + { + Nsteps/Function load FunEval sc % last element + % case 0: circle1 inside circle2 + % case 1: circle 2 inside circle 1 + % case 2: circles don't contain each other and r1 == r2 + % case 3: circles don't contain each other and r1 != r2 + { + { + dx 0 r2 0 360 arc fill + } + { + dx 0 r2 360 0 arcn + xmin ymin moveto + xmax ymin lineto + xmax ymax lineto + xmin ymax lineto + xmin ymin lineto + eofill % for the bigger radius we fill everything except our circle + } + { % r1 == r2, extend 1 + % r3 = r, x3 = (abs(xmax) + r), x1 = dx + % x(i+1) r(i+1) x(i) r(i) shp + xmax abs r1 add r1 dx r1 shp + } + { % no containment, r1 != r2 + + r2 r1 gt{ + % we find a circle on our line which is outside the bbox in the + % positive direction + % x(i+1) r(i+1) x(i) r(i) shp + calcmaxs dup % maxs maxs + % calculating xs: ((maxs+r1)*x2)/(x2-(r2-r1)) + r1 add dx mul dx r2 r1 sub sub div % maxs xs + exch 1 index % xs maxs xs + exch sub + dx r2 + shp + }{ % the endpoint we are drawing is that with a circle of zero radius + % x(i+1) r(i+1) x(i) r(i) shp + r1 neg r2 r1 sub div dx mul % this is point of ending circle + 0 % radius of ending circle + dx % point of starting circle + r2 % radius of starting circle + shp + }ifelse + } + } + sh3tp get exec % execute the extend at end proc for our shading type + }if + }if +}bd +/sh % emulation of shfill operator for type 2 and type 3 shadings based on type 0 functions +{ % shadingDict -- + begin + /ShadingType load dup dup 2 eq exch 3 eq or + { % shadingtype + gsave + newpath + /ColorSpace load scs + currentdict/BBox known + { + /BBox load aload pop % llx lly urx ury + 2 index sub % llx lly urx ury-lly + 3 index % llx lly urx ury-lly llx + 3 -1 roll exch sub + exch rectclip + }if + 2 eq + {sh2}{sh3}ifelse + grestore + }{ + % shadingtype + pop + (DEBUG: shading type unimplemented\n)print flush + }ifelse + end +}bd + +% end of language level 2 ONLY code + +{restore}if not dup{save exch}if +% languagelevel3 ONLY code goes here + L3?{ % we do these loads conditionally or else they will fail on a level 2 printer + /sh/shfill ld + /csq/clipsave ld + /csQ/cliprestore ld + }if +{restore}if + +%currentdict dup maxlength exch length sub (number of extra slots in md = )print == flush % *** how many entries are free +end +setpacking +% count 0 ne { pstack(***extras on stack during prolog execution***\n)print flush}if % *** BARK if anything is left on stack +%%EndFile +%%EndProlog +%%BeginSetup +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 0 0 149 44 +%%BeginPageSetup +cg_md begin +bp +sdmtx +%RBIBeginFontSubset: Times-Roman +%!FontType1-1.0: Times-Roman 1.0000.0.0000 + 14 dict begin/FontName /Times-Roman def + /PaintType 0 def + /Encoding 256 array 0 1 255{1 index exch/.notdef put}for + dup 33 /colon put + dup 34 /space put + dup 35 /S put + dup 36 /l put + dup 37 /i put + dup 38 /d put + dup 39 /e put + dup 40 /h put + dup 41 /o put + dup 42 /w put + dup 43 /F put + dup 44 /r put + dup 45 /a put + dup 46 /m put + dup 47 /T put + dup 48 /one put + dup 49 /s put + dup 50 /t put + dup 51 /parenleft put + dup 52 /parenright put + dup 53 /n put + dup 54 /x put + readonly def + 42/FontType resourcestatus{pop pop false}{true}ifelse + %APLsfntBegin + {currentfile 0(%APLsfntEnd\n)/SubFileDecode filter flushfile}if + /FontType 42 def + /FontMatrix matrix def + /FontBBox[2048 -416 1 index div -877 2 index div 3482 3 index div 2604 5 -1 roll div]cvx def + /sfnts [< + 74727565000900000000000063767420000000000000009C0000041E6670676D00000000000004BC00000588676C79660000000000000A4400001B0868656164000000000000254C0000003668686561000000000000258400000024686D747800000000000025A8000000686C6F63610000000000002610000000366D617870000000000000264800000020707265700000000000002668000006C305740002054B001D054B0018039700130000FFE30000FFED0000FFEAFE420000054B001DFEBDFFD6031E000000B4000000B402FE3F3C0026001C007D00980003007D00DE00350017002800E3013E000300B400D000DF004C005A00C4004A00AB0147008A004E0039006D013D002401D200360045009E00BE00170079006F00D000460091002100B400BAFFC20017003600AB00B800F60009001D003D0058005A008C0099FFC400A000E800F5FFA1FFEA0033008500B800D5FFE2002F0080008C0002001A00250045006A0070012D0274FF87003E004E009800BA00DE0116FF3E00150034003C004400670068006D006E0084009800BD00D500D7011C0000002D0030003D00460057008B0093009700B000C6011F017B019D0409FF68FF6A0056005A006A006D009200C400D000E700F1011101BF01C7FF1CFFB4FFFF0002002300380042006D0092009C009D00A100A200B400BA00C700C700E400ED0153015703230334FF0DFF32FFFBFFFF000F001C0040004B005C006D006D007C0085009800C500CB00CB00DF011F01280136015501700180018A01C7024203130407054EFF82000000080026003D003D004F006E0073008B00900095009E00A800AD00AD00C300D300E3010901230241028002F40311034004510576FF7FFFAFFFBEFFCF00030005000E0039004B004B004C00740078008800890092009200B600C200D800DF00F000FD010701100117011F01B401DD01EB020002110229028002CA036F038A03AF0400049C04DD053E0587FEA6FEE4FF67FF95FFCBFFF8000200020007002500280037003700380039003F00510053005900640068006B007D0098009900AF00B100B900D000D500DA00DD00FD00FE011E013601370142015A017A01A301C401CC01F702020210021F022902290287029F029F02C002CC02D5031A031D03280331035E0396039F03A8049305640571059405B106EB0788FE63FE64FE76FE7CFEBCFF4BFF97FFACFFC0000700210028002D003000480049004C0051005400560066007A007C0085008A008C009900AF00B300B500B500B600B900BB00BC00CC00D000E100F400F600FC00FD0109011001170118011F01300139013C013E0142014301440149014B014F01540155015701580161016A017D017E0184019C019C019D01A101A301B401B401B901BB01CB01D001D701D701E401EC01EC01F702050207 + 0218022302260240024B024B025702570261026302680269026D028D028D02A602AF02B402B80300033E03460361036103B003C003D503D703DF03F9041A0474047B04C104CC04DA04E404F204F6051005300555055606180639067606A406B3076B07AD07DA00B200D500AE00BB00000000000000000000000000630079029602FA007E0247009100C8000002CA024800DA007D01B301A4002D00A5009C0034003400DC00DC0040004000310031000A000A00820030002A002A00004027262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A090807060504030201002C4523466020B02660B004262348482D2C452346236120B02661B004262348482D2C45234660B0206120B04660B004262348482D2C4523462361B0206020B02661B02061B004262348482D2C45234660B0406120B06660B004262348482D2C4523462361B0406020B02661B04061B004262348482D2C0110203C003C2D2C20452320B0CD442320B8015A51582320B08D44235920B0ED51582320B04D44235920B09051582320B00D44235921212D2C20204518684420B001602045B04676688A4560442D2C01B9400000000A2D2C00B9000040000B2D2C2045B00043617D6818B0004360442D2C45B01A234445B01923442D2C2045B00325456164B050515845441B2121592D2CB00143632362B0002342B00F2B2D2C2045B0004360442D2C20B0032552582359212D2C69B04061B0008B0C6423648BB8400062600C642364615C58B0036159B002602D2C45B0112BB0172344B0177AE5182D2C45B0112BB01723442D2C45B0112BB017458CB0172344B0177AE5182D2CB002254661658A46B040608B482D2CB0022546608A46B040618C482D2C4B53205C58B002855958B00185592D2C20B0032545B019234445B01A23444565234520B00325606A20B009234223688A6A606120B0005258B21A401A4523614459B0005058B219401945236144592D2CB9187E3B210B2D2CB92D412D410B2D2CB93B21187E0B2D2CB93B21E7830B2D2CB92D41D2C00B2D2CB9187EC4E00B2D2C4B525845441B2121592D2C0120B003252349B04060B0206320B000525823B002253823B002256538008A63381B212121212159012D2C4569B00943608A103A2D2C01B005251023208AF500B0016023EDEC2D2C01B005251023208AF500B0016123EDEC2D2C01B0062510F500EDEC2D2C20B001600110203C003C2D2C20B001610110203C003C2DB800272C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800282C2020456944B001602DB800292CB800282A212DB8002A2C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800 + 2B2C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB8002C2C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB8002D2C2020456944B001602020457D691844B001602DB8002E2CB8002D2A2DB8002F2C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB800302C4B535845441B2121592DB800312C4BB800095058B101018E59B801FF85B800441DB9000900035F5E2DB800322C2020456944B001602DB800332CB800322A212DB800342C2046B003254652582359208A208A49648A204620686164B004254620686164525823658A592F20B00053586920B000545821B040591B6920B000545821B0406559593A2DB800352C2046B00425465258238A592046206A6164B0042546206A61645258238A592FFD2DB800362C4B20B0032650585158B080441BB04044591B21212045B0C05058B0C0441B2159592DB800372C2020456944B001602020457D691844B001602DB800382CB800372A2DB800392C4B20B003265358B0801BB040598A8A20B0032653582321B0C08A8A1B8A235920B0032653582321B801008A8A1B8A235920B0032653582321B801408A8A1B8A235920B80003265358B0032545B8018050582321B8018023211BB003254523212321591B2159442DB8003A2C4B535845441B2121592D0002002100000597054B000300070043B40201490506B80156401C0004074903000A0504490303021A090607490100190809EB214652182B2B4EF43C4DFD3C4E10F63C4D10FD3C003F3CFD3C10F43CFD3C31303311211127112111210576B8FBFA054BFAB5B803DBFC2500000001005EFE93026F056800110045401C0C0D04030D080C1304040C0D03110D131317171A04AE084811191213B8010BB3218352182B2B4EF44DFDF44E456544E6003F3F1239390111123912393900C910C931301213363717060706111017121707262702115ED080AE13A145792E51E01A7B8FED035E0107A162218079D3FEA1FEFCA9FED893213BAC011D016B00000000010036FE93024705680014004A40200902010F100706100706030B0F070F06101106131617171A14480BAE0F191516B8010BB3214D56182B2B4EF44DF4FD4E456544E6003F3F12393901111217390010C910C93130005D00020706070607273637361110270227371617121102474E4B4F84573B139A477E3A51D41A9E88D10163FEF6767E6D481D21757AD80163011FB60101932158B2FEEEFEAC000100E300000325055E0016006F4019761486140226143614020CFD6208E02203F96207 + E02314E00DB8016EB2136214B8017E40110D0C03020408150508070C1817171A0203B80130B50C0C0D191718BC0178002101A5015D00182B2B4EF43C4D10FD3C4E456544E6003F3C3F1217394DF5EDFC01F52B2B313000715D001615111416171521353E0135113426232206073525330262015270FDCC794A18281A5324016F0C05590509FB4C4D2A041C1E06365A039E30321D101CBB00000200A5FFEF018903AD000B00170035401C022A0807112A170B1917171A142A0E0B2A05050E191819C321FC6F182B2B4EF43C4D10ED10FD4E456544E6003F4DED3FED31300006232226353436333216150226353436333216151406230184452C303E402E2C459E41402F2F464237030D3F442C2E413F2FFCB0422F2D43412E2C4600000001001700000461054B002400A9405A0EC80B1B0F0A010A7C0E1D981A1B0F1901192D1D034A001B24282404211B0828231498171B001801182D141F211B2328231D140E03191F031F1E2404130E0F2E0814132C1D1E1E2308022423081918FA094B300A500AD00A030AB8020AB526121F290403B80203B126252FCCF43CFD3C10F65D4DF4F43C003F3C3F12392F3CFD3C10ED3911391112393901111217392B10F55D01EDEC2B2B10F55D01EDEC0010F55D01EDEC3130373E013511342627352113232E01232122061511213236373311232E01232111141617152117793B4272044307391574ABFEE8291701288348163030174882FED84574FDC2250D3F8503776D430826FEDA8D4B1C29FE374E77FE26774DFE40713F0925000000020055FFE503ED056800360037012F40261123790A7B0B8A0B8A0CE724E525074B08590A5525020B0A0725890A890D8725DB0AD4250736B80107400D357E40593169310231A12C2E1BB80107401F1A7E40561666160216A1261328250D0A04041F2E371303042E2E0940341B35B80169400F001B360D100A2522281B0737191B1AB80169B51C1B1E1B5807B80133400F371B10302BEF2BFF2B032B39365822B8017CB700103010021039382FCCD45D7DEDE41810D45D1112394D7DED18F4181AEDF4ED2F111239123939113910EDF4ED1A003FED3F3CED111739101A3DEC5D1A18F4ED101A3DEC5D1A18F4ED7172313043794034202D0512240E2255000929075501052D0755012012225500230F25550024250E0D082A0A55012928090A062C04550021111F5501002B2B103C103C2B103C103C2B012B2B2B2B8181005D13161716333236353427262F01262726353436333216333236373313232E01232206151417161F01161716151406232226232206072303018434467AB5628F482F97AF4F2F57CEAA46C50E261D082A2D3132DD6C547D303065B4A94544F3BD5FCF0F2419042D3D01E5019C8A528F7C6F644A2F5E6D323361759BCE452421FE4CC59C63584F38393E6F + 68575878A1D8482C1901B403CC0000000001001C000004B8054B00170095403E06C8031B02AF01AF02029F019F02025F015F02021F011F0202114A1B0D2D2208211B0C2D2313C8161B021713110006010808110D06132E0100020D0C0819B8020AB2024B01B80108400E070829121F115F119F11AF110411B80108B2004B17B9020900182FF4F4F45D3CFD3CF4F4E6003F3C3F3C4DFD3C1139390111123911123900DC3C01EDEC2B2B015D5D5D5D10EDEC3130132113232E012B01111416171521353E01351123220607232804850B31246FB2724A7DFDAB824072AA7B1F32054BFEA4A463FBE877390925250A4285040062A5000003004BFFF1038903B4000B00400041010C4066EA26FB260207274606020C239A0A9A39A90AA90BA80DBC09CA09CB2FCB30DC09DC30DA31EC09ED300F57082C312A171C1F141F00330F0F010F49322E3639312C0F0A00061408143325072E3E360B083E3D0B4107413927100B2F412A403179292F2AAF2A022AB80200400A4318271B442242044440B80201B143422FCCF4EDF4FDE410F65D3CE6111239FD3CE42F003F3FED3FED3FED11121739111239762F5D18EDCC111239390111123931304379403B3E3F23280C17010702250D2606261226010E042600073E041E001524171E0016171326101E012728030C00260101000E0F053F081E001127141E01002B2B103C103C2B01103C2B103C2B2B2B2B2B2B2B81818181005D01715D010607061514171633323635243736253534272623220706151416151407062322263534363332171615111417163332363715060706232226270607062322263501024B734B903C27304279FE00915C011314226B332E2E0A25151D2D30ADA7C24525080D29171E252025383A443D034C365B52567E017D022A262E59715B2B1C4A396B613C67556628431A1B2F0C390838160D3B2446997E4584FE6F3A16270E1B34271926583D422036795D02ED00000000020031FFED03ED0576002D003A00DB406D9828A928CB28C92CE32CF42C06006D2E7C2E8B2E9B2EAB2BAC2EBA2BBB2ECD2BCC2EC638DC2BDB2ED5380E032B4C290223080BDA04500A1C0B90111E2017501D1C1E92213231302F0417042227322F23170305343A04122D110134332D073A3E2727210B22042F122740170117B80200B63C37449E2A012AB80201B13C3B2FCCF45DED10F65DF4FD3C003F3C10ED3FED3F12393911121739123901111217390010F5EDFC01F50010F5EDFC01F53130437940183539282C352C3726003928372600362B34260138293A2600002B2B012B2B818100715D01715D001716171134262322060735373E0137363717070E01150314163332363715060F0127350607062322023534123312363511342623220615141633022E3D28251B330C121F522D5A221025060201020220 + 450B160B068B9D0738294960AAD3FDB773608B427E8C959403B1201525013E3D2E020321150C1A0C050E026939793BFCCF413401022102303B097B3D1A2D0107ADD90137FCA85C2901AD826BDFA3A1FC00030028FFE8035E03AA0013001C001D00D9405D69086A0C6F126C157B0779087A0C7D117F127D147D15FC0EF60F0D550866086011C404C712D404E609E20F083D08090A171803090A02090A03061739100301034703061C1C631D13079206A2060206410D0B1D18FE02421D10CF0A010AB80202B31F03DB10B80201B11F1E2FCCF4ED10F65D1239F4ED2F003FED5D3F3CED111239762F5D18FD111239390111123911123910C931304379402A0E1B000515251A261412171E0016171B00181E011918050E03260016111C1E0119011C1E01040F062600002B2B2B012B103C2B103C2B2B2B8181005D015D001615211E0133323637170E0123220235341233060706072126272623370262D4FD850ABE8269903D2329E1A3BCCDEEBFAC3C200E01A60B1B31732D03AAC3B3E8D46E650C7FD8011CB9C90124496536526431584900010012000003E50574003000B64016451601F9170109171A17021A08102F1F3002233F1C1FB801FB403B22033F001C3020241A3F1C1E20232B3F1C2F20230BDA04500A1C0B9029232B2B29231A11030627300410150F00273E1507302F1F1E0A24232F191AB80200B63210272B2F0403B801FFB132312FCCF43CFDE410F63CFD3C003F3C3C3C3FED3F123939111217390111123900F5EDFC01F52B2B2B2B015D00313043794010252616182616241E0117182517271E012B01103C2B818100715D0171373E013511342623220607353E013F0117113637363332171615111416171521353E0135113426232206151114161715211252331D380B150D2C811960023F315866A23B20314CFE4F5732415A4E923455FE471C0B3B6E03C038350302240D25081E07FD9A48223C884875FE686A400A1C1C0C3A6E019561787011FE1370380C1C000000000200280000020E0574000B0025005D4026230C0F3F0C1C25202423202018201050171C18921C201F100F041C25089502001C0725240A27B80200400A200B9505271F20DD100FB901FF00262FF43CFD3CF4ED10E6003F3C3F3F4DED1112173910F5EDFC01F510F52B103C3130123633321615140623222635033E013511342726232206073537363736331615111416171521A83C2C2B3D3D2B2C3C806B38090F300B15322BAF451C08023761FE1A05363E3D2C2B3D3D2BFB110A357501DD411929040E1F0E391D0C0708FD32723A081C000000000100250000020E057C0017004A402015000343001C1720241620120CDA043A0B1C0C901211040304170E0117160A19B80200B411122F0304B901FF00182FF43CFD3CE6003F3C3F1217394DF5EDFC01F510F52B + 103C3130373E013511342726232206073536373216151114161715212A5D420B143D0E211987BE07033C5EFE1C1C09395303D142192A060621243C0C14FB515733071C00000100210000063403A8004E00FA401C36193420021120A70E024F294F3C02103B104D1F4E033F372D431C29BE01FB002200400101001C003C01FB404C22043A001C4E2024243A1C282023373F1C3B2023493A1C4D20230C2005500B1C0C920F43491B37404948434037362D241B1405040C454E130F32453E17323E1F1F170F074E4D3C3B29280A50B80200400B23242F2E8F2DD02D02482DB80147400D464036372F418F40D040024840B80147B746041327492F0504B901FF004F2FF43CFDE41076F4765D183CFD3C1076F4765D183CFD3CE6003F3C3C3C3C3C3F3C3C4D10ED10ED111239111217390111123912390010F5EDFC01F52B2B2B2B2B2B112E015D5D3130005D015D37363736351134262322060735373E013332161D013E0133321716173637363332171615111416171521353E0135113427262322070607111416171521353E01351134272623220607111416171521214E1A28272D15150E4827B205050263904C673D20154A375F63A1361F3F52FE3D573715256C41402536395CFE355F3414216B3D762D3559FE391A07131D5702054A2E040523180D440A0E875A454626414B243E834AA0FE614733081A1C08365301AF612E522B1937FE005154031A1A0C448501189A3A624336FDDD4C3A011A0000020021000003E303AE0033003400B74059191A4D1A02960EA60E021A081F2110321F332F213F2105253F1C2120220343001C3320241C3A1C2020232E3A1C3220230C20043A0B1C0C900F2E2D251C1304030733120F293E17270F07333221200A34073426252F34041B1CB80200B73612272E2F030304B801FFB136352FCCF43C10FDE410F63C1239FD3C2F003F3F3C3C3C3FF4ED113911173910F5EDFC01F52B2B2B2B055D043130437940102728181A2818261E01191A2719291E012B01103C2B8181005D71373E0135113427262322060735363F0132161D013637363332171615111416171521353E01351134262322070607111416171521012547390C133B09130E29995E07035C344E5444386C3A44FE55493A40563B3D22364045FE4B01DC1C09355C01FB401A260202230C321F0A0993562031274CC3FE2D4840011C1C0A3D6601AB5671281735FDD04831021C03AE00030034FFE103C203AA000B001800190092402CC609E5090296109916A010AB16F50A05160014041717550A5410053A0818331902071233080B191544190B05B80202B61B0F440F0B010BB80201B11B1A2FCCF45DED10F61239ED2F003FED3F3CED31304379402C00170D250C010F2600170315260111090F260013071526010E001826011604182601100A12260014 + 061226002B2B2B2B012B2B2B2B2B8100715D015D1A0133320015140223220035000706151412333236353402233734FDC7C60104FCC8C0FEF601593A64A18F70799A922502970113FEFCD8C7FEDA011AD5019E345BDFB2FECCCEA7AD01323C0000010009000002B103AF00290088404CC41E013722011F29010343001C29202424431C2820230B20043F0A1C0B9210221F1E032B24242204030429141D1320801D01201D301D021D951D1027170729280A801A011A2B1327242F0403B801FFB4AF2B012B2A2FCC5DF43CFDE410C45D003F3C3F4DE4CCED715D1239113912173901111217390010F5EDFC01F52B2B015D3130005D015D373E013511342623220607353E0137363732161D013E0133321615140623222623220615111416371521095C3C25310A21123978173235070340774033403125264D162366505DFE132108315001C36355050421142A0913180A10A459643D2E293846713CFE3D5643022100000000020068FFED02C903B10031003201034021130013011602290D390D680C690D790B790C880C0A2908301C31D140011C210000B80191B331D1402DB80121400F222A181C19D1401B1C211A1F1A011AB80191B319D14015B80121402B21120D000A082226230D0A04051F3332120705332A0B320F1A01EF1AFF1A021A4608413200302701273422B801F340100027700FA00FC00F030F4600340134332FCC5D76D4185DE4ED10D45D1239ED76C45D71182F003FED3F3CED11173901111239123900103D1AEC181AF4E55D01103D1AED181AF4ED00103D1AEC1A18F4E501101A3DED1A18F4ED31304379401C28292021101106070629081E012011221E000728051E0021101F1E01002B2B012B2B81818181005D13331617163332363534262F012E013534363332163332363733132326272623220615141F01161514062322262322060723016A21172746874B57323F707B74A079357F0812100618071F14223E7546508A84D5B18F3C980E0C12051A0125013B723D7053422A4E254042865B7090280A0BFEE9613664563A5C4847749A769628110C03B900010019FFED023B04A100220057402A0911011B22021402391E2206400B210A47073E0F0B400A210B24401E210022022F141B1840112C1424232FCCDC1AC81ADC3DC41810FDC4CC1AC81A10D61AC81A003FFD76D41A18C81A3FCCFD3C111239313001005D011523031417163332363717070E01232227263511232E01353436373E013732161D010209CC020D18462435221A16347436762A176D05050918453D710D05039A48FDC04C27452225161E463A693965025E0306050A0B14394798040DF6000001002AFFEC058E03A1003A01084086260726303915391B39213A22060907080E080F081409301822292277148714092702270327043702370337040632351A + 303039122D301B1C1B1C351A1415070607080839121414150706065312321B35351A302D2D5312222221222D3035321B06070814211C150D1811252838000E05111C3A2710061F180B3C140802151030100100100110B801FD400D47150635321B04391A301A011AB801FD400D4720390139261C222D02212621B801FDB547202601263B2FC67176FC1811121739DD10DC5D76FD711811121739DD76FC5D711811121739D6003F3C3F3C3CFD173C111217390705102B103C0710C4C42B10C407102B1008C40708103C07082B1008C4313001715D005D010E01151416171B013E01353426273533150E0107010E0123262703010E01232627012E01273521150E0115141716171B01373426272E0127352103B83C3A0D0BB6B20C1C2E2CFE19201DFEC00406060C02E2FEF90207050C02FED531202F01722E3129182572B4022B1414332E01A10382071A27152D1EFE2501B21C5B17251A061D1D052647FCEB09080604022FFDD30507060402E1792B071F1F0419291D71415DFEE401820C146D2B2D23041F00000000010023000003D50397003B011040B9E7070104000401001500160129022F02301D36582158225823761687048705B61CB61DC506E627124607480F481047170436353723350A08060A350617080A0A35161515290617161706172915282937232915282329153637350A37231539120A293912350A0A359606A506B606D60604172F1223062F12233723373735292317150A0608323A010F12033A1C10113B0300061D2F32031A1C1C3031031B0A37060A15043B1111493B352923173B11061B31401B011B3D313C2FC6DCC65D111217392F762F1811121739003F173CFC173C3F173CFC173C111217392E2E07052B102B5D2E2E072B102B0708103C08103C070810C40807103C080710C40710C40708103C0708103C313001715D005D01150E011514171617363736353426273521150E010F01011E0117152135373E0135342726272E0127070E01151416171521353E013713032E01273501DA2635351C2B3B1D312A26014233581BAB010833472EFE631D171F261224114317A11D0E1F34FED836342BE9C03A2C4A03971C01131E13582E43512E4A161A12031C1C042F27F7FE704E2E021C1C02021812134120371B6022FB2D1E0A130C071C1C0B223E015301235720071C0001FFDE0461025E04CE0003002AB7003D030517171A01B8010DB300190405B8010DB3214657182B2B4EF44DFD4E456544E6002F4DED313003211521220280FD8004CE6D00020031FFEC040005760038004500D240899833A933E337F437046D397C398B399B39AC39BA36BB39CD36CC39C643DB390B03364C3402404433374037422600443342260041363F2601433445260023080DDA071B07471E0404380D0D1C0E901626201F50251C26922B2E32 + 3D3A3B1F0305453F16013F333807453E2B320B060604422E3B0703042F19271B1F1A1D47424435194647B021718D182B2B4EF44DED4E10D6F63C4DF4FD173C1112392F003F3CED3FED3F11121739123910F5EDFC01F50010F5ED1112392F3C76DD3C0110F531304379002B2B012B2B818100715D015D001716173521352134262322060735373E01373E013332161707060733152311141633323637150E01330706263D010607062322023534123312363511342623220615141633022E3D2825FEC801381B330C121F522D5A22102401020202020102A2A420450B160B068C019D020538294960AAD3FDB773608B427E8C959403B1201525D059522E020321150C1A0C050E010169395259FCC6413401022102303B0107037B3D1A2D0107ADD90137FCA85C2901AD826BDFA3A1FC00FFFF0031FF190400057600270018000000000007001700FAFAB800000001000000000000BE665AE95F0F3CF50111080000000000A33D5B0000000000D03CCEACFE60FC930D9A0A2C000000090001000000000000000100000600FE0000000DC5FE60FE600D9A00010000000000000000000000000000001A05C700210200000002AA005E02AA0036040000E3023900A5047300170473005504E3001C038D004B04000031038D002804000012023900280239002506390021040000210400003402AA0009031D00680239001905C7002A0400002302AAFFDE0400003104000031000000360036007E00CC012A016C01FA02E603580440050605A6064A06B4070007EC0896090E09900A5C0ABE0BA20C860CA80D760D84000000010000001A0071000600960009000200100010003B000007E806C300040001B800312BB800272B400F09CF54010F54013FD029019F540140410D01FB0001003001FB0001002001FB0001001001FB0001000001FB400B01002001900701900601F0414F0204000100EF0203000100C00201000100B001FF00B0020100BF0208000300AF020100AF02080002009F0202009F02080002007F0200007F0202007F0208008F0200008F020200800205008F02080007006F0200006F0202006F0205006F02080004005F020200500203005F02080003004F0202004F0204004F0208000300300202003F0204003002080003002F0201002F0204002F02080003001F0208B2010840BA01E5014D0152B50F1FC2710E1FBC014B014D0062001F0131B2864F1FBE01A60020000D018F0020000D0182400E200DDE200DDA200D8F200D7F200DBE018B0050000D016C0050000D0101400E500DD8500D43500D3F500D3A500DBB013B0028000D01034014280DBD280DB8280DA7280D7C280D76280D2D280DBE01B1004A000D01A7004A000D019440204A0DF74A0DC84A0D984A0D854A0D7A4A0D664A0D214A0D621C0D241C0D1B1C0DB8017EB60F920F + 900F0009B8017EB4900D92900DB801F5B3312F1F41B801F3B5331F2B2C361FB80189B2542C1FB80183B254AB1F4115018100290401001F018000290201001F017C00440201001F017901300201001F017801300401001F0177B22F291FB80173B23E9E1FB80171B23EE41FBC016B002E0401001F016AB233E41FB80138B2545E1F4109013300290401001F013200440801001F012DB23E931FB8012AB22CCD1F41110127002E0125001F012400330801001F012300330401001F012200330401001F0106B254261FB80105B4542C1FFF29B80101B21FFE88B80201B61FFB2F521FF62EB80401B21FF52EB80801B21FE129B802ABB21FDD2FB802AB40171FDB2F5E1FD93E4A1FC454261FC354E41FBF2F6C1FBA2CB80401B21FA944BC0401001F00A80130019A400B1FA52F931FA42F891FA23EB80401B21FA033B80801B21F9654B80801B21F9529B80401B61F8954261F732EB80156B21F7233B802AB400B1F6B2F6C1F6A2C4B1F632EB8019A400F1F2E2C371F532FBB1F512F721F4F2CB80401B21F4944B80401B21F482FBA0401001F01F3400D411D1F412F1D1F3D3ECD1F3B44B80201B21F392EB8019AB21F343EB80401B21F322EB80201B61F313E4C1F2B2EB80404B61F2A54311F2233B80201402D1F5567075F075507370735073007260725071E071D071408120810080E080C080A080808060804080208000814B8FFE0402B00000100140610000001000604000001000410000001001002000001000200000001000002010802004A00B801FF85B0018D16763F183F123E113946443E113946443E113946443E113946443E11394660443E11394660442B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B1DB0964B5358B0AA1D59B0324B5358B0FF1D594BB03553205C58B901E701E54544B901E601E545445958B9012101E7455258B901E70121445959184BB04C5058B801E64569B801E7456961B0405258B901E601E645B040614459594BB05653205C58B9002901E64544B9005401E645445958B902360029455258B9002902364459594BB08953205C58B9002F01E74544B9004401E745445958B902E4002F455258B9002F02E44459594BB0CD53205C58B188294544B1292945445958B9052E0088455258B90088052E4459594BB8020153205C58B90130002F4544B12F2F45445958B90AB00130455258B901300AB04459594BB01D53205C58B133334544B13E3345445958B13233455258B133324459594BB02F53205C58B133334544B12C3345445958B15233455258B133524459594BB05B53205C58B133334544B12E3345445958B1A033455258B133A04459592B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B + 2B2B2B2B2B2B2B2B65422B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2BB35B9B819C456523456023456560234560B08B766818B080622020B1819B4565234520B003266062636820B003266165B09B236544B081234420B15B9C4565234520B003266062636820B003266165B09C236544B05B2344B1009C455458B19C406544B25B405B4523614459B3868D7145456523456023456560234560B089766818B080622020B1718D4565234520B003266062636820B003266165B08D236544B071234420B186454565234520B003266062636820B003266165B045236544B0862344B10045455458B145406544B286408645236144592B2B2B2B4569534273737373737373737373737373737373737373737475755E73735E00 + 00>] def + /CharStrings 26 dict dup begin + /.notdef 0 def +/space 1 def +/parenleft 2 def +/parenright 3 def +/one 4 def +/colon 5 def +/F 6 def +/S 7 def +/T 8 def +/a 9 def +/d 10 def +/e 11 def +/h 12 def +/i 13 def +/l 14 def +/m 15 def +/n 16 def +/o 17 def +/r 18 def +/s 19 def +/t 20 def +/w 21 def +/x 22 def +/macron 23 def +/dcroat 24 def +/dong 25 def + end readonly def + currentdict dup/FontName get exch definefont pop end + %APLsfntEnd + 42/FontType resourcestatus{pop pop true}{false}ifelse + {currentfile 0(%APLT1End\n)/SubFileDecode filter flushfile}if + /FontType 1 def + /FontMatrix [ 0.00048828125 0 0 0.00048828125 0 0 ] def + /FontBBox{-416 -877 3482 2604}def + /UniqueID 4416489 def + currentdict currentfile eexec + 54544758EC884CF30C3CD503CEDBFF3839C47C3C3333173232E3FDBFF439491DB843E1924E63AA7726BBB0485AB56D93D8C0906F647A47162891E73FFC2A9873C4B1EAC5EEBDFFC4D06084FBD84139DF4583C6E259D10699944D1068C9C45667DCCCFB9B7EA01B606435EDCBD273ABAC093D14085CCBAC149BD7382E842CFE0D7FE4FD2EF589A2471F6074A80A8B675C2F7A50D63AC1EF90D787BADD11633CB01CF6EE3B37AAF9078A69AC4740E9B6525D78BBD839551A1CB80DB8682FA5E87591BBD6EE8B946063A2A58D9CA3685AB305495DC5FB5747EB8A9A059C4976C0FE4EEAB1D56FF47F1E9664ED9F4A7DAB763AF92B2F6CF2FA7DEC24710E0B9096E30F772BA7FEA9BDBE496C42ED2CEB58F54E80BDF57CE7B4DB6CCFE7182F43BF93CCA0767AF95D62C5D2C3DC6AE1E6D139F51A2C63432117F1714C5566572EE9967A715420ABDCD1D7BD74F8450B89965FCC81C6ACA565C5F3CCF91D430D1F953E4F1A645300A98DD8C47CD64555F08F422340A85404EAE0D3229C4F9336B9470CACBD6BBF3395104750A915CC6EAAC197668267B8C62D2764C8CD69FD937CA3C924D997A0EDE7964BEB9EA2F92EF70C5E5DA0AA5567765E71F2B911B3C55AC8266BDD340E521355EEF85826934CAF24FF8985D12C0AFA59F1D8B277D1FC249188DA98CAE72468909D2E803C1E1900E1EF02D5E10A01AC8CC687FE2CE17EC270360ABACABBD98210089123ADD92E1D9FB6BDF4BBBE74B907201962534C663604DABA9D75DF29121B652C4F639A2269EC2DC740A9397B2234B521F6370F13A4CFB15D5CBBC048D6AB9BDBFBEE35F74A2AA037E3C6E8721DA22FF021DEFB402CC0AC0F359266EF28C5A47D3CDBC304680333A5D6D7985D2F292A373F9400CF09CD9F7CEB2FA9BBA95F66C836FD59F529E8AD8676D800BB99EB10ACA68BC3E7EEE5346DD9B1722F26A96D60B31D37F4A84D668A2DE121B336A0DC52615785CDBBDCC47EA887B211AA257E8D0E7F3A4AAC86ABA1ADAB8826AB89FBFBE6B4C2542095120295FCAAE4686C73F42C58E2DEF8FE7DBBFB309D5AE398A0F04002644B8CFED7CD391D80E0CEBEF8FD09F54543FE42A2CE2CEACB635A13BBACBC2D5603B7A81100427FCC7BE0194E1A422B969653D222AEB04DC55916E062C6DDA2C443FEEFF9F539F7641A7ADAFF294270B5FFA787509BB2D33AA729E067FC1BFC675D57F3EEEE809BA50508D856DEE362A5792D8A2D849B8D9BDBC59E8ABDF931358C034E0C068B8005F2E31440F6F7C2C85EE0700C018B7D30C20044F5C5B9B4A1652D214B809AEE41CF53648516AF480A740DD128418F687154B46247ACC0A7F50DE502BBE5EA7C3D4787A90D5E19C8C96A27F357695D59A95F030819519733101688A9AB7236F0D5CA6E451CBB4A0BB50E20476A280C56E55556D780DF3CAA069B17D9A0 + 92D6E182F73029154550572EBFB8F1349DC43239ABC7ADBAC9E344A7280DF1EC1D43751D5DAEE36213A3373A95E5572F2EDDC8F2967AC98286E9FA93120C20B6B5623F137DAB09396ACC940EEBF1BBCE4689BB2A26949D839892348C5815B7884AB079A90F02CE3064E4E622FC460F7CE06C059BFCF159AAEA458B793A36092C4C2E9897263368E93DFC2EFF79E4C7B83659A208ADEB4B87CB794B6BC6155A2BEC137E22C91EB2AF90FD9EE26447B095EE9FF36BB50E99605615B3D761C11DDBAE83B3A00EDDDD83D235EE5CF639B0FC163743F8295BE0007B1CE8904CD60E70225E58628248FECF21C5457B9FA05E17E7444EC71A0FEDD63F7B530565FBACD5E9572D90B9ACDD430FE2D654721B5179408C78AAF28FC35E03DB997731542FF1B5DE91E087A4B1E217C0A9380B19998EF18DF19C1B2637EB498920B55A3A7C1F8848EF761064A2957663D5D907C5E8822AF9BA0B2B2844FAD6DE8D2D00D7989C75A39441034F7594B50D3D1D27220FBF2C76DEE9AA7D34EB1FD2C627C6DB6E5A4B1E2BA0646C1B3A781DB7BC9C14CEC56A119D8A4422F1DAE08344F8EA18F3B8D4A6B2088D89E7559AC80A54E964A5ED4C063E5ACC16ED8871399FD9B232AC924D3FA1D804AF73497EE0559C6967E1C924611C2E9D1B03A225106BB7BF7595CDAC78E7EF3CB28A75732F753E75982D6F94B1E774BAF6B49F0A041DDDDEA7FFA762243EA825802A365C15AB9304B0CC66F12AF2FADB5F99DB1AFB807A051C9DF5B58FBF28ECEC0C7636B568D0EF4A10CDFBEFF7FA5B65F7C89EA814854228F4DF772BD67DD8B2C942D476683E73A519C91141B33AF4DFEED5B338F763C9F71E03C91C2F9D162595FB28C5EBD9C1DC41F1F8006ABD2F6E114974437D8FBFB58CCC4AC8284041BFC7CA1B1FE17776FD08AFAE469B4072308873FFD8DB58CE50520C49590E2100CE770CE8813EDCE814B24FB3801A6B1025827626B4754AA0548D1ABC1B824DD38E4D195167A9D4F9DDCD5B6BACEDA05C6E4DE1CC66AEEB8882F742392F83A51385AE1CA9C9A77400DF93B7F80129B3171011BA7249A56F5C88316FCA9A840B364005303DA2E641602EF12B66A70D474C4FAB1D44C3B50185961CD68B2E2B3D5EFACE831F648938F744ED4BD0283795F628023187B89CE2E9AA566EABFD2ED109DA500633DFF34D7912C88C3636DBA39ABBB1FF833A1921E0D7B2CFC657DCD14176CD3A6759FC83808628176A7539094180E98E3E784D0A645530A2AF38DF89A881AE83D574569FAAD1C021F82612246FB4AE89EBF4D3EEE715B618B9393B5F10F592A9BDA2B16569344262101142A667CA3010F2F1091D6FF02FB734871A8D2BF1AB2F5BA588564ABBDA2C90691D85741430695CDD2903B1089655CA3A603B9234C6174BECFBCE114B78414BA249E0A4BC8EF7E88A48273453FAAA + 9E5E0C798B7A3A1456A898BE549FCA17A3C8D2096F4A6329D32B478ED6CD6C0DD405664F16A5E2CE25B0F1BF4D477FCFC84037BDB24D14CBE7A429746E99A09D04A53ECD1934D857C706B3F18EE4C42E9248EB9A596D280B505614A7276CBE2B53BEDE16C151331A50304F787937A5DA4AA57489865375BEF6F23AC8213663FA65494E2290F53D2B15549B53987FE3AC0A0DD8915A438717EA59955364E86F35F09E600835DB3B86C756A05BBD9991574F5DA2674A19A795F0B6101950C88FF72CA7FFA74576E1B498676304FFBB8850636812698E39188967FB27E118FA5856D604160934E9A8845406141633D26B04A16AD058764E58DCB1398BB5041D86EFAB95EBE48C0831A825D59464F7A6024D61FC31A67AF30223094AC95128A1029C24893B88656F33DAFCC2B4CC74B86C1BE34207149B7B5C9E5CDB1C736426FCAA649D6A3E5C9164D5CC058A5E56E40AC8F0CBBFA7378376774DAF865C428DA13FE27E212B4274898649F79498A6726BEC58A46E449AFBA895E790CC5E21DDBECAA6DC2D959C96CF429A6E19D91F0F7732D5AB9245D2793F17DB19A03E108261BCB02D8744F317334655237EFE87E3FF07E355865CF1469C4D3019CF9B9A2349C17F8D3A53C064BCFB77A9240F4BB61B40F783AA5B08121ABFE2585EC30D69CDEA800C700ADC30CBA87EB1819D382708D90024F4159EA3976EB7A6D8043DD017E37D7DF36558D8D5CF900AA52F9C2ABE199659D6C86F035F933BB2DBDC5A91DFD841A976C1204643DEFB88E83F00FCDB468F729A25EF2A3EEA40CB6390406B71A51A6EFA19A7846792D4D880D16C6DF6323DAC7F1FCC5DEBB4E8DBC6A62AFF53C893CB77F58A17624314B26E5CCAFF9CDBA356805EE9C72909E062CA75B8C354A8E731793C92D0889881BB6622F4D4CA0602AAB2D1181E3F110CE6107E34973C37A171BE78B192902A695BBF04307D46215946178D3C18C10E72000C2A6755A4FAEFBF28E9693843E9FC758F399856B588E4DE8EE2BBF5A03AF7BFC17333390067923B2A21DA7FAFA003A23D9222652CCEA812DAE50D957042183F714B381A282D0F29B835C0F87C77EE8C1A08B47AEC410AA3C3EA87D9CC20FEB71F4ECF7BD12EE5BC392A7B6B77A68C23E57C079928A0ECD51D17805B9DE9887E8C4E608081CF3B190C480BFD39E67617C76DAD891195A588804E4DF567911CD6EF2867DE2A19A698D3710FD6A8D882F0A9C9FBADD4457345EC99B51C6FDC1AB5019B3669C795D1F8884CCF3D99DEB1D02EE923DFAA11F9EC9EC552ACE9D29A90F10457EEA9456F5D54498E2BD941570C308CAE4E57C7FA44C1606EC782486B29E6F5B3CEA0E850B7A92B874D9355BFBA06ED40761A2462ACD9DF9E12B565A9CB8A07DFD9D64C599D1B9F10F5702A02FAB58CB2ED99266C304F806E1903C1594B6FEC65D63BA4 + 0C77BC9AA16CA79A07C3EBC074F1D586E64D8417665EBB212AC6BC61983197C0CF729851A6669881EE201A65A5991F14D7C31B18B4C0F86D7DA972E1D5D3C9EB040EA45E988324E95F53D651075AD734FB68EF8B514F8413468042550EB1658242DFCFD913789489857A42CB034217099053BE92DF087DCA04B4174E2E0D2A74D5804231F1FF7C8FF740569097A049914851D1FE5CEB915CD973382335026A9538FBCBCA39D158C40C0CD2CA6BA735DC5567A43F7F83CF37A56CE7A0A2A608EF6CB7BC82ABA11F5EC75992BF5B9E9D9ACDB419499D57C0BD32C18E0D59FF2C1159A825A490500DA9D4EBB52F01473FA17E354AD3E1F2BE6BC162DEC2AE4DDFF57B4227EB7A26054E79C3A0D57DF38259B68E805511461C23C3E1506DE8C7502076346A5FDAE4EC3C0E051E28B7659D1549FC76846176FFC9DF4D9AE54B49CAE6E40CC07F30FA6BC64F08A8A7E5D5C9C5D0D2D44EDB2C2159870849DC8EB1B1C26F9B88C2FFAE4CD05C29FDA78D6F094D09F88666CBE2900FB01EDCDEAFB5C03ED3F866E3AF8DEAC1992D5F0CCB829D52A9F4FA3DE26A5ADA999E433011F5654C447F12AF6C4D318CB0DEEEC5DE883C570343E845AD0A903051B13C0B36378234D649693A94C0AD7D7F5054902FD7144B9B70F36BC768BB54D641A426182199094E3E9FC5EC0E8536FB91D5E0BAA43CAAFA887AE92811AA624AD64C2070FD1FF478E315840E3C2FBD112B174020ACB97DBC83F8FF1E7134876F7C1E7908034CCA69686EAD7826E038A2C19755E652072008DB1854E85D18C77FA8C2B5CBDB664AA481F83D04DA6D20EEDAC7BCC5A79FF1538ED01934EDB9674CFB1014B2FD58F11934EC99A8A6E808003DC966744A513333FA3C0E2CD0656517A41DB654615CDC9260FB489B4E132CBA42EC6ED973774179FACB67EB7CF81A0F03C236E3D75B0B5B9683548DA392D132C4DD04CC5015D4FD2D945C5FC1DF2EB005D4DA8E874682B13E39D18A34B669C76E3D4491E463DE3FE52B9DA9C0CE9C4A310CDFF8AA835945BE7CF0342762909539DA9714A4B5D376BC89FD250584BB760FA5FA1C8EC983866FB8AD223F84DD5BA52B34420DCB764552BA140180CF9E18AE2CFE4D4B3CBA1B9A9DD49FA28C4D2885C9BC5EDF265EEA03EB1B40D14F759291D2A18A80236ED20ACD85CC25EB6FAF8B42AA0266FC719C575005CD6D4A06DF98A970A473A0DEC1C22862A43E91A4131CDB8EAC732DDC5092B0011D44B631EA6BF4D86CA8CD559616F372873143D835FAC025BAA74FDD7F1E7533CFA45082BB6318FA657A4CD855171BD1921175D054578835853B3680728E82598D3C0E2034F3311BA695CDA55629823C3A10008F7600919C06DE4EEDCF3E73578624F692895E77C563AB9605BF727600655358A5C3E2A1AC5252E9B50D58885C1B77A3B6AE5C05228D5D8071 + 1C9BD8347D89DE523813851E5970A62A6F681E572B6AC093BB1DAE992E5CC88375497F18B7EF5751C5113028809FCF7453EC5F314883DEDAACAA0936004EA3DBD9C6BA2D826186220CA01E6819E81D736BBB128C7E83FA89AE54ACE27FF2A3CEC007E128A70350879B6BF7EFF497177FDCEAA53ED88ACE8D8A3188593D0AF02040875D74C23C2659E61EC633D3E89888EFF81E718FB64075E02F4936679A8E435E0F2DBEA3A152062ED5E275F7772D8D80006F91F47B2BC79B15D9C66F6EE64C2553C3621763CC64B874BB7CC0FDE8ADF533164948BEE745C12941A7BFDEB633A3B0464603D1FB9DF749267A2B1B36ADC1FCBC8676133D80984E88C0645FFFD77BC651112DDC05EDE042157D459DAE627C0C3B5F3414EEBB174D046DE7567259A85EED1ECEE2554C82D961C262E1CD20E787D5A356B8835278D36DA66FCA64A9A78DA957C8D0184B2B51619B78747FD9C698333F5048326C8147BD59919C1DC7CEED87A39FA314B09AF2257C4574EB1F45BE1C018777E91249B6ACCBDE35ACD13F8C1C40EECEE18A3547B1A0D84D1A3D36C965A44BA191D35B5369CD6E286F06B3807105E8E11EEE33DC36FE829E932A3C90ACF750C36BFF2CD74BE68AAA951285147810B25F07B1D2CE73AD7E2057DE5658EDAB8D63E8ABF0DA06ED0799D4FE20DEC0A6B5A9478CCD49240AE699B6EEFC12775D4644C0BA6564D72A0D333BBFDBE83886AB160FF0133398866C6C201277B73EE161A981CD368BDB77524CACF420AA3F84F9C0540AFC3E781AD6DAA9495CE8D3B50070C488EF24B0269B6A9E450AD5D0B73597D08A141341481F099EE151050ABBAA5F83879BEE36479B90F377C264155B95DE5E77F01C1A4CFCE78470C69E5B834B1DD13698F94FA11456FF6407713CBF5AD6ADCA25EA3D0121EC01CF09463CF58D726F7FFF73E8EB75DC1C534E398D75F5BF6B24DD463D34321DD91DEC106F3065410F6328DB98A6829BE95809B4090BE20FD941B80368B108F308910ABBC10836CCFCBC6CB5C62C4243EB162E5DAB76A809C82B1F159E892E1738E04ECB64A890CBDD2EE296F6F2441002A872B32D6EA14DDE718AB58BF88EF848616F604D6C0273A0D296AE87E1D468B840234575A87BB9786CF0D1FF9057B5A8C0467A13DDB3BD3AD9ECFE5490B1526F1BF01691011A60185CDA2F91A5C341E0F137453B77986A7E6A40C0BDA8674785BB2606034866EC0E511E2CE062873BB4D77ED010671C24DA32BD61DDA30440314F2E0B7C7851E4F52B10C91A3A960BC361DBA3E65728B578144358005E31D697AE1E782A60802EA9BC69A4304836402FB11AA5FF72288D1C8F450CCCF5381F4CFCD229CD65C82C39CB81A23BE0F76E18F578289A0CDAEAF99CC525DFCCB462E8A2B7481B6F65D2C6D0C5E11E2659DDF3ADDC2427B35229D21BACBC0C9BE2CB7E67 + D2983DBBA5776803EF886AE30883334762A70086F37739F04ABB6E8DBF6959B2C2D83B727C76F09493A2DDFE99BBD7DEC1932A19D70A332DB7E234EA71ECF858163EDF81898F021978511ABD3FB132E08AF29B1EFEA21143D034790EB351E8526026BF5B4870D245BBE8042C6FDAD5FD248C2FA10C7E01F0AB31CBCC1C57FBD2D841AD35BCFBBFE0BC463619FBB04AC5E98C4A52F9E9D0A6DAFF1C06BCBDA97E23228A297495D87CA9BA1D65C99A69330EF5E974C09C18DFC204F972F21C426534A4150F420E502F6E793E46358A87F6607B79198B2B6DBB18 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + cleartomark end + %APLT1End + %RBIEndFontSubset +/Times-Roman cguidfix +/F1.1/Times-Roman renmfont +%%EndPageSetup +2 J +0.60000002 i +1 0 0 0 setcmykcolor +q +0 0 149 44 rc +1 0 0 -1 -231 418 cm +303.58008 407.96289 m +324.21948 407.96289 l +S +0.100098 0 0 0 setcmykcolor +CM +2.3417833 3.3378911 m +71.822281 3.3378911 l +71.822281 17.737091 l +2.3417833 17.737091 l +h +2.3417833 3.3378911 m +f +1 J +1 0 0 0 setcmykcolor +1 0 0 -1 -231 418 cm +233.84178 415.16211 m +303.3223 415.16211 l +303.3223 400.76291 l +233.84178 400.76291 l +h +233.84178 415.16211 m +S +0 0 0 1 setcmykcolor +236.10468 411.96561 m +301.05978 411.96561 l +S +0 i +1 0 0 -1 35.826157 12.25781 cm +/F1.1[ 8 0 0 -8 0 0]sf +-30 3 m +(!"#$%&'#\(\)*+,-.')[ 2.222656 2.000000 4.449219 2.222656 2.222656 4.000000 3.550781 4.449219 4.000000 4.000000 5.777344 4.449219 2.664062 3.550781 6.222656 0.000000 ] xS +0.60000002 i +0.100098 0 0 0 setcmykcolor +CM +92.172989 3.3378911 m +146.29208 3.3378911 l +146.29208 17.737091 l +92.172989 17.737091 l +h +92.172989 3.3378911 m +f +1 0 0 0 setcmykcolor +1 0 0 -1 -231 418 cm +323.67297 415.16211 m +377.79199 415.16211 l +377.79199 400.76291 l +323.67297 400.76291 l +h +323.67297 415.16211 m +S +0 0 0 1 setcmykcolor +339.02899 411.96561 m +362.43597 411.96561 l +S +0 i +1 0 0 -1 119.70499 12.25781 cm +-12 3 m +(!"/%.',)[ 2.222656 1.859375 4.609375 2.222656 6.222656 3.550781 0.000000 ] xS +0.60000002 i +CM +100.20039 37.203499 m +96.360489 35.0434 l +96.360489 39.483601 l +100.20039 37.203499 l +h +100.20039 37.203499 m +f +1 0 0 -1 -231 418 cm +331.70038 381.29651 m +327.86047 383.4566 l +327.86047 379.01639 l +331.70038 381.29651 l +h +331.70038 381.29651 m +S +0 J +327.86047 381.2312 m +321.61987 381.2312 l +S +0 i +1 0 0 -1 73.899986 38.9883 cm +-14 3 m +(0!"12-,234)[ 4.000000 2.222656 2.000000 3.113281 2.222656 3.550781 2.664062 2.222656 2.664062 0.000000 ] xS +0.60000002 i +CM +54.519886 27.6035 m +58.359787 29.8832 l +58.359787 25.443399 l +54.519886 27.6035 l +h +54.519886 27.6035 m +f +1 J +1 0 0 -1 -231 418 cm +286.0199 390.89651 m +289.85977 388.61679 l +289.85977 393.05661 l +286.0199 390.89651 l +h +286.0199 390.89651 m +S +0 J +289.85977 390.8316 m +296.22028 390.8316 l +S +0 i +1 0 0 -1 84.319885 29.3883 cm +-18 3 m +(5'62#$%&'34)[ 4.000000 3.550781 4.000000 2.222656 4.449219 2.222656 2.222656 4.000000 3.550781 2.664062 0.000000 ] xS +ep +end +%%Trailer +%%EOF diff --git a/java-sourcecode/ch1/helloworldapplet/HelloWorldCanvas.class b/java-sourcecode/ch1/helloworldapplet/HelloWorldCanvas.class new file mode 100644 index 0000000..a845ca7 Binary files /dev/null and b/java-sourcecode/ch1/helloworldapplet/HelloWorldCanvas.class differ diff --git a/java-sourcecode/ch1/helloworldconsole/HelloWorld.class b/java-sourcecode/ch1/helloworldconsole/HelloWorld.class new file mode 100644 index 0000000..0658396 Binary files /dev/null and b/java-sourcecode/ch1/helloworldconsole/HelloWorld.class differ diff --git a/java-sourcecode/ch15/sound/Read.txt b/java-sourcecode/ch15/sound/Read.txt new file mode 100755 index 0000000..0e42b70 --- /dev/null +++ b/java-sourcecode/ch15/sound/Read.txt @@ -0,0 +1,18 @@ + +Hello, + + +Stock audio - Free sound effects, loops and music. + + +There are no hidden costs or need to sign-up. + + +Artist: Kevin Macleod + +Song: Local Forecast - Elevator Music +Filename:liftMusic.mp3 + +Licence: TThe song is permitted for commercial use under license "Attribution 3.0 Unported (CC BY 3.0)" + +http://www.orangefreesounds.com/ \ No newline at end of file diff --git a/java-sourcecode/ch15/sound/SoundClip.class b/java-sourcecode/ch15/sound/SoundClip.class new file mode 100644 index 0000000..6d54595 Binary files /dev/null and b/java-sourcecode/ch15/sound/SoundClip.class differ diff --git a/java-sourcecode/ch15/sound/SoundClip.java b/java-sourcecode/ch15/sound/SoundClip.java new file mode 100644 index 0000000..2cf26ae --- /dev/null +++ b/java-sourcecode/ch15/sound/SoundClip.java @@ -0,0 +1,50 @@ +import javax.sound.sampled.*; +import java.net.URL; +import java.net.MalformedURLException; +import java.io.IOException; + +public class SoundClip { + + public static void main(String[] args) { + int times = 1; + Clip clip; + URL url = null; + try { + url = new + URL("http://cooplogic.com/cheyney/sound/liftMusic.wav"); + AudioInputStream audio = + AudioSystem.getAudioInputStream(url); // get stream from url + DataLine.Info info = new DataLine.Info(Clip.class, + audio.getFormat()); // info needed for line + + if (!AudioSystem.isLineSupported(info)) { + System.err.println("Audio file not supported: " + + info); + return; + } + try { + clip = (Clip) AudioSystem.getLine(info); // the clip does the work + clip.open(audio); // open the stream. + clip.start(); // start the stream on a separate thread. + // loop until clip has finished + while (clip.getFramePosition() < clip.getFrameLength()) { + try { + Thread.sleep(10); + } catch (Exception e) { + e.printStackTrace(); + } + } + } catch (LineUnavailableException ex) { + ex.printStackTrace(); + } + + } catch (MalformedURLException e) { + System.out.println("Malformed URL: " + url.toString()) ; + } catch (UnsupportedAudioFileException ae) { + System.out.println("not supported: " + ae) ; + } catch (IOException ioex) { + ioex.printStackTrace(); + } + + } +} diff --git a/java-sourcecode/ch15/sound/liftMusic.mp3 b/java-sourcecode/ch15/sound/liftMusic.mp3 new file mode 100755 index 0000000..d637c4c Binary files /dev/null and b/java-sourcecode/ch15/sound/liftMusic.mp3 differ diff --git a/java-sourcecode/ch15/sound/liftMusic.wav b/java-sourcecode/ch15/sound/liftMusic.wav new file mode 100644 index 0000000..6c8e1e4 Binary files /dev/null and b/java-sourcecode/ch15/sound/liftMusic.wav differ diff --git a/java-sourcecode/ch3/drawsticks/DisplayFrame.class b/java-sourcecode/ch3/drawsticks/DisplayFrame.class new file mode 100644 index 0000000..b958495 Binary files /dev/null and b/java-sourcecode/ch3/drawsticks/DisplayFrame.class differ diff --git a/java-sourcecode/ch3/drawsticks/DisplayFrame.java b/java-sourcecode/ch3/drawsticks/DisplayFrame.java new file mode 100644 index 0000000..429d16e --- /dev/null +++ b/java-sourcecode/ch3/drawsticks/DisplayFrame.java @@ -0,0 +1,41 @@ +import java.awt.Canvas; +import javax.swing.JFrame; + +public class DisplayFrame { + // every java program needs a main to run! + public static void main(String[] args){ + if (args.length < 1) { + System.out.println("Usage: java DisplayFrame " + + " [ width height]"); + return; + } + int width = 400; + int height = 400; + try { + if (args.length == 3) { + width = Integer.parseInt(args[1]); + height = Integer.parseInt(args[2]); + } + Class c = Class.forName(args[0]); + JFrame f = null; + if (c.getSuperclass() == Canvas.class) { + Canvas can = (Canvas) c.newInstance(); + f = new JFrame(args[0]); + f.add(can); + } else if (c.getSuperclass() == JFrame.class) { + f = (JFrame) c.newInstance(); + } + if (f != null) { + f.setSize(width,height); + f.setVisible(true); + } + } catch(InstantiationException e) { + e.printStackTrace(); + } catch(ClassNotFoundException cnfe) { + cnfe.printStackTrace(); + } catch(IllegalAccessException iae) { + iae.printStackTrace(); + } + } + +} diff --git a/java-sourcecode/ch3/drawsticks/DrawSticksCanvas.class b/java-sourcecode/ch3/drawsticks/DrawSticksCanvas.class new file mode 100644 index 0000000..ae1c37f Binary files /dev/null and b/java-sourcecode/ch3/drawsticks/DrawSticksCanvas.class differ diff --git a/java-sourcecode/ch3/drawsticks/DrawSticksCanvas.java b/java-sourcecode/ch3/drawsticks/DrawSticksCanvas.java new file mode 100644 index 0000000..294e56e --- /dev/null +++ b/java-sourcecode/ch3/drawsticks/DrawSticksCanvas.java @@ -0,0 +1,43 @@ +/* + * File: DrawSticksApplet.java + * Author: Java Java Java + * Description: This applet uses Java's built-in + * drawing methods to draw vertical lines on its window. + * It draws a set of 12 vertical lines and a set of 7 lines. + */ + +import java.awt.*; +import javax.swing.*; + +public class DrawSticksCanvas extends Canvas +{ + /** drawSticks(g,x,y,num) will draw num vertical line + * segments. The line segments are 10 pixels apart and + * 50 pixels long. The top endpoint of the left most + *line segment is at the point (x,y). + */ + public void drawSticks(Graphics g, int x, int y, int num) + { int k = 0; + while (k < num) + { g.drawLine(x, y, x, y + 50); + x = x + 10; + k = k + 1; + } // while + } // drawSticks() + + public void paint(Graphics g) + { drawSticks(g, 25, 25, 12); + g.setColor(Color.cyan); + drawSticks(g, 25, 125, 7); + } // paint() + + // every java program needs a main to run! + public static void main(String[] args){ + DrawSticksCanvas c = new DrawSticksCanvas(); + JFrame f = new JFrame("Draw Sticks Program"); + f.add(c); + f.setSize(200,200); + f.setVisible(true); + } + +} // DrawSticksCanvas diff --git a/java-sourcecode/ch8/toggle/ToggleButton.class b/java-sourcecode/ch8/toggle/ToggleButton.class new file mode 100644 index 0000000..25c17dc Binary files /dev/null and b/java-sourcecode/ch8/toggle/ToggleButton.class differ diff --git a/java-sourcecode/ch8/toggle/ToggleFrame.class b/java-sourcecode/ch8/toggle/ToggleFrame.class new file mode 100644 index 0000000..8b50cde Binary files /dev/null and b/java-sourcecode/ch8/toggle/ToggleFrame.class differ diff --git a/java-sourcecode/ch8/toggle/ToggleFrame.java b/java-sourcecode/ch8/toggle/ToggleFrame.java new file mode 100644 index 0000000..63de51b --- /dev/null +++ b/java-sourcecode/ch8/toggle/ToggleFrame.java @@ -0,0 +1,25 @@ +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; + +public class ToggleFrame extends JFrame + implements ActionListener { + private ToggleButton lightSwitch; + + public ToggleFrame() { + lightSwitch = new ToggleButton ("off","on"); + getContentPane().add(lightSwitch); + lightSwitch.addActionListener(this); + } // init() + + public void actionPerformed(ActionEvent e) { + setTitle("The light is " + lightSwitch.getText()); + } // actionPerformed() + + public static void main(String args[]) + { + JFrame f = new ToggleFrame(); + f.setSize(200,200); + f.setVisible(true); + } +} // ToggleFrame diff --git a/jjj-os.pdf b/jjj-os.pdf index 0c97401..e510353 100644 Binary files a/jjj-os.pdf and b/jjj-os.pdf differ diff --git a/texfiles/0.intro.tex b/texfiles/0.intro.tex index cf4f4d3..e80f8af 100644 --- a/texfiles/0.intro.tex +++ b/texfiles/0.intro.tex @@ -78,7 +78,7 @@ \section{Welcome} {A diagram of the main functional components in a computer system. The arrows indicate the flow of information between various components. -\label{fig-blockdiagram}} +} {fig-blockdiagram} %\end{graphic} \end{figure} @@ -299,7 +299,7 @@ \section{Networks, the Internet and the World Wide Web} {WWW: The client's browser requests a page from a Web server. When the HTML document is returned, it is interpreted and displayed by the browser. -\label{fig-http}} +} {fig-http} %\end{graphic} \end{figure} @@ -489,8 +489,8 @@ \section{Programming Languages} \figaright{chptr00/0f3.eps} {Translator software translates high-level {\it source code} to machine language {\it object code}. -\label{fig-translator} -\label{pg-fig-translator}} +} {fig-translator} + %\end{graphic} \end{figure} @@ -606,13 +606,13 @@ \section{Why Java?} programmers. For example, we will work on projects throughout the text that involve -games and puzzles. We start out in Chapter~2 by designing very simple +games and puzzles. We start out in Chapter~\ref{chapter-objects} by designing very simple games that involve storing and retrieving data. As we learn more sophisticated programming techniques, we gradually build more complexity into the games and puzzles. For example, we learn how to -create interactive, two-person games in Chapter~4. In Chapter~8, we +create interactive, two-person games in Chapter~\ref{chapter-io}. In Chapter~\ref{chapter-inheritance}, we develop some games and puzzles that are played on virtual game boards. -Finally, in Chapter~14 we learn how to introduce games with multiple +Finally, in Chapter~\ref{chapter-threads} we learn how to introduce games with multiple players on different computers. To get a look at where we are headed you might want to visit the authors' companion Web site: @@ -689,8 +689,8 @@ \subsection{What is an Object?} \figaleft{chptr00/umlobj1.eps} {In UML, objects are represented by rectangles that are labeled with a two-part label of the form {\it id:Type}. The object's label is always underlined. -\label{fig-umlobj1} -\label{pg-fig-umlobj1}} +} {fig-umlobj1} + \end{figure} \subsection{Attributes and Values} @@ -714,8 +714,8 @@ \subsection{Attributes and Values} \figaleft{chptr00/umlobj2.eps} {A second partition of an object diagram is used to display the object's attributes and their values. -\label{fig-umlobj2} -\label{pg-fig-umlobj2}} +} {fig-umlobj2} + \end{figure} We sometimes refer to the collection of an object's attributes and @@ -741,8 +741,8 @@ \subsection{Actions and Messages} \figaright{chptr00/umlmsg1.eps} {Messages in UML are represented by labeled arrows. In this example, we are telling a pawn to move from its current position to row 3 column 4. -\label{fig-umlmsg1} -\label{pg-fig-umlmsg1}} +} {fig-umlmsg1} + \end{figure} The actions that are associated with an object can be used to send @@ -821,8 +821,8 @@ \subsection{What is a Class?} \begin{figure}[tb] \figaleft{chptr00/rectclass.eps} {A UML diagram of the {\tt Rectangle} class. -\label{fig-umlrect} -\label{pg-fig-umlrect}} +} {fig-umlrect} + \end{figure} Figure~\ref{fig-umlrect} shows a UML diagram of our {\tt Rectangle} @@ -903,8 +903,8 @@ \subsection{Instance versus Class Variables and Methods} instances. Note that the class variable, {\tt nRectangles}, is underlined to distinguish it from {\tt length} and {\tt width}, the instance variables. -\label{fig-rects} -\label{pg-fig-rects}} +} {fig-rects} + \end{figure} Figure~\ref{fig-rects} illustrates these concepts. Note that class @@ -931,8 +931,8 @@ \subsection{Instance versus Class Variables and Methods} \begin{figure}[h] \figaleftscaled{chptr00/rectconstr.eps}{0.8} {Constructing a {\tt Rectangle} instance. -\label{fig-rectconstr} -\label{pg-fig-rectconstr}} +} {fig-rectconstr} + \end{figure} \subsection{Class Hierarchy and Inheritance} @@ -1005,8 +1005,8 @@ \subsection{Class Hierarchy and Inheritance} \begin{figure}[tb] \figaleft{chptr00/chesshier-small.png} {The {\tt ChessPiece} hierarchy. -\label{fig-chesshier} -\label{pg-fig-chesshier}} +} {fig-chesshier} + \end{figure} One of the actions that all chess pieces have in common is that they diff --git a/texfiles/1.programs.tex b/texfiles/1.programs.tex index fdca3ed..599b7e5 100644 --- a/texfiles/1.programs.tex +++ b/texfiles/1.programs.tex @@ -1654,7 +1654,6 @@ \subsection{The {\tt import} Statement} \noindent allows all classes in the {\tt java.lang} package to be referred to by their class names alone. In fact, this particular {\tt import} statement is implicit in every Java program. - \subsection{Qualified Names in Java} \label{subsec:qualifiednames} @@ -1740,21 +1739,22 @@ \subsection{Java Development Environments} \noindent A Java programming environment typically consists of several programs that perform different tasks required to edit, compile, and run a Java program. The following description will be based on the -software development environment provided by Sun Microsystems, the -company that developed Java. It is currently known as the {\it Java2 -Platform, Standard Edition 5.0 (J2SE 5.0)}. Versions of J2SE are +software development environment provided by Oracle, the +company that owns and maintains Java. It is currently known as the {\it Java +Platform, Standard Edition 8.0 (Java SE 8)}. Versions of Java SE are available for various platforms, including Linux, Windows, and macOS computers. Free downloads are available at Sun's Web site -at {\tt http://java.sun.com/j2se/}. (For more details about the J2SE, +at {\tt http://www.oracle.com/technetwork/java/}. (For more details +about the Java SE, see Appendix~\ref{appendix-jdk}.) -In some cases, the individual programs that make up the J2SE are +In some cases, the individual programs that make up the Java SE are available in a single program development environment, known as an {\it integrated development environment (IDE)}. Some examples include -Metrowerk's Codewarrior, Borland's JBuilder, and Sun's own NetBeans +Eclipse, jGrasp, and Oracle's own NetBeans IDE. Each of these provides a complete development package for -editing, compiling, and running Java applications and applets on -a variety of platforms, including Linux and Windows. +editing, compiling, and running Java applications on +a variety of platforms, including Linux, macOS, and Windows. Figure~\ref{fig:compile} illustrates the process involved in creating and running a Java program. The discussion that follows here assumes @@ -1762,10 +1762,10 @@ \subsection{Java Development Environments} \figaleft{chptr01/compile.eps}{Editing, compiling, and running %%%\figa{chptr01/compile.eps}{Editing, compiling, and running {\tt HelloWorld.java}. -\label{fig:compile}} +} {fig:compile} \end{figure} -that you are using the J2SE as your development environment to edit, +that you are using the Java SE as your development environment to edit, compile and run the example program. If you are using some other environment, you will need to read the documentation provided with the software to determine exactly how to edit, compile, and run Java @@ -1819,7 +1819,7 @@ \subsection{Compiling a Program} program, whether an applet or an application, the JVM is then used to interpret and execute the bytecode. -The J2SE comes in two parts, a runtime program, called the {\it Java +The Java SE comes in two parts, a runtime program, called the {\it Java Runtime Environment (JRE)} and a development package, called the {\em Software Development Kit (SDK)}. If you are just going to run Java programs, you need only install the JRE on your computer. In order to diff --git a/texfiles/10.exceptions.tex b/texfiles/10.exceptions.tex index 9d90e46..3068628 100644 --- a/texfiles/10.exceptions.tex +++ b/texfiles/10.exceptions.tex @@ -5,7 +5,7 @@ \setcounter{chapter}{9} \chapter{Exceptions: When Things Go Wrong} \label{chapter-exceptions} -\label{pg-chapter-exceptions} + \CObegin @@ -228,8 +228,8 @@ \section{Java's Exception Hierarchy} \figaright{chptr10/exchier.eps}{Part of Java's exception hierarchy. All subclasses of {\tt RuntimeException} are known as {\it unchecked} exceptions. Java programs are not required to catch these exceptions. -\label{fig-excepthier} -\label{pg-fig-excepthier}} +} {fig-excepthier} + \end{figure} \noindent The Java class library contains a number of predefined exceptions, @@ -977,8 +977,8 @@ \subsection{Exception Propagation: Searching for a Catch Block} \figaright{chptr10/stack.eps}{The method call stack for the {\tt Propagate} program. The curved arrows give a trace of the method calls leading to the program's present state. -\label{fig-methodstack} -\label{pg-fig-methodstack}} +} {fig-methodstack} + \end{figure} In order to find a matching catch block for an exception, Java @@ -1355,12 +1355,12 @@ \subsection{Fix the Error and Resume} \noindent The call to {\tt getInt()} is embedded in a {\tt try/catch} block. This leads to the design summarized in Figure~\ref{fig-numformat}. The {\tt IntField} throws an exception that -is caught by the applet, which then displays an error message. +is caught by the GUI, which then displays an error message. \begin{figure}[h] \figa{chptr10/numformat.eps}{If the user types a non-integer into an {\tt IntField}, it will throw a {\tt -NumberFormatException}. The applet will display an error message in a +NumberFormatException}. The GUI will display an error message in a {\tt JOptionPane} (a dialog window).} {fig-numformat} diff --git a/texfiles/11.files.tex b/texfiles/11.files.tex index e897866..9a78695 100644 --- a/texfiles/11.files.tex +++ b/texfiles/11.files.tex @@ -4,7 +4,7 @@ \setcounter{chapter}{10} \chapter{Files and Streams: Input/Output Techniques} \label{chapter-files} -\label{pg-chapter-files} + \CObegin @@ -75,8 +75,8 @@ \section{Introduction} \begin{figure}[b] \figaleft{chptr11/sysinout.eps}{The {\tt System.out} output stream connects your program to the screen and the {\tt System.in} input stream connects it to the keyboard. -\label{fig-systemout} -\label{pg-fig-systemout}} +} {fig-systemout} + \end{figure} %\end{figure} @@ -201,7 +201,7 @@ \subsection{Input and Output Streams} \begin{figure}[t!] \figaright{chptr11/streamhier.eps}{Java's stream hierarchy. -\label{fig-streamhier}\label{pg-fig-streamhier}} +} {fig-streamhier} \end{figure} {\tt InputStream} and {\tt OutputStream} are abstract classes that @@ -383,7 +383,7 @@ \section{CASE STUDY: Reading and Writing Text Files} \begin{figure}[h] \figaleft{chptr11/guitextio.eps}{The GUI design for a program that reads and writes text files. -\label{fig-guitextio}\label{pg-fig-guitextio}} +} {fig-guitextio} \end{figure} %\end{figure} @@ -509,7 +509,7 @@ \subsubsection*{Code Reuse: Designing an Output Method} \figaleft{chptr11/filewriter.eps}{To find the right I/O method, it is sometimes necessary to search the Java class hierarchy. This is easy to do with the online documentation. -\label{fig-filewriter}\label{pg-fig-filewriter}} +} {fig-filewriter} \end{figure} %\end{figure} @@ -626,7 +626,7 @@ \subsection{Code Reuse: Designing Text File Output} %\begin{figure} \begin{figure}[t] \figaleft{chptr11/fileoutput.eps}{The {\tt File\-Output\-Stream} class. -\label{fig-fileoutput}\label{pg-fig-fileoutput}} +} {fig-fileoutput} \end{figure} %\end{figure} @@ -747,7 +747,7 @@ \subsection{Reading from a Text File} \begin{figure}[th] \figaleft{chptr11/filereader.eps}{{\tt FileReader}'s superclasses contain {\tt read()} methods but no {\tt readLine()} methods. -\label{fig-filereader}\label{pg-fig-filereader}} +} {fig-filereader} \end{figure} %\end{figure} The {\tt FileReader} class (Fig.~\ref{fig-filereader}) has the right @@ -1024,7 +1024,7 @@ \subsection{The {\tt TextIO} Application} \begin{figure}[h!] \figaleft{chptr11/textiouml.eps}{The {\tt TextIO} class. -\label{fig-textiouml}\label{pg-fig-textiouml}} +} {fig-textiouml} \end{figure} \noindent Setting up the GUI for this application is straightforward. @@ -1035,7 +1035,7 @@ \subsection{The {\tt TextIO} Application} \begin{figure}[h!] \figaleft{chptr11/textioapp.eps}{An application that performs simple text I/O. -\label{fig-textioapp}\label{pg-fig-textioapp}} +} {fig-textioapp} \end{figure} \begin{figure}[p] @@ -1207,7 +1207,7 @@ \subsection{Validating File Names} %\begin{figure} %\begin{graphic} \marginfig{chptr11/fileuml.eps}{The {\tt java.io.File} class.} -{fig-fileuml} +{fig-fileuml-files} %\end{graphic} %\end{figure} Note the several {\tt static} constants provided. These allow @@ -1404,7 +1404,7 @@ \subsection{Writing Binary Data} %\begin{figure} \begin{figure}[b] \figaleft{chptr11/fostream.eps}{The {\tt File\-Output\-Stream} class. -\label{fig-fostream}\label{pg-fig-fostream}} +} {fig-fostream} \end{figure} %\end{figure} @@ -1583,7 +1583,7 @@ \subsection{Reading Binary Data} %\begin{graphic} \marginfigvspace{-120pt}{chptr11/distream.eps}{The {\tt java.io.Data\-Input\-Stream} class contains methods for reading all types of data. -\label{fig-distream}\label{pg-fig-distream}} +} {fig-distream} %\end{graphic} %\end{figure} @@ -1732,7 +1732,7 @@ \subsection{The {\tt BinaryIO} Application} %\begin{figure} %\begin{figure}[p] \marginfigvspace{30pt}{chptr11/binioapp.eps}{A program to read and write binary files. -\label{fig-binaryioscreen}\label{pg-fig-binaryioscreen}} +} {fig-binaryioscreen} %\end{figure} %\end{figure} @@ -2275,7 +2275,7 @@ \section{From the Java Library \\ {\tt javax.swing.JFileChooser}} %\begin{figure} \begin{figure}[h!] \figaleft{chptr11/opendialog.eps}{The {\it Open File} dialog window. -\label{fig-opendialog}\label{pg-fig-opendialog}} +} {fig-opendialog} \end{figure} %\end{figure} diff --git a/texfiles/12.recursion.tex b/texfiles/12.recursion.tex index 85d4202..8e92f49 100644 --- a/texfiles/12.recursion.tex +++ b/texfiles/12.recursion.tex @@ -4,7 +4,7 @@ \setcounter{chapter}{11} \chapter{Recursive Problem Solving} \label{chapter-recursion} -\label{pg-chapter-recursion} + \CObegin @@ -646,7 +646,7 @@ \subsection{Printing the String Backward} \begin{figure}[h] \figaleft{chptr12/printreverse.eps}{A trace of {\tt print\-Reverse(s)}, which prints its string argument in reverse order. -\label{fig-tracerevprint}\label{pg-fig-tracerevprint}} +} {fig-tracerevprint} \end{figure} this works. Before {\tt printReverse("hello")} can print {\it h}, it calls {\tt printReverse("ello")} and must wait for that call to complete its @@ -814,7 +814,7 @@ \subsection{Counting Characters in a String} \figaleft{chptr12/tracecount.eps}{A trace of {\tt countChar("dad",'d')}, which returns the value 2. -\label{fig-tracecount}\label{pg-fig-tracecount}} +} {fig-tracecount} \end{figure} \JavaTIP[false]{DEBUGGING TIP}{Return Type.}{A common error with nonvoid @@ -914,7 +914,7 @@ \subsection{Translating a String} \begin{figure}[h!] \figaleft{chptr12/traceconvert.eps}{A trace of {\tt convert("bad",'d','m')}, which returns ``bam.'' -\label{fig-traceconvert}\label{pg-fig-traceconvert}} +} {fig-traceconvert} \end{figure} \pagebreak @@ -1145,7 +1145,7 @@ \subsection{Recursive Sequential Search} \begin{figure}[htb] \figaleft{chptr12/headtail2.eps}{A parameter, {\it head}, can represent the head of some portion of the array. -\label{fig-headtail2}\label{pg-fig-headtail2}} +} {fig-headtail2} \end{figure} \JavaTIP{PROGRAMMING TIP}{Subarray Parameter.}{For methods that take an @@ -1236,8 +1236,8 @@ \subsection{Information Hiding} \figaleft{chptr12/searcher.eps}{The public {\tt search()} method serves as an interface to the private recursive method, {\tt search()}. Note that the methods have different signatures. -\label{fig-searcher} -\label{pg-fig-searcher}} +} {fig-searcher} + \end{figure} \begin{figure}[h!] @@ -1453,7 +1453,7 @@ \section{Example: Drawing (Recursive) Fractals} recursive programming. Drawing recursive patterns is also an excellent way to illustrate how to use parameters to create generality in method design. In this section, we will develop two simple -patterns and incorporate them into an applet. +patterns and incorporate them into a GUI. \subsection{Nested Squares} \noindent Earlier in this chapter, we developed a recursive definition @@ -1902,8 +1902,8 @@ \section*{{\color{cyan}Special Topic:} Exploring the Mandelbrot Set} \noindent The Mandelbrot set is one of the most fascinating fractals. It is named after its discover, IBM mathematician Benoit Mandelbrot. The Mandelbrot set itself is the black, heart-shaped image shown in -Figure~12.27. What makes the Mandelbrot set so interesting is that -with the help of a Java applet you can explore the set as if you were +Figure~\ref{fig-mandel}. What makes the Mandelbrot set so interesting is that +with the help of a Java GUI you can explore the set as if you were taking a trip through outer space. %%\\ %%\hspace*{1pc} The most interesting regions to explore are those just along the @@ -1998,7 +1998,7 @@ \section{From the Java Library: \\ javax.swing.JComboBox} \subsection{A {\tt JComboBox} Example} -\noindent As a simple example, let's design an applet interface that +\noindent As a simple example, let's design an graphical interface that can be used to display the fractal patterns we developed earlier. We want an interface that lets the user select from among the available patterns---we'll use the Sierpinski gasket and nested boxes for @@ -2023,7 +2023,7 @@ \subsection{A {\tt JComboBox} Example} {fig-comboscreen} {\tt patterns} menu an entire array of items. If we hadn't done it this way, we would add individual items to the combo box in the -applet's {\tt init()} method. In fact, that's how we'll initialize +JFrame's constructor {\tt RecursivePatterns()}. In fact, that's how we'll initialize the {\tt levels} menu: \begin{jjjlisting} @@ -2034,15 +2034,16 @@ \subsection{A {\tt JComboBox} Example} \end{lstlisting} \end{jjjlisting} -\noindent This loop would be placed in the applet's {\tt init()} -method. It adds strings representing levels 0 to 9 to the menu +\noindent This loop would be placed in the JFrame's constructor, {\tt + RecursivePatterns()}. +It adds strings representing levels 0 to 9 to the menu and initializes the box so that level four is showing as the default option. -Our next step is to designate the applet as the {\tt ItemListener} for -both menus---that is, the applet is named as the object that will +Our next step is to designate the JFrame as the {\tt ItemListener} for +both menus---that is, the JFrame is named as the object that will handle the events that occur in the {\tt JComboBox}es. Then we add the -{\tt JComboBox} component to the applet's window: +{\tt JComboBox} component to the JFrame: \begin{jjjlisting} \begin{lstlisting} @@ -2065,7 +2066,7 @@ \subsection{A {\tt JComboBox} Example} The next step is to implement the {\tt itemStateChanged()} method to handle the user's selections. Whenever the user selects an item from a {\tt JCombo\-Box} menu, an {\tt ItemEvent} is generated. In order -to handle these events, the applet must implement the {\tt +to handle these events, the program must implement the {\tt ItemListener} interface\index{ItemListener interface}, which consists of the single method {\tt itemStateChanged()}. This method is invoked automatically whenever the user selects an item from one of the {\tt @@ -2088,38 +2089,37 @@ \subsection{A {\tt JComboBox} Example} selected level by their respective item numbers within the menus. It then passes these values along to the {\tt canvas} object, which takes care of the drawing. Finally, the method invokes the {\tt repaint()} -method. Because the applet is a container, this will cause all of its +method. Because the JFrame is a container, this will cause all of its components to be repainted as well. Figure~\ref{fig-seqdiag} illustrates the sequence of events that occurs when an item is selected from a {\tt JComboBox}. The complete -implementation for the applet is given in +implementation for the program is given in Figure~\ref{fig-recursivepatterns}. \begin{figure}[tb] \figaright{chptr12/seqdiag.eps}{This UML sequence diagram shows the interaction between the various objects included in the action of selecting an item from a {\tt JComboBox}. -\label{fig-seqdiag} -\label{pg-fig-seqdiag}} -\end{figure} +} {fig-seqdiag} +\end{figure} \begin{figure}[h!] \jjjprogstart -\begin{jjjlisting}[33pc] +\begin{jjjlistingleft}[33pc]{-3pc} \begin{lstlisting} import java.awt.*; import javax.swing.*; import java.awt.event.*; -public class RecursivePatterns extends JApplet implements ItemListener { +public class RecursivePatterns extends JFrame implements ItemListener { private String choices[] = {"Sierpinski Gasket", "Nested Boxes"}; private JComboBox patterns = new JComboBox(choices); // Pattern choices private JComboBox levels = new JComboBox(); // Level choices private Canvas canvas = new Canvas(); // Drawing panel private JPanel controls = new JPanel(); - public void init() { + public RecursivePatterns() { for (int k=0; k < 10; k++) // Add 10 levels levels.addItem(k + "" ); patterns.setSelectedItem(choices[0]); // Initialize menus @@ -2138,20 +2138,26 @@ \subsection{A {\tt JComboBox} Example} public void itemStateChanged(ItemEvent e) { canvas.setPattern(patterns.getSelectedIndex(), levels.getSelectedIndex()); - repaint(); // Repaint the applet + repaint(); // Repaint the JFrame } // itemStateChanged() + + public static void main(String args[]) + { + JFrame f = new RecursivePatterns(); + f.setVisible(true); + } } // RecursivePatterns \end{lstlisting} -\end{jjjlisting} -\jjjprogstop{The {\tt RecursivePatterns} applet.} +\end{jjjlistingleft} +\jjjprogstop{The {\tt RecursivePatterns} program.} {fig-recursivepatterns} \end{figure} \begin{figure}[tb] \figaleft{chptr12/canvasnew.eps}{Design of a drawing {\tt Canvas} class. -\label{fig-canvas} -\label{pg-fig-canvas}} +} {fig-canvas} + \end{figure} The actual drawing of the fractal patterns is handled by the {\tt @@ -2159,8 +2165,8 @@ \subsection{A {\tt JComboBox} Example} Figure~\ref{fig-canvas} and whose implementation is given in Figure~\ref{fig-canvaspanel}. All of the drawing is done in the {\tt paintComponent()} method. Because the {\tt canvas} is contained -within the applet, the {\tt paintComponent()} method is called -automatically whenever the applet repaints itself. Notice how the +within the JFrame, the {\tt paintComponent()} method is called +automatically whenever the JFrame repaints itself. Notice how the {\tt switch} statement uses the pattern that \marginnote{Zero indexing} the user chose to call the corresponding drawing method. You can see diff --git a/texfiles/13.guis.tex b/texfiles/13.guis.tex index 25d8ee7..6eb41d1 100644 --- a/texfiles/13.guis.tex +++ b/texfiles/13.guis.tex @@ -5,7 +5,7 @@ \setcounter{chapter}{12} \chapter{Graphical User Interfaces} \label{chapter-guis} -\label{pg-chapter-guis} + \CObegin \secCOBH{Objectives} @@ -125,17 +125,17 @@ \subsection{Heavyweight Versus Lightweight Components} \figa{chptr13/p472f1.eps}{Swing classes, part 1: Relationship between the AWT and the top-level Swing windows. REVISION: {\tt JWindow} extends {\tt Window}.} -{fig-swing1} +{fig-swing1-guis} \end{figure} %\end{figure} -Figures~\ref{fig-swing1} and \ref{fig-swing2} show the relationship +Figures~\ref{fig-swing1-guis} and \ref{fig-swing2-guis} show the relationship between AWT and Swing classes. The top-level Swing classes---the {\tt JApplet}, {\tt JDialog}, {\tt JFrame}, and {\tt JWindow}---are direct subclasses of their corresponding AWT counterparts. These are the top-level GUI windows. The remaining Swing components -(Fig.~\ref{fig-swing2}) are subclasses of {\tt java.awt.Component} +(Fig.~\ref{fig-swing2-guis}) are subclasses of {\tt java.awt.Component} and {\tt java.awt.Container}. As you can see, the names of Swing and AWT components are very similar. Swing components that have corresponding AWT components have names that begin with ``J.'' @@ -150,8 +150,8 @@ \subsection{Heavyweight Versus Lightweight Components} \begin{figure}[tb] \figaleft{chptr13/p473f1.eps}{Swing classes, part 2: Swing GUI components are derived from the {\tt JComponent} class. -\label{fig-swing2} -\label{pg-fig-swing2}} +} {fig-swing2-guis} + \end{figure} %\end{figure} @@ -350,7 +350,7 @@ \subsection{Pluggable Look and Feel} %\begin{figure}[tb] \marginfig{chptr13/9f4.eps}{The same Java application using the Motif, Windows, and Metal look and feel. -\label{fig-lafs}\label{pg-fig-lafs}} +} {fig-lafs} %\end{figure} %\end{figure} shows how the simple application would appear under the @@ -478,8 +478,8 @@ \section{The Java Event Model} and events that take place when a button is clicked. The vertical lines represent time lines, with time running from top to bottom. The arrows between lines represent messages passing between objects. -\label{fig-p479f1} -\label{pg-fig-p479f1}} +} {fig-p479f1} + \end{figure} %\end{figure} @@ -563,7 +563,7 @@ \subsection{Event Classes} In viewing Table~13.1, it's important to remember that the classes listed there are arranged in a hierarchy. This will affect the events that a particular object can generate. For example, a -{\tt JButton} is a {\tt JComponent} (Fig.~\ref{fig-swing2}), so in addition +{\tt JButton} is a {\tt JComponent} (Fig.~\ref{fig-swing2-guis}), so in addition to generating {\tt ActionEvent}s when the user clicks on it, it can also generate {\tt MouseEvent}s when the user moves the mouse over it. Similarly, because a {\tt JTextField} is also a {\tt JComponent}, @@ -728,7 +728,7 @@ \subsubsection*{Choosing the Components} %\begin{marginalnote}\it Which components do we need?\end{marginalnote} \marginnote{Which components do we need?} tasks of input, output, control, and guidance. For each component, it -might be useful to refer back to Figure~\ref{fig-swing2} to note its +might be useful to refer back to Figure~\ref{fig-swing2-guis} to note its location in the Swing hierarchy. \begin{BL} @@ -770,7 +770,7 @@ \subsubsection*{Choosing the Top-Level Window} typically use a {\tt JFrame} as the top-level window. Both of these classes are subclasses of {\tt Container}, so they are suitable for holding the components that make up the interface -(Fig.~\ref{fig-swing1}). +(Fig.~\ref{fig-swing1-guis}). Also, as noted earlier, {\tt JApplet}s and {\tt JFrame}s are both @@ -791,8 +791,8 @@ \subsubsection*{Designing a Layout} \figaleft{chptr13/9f6.eps}{A design and layout for the Metric Converter GUI.~The {\it containment hierarchy} (also called a {\it widget hierarchy}) shows the containment relationships among the components. -\label{fig-metricgui} -\label{pg-fig-metricgui}} +} {fig-metricgui} + \end{figure} %\end{figure} @@ -1194,8 +1194,8 @@ \subsection{Extending the Basic GUI: Button Array} \begin{figure}[tb] \figaright{chptr13/9f9.eps}{A widget hierarchy showing the containment relationships among the components. -\label{fig-metricgui2} -\label{pg-fig-metricgui2}} +} {fig-metricgui2} + \end{figure} %\end{figure} @@ -1208,7 +1208,7 @@ \subsection{Extending the Basic GUI: Button Array} JPanel} and will handle its own {\tt ActionEvent}s. As we saw in Chapter~4, a {\tt JPanel} is a generic container. It is a subclass of {\tt Container} via the {\tt JComponent} class -(Fig.~\ref{fig-swing2}). Its main purpose is to contain and organize +(Fig.~\ref{fig-swing2-guis}). Its main purpose is to contain and organize \marginfig{chptr13/p490f1.eps}{A {\tt KeyPad} is a {\tt JPanel} of {\tt JButton}s that handles its own action events.} {fig-p490f1} @@ -1303,8 +1303,8 @@ \subsection{Extending the Basic GUI: Button Array} object can then invoke the {\tt keypressCallback()} method whenever a keypad button is pressed, and the {\tt Converter} can display the result of the keypress. -\label{fig-p493f1} -\label{pg-fig-p493f1}} +} {fig-p493f1} + \end{figure} \begin{jjjlisting} @@ -1689,11 +1689,11 @@ \subsection{GUI Design Critique} \subsection{The {\tt BorderLayout} Manager} \noindent One way to fix these problems is to use a {\tt BorderLayout} to divide the frame into five areas: north, south, east, west, and center, as -shown in Figure~\ref{fig-borderlayout}. The {\tt BorderLayout} class contains two constructors: +shown in Figure~\ref{fig-borderlayout-guis}. The {\tt BorderLayout} class contains two constructors: \marginfig{chptr13/9f14.eps}{Arrangement of components in a border layout. The relative size of the areas will vary.} -{fig-borderlayout} +{fig-borderlayout-guis} \begin{jjjlisting} \begin{lstlisting} @@ -1944,7 +1944,7 @@ \subsection{Checkbox and Radio Button Arrays} instantiation and initialization of the buttons: \marginfigvspace{-76pt}{chptr13/9f18.eps}{Borders around containers help make them stand out more. -\label{fig-acmescreen}\label{pg-fig-acmescreen}} +} {fig-acmescreen} \begin{jjjlisting} \begin{lstlisting} @@ -1978,7 +1978,7 @@ \subsection{Checkbox and Radio Button Arrays} options[0].setSelected(true); // Set first button 'on' \end{lstlisting} \end{jjjlisting} - +%$ \noindent Radio buttons also generate {\tt ItemEvent}s, so they too must be registered with an {\tt ItemListener}. Note that the first button is set on, which represents a default payment @@ -2240,7 +2240,7 @@ \subsection{The {\tt OrderApplet} } \jjjprogstop{The {\tt OrderApplet} class, Part I.} {fig-orderapplet} \end{figure} - +%$ \begin{figure}[p] \addtocounter{figure}{-1} \jjjprogstart @@ -3043,9 +3043,9 @@ \section*{{\color{cyan}Special Topic:} Are Computers Intelligent?} \item A component can indeed be registered with more than one listener. For example, the {\tt ToggleButton} that we defined in -Chapter 4 has two listeners. The first is the button +Chapter~\ref{chapter-io} has two listeners. The first is the button itself, which takes care of toggling the button's label. The second is the -applet in which the button is used, which takes care of handling +frame in which the button is used, which takes care of handling whatever action the button is associated with. \item Some components can have two different kinds of listeners. For @@ -3182,8 +3182,8 @@ \section*{{\color{cyan}Special Topic:} Are Computers Intelligent?} design of a {\tt JButton} and the design of an AWT {\tt Button}. Why is MVC superior? -\item Suppose you have an applet that contains a \mbox{\tt JButton} -and a {\tt JLabel}. Each time the button is clicked, the applet +\item Suppose you have a GUI that contains a \mbox{\tt JButton} +and a {\tt JLabel}. Each time the button is clicked, the GUI rearranges the letters in the label. Using Java's event model as a basis, explain the sequence of events that happens in order for this action to take place. diff --git a/texfiles/14.threads.tex b/texfiles/14.threads.tex index 1be04b1..0041886 100644 --- a/texfiles/14.threads.tex +++ b/texfiles/14.threads.tex @@ -5,7 +5,7 @@ \setcounter{chapter}{13} \chapter{Threads and Concurrent Programming} \label{chapter-threads} -\label{pg-chapter-threads} + \CObegin @@ -151,8 +151,8 @@ \subsection{Concurrent Execution of Threads} %\begin{figure} \begin{figure}[tb] \figaleft{chptr14/13f1.eps}{Each thread gets a slice of the CPU's time. -\label{fig-timeslicing} -\label{pg-fig-timeslicing}} +} {fig-timeslicing} + \end{figure} %\end{figure} @@ -719,8 +719,8 @@ \subsection{The Asynchronous Nature of Threaded Programs} \begin{figure}[b] \figaleft{chptr14/13f9.eps}{A depiction of a thread's life cycle. -\label{fig-lifecycle} -\label{pg-fig-lifecycle}} +} {fig-lifecycle} + \end{figure} \section{Thread States and Life Cycle} @@ -1084,8 +1084,8 @@ \subsection*{The {\tt Dotty} Class} \begin{figure}[h!] \figaleft{chptr14/13f6.eps}{A single-threaded execution of random dot drawing. -\label{fig-dottytrace} -\label{pg-fig-dottytrace}} +} {fig-dottytrace} + \end{figure} When the user clicks the Draw button, the GUI's {\tt actionPerformed()} method is invoked. It then invokes {\tt Dotty}'s @@ -1327,8 +1327,8 @@ \subsection{Advantages of Multithreaded Design} \begin{figure}[h!] \figaleft{chptr14/13f8.eps}{Two independent threads: one for drawing, the other for the GUI. -\label{fig-threadedtrace} -\label{pg-fig-threadedtrace}} +} {fig-threadedtrace} + \end{figure} The trade-off involved in this design is that it will take @@ -2365,34 +2365,34 @@ \section{CASE STUDY: The Game of Pong} \subsection{A Multithreaded Design} -Let's develop a multithreaded applet to play the game of Pong. +Let's develop a multithreaded GUI to play the game of Pong. \marginfig{chptr14/pongscreensmall.eps}{The UI for Pong.} {fig-pongscreen} Figure~14.29 shows how the game's GUI should appear. There -are three objects involved in this program: the applet, which serves +are three objects involved in this program: the frame, which serves as the GUI, the ball, which is represented as a blue circle in the -applet, and the paddle, which is represented by a red rectangle along -the right edge of the applet. What cannot be seen in this figure is +program, and the paddle, which is represented by a red rectangle along +the right edge of the frame. What cannot be seen in this figure is that the ball moves autonomously, bouncing off the walls and paddle. The paddle's motion is controlled by the user by pressing the up- and down-arrow keys on the keyboard. We will develop class definitions for the ball, paddle, and the -applet. Following the example of our dot-drawing program earlier in +frame. Following the example of our dot-drawing program earlier in the Chapter, we will employ two independent threads, one for the GUI and one for the ball. Because the user will control the movements of -the paddle, the applet will employ a listener object to listen for and +the paddle, the frame will employ a listener object to listen for and respond to the user's key presses. Figure~\ref{fig-pongdesign} provides an overview of the -object-oriented design of the Pong program. The {\tt PongApplet} class +object-oriented design of the Pong program. The {\tt PongFrame} class is the main class. It uses instances of the {\tt Ball} and {\tt -Paddle} classes. {\tt PongApplet} is a subclass of {\tt JApplet} and +Paddle} classes. {\tt PongFrame} is a subclass of {\tt JFrame} and \begin{figure}[h!] -\figaleft{chptr14/pongdesign.eps}{Design of the Pong program. -\label{fig-pongdesign} -\label{pg-fig-pongdesign}} +\figaleft{chptr14/pongdesign-sm.png}{Design of the Pong program. +} {fig-pongdesign} + \end{figure} implements the {\tt KeyListener} interface. This is another of the several event handlers provided in the {\tt java.awt} library. This @@ -2400,38 +2400,38 @@ \subsection{A Multithreaded Design} consists of three abstract methods: {\tt keyPressed()}, {\tt keyTyped()}, and {\tt keyReleased()}, all of which are associated with the act of pressing a key on the keyboard. All three of these -methods are implemented in the {\tt PongApplet} class. A key-typed +methods are implemented in the {\tt PongFrame} class. A key-typed event occurs when a key is pressed down. A key-release event occurs when a key that has been pressed down is released. A key-press event is a combination of both of these events. The {\tt Ball} class is a {\tt Thread} subclass. Its data and methods -are designed mainly to keep track of its motion within the applet's +are designed mainly to keep track of its motion within the program's drawing panel. The design strategy employed here leaves the drawing of -the ball up to the applet. The {\tt Ball} thread itself just -handles the movement within the applet's drawing panel. Note that the {\tt -Ball()} constructor takes a reference to the {\tt PongApplet}. As we +the ball up to the frame. The {\tt Ball} thread itself just +handles the movement within the program's drawing panel. Note that the {\tt +Ball()} constructor takes a reference to the {\tt PongFrame}. As we will see, the {\tt Ball} uses this reference to set the dimensions of -the applet's drawing panel. Also, as the {\tt Ball} moves, it will -repeatedly call the applet's {\tt repaint()} method to draw the ball. +the frame's drawing panel. Also, as the {\tt Ball} moves, it will +repeatedly call the frame's {\tt repaint()} method to draw the ball. The {\tt Paddle} class is responsible for moving the paddle up and down along the drawing panel's right edge. Its public methods, {\tt -moveUP()} and {\tt moveDown()}, will be called by the applet in +moveUP()} and {\tt moveDown()}, will be called by the frame in response to the user pressing the up and down arrows on the -keyboard. Because the applet needs to know where to draw the applet, +keyboard. Because the frame needs to know where to draw the paddle, the paddle class contains several public methods, {\tt getX()}, {\tt getY()}, and {\tt resetLocation()}, whose tasks are to report the -paddle's location or to adjust its location in case the applet +paddle's location or to adjust its location in case the frame is resized. -The {\tt PongApplet} controls the overall activity of the program. +The {\tt PongFrame} controls the overall activity of the program. Note in particular its {\tt ballHitsPaddle()} method. This method has the task of determining when the ball and paddle come in contact as -the ball continuously moves around in the applet's drawing panel. As +the ball continuously moves around in the frame's drawing panel. As in the {\tt ThreadedDotty} example earlier in the chapter, it is -necessary for the {\tt Ball} and the the applet to be implemented as -separated threads so that the applet can be responsive to the user's +necessary for the {\tt Ball} and the the frame to be implemented as +separated threads so that the frame can be responsive to the user's key presses. \subsection{Implementation of the Pong Program} @@ -2449,17 +2449,17 @@ \subsection{Implementation of the Pong Program} private static final int BORDER = 0; private int gameAreaHeight; private int locationX, locationY; - private PongApplet applet; + private PongFrame frame; - public Paddle (PongApplet a) { - applet = a; - gameAreaHeight = a.getHeight(); - locationX = a.getWidth()-WIDTH; + public Paddle (PongFrame f) { + frame = f; + gameAreaHeight = f.getHeight(); + locationX = f.getWidth()-WIDTH; locationY = gameAreaHeight/2; } // Paddle() public void resetLocation() { - gameAreaHeight = applet.getHeight(); - locationX = applet.getWidth()-WIDTH; + gameAreaHeight = frame.getHeight(); + locationX = frame.getWidth()-WIDTH; } public int getX() { return locationX; @@ -2484,7 +2484,7 @@ \subsection{Implementation of the Pong Program} Class constants, {\tt HEIGHT} and {\tt WIDTH} are used to define the size of the {\tt Paddle}, which is represented on -the applet as a simple rectangle. The applet will use the +the frame as a simple rectangle. The frame will use the {\tt Graphics.fillRect()} method to draw the paddle: \begin{jjjlisting}[28pc] @@ -2493,7 +2493,7 @@ \subsection{Implementation of the Pong Program} \end{lstlisting} \end{jjjlisting} -\noindent Note how the applet uses the paddle's {\tt getX()} +\noindent Note how the frame uses the paddle's {\tt getX()} and {\tt getY()} methods to get the paddle's current location. @@ -2502,14 +2502,14 @@ \subsection{Implementation of the Pong Program} that the paddle moves on each move up or down, and {\tt BORDER} is used with {\tt gameAreaHeight} to keep the paddle within the drawing area. The {\tt moveUp()} and {\tt moveDown()} methods are -called by the applet each time the user presses an up- or down-arrow key. +called by the frame each time the user presses an up- or down-arrow key. They simply change the paddle's location by {\tt DELTA} pixels up or down. \pagebreak The {\tt Ball} class (Fig.~\ref{fig-ball}) uses the class constant {\tt SIZE} to determine the size of the oval that represents the ball, -drawn by the applet as follows: +drawn by the frame as follows: \begin{jjjlisting} \begin{lstlisting} @@ -2517,7 +2517,7 @@ \subsection{Implementation of the Pong Program} \end{lstlisting} \end{jjjlisting} -\noindent As with the paddle, the applet uses the +\noindent As with the paddle, the frame uses the ball's {\tt getX()} and {\tt getY()} method to determine the ball's current location. @@ -2530,14 +2530,14 @@ \subsection{Implementation of the Pong Program} public class Ball extends Thread { public static final int SIZE = 10; // Diameter of the ball - private PongApplet applet; // Reference to the applet + private PongFrame frame; // Reference to the frame private int topWall, bottomWall, leftWall, rightWall; // Boundaries private int locationX, locationY; // Current location of the ball private int directionX = 1, directionY = 1; //x- and y-direction (1 or -1) private Toolkit kit = Toolkit.getDefaultToolkit(); //For beep() method - public Ball(PongApplet app) { - applet = app; + public Ball(PongFrame f) { + frame = f; locationX = leftWall + 1; // Set initial location locationY = bottomWall/2; } // Ball() @@ -2548,13 +2548,13 @@ \subsection{Implementation of the Pong Program} return locationY; } // getY() public void move() { - rightWall = applet.getWidth() - SIZE; // Define bouncing region + rightWall = frame.getWidth() - SIZE; // Define bouncing region leftWall = topWall = 0; // And location of walls - bottomWall = applet.getHeight() - SIZE; + bottomWall = frame.getHeight() - SIZE; locationX = locationX + directionX; // Calculate a new location locationY = locationY + directionY; - if (applet.ballHitsPaddle()){ + if (frame.ballHitsPaddle()){ directionX = -1; // move toward left wall kit.beep(); } //if ball hits paddle @@ -2573,7 +2573,7 @@ \subsection{Implementation of the Pong Program} public void run() { while (true) { move(); // Move - applet.repaint(); + frame.repaint(); try { sleep(15); } catch (InterruptedException e) {} } // while @@ -2591,11 +2591,11 @@ \subsection{Implementation of the Pong Program} interval (to slow down the speed of the ball's apparent motion). The {\tt run()} method itself is quite simple because it consists of a short loop. We will deal with the details of how the ball is painted -on the applet when we discuss the applet itself. +on the frame when we discuss the frame itself. The most complex method in the {\tt Ball} class is the {\tt move()} method. This is the method that controls the ball's movement within -the boundaries of the applet's drawing area. This method begins +the boundaries of the frame's drawing area. This method begins by moving the ball by one pixel left, right, up, or down by adjusting the values of its {\tt locationX} and {\tt locationY} coordinates: @@ -2618,15 +2618,15 @@ \subsection{Implementation of the Pong Program} having missed the paddle, it passes through the right wall and re-emerges from the left wall going in the same direction. -Note how the applet method, {\tt ballHitsPaddle()} is used to +Note how the frame method, {\tt ballHitsPaddle()} is used to determine whether the ball has hit the paddle. This is necessary -because only the applet knows the locations of both the ball and the +because only the frame knows the locations of both the ball and the paddle. \subsection{The {\tt KeyListener} Interface} -The implementation of the {\tt PongApplet} class is shown in -figure~\ref{fig-pongapplet}. The applet's main task is to manage the +The implementation of the {\tt PongFrame} class is shown in +figure~\ref{fig-pongapplet}. The frame's main task is to manage the drawing of the ball and paddle and to handle the user's key presses. Handling keyboard events is a simple matter of implementing the {\tt KeyListener} interface. This works in much the same way as the {\tt @@ -2643,18 +2643,17 @@ \subsection{The {\tt KeyListener} Interface} import java.awt.*; import java.awt.event.*; -public class PongApplet extends JApplet implements KeyListener { +public class PongFrame extends JFrame implements KeyListener { private Ball ball; private Paddle pad; - public void init() { + public PongFrame() { setBackground(Color.white); addKeyListener(this); pad = new Paddle(this); // Create the paddle ball = new Ball(this); // Create the ball ball.start(); - requestFocus(); // Required to receive key events - } // init() + } // PongFrame() public void paint (Graphics g ) { g.setColor(getBackground()); // Erase the drawing area @@ -2683,10 +2682,14 @@ \subsection{The {\tt KeyListener} Interface} } // keyReleased() public void keyTyped(KeyEvent e) {} // Unused public void keyReleased( KeyEvent e) {} // Unused -} // PongApplet + public static void main(String[] args) { + PongFrame f = new PongFrame(); + f.setSize(400,400); + f.setVisible(true); +} // PongFrame \end{lstlisting} \end{jjjlistingleft} -\jjjprogstop{Definition of the {\tt PongApplet} class.} +\jjjprogstop{Definition of the {\tt PongFrame} class.} {fig-pongapplet} \end{figure} @@ -2723,7 +2726,7 @@ \subsection{The {\tt KeyListener} Interface} Note that even though we are not using the {\tt keyPressed()} and {\tt keyReleased()} methods in this program, it is still necessary to -provide implementations for these methods in the applet. In order to +provide implementations for these methods in the frame. In order to implement an interface, such as the {\tt KeyListener} interface, you must implement {\em all} the abstract methods in the interface. That is why we provide trivial implementations of both the {\tt @@ -2733,25 +2736,26 @@ \subsection{Animating the Bouncing Ball} Computer animation is accomplished by repeatedly drawing, erasing, and re-drawing an object at different locations on the drawing panel. The -applet's {\tt paint()} method is used for drawing the ball and the +frame's {\tt paint()} method is used for drawing the ball and the paddle at their current locations. The {\tt paint()} method is never -called directly. Rather, it is called automatically after the {\tt init()} -method, when the applet is started. It is then invoked indirectly by +called directly. Rather, it is called automatically after the +constructor +method {\tt PongFrame()}, when the program is started. It is then invoked indirectly by the program by calling the {\tt repaint()} method, which is called in the {\tt run()} method of the {\tt Ball} class. The reason that {\tt paint()} is called indirectly is because Java needs to pass it the -applet's current {\tt Graphics} object. Recall that in Java all +frame's current {\tt Graphics} object. Recall that in Java all drawing is done using a {\tt Graphics} object. In order to animate the bouncing ball, we first erase the current image of the ball, then we draw the ball in its new location. We also draw the paddle in its current location. These steps are carried out -in the applet's {\tt paint()} method. First, the drawing area is +in the frame's {\tt paint()} method. First, the drawing area is cleared by painting its rectangle in the background color. Then the ball and paddle are painted at their current locations. Note that before painting the paddle, we first call its {\tt resetLocation()} method. This causes the paddle to be relocated in case the user has -resized the applet's drawing area. There is no need to do this for +resized the frame's drawing area. There is no need to do this for the ball because the ball's drawing area is updated within the {\tt Ball.move()} method every time the ball is moved. @@ -2784,7 +2788,7 @@ \subsection{Animating the Bouncing Ball} \secEXRHone{Self-Study Exercise} \begin{SSTUDY} -\item Modify the {\tt PongApplet} program so that it contains a second +\item Modify the {\tt PongFrame} program so that it contains a second ball that starts at a different location from the first ball. \end{SSTUDY} @@ -3039,7 +3043,7 @@ \subsection{Animating the Bouncing Ball} \begin{enumerate} \item A new {\tt Ball()} constructor that has parameters to set the initial location and direction of the ball. -\item The {\tt PongApplet} should create a new {\tt Ball} +\item The {\tt PongFrame} should create a new {\tt Ball} instance, start it, and draw it. \end{enumerate} @@ -3156,9 +3160,9 @@ \subsection{Animating the Bouncing Ball} any user interface. One of its constructors should take a {\tt String} argument that lets the user set the banner's message. -\item {\bf Challenge: } Create a slide show applet, which repeatedly +\item {\bf Challenge: } Create a slide show program, which repeatedly cycles through an array of images. The action of displaying the -images should be a separate thread. The applet thread should handle +images should be a separate thread. The frame thread should handle the user interface. Give the user some controls that let it pause, stop, start, speed up, and slow down the images. @@ -3168,7 +3172,7 @@ \subsection{Animating the Bouncing Ball} coordinate. If you don't have good horse images to use, just make each horse a colored polygon or some other shape. Have the horses implement the {\tt Drawable} interface, which we introduced -in Chapter~8. +in Chapter~{chapter-inheritance}. \item {\bf Challenge:} Create a multithreaded digital clock application. One thread should keep time in an endless while loop. The other diff --git a/texfiles/15.sockets.tex b/texfiles/15.sockets.tex index 35a27cf..fe52dda 100644 --- a/texfiles/15.sockets.tex +++ b/texfiles/15.sockets.tex @@ -6,7 +6,7 @@ \chapter{Sockets and Networking} \label{chapter-sockets} -\label{pg-chapter-sockets} + \CObegin \secCOBH{Objectives} @@ -15,7 +15,7 @@ \chapter{Sockets and Networking} \begin{COBL} \item Understand some basics about networks. \item Know how to use Java's {\tt URL} class -to download network resources from an applet or application. +to download network resources from a GUI or console application. \item Be able to design networking applications, using the client/server model. \item Understand how to use Java's {\tt Socket} @@ -28,7 +28,7 @@ \chapter{Sockets and Networking} \item {An Overview of Networks} \item {Using Network Resources from an Applet} \item {From the Java Library: {\tt java.net.URL}} -\item {The Slide Show Applet} +\item {The Slide Show Program} \item {Using Network Resources from an Application} \item {Client/Server Communication via {\tt Socket}s} \item {Case Study: Generic Client/Server Classes} @@ -82,7 +82,7 @@ \subsection{Network Size and Topology} %\begin{figure} \begin{figure}[h] \figaleft{chptr15/15f1.eps}{Star, bus, and ring topologies. -\label{fig-topology1}\label{pg-fig-topology1}} +} {fig-topology1} \end{figure} %\end{figure} @@ -132,7 +132,7 @@ \subsection{Internets} \begin{figure}[thb] \figaleft{chptr15/15f3.eps}{An internet is a collection of distinct networks joined together by routers. -\label{fig-internet}\label{pg-fig-internet}} +} {fig-internet} \end{figure} @@ -392,7 +392,7 @@ \subsection{The {\tt java.net} Package} %\begin{figure} \begin{figure}[h] \figaleft{chptr15/p825f1.eps}{The {\tt java.net} package. -\label{fig-nethier}\label{pg-fig-nethier}} +} {fig-nethier} \end{figure} %\end{figure} @@ -417,16 +417,17 @@ \subsection{The {\tt java.net} Package} \marginfig{chptr15/15f8.eps}{An applet that continuously displays slides downloaded from the Web.} {fig-slideshow} -\section{Using Network Resources from an Applet} -\noindent Suppose you want to write an applet that will automatically display a -slide show consisting of images or documents that you've prepared and -stored on your Web site. Perhaps you can use such an applet to give -people who visit your site a tour of your campus -(Fig.~15.8). Or perhaps a company might use such an -applet to advertise its products. In addition to making the slide show +\section{Using Multimedia Network Resources for a Graphical Program} +\noindent Suppose you want to write an graphical program that will display a +catalog consisting of images or documents that you've prepared and +stored on your Web site. Perhaps you can use such a program to give +people who visit your site a downloadable tour of your campus as a +slide show +(Fig.~15.8). Or perhaps a company might use such a +program to advertise its products. In addition to making the catalog available through its main Web site, you can imagine it running \marginnote{Problem statement} -continuously on a computer kiosk in the company's lobby. +continuously as a slide show on a computer kiosk in the company's lobby. In order to solve this problem we have to be able to download and @@ -511,7 +512,7 @@ \section{From the Java Library: {\tt java.net.URL}} %\begin{marginalnote}\it URLs and streams\end{marginalnote} InputStream}, which you can then use to read the associated URL data the same way you would read a file. This method is especially useful -for writing Java applications (rather than applets). As you might +for writing Java applications (in addition to applets). As you might guess, downloading Web resources is particularly easy from a Java \marginnote{URLs and streams} applet. Now let's search around for other methods that we can use. @@ -572,12 +573,77 @@ \subsection{Code Reuse: The {\tt java.applet.Applet} Class} \end{lstlisting} \end{jjjlistingleft} -\noindent So, it looks as if we've found the methods we need to -implement our slide show applet. We'll use the {\tt URL()} +\noindent So, if applets were still in fashion, then these would be the methods we need to +implement our slide show. For an application, to load an image you need to +declare the { \tt ImageRef } and the call to read the image url is different: + +\begin{jjjlistingleft}[30.5pc]{-4.5pc} +\begin{lstlisting} +URL url; +Image imageRef; +try { + url = new + URL("http://www.cs.trincoll.edu/~ram/jjj/slideshow/slide0.gif") ; + imgRef = javax.imageio.ImageIO.read(url); +} catch (MalformedURLException e) { + System.out.println( "Malformed URL: " + url.toString()) ; +} +\end{lstlisting} +\end{jjjlistingleft} + +\noindent For sound we need the {\tt javax.sound.sampled} +package. After constructing the URL, we need to set up an {\tt + AudioInputStream}, put the format of the stream into a +{\tt DataLine.info } object, and then get the line as a {\tt Clip}, +which we can then use to play the sound. The {\tt AudioSystem } class +is used heavily for this. + +\begin{jjjlistingleft}[30.5pc]{-4.5pc} +\begin{lstlisting} +Clip clip; URL url = null; +try { + url = new + URL("http://cooplogic.com/cheyney/sound/liftMusic.wav"); + AudioInputStream audio = + AudioSystem.getAudioInputStream(url); // get stream from url + DataLine.Info info = + new DataLine.Info(Clip.class, audio.getFormat()); // info needed for line + if (!AudioSystem.isLineSupported(info)) { + System.err.println("Audio file not supported: " + info); + return; + } + try { + clip = (Clip) AudioSystem.getLine(info); // the clip does the work + clip.open(audio); // open the stream. + clip.start(); // start the stream on a separate thread. + // loop until clip has finished + while (clip.getFramePosition() < clip.getFrameLength()) { + try { + Thread.sleep(10); + } catch (Exception e) { + e.printStackTrace(); + } + } + } catch (LineUnavailableException ex) { + ex.printStackTrace(); + } +} catch (MalformedURLException e) { + System.out.println("Malformed URL: " + url.toString()) ; +} catch (UnsupportedAudioFileException ae) { + System.out.println("not supported: " + ae) ; +} catch (IOException ioex) { + ioex.printStackTrace(); +} +\end{lstlisting} +\end{jjjlistingleft} + + + + We'll use the {\tt URL()} %\begin{marginalnote}\it What methods can we use?\end{marginalnote} \marginnote{What methods can we use?} constructor to create a URL from a {\tt String}, and we'll use -the {\tt Applet.getImage(URL)} method to retrieve the images +the {\tt javax.imageio.ImageIO.read(url)} method to retrieve the images from the Web. %%%\end{javalibrary} %%%\begin{textblock}{1}(-0.75,4) @@ -586,7 +652,7 @@ \subsection{Code Reuse: The {\tt java.applet.Applet} Class} %%%\end{textblock} -\section{The Slide Show Applet} +\section{The Slide Show Program} \subsection*{Problem Specification} \noindent Let's suppose our slide show will repeatedly display a set of images named ``slide0.gif,'' ``slide1.gif,'' and ``slide2.gif.'' Suppose these @@ -606,10 +672,10 @@ \subsection*{Problem Specification} images, leaving about 5 seconds between each slide. \subsection*{User Interface Design} -\noindent The user interface for this applet doesn't contain any GUI -components. It just needs to display an image every 5 seconds. It can -use a simple {\tt paint()} method to display an image each time it is -repainted: +\noindent The user interface for this program is graphical, but it +doesn't contain any GUI components. It just needs to display an image +every 5 seconds. It can use a simple {\tt paint()} method to display +an image each time it is repainted: \begin{jjjlisting} \begin{lstlisting} @@ -623,16 +689,16 @@ \subsection*{User Interface Design} \noindent The assumption here is that the {\tt currentImage} instance variable will be set initially to {\tt null}. Each time an image is downloaded, it will be set to refer to that image. Because -{\tt paint()} is called before the applet starts downloading the images, it -\marginfig{chptr15/p830f1.eps}{The {\tt SlideShow- Applet} downloads and displays the images.} +{\tt paint()} is called before the program starts downloading the images, it +\marginfig{chptr15/p830f1.eps}{The {\tt SlideShow- Frame} downloads and displays the images.} {fig-p830f1} is necessary to guard against attempting to draw a {\tt null} image, which would lead to an exception. \subsection*{Problem Decomposition} -\noindent One problem we face with this applet is getting it to pause between -\marginfigvspace{15pt}{chptr15/p830f2.eps}{The {\tt Timer} class delays the applet thread between each slide. -\label{fig-p830f2}\label{pg-fig-p830f2}} +\noindent One problem we face with this program is getting it to pause between +\marginfigvspace{15pt}{chptr15/p830f2.eps}{The {\tt Timer} class delays the frame thread between each slide. +} {fig-p830f2} each slide. One way to do this is to set up a loop that does nothing for about 5 seconds: @@ -649,18 +715,19 @@ \subsection*{Problem Decomposition} iterations to do to approximate 5 seconds of idleness. A much better design would be to use a separate timer thread, which -can {\tt sleep()} for 5 seconds between each slide. So our program +can {\tt sleep()} for 5 seconds between each slide. So our program will have two classes: one to download and display the slides and one -to serve as a timer (Figs.~15.10 and 15.11). +to serve as a timer (Figs.~15.10 and 15.11). ( Java Swing has a +Timer class that works a little bit differently, see the javadoc for a description.) \begin{BL} -\item {\tt SlideShowApplet}---This {\tt JApplet} subclass +\item {\tt SlideShowFrame}---This {\tt JFrame} subclass will take care of downloading and displaying the images and starting the timer thread. \item {\tt Timer}---This class will implement the {\tt Runnable} interface so that it can run as a separate thread. It will -repeatedly sleep for 5 seconds and then tell the applet to display the +repeatedly sleep for 5 seconds and then tell the frame to display the next side. \end{BL} @@ -668,7 +735,7 @@ \subsection*{Problem Decomposition} thread that sleeps for a brief period on each iteration is a better way to introduce a delay into an algorithm.} -\subsection{The {\tt SlideShowApplet} class} +\subsection{The {\tt SlideShowFrame} class} \noindent What should we do with the images we download? Should we repeatedly download and display them, or should we just download them once and store them in memory? The second of these alternatives seems more @@ -686,7 +753,7 @@ \subsection{The {\tt SlideShowApplet} class} an array index to keep track of the next image. Even though it isn't absolutely necessary, we could use a third variable here, {\tt currentImage}, to keep track of the current image being -displayed. Thus, our applet needs the following instance variables: +displayed. Thus, our frame needs the following instance variables: \begin{jjjlisting} \begin{lstlisting} @@ -706,7 +773,7 @@ \subsection{The {\tt SlideShowApplet} class} method should be designed so that it can be called by the {\tt Timer} thread whenever it is time to display the next slide, so it should be a {\tt public} method. It can be a {\tt void} method with no -parameters, because the applet already contains all the necessary information +parameters, because the frame already contains all the necessary information to display the next slide. Thus, there's no need for information to be passed back and forth between {\tt Timer} and this method: @@ -733,21 +800,22 @@ \subsection{The {\tt SlideShowApplet} class} ({\tt x \% N}) is useful for cycling repeatedly through the values $0, 1, \ldots, N-1$.} -\noindent The applet's {\tt init()} method will have two tasks: +\noindent The frame's constructor, {\tt SlideShowFrame()} method will have two tasks: \begin{BL} \item Download and store the images in {\tt slide[]}. \item Start the {\tt Timer} thread. \end{BL} -\noindent As we discussed, downloading Web resources requires -the use of the {\tt getImage()} method. Here we just place these +\noindent As we discussed, downloading Web resources for an +application requires +the use of the {\tt javax.imageio.ImageIO.read()} method. Here we just place these method calls in a loop: \begin{jjjlisting} \begin{lstlisting} for (int k=0; k < NIMGS; k++) - slide[k] = getImage(getCodeBase(), + slide[k] = javax.imageio.ImageIO.read(getCodeBase(), "gifs/demo" + k + ".gif"); \end{lstlisting} \end{jjjlisting} @@ -777,7 +845,7 @@ \subsection{The {\tt SlideShowApplet} class} \end{jjjlisting} \noindent Note that {\tt Timer} is passed a reference to -{\tt this} applet. This enables {\tt Timer} to call the applet's +{\tt this} frame. This enables {\tt Timer} to call the frame's {\tt nextSlide()} method every 5 seconds. This programming technique is known as {\it callback} and the {\tt nextSlide()} method is an example of a {\bf callback method}\index{callback method} (Fig.~15.12). @@ -788,9 +856,9 @@ \subsection{The {\tt SlideShowApplet} class} to call one of the public methods of the other object.} \noindent This completes our design and development -of {\tt SlideShowApplet}, which is shown in Figure~\ref{fig-slideapplet}. +of {\tt SlideShowFrame}, which is shown in Figure~\ref{fig-slideframe}. \marginfig{chptr15/p832f1.eps}{{\tt Timer} uses the {\tt nextSlide()} -method to {\it call back} the applet to remind it to switch to the +method to {\it call back} the frame to remind it to switch to the next slide.}{fig-p832f1} \begin{figure}[h] @@ -799,9 +867,10 @@ \subsection{The {\tt SlideShowApplet} class} \begin{lstlisting} import java.awt.*; import javax.swing.*; +import javax.imageio.ImageIO; import java.net.*; -public class SlideShowApplet extends JApplet { +public class SlideShowFrame extends JFrame { public static final int WIDTH=300, HEIGHT=200; private static final int NIMGS = 3; private Image[] slide = new Image[NIMGS]; @@ -821,19 +890,19 @@ \subsection{The {\tt SlideShowApplet} class} repaint(); }// nextSlide() - public void init() { + public SlideShowFrame() { for (int k=0; k < NIMGS; k++) - slide[k] = getImage(getCodeBase(), + slide[k] = ImageIO.read(getCodeBase(), "gifs/demo" + k + ".gif"); Thread timer = new Thread(new Timer(this)); timer.start(); setSize( WIDTH, HEIGHT ); - }// init() -}// SlideShowApplet + }// constructor +}// SlideShowFrame \end{lstlisting} \end{jjjlisting} -\jjjprogstop{The {\tt SlideShowApplet} class.} -{fig-slideapplet} +\jjjprogstop{The {\tt SlideShowFrame} class.} +{fig-slideframe} \end{figure} \subsection{The {\tt Timer} Class} @@ -844,13 +913,13 @@ \subsection{The {\tt Timer} Class} call a thread's {\tt run()} method. Instead, we call its {\tt start()} method, which automatically calls {\tt run()}. This particular thread has a very simple and singular function. It should call the -{\tt SlideShowApplet.nextSlide()} method and then sleep for 5 seconds. +{\tt SlideShowFrame.nextSlide()} method and then sleep for 5 seconds. So its main algorithm will be: \begin{jjjlisting} \begin{lstlisting} while (true) { - applet.nextSlide(); + frame.nextSlide(); sleep( 5000 ); } \end{lstlisting} @@ -860,10 +929,10 @@ \subsection{The {\tt Timer} Class} {\tt Interrupted\-Excep\-tion}. This means that we'll have to embed this while loop in a {\tt try/catch} block. -To call the applet's {\tt nextSlide()} method, we also need a -reference to the {\tt SlideShowApplet}, so we need to give it a +To call the frame's {\tt nextSlide()} method, we also need a +reference to the {\tt SlideShowFrame}, so we need to give it a reference, such as an instance variable, as well as a constructor that -allows the applet to pass {\tt Timer} a reference to itself. +allows the frame to pass {\tt Timer} a reference to itself. Given these design decisions, the complete implementation of {\tt Timer} is shown in Figure~\ref{fig-timerthread}. To see how it works, @@ -874,16 +943,16 @@ \subsection{The {\tt Timer} Class} \begin{jjjlisting} \begin{lstlisting} public class Timer implements Runnable { - private SlideShowApplet applet; + private SlideShowFrame frame; - public Timer( SlideShowApplet app ) { - applet = app; + public Timer( SlideShowFrame app ) { + frame = app; } public void run() { try { while ( true ) { - applet.nextSlide(); + frame.nextSlide(); Thread.sleep( 5000 ); } } catch (InterruptedException e) { @@ -901,26 +970,17 @@ \subsection{The {\tt Timer} Class} \begin{SSTUDY} \item Describe the design changes you would make to -{\tt SlideShow\-Applet} if you wanted to play a soundtrack along with +{\tt SlideShow\-Frame} if you wanted to play a soundtrack along with your slides. Assume that the sounds are stored in a sequence of files, ``sound0.au,'' sound1.au,'' and so forth, on your Web site. \end{SSTUDY} -\section{Using Network Resources from an \\Application} -\noindent The {\tt SlideShowApplet} illustrates the ease of downloading Web -resources from an applet. However, applets have limited use in this -\mbox{regard,} because they come with rather severe security restrictions that -would make them a poor choice for most networking applications (see -%\begin{marginalnote}\it Applet restrictions\end{marginalnote} -\marginnote{Applet restrictions} -Section~\ref{sec-security}). For example, applets cannot save -files that they download, because they cannot access the host computer's -file system. Similarly, an applet can only download files from the -same host from which it was downloaded. This wouldn't be a problem for -the slide show applet, since we can simply store the slides in the -same directory as the applet itself. So, we want to learn how to -download Web resources from a Java application. The next example -illustrates a solution to this problem. +\section{Adding Text Network Resources for an \\Application} +\noindent The {\tt SlideShowFrame} illustrates the use of multimedia +resources from the web. However, much of the files we may want to +retrieve are text based, and we want to be able to use these resources +side-by-side with the available multimedia. The next application +describes how to do just this. \subsection*{Problem Specification} \noindent Suppose a realtor asks you to write a Java application that will @@ -951,7 +1011,7 @@ \subsection*{Problem Specification} \end{jjjlisting} \subsection{Downloading a Text File from the Web} -\noindent This application requires us to solve three new problems: +\noindent This application requires us to solve two new problems: \begin{NL} \item How do we download a text file of names that we want to use as @@ -960,14 +1020,11 @@ \subsection{Downloading a Text File from the Web} \item How do we download and display an image file? \end{NL} -\noindent The third problem is very similar to the problem we solved -in {\tt SlideShowApplet}, but here we can't use the {\tt Applet.getImage()} -method. However, as we shall see, we can find a Java library method -to perform this task for us. Therefore, the most challenging part of this program is the task of +\noindent The {\tt SlideShowFrame} solves the problem of downloading and displaying an image file. So, the most challenging part of this program is the task of \marginnote{Understanding the problem} -downloading a Web file and using its data in the program. +downloading a Web text file and using its data in the program. -For this program we must make use of two types of data downloaded from +For this program we must make use of two types of text data downloaded from the Web. The first will be the names of the image and document files. We'll want to read these names and use them as menu items that the user can select. Second, once the user has selected a house to view, @@ -976,7 +1033,7 @@ \subsection{Downloading a Text File from the Web} file of names. The only difference is that we need to display this text in a {\tt JTextArea}. Downloading the image file can be handled in more or less the same way that it was handled in the {\tt -SlideShowApplet}--- by using a special Java method to download and +SlideShowFrame}--- by using a special Java method to download and display the image file. Clearly, the problems of downloading a file from the Web and reading a @@ -1094,7 +1151,7 @@ \subsection*{Interface Design} \begin{figure}[tb] \figaright{chptr15/15f11.eps}{User interface design for the real estate application. -\label{fig-realestategui}\label{pg-fig-realestategui}} +} {fig-realestategui} \end{figure} \noindent The interface for this application is very important. It @@ -1377,7 +1434,7 @@ \subsection*{Downloading and Displaying Home Information} readTextIntoDisplay(url); // Create url and download image url = new URL(baseURL + choice + ".gif"); - currentImage = Toolkit.getDefaultToolkit().getImage(url); + currentImage = ImageIO.read(url); Toolkit.getDefaultToolkit().beep(); // Beep user repaint(); } catch (MalformedURLException e) { @@ -1493,7 +1550,7 @@ \subsection*{Downloading and Displaying Home Information} readTextIntoDisplay(url); // Download and display text file url = new URL(baseURL + choice + ".gif"); // Create URL // Download image - currentImage = Toolkit.getDefaultToolkit().getImage(url); + currentImage = ImageIO.read(url); Toolkit.getDefaultToolkit().beep(); // Alert the user repaint(); } catch (MalformedURLException e) { @@ -1525,7 +1582,7 @@ \subsection*{Downloading and Displaying Home Information} \subsection{Reusing Code} \noindent As in other examples we have developed, our discovery and use of the -{\tt Toolkit.getImage()} method and other classes from the Java class +{\tt javax.imageio.ImageIO.read()} method and other classes from the Java class library illustrate an important principle of object-oriented programming. @@ -1542,7 +1599,7 @@ \subsection{Reusing Code} Of course, knowing what classes exist in the libraries is something that comes with experience. There's no way that a novice Java -programmer would know about, say, the {\tt Toolkit.getImage()} method. +programmer would know about, say, the {\tt ImageIO.read()} method. However, one skill or habit that you should try to develop is always to ask yourself the question: ``Is there a method that will do what I'm trying to do here?'' That question should be the first @@ -2022,7 +2079,7 @@ \subsection{The {\tt EchoServer} Class} \begin{figure}[ht] \figaleft{chptr15/p852f1.eps}{Design of the {\tt EchoServer} class. -\label{fig-p852f1}\label{pg-fig-p852f1}} +} {fig-p852f1} \end{figure} %%\marginfig{chptr15/p852f1.eps}{Design of the {\tt EchoServer} class. @@ -3052,7 +3109,7 @@ \subsection{Java Server Pages} \begin{figure}[tb] \figaright{chptr15/jspscreen.eps}{A screen shot of a JSP. -\label{fig-jspscreen}\label{pg-fig-jspscreen}} +} {fig-jspscreen} \end{figure} In the second case, a {\em scriptlet} of Java code uses the {\tt @@ -3652,19 +3709,20 @@ \subsection{Setting Up and Using Java Servlets} \end{ANSBL} -\item To play sounds along with slides in the {\tt SlideShowApplet}, +\item To play sounds along with slides in the {\tt SlideShowFrame}, you would make the following modifications to the code: - +%%%%%% FIXME add AudioSystem and Clip code here \begin{jjjlisting} \begin{lstlisting} -private URL soundURL[] = new URL[NIMGS]; +private Clip soundClip[] = new Clip[NIMGS]; +private Clip currentClip = null; \end{lstlisting} \end{jjjlisting} \noindent Declare an array of {\tt URL}s to store the URLs of the audio files you want to play. -\hspace*{1pc}Assign URLs to the array at the same time +\hspace*{1pc}Assign Clips to the array at the same time you input the images: \begin{jjjlisting} @@ -3673,10 +3731,30 @@ \subsection{Setting Up and Using Java Servlets} url = new URL( "http://www.cs.trincoll.edu/~ram/jjj/slide" + k + ".gif"); - slide[k] = getImage( url ); - soundURL[k] = + slide[k] = imageIO.read( url ); + URL soundURL = new URL("http://www.cs.trincoll.edu/~ram/jjj/sound" + k + ".au"); + AudioInputStream audio = + AudioSystem.getAudioInputStream(url); + DataLine.Info info = new DataLine.Info(Clip.class, + audio.getFormat()); + soundClip[k] = (Clip) AudioSystem.getLine(info); +} +\end{lstlisting} +\end{jjjlisting} + +\noindent Change the nextSlide() code to the following + +\begin{jjjlisting} +\begin{lstlisting} +public void nextSlide() { + currentClip.stop(); // stop sound playback + currentClip = soundClip[nextImg]; // get next soundClip + currentClip.setFramePosition(0); // start clip at beginning + currentImage = slide[nextImg]; + nextImg = ( nextImg + 1) % NIMGS; + repaint (); } \end{lstlisting} \end{jjjlisting} @@ -3689,7 +3767,7 @@ \subsection{Setting Up and Using Java Servlets} public void paint(Graphics g) { if (currentImage != null) { g.drawImage(currentImage,10,10,this); - play( soundURL[currentImage] ); + currentClip.start(); } } \end{lstlisting} @@ -3758,7 +3836,7 @@ \subsection{Setting Up and Using Java Servlets} \item Describe one or two circumstances under which a {\tt Connect\-Exception} would be thrown. -\item Modify the {\tt SlideShowApplet} so that it plays +\item Modify the {\tt SlideShowFrame} so that it plays an audio file along with each slide. \item Design and implement a Java applet that downloads diff --git a/texfiles/16.datastructs.tex b/texfiles/16.datastructs.tex index bc2aa26..f2d0092 100644 --- a/texfiles/16.datastructs.tex +++ b/texfiles/16.datastructs.tex @@ -7,7 +7,7 @@ \chapter{Data Structures: Lists, Stacks, and Queues} \label{chapter-datastructures} -\label{pg-chapter-datastructures} + %%\markboth{{\color{cyan}CHAPTER\,\arabic{chapter}\,\,$\bullet$}\,\, \chaptername} %%Data Structures\,\,} %%{{\color{cyan}SECTION\,\arabic{section}\,\,$\bullet$}\,\, \sectionname\,\,} @@ -150,7 +150,7 @@ \subsection{Using References to Link Objects} \end{jjjlisting} \marginfigvspace{10pt}{chptr16/nodeuml.eps}{The {\tt Node} class. -\label{fig-nodeuml}\label{pg-fig-nodeuml}} +} {fig-nodeuml} \noindent In addition to the reference to a {\tt String} object, each {\tt Node} object contains a reference to another {\tt Node} object. The {\tt next} variable is often called a {\bf link}\index{link} @@ -243,7 +243,7 @@ \subsection{Example: The Dynamic Phone List} \begin{figure}[t] \figaright{chptr16/phoneuml.eps}{Design of the {\tt PhoneListNode} class. -\label{fig-phoneuml}\label{pg-fig-phoneuml}} +} {fig-phoneuml} \end{figure} \begin{figure}[h!] @@ -445,7 +445,7 @@ \subsection*{Inserting Nodes into a List} \figaleft{chptr16/insertions.eps}{Two cases. (a) The list is empty before the insertion, which takes place at {\tt head}. (b) The list is not empty, so the insertion takes place at the end of the list. -\label{fig-insertions}\label{pg-fig-insertions}} +} {fig-insertions} \end{figure} %\end{figure} @@ -689,7 +689,7 @@ \subsection*{Removing a Node from a List} \begin{figure}[tb] \figaright{chptr16/removal.eps}{Removing different nodes from a linked list. -\label{fig-removal}\label{pg-fig-removal}} +} {fig-removal} \end{figure} \noindent In order to remove some other node besides the first, two traversal @@ -936,7 +936,7 @@ \subsection*{The {\tt List} Class} contains a pointer to the head of the list and public methods to insert and remove objects from both the front and rear of the list. -\label{fig-listuml}\label{pg-fig-listuml}} +} {fig-listuml} %\end{graphic} %\end{figure} {\tt isEmpty()} method, and its {\tt print()} method in the same way as in the @@ -1099,7 +1099,7 @@ \subsection*{Testing the List ADT} List list = new List(); list.insertAtFront(new PhoneRecord("Roger M", "997-0020")); list.insertAtFront(new Integer(8647)); - list.insertAtFront(new String("Hello World")); + list.insertAtFront(new String("Hello, World!")); list.insertAtRear(new PhoneRecord("Jane M", "997-2101")); list.insertAtRear(new PhoneRecord("Stacy K", "997-2517")); @@ -1144,7 +1144,7 @@ \subsection*{Testing the List ADT} \begin{figure}[bht] \figaright{chptr16/phonerecorduml.eps}{The {\tt PhoneRecord} class stores data for a phone directory. -\label{fig-phonerecorduml}\label{pg-fig-phonerecorduml}} +} {fig-phonerecorduml} \end{figure} \begin{figure}[htb] @@ -1207,7 +1207,7 @@ \section{The Stack ADT} \begin{figure}[thb] \figaright{chptr16/stack.eps}{A stack is a list that permits insertions and removals only at its top. -\label{fig-stack}\label{pg-fig-stack}} +} {fig-stack} \end{figure} The stack operations are conventionally called {\bf push}\index{push}, @@ -2059,7 +2059,7 @@ \section{ The Binary Search Tree Data Structure} Figure~16.36. Note that some of the references to other nodes might \begin{figure}[h!] \figaleft{chptr16/btree.eps}{A binary search tree of {\tt PhoneTreeNode}s. -\label{fig-btree}\label{pg-fig-btree}} +} {fig-btree-ds} \end{figure} \noindent be null. The trunk of the tree corresponds to the node labeled {\tt root}. In computer science, trees are almost always drawn upside down. @@ -2425,23 +2425,23 @@ \section{ The Binary Search Tree Data Structure} \begin{lstlisting} Generic List --------------- -Hello World +Hello, World! 8647 Roger M 997-0020 Jane M 997-2101 Stacy K 997-2517 Removed Stacy K 997-2517 Generic List: -Hello World +Hello, World! 8647 Roger M 997-0020 Jane M 997-2101 Removed Jane M 997-2101 Generic List: -Hello World +Hello, World! 8647 Roger M 997-0020 - Removed Hello World + Removed Hello, World! Generic List: 8647 Roger M 997-0020 diff --git a/texfiles/2.objects.tex b/texfiles/2.objects.tex index 063ca1f..a914fd3 100644 --- a/texfiles/2.objects.tex +++ b/texfiles/2.objects.tex @@ -367,35 +367,46 @@ \section{Drawing Shapes with a {\tt Graphics} Object (Optional)} and the {\tt concat()} method returned a {\tt String}. It is also very common for classes to define instance methods that perform actions but do not return a value. The {\tt Graphics} object, {\tt g}, -that appears in Chapter~1's {\tt HelloWorldApplet} is one +that appears in Chapter~1's {\tt HelloWorldSwing} is one example. The program is reproduced in Figure~\ref{fig-helloworld2} -%% proglist ch1/helloapplet/HelloWorld.java +%% proglist ch1/hellojframe/HelloWorldSwing.java \begin{figure}[h!] \jjjprogstart \begin{jjjlisting} \begin{lstlisting} - /* - * HelloWorldApplet program - */ -import java.applet.Applet; // Import the Applet class -import java.awt.Graphics; // and the Graphics class - -public class HelloWorldApplet extends Applet //Class header -{ // Start of body - public void paint(Graphics g) // The paint method - { - g.drawString("Hello World",10,10); - } // End of paint -} // End of HelloWorld + /** File: HelloWorldSwing program */ + +import javax.swing.JFrame; // Import class names +import java.awt.Graphics; +import java.awt.Canvas; + +public class HelloWorldCanvas extends Canvas // Class header +{ + // Start of body + public void paint(Graphics g) + // The paint method + { + g.drawString("Hello, World!", 10, 10); + } // End of paint + + public static void main(String[] args){ + HelloWorldCanvas c = new HelloWorldCanvas(); + JFrame f = new JFrame(); + f.add(c); + f.setSize(150,50); + f.setVisible(true); + } +} // End of HelloWorldCanvas + \end{lstlisting} \end{jjjlisting} -\jjjprogstop{{\tt HelloWorldApplet} program.} +\jjjprogstop{{\tt Hello\-World\-Canvas} program source code.} {fig-helloworld2} \end{figure} At this point we will not worry about the language features that -enable the {\tt paint()} method to draw on the applet window when the -applet is executed by a Web browser. We will focus instead on the +enable the {\tt paint()} method to draw on the Java Swing window. +We will focus instead on the information needed to make good use of the {\tt g.drawString()} method. The first thing you should know is that, when the {\tt paint()} method is executed, its parameter, {\tt g}, refers to an @@ -408,11 +419,11 @@ \section{Drawing Shapes with a {\tt Graphics} Object (Optional)} \begin{jjjlisting} \begin{lstlisting} -g.drawString("Hello World",10,10); +g.drawString("Hello, World!",10,10); \end{lstlisting} \end{jjjlisting} -\noindent displays the {\tt String} ``Hello World'' in the applet window. More +\noindent displays the {\tt String} ``Hello, World!'' in the program window. More generally, if {\tt str} is a literal {\tt String} value or a reference to a {\tt String} object and {\tt x} and {\tt y} are literal {\tt int} values or {\tt int} variables then @@ -423,10 +434,10 @@ \section{Drawing Shapes with a {\tt Graphics} Object (Optional)} \end{lstlisting} \end{jjjlisting} -\noindent displays the {\tt String str} from left to right in the applet window +\noindent displays the {\tt String str} from left to right in the program window beginning at a point which is {\tt x} pixels from the left edge of the -window and {\tt y} pixels down from the top edge of the window. In an -applet window, the point with coordinates (0,0) is at the top-left +window and {\tt y} pixels down from the top edge of the window. In a +graphics window, the point with coordinates (0,0) is at the top-left corner. The horizontal axis grows positively from left to right. The vertical axis grows positively from top to bottom (Fig.~2.6). \marginfig{chptr02/drawxy.eps}{Coordinate system of a Java window.} @@ -439,26 +450,26 @@ \section{Drawing Shapes with a {\tt Graphics} Object (Optional)} increasing the $y$ value designates a higher point. With this information about {\tt g.drawString()}, we can calculate -where to display any message in the applet window. For example, if we +where to display any message in the program window. For example, if we wish to display the message ``Welcome to Java'' 25 pixels below where -``Hello World'' is displayed we could use the statements +``Hello, World!'' is displayed we could use the statements \begin{jjjlisting} \begin{lstlisting} -g.drawString("Hello World",10,10); +g.drawString("Hello, World!",10,10); g.drawString("Welcome to Java",10,35); \end{lstlisting} \end{jjjlisting} -\noindent in the body of {\tt HelloWorldApplet}'s {\tt paint()} method. +\noindent in the body of {\tt HelloWorldCanvas}'s {\tt paint()} method. The result of these statements would appear as shown in Figure~\ref{fig-drawstr}. \begin{figure}[h] -\figascaled{chptr02/drawstr.eps}{0.75}{``Hello World'' is drawn -%%\figaleft{chptr02/drawstr.eps}{``Hello World'' is drawn +\figascaled{chptr02/drawstr.eps}{0.75}{``Hello, World!'' is drawn +%%\figaleft{chptr02/drawstr.eps}{``Hello, World!'' is drawn at coordinate (10, 10) and ``Welcome to Java'' at -(10, 35) on the applet window.} +(10, 35) on the JFrame.} {fig-drawstr} \end{figure} @@ -498,7 +509,7 @@ \subsection{Graphics Drawing Methods} A {\tt Graphics} object stores a single color for use in drawing shapes or displaying strings with {\tt drawString()}. If we wish to -draw an interesting scene in the applet window, we need to understand +draw an interesting scene in the JFrame, we need to understand how to use colors. For a given {\tt Graphics} object, such as {\tt g}, the {\tt @@ -527,9 +538,9 @@ \subsection{Graphics Drawing Methods} \end{center} To demonstrate how the new {\tt Graphics} methods can be used for -creating more interesting applets, let's develop a plan for displaying -the two messages, ``Hello World'' and ``Welcome to Java'', on an -applet, but this time we will draw the first inside a colored +creating more interesting graphical programs, let's develop a plan for displaying +the two messages, ``Hello, World!'' and ``Welcome to Java.'', on an +JFrame, but this time we will draw the first inside a colored rectangle and the second inside a colored oval. For the rectangle, let's use the {\tt drawRect()} method to create its border. We can choose some arbitrary colors, say, cyan for filling the rectangle, @@ -549,7 +560,7 @@ \subsection{Graphics Drawing Methods} All that remains is to choose the location and dimensions of the rectangles. We could specify one rectangle as having its upper left -corner 25 pixels to the right of the left edge of the applet window +corner 25 pixels to the right of the left edge of the JFrame and 25 pixels down from the top edge. A medium sized rectangle could have a width of 140 pixels and a height of 40 pixels. The statement \begin{jjjlisting} @@ -566,11 +577,11 @@ \subsection{Graphics Drawing Methods} \begin{jjjlisting} \begin{lstlisting} -g.drawString("Hello World", 50, 50); +g.drawString("Hello, World!", 50, 50); \end{lstlisting} \end{jjjlisting} -\noindent will display ``Hello World'' inside the rectangle. We can +\noindent will display ``Hello, World!'' inside the rectangle. We can use similar planning to locate the oval and its enclosed message. Thus, we now have sufficient information to finish the {\tt paint()} @@ -581,52 +592,63 @@ \subsection{Graphics Drawing Methods} \begin{jjjlisting} \begin{lstlisting} import java.awt.*; -import java.applet.*; - -public class HelloWorldGraphic extends Applet -{ public void paint(Graphics g) - { g.setColor(Color.cyan); // Set color - g.fillRect(25, 25, 140, 40); // Fill rectangle - g.setColor(Color.blue); // Set color - g.drawRect(25, 25, 140, 40); // Outline rectangle - g.setColor(Color.black); // Set color - g.drawString("Hello World", 50, 50); // Display string - g.setColor(Color.yellow); - g.fillOval(25, 75, 140, 40); // Fill oval - g.setColor(Color.red); - g.drawOval(25, 75, 140, 40); // Outline oval - g.setColor(Color.black); - g.drawString("Welcome to Java", 50, 100); - }//paint() +import javax.swing.JFrame; + +public class HelloWorldGraphic extends Canvas +{ + // called after setVisible(true) + public void paint(Graphics g) { + g.setColor(Color.cyan); // Set color + g.fillRect(25, 25, 140, 40); // Fill rectangle + g.setColor(Color.blue); // Set color + g.drawRect(25, 25, 140, 40); // Outline rectangle + g.setColor(Color.black); // Set color + g.drawString("Hello, World!", 50, 50); // Display string + g.setColor(Color.yellow); + g.fillOval(25, 75, 140, 40); // Fill oval + g.setColor(Color.red); + g.drawOval(25, 75, 140, 40); // Outline oval + g.setColor(Color.black); + g.drawString("Welcome to Java", 50, 100); + }//paint() + + // the program + public static void main(String[] args){ + HelloWorldCanvas c = new HelloWorldCanvas(); + JFrame f = new JFrame(); + f.add(c); + f.setSize(150,50); + f.setVisible(true); + } } //HelloWorldGraphic \end{lstlisting} \end{jjjlisting} -\jjjprogstop{The {\tt Hello\-World\-Graphic} class is an -applet that shows how to use color and drawing methods.} +\jjjprogstop{The {\tt Hello\-World\-Graphic} class is a Java +Swing program that shows how to use color and drawing methods.} {fig-hw2appletclass} \end{figure} g.setColor()} method to change {\tt g}'s current color before drawing each element of our picture. -Figure~\ref{fig-drawrect} shows what this applet looks like when run -in a browser. To experiment with this applet, download its sourcecode -and its corresponding HTML file from the book's Web site and compile -and run it on your computer. If you've forgotten how to run an applet, -review Section~\ref{sec-applet}. Additional drawing capabilities will +%%%FIXME don't reference applets anymore +Figure~\ref{fig-drawrect} shows what this program looks like. +To experiment with this Java Swing application, download its sourcecode +from the book's Web site and compile +and run it on your computer. Additional drawing capabilities will be explored throughout the text in sections that can either be covered or skipped. \begin{figure}[!bht] \figaleftscaled{chptr02/drawrect.eps}{0.8}{This is how the {\tt HelloWorldGraphic} %%\figa{chptr02/drawrect.eps}{This is how the {\tt HelloWorldGraphic} -applet will look when run in a browser. -\label{fig-drawrect} -\label{pg-fig-drawrect}} +program will look when run. +} {fig-drawrect} + \end{figure} \section{Class Definition} \label{sec-classdef} -\label{pg-sec-classdef} + \noindent To program in Java the main thing you do is write class definitions \marginnote{The class as template} for the various objects that will make up the program. A class @@ -777,8 +799,8 @@ \subsection{The {\tt RiddleUser} Class} between the {\tt RiddleUser} and {\tt Riddle} classes. The {\tt Riddle\-User} class will {\em use} one or more objects of the {\tt Riddle} class. -\label{fig-p63f2} -\label{pg-fig-p63f2}} +} {fig-p63f2} + \end{figure} %\end{figure} or more {\tt Riddles}. Note that we characterize the relationship @@ -1136,7 +1158,7 @@ \subsubsection*{The Class's Instance Variables} Java handles each type of variable differently. A declaration for a variable at class level must follow the rules for -declaring variables that were described in Section~\ref{sec-vardecl} +declaring variables that were described in Section~\ref{subsec:vardecl} with the added restriction that they should be modified by one of the access modifiers {\tt public}, {\tt private}, or {\tt protected}. The rules associated with these access modifiers are: @@ -1618,7 +1640,7 @@ \subsection{Testing the {\tt OneRowNim} Class} %\subsubsection{Flow of Control: Method Call and Return} PROMOTED TO SUBSECTION \subsection{Flow of Control: Method Call and Return} \label{sec-methodcall} -\label{pg-sec-methodcall} + \noindent A program's {\bf flow of control} is the order in which its statements are executed. In an object-oriented program, @@ -1905,7 +1927,7 @@ \section{From the Java Library: {\tt java.util.Scanner}.} possible, until that time. There is an alternate way to handle keyboard input in the Java 2 -Platform Standard Edition 5.0 (J2SE 5.0). A {\tt Scanner} class has +Platform Standard Edition 5.0 (Java SE 5.0). A {\tt Scanner} class has been added to the {\tt java.util} package which permits keyboard input without forcing the programmer to handle exceptions. We introduce the {\tt Scanner} class in the next subsection and then describe how a diff --git a/texfiles/3.methods.tex b/texfiles/3.methods.tex index 7483dff..278d8df 100644 --- a/texfiles/3.methods.tex +++ b/texfiles/3.methods.tex @@ -5,7 +5,7 @@ \setcounter{SSTUDYcount}{1} \chapter{Methods: Communicating with Objects} \label{chapter-methods} -\label{pg-chapter-methods} + \CObegin \secCOBH{Objectives} @@ -471,7 +471,7 @@ \subsection{Passing an {\tt int} value to a {\tt OneRowNim} method.} before calling {\tt takeSticks(3)}. (b) Just before executing the body of {\tt takeSticks(3)}. (c) Just after executing the body of {\tt takeSticks(3)}. (d) After flow of control leaves {\tt takeSticks()}.} -\label{fig-parameps} +{fig-parameps} \end{figure} Executing the first two statements of {\tt main()} creates the @@ -1125,7 +1125,7 @@ \subsection{An Expanded {\tt OneRowNim} Class} \section{Passing a Value and Passing a Reference} \label{sec-passby} -\label{pg-sec-passby} + \noindent The effect of passing arguments to a method differs depending on whether you are passing a value of primitive type\index{primitive @@ -1199,7 +1199,7 @@ \section{Passing a Value and Passing a Reference} before calling {\tt myMethod(k) in main}. (b) Just before executing the body of {\tt myMethod()}. (c) Just after executing the body of {\tt myMethod()}. (d) After flow of control returns to {\tt main()}.} -\label{fig-vparameps} +{fig-vparameps} \end{figure} \noindent In contrast to this, when an argument of a reference type is passed to a method, a copy of the reference to the object itself is @@ -1333,7 +1333,7 @@ \section{Flow of Control: Control Structures} \subsection{The Simple If Statement} \label{sec-if} -\label{pg-sec-if} + \noindent A {\bf selection} control structure, allows a program to select between two or more alternative paths of execution. The if statement is the most basic selection control @@ -1501,7 +1501,7 @@ \subsection{The Simple If Statement} \subsection{The {\tt if-else} Statement} \label{sec-ifelse} -\label{pg-sec-ifelse} + \noindent A second version of the if statement incorporates an {\tt else} clause into the structure. This allows us to execute either of two separate statements (simple or compound) as the result of one @@ -1555,7 +1555,7 @@ \subsection{The {\tt if-else} Statement} \subsection{The Nested if/else Multiway Selection Structure} \label{sec-multi} -\label{pg-sec-multi} + \noindent The statements that one inserts in place of {\it statement1} and {\it statement2} in the if-else statement can be any executable statement, %\begin{marginalnote}\it Multiple alternatives\end{marginalnote} @@ -1574,7 +1574,7 @@ \subsection{The Nested if/else Multiway Selection Structure} \begin{figure}[tb] \figaleft{chptr03/multi.eps}{Flowchart of a nested if-else statement. %%\figa{chptr03/multi.eps}{Flowchart of a nested if-else statement. -\label{fig-multiway}} +} {fig-multiway} \end{figure} %\end{figure} @@ -1822,7 +1822,7 @@ \subsection{The While Structure} \figaleft{chptr03/whileflow.eps}{Flowchart of the while statement and while %%%\figa{chptr03/whileflow.eps}{Flowchart of the while statement and while structure. -\label{fig-whileflow}} +} {fig-whileflow} \end{figure} @@ -2378,9 +2378,9 @@ \section{Drawing Lines and Defining Graphical Methods (Optional)} \markright{{\color{cyan}SECTION\,\,\arabic{section}\,\,$\bullet$}\,\,Drawing and Graphical Methods} We used a {\tt Graphics} object in the previous chapter to draw -rectangles and ovals in an applet window. The {\tt Graphics} class +rectangles and ovals in a JFrame window. The {\tt Graphics} class also possesses a method for drawing a line segment. -Problems involving drawing pictures in an applet window using a +Problems involving drawing pictures in an JFrame window using a series of line segments can be a source of examples of defining useful methods and also of making good use of loops. @@ -2402,19 +2402,19 @@ \section{Drawing Lines and Defining Graphical Methods (Optional)} from the left edge of the drawing area, that is, a line segment from the point $(10,10)$ to the point $(10,60)$. -Consider the problem of creating an applet program with a +Consider the problem of creating an Swing program with a method called {\tt drawSticks()} to draw any specified number of vertical line segments. -This method might be useful for an applet user interface +This method might be useful for an graphical user interface to the {\tt OneRowNim} game to draw the number of sticks at a given point in a game. Suppose that this method must have an {\tt int} parameter to specify the number of vertical lines to draw and two {\tt int} parameters to specify the location of the top endpoint of the left most line segment. The {\tt drawSticks()} method will need to use a {\tt Graphics} object connected to the -applet window for drawing the line segment. The only such +JFrame window for drawing the line segment. The only such {\tt Graphics} object available is the parameter in the {\tt paint()} -method of an applet. Thus the method must have a {\tt Graphics} +method of the Canvas. Thus the method must have a {\tt Graphics} parameter and it will be called in the {\tt paint()} method using the {\tt Graphics} object there as an argument. Thus the header of the method should look like: @@ -2437,20 +2437,20 @@ \section{Drawing Lines and Defining Graphical Methods (Optional)} \jjjprogstart \begin{jjjlisting} \begin{lstlisting} -/** DrawLineApplet demonstrates some graphics commands. +/** DrawLineCanvas demonstrates some graphics commands. *It draws a set of 12 vertical lines and a set of 7 lines. */ import java.awt.*; -import java.applet.*; +import javax.swing.JFrame; -public class DrawSticksApplet extends Applet +public class DrawSticksCanvas extends Canvas /** drawSticks(g,x,y,num) will draw num vertical line * segments. The line segments are 10 pixels apart and * 50 pixels long. The top endpoint of the left most *line segment is at the point (x,y). */ public void drawSticks(Graphics g, int x, int y, int num) - { int k = 0; + { int k = 0; while (k < num) { g.drawLine(x, y, x, y + 50); x = x + 10; @@ -2463,10 +2463,12 @@ \section{Drawing Lines and Defining Graphical Methods (Optional)} g.setColor(Color.cyan); drawSticks(g, 25, 125, 7); } // paint() -} // DrawSticksApplet + + +} // DrawSticksCanvas \end{lstlisting} \end{jjjlisting} -\jjjprogstop{An applet program with a method for drawing a set of sticks.} +\jjjprogstop{A Swing Class with a method for drawing a set of sticks.} {fig-drawsticksprog} \end{figure} @@ -2482,34 +2484,15 @@ \section{Drawing Lines and Defining Graphical Methods (Optional)} changing the color of {\tt g} before passing it as an argument to {\tt drawSticks()} changes the drawing color. -To run this applet, one needs the following HTML document, which specifies -the applet code as {\tt DrawSticksApplet.class}: -\begin{jjjlisting} -\begin{lstlisting} - - - Draw Sticks Web Page - - -

DrawSticksApplet will appear below.

- - - - -\end{lstlisting} -\end{jjjlisting} +\noindent An image of the {\tt DrawSticksCanvas} as it appears in a window +is shown in Figure~\ref{fig-drawstickseps}. -\noindent An image of the {\tt DrawSticksApplet} as it appears in a browser window -is shown in Figure~3.20. - -\begin{figure}[tbh] -\figaleftscaled{chptr03/drawsticks.eps}{0.70}{The DrawSticksApplet as displayed in a -%%\figa{chptr03/drawsticks.eps}{The DrawSticksApplet as displayed in a -browser window.} -\label{fig-drawstickseps} -\end{figure} +%\begin{figure}[tbh] +\marginfigscaled{chptr03/drawsticks.png}{0.70}{The DrawSticksCanvas as displayed in a +Java window.} +{fig-drawstickseps} +%\end{figure} As we have seen in this example, defining methods with parameters to draw an object makes the code reusable and makes it possible to draw a diff --git a/texfiles/3E.sty b/texfiles/3E.sty index 5177ca6..8cd2924 100644 --- a/texfiles/3E.sty +++ b/texfiles/3E.sty @@ -70,6 +70,11 @@ \setlength{\TPVertModule}{1pc}% \textblockorigin{1in}{1in}% start everything near the top-left corner +\usepackage{titlesec} +\titlespacing*{\subsection}{0pt}{1.0ex plus 0.2ex minus 0.5ex}{1ex plus + 0.2ex minus 0.5ex} + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% FONTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -143,9 +148,9 @@ SECTION\ #1\hspace*{5pt}$\bullet$\hspace*{5pt}}}% \end{minipage}\hspace*{-13.5pc}% }% -\def\figaleft#1#2{% +\def\figaleft#1#2#3{% \hspace*{-13.5pc}\parbox[t]{12.5pc}{% - \protect\vspace{-8pt}\caption{#2}% + \protect\vspace{-8pt}\caption{#2 \label{#3}}% }\hspace*{1pc}% \protect\parbox[t]{27pc}{% \protect\vfill\centering\psfig{file=../#1}% @@ -153,9 +158,9 @@ SECTION\ #1\hspace*{5pt}$\bullet$\hspace*{5pt}}}% }% % -\def\figaleftscaled#1#2#3{% +\def\figaleftscaled#1#2#3#4{% \hspace*{-13.5pc}\parbox[t]{12.5pc}{% - \protect\vspace{-8pt}\caption{#3}% + \protect\vspace{-8pt}\caption{#3 \label{#4}}% }\hspace*{1pc}% \protect\parbox[t]{27pc}{% \protect\vfill\centering\psfig{file=../#1,scale=#2}% @@ -177,10 +182,10 @@ SECTION\ #1\hspace*{5pt}$\bullet$\hspace*{5pt}}}% \begin{minipage}[t]{12.5pc}\protect\vspace{-7pt}\caption{#1 \label{#2}}\end{minipage}\hspace*{-13.5pc}}% % %caption 12.5 for figure prog left -\def\figaprogbleft#1{\end{minipage}\par{\color{cyanten}\rule[-1pt]{27pc}{1.5pt}}\par\vspace*{-11pt}% +\def\figaprogbleft#1#2{\end{minipage}\par{\color{cyanten}\rule[-1pt]{27pc}{1.5pt}}\par\vspace*{-11pt}% {\color{cyan}\rule[-1.5pt]{27pc}{0.5pt}}% \end{minipage}\hspace*{-40.5pc}% - \begin{minipage}[t]{12.5pc}\protect\vspace{-7pt}\caption{#1}\end{minipage}}% + \begin{minipage}[t]{12.5pc}\protect\vspace{-7pt}\caption{#1 \label{#2}}\end{minipage}}% % %figure 27 prog caption bottom 12.5 (no spec) \def\figaproganospec#1{\small\baselineskip11pt\begin{minipage}[b]{27pc}% @@ -189,10 +194,10 @@ SECTION\ #1\hspace*{5pt}$\bullet$\hspace*{5pt}}}% \protect} % %caption 12.5 for figure prog caption bottom no spec left -\def\figaprogbleftnospec#1{\end{minipage}\par{\color{cyanten}\rule[-1pt]{27pc}{1.5pt}}\par\vspace*{-11pt}% +\def\figaprogbleftnospec#1#2{\end{minipage}\par{\color{cyanten}\rule[-1pt]{27pc}{1.5pt}}\par\vspace*{-11pt}% {\color{cyan}\rule[-1.5pt]{27pc}{0.5pt}}% \end{minipage}\hspace*{-41pc}% - \begin{minipage}[b]{12.5pc}\protect\vspace{-7pt}\caption{#1}\end{minipage}}% + \begin{minipage}[b]{12.5pc}\protect\vspace{-7pt}\caption{#1 \label{#2}}\end{minipage}}% % %figure 40.5 prog caption 27 after left \def\figbprogaleft#1{\small\baselineskip11pt\hspace*{-13.5pc}\begin{minipage}[t]{40.5pc}% @@ -201,12 +206,12 @@ SECTION\ #1\hspace*{5pt}$\bullet$\hspace*{5pt}}}% \hspace*{6pt}\begin{minipage}{39.5pc}% \protect} % -\def\figbleftstrict#1#2{\noindent% +\def\figbleftstrict#1#2#3{\noindent% \protect\hspace*{-13.5pc}\begin{minipage}[t]{40.5pc}% %% \protect\hfill\psfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:#1}% \protect\hfill\psfig{file=../#1}% \end{minipage}\par\vspace{-8pt}\begin{minipage}[t]{27pc}% - \protect\caption{#2}% + \protect\caption{#2 \label{#3}}% \end{minipage}% }% % @@ -219,10 +224,10 @@ SECTION\ #1\hspace*{5pt}$\bullet$\hspace*{5pt}}}% \quad\color{black}\raggedright\small#3}}% % %caption 27 after left -\def\figbprogbleft#1{\end{minipage}\par{\color{cyanten}\rule[-2pt]{40.5pc}{3pt}}\par\vspace*{-11pt}% +\def\figbprogbleft#1#2{\end{minipage}\par{\color{cyanten}\rule[-2pt]{40.5pc}{3pt}}\par\vspace*{-11pt}% {\color{cyan}\rule[-1.5pt]{40.5pc}{0.5pt}}% \end{minipage}\par% - \begin{minipage}[t]{27pc}\protect\caption{#1}\end{minipage}}% + \begin{minipage}[t]{27pc}\protect\caption{#1 \label{#2}}\end{minipage}}% % % %figure 40.5 prog caption 27 after @@ -233,10 +238,10 @@ SECTION\ #1\hspace*{5pt}$\bullet$\hspace*{5pt}}}% \protect} % %caption 27 after -\def\figbprogb#1{\end{minipage}\par{\color{cyanten}\rule[-2pt]{40.5pc}{3pt}}\par\vspace*{-11pt}% +\def\figbprogb#1#2{\end{minipage}\par{\color{cyanten}\rule[-2pt]{40.5pc}{3pt}}\par\vspace*{-11pt}% {\color{cyan}\rule[-1.5pt]{40.5pc}{0.5pt}}% \end{minipage}\par% - \begin{minipage}[t]{27pc}\protect\caption{#1}\end{minipage}}% + \begin{minipage}[t]{27pc}\protect\caption{#1 \label{#2}}\end{minipage}}% % % %figure 35 prog caption 27 after left @@ -248,10 +253,10 @@ SECTION\ #1\hspace*{5pt}$\bullet$\hspace*{5pt}}}% % % %caption 27 after left -\def\figbprogblefttwo#1{\end{minipage}\par{\color{cyanten}\rule[-2pt]{35pc}{3pt}}\par\vspace*{-11pt}% +\def\figbprogblefttwo#1#2{\end{minipage}\par{\color{cyanten}\rule[-2pt]{35pc}{3pt}}\par\vspace*{-11pt}% {\color{cyan}\rule[-1.5pt]{35pc}{0.5pt}}% \end{minipage}\par% - \begin{minipage}[t]{27pc}\protect\caption{#1}\end{minipage}}% + \begin{minipage}[t]{27pc}\protect\caption{#1 \label{#2}}\end{minipage}}% % % % @@ -266,17 +271,17 @@ SECTION\ #1\hspace*{5pt}$\bullet$\hspace*{5pt}}}% \protect} % %caption 27 after -\def\figbprogbtwo#1{\end{minipage}\par{\color{cyanten}\rule[-2pt]{35pc}{3pt}}\par\vspace*{-11pt}% +\def\figbprogbtwo#1#2{\end{minipage}\par{\color{cyanten}\rule[-2pt]{35pc}{3pt}}\par\vspace*{-11pt}% {\color{cyan}\rule[-1.5pt]{35pc}{0.5pt}}% \end{minipage}\par% - \begin{minipage}[t]{27pc}\protect\caption{#1}\end{minipage}}% + \begin{minipage}[t]{27pc}\protect\caption{#1 \label{#2}}\end{minipage}}% % % %caption 35pc after -\def\figbprogbtwolong#1{\end{minipage}\par{\color{cyanten}\rule[-2pt]{35pc}{3pt}}\par\vspace*{-11pt}% +\def\figbprogbtwolong#1#2{\end{minipage}\par{\color{cyanten}\rule[-2pt]{35pc}{3pt}}\par\vspace*{-11pt}% {\color{cyan}\rule[-1.5pt]{35pc}{0.5pt}}% \end{minipage}\par% - \begin{minipage}[t]{35pc}\protect\caption{#1}\end{minipage}}% + \begin{minipage}[t]{35pc}\protect\caption{#1 \label{#2}}\end{minipage}}% %margin fig \def\marginfig#1#2#3{\protect\marginpar{\protect\begin{center}% diff --git a/texfiles/3Enewstuff.sty b/texfiles/3Enewstuff.sty index 89115a0..4464a7d 100644 --- a/texfiles/3Enewstuff.sty +++ b/texfiles/3Enewstuff.sty @@ -272,12 +272,12 @@ %% think the problem is that many figures float to the next page. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % -\def\figaright#1#2{% +\def\figaright#1#2#3{% \protect\begin{minipage}[t]{27pc}% \protect\vfill\centering\psfig{file=../#1}% \end{minipage}\hspace*{1pc}% \begin{minipage}[t]{12.5pc}% - \protect\vspace{-8pt}\caption{#2}% + \protect\vspace{-8pt}\caption{#2 \label{#3}}% \end{minipage}\hspace*{-13.5pc}% } %% figa % diff --git a/texfiles/4.uis.tex b/texfiles/4.uis.tex index a44e8b1..412e731 100644 --- a/texfiles/4.uis.tex +++ b/texfiles/4.uis.tex @@ -16,7 +16,7 @@ \chapter{Input/Output: Designing the User Interface} \item Know how to use a simple command-line interface. \item Be able to program and use a simple Graphical User Interface (GUI). \item Understand the concept of event-driven programming. -\item Know how to program and use a Java applet. +\item Know how to program and use a Java Swing program. \end{COBL} \secCOLH{Outline} @@ -93,8 +93,8 @@ \section{The User Interface} \figaright{chptr04/userinter.eps} {The user interface transmits data back and forth between the user and the program's computational objects. -\label{fig-ui} -\label{pg-fig-ui}} +} {fig-ui} + \end{figure} In this chapter we focus our attention on the user interface side of @@ -131,8 +131,8 @@ \section{A Command-Line Interface} \begin{figure}[h] \figaleft{chptr04/console.eps} {The Java console window. -\label{fig-console} -\label{pg-fig-console}} +} {fig-console} + \end{figure} In Chapter~3 we described how to use the {\tt System.out.print()} and @@ -152,8 +152,8 @@ \section{A Command-Line Interface} \begin{figure}[h] \figaleft{chptr04/streams.eps} {Input and output streams. -\label{fig-streams} -\label{pg-fig-streams}} +} {fig-streams} + \end{figure} Each Java program has three standard streams available to it at @@ -184,8 +184,8 @@ \subsection{Using a {\tt BufferedReader} to Input Strings from the Keyboard} \begin{figure}[h] \figaright{chptr04/buffrdr.eps} {The {\tt Buf\-fer\-ed\-Read\-er} class. -\label{fig-buffrdr} -\label{pg-fig-buffrdr}} +} {fig-buffrdr} + \end{figure} Figure~\ref{fig-buffrdr} provides a UML diagram of the {\tt @@ -636,7 +636,7 @@ \section{A Graphical User Interface (GUI)} interest in learning to program. In this and subsequent sections, we will develop an extensible GUI -model that can be used with either a Java application or applet. By +model that can be used with either a Java application or an applet. By {\em extensible} we mean a model that can be easily adapted and used in a wide variety of programs. GUI programming involves a computational model known as {\bf event-driven programming}, which @@ -769,8 +769,8 @@ \subsection{Class Inheritance: Extending a Superclass} %%%%\figaleft{chptr04/swing1.eps} {Top-level Swing and AWT classes. [NOTE: REDRAW JWindow is a subclass of Window.] -\label{fig-swing1} -\label{pg-fig-swing1}} +} {fig-swing1} + \end{figure} A {\bf top-level container} is a GUI container that cannot be added to @@ -780,18 +780,18 @@ \subsection{Class Inheritance: Extending a Superclass} relationships among some of the top-level Swing and AWT classes. For example, the {\tt javax.swing.JFrame} class, which represents a top-level window, is a subclass of {\tt java.awt.Frame}, and the {\tt -javax.swing.JApplet} is a subclass of {\tt java.applet.Applet}. We -can see from this figure that a {\tt JApplet} {\it isa} {\tt Applet} -and an {\tt Applet} {\it isa} {\tt Panel} and a {\tt Panel} {\it isa} +javax.swing.JPanel} is a subclass of {\tt java.awt.Panel}. We +can see from this figure that a {\tt JFrame} {\it isa} {\tt Frame} +and an {\tt Frame} {\it isa} {\tt Window} and a {\tt Window} {\it isa} {\tt Container}. These subclass/superclass relationships are created in their respective class definitions by using the {\tt extends} keyword as follows: \begin{jjjlisting} \begin{lstlisting} - public class JApplet extends Applet { ... } - public class Applet extends Panel { ... } - public class Panel extends Container { ... } + public class JFrame extends Frame { ... } + public class Frame extends Window { ... } + public class Window extends Container { ... } \end{lstlisting} \end{jjjlisting} @@ -812,8 +812,7 @@ \subsection{Top-level Windows} container. Swing provides three top-level container classes: {\tt JFrame}, {\tt JApplet} and {\tt JDialog}. For our basic GUI, we will use a {\tt JFrame} as the top-level window for stand alone -applications. We will use a {\tt JApplet} as the top-level window for -Java applets. +applications. A {\tt JFrame} encapsulates the basic functionality of a top-level \marginnote{Content pane} @@ -827,8 +826,8 @@ \subsection{Top-level Windows} %%%\figa{chptr04/framecapture.eps} \figaleft{chptr04/framecapture.eps} {A simple window. -\label{fig-framecapture} -\label{pg-fig-framecapture}} +} {fig-framecapture} + \end{figure} Figure~\ref{fig-framecapture} shows a simple top-level window as it @@ -928,8 +927,8 @@ \subsection{GUI Components for Input, Output, and Control} %%%\figa{chptr04/swing2.eps} \figaleft{chptr04/swing2.eps} {Swing components. -\label{fig-swing2} -\label{pg-fig-swing2}} +} {fig-swing2} + \end{figure} Let's begin by creating a simple user interface, one that enables us @@ -958,8 +957,8 @@ \subsection{GUI Components for Input, Output, and Control} \begin{figure}[tb] \figaright{chptr04/swingmeth.eps} {Public methods and constructors for basic Swing components. -\label{fig-constructors} -\label{pg-fig-constructors}} +} {fig-constructors} + \end{figure} Figure~\ref{fig-constructors} shows some of the constructors and @@ -1026,8 +1025,8 @@ \subsection{Adding GUI Components to a Top-Level Window} %%%\figa{chptr04/border.eps} %%%RAM See figure 9-22, p 465 in 2E \figaleft{chptr04/border.eps} {Arrangement of components in a border layout. -\label{fig-borderlayout} -\label{pg-fig-borderlayout}} +} {fig-borderlayout} + \end{figure} @@ -1130,8 +1129,8 @@ \subsection{Controlling the GUI's Action} %%%\figa{chptr04/eventhier.eps} %%%RAM See figure 4-17, p 185 in 2E \figaleft{chptr04/eventhier.eps} %%%RAM See figure 4-17, p 185 in 2E {Java's event hierarchy. -\label{fig-eventhier} -\label{pg-fig-eventhier}} +} {fig-eventhier} + \end{figure} When the user clicks the {\tt JButton}, Java will create an {\tt @@ -1470,130 +1469,6 @@ \subsection{Using the GUI in a Java Application} prefer, this same {\tt main()} method can be incorporated directly into the {\tt GreeterGUI} class. -\subsection{Using the GUI in a Java Applet} - -Using our GUI with a Java applet is just as easy as using it -with an application. The only difference is that we instantiate -{\tt GreeterGUI} in the applet's {\tt init()} method rather than -in a {\tt main()} method: - -\begin{jjjlisting} -\begin{lstlisting} -import javax.swing.*; - -public class GreeterApplet extends JApplet -{ - public void init() - { - new GreeterGUI("Greeter"); - } -} -\end{lstlisting} -\end{jjjlisting} - -\noindent When this applet is run from a browser, it will open a -separate top-level window that is identical to the window opened by -the application. Unlike the other applets we've seen, the GUI will not -be embedded directly in the Web page, because it is not possible to -add a {\tt JFrame}, which our {\tt GreeterGUI} is, to a {\tt -JApplet}. The rule is you cannot add one top-level window to another -top-level window. - -\JavaRule{Top-level Windows.}{Top-level Java windows cannot contain -other top-level windows as components. } - -It is a relatively simple matter to modify {\tt GreeterGUI} so that it -can be embedded directly in the applet window. The main change we have -to make is to define the GUI as a subclass of {\tt JPanel} rather than -as a subclass of {\tt JFrame}. Figure~\ref{fig-guipanel} presents a full -implementation of the revised class, which we name {\tt GreeterGUIPanel}. - -\begin{figure}[htb] -\jjjprogstart -\begin{jjjlisting} -\begin{lstlisting} -import javax.swing.*; -import java.awt.*; -import java.awt.event.*; - -public class GreeterGUIPanel extends JPanel - implements ActionListener -{ private JTextArea display; - private JTextField inField; - private JButton goButton; - private Greeter greeter; - - public GreeterGUIPanel() - { greeter = new Greeter(); - buildGUI(); - } // GUIPanel() - private void buildGUI() - { display = new JTextArea(10,30); - inField = new JTextField(10); - goButton = new JButton("Click here for a greeting!"); - goButton.addActionListener(this); - JPanel inputPanel = new JPanel(); - inputPanel.add(new JLabel("Input your name here: ")); - inputPanel.add(inField); - inputPanel.add(goButton); - add("Center", display); - add("South", inputPanel); - } //buildGUI() - public void actionPerformed(ActionEvent e) - { if (e.getSource() == goButton) - { String name = inField.getText(); - display.append(greeter.greet(name) + "\n"); - } // if - } // actionPeformed() -} // GreeterGUIPanel -\end{lstlisting} -\end{jjjlisting} -\jjjprogstop{Definition of the {\tt GreeterGUIPanel} class.} -{fig-guipanel} -\end{figure} - -The revised {\tt GreeterGUIPanel} class requires the following two -changes: - -\begin{itemize} -\item Unlike {\tt JFrame}s, {\tt JPanel}s do not have titles and does not have -a {\tt pack()} method. Therefore we modify the constructor -method to the simpler form shown here. - -\item Unlike {\tt JFrame}s, {\tt JPanel}s do not use a content pane. Swing -components are added directly to the {\tt JPanel}. This simplifies the -{\tt buildGUI()} method. - -\end{itemize} - -Given these changes, we would then change the applet's {\tt init()} method -to the following: - -\begin{jjjlisting} -\begin{lstlisting} -import javax.swing.*; - -public class GreeterPanelApplet extends JApplet -{ public void init() - { getContentPane().add(new GreeterGUIPanel()); - } -} -\end{lstlisting} -\end{jjjlisting} - -\noindent Note that because a {\tt JApplet} has a content pane, -we add the {\tt GreeterGUIPanel} to the content pane rather than -to the applet itself. The result would be the applet -shown in Figure~\ref{fig-greeterapplet}. - -\begin{figure}[tb] -%%%\figaleft{chptr04/greeterapplet.eps} -\figaleftscaled{chptr04/greeterapplet.eps}{0.75} -{The Greeter applet. This version is embedded directly in the -Web page. -\label{fig-greeterapplet} -\label{pg-fig-greeterapplet}} -\end{figure} \section{Case Study: The One Row Nim Game } @@ -2595,15 +2470,15 @@ \subsection{File Input with the {\tt File} and {\tt Scanner} Classes} \item An object can refer to itself by using the \rule{40pt}{0.5pt} keyword. \item The {\tt JButton}, {\tt JTextField}, and {\tt JComponent} classes are defined in the \rule{40pt}{0.5pt} package. -\item Java applets utilize a form of control known as \rule{40pt}{0.5pt} programming. -\item When the user clicks on an applet's {\tt JButton}, an +\item Java GUIs utilize a form of control known as \rule{40pt}{0.5pt} programming. +\item When the user clicks on a program's {\tt JButton}, an \rule{40pt}{0.5pt} will automatically be generated. \item Two kinds of objects that generate {\tt ActionEvent}s are \rule{40pt}{0.5pt} and \rule{40pt}{0.5pt}\,. \item {\tt JButton}s, {\tt JTextField}s, and {\tt JLabel}s are all subclasses of \rule{40pt}{0.5pt}\,. -\item The {\tt JApplet} class is a subclass of \rule{40pt}{0.5pt}\,. -\item If an applet intends to handle {\tt ActionEvent}s, it must +\item The {\tt JFrame} class is a subclass of \rule{40pt}{0.5pt}\,. +\item If java class intends to handle {\tt ActionEvent}s, it must implement the \rule{40pt}{0.5pt} interface. \item When an applet is started, its \rule{40pt}{0.5pt} method is called automatically. @@ -2644,7 +2519,7 @@ \subsection{File Input with the {\tt File} and {\tt Scanner} Classes} \noindent List the signatures of all its constructors. -\item Suppose we want to set the text in our applet's {\tt JTextField}. +\item Suppose we want to set the text in our program's {\tt JTextField}. What method should we use and where is this method defined? ({\it Hint}: Look up the documentation for {\tt JTextField}. If no appropriate method is defined there, see if it is inherited from a superclass.) @@ -2657,12 +2532,12 @@ \subsection{File Input with the {\tt File} and {\tt Scanner} Classes} \item Does a {\tt JButton} have an {\tt add()} method? Explain. -\item Suppose you type the URL for a ``Hello World'' applet +\item Suppose you type the URL for a ``Hello, World!'' applet into your browser. Describe what happens---that is, describe the -processing that takes place in order for the applet to display ``Hello -World'' in your browser. +processing that takes place in order for the applet to display ``Hello, +World!'' in your browser. -\item Suppose you have an applet containing a {\tt JButton} +\item Suppose you have a program containing a {\tt JButton} named {\tt button}. Describe what happens, in terms of Java's event handling model, when the user clicks the button. @@ -2673,21 +2548,21 @@ \subsection{File Input with the {\tt File} and {\tt Scanner} Classes} by any object. Show how you would invoke this method for a {\tt JButton} object named {\tt button}. -\item The applet that follows contains a semantic error in -its {\tt init()} method. The error will cause the +\item The JFrame that follows contains a semantic error in +its {\tt SomeFrame()} constructor. The error will cause the {\tt actionPerformed()} method never to display ``Clicked'' even though the user clicks the button in the -applet. Why? ({\it Hint}: Think scope!) +JFrame. Why? ({\it Hint}: Think scope!) \begin{jjjlisting} \begin{lstlisting} -public class SomeApplet extends JApplet +public class SomeFrame extends JFrame implements ActionListener { // Declare instance variables private JButton button; - public void init() + public JFrame() { // Instantiate the instance variable JButton button = new JButton("Click me"); @@ -2700,21 +2575,21 @@ \subsection{File Input with the {\tt File} and {\tt Scanner} Classes} if (e.getSource() == button) System.out.println("Clicked"); } // actionPerformed() -} // SomeApplet +} // SomeFrame \end{lstlisting} \end{jjjlisting} -\item What would be output by the following applet? +\item What would be output by the following program? \begin{jjjlisting} \begin{lstlisting} -public class SomeApplet extends JApplet +public class SomeFrame2 extends JFrame { // Declare instance variables private JButton button; private JTextField field; - public void init() + public SomeFrame() { // Instantiate instance variables button = new JButton("Click me"); @@ -2723,7 +2598,12 @@ \subsection{File Input with the {\tt File} and {\tt Scanner} Classes} add(field); System.out.println(field.getText() + button.getText()); } // init() -} // SomeApplet + public static void main(String[] args) { + SomeFrame2 frame = new SomeFrame2(); + frame.setSize(400,400); + frame.setVisible(true); + } +} // SomeFrame2 } \end{lstlisting} \end{jjjlisting} diff --git a/texfiles/5.data.tex b/texfiles/5.data.tex index 0e11b7d..78d557c 100644 --- a/texfiles/5.data.tex +++ b/texfiles/5.data.tex @@ -5,7 +5,7 @@ \setcounter{SSTUDYcount}{1} \chapter{Java Data and Operators} \label{chapter-models} -\label{pg-chapter-models} + \CObegin \secCOBH{Objectives} @@ -82,7 +82,7 @@ \section{Introduction} %\begin{figure} \begin{figure}[tb] \figaleft{chptr05/5f1.eps}{Can the chess board be tiled with dominoes? -\label{fig-chessboard}\label{pg-fig-chessboard}} +} {fig-chessboard} \end{figure} %\end{figure} @@ -495,8 +495,7 @@ \section*{{\color{cyan}Special Topic:} Are We Computers?} %\end{BOXfive}% \subsection{Using Booleans in OneRowNim} - -\noindent Now that we have introduced the {\tt boolean} +Now that we have introduced the {\tt boolean} data type, let's use it to improve the {\tt OneRowNim} class, the latest version of which, from Chapter~3, is given in Figure~\ref{fig-ornclass}. Previously we used an {\tt int} variable, @@ -551,6 +550,48 @@ \subsection{Using Booleans in OneRowNim} \noindent The remaining changes are shown in Figure~\ref{fig-newonerow}. There are only two instance methods that need revision to accommodate +the use of {\tt boolean} variables. The {\tt takeSticks()} method +contains two revisions. The first uses the boolean OR operator to test +whether a move is valid: + +\begin{jjjlisting} +\begin{lstlisting} +public boolean takeSticks(int num) +{ if (num < 1 || num > 3 || num > nSticks) + return false; // Error + else // Valid move + { nSticks = nSticks - num; + onePlaysNext = !onePlaysNext; + return true; + } //else +} // takeSticks() +\end{lstlisting} +\end{jjjlisting} + +\noindent It also uses the boolean NOT operator to toggle +the value of {\tt onePlaysNext}, to switch to the other player's turn: + +\begin{jjjlisting} +\begin{lstlisting} +onePlaysNext = !onePlaysNext; +\end{lstlisting} +\end{jjjlisting} + +\noindent Finally, the {\tt getPlayer()} method now uses a +if/else statement to return either 1 or 2 depending on who's +turn it is: + +\begin{jjjlisting} +\begin{lstlisting} +public int getPlayer() +{ if (onePlaysNext) + return 1; + else return 2; +} // getPlayer() +\end{lstlisting} +\end{jjjlisting} + + \begin{figure}[h!] \jjjprogstart \begin{jjjlisting} @@ -605,48 +646,6 @@ \subsection{Using Booleans in OneRowNim} variable to keep track of who's turn it is.} {fig-newonerow} \end{figure} -the use of {\tt boolean} variables. The {\tt takeSticks()} method -contains two revisions. The first uses the boolean OR operator to test -whether a move is valid: - -\begin{jjjlisting} -\begin{lstlisting} -public boolean takeSticks(int num) -{ if (num < 1 || num > 3 || num > nSticks) - return false; // Error - else // Valid move - { nSticks = nSticks - num; - onePlaysNext = !onePlaysNext; - return true; - } //else -} // takeSticks() -\end{lstlisting} -\end{jjjlisting} - -\noindent It also uses the boolean NOT operator to toggle -the value of {\tt onePlaysNext}, to switch to the other player's turn: - -\begin{jjjlisting} -\begin{lstlisting} -onePlaysNext = !onePlaysNext; -\end{lstlisting} -\end{jjjlisting} - -\noindent Finally, the {\tt getPlayer()} method now uses a -if/else statement to return either 1 or 2 depending on who's -turn it is: - -\begin{jjjlisting} -\begin{lstlisting} -public int getPlayer() -{ if (onePlaysNext) - return 1; - else return 2; -} // getPlayer() -\end{lstlisting} -\end{jjjlisting} - - \section{Numeric Data and Operators} @@ -1719,8 +1718,8 @@ \subsubsection*{Problem Decomposition} \figaleft{chptr05/f5-2.eps}{Interacting objects: The user interacts with the user interface ({\tt Tem\-per\-a\-tureUI}), which interacts with the {\tt Temperature} object. -\label{fig-convapplobjs} -\label{pg-fig-convapplobjs}} +} {fig-convapplobjs} + \end{figure} %\end{figure} @@ -2426,7 +2425,7 @@ \section{{\bf From the Java Library} \\{\tt java.text.NumberFormat}} %\begin{figure} %\begin{graphic} \marginfig{chptr05/p267f1.eps}{The {\tt java.text.NumberFormat} class.} -{fig-p267f1} +{fig-pg267f1} numbers, it is not suitable for business applications. Even for rounded values, Java will drop trailing zeroes. So a value such as \$10,000.00 would be output as \$10000.0. This wouldn't diff --git a/texfiles/6.loops.tex b/texfiles/6.loops.tex index a21463b..697da60 100644 --- a/texfiles/6.loops.tex +++ b/texfiles/6.loops.tex @@ -5,7 +5,7 @@ \setcounter{SSTUDYcount}{1} \chapter{Control Structures} \label{chapter-loops} -\label{pg-chapter-loops} + \CObegin \secCOBH{Objectives} @@ -240,8 +240,8 @@ \subsection{The For Structure} %\begin{figure} \begin{figure}[tb] \figaright{chptr06/6f1.eps}{Flowchart of the {\tt for} statement. -\label{fig-forloop} -\label{pg-fig-forloop}} +} {fig-forloop} + \end{figure} %\end{figure} @@ -878,7 +878,7 @@ \subsection*{Implementation} \jjjprogstop{The {\tt CarLoan} application.} {fig-carloan} \end{figure} - +%$ \newpage \section{Graphics Example: Drawing a Checkerboard} @@ -909,40 +909,47 @@ \subsection*{Problem Description and Specification} next section. Because the purpose of this example is to focus on how we use loops -and drawing methods, we will employ a very simple applet interface, +and drawing methods, we will employ a very simple JFrame interface, whose implementation is given in Figure~\ref{fig-checkerapplet}. As \begin{figure}[h] \jjjprogstart \begin{jjjlisting} \begin{lstlisting} import java.awt.*; -import java.applet.*; import javax.swing.*; -public class CheckerBoardApplet extends JApplet { +public class CheckerBoardFrame extends JFrame { private CheckerBoard theBoard; - public void init() { + public CheckerBoardFrame() { theBoard = new CheckerBoard(); } public void paint(Graphics g) { + super.paint(g); theBoard.draw(g); } // paint() -} // CheckerBoardApplet + + public static void main(String[] args){ + CheckerBoardFrame c = new CheckerBoardFrame(); + c.setSize(500,500); + c.setVisible(true); + } +} // CheckerBoardFrame \end{lstlisting} \end{jjjlisting} -\jjjprogstop{The {\tt Chek\-er\-Board\-Applet} class.} +\jjjprogstop{The {\tt Check\-er\-Board\-Frame} class.} {fig-checkerapplet} \end{figure} -shown there, the applet simply creates a {\tt CheckerBoard} instance -in its {\tt init()} method, and then invokes the {\tt CheckerBoard}'s +shown there, the program simply creates a {\tt CheckerBoard} instance +in its {\tt CheckerBoardFrame()} constructor, and then invokes the {\tt CheckerBoard}'s {\tt draw} method in its {\tt paint()} method. The reason we invoke the {\tt draw()} method in {\tt paint()} is because we need to have -access to the applet's {\tt Graphics} context, which is passed as an -argument to the {\tt draw()} method. Recall that the {\tt init()} and -then the {\tt paint()} methods are invoked automatically by the -browser or appletviewer when an applet is started. Thus, the action -taken by this applet is simply to draw a visual representation of the +access to the JFrame's {\tt Graphics} context, which is passed as an +argument to the {\tt draw()} method. Recall that the {\tt + main()} method is invoked when CheckerBoardFrame is run,and +then the {\tt paint()} methods are invoked automatically by calling +the {\tt setVisible(true)} method in {\tt main()}. Thus, the action +taken by this program is simply to draw a visual representation of the checkerboard. @@ -950,7 +957,7 @@ \subsection*{Class Design: {\tt CheckerBoard}} \marginfig{chptr06/checkeruml.eps}{Design of the {\tt CheckerBoard} class.} {fig-checkeruml} -\noindent Because the applet will invoke its {\tt draw()} method, this +\noindent Because the program will invoke its {\tt draw()} method, this method must be part of the {\tt CheckerBoard}'s interface. Hence, it must be declared {\tt public}. The task of drawing a checkerboard involves two distinct subtasks: (1) drawing the board itself, which @@ -968,7 +975,7 @@ \subsection*{Class Design: {\tt CheckerBoard}} drawCheckers()} methods, we must first discuss {\tt CheckerBoard}'s several instance variables. The first two variables {\tt LEFT\_X} and {\tt UPPER\_Y}, give the absolute position of the upper left corner of -the checkerboard on the applet's drawing panel. The {\tt SQ\_SIDE} +the checkerboard on the JFrame's drawing panel. The {\tt SQ\_SIDE} variable gives the size of the checkerboard's individual squares. {\tt N\_ROWS} and {\tt N\_COLS} give the number of rows and columns in the checkerboard (typically, 8 by 8). All of these variables are @@ -994,7 +1001,7 @@ \subsection*{Method Design} is. As we noted earlier, in order to using Java's drawing commands, it is necessary to have a reference to a {\tt Graphics} object. This is passed to the {\tt draw()} method when the {\tt draw()} method is -invoked in the applet. Because the {\tt draw()} method delegates the +invoked in the program. Because the {\tt draw()} method delegates the details of the drawing algorithm to its helper methods, {\tt drawBoard()} and {\tt drawCheckers()}, it has to pass them a reference to the {\tt Graphics} object. @@ -1107,8 +1114,8 @@ \subsection*{Method Design} \begin{figure}[hbt] \figaleft{chptr06/checkerlayout.eps}{Calculating the locations of the checkerboard squares. -\label{fig-checkerlayout} -\label{pg-fig-checkerlayout}} +} {fig-checkerlayout} + \end{figure} %\end{figure} @@ -1467,8 +1474,8 @@ \subsection{The \mbox{Do-While} Structure} \begin{figure}[t] \figaleft{chptr06/6f4.eps}{Flowchart of the {\tt do-while} statement and {\tt do-while} structure. -\label{fig-dowhileflow} -\label{pg-fig-dowhileflow}} +} {fig-dowhileflow} + \end{figure} %\end{figure} @@ -3155,7 +3162,7 @@ \section*{{\color{cyan}Special Topic:} What Can Be Computed?} } // getAndValidatePizzaPrice() \end{lstlisting} \end{jjjlisting} - + %$ \item For each of the following problems, decide whether a counting loop structure, a {\tt while} structure, or a @@ -3601,14 +3608,14 @@ \section*{{\color{cyan}Special Topic:} What Can Be Computed?} continue to divide the range in half, we'll eventually get down to one number. Because you can divide 100 seven times (50, 25, 12, 6, 3, 1, 0), it will take at most seven guesses to guess a number between 1 and -100. Write a Java applet that lets the user input a positive integer, +100. Write a Java Swing program that lets the user input a positive integer, {\it N}, and then reports how many guesses it would take to guess a number between 1 and {\it N}. \item Suppose you determine that the fire extinguisher in your kitchen loses {\it X} percent of its foam every day. How long before it drops below a certain threshold ({\it Y} percent), at which point -it is no longer serviceable? Write a Java applet that lets the user +it is no longer serviceable? Write a Java Swing program that lets the user input the values {\it X} and {\it Y} and then reports how many weeks the fire extinguisher will last. @@ -3642,7 +3649,7 @@ \section*{{\color{cyan}Special Topic:} What Can Be Computed?} when to terminate the guessing. \item Your employer is developing encryption software and wants you -to develop a Java applet that will display all of the primes less than +to develop a Java Swing Program that will display all of the primes less than {\it N}, where {\it N} is a number to be entered by the user. In addition to displaying the primes themselves, provide a count of how many there are. diff --git a/texfiles/7.strings.tex b/texfiles/7.strings.tex index c26da77..862346d 100644 --- a/texfiles/7.strings.tex +++ b/texfiles/7.strings.tex @@ -5,7 +5,7 @@ \setcounter{chapter}{6} \chapter{Strings and String Processing} \label{chapter-strings} -\label{pg-chapter-strings} + \CObegin \secCOBH{Objectives} @@ -95,7 +95,7 @@ \section{Introduction} \section{String Basics} %%%\RHright{{\tt String} Basics} \label{sec-strconstr} -\label{pg-sec-strconstr} + \noindent Before we cover the new material on {\tt String}s, let's first review what we know about this topic. In Java, {\tt String}s are considered full-fledged objects. A {\tt String} object is a @@ -593,12 +593,12 @@ \section{Finding Things Within a String} %\begin{figure} %\begin{graphic} %\begin{figure}[tb] -\marginfig{chptr07/7f6.eps}{The indexing of the ``Hello World'' string.} +\marginfig{chptr07/7f6.eps}{The indexing of the ``Hello, World!'' string.} {fig-helloindex} %\end{figure} %\end{graphic} %\end{figure} -As Figure~\ref{fig-helloindex} shows, the first {\it o} in ``Hello World'' +As Figure~\ref{fig-helloindex} shows, the first {\it o} in ``Hello, World!'' occurs at index 4, the value returned by {\tt indexOf()}. The second {\it o} occurs at index 7, which is the value returned by {\tt lastIndexOf()}. @@ -1709,8 +1709,8 @@ \subsection{String Identity Versus String Equality} value. So {\tt s1, s2, s4, s5,} and {\tt s6} are equal. Strings {\tt s1} and {\tt s4} are identical, and so are strings {\tt s5} and {\tt s6}. -\label{fig-strings} -\label{pg-fig-strings}} +} {fig-strings} + \end{figure} %\end{figure} @@ -2057,7 +2057,7 @@ \subsection{The {\tt Font} and {\tt FontMetrics} Classes} \begin{jjjlisting} \begin{lstlisting} g.setFont(new Font("Random", Font.ITALIC, 12) ); -g.drawString("Hello World! (random, italic, 12)", 30, 45); +g.drawString("Hello, World!! (random, italic, 12)", 30, 45); \end{lstlisting} \end{jjjlisting} @@ -2090,7 +2090,7 @@ \subsection{Font Metrics} \noindent To illustrate how to use the {\tt FontMetrics} class, let's write a %\begin{marginalnote}\it Problem statement\end{marginalnote} \marginnote{Problem statement} -``Hello World'' application that centers its message both horizontally and +``Hello, World!'' application that centers its message both horizontally and vertically in its window. The message should be centered regardless of the size of the application window. Thus, we will have to position the text relative to the window size, which is something we @@ -2117,11 +2117,11 @@ \subsection{Font Metrics} \begin{jjjlisting} \begin{lstlisting} -g.drawString("Hello World", 10, 40); +g.drawString("Hello, World!", 10, 40); \end{lstlisting} \end{jjjlisting} -\noindent the bottom left of the {\it H} in ``Hello World'' would be +\noindent the bottom left of the {\it H} in ``Hello, World!'' would be located at (10, 40). All characters ascend some distance above the baseline. This is known @@ -2242,7 +2242,7 @@ \subsection{Example: Centering a Line of Text} \end{jjjlisting} \noindent Taken together, these calculations give the coordinates for the -lower left pixel of the first character in ``Hello World!'' The only +lower left pixel of the first character in ``Hello, World!!'' The only remaining task is to draw the string (Fig.~\ref{fig-centertext}). Because the {\tt paint()} method is called automatically whenever the {\tt JFrame} is resized, this application, whose output is shown in @@ -2259,7 +2259,7 @@ \subsection{Example: Centering a Line of Text} public class CenterText extends JFrame { // Print hello world! in center of frame public void paint(Graphics g) { - String str = "Hello World!"; + String str = "Hello, World!"; g.setFont(new Font("Random", Font.PLAIN, 24)); // Random font FontMetrics metrics = g.getFontMetrics(); // And its metrics @@ -2296,8 +2296,8 @@ \subsection{Example: Centering a Line of Text} \begin{figure}[bt] \figaleft{chptr07/centertextscreen.eps}{The {\tt CenterText} application keeps its message centered no matter how its window is resized. -\label{fig-centertextscreen} -\label{pg-fig-centertextscreen}} +} {fig-centertextscreen} + \end{figure} \secSMH{Chapter Summary} @@ -2442,7 +2442,7 @@ \subsection{Example: Centering a Line of Text} %{Exercise 7.4} \item See Figure~\ref{fig-strobjects3}. \label{ans-strobjects2} -\label{pg-ans-strobjects2} + %\begin{figure} \begin{figure}[h] @@ -2769,13 +2769,13 @@ \subsection{Example: Centering a Line of Text} \end{lstlisting} \end{jjjlisting} -\item Design and implement an applet that lets the user type a document +\item Design and implement a Java Swing program that lets the user type a document into a {\tt TextArea} and then provides the following analysis of the document: the number of words in the document, the number of characters in the document,~and the percentage of words that have more than six letters. -\item Design and write an applet that searches for single-digit numbers +\item Design and write a Java Swing program that searches for single-digit numbers in a text and changes them to their corresponding words. For example, the string ``4 score and 7 years ago'' would be converted into ``four score and seven years ago''. @@ -2783,7 +2783,7 @@ \subsection{Example: Centering a Line of Text} \item A palindrome is a string that is spelled the same way backward and forward. For example, {\it mom, dad, radar, 727} and {\it able was i ere i saw elba} are all examples of palindromes. -Write a Java applet that lets the user type in a word or phrase +Write a Java Swing program that lets the user type in a word or phrase and then determines whether the string is a palindrome. \item Write a maze program that uses a string to store a @@ -2818,7 +2818,7 @@ \subsection{Example: Centering a Line of Text} \rule{8pc}{1pt}\\ } -\item Design and implement an applet that plays Time Bomb with the user. +\item Design and implement a Java Swing program that plays Time Bomb with the user. Here's how the game works. The computer picks a secret word and then prints one asterisk for each letter in the word: * * * * *. The user guesses at the letters in the word. For every correct guess, an @@ -2838,7 +2838,7 @@ \subsection{Example: Centering a Line of Text} string is ``see,'' the result should be, ``To see or not to see, that is the question.'' -\item {\bf Challenge: } Design and implement an applet that plays +\item {\bf Challenge: } Design and implement a Java Swing Program that plays the following game with the user. Let the user pick a letter between {\it A} and {\it Z}. Then let the computer guess, the secret letter. For every guess the player has to tell the computer whether it's too @@ -2877,7 +2877,7 @@ \subsection{Example: Centering a Line of Text} \end{lstlisting} \end{jjjlistingleft} -\item Design and implement an applet or application that +\item Design and implement an application that displays a multi-line message in various fonts and sizes input by the user. Let the user choose from among a fixed selection of fonts, sizes, and styles. diff --git a/texfiles/8.oop.tex b/texfiles/8.oop.tex index b44c050..0a9f726 100644 --- a/texfiles/8.oop.tex +++ b/texfiles/8.oop.tex @@ -1023,16 +1023,16 @@ \subsection{Implementing a Java Interface} \section{Example: A Toggle Button} \label{sec-toggle} -\label{pg-sec-toggle} + \noindent The ability to extend an existing class is one of the most \marginnote{Reusing code} powerful features of object-oriented programming. It allows objects to reuse code defined in the superclasses without having to redefine or recompile the code. As we -saw in Chapter~4, a programmer-defined applet, such as {\tt -GreeterApplet}, uses the {\tt public} methods defined for {\tt -JApplet}s, {\tt JPanel}s, {\tt Container}s, {\tt Component}s, and {\tt -Object}s simply because it is a subclass of {\tt JApplet} +saw in Chapter~4, a programmer-defined JFrame, such as {\tt +GreeterGUI}, uses the {\tt public} methods defined for {\tt +JFrame}s, {\tt Frame}s, {\tt Window}s, {\tt Container}s, {\tt Component}s, and {\tt +Object}s simply because it is a subclass of {\tt JFrame} (Fig.~4.11). By the same token, it can use all of the {\tt public} and {\tt protected} instance variables and constants defined in these classes by simply referring to them in its own code. @@ -1042,7 +1042,7 @@ \section{Example: A Toggle Button} we saw in Chapter~4, a {\tt JButton} is a GUI component that can be associated with a particular action by implementing the {\tt ActionListener} interface. For example, we used a {\tt JButton} in -the {\tt GreeterApplet} to generate a greeting to the user. +the {\tt GreeterGUI} to generate a greeting to the user. In this section, we will design a more sophisticated button. We will call it a {\tt ToggleButton} and define it as a {\tt JButton} subclass that @@ -1123,7 +1123,7 @@ \section{Example: A Toggle Button} By passing {\tt l1} to the super constructor we are making the first string that the user gives us the default label for our {\tt ToggleButton}. This will be the label that appears on the button when it is first -displayed in the applet. +displayed in a {\tt Component}. Notice also in the {\tt ToggleButton()} constructor that the {\tt ToggleButton} is designated as its own {\tt ActionListener}, so @@ -1181,59 +1181,65 @@ \section{Example: A Toggle Button} \end{figure} In this design, {\tt lightSwitch} has two listeners that respond to its events: the {\tt lightSwitch} itself, as a result of the {\tt -actionPerformed()} method in its class, and the {\tt ToggleApplet}, as +actionPerformed()} method in its class, and the {\tt ToggleFrame}, as a result of {\tt actionPerformed()} method in this class. -The implementation of this design is given by {\tt ToggleApplet}, an -applet that uses a {\tt ToggleButton} (Fig.~\ref{fig-toggletest}). -Like the applet we designed in Chapter~4, this applet extends the {\tt -JApplet} class and implements the {\tt ActionListener} interface. In +The implementation of this design is given by {\tt ToggleFrame}, a +program that uses a {\tt ToggleButton} (Fig.~\ref{fig-toggletest}). +Like the GUI we designed in Chapter~4, this program extends the {\tt +JFrame} class and implements the {\tt ActionListener} interface. In this example we use a {\tt ToggleButton} to simulate a light switch. -Note that we assign the applet itself as an {\tt ActionListener} for +Note that we assign the program itself as an {\tt ActionListener} for the {\tt lightSwitch}, so that \begin{figure}[tb] \jjjprogstart \begin{jjjlisting} \begin{lstlisting} -import java.applet.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; -public class ToggleApplet extends JApplet +public class ToggleFrame extends JFrame implements ActionListener { private ToggleButton lightSwitch; - public void init() { + public ToggleFrame() { lightSwitch = new ToggleButton ("off","on"); getContentPane().add(lightSwitch); lightSwitch.addActionListener(this); } // init() public void actionPerformed(ActionEvent e) { - showStatus("The light is " + lightSwitch.getText()); + setTitle("The light is " + lightSwitch.getText()); } // actionPerformed() -} // ToggleApplet + + public static void main(String args[]) + { + JFrame f = new ToggleFrame(); + f.setSize(200,200); + f.setVisible(true); + } +} // ToggleFrame \end{lstlisting} \end{jjjlisting} -\jjjprogstop{Definition of the {\tt ToggleApplet} class.} +\jjjprogstop{Definition of the {\tt ToggleFrame} class.} {fig-toggletest} \end{figure} -When {\tt lightSwitch} is clicked, the applet displays the message, -``The light is on,'' or ``The light is off,'' in the applet's status +When {\tt lightSwitch} is clicked, the program displays the message, +``The light is on,'' or ``The light is off,'' in the program's title bar (Fig.~8.12). This is a somewhat trivial action but it illustrates that a {\tt ToggleButton} both toggles its own label {\it and} carries out some associated action. %\begin{figure} \begin{figure}[h!] -\figaleft{chptr04/4f23.eps}{When clicked, {\tt ToggleApplet} +\figaleft{chptr04/4f23.eps}{When clicked, {\tt ToggleFrame} button causes ``The light is on'' or ``The light is off'' to appear in -the applet's status bar. -\label{fig-toggledump} -\label{pg-fig-toggledump}} +the window's title bar. +} {fig-toggledump} + \end{figure} %\end{figure} @@ -1260,11 +1266,11 @@ \section{Example: A Toggle Button} \item Write a code segment (not a whole method) to swap two boolean variables, {\tt b1} and {\tt b2}. -\item Suppose you are designing an applet that plays a +\item Suppose you are designing an GUI that plays a card game, and you want a single button that can be used both to deal the cards and to collect the cards. Write a code segment that creates this type of button, -adds it to the applet, and designates the applet as its +adds it to the JFrame, and designates the JFrame as its {\tt ActionListener}. \end{SSTUDY} @@ -1841,8 +1847,8 @@ \subsection{Designing the {\tt TwoPlayerGame} Class} \begin{figure}[h!] \figaleft{chptr08/twoplayergame.eps}{{\tt TwoPlayerGame} is the superclass for {\tt OneRowNim} and other two player games. -\label{fig-twoplayergame} -\label{pg-fig-twoplayergame}} +} {fig-twoplayergame} + \end{figure} To begin with, notice that we have introduced two Java interfaces into @@ -2489,7 +2495,7 @@ \subsection{The {\tt IPlayer} Interface} there are fewer than 3 sticks. (We will leave the task of defining {\tt NimPlayer}, a good player, as an exercise.) \marginfig{chptr08/nimplayer.eps}{Design of the {\tt NimPlayerBad} class.} -{fig-nimplayer} +{fig-nimplayerbad} As an implementer of the {\tt IPlayer} interface, {\tt NimPlayerBad} will implement the {\tt makeAMove()} method. This method will contain @@ -2775,8 +2781,8 @@ \subsection{Extending the {\tt TwoPlayerGame} Hierarchy} \begin{figure}[h] \figaright{chptr08/wordguess.eps}{Design of the {\tt WordGuess} class as part of {\tt TwoPlayerGame} hierarchy. -\label{fig-wordguessuml} -\label{pg-fig-wordguessuml}} +} {fig-wordguessuml} + \end{figure} Let's call the game class {\tt WordGuess}. Following the design of @@ -2860,7 +2866,7 @@ \subsection{Extending the {\tt TwoPlayerGame} Hierarchy} \end{lstlisting} \end{jjjlisting} \jjjprogstop{The {\tt WordGuess} class, Part I.} -{fig-wordguess} +{fig-wordguess-oop} \end{figure} @@ -2931,12 +2937,12 @@ \subsection{Extending the {\tt TwoPlayerGame} Hierarchy} \end{lstlisting} \end{jjjlisting} \jjjprogstop{The {\tt WordGuess} class, continued.} -{fig-wordguess2} +{fig-wordguess2-oop} \end{figure} Let's turn now to the details of the {\tt WordGuess} class, whose -source code is shown in Figures~\ref{fig-wordguess} and -\ref{fig-wordguess2}. The game needs to have a supply of words from +source code is shown in Figures~\ref{fig-wordguess-oop} and +\ref{fig-wordguess2-oop}. The game needs to have a supply of words from which it can choose a secret word to present to the players. The {\tt getSecretWord()} method will take care of this task. It calculates a random number and then uses that number, together with a {\tt switch} @@ -2991,7 +2997,7 @@ \subsection{Extending the {\tt TwoPlayerGame} Hierarchy} greatly simplifies the development process. Let's now discuss the details of {\tt WordGuesser} class -(Fig.~\ref{fig-wordguesser}). Note that the constructor takes a {\tt +(Fig.~\ref{fig-wordguesser-oop}). Note that the constructor takes a {\tt WordGuess} parameter. This allows {\tt WordGuesser} to be passed a reference to the game, which accesses the game's {\tt public} methods, such as {\tt getPreviousGuesses()}. The {\tt toString()} @@ -3029,7 +3035,7 @@ \subsection{Extending the {\tt TwoPlayerGame} Hierarchy} \end{lstlisting} \end{jjjlisting} \jjjprogstop{The {\tt WordGuesser} class.} -{fig-wordguesser} +{fig-wordguesser-oop} \end{figure} \section{Principles Of Object-Oriented Design} @@ -3373,7 +3379,7 @@ \section{Principles Of Object-Oriented Design} \item Instance variables and instance methods that are declared \rule{40pt}{0.5pt} or \rule{40pt}{0.5pt} are inherited by the subclasses. \item An object can refer to itself by using the \rule{40pt}{0.5pt} keyword. -\item If an applet intends to handle {\tt ActionEvent}s, it must +\item If a GUI class intends to handle {\tt ActionEvent}s, it must implement the \rule{40pt}{0.5pt} interface. \item A \rule{40pt}{0.5pt} method is one that does different things depending upon the object that invokes it. @@ -3442,7 +3448,7 @@ \section{Principles Of Object-Oriented Design} \noindent Write a method that converts its {\tt String} parameter so that letters are written in blocks five characters long. -\item Design and implement an applet that lets the user type a document +\item Design and implement an GUI that lets the user type a document into a {\tt TextArea} and then provides the following analysis of the document: the number of words in the document, the number of characters in the document,~and the percentage of words that have more diff --git a/texfiles/9.arrays.tex b/texfiles/9.arrays.tex index bd24f0c..a6ef757 100644 --- a/texfiles/9.arrays.tex +++ b/texfiles/9.arrays.tex @@ -5,7 +5,7 @@ \setcounter{chapter}{8} \chapter{Arrays and Array Processing} \label{chapter-arrays} -\label{pg-chapter-arrays} + \CObegin \secCOBH{Objectives} @@ -1443,7 +1443,7 @@ \subsection{Passing a Value and Passing a Reference} \begin{figure}[tbh] \figaleft{chptr09/8f11.eps}{When an array is passed to a method, both the parameter and the corresponding argument refer to the same object. -\label{fig-arrayparam}\label{pg-fig-arrayparam}} +} {fig-arrayparam} \end{figure} The justification for passing a reference to an object rather than the @@ -2295,7 +2295,7 @@ \section{Multidimensional Arrays (Optional)} \begin{figure}[htb] \figaright{chptr09/8f17.eps}{Three-dimensional data might be viewed as a collection of pages, each of which contains a two-dimensional table. -\label{fig-threedarray}\label{pg-fig-threedarray}} +} {fig-threedarray} \end{figure} You might imagine that our study could be extended to @@ -2703,8 +2703,8 @@ \subsection{The {\tt ComputerGame} Hierarchy} \begin{figure}[bt] \figaright{chptr09/nplayerwordguess.eps}{Overview of the {\tt ComputerGame} class hierarchy. -\label{fig-game} -\label{pg-fig-game}} +} {fig-game} + \end{figure} Figure~\ref{fig-game} provides a summary overview of the {\tt diff --git a/texfiles/TAGS b/texfiles/TAGS index 3d7529f..38fa77d 100644 --- a/texfiles/TAGS +++ b/texfiles/TAGS @@ -1,82 +1,70 @@ -0.intro.tex,4278 +0.intro.tex,3745 \chapter{Computers, \mbox{Objects}, and Java}Computers,6,115 \label{chapter-intro}chapter-intro7,161 \section{Welcome}Welcome40,1097 \vspace{-12pt}\section{What Is a Computer?}What53,1828 components (Fig.~\ref{fig-blockdiagram}fig-blockdiagram71,2797 -\label{fig-blockdiagram}fig-blockdiagram81,3096 -\label{pg-fig-blockdiagram}pg-fig-blockdiagram82,3121 -\vspace{5pt}\item {\it Primary memory\index{computer memory}}computer97,3599 -\vspace{5pt}\item {\it Secondary storage\index{computer computer107,4210 -\vspace{5pt}\item The {\it central processing unit\index{central central116,4699 -(CPU\index{CPU}CPU118,4783 -cycle}\index{fetch-execute cycle}, whereby it repeatedly gets thefetch-execute124,5141 -\vspace{7pt}\noindent There are two main types of software:\index{software}software136,5683 -\section*{*166,7112 -\section{Networks, the Internet and the World Wide Web}Networks,198,8886 -connected to various-sized {\it networks\index{networks}networks200,9017 -computing\index{client-server}client-server213,9731 -\splarge The {\it Internet\index{Internet}Internet231,10795 -globe. The {\it World Wide Web\index{World Wide Web}World233,10932 -(WWW\index{WWW}WWW234,10986 -Protocol (HTTP\index{HTTP}HTTP237,11186 -HTML}\index{HTML}HTML249,11922 -following {\it URL (Uniform Resource Locator)}\index{Uniform ResourceUniform273,12868 -Locator}\index{URL}URL274,12938 -(Fig.~\ref{fig-http}fig-http290,13523 -\label{fig-http}fig-http303,14045 -\label{pg-fig-http}pg-fig-http304,14062 -\section{Why Study Programming?}Why324,15028 -\section{Programming Languages}Programming359,16938 -language\index{high-level language}}, such as Java, C, C++, orhigh-level361,17042 -language\index{machine language}}, which is the languagemachine393,18643 -{\it platform dependent\index{platform independence}}.platform400,19076 -source code\index{source code}} program into machine language code orsource479,22568 -{\bf object code\index{object code}}, which is the only code that canobject480,22638 -translator\index{translator}translator483,22835 -\label{fig-translator}fig-translator494,23262 -\label{pg-fig-translator}pg-fig-translator495,23285 -interpreter\index{interpreter}interpreter500,23397 -on to the next line of source code. A {\bf compiler\index{compiler}compiler502,23535 -\section{Why Java?}Why525,24806 -\section{What Is \mbox{Object-Oriented} Programming?}What628,29873 -\subsection{Basic \mbox{Object-Oriented} Programming Metaphor: Basic638,30395 -layout your new kitchen (Fig.~\ref{fig-kitchen}fig-kitchen646,30745 -\subsection{What is an Object?}What669,32080 -Figure~\ref{fig-umlobj1}fig-umlobj1680,32640 -\label{fig-umlobj1}fig-umlobj1694,33452 -\label{pg-fig-umlobj1}pg-fig-umlobj1695,33472 -\subsection{Attributes and Values}Attributes698,33510 -Figure~\ref{fig-umlobj2}fig-umlobj2709,34047 -\label{fig-umlobj2}fig-umlobj2719,34534 -\label{pg-fig-umlobj2}pg-fig-umlobj2720,34554 -\subsection{Actions and Messages}Actions729,34907 -\label{fig-umlmsg1}fig-umlmsg1746,35810 -\label{pg-fig-umlmsg1}pg-fig-umlmsg1747,35830 -another. Figure~\ref{fig-umlmsg1}fig-umlmsg1753,36075 -The diagram in Figure~\ref{fig-umlmsg2}fig-umlmsg2764,36717 -\subsection{What is a Class?}What797,38439 -\label{fig-umlrect}fig-umlrect826,39908 -\label{pg-fig-umlrect}pg-fig-umlrect827,39928 -Figure~\ref{fig-umlrect}fig-umlrect830,39966 -\subsection{Variables and Methods}Variables845,40865 -of a certain type. For example, as Figure~\ref{fig-umlrect}fig-umlrect857,41514 -\subsection{Instance versus Class Variables and Methods}Instance871,42319 -\label{fig-rects}fig-rects908,44250 -\label{pg-fig-rects}pg-fig-rects909,44268 -Figure~\ref{fig-rects}fig-rects912,44304 -{\tt Rectangle} instance is created. Figure~\ref{fig-rectconstr}fig-rectconstr925,45098 -\label{fig-rectconstr}fig-rectconstr936,45664 -\label{pg-fig-rectconstr}pg-fig-rectconstr937,45687 -\subsection{Class Hierarchy and Inheritance}Class940,45728 -Figure~\ref{fig-classhier}fig-classhier951,46303 -King}s. Figure~\ref{fig-chesshier}fig-chesshier998,48756 -\label{fig-chesshier}fig-chesshier1010,49331 -\label{pg-fig-chesshier}pg-fig-chesshier1011,49353 -\subsection{Principles of \mbox{Object-Oriented} Design}Principles1048,51355 +\vspace{5pt}\item {\it Primary memory\index{computer memory}}computer96,3567 +\vspace{5pt}\item {\it Secondary storage\index{computer computer106,4178 +\vspace{5pt}\item The {\it central processing unit\index{central central115,4667 +(CPU\index{CPU}CPU117,4751 +cycle}\index{fetch-execute cycle}, whereby it repeatedly gets thefetch-execute123,5109 +\vspace{7pt}\noindent There are two main types of software:\index{software}software135,5651 +\section*{*165,7080 +\section{Networks, the Internet and the World Wide Web}Networks,197,8854 +connected to various-sized {\it networks\index{networks}networks199,8985 +computing\index{client-server}client-server212,9699 +\splarge The {\it Internet\index{Internet}Internet230,10763 +globe. The {\it World Wide Web\index{World Wide Web}World232,10900 +(WWW\index{WWW}WWW233,10954 +Protocol (HTTP\index{HTTP}HTTP236,11154 +HTML}\index{HTML}HTML248,11890 +following {\it URL (Uniform Resource Locator)}\index{Uniform ResourceUniform272,12836 +Locator}\index{URL}URL273,12906 +(Fig.~\ref{fig-http}fig-http289,13491 +\section{Why Study Programming?}Why322,14972 +\section{Programming Languages}Programming357,16882 +language\index{high-level language}}, such as Java, C, C++, orhigh-level359,16986 +language\index{machine language}}, which is the languagemachine391,18587 +{\it platform dependent\index{platform independence}}.platform398,19020 +source code\index{source code}} program into machine language code orsource477,22512 +{\bf object code\index{object code}}, which is the only code that canobject478,22582 +translator\index{translator}translator481,22779 +\label{pg-fig-translator}pg-fig-translator493,23225 +interpreter\index{interpreter}interpreter498,23337 +on to the next line of source code. A {\bf compiler\index{compiler}compiler500,23475 +\section{Why Java?}Why523,24746 +\section{What Is \mbox{Object-Oriented} Programming?}What626,29813 +\subsection{Basic \mbox{Object-Oriented} Programming Metaphor: Basic636,30335 +layout your new kitchen (Fig.~\ref{fig-kitchen}fig-kitchen644,30685 +\subsection{What is an Object?}What667,32020 +Figure~\ref{fig-umlobj1}fig-umlobj1678,32580 +\label{pg-fig-umlobj1}pg-fig-umlobj1693,33408 +\subsection{Attributes and Values}Attributes696,33446 +Figure~\ref{fig-umlobj2}fig-umlobj2707,33983 +\label{pg-fig-umlobj2}pg-fig-umlobj2718,34486 +\subsection{Actions and Messages}Actions727,34839 +\label{pg-fig-umlmsg1}pg-fig-umlmsg1745,35758 +another. Figure~\ref{fig-umlmsg1}fig-umlmsg1751,36003 +The diagram in Figure~\ref{fig-umlmsg2}fig-umlmsg2762,36645 +\subsection{What is a Class?}What795,38367 +\label{pg-fig-umlrect}pg-fig-umlrect825,39852 +Figure~\ref{fig-umlrect}fig-umlrect828,39890 +\subsection{Variables and Methods}Variables843,40789 +of a certain type. For example, as Figure~\ref{fig-umlrect}fig-umlrect855,41438 +\subsection{Instance versus Class Variables and Methods}Instance869,42243 +\label{pg-fig-rects}pg-fig-rects907,44188 +Figure~\ref{fig-rects}fig-rects910,44224 +{\tt Rectangle} instance is created. Figure~\ref{fig-rectconstr}fig-rectconstr923,45018 +\label{pg-fig-rectconstr}pg-fig-rectconstr935,45603 +\subsection{Class Hierarchy and Inheritance}Class938,45644 +Figure~\ref{fig-classhier}fig-classhier949,46219 +King}s. Figure~\ref{fig-chesshier}fig-chesshier996,48672 +\label{pg-fig-chesshier}pg-fig-chesshier1009,49265 +\subsection{Principles of \mbox{Object-Oriented} Design}Principles1046,51267 -1.programs.tex,4921 +1.programs.tex,4878 \chapter{Java Program Design and Development}Java11,365 \label{ch:intro2}ch:intro212,411 \section{Introduction}Introduction50,1589 @@ -145,22 +133,21 @@ abbreviated names (Fig.~\ref{fig:hellojframe}fig:hellojframe1629,70298 \subsection{Java Development Environments}Java1738,75253 see Appendix~\ref{appendix-jdk}appendix-jdk1749,75905 Figure~\ref{fig:compile}fig:compile1759,76393 -\label{fig:compile}fig:compile1765,76700 -\subsection{Editing a Program}Editing1777,77094 -\subsection{Compiling a Program}Compiling1813,78879 -\noindent As Figure~\ref{fig:compile}fig:compile1842,80101 -\subsection{Running a Java Application Program}Running1851,80601 -displayed on some kind of standard output device (Fig.~\ref{fig:stdout}fig:stdout1879,81894 -\subsection{Running a Java Swing Program}Running1885,82100 -\label{subsec:swing}subsec:swing1886,82142 -result of running, as shown in Figure~\ref{fig:hello}fig:hello1904,82733 -\section{From the Java Library: System and \\PrintStream}From1908,82883 -\label{sec:systemclass}sec:systemclass1909,82941 -java.io} package\index{java.io package}. We have already seen how thejava.io1946,84753 -shown in Figure~\ref{fig:printstreamUML}fig:printstreamUML1964,85500 -Figure~\ref{fig:oldmac}fig:oldmac2036,87838 +\subsection{Editing a Program}Editing1777,77090 +\subsection{Compiling a Program}Compiling1813,78875 +\noindent As Figure~\ref{fig:compile}fig:compile1842,80097 +\subsection{Running a Java Application Program}Running1851,80597 +displayed on some kind of standard output device (Fig.~\ref{fig:stdout}fig:stdout1879,81890 +\subsection{Running a Java Swing Program}Running1885,82096 +\label{subsec:swing}subsec:swing1886,82138 +result of running, as shown in Figure~\ref{fig:hello}fig:hello1904,82729 +\section{From the Java Library: System and \\PrintStream}From1908,82879 +\label{sec:systemclass}sec:systemclass1909,82937 +java.io} package\index{java.io package}. We have already seen how thejava.io1946,84749 +shown in Figure~\ref{fig:printstreamUML}fig:printstreamUML1964,85496 +Figure~\ref{fig:oldmac}fig:oldmac2036,87834 -10.exceptions.tex,5598 +10.exceptions.tex,5501 \chapter{Exceptions: When Things Go Wrong}Exceptions:6,120 \label{chapter-exceptions}chapter-exceptions7,163 \label{pg-chapter-exceptions}pg-chapter-exceptions8,190 @@ -176,162 +163,159 @@ might be 0. Figure~\ref{fig-traditional}fig-traditional114,4336 see this, consider the program in Figure~\ref{fig-calcavg}fig-calcavg172,6508 \section{Java's Exception Hierarchy}Java's224,8204 \label{sec-excepthier}sec-excepthier225,8241 -\label{fig-excepthier}fig-excepthier231,8520 -\label{pg-fig-excepthier}pg-fig-excepthier232,8543 -some of which are shown in Figure~\ref{fig-excepthier}fig-excepthier236,8661 -Each of the classes in Figure~\ref{fig-excepthier}fig-excepthier246,9179 -\subsection{Checked and Unchecked Exceptions}Checked318,12665 -{\bf checked exception}\index{checked exception} is one that can be analyzed by the Javachecked321,12793 -\subsubsection*{*335,13555 -\subsubsection*{*390,15840 -\noindent An {\bf unchecked exception}\index{unchecked exception} is any unchecked391,15878 -of {\tt RuntimeException} (Fig.~\ref{fig-excepthier}fig-excepthier393,15986 -action, as we will see Section~\ref{sec-robust}sec-robust408,16897 -\subsection{The {\tt Exception} Class}The415,17124 -\section{Handling Exceptions Within a Program}Handling444,18020 -\subsection{Trying, Throwing, and Catching an Exception}Trying,449,18201 -throw an exception}\index{throw an exception} as a way of signalingthrow453,18477 -Figure~\ref{fig-calcavg2}fig-calcavg2477,19756 -(Fig.~\ref{fig-excepthier}fig-excepthier540,21872 -catch block located in some other object (Fig.~\ref{fig-exccatch}fig-exccatch625,25570 -\subsection{Separating Error Checking from Error Handling}Separating636,25921 -\subsection{Syntax and Semantics of Try/Throw/Catch}Syntax672,27870 -\noindent A {\bf try block}\index{try block} begins with the keyword {\tt try} followed by a blocktry673,27923 -catch block}\index{catch block} consists of the keyword {\tt catch}, followed by acatch676,28117 -summarized in Figure~\ref{fig-trystmt}fig-trystmt692,28794 -exception hierarchy (see Fig.~\ref{fig-excepthier}fig-excepthier776,32034 -Figure~\ref{fig-excepthier}fig-excepthier789,32790 -\subsection{Restrictions on the {\tt try/catch/finally} \\Statement}Restrictions825,34165 -\subsection{Dynamic Versus Static Scoping}Dynamic854,35404 -(Fig.~\ref{fig-calcavg2}fig-calcavg2858,35657 -the {\bf dynamic scope}\index{dynamic scope} of an enclosing try block. Let's see whatdynamic863,35908 -in {\tt CalcAverage} (Fig.~\ref{fig-calcavg2}fig-calcavg2868,36107 -Contrast dynamic with what you have learned about {\bf static scope}\index{static scope}, whichstatic873,36318 -variables (Fig. \ref{fig-dynamic}fig-dynamic876,36506 -(Fig.~\ref{fig-myclass}fig-myclass880,36763 -\subsection{Exception Propagation: Searching for a Catch Block}Exception954,39358 -A {\bf method call stack}\index{method call stack} is amethod960,39776 -the stack (Fig.~\ref{fig-methodstack}fig-methodstack965,40106 -exception handler for that exception. In Figure~\ref{fig-methodstack}fig-methodstack972,40421 -\label{fig-methodstack}fig-methodstack980,40785 -\label{pg-fig-methodstack}pg-fig-methodstack981,40809 -perform a {\bf method stack trace}\index{method stack trace}. The basic idea is that Javamethod986,40979 -(Fig.~\ref{fig-methodstack}fig-methodstack999,41693 -(Fig.~\ref{fig-calcavg2}fig-calcavg21002,41884 -Using the exception hierarchy in Figure~\ref{fig-excepthier}fig-excepthier1012,42293 -\section{Error Handling and Robust \\Program Design}Error1129,45883 -\label{sec-robust}sec-robust1130,45936 -\subsection{Print a Message and Terminate}Print1179,48417 -\subsection{Log the Error and Resume}Log1217,50310 -\subsection{Fix the Error and Resume}Fix1260,52481 -Figure~\ref{fig-intfieldprog}fig-intfieldprog1285,53850 -Figure~\ref{fig-numformat}fig-numformat1357,56436 -in Figure~\ref{fig-errmsg}fig-errmsg1373,57114 -\subsection{To Fix or Not to Fix}To1427,59546 -\section{Creating and Throwing Your Own \\ Exceptions}Creating1693,69740 -\label{sec-throws}sec-throws1694,69795 -{\tt getInt()} method (Fig.~\ref{fig-intfield2}fig-intfield21779,73079 -The {\tt IntFieldTester} class (Fig.~\ref{fig-intbound}fig-intbound1826,74356 -design and functionality shown in Figure~\ref{fig-numformat}fig-numformat1827,74421 -\section{From the Java Library: {\tt JOptionPane}}From1913,77226 -\label{sec-dialogs}sec-dialogs1914,77277 -\tBOXseven{A} {\bf dialog box}\index{dialog box} is a window that can be opened by a program todialog1916,77320 -A {\it warning dialog} or {\bf error dialog}\index{error dialog} is opened whenever aerror1928,77832 -Figure~\ref{fig-intbound}fig-intbound1940,78472 -Figure~\ref{fig-errmsg}fig-errmsg1952,78759 -{\bf modal dialog}\index{modal dialog}. This means that once it's been displayed, youmodal1971,79615 -the purpose of the message (Fig.~\ref{fig-errmsg2}fig-errmsg21979,80013 -\noindent This would produce the dialog shown in Figure~\ref{fig-errmsg2}fig-errmsg22027,81381 -(Fig.~\ref{fig-intbound}fig-intbound2511,97463 -(Fig.~\ref{fig-intfield2}fig-intfield22512,97529 +\label{pg-fig-excepthier}pg-fig-excepthier232,8539 +some of which are shown in Figure~\ref{fig-excepthier}fig-excepthier236,8657 +Each of the classes in Figure~\ref{fig-excepthier}fig-excepthier246,9175 +\subsection{Checked and Unchecked Exceptions}Checked318,12661 +{\bf checked exception}\index{checked exception} is one that can be analyzed by the Javachecked321,12789 +\subsubsection*{*335,13551 +\subsubsection*{*390,15836 +\noindent An {\bf unchecked exception}\index{unchecked exception} is any unchecked391,15874 +of {\tt RuntimeException} (Fig.~\ref{fig-excepthier}fig-excepthier393,15982 +action, as we will see Section~\ref{sec-robust}sec-robust408,16893 +\subsection{The {\tt Exception} Class}The415,17120 +\section{Handling Exceptions Within a Program}Handling444,18016 +\subsection{Trying, Throwing, and Catching an Exception}Trying,449,18197 +throw an exception}\index{throw an exception} as a way of signalingthrow453,18473 +Figure~\ref{fig-calcavg2}fig-calcavg2477,19752 +(Fig.~\ref{fig-excepthier}fig-excepthier540,21868 +catch block located in some other object (Fig.~\ref{fig-exccatch}fig-exccatch625,25566 +\subsection{Separating Error Checking from Error Handling}Separating636,25917 +\subsection{Syntax and Semantics of Try/Throw/Catch}Syntax672,27866 +\noindent A {\bf try block}\index{try block} begins with the keyword {\tt try} followed by a blocktry673,27919 +catch block}\index{catch block} consists of the keyword {\tt catch}, followed by acatch676,28113 +summarized in Figure~\ref{fig-trystmt}fig-trystmt692,28790 +exception hierarchy (see Fig.~\ref{fig-excepthier}fig-excepthier776,32030 +Figure~\ref{fig-excepthier}fig-excepthier789,32786 +\subsection{Restrictions on the {\tt try/catch/finally} \\Statement}Restrictions825,34161 +\subsection{Dynamic Versus Static Scoping}Dynamic854,35400 +(Fig.~\ref{fig-calcavg2}fig-calcavg2858,35653 +the {\bf dynamic scope}\index{dynamic scope} of an enclosing try block. Let's see whatdynamic863,35904 +in {\tt CalcAverage} (Fig.~\ref{fig-calcavg2}fig-calcavg2868,36103 +Contrast dynamic with what you have learned about {\bf static scope}\index{static scope}, whichstatic873,36314 +variables (Fig. \ref{fig-dynamic}fig-dynamic876,36502 +(Fig.~\ref{fig-myclass}fig-myclass880,36759 +\subsection{Exception Propagation: Searching for a Catch Block}Exception954,39354 +A {\bf method call stack}\index{method call stack} is amethod960,39772 +the stack (Fig.~\ref{fig-methodstack}fig-methodstack965,40102 +exception handler for that exception. In Figure~\ref{fig-methodstack}fig-methodstack972,40417 +\label{pg-fig-methodstack}pg-fig-methodstack981,40801 +perform a {\bf method stack trace}\index{method stack trace}. The basic idea is that Javamethod986,40971 +(Fig.~\ref{fig-methodstack}fig-methodstack999,41685 +(Fig.~\ref{fig-calcavg2}fig-calcavg21002,41876 +Using the exception hierarchy in Figure~\ref{fig-excepthier}fig-excepthier1012,42285 +\section{Error Handling and Robust \\Program Design}Error1129,45875 +\label{sec-robust}sec-robust1130,45928 +\subsection{Print a Message and Terminate}Print1179,48409 +\subsection{Log the Error and Resume}Log1217,50302 +\subsection{Fix the Error and Resume}Fix1260,52473 +Figure~\ref{fig-intfieldprog}fig-intfieldprog1285,53842 +Figure~\ref{fig-numformat}fig-numformat1357,56428 +in Figure~\ref{fig-errmsg}fig-errmsg1373,57106 +\subsection{To Fix or Not to Fix}To1427,59538 +\section{Creating and Throwing Your Own \\ Exceptions}Creating1693,69732 +\label{sec-throws}sec-throws1694,69787 +{\tt getInt()} method (Fig.~\ref{fig-intfield2}fig-intfield21779,73071 +The {\tt IntFieldTester} class (Fig.~\ref{fig-intbound}fig-intbound1826,74348 +design and functionality shown in Figure~\ref{fig-numformat}fig-numformat1827,74413 +\section{From the Java Library: {\tt JOptionPane}}From1913,77218 +\label{sec-dialogs}sec-dialogs1914,77269 +\tBOXseven{A} {\bf dialog box}\index{dialog box} is a window that can be opened by a program todialog1916,77312 +A {\it warning dialog} or {\bf error dialog}\index{error dialog} is opened whenever aerror1928,77824 +Figure~\ref{fig-intbound}fig-intbound1940,78464 +Figure~\ref{fig-errmsg}fig-errmsg1952,78751 +{\bf modal dialog}\index{modal dialog}. This means that once it's been displayed, youmodal1971,79607 +the purpose of the message (Fig.~\ref{fig-errmsg2}fig-errmsg21979,80005 +\noindent This would produce the dialog shown in Figure~\ref{fig-errmsg2}fig-errmsg22027,81373 +(Fig.~\ref{fig-intbound}fig-intbound2511,97455 +(Fig.~\ref{fig-intfield2}fig-intfield22512,97521 -11.files.tex,5176 +11.files.tex,5393 \chapter{Files and Streams: Input/Output Techniques}Files5,130 \label{chapter-files}chapter-files6,183 \label{pg-chapter-files}pg-chapter-files7,205 \section{Introduction}Introduction43,1260 -\label{fig-systemout}fig-systemout78,3096 -\label{pg-fig-systemout}pg-fig-systemout79,3118 -\section{Streams and Files}Streams83,3172 -(Fig.~\ref{fig-systemout}fig-systemout89,3529 -\subsection{The Data Hierarchy}The95,3865 -{\bf record}\index{record}record111,4755 -{\bf fields}\index{fields}fields112,4836 -files, which is called a {\bf database}\index{database}database121,5449 -hierarchy}\index{data hierarchy} (Fig.~11\mbox{.}2).data127,5707 -\subsection{Binary Files and Text Files}Binary137,6169 -\subsection{Input and Output Streams}Input191,8957 -hierarchy illustrated in Figure~\ref{fig-streamhier}fig-streamhier195,9199 -\label{fig-streamhier}fig-streamhier204,9656 -{\bf Filtering}\index{Filtering}Filtering252,12028 -One type of filtering is {\bf buffering}\index{buffering}buffering307,15417 -\section{CASE STUDY: Reading and Writing Text Files}CASE368,18649 -(Fig.~\ref{fig-guitextio}fig-guitextio380,19311 -\label{fig-guitextio}fig-guitextio386,19568 -\subsection{Text File Format}Text391,19644 -more lines and ending with a special {\bf end-of-file character}\index{end-of-file character}.end-of-file393,19754 -\subsection{Writing to a Text File}Writing422,20978 -\noindent As Figure~\ref{fig-systemout}fig-systemout437,21413 -\subsubsection*{*457,22469 -Figure~\ref{fig-streamhier}fig-streamhier467,23014 -(Fig.~\ref{fig-filewriter}fig-filewriter489,23913 -it is ideally suited for our task (Fig.~\ref{fig-filewriter}fig-filewriter504,24725 -\label{fig-filewriter}fig-filewriter512,25001 -{\tt IOException} (Fig.~\ref{fig-writetextmethod}fig-writetextmethod559,27084 -\subsection{Code Reuse: Designing Text File Output}Code583,27709 -(Fig.~\ref{fig-streamhier}fig-streamhier609,28912 -Figure~\ref{fig-streamhier}fig-streamhier620,29556 -(Fig.~\ref{fig-fileoutput}fig-fileoutput622,29676 -\label{fig-fileoutput}fig-fileoutput629,29999 -\subsection{Reading from a Text File}Reading689,32189 -\noindent As Figure~\ref{fig-readfromstream}fig-readfromstream705,32645 -need to use the information in Figure~\ref{fig-streamhier}fig-streamhier734,34043 -\label{fig-filereader}fig-filereader750,34789 -The {\tt FileReader} class (Fig.~\ref{fig-filereader}fig-filereader753,34865 -\noindent As shown in Figure~\ref{fig-filereader}fig-filereader765,35321 -BufferedReader} (Fig.~\ref{fig-filereader}fig-filereader773,35724 -the definition for {\tt readTextFile()} shown in Figure~\ref{fig-readtextmethod}fig-readtextmethod844,38627 -\subsection{Code Reuse: Designing Text File Input}Code924,41358 -\subsection{The {\tt TextIO} Application}The1019,44983 -(Fig.~\ref{fig-textiouml}fig-textiouml1022,45161 -\label{fig-textiouml}fig-textiouml1027,45382 -\label{fig-textioapp}fig-textioapp1038,45826 -\section{The {\tt File} Class}The1140,49100 -know, a file is a collection of data, whereas a {\bf directory}\index{directory}directory1154,49832 -\subsection{Names and Paths}Names1160,50168 -A {\bf path}\index{path}path1164,50393 -name}\index{absolute path name}. This would be a name whose pathabsolute1181,51376 -\subsection{Validating File Names}Validating1200,52006 -\section{Example: Reading and Writing Binary Files}Example:1314,56772 -\subsection{Writing Binary Data}Writing1356,58560 -the {\tt java.io} package (Fig.~\ref{fig-streamhier}fig-streamhier1402,60424 -\label{fig-fostream}fig-fostream1407,60599 -candidate is {\tt FileOutputStream} (Fig.~\ref{fig-fostream}fig-fostream1414,60870 -\subsubsection*{*1482,63946 -{\tt String}s are written using the {\tt writeUTF()} method. {\bf UTF}\index{UTF}UTF1484,64070 -(Fig.~\ref{fig-writerecordsmethod}fig-writerecordsmethod1501,65097 -\subsection{Reading Binary Data}Reading1535,66464 -{\tt InputStream} subclass (Fig.~\ref{fig-streamhier}fig-streamhier1553,67342 -\label{fig-distream}fig-distream1586,68925 -in Figure~\ref{fig-readrecordsmethod}fig-readrecordsmethod1633,70885 -\subsection{The {\tt BinaryIO} Application}The1714,73708 -\label{fig-binaryioscreen}fig-binaryioscreen1735,74626 -\subsection{Abstracting Data from Files}Abstracting1848,78600 -\section{Object Serialization: Reading and Writing Objects}Object1917,81247 -{\bf object serialization}\index{object serialization}. Objects can be object1924,81618 -{\tt Student} class (Fig.~\ref{fig-student}fig-student1941,82322 -\subsection{The {\tt ObjectIO} Class}The2053,87015 -Figure~\ref{fig-objectioclass}fig-objectioclass2061,87430 -The {\tt readRecords()} method (Fig.~\ref{fig-objectioclass}fig-objectioclass2181,92016 -\section{From the Java Library \\ {\tt javax.swing.JFileChooser}}From2211,93027 -saving a file. Figure~\ref{fig-opendialog}fig-opendialog2222,93562 -file (Fig.~\ref{fig-opendialog}fig-opendialog2273,95883 -\label{fig-opendialog}fig-opendialog2278,96022 -\section{Using File Data in Programs} Using2294,96762 -{\tt try-catch} statement we get the code fragment in Figure~\ref{fig-wordguessfile}fig-wordguessfile2377,99834 -\section*{*2429,101645 +\label{pg-fig-systemout}pg-fig-systemout79,3114 +\section{Streams and Files}Streams83,3168 +(Fig.~\ref{fig-systemout}fig-systemout89,3525 +\subsection{The Data Hierarchy}The95,3861 +{\bf record}\index{record}record111,4751 +{\bf fields}\index{fields}fields112,4832 +files, which is called a {\bf database}\index{database}database121,5445 +hierarchy}\index{data hierarchy} (Fig.~11\mbox{.}2).data127,5703 +\subsection{Binary Files and Text Files}Binary137,6165 +\subsection{Input and Output Streams}Input191,8953 +hierarchy illustrated in Figure~\ref{fig-streamhier}fig-streamhier195,9195 +} {fig-streamhier}\label{pg-fig-streamhier}pg-fig-streamhier204,9652 +{\bf Filtering}\index{Filtering}Filtering252,12020 +One type of filtering is {\bf buffering}\index{buffering}buffering307,15409 +\section{CASE STUDY: Reading and Writing Text Files}CASE368,18641 +(Fig.~\ref{fig-guitextio}fig-guitextio380,19303 +} {fig-guitextio}\label{pg-fig-guitextio}pg-fig-guitextio386,19560 +\subsection{Text File Format}Text391,19632 +more lines and ending with a special {\bf end-of-file character}\index{end-of-file character}.end-of-file393,19742 +\subsection{Writing to a Text File}Writing422,20966 +\noindent As Figure~\ref{fig-systemout}fig-systemout437,21401 +\subsubsection*{*457,22457 +Figure~\ref{fig-streamhier}fig-streamhier467,23002 +(Fig.~\ref{fig-filewriter}fig-filewriter489,23901 +it is ideally suited for our task (Fig.~\ref{fig-filewriter}fig-filewriter504,24713 +} {fig-filewriter}\label{pg-fig-filewriter}pg-fig-filewriter512,24989 +{\tt IOException} (Fig.~\ref{fig-writetextmethod}fig-writetextmethod559,27068 +\subsection{Code Reuse: Designing Text File Output}Code583,27693 +(Fig.~\ref{fig-streamhier}fig-streamhier609,28896 +Figure~\ref{fig-streamhier}fig-streamhier620,29540 +(Fig.~\ref{fig-fileoutput}fig-fileoutput622,29660 +} {fig-fileoutput}\label{pg-fig-fileoutput}pg-fig-fileoutput629,29983 +\subsection{Reading from a Text File}Reading689,32169 +\noindent As Figure~\ref{fig-readfromstream}fig-readfromstream705,32625 +need to use the information in Figure~\ref{fig-streamhier}fig-streamhier734,34023 +} {fig-filereader}\label{pg-fig-filereader}pg-fig-filereader750,34769 +The {\tt FileReader} class (Fig.~\ref{fig-filereader}fig-filereader753,34841 +\noindent As shown in Figure~\ref{fig-filereader}fig-filereader765,35297 +BufferedReader} (Fig.~\ref{fig-filereader}fig-filereader773,35700 +the definition for {\tt readTextFile()} shown in Figure~\ref{fig-readtextmethod}fig-readtextmethod844,38603 +\subsection{Code Reuse: Designing Text File Input}Code924,41334 +\subsection{The {\tt TextIO} Application}The1019,44959 +(Fig.~\ref{fig-textiouml}fig-textiouml1022,45137 +} {fig-textiouml}\label{pg-fig-textiouml}pg-fig-textiouml1027,45358 +} {fig-textioapp}\label{pg-fig-textioapp}pg-fig-textioapp1038,45798 +\section{The {\tt File} Class}The1140,49068 +know, a file is a collection of data, whereas a {\bf directory}\index{directory}directory1154,49800 +\subsection{Names and Paths}Names1160,50136 +A {\bf path}\index{path}path1164,50361 +name}\index{absolute path name}. This would be a name whose pathabsolute1181,51344 +\subsection{Validating File Names}Validating1200,51974 +\section{Example: Reading and Writing Binary Files}Example:1314,56740 +\subsection{Writing Binary Data}Writing1356,58528 +the {\tt java.io} package (Fig.~\ref{fig-streamhier}fig-streamhier1402,60392 +} {fig-fostream}\label{pg-fig-fostream}pg-fig-fostream1407,60567 +candidate is {\tt FileOutputStream} (Fig.~\ref{fig-fostream}fig-fostream1414,60834 +\subsubsection*{*1482,63910 +{\tt String}s are written using the {\tt writeUTF()} method. {\bf UTF}\index{UTF}UTF1484,64034 +(Fig.~\ref{fig-writerecordsmethod}fig-writerecordsmethod1501,65061 +\subsection{Reading Binary Data}Reading1535,66428 +{\tt InputStream} subclass (Fig.~\ref{fig-streamhier}fig-streamhier1553,67306 +} {fig-distream}\label{pg-fig-distream}pg-fig-distream1586,68889 +in Figure~\ref{fig-readrecordsmethod}fig-readrecordsmethod1633,70845 +\subsection{The {\tt BinaryIO} Application}The1714,73668 +} {fig-binaryioscreen}\label{pg-fig-binaryioscreen}pg-fig-binaryioscreen1735,74586 +\subsection{Abstracting Data from Files}Abstracting1848,78556 +\section{Object Serialization: Reading and Writing Objects}Object1917,81203 +{\bf object serialization}\index{object serialization}. Objects can be object1924,81574 +{\tt Student} class (Fig.~\ref{fig-student}fig-student1941,82278 +\subsection{The {\tt ObjectIO} Class}The2053,86971 +Figure~\ref{fig-objectioclass}fig-objectioclass2061,87386 +The {\tt readRecords()} method (Fig.~\ref{fig-objectioclass}fig-objectioclass2181,91972 +\section{From the Java Library \\ {\tt javax.swing.JFileChooser}}From2211,92983 +saving a file. Figure~\ref{fig-opendialog}fig-opendialog2222,93518 +file (Fig.~\ref{fig-opendialog}fig-opendialog2273,95839 +} {fig-opendialog}\label{pg-fig-opendialog}pg-fig-opendialog2278,95978 +\section{Using File Data in Programs} Using2294,96714 +{\tt try-catch} statement we get the code fragment in Figure~\ref{fig-wordguessfile}fig-wordguessfile2377,99786 +\section*{*2429,101597 -12.recursion.tex,5378 +12.recursion.tex,5349 \chapter{Recursive Problem Solving}Recursive5,113 \label{chapter-recursion}chapter-recursion6,149 \label{pg-chapter-recursion}pg-chapter-recursion7,175 @@ -361,60 +345,57 @@ printed. A {\bf recursion parameter}\index{recursion parameter} is a parameter Figure~\ref{fig-traceprint}fig-traceprint538,20914 \subsection{Printing the String Backward}Printing622,24495 reverse order. The trace in Figure~\ref{fig-tracerevprint}fig-tracerevprint645,25244 -\label{fig-tracerevprint}fig-tracerevprint649,25455 -a {\bf last-in--first-out (LIFO) protocol}\index{last-in--first-out (LIFO) protocol}. last-in--first-out673,26649 -Figure~\ref{fig-tracerevprint}fig-tracerevprint684,27181 -\subsection{Counting Characters in a String}Counting715,28520 -Figure~\ref{fig-countch}fig-countch758,30325 -\label{fig-tracecount}fig-tracecount817,32327 -\subsection{Translating a String}Translating833,32793 -string. Figure~\ref{fig-traceconvert}fig-traceconvert911,36207 -\label{fig-traceconvert}fig-traceconvert917,36401 -\subsection{Printing all Possible Outcomes when Tossing N Coins}Printing930,36688 -code for the method in Figure~\ref{fig-cointoss}fig-cointoss989,39544 -\section{Recursive Array Processing}Recursive1057,41810 -\subsection{Recursive Sequential Search}Recursive1077,42659 -(Fig.~\ref{fig-headtail2}fig-headtail21136,45206 -\label{fig-headtail2}fig-headtail21148,45837 -Figure~\ref{fig-rsearch}fig-rsearch1184,46986 -the {\em recursion parameter}\index{recursion parameter}. recursion1193,47598 -\subsection{Information Hiding}Information1209,48299 -Figure~\ref{fig-searcher}fig-searcher1232,49584 -(Fig.~\ref{fig-searcherclass}fig-searcherclass1233,49654 -\label{fig-searcher}fig-searcher1239,49893 -\label{pg-fig-searcher}pg-fig-searcher1240,49914 -\subsection{Recursive Selection Sort}Recursive1309,52296 -Figure~\ref{fig-selectsort}fig-selectsort1342,53910 -Figure~\ref{fig-selectionsort}fig-selectionsort1349,54335 -\section{Example: Drawing (Recursive) Fractals}Example:1435,57659 -\label{sec-fractals}sec-fractals1436,57707 -\subsection{Nested Squares}Nested1458,58918 -Figure~\ref{fig-drawboxes}fig-drawboxes1514,61339 -\subsection{The Sierpinski Gasket}The1583,64026 -interesting fractal pattern (Fig.~\ref{fig-sierpinski}fig-sierpinski1586,64197 -shown in Figure~\ref{fig-gasket}fig-gasket1625,65749 -If you look at Figure~\ref{fig-sierpinski}fig-sierpinski1670,67633 -\section{OBJECT-ORIENTED DESIGN:\\ Tail Recursion}OBJECT-ORIENTED1691,68461 -method is {\bf tail recursive}\index{tail recursive} tail1700,69011 -\section{OBJECT-ORIENTED DESIGN: \\Recursion or Iteration?}OBJECT-ORIENTED1805,73044 -when it is done. Figure~\ref{fig-methodblock}fig-methodblock1831,74352 -\section*{*1900,77864 -\section{From the Java Library: \\ javax.swing.JComboBox}From1953,80049 -\subsection{A {\tt JComboBox} Example}A1999,82418 -ItemListener} interface\index{ItemListener interface}, which consistsItemListener2069,85179 -Figure~\ref{fig-seqdiag}fig-seqdiag2094,86240 -Figure~\ref{fig-recursivepatterns}fig-recursivepatterns2097,86417 -\label{fig-seqdiag}fig-seqdiag2103,86649 -\label{pg-fig-seqdiag}pg-fig-seqdiag2104,86669 -\label{fig-canvas}fig-canvas2153,88428 -\label{pg-fig-canvas}pg-fig-canvas2154,88447 -Figure~\ref{fig-canvas}fig-canvas2159,88601 -Figure~\ref{fig-canvaspanel}fig-canvaspanel2160,88662 -\item A {\it recursive\index{recursive method} method} is one that calls itself.recursive2304,93175 -\item The level two and three gaskets are shown in Figure~\ref{fig-sierpinski23}fig-sierpinski232568,100873 -\item The Fibonacci\index{Fibonacci sequence} sequenceFibonacci2680,104256 +} {fig-tracerevprint}\label{pg-fig-tracerevprint}pg-fig-tracerevprint649,25455 +a {\bf last-in--first-out (LIFO) protocol}\index{last-in--first-out (LIFO) protocol}. last-in--first-out673,26645 +Figure~\ref{fig-tracerevprint}fig-tracerevprint684,27177 +\subsection{Counting Characters in a String}Counting715,28516 +Figure~\ref{fig-countch}fig-countch758,30321 +} {fig-tracecount}\label{pg-fig-tracecount}pg-fig-tracecount817,32323 +\subsection{Translating a String}Translating833,32785 +string. Figure~\ref{fig-traceconvert}fig-traceconvert911,36199 +} {fig-traceconvert}\label{pg-fig-traceconvert}pg-fig-traceconvert917,36393 +\subsection{Printing all Possible Outcomes when Tossing N Coins}Printing930,36676 +code for the method in Figure~\ref{fig-cointoss}fig-cointoss989,39532 +\section{Recursive Array Processing}Recursive1057,41798 +\subsection{Recursive Sequential Search}Recursive1077,42647 +(Fig.~\ref{fig-headtail2}fig-headtail21136,45194 +} {fig-headtail2}\label{pg-fig-headtail2}pg-fig-headtail21148,45825 +Figure~\ref{fig-rsearch}fig-rsearch1184,46970 +the {\em recursion parameter}\index{recursion parameter}. recursion1193,47582 +\subsection{Information Hiding}Information1209,48283 +Figure~\ref{fig-searcher}fig-searcher1232,49568 +(Fig.~\ref{fig-searcherclass}fig-searcherclass1233,49638 +\label{pg-fig-searcher}pg-fig-searcher1240,49894 +\subsection{Recursive Selection Sort}Recursive1309,52276 +Figure~\ref{fig-selectsort}fig-selectsort1342,53890 +Figure~\ref{fig-selectionsort}fig-selectionsort1349,54315 +\section{Example: Drawing (Recursive) Fractals}Example:1435,57639 +\label{sec-fractals}sec-fractals1436,57687 +\subsection{Nested Squares}Nested1458,58898 +Figure~\ref{fig-drawboxes}fig-drawboxes1514,61319 +\subsection{The Sierpinski Gasket}The1583,64006 +interesting fractal pattern (Fig.~\ref{fig-sierpinski}fig-sierpinski1586,64177 +shown in Figure~\ref{fig-gasket}fig-gasket1625,65729 +If you look at Figure~\ref{fig-sierpinski}fig-sierpinski1670,67613 +\section{OBJECT-ORIENTED DESIGN:\\ Tail Recursion}OBJECT-ORIENTED1691,68441 +method is {\bf tail recursive}\index{tail recursive} tail1700,68991 +\section{OBJECT-ORIENTED DESIGN: \\Recursion or Iteration?}OBJECT-ORIENTED1805,73024 +when it is done. Figure~\ref{fig-methodblock}fig-methodblock1831,74332 +\section*{*1900,77844 +\section{From the Java Library: \\ javax.swing.JComboBox}From1953,80029 +\subsection{A {\tt JComboBox} Example}A1999,82398 +ItemListener} interface\index{ItemListener interface}, which consistsItemListener2069,85159 +Figure~\ref{fig-seqdiag}fig-seqdiag2094,86220 +Figure~\ref{fig-recursivepatterns}fig-recursivepatterns2097,86397 +\label{pg-fig-seqdiag}pg-fig-seqdiag2104,86645 +\label{pg-fig-canvas}pg-fig-canvas2154,88419 +Figure~\ref{fig-canvas}fig-canvas2159,88573 +Figure~\ref{fig-canvaspanel}fig-canvaspanel2160,88634 +\item A {\it recursive\index{recursive method} method} is one that calls itself.recursive2304,93147 +\item The level two and three gaskets are shown in Figure~\ref{fig-sierpinski23}fig-sierpinski232568,100845 +\item The Fibonacci\index{Fibonacci sequence} sequenceFibonacci2680,104228 -13.guis.tex,5747 +13.guis.tex,5574 \chapter{Graphical User Interfaces}Graphical6,114 \label{chapter-guis}chapter-guis7,150 \label{pg-chapter-guis}pg-chapter-guis8,171 @@ -423,101 +404,96 @@ Figure~\ref{fig-canvaspanel}fig-canvaspanel2160,88662 \subsection{Heavyweight Versus Lightweight Components}Heavyweight94,4173 Figures~\ref{fig-swing1}fig-swing1133,6159 (Fig.~\ref{fig-swing2}fig-swing2138,6487 -\label{fig-swing2}fig-swing2153,7173 -\label{pg-fig-swing2}pg-fig-swing2154,7192 -\section{The Swing Component Set}The186,8671 -\section{OBJECT-ORIENTED DESIGN: \\Model-View-Controller Architecture}OBJECT-ORIENTED239,11015 -of the button is its {\bf view}\index{view}view252,11782 -constitute the button's {\bf model}\index{model}model263,12369 -controller}\index{controller}controller271,12762 -Figure~\ref{fig-mvc}fig-mvc274,12820 -\subsection{Pluggable Look and Feel}Pluggable311,14523 -\label{fig-lafs}fig-lafs353,16117 -\section{The Java Event Model}The372,16576 -model}\index{event model}.event380,17016 -A {\bf listener}\index{listener}listener429,18838 -the {\tt ActionListener} interface. As Figure~\ref{fig-clickme}fig-clickme436,19175 -\label{fig-p479f1}fig-p479f1481,20657 -\label{pg-fig-p479f1}pg-fig-p479f1482,20676 -Now that we have implemented the code in Figure~\ref{fig-clickme}fig-clickme486,20727 -it is clicked. Figure~\ref{fig-p479f1}fig-p479f1492,21128 -(Fig.~13.8). Our example (Fig.~\ref{fig-clickme}fig-clickme502,21550 -\subsection{Event Classes}Event521,22263 -\TBTvar{0pc}{Java's {\tt AWTEvent}s\index{AWTEvent}AWTEvent531,22686 -{\tt JButton} is a {\tt JComponent} (Fig.~\ref{fig-swing2}fig-swing2566,25236 -\section{CASE STUDY: Designing a Basic GUI}CASE647,28582 -\subsection{The Metric Converter Application}The689,30630 -\subsubsection*{*725,31866 -might be useful to refer back to Figure~\ref{fig-swing2}fig-swing2731,32234 -\subsubsection*{*764,33726 -(Fig.~\ref{fig-swing1}fig-swing1773,34291 -\subsubsection*{*783,34704 -\label{fig-metricgui}fig-metricgui794,35304 -\label{pg-fig-metricgui}pg-fig-metricgui795,35326 -Figure~\ref{fig-metricgui}fig-metricgui799,35380 -Figure~\ref{fig-metricgui}fig-metricgui805,35671 -hierarchy}\index{containment hierarchy}, also called a {\bf widgetcontainment806,35731 -hierarchy}\index{widget hierarchy}, which shows the containmentwidget807,35798 -Figure~\ref{fig-converterclass}fig-converterclass828,36776 -layout manager}\index{layout manager} is the object that islayout887,38777 -\noindent A {\bf content pane}\index{content pane} is a {\tt JPanel} that serves as thecontent905,39424 -\subsection{Inner Classes and Adapter Classes}Inner950,41294 -\subsection{GUI Design Critique}GUI1075,45991 -\subsection{Extending the Basic GUI: Button Array}Extending1154,49292 -\label{sec-keypad}sec-keypad1155,49343 -\noindent Figure~\ref{fig-metricgui2}fig-metricgui21187,51020 -\label{fig-metricgui2}fig-metricgui21197,51432 -\label{pg-fig-metricgui2}pg-fig-metricgui21198,51455 -(Fig.~\ref{fig-swing2}fig-swing21211,52059 -{\bf callback design}\index{callback design}. In this design, whenever a {\tt KeyPad}callback1287,55170 -Figure~\ref{fig-p493f1}fig-p493f11292,55387 -\label{fig-p493f1}fig-p493f11306,56151 -\label{pg-fig-p493f1}pg-fig-p493f11307,56170 -our design of the {\tt Converter} class (Fig.~\ref{fig-p493f1}fig-p493f11384,58663 -\subsection{GUI Design Critique}GUI1475,61527 -(Fig.~\ref{fig-metricgui2}fig-metricgui21487,62176 -\section{Containers and Layout Managers}Containers1517,63267 -top-level container (Fig.~\ref{fig-metricgui2}fig-metricgui21523,63658 -\subsection{Layout Managers}Layout1539,64305 -\subsection{The {\tt GridLayout} Manager}The1616,67806 -(Fig.~\ref{fig-convertscreen3}fig-convertscreen31638,68878 -\subsection{GUI Design Critique}GUI1675,70837 -\subsection{The {\tt BorderLayout} Manager}The1689,71503 -shown in Figure~\ref{fig-borderlayout}fig-borderlayout1692,71696 -Figure~\ref{fig-metricgui3}fig-metricgui31763,74375 -Figure~\ref{fig-convertscreen5}fig-convertscreen51783,75265 -\section{Checkboxes, Radio Buttons, and Borders}Checkboxes,1837,77058 -Figure~\ref{fig-acmegui}fig-acmegui1888,79718 -\subsection{Checkbox and Radio Button Arrays}Checkbox1923,81282 -\label{fig-acmescreen}fig-acmescreen1947,82350 -Figure~\ref{fig-p504f1}fig-p504f11994,84125 -\subsection{Swing Borders}Swing2032,85912 -\subsection{The {\tt BoxLayout} Manager}The2076,87820 -checkboxes and radio buttons (Fig.~\ref{fig-acmegui}fig-acmegui2080,88073 -{\tt GridBoxLayout}. For example, Figure~\ref{fig-nestedbox}fig-nestedbox2113,89470 -\subsection{The {\tt ItemListener} Interface }The2122,89867 -\subsection{The {\tt OrderApplet} }The2174,92230 -Figure~\ref{fig-orderapplet}fig-orderapplet2177,92386 -conforms to the design shown in Figure~\ref{fig-acmegui}fig-acmegui2180,92582 -\section{Menus and Scroll Panes}Menus2347,98633 -(Fig.~\ref{fig-menuterms}fig-menuterms2356,99105 -\subsection{Adding a Menu Bar to an Application}Adding2373,99776 -represented as a line in the menu (Fig.~\ref{fig-menuterms}fig-menuterms2444,102555 -\subsection{Menu Hierarchies}Menu2457,103189 -(Fig.~\ref{fig-menuterms}fig-menuterms2489,104644 -\subsection{Handling Menu Actions}Handling2527,106015 -\subsubsection*{*2606,109966 -\subsection{Adding Scrollbars to a Text Area}Adding2653,111965 -Figure~\ref{fig-p514f1}fig-p514f12655,112085 -Figure~\ref{fig-texteditor}fig-texteditor2656,112153 -(Fig.~\ref{fig-scrollexample}fig-scrollexample2825,118895 -\section*{*2850,119638 -(Fig.~\ref{fig-p528f1}fig-p528f13038,127522 -Figure~\ref{fig-acmegui}fig-acmegui3195,133774 -Figure~\ref{fig-acmegui}fig-acmegui3199,133932 -shown in Figure~\ref{fig-errdialog}fig-errdialog3241,136001 +\label{pg-fig-swing2}pg-fig-swing2154,7188 +\section{The Swing Component Set}The186,8667 +\section{OBJECT-ORIENTED DESIGN: \\Model-View-Controller Architecture}OBJECT-ORIENTED239,11011 +of the button is its {\bf view}\index{view}view252,11778 +constitute the button's {\bf model}\index{model}model263,12365 +controller}\index{controller}controller271,12758 +Figure~\ref{fig-mvc}fig-mvc274,12816 +\subsection{Pluggable Look and Feel}Pluggable311,14519 +} {fig-lafs}\label{pg-fig-lafs}pg-fig-lafs353,16113 +\section{The Java Event Model}The372,16568 +model}\index{event model}.event380,17008 +A {\bf listener}\index{listener}listener429,18830 +the {\tt ActionListener} interface. As Figure~\ref{fig-clickme}fig-clickme436,19167 +\label{pg-fig-p479f1}pg-fig-p479f1482,20664 +Now that we have implemented the code in Figure~\ref{fig-clickme}fig-clickme486,20715 +it is clicked. Figure~\ref{fig-p479f1}fig-p479f1492,21116 +(Fig.~13.8). Our example (Fig.~\ref{fig-clickme}fig-clickme502,21538 +\subsection{Event Classes}Event521,22251 +\TBTvar{0pc}{Java's {\tt AWTEvent}s\index{AWTEvent}AWTEvent531,22674 +{\tt JButton} is a {\tt JComponent} (Fig.~\ref{fig-swing2}fig-swing2566,25224 +\section{CASE STUDY: Designing a Basic GUI}CASE647,28570 +\subsection{The Metric Converter Application}The689,30618 +\subsubsection*{*725,31854 +might be useful to refer back to Figure~\ref{fig-swing2}fig-swing2731,32222 +\subsubsection*{*764,33714 +(Fig.~\ref{fig-swing1}fig-swing1773,34279 +\subsubsection*{*783,34692 +\label{pg-fig-metricgui}pg-fig-metricgui795,35310 +Figure~\ref{fig-metricgui}fig-metricgui799,35364 +Figure~\ref{fig-metricgui}fig-metricgui805,35655 +hierarchy}\index{containment hierarchy}, also called a {\bf widgetcontainment806,35715 +hierarchy}\index{widget hierarchy}, which shows the containmentwidget807,35782 +Figure~\ref{fig-converterclass}fig-converterclass828,36760 +layout manager}\index{layout manager} is the object that islayout887,38761 +\noindent A {\bf content pane}\index{content pane} is a {\tt JPanel} that serves as thecontent905,39408 +\subsection{Inner Classes and Adapter Classes}Inner950,41278 +\subsection{GUI Design Critique}GUI1075,45975 +\subsection{Extending the Basic GUI: Button Array}Extending1154,49276 +\label{sec-keypad}sec-keypad1155,49327 +\noindent Figure~\ref{fig-metricgui2}fig-metricgui21187,51004 +\label{pg-fig-metricgui2}pg-fig-metricgui21198,51435 +(Fig.~\ref{fig-swing2}fig-swing21211,52039 +{\bf callback design}\index{callback design}. In this design, whenever a {\tt KeyPad}callback1287,55150 +Figure~\ref{fig-p493f1}fig-p493f11292,55367 +\label{pg-fig-p493f1}pg-fig-p493f11307,56146 +our design of the {\tt Converter} class (Fig.~\ref{fig-p493f1}fig-p493f11384,58639 +\subsection{GUI Design Critique}GUI1475,61503 +(Fig.~\ref{fig-metricgui2}fig-metricgui21487,62152 +\section{Containers and Layout Managers}Containers1517,63243 +top-level container (Fig.~\ref{fig-metricgui2}fig-metricgui21523,63634 +\subsection{Layout Managers}Layout1539,64281 +\subsection{The {\tt GridLayout} Manager}The1616,67782 +(Fig.~\ref{fig-convertscreen3}fig-convertscreen31638,68854 +\subsection{GUI Design Critique}GUI1675,70813 +\subsection{The {\tt BorderLayout} Manager}The1689,71479 +shown in Figure~\ref{fig-borderlayout}fig-borderlayout1692,71672 +Figure~\ref{fig-metricgui3}fig-metricgui31763,74351 +Figure~\ref{fig-convertscreen5}fig-convertscreen51783,75241 +\section{Checkboxes, Radio Buttons, and Borders}Checkboxes,1837,77034 +Figure~\ref{fig-acmegui}fig-acmegui1888,79694 +\subsection{Checkbox and Radio Button Arrays}Checkbox1923,81258 +} {fig-acmescreen}\label{pg-fig-acmescreen}pg-fig-acmescreen1947,82326 +Figure~\ref{fig-p504f1}fig-p504f11994,84097 +\subsection{Swing Borders}Swing2032,85884 +\subsection{The {\tt BoxLayout} Manager}The2076,87792 +checkboxes and radio buttons (Fig.~\ref{fig-acmegui}fig-acmegui2080,88045 +{\tt GridBoxLayout}. For example, Figure~\ref{fig-nestedbox}fig-nestedbox2113,89442 +\subsection{The {\tt ItemListener} Interface }The2122,89839 +\subsection{The {\tt OrderApplet} }The2174,92202 +Figure~\ref{fig-orderapplet}fig-orderapplet2177,92358 +conforms to the design shown in Figure~\ref{fig-acmegui}fig-acmegui2180,92554 +\section{Menus and Scroll Panes}Menus2347,98605 +(Fig.~\ref{fig-menuterms}fig-menuterms2356,99077 +\subsection{Adding a Menu Bar to an Application}Adding2373,99748 +represented as a line in the menu (Fig.~\ref{fig-menuterms}fig-menuterms2444,102527 +\subsection{Menu Hierarchies}Menu2457,103161 +(Fig.~\ref{fig-menuterms}fig-menuterms2489,104616 +\subsection{Handling Menu Actions}Handling2527,105987 +\subsubsection*{*2606,109938 +\subsection{Adding Scrollbars to a Text Area}Adding2653,111937 +Figure~\ref{fig-p514f1}fig-p514f12655,112057 +Figure~\ref{fig-texteditor}fig-texteditor2656,112125 +(Fig.~\ref{fig-scrollexample}fig-scrollexample2825,118867 +\section*{*2850,119610 +(Fig.~\ref{fig-p528f1}fig-p528f13038,127494 +Figure~\ref{fig-acmegui}fig-acmegui3195,133746 +Figure~\ref{fig-acmegui}fig-acmegui3199,133904 +shown in Figure~\ref{fig-errdialog}fig-errdialog3241,135973 -14.threads.tex,5684 +14.threads.tex,5436 \chapter{Threads and Concurrent Programming}Threads6,123 \label{chapter-threads}chapter-threads7,168 \label{pg-chapter-threads}pg-chapter-threads8,192 @@ -529,92 +505,87 @@ concurrently}\index{concurrently}concurrently58,2131 is known as {\bf multitasking}\index{multitasking}multitasking121,5621 quite simple) to implement {\bf multithreaded}\index{multithreaded}multithreaded126,5982 Each CPU uses a {\bf fetch-execute cycle}\index{fetch-execute cycle}fetch-execute140,6682 -\label{fig-timeslicing}fig-timeslicing154,7402 -\label{pg-fig-timeslicing}pg-fig-timeslicing155,7426 -One common scheduling technique is known as {\bf time slicing}\index{time slicing},time159,7482 -quantum}\index{quantum}quantum165,7867 -{\bf round-robin}\index{round-robin}round-robin170,8208 -(Fig.~\ref{fig-timeslicing}fig-timeslicing171,8286 -Under {\bf priority scheduling}\index{priority scheduling}, threads of higher priority arepriority180,8658 -\subsection{Multithreaded Numbers}Multithreaded204,9964 -same time (Fig.~\ref{fig-p707f1}fig-p707f1256,11603 -\section{From the Java Library: {\tt java.lang.Thread}}From346,15162 -\subsection{Thread Control}Thread458,19038 -\subsection{Thread Priority}Thread475,19873 -\subsection{Forcing Threads to Sleep}Forcing546,22531 -\subsection{The Asynchronous Nature of Threaded Programs}The645,26198 -\noindent Threads are {\bf asynchronous}\index{asynchronous}asynchronous646,26256 -\label{fig-lifecycle}fig-lifecycle722,29905 -\label{pg-fig-lifecycle}pg-fig-lifecycle723,29927 -\section{Thread States and Life Cycle}Thread726,29967 -\noindent Each thread has a {\bf life cycle}\index{life cycle} thatlife727,30006 -Figure~\ref{fig-lifecycle}fig-lifecycle729,30136 -{\bf ready queue}\index{ready queue}, ready746,31252 -for its turn on the CPU. A {\bf queue}\index{queue}queue747,31291 -queue will be {\bf dispatched}\index{dispatched}dispatched749,31431 -The system also manages transitions between the {\bf blocked}\index{blocked}blocked801,33828 -\section{Using Threads to Improve \\\hspace*{2.8pc}Interface Responsiveness}Using839,35808 -\subsection{Single-Threaded Design}Single-Threaded849,36409 -\subsection*{*869,37269 -Figure~\ref{fig-dotsgui}fig-dotsgui886,38159 -\subsection*{*901,38624 -\subsection*{*920,39294 -Figure~\ref{fig-randomdotgui}fig-randomdotgui925,39470 -\subsection*{*997,41710 -Figure~\ref{fig-singledotty}fig-singledotty1067,44360 -(Fig.~\ref{fig-dottytrace}fig-dottytrace1083,45355 -\label{fig-dottytrace}fig-dottytrace1087,45482 -\label{pg-fig-dottytrace}pg-fig-dottytrace1088,45505 -\subsection{Multithreaded Drawing: The {\tt Dotty} Thread}Multithreaded1121,46902 -Figure~\ref{fig-threadeddotty}fig-threadeddotty1180,49491 -\subsection*{*1266,52921 -\subsection{Advantages of Multithreaded Design}Advantages1313,54918 -actions. Figure~\ref{fig-threadedtrace}fig-threadedtrace1319,55312 -\label{fig-threadedtrace}fig-threadedtrace1330,55824 -\label{pg-fig-threadedtrace}pg-fig-threadedtrace1331,55850 -\section{CASE STUDY: Cooperating Threads}CASE1365,57362 -producer/consumer model}\index{producer/consumer model}. According to this model, two threadsproducer/consumer1370,57609 -\subsection{Problem Statement}Problem1388,58591 -\subsection*{*1410,59780 -\marginnote{What classes do we need?} Figure~\ref{fig-p726f1}fig-p726f11412,59876 -\subsection{Design: The {\tt TakeANumber} Class}Design:1448,61551 -the {\tt TakeANumber} class shown in Figure~\ref{fig-takeanumber1}fig-takeanumber11477,63105 -exclusion}\index{mutual exclusion} is important for the correctness ofmutual1515,64439 -\subsection{Java Monitors and Mutual Exclusion}Java1525,64673 -\noindent An object that contains {\tt synchronized} methods has a {\bf monitor}\index{monitor}monitor1526,64721 -called, a {\bf lock}\index{lock}lock1532,65110 -\subsection{The {\tt Customer} Class}The1563,66748 -Customer} shown in Figure~\ref{fig-customer1}fig-customer11579,67649 -\subsection{The {\tt Clerk} Class}The1634,69452 -Figure~\ref{fig-clerk1}fig-clerk11655,70353 -\subsection{The {\tt Bakery} Class}The1690,71246 -(Fig.~\ref{fig-bakery}fig-bakery1697,71642 -\subsection*{*1723,72376 -\subsection{Problem: Critical Sections}Problem:1844,76735 -A {\bf critical section}\index{critical section} is any section of a thread that should not becritical1921,79657 -\subsection*{*1930,80183 -(Fig.~\ref{fig-takeanumber2}fig-takeanumber21942,80961 -{\tt TakeANumber} in Figure~\ref{fig-takeanumber2}fig-takeanumber21979,82124 -\subsection{Using {\tt wait/notify} to Coordinate Threads}Using2083,85823 -\subsection*{*2091,86304 -uses {\em busy waiting}\index{busy waiting} busy2094,86482 -\subsection*{*2142,88437 -Figure~\ref{fig-lifecycle}fig-lifecycle2145,88602 -Figures~14.27 and~\ref{fig-takeanumber3}fig-takeanumber32240,92034 -\subsection*{*2323,94469 -\section{CASE STUDY: The Game of Pong}CASE2354,95760 -\subsection{A Multithreaded Design}A2366,96380 -Figure~\ref{fig-pongdesign}fig-pongdesign2388,97444 -\label{fig-pongdesign}fig-pongdesign2394,97786 -\label{pg-fig-pongdesign}pg-fig-pongdesign2395,97809 -\subsection{Implementation of the Pong Program}Implementation2437,100148 -implementation (Fig.~\ref{fig-paddle}fig-paddle2440,100281 -The {\tt Ball} class (Fig.~\ref{fig-ball}fig-ball2510,102522 -\subsection{The {\tt KeyListener} Interface}The2626,106969 -figure~\ref{fig-pongapplet}fig-pongapplet2629,107076 -\subsection{Animating the Bouncing Ball}Animating2732,111233 +\label{pg-fig-timeslicing}pg-fig-timeslicing155,7422 +One common scheduling technique is known as {\bf time slicing}\index{time slicing},time159,7478 +quantum}\index{quantum}quantum165,7863 +{\bf round-robin}\index{round-robin}round-robin170,8204 +(Fig.~\ref{fig-timeslicing}fig-timeslicing171,8282 +Under {\bf priority scheduling}\index{priority scheduling}, threads of higher priority arepriority180,8654 +\subsection{Multithreaded Numbers}Multithreaded204,9960 +same time (Fig.~\ref{fig-p707f1}fig-p707f1256,11599 +\section{From the Java Library: {\tt java.lang.Thread}}From346,15158 +\subsection{Thread Control}Thread458,19034 +\subsection{Thread Priority}Thread475,19869 +\subsection{Forcing Threads to Sleep}Forcing546,22527 +\subsection{The Asynchronous Nature of Threaded Programs}The645,26194 +\noindent Threads are {\bf asynchronous}\index{asynchronous}asynchronous646,26252 +\label{pg-fig-lifecycle}pg-fig-lifecycle723,29919 +\section{Thread States and Life Cycle}Thread726,29959 +\noindent Each thread has a {\bf life cycle}\index{life cycle} thatlife727,29998 +Figure~\ref{fig-lifecycle}fig-lifecycle729,30128 +{\bf ready queue}\index{ready queue}, ready746,31244 +for its turn on the CPU. A {\bf queue}\index{queue}queue747,31283 +queue will be {\bf dispatched}\index{dispatched}dispatched749,31423 +The system also manages transitions between the {\bf blocked}\index{blocked}blocked801,33820 +\section{Using Threads to Improve \\\hspace*{2.8pc}Interface Responsiveness}Using839,35800 +\subsection{Single-Threaded Design}Single-Threaded849,36401 +\subsection*{*869,37261 +Figure~\ref{fig-dotsgui}fig-dotsgui886,38151 +\subsection*{*901,38616 +\subsection*{*920,39286 +Figure~\ref{fig-randomdotgui}fig-randomdotgui925,39462 +\subsection*{*997,41702 +Figure~\ref{fig-singledotty}fig-singledotty1067,44352 +(Fig.~\ref{fig-dottytrace}fig-dottytrace1083,45347 +\label{pg-fig-dottytrace}pg-fig-dottytrace1088,45493 +\subsection{Multithreaded Drawing: The {\tt Dotty} Thread}Multithreaded1121,46890 +Figure~\ref{fig-threadeddotty}fig-threadeddotty1180,49479 +\subsection*{*1266,52909 +\subsection{Advantages of Multithreaded Design}Advantages1313,54906 +actions. Figure~\ref{fig-threadedtrace}fig-threadedtrace1319,55300 +\label{pg-fig-threadedtrace}pg-fig-threadedtrace1331,55834 +\section{CASE STUDY: Cooperating Threads}CASE1365,57346 +producer/consumer model}\index{producer/consumer model}. According to this model, two threadsproducer/consumer1370,57593 +\subsection{Problem Statement}Problem1388,58575 +\subsection*{*1410,59764 +\marginnote{What classes do we need?} Figure~\ref{fig-p726f1}fig-p726f11412,59860 +\subsection{Design: The {\tt TakeANumber} Class}Design:1448,61535 +the {\tt TakeANumber} class shown in Figure~\ref{fig-takeanumber1}fig-takeanumber11477,63089 +exclusion}\index{mutual exclusion} is important for the correctness ofmutual1515,64423 +\subsection{Java Monitors and Mutual Exclusion}Java1525,64657 +\noindent An object that contains {\tt synchronized} methods has a {\bf monitor}\index{monitor}monitor1526,64705 +called, a {\bf lock}\index{lock}lock1532,65094 +\subsection{The {\tt Customer} Class}The1563,66732 +Customer} shown in Figure~\ref{fig-customer1}fig-customer11579,67633 +\subsection{The {\tt Clerk} Class}The1634,69436 +Figure~\ref{fig-clerk1}fig-clerk11655,70337 +\subsection{The {\tt Bakery} Class}The1690,71230 +(Fig.~\ref{fig-bakery}fig-bakery1697,71626 +\subsection*{*1723,72360 +\subsection{Problem: Critical Sections}Problem:1844,76719 +A {\bf critical section}\index{critical section} is any section of a thread that should not becritical1921,79641 +\subsection*{*1930,80167 +(Fig.~\ref{fig-takeanumber2}fig-takeanumber21942,80945 +{\tt TakeANumber} in Figure~\ref{fig-takeanumber2}fig-takeanumber21979,82108 +\subsection{Using {\tt wait/notify} to Coordinate Threads}Using2083,85807 +\subsection*{*2091,86288 +uses {\em busy waiting}\index{busy waiting} busy2094,86466 +\subsection*{*2142,88421 +Figure~\ref{fig-lifecycle}fig-lifecycle2145,88586 +Figures~14.27 and~\ref{fig-takeanumber3}fig-takeanumber32240,92018 +\subsection*{*2323,94453 +\section{CASE STUDY: The Game of Pong}CASE2354,95744 +\subsection{A Multithreaded Design}A2366,96364 +Figure~\ref{fig-pongdesign}fig-pongdesign2388,97428 +\label{pg-fig-pongdesign}pg-fig-pongdesign2395,97789 +\subsection{Implementation of the Pong Program}Implementation2437,100128 +implementation (Fig.~\ref{fig-paddle}fig-paddle2440,100261 +The {\tt Ball} class (Fig.~\ref{fig-ball}fig-ball2510,102502 +\subsection{The {\tt KeyListener} Interface}The2626,106949 +figure~\ref{fig-pongapplet}fig-pongapplet2629,107056 +\subsection{Animating the Bouncing Ball}Animating2732,111213 -15.sockets.tex,6865 +15.sockets.tex,7021 \chapter{Sockets and Networking}Sockets7,112 \label{chapter-sockets}chapter-sockets8,145 \label{pg-chapter-sockets}pg-chapter-sockets9,169 @@ -622,115 +593,115 @@ figure~\ref{fig-pongapplet}fig-pongapplet2629,107076 \section{An Overview of Networks}An57,1918 \subsection{Network Size and Topology}Network64,2253 shown in Figures~\ref{fig-topology1}fig-topology176,2938 -\label{fig-topology1}fig-topology185,3308 -In a star network (Fig.~\ref{fig-topology1}fig-topology189,3383 -A ring network (Fig.~\ref{fig-topology1}fig-topology197,3839 -information. The tree topology (Fig.~\ref{fig-topology2}fig-topology299,3970 -\subsection{Internets}Internets117,4729 -\noindent An {\bf internet}\index{internet}internet118,4752 -distinct networks, joined by devices called {\bf routers}\index{routers}routers119,4847 -(Fig.~\ref{fig-internet}fig-internet120,4920 -\label{fig-internet}fig-internet135,5746 -The United Nations is an apt analogy for the {\bf Internet}\index{Internet}Internet139,5806 -\subsection{Network Protocols}Network160,6498 -\noindent A {\bf protocol}\index{protocol}protocol162,6589 -\subsubsection*{*178,7460 -(URL)}\index{Uniform Resource Locator (URL)}. A URL specifies threeUniform185,7904 -organizations can buy their own {\bf domain names}\index{domain names}, such as {\ttdomain224,9720 -\subsection{Client/Server Applications}Client/Server242,10466 -client/server protocols}\index{client/server protocols}, and the applications they support areclient/server244,10576 -subtasks, one performed by the {\bf client}\index{client}client247,10811 -{\bf server}\index{server}server248,10894 -\subsection{Lower Level Network Protocols}Lower308,13042 -information, or {\bf packets}\index{packets}packets325,13740 -these are protocols, such as the \mbox{\bf ethernet protocol}\index{ethernet protocol} and {\itethernet338,14404 -Protocol (IP)}\index{Internetworking Protocol (IP)}, which governs the task of translating one networkInternetworking351,15162 -protocol to a common format (Fig.~\ref{fig-ipprotocol}fig-ipprotocol352,15265 -\subsection{The {\tt java.net} Package}The367,16005 -in Java. The {\tt java.net} (Fig.~\ref{fig-nethier}fig-nethier388,16896 -\label{fig-nethier}fig-nethier395,17138 -\section{Using Network Resources from an Applet}Using420,18261 -\section{From the Java Library: {\tt java.net.URL}}From468,20410 -\subsection{Code Reuse: The {\tt java.applet.Applet} Class}Code519,22661 -\section{The Slide Show Applet}The589,25119 -\subsection*{*590,25151 -\subsection*{*608,25927 -\subsection*{*632,26860 -\label{fig-p830f2}fig-p830f2635,27084 -Chapter~14, this is a form of {\em busy waiting}\index{busy waiting}busy646,27408 -\subsection{The {\tt SlideShowApplet} class}The671,28492 -of a {\bf callback method}\index{callback method} (Fig.~15.12).callback783,33018 -of {\tt SlideShowApplet}, which is shown in Figure~\ref{fig-slideapplet}fig-slideapplet791,33411 -\subsection{The {\tt Timer} Class}The839,34825 -{\tt Timer} is shown in Figure~\ref{fig-timerthread}fig-timerthread869,36035 -\section{Using Network Resources from an \\Application}Using909,37097 -Section~\ref{sec-security}sec-security916,37541 -\subsection*{*925,38056 -\subsection{Downloading a Text File from the Web}Downloading953,39258 -\subsection*{*1032,42629 -\subsection*{*1092,45015 -\label{fig-realestategui}fig-realestategui1097,45151 -and ``East'' borders, respectively. Figure~\ref{fig-realestategui}fig-realestategui1117,46156 -\subsection*{*1123,46378 -in Figure~\ref{fig-realviewer1}fig-realviewer11203,49386 -\subsection*{*1210,49717 -and~\ref{fig-imagepanel}fig-imagepanel1219,50012 -\subsection*{*1231,50680 -{\tt RealEstateViewer} (Fig.~\ref{fig-realviewer1}fig-realviewer11233,50775 -\subsection*{*1310,53282 -\subsection*{*1344,54430 -earlier. Figure~\ref{fig-realestatescreen}fig-realestatescreen1404,57220 -information to a user. Figure~\ref{fig-realestateclass}fig-realestateclass1406,57328 -\subsection{Reusing Code}Reusing1526,61442 -\section{Client/Server Communication via {\tt Socket}s}Client/Server1558,62944 -A {\bf socket}\index{socket}socket1566,63400 -port}\index{port}port1576,63933 -Figure~\ref{fig-clientserverpict}fig-clientserverpict1611,65787 -\subsection{The Server Protocol}The1629,66505 -The template in Figure~\ref{fig-serverpro}fig-serverpro1631,66618 -\subsection{The Client Protocol}The1695,68988 -\noindent The client protocol (Fig.~\ref{fig-clientpro}fig-clientpro1696,69021 -\subsection{A Two-Way Stream Connection}A1737,70473 -\section{CASE STUDY: Generic Client/Server Classes}CASE1846,75283 -\label{sec-clientserver}sec-clientserver1849,75442 -\subsection{Object-Oriented Design}Object-Oriented1925,78813 -\subsection*{*1934,79310 -(Fig.~\ref{fig-clientserver}fig-clientserver1966,80967 -\subsection{The {\tt EchoServer} Class}The2021,82890 -\label{fig-p852f1}fig-p852f12025,83018 -EchoServer}, in Figure~\ref{fig-echoserver}fig-echoserver2115,86421 -\subsection{The {\tt EchoClient} Class}The2201,89565 -Figure~\ref{fig-echoclient}fig-echoclient2331,94572 -\subsection*{*2406,97110 -methods (Figs.~\ref{fig-echoserver}fig-echoserver2408,97223 -\section{Playing One Row Nim Over the Network}Playing2464,99166 -organized into the hierarchy shown in Figure~\ref{fig-p858f1}fig-p858f12501,101008 -{\tt Client} shown in Figures~\ref{fig-serverclass}fig-serverclass2527,102552 -~\ref{fig-clientclass}fig-clientclass2528,102608 -\subsection{The {\tt NimServer} Class}The2637,105781 -Figure~\ref{fig-nimserverclass}fig-nimserverclass2719,108631 -\subsection{The {\tt NimClient} Class}The2767,111357 -Client} class (Fig.~\ref{fig-clientclass}fig-clientclass2773,111679 -NimClient} (Fig.~\ref{fig-nimclientclass}fig-nimclientclass2774,111748 -\subsection{Testing the Nim Service}Testing2828,113773 -\section{Java Network Security Restrictions}Java2867,115274 -\label{sec-security}sec-security2868,115319 -so-called {\bf sandbox security model}\index{sandbox security model}, which refers to the practicesandbox2886,116375 -code}\index{trusted code}. For example, the Java class libraries would be placed in such atrusted2905,117380 -\section{Java Servlets and Java Server Pages}Java2955,119791 -\subsection{Java Server Pages}Java2981,121314 -extend over one or more lines. Figure~\ref{fig-jspcode}fig-jspcode2995,121800 -string value is displayed on the Web page (Fig.~\ref{fig-jspscreen}fig-jspscreen3051,123275 -\label{fig-jspscreen}fig-jspscreen3055,123423 -\subsection{Java Servlets}Java3075,124440 -\subsection{A Simple Servlet Example}A3144,127306 -page, Figure~\ref{fig-hiservlet}fig-hiservlet3147,127415 -\subsection{The Nim Servlet}The3221,130483 -Figure~\ref{fig-nimscreen}fig-nimscreen3238,131185 -Figures~\ref{fig-nimservlet}fig-nimservlet3249,131817 -\subsection{Setting Up and Using Java Servlets}Setting3473,141282 +} {fig-topology1}\label{pg-fig-topology1}pg-fig-topology185,3308 +In a star network (Fig.~\ref{fig-topology1}fig-topology189,3379 +A ring network (Fig.~\ref{fig-topology1}fig-topology197,3835 +information. The tree topology (Fig.~\ref{fig-topology2}fig-topology299,3966 +\subsection{Internets}Internets117,4725 +\noindent An {\bf internet}\index{internet}internet118,4748 +distinct networks, joined by devices called {\bf routers}\index{routers}routers119,4843 +(Fig.~\ref{fig-internet}fig-internet120,4916 +} {fig-internet}\label{pg-fig-internet}pg-fig-internet135,5742 +The United Nations is an apt analogy for the {\bf Internet}\index{Internet}Internet139,5798 +\subsection{Network Protocols}Network160,6490 +\noindent A {\bf protocol}\index{protocol}protocol162,6581 +\subsubsection*{*178,7452 +(URL)}\index{Uniform Resource Locator (URL)}. A URL specifies threeUniform185,7896 +organizations can buy their own {\bf domain names}\index{domain names}, such as {\ttdomain224,9712 +\subsection{Client/Server Applications}Client/Server242,10458 +client/server protocols}\index{client/server protocols}, and the applications they support areclient/server244,10568 +subtasks, one performed by the {\bf client}\index{client}client247,10803 +{\bf server}\index{server}server248,10886 +\subsection{Lower Level Network Protocols}Lower308,13034 +information, or {\bf packets}\index{packets}packets325,13732 +these are protocols, such as the \mbox{\bf ethernet protocol}\index{ethernet protocol} and {\itethernet338,14396 +Protocol (IP)}\index{Internetworking Protocol (IP)}, which governs the task of translating one networkInternetworking351,15154 +protocol to a common format (Fig.~\ref{fig-ipprotocol}fig-ipprotocol352,15257 +\subsection{The {\tt java.net} Package}The367,15997 +in Java. The {\tt java.net} (Fig.~\ref{fig-nethier}fig-nethier388,16888 +} {fig-nethier}\label{pg-fig-nethier}pg-fig-nethier395,17130 +\section{Using Network Resources from an Applet}Using420,18249 +\section{From the Java Library: {\tt java.net.URL}}From468,20398 +\subsection{Code Reuse: The {\tt java.applet.Applet} Class}Code519,22649 +\section{The Slide Show Applet}The589,25107 +\subsection*{*590,25139 +\subsection*{*608,25915 +\subsection*{*632,26848 +} {fig-p830f2}\label{pg-fig-p830f2}pg-fig-p830f2635,27072 +Chapter~14, this is a form of {\em busy waiting}\index{busy waiting}busy646,27392 +\subsection{The {\tt SlideShowApplet} class}The671,28476 +of a {\bf callback method}\index{callback method} (Fig.~15.12).callback783,33002 +of {\tt SlideShowApplet}, which is shown in Figure~\ref{fig-slideapplet}fig-slideapplet791,33395 +\subsection{The {\tt Timer} Class}The839,34809 +{\tt Timer} is shown in Figure~\ref{fig-timerthread}fig-timerthread869,36019 +\section{Using Network Resources from an \\Application}Using909,37081 +Section~\ref{sec-security}sec-security916,37525 +\subsection*{*925,38040 +\subsection{Downloading a Text File from the Web}Downloading953,39242 +\subsection*{*1032,42613 +\subsection*{*1092,44999 +} {fig-realestategui}\label{pg-fig-realestategui}pg-fig-realestategui1097,45135 +and ``East'' borders, respectively. Figure~\ref{fig-realestategui}fig-realestategui1117,46136 +\subsection*{*1123,46358 +in Figure~\ref{fig-realviewer1}fig-realviewer11203,49366 +\subsection*{*1210,49697 +and~\ref{fig-imagepanel}fig-imagepanel1219,49992 +\subsection*{*1231,50660 +{\tt RealEstateViewer} (Fig.~\ref{fig-realviewer1}fig-realviewer11233,50755 +\subsection*{*1310,53262 +\subsection*{*1344,54410 +earlier. Figure~\ref{fig-realestatescreen}fig-realestatescreen1404,57200 +information to a user. Figure~\ref{fig-realestateclass}fig-realestateclass1406,57308 +\subsection{Reusing Code}Reusing1526,61422 +\section{Client/Server Communication via {\tt Socket}s}Client/Server1558,62924 +A {\bf socket}\index{socket}socket1566,63380 +port}\index{port}port1576,63913 +Figure~\ref{fig-clientserverpict}fig-clientserverpict1611,65767 +\subsection{The Server Protocol}The1629,66485 +The template in Figure~\ref{fig-serverpro}fig-serverpro1631,66598 +\subsection{The Client Protocol}The1695,68968 +\noindent The client protocol (Fig.~\ref{fig-clientpro}fig-clientpro1696,69001 +\subsection{A Two-Way Stream Connection}A1737,70453 +\section{CASE STUDY: Generic Client/Server Classes}CASE1846,75263 +\label{sec-clientserver}sec-clientserver1849,75422 +\subsection{Object-Oriented Design}Object-Oriented1925,78793 +\subsection*{*1934,79290 +(Fig.~\ref{fig-clientserver}fig-clientserver1966,80947 +\subsection{The {\tt EchoServer} Class}The2021,82870 +} {fig-p852f1}\label{pg-fig-p852f1}pg-fig-p852f12025,82998 +EchoServer}, in Figure~\ref{fig-echoserver}fig-echoserver2115,86397 +\subsection{The {\tt EchoClient} Class}The2201,89541 +Figure~\ref{fig-echoclient}fig-echoclient2331,94548 +\subsection*{*2406,97086 +methods (Figs.~\ref{fig-echoserver}fig-echoserver2408,97199 +\section{Playing One Row Nim Over the Network}Playing2464,99142 +organized into the hierarchy shown in Figure~\ref{fig-p858f1}fig-p858f12501,100984 +{\tt Client} shown in Figures~\ref{fig-serverclass}fig-serverclass2527,102528 +~\ref{fig-clientclass}fig-clientclass2528,102584 +\subsection{The {\tt NimServer} Class}The2637,105757 +Figure~\ref{fig-nimserverclass}fig-nimserverclass2719,108607 +\subsection{The {\tt NimClient} Class}The2767,111333 +Client} class (Fig.~\ref{fig-clientclass}fig-clientclass2773,111655 +NimClient} (Fig.~\ref{fig-nimclientclass}fig-nimclientclass2774,111724 +\subsection{Testing the Nim Service}Testing2828,113749 +\section{Java Network Security Restrictions}Java2867,115250 +\label{sec-security}sec-security2868,115295 +so-called {\bf sandbox security model}\index{sandbox security model}, which refers to the practicesandbox2886,116351 +code}\index{trusted code}. For example, the Java class libraries would be placed in such atrusted2905,117356 +\section{Java Servlets and Java Server Pages}Java2955,119767 +\subsection{Java Server Pages}Java2981,121290 +extend over one or more lines. Figure~\ref{fig-jspcode}fig-jspcode2995,121776 +string value is displayed on the Web page (Fig.~\ref{fig-jspscreen}fig-jspscreen3051,123251 +} {fig-jspscreen}\label{pg-fig-jspscreen}pg-fig-jspscreen3055,123399 +\subsection{Java Servlets}Java3075,124412 +\subsection{A Simple Servlet Example}A3144,127278 +page, Figure~\ref{fig-hiservlet}fig-hiservlet3147,127387 +\subsection{The Nim Servlet}The3221,130455 +Figure~\ref{fig-nimscreen}fig-nimscreen3238,131157 +Figures~\ref{fig-nimservlet}fig-nimservlet3249,131789 +\subsection{Setting Up and Using Java Servlets}Setting3473,141254 -16.datastructs.tex,5023 +16.datastructs.tex,5198 \chapter{Data Structures: Lists, Stacks, and Queues}Data8,129 \label{chapter-datastructures}chapter-datastructures9,182 \label{pg-chapter-datastructures}pg-chapter-datastructures10,213 @@ -744,82 +715,82 @@ list}\index{list}list90,3844 \subsection{Using References to Link Objects}Using97,4225 A {\bf linked list}\index{linked list} is a list in which a linked134,5134 objects. A {\bf self-referential object}\index{self-referentialself-referential139,5381 -\label{fig-nodeuml}fig-nodeuml153,5791 -The {\tt next} variable is often called a {\bf link}\index{link}link156,5973 -example, Figure~\ref{fig-linkedlist}fig-linkedlist158,6103 -\subsection{Example: The Dynamic Phone List}Example:229,8929 -implement a phone list (Fig.~\ref{fig-phoneuml}fig-phoneuml233,9047 -definition shown in Figure~\ref{fig-phonelistnode}fig-phonelistnode242,9592 -\label{fig-phoneuml}fig-phoneuml246,9737 -\subsection{Manipulating the Phone List}Manipulating375,13697 -Figure~\ref{fig-phonelistprelim}fig-phonelistprelim395,14538 -\subsection*{*433,15851 -\label{fig-insertions}fig-insertions448,16579 -head} to point to the node [Figure~\ref{fig-insertions}fig-insertions455,16830 -traverse}\index{traverse}traverse457,16956 -[Figure~\ref{fig-insertions}fig-insertions459,17066 -{\tt null} (Fig.~\ref{fig-inserting}fig-inserting505,18824 -list [Figure~\ref{fig-inserting}fig-inserting507,18961 -node being inserted [Figure~\ref{fig-inserting}fig-inserting516,19532 -\subsection*{*532,20180 -\subsection*{*572,21966 -\subsection*{*630,24300 -As Figure~\ref{fig-remove}fig-remove645,25014 -the second node in the list [Figure~\ref{fig-removal}fig-removal679,26326 -\label{fig-removal}fig-removal692,26944 -[Figure~\ref{fig-removal}fig-removal702,27438 -\subsection*{*714,27770 -The {\tt main()} program in Figure~\ref{fig-testlist}fig-testlist721,28094 -\section{OBJECT-ORIENTED DESIGN: \\The List Abstract Data Type (ADT)}OBJECT-ORIENTED801,31082 -An {\bf Abstract Data Type (ADT)}\index{Abstract Data Type (ADT)} Abstract822,32236 -\subsection*{*856,33959 -Figure~\ref{fig-nodeclass}fig-nodeclass883,35144 -\subsection*{*926,36440 -\label{fig-listuml}fig-listuml939,36950 -Figure~\ref{fig-listadt}fig-listadt1022,39686 -The new {\tt insertAtFront()} method (Fig.~\ref{fig-listadt}fig-listadt1043,40561 -\noindent See Figure~\ref{fig-insertions}fig-insertions1056,40973 -\subsection*{*1081,42218 -objects. The {\tt main()} method in Figure~\ref{fig-testlistadt}fig-testlistadt1089,42633 -(Fig.~\ref{fig-phonerecorduml}fig-phonerecorduml1139,44277 -Figure~\ref{fig-phonerecord}fig-phonerecord1140,44338 -\label{fig-phonerecorduml}fig-phonerecorduml1147,44666 -\section{The Stack ADT}The1193,45669 -\noindent A {\bf stack}\index{stack}stack1195,45694 -last-in--first-out (LIFO)}\index{last-in--first-out (LIFO)} behavior last-in--first-out1198,45870 -stack (Fig.~\ref{fig-stack}fig-stack1205,46227 -\label{fig-stack}fig-stack1210,46383 -The stack operations are conventionally called {\bf push}\index{push}push1213,46436 -for insert, and {\bf pop}\index{pop}pop1214,46507 -\subsection{The {\tt Stack} Class}The1238,47711 -respectively (Fig.~\ref{fig-stackadt}fig-stackadt1251,48438 -\subsection{Testing the {\tt Stack} Class}Testing1314,50862 -(Fig.~\ref{fig-stackadttest}fig-stackadttest1323,51376 -\section{The {Queue} ADT}The1358,52420 -\noindent A {\bf queue}\index{queue}queue1359,52446 -(FIFO)}\index{first-in--first-out (FIFO)} behavior on the list. Thinkfirst-in--first-out1362,52643 -and you leave the line at the front (Fig.~\ref{fig-queue}fig-queue1364,52784 -enqueue}\index{enqueue}enqueue1368,52922 -\subsection{The {\tt Queue} Class}The1394,53879 -(Fig.~\ref{fig-queueadt}fig-queueadt1399,54097 -(Fig.~\ref{fig-queueadttest}fig-queueadttest1402,54289 -\section*{*1480,56397 -\section{From the Java Library: The Java Collections Framework and Generic Types}From1547,59397 -\subsection{Generic types in Java}Generic1563,60228 -\subsection*{*1645,63729 -that modifies Figure~\ref{fig-stackadttest}fig-stackadttest1672,64605 -\subsection{The {\tt List} interface \\and the {\tt LinkedList} class}The1676,64773 -Figure~\ref{fig-listtest}fig-listtest1715,66628 -\section{ Using the {\tt Set} and {\tt Map} Interfaces}1806,70008 -\subsection{Using the {\tt Set} Interface.}Using1812,70230 -\subsection*{*1864,73162 -Figure~\ref{fig-settest}fig-settest1885,74039 -\subsection{Using the {\tt Map} Interface.}Using1964,76696 -Figure~\ref{fig-maptest}fig-maptest2004,78497 -\section{ The Binary Search Tree Data Structure}2045,79726 -\label{fig-btree}fig-btree2062,80645 +} {fig-nodeuml}\label{pg-fig-nodeuml}pg-fig-nodeuml153,5791 +The {\tt next} variable is often called a {\bf link}\index{link}link156,5969 +example, Figure~\ref{fig-linkedlist}fig-linkedlist158,6099 +\subsection{Example: The Dynamic Phone List}Example:229,8925 +implement a phone list (Fig.~\ref{fig-phoneuml}fig-phoneuml233,9043 +definition shown in Figure~\ref{fig-phonelistnode}fig-phonelistnode242,9588 +} {fig-phoneuml}\label{pg-fig-phoneuml}pg-fig-phoneuml246,9733 +\subsection{Manipulating the Phone List}Manipulating375,13689 +Figure~\ref{fig-phonelistprelim}fig-phonelistprelim395,14530 +\subsection*{*433,15843 +} {fig-insertions}\label{pg-fig-insertions}pg-fig-insertions448,16571 +head} to point to the node [Figure~\ref{fig-insertions}fig-insertions455,16818 +traverse}\index{traverse}traverse457,16944 +[Figure~\ref{fig-insertions}fig-insertions459,17054 +{\tt null} (Fig.~\ref{fig-inserting}fig-inserting505,18812 +list [Figure~\ref{fig-inserting}fig-inserting507,18949 +node being inserted [Figure~\ref{fig-inserting}fig-inserting516,19520 +\subsection*{*532,20168 +\subsection*{*572,21954 +\subsection*{*630,24288 +As Figure~\ref{fig-remove}fig-remove645,25002 +the second node in the list [Figure~\ref{fig-removal}fig-removal679,26314 +} {fig-removal}\label{pg-fig-removal}pg-fig-removal692,26932 +[Figure~\ref{fig-removal}fig-removal702,27422 +\subsection*{*714,27754 +The {\tt main()} program in Figure~\ref{fig-testlist}fig-testlist721,28078 +\section{OBJECT-ORIENTED DESIGN: \\The List Abstract Data Type (ADT)}OBJECT-ORIENTED801,31066 +An {\bf Abstract Data Type (ADT)}\index{Abstract Data Type (ADT)} Abstract822,32220 +\subsection*{*856,33943 +Figure~\ref{fig-nodeclass}fig-nodeclass883,35128 +\subsection*{*926,36424 +} {fig-listuml}\label{pg-fig-listuml}pg-fig-listuml939,36934 +Figure~\ref{fig-listadt}fig-listadt1022,39666 +The new {\tt insertAtFront()} method (Fig.~\ref{fig-listadt}fig-listadt1043,40541 +\noindent See Figure~\ref{fig-insertions}fig-insertions1056,40953 +\subsection*{*1081,42198 +objects. The {\tt main()} method in Figure~\ref{fig-testlistadt}fig-testlistadt1089,42613 +(Fig.~\ref{fig-phonerecorduml}fig-phonerecorduml1139,44257 +Figure~\ref{fig-phonerecord}fig-phonerecord1140,44318 +} {fig-phonerecorduml}\label{pg-fig-phonerecorduml}pg-fig-phonerecorduml1147,44646 +\section{The Stack ADT}The1193,45645 +\noindent A {\bf stack}\index{stack}stack1195,45670 +last-in--first-out (LIFO)}\index{last-in--first-out (LIFO)} behavior last-in--first-out1198,45846 +stack (Fig.~\ref{fig-stack}fig-stack1205,46203 +} {fig-stack}\label{pg-fig-stack}pg-fig-stack1210,46359 +The stack operations are conventionally called {\bf push}\index{push}push1213,46408 +for insert, and {\bf pop}\index{pop}pop1214,46479 +\subsection{The {\tt Stack} Class}The1238,47683 +respectively (Fig.~\ref{fig-stackadt}fig-stackadt1251,48410 +\subsection{Testing the {\tt Stack} Class}Testing1314,50834 +(Fig.~\ref{fig-stackadttest}fig-stackadttest1323,51348 +\section{The {Queue} ADT}The1358,52392 +\noindent A {\bf queue}\index{queue}queue1359,52418 +(FIFO)}\index{first-in--first-out (FIFO)} behavior on the list. Thinkfirst-in--first-out1362,52615 +and you leave the line at the front (Fig.~\ref{fig-queue}fig-queue1364,52756 +enqueue}\index{enqueue}enqueue1368,52894 +\subsection{The {\tt Queue} Class}The1394,53851 +(Fig.~\ref{fig-queueadt}fig-queueadt1399,54069 +(Fig.~\ref{fig-queueadttest}fig-queueadttest1402,54261 +\section*{*1480,56369 +\section{From the Java Library: The Java Collections Framework and Generic Types}From1547,59369 +\subsection{Generic types in Java}Generic1563,60200 +\subsection*{*1645,63701 +that modifies Figure~\ref{fig-stackadttest}fig-stackadttest1672,64577 +\subsection{The {\tt List} interface \\and the {\tt LinkedList} class}The1676,64745 +Figure~\ref{fig-listtest}fig-listtest1715,66600 +\section{ Using the {\tt Set} and {\tt Map} Interfaces}1806,69980 +\subsection{Using the {\tt Set} Interface.}Using1812,70202 +\subsection*{*1864,73134 +Figure~\ref{fig-settest}fig-settest1885,74011 +\subsection{Using the {\tt Map} Interface.}Using1964,76668 +Figure~\ref{fig-maptest}fig-maptest2004,78469 +\section{ The Binary Search Tree Data Structure}2045,79698 +} {fig-btree}\label{pg-fig-btree}pg-fig-btree2062,80617 -2.objects.tex,4569 +2.objects.tex,4487 \chapter{Objects: Using, Creating, and Defining}Objects:6,125 \label{chapter-objects}chapter-objects7,174 \section{Introduction}Introduction40,1273 @@ -836,69 +807,67 @@ colors. Table~\ref{table-colors}table-colors510,20058 in Figure~\ref{fig-hw2appletclass}fig-hw2appletclass578,22934 Figure~\ref{fig-drawrect}fig-drawrect611,24059 review Section~\ref{sec-applet}sec-applet615,24339 -\label{fig-drawrect}fig-drawrect623,24707 -\label{pg-fig-drawrect}pg-fig-drawrect624,24728 -\section{Class Definition}Class627,24767 -\label{sec-classdef}sec-classdef628,24794 -\label{pg-sec-classdef}pg-sec-classdef629,24815 -\subsection{The {\tt Riddle} Class}The657,25952 -Figure~\ref{fig-riddleclass2}fig-riddleclass2689,27428 -\subsection{The {\tt RiddleUser} Class}The739,29249 -Figure~\ref{fig-p63f2}fig-p63f2771,30907 -\label{fig-p63f2}fig-p63f2780,31400 -\label{pg-fig-p63f2}pg-fig-p63f2781,31418 -\subsection{Object Instantiation: Creating {\tt Riddle} Instances}Object801,32358 -\noindent Figure~\ref{fig-riddleuser}fig-riddleuser803,32426 -\subsection{Interacting with {\tt Riddle}s }Interacting859,34400 -\subsection{Define, Create, Use}Define,899,35825 -\label{sect-mantra}sect-mantra900,35858 -(Fig.~\ref{fig-riddleclass2}fig-riddleclass2922,36621 -(Fig.~\ref{fig-riddleuser}fig-riddleuser935,36900 -\section{CASE STUDY: Simulating a Two-Person Game}CASE948,37174 -\subsection{Designing a OneRowNim class}Designing966,38222 -\subsubsection*{*967,38263 -\subsubsection*{*978,38803 -\subsubsection*{*991,39556 -\subsubsection*{*1029,41619 -\subsection{Defining the {\tt OneRowNim} Class}Defining1064,43422 -\subsubsection*{*1070,43645 -\subsubsection*{*1094,44578 -Figure~\ref{fig-form}fig-form1105,45047 -(Fig.~\ref{fig-riddleclass2}fig-riddleclass21135,46016 -declaring variables that were described in Section~\ref{sec-vardecl}sec-vardecl1139,46203 -\subsubsection*{*1218,49952 -\subsubsection*{*1264,51561 -\subsubsection*{*1283,52422 -class definition of {\tt OneRowNim}, in Figure~\ref{fig-ornmheaders}fig-ornmheaders1381,57284 -\subsubsection*{*1385,57445 -The completed class definition is shown in Figure~\ref{fig-orndef}fig-orndef1460,60350 -\subsection{Testing the {\tt OneRowNim} Class}Testing1499,61411 -Section~\ref{sect-mantra}sect-mantra1502,61522 -\subsection{Flow of Control: Method Call and Return}Flow1619,65888 -\label{sec-methodcall}sec-methodcall1620,65941 -\label{pg-sec-methodcall}pg-sec-methodcall1621,65964 -statement located in another method. Figure~\ref{fig-methodcall}fig-methodcall1632,66457 -\noindent Recall that if a {\tt void}\index{void}void1654,67441 -\subsection{Tracing the {\tt OneRowNim} Program}Tracing1663,67833 -\label{subsect-trace}subsect-trace1664,67882 -we will perform a trace of its execution. Figure~\ref{fig-trace}fig-trace1667,67978 -Figure~\ref{fig-trace}fig-trace1717,69600 -\subsection{Object-Oriented Design: Basic Principles}Object-Oriented1766,71955 -\item {\bf Encapsulation\index{Encapsulation Principle}.}Encapsulation1775,72238 -\section*{*1828,74799 -\section{From the Java Library: {\tt java.util.Scanner}.}From1871,77057 -\label{pg-sec-scannerclass}pg-sec-scannerclass1872,77115 -\subsection{Keyboard Input with the {\tt Scanner} Class} Keyboard1915,79630 -number, or string from the keyboard. The program in Figure~\ref{fig-scannerprog}fig-scannerprog1943,80775 -\subsection{Keyboard Input with the {\tt KeyboardReader} Class} Keyboard2074,85814 -TestKeyboardReader} class definition in Figure~\ref{fig-kbreaderprog}fig-kbreaderprog2099,87252 -For the {\tt Riddle} class (Fig.~\ref{fig-riddleclass2}fig-riddleclass22273,92012 -For {\tt RiddleUser} class (Fig.~\ref{fig-riddleuser}fig-riddleuser2285,92332 -\item In the {\tt RiddleUser} class (Fig.~\ref{fig-riddleuser}fig-riddleuser2397,95916 -\item In the {\tt RiddleUser} class (Fig.~\ref{fig-riddleuser}fig-riddleuser2405,96238 -diagram to depict this relationship. See Figure~\ref{fig-p63f2}fig-p63f22596,102974 +\label{pg-fig-drawrect}pg-fig-drawrect624,24724 +\section{Class Definition}Class627,24763 +\label{sec-classdef}sec-classdef628,24790 +\label{pg-sec-classdef}pg-sec-classdef629,24811 +\subsection{The {\tt Riddle} Class}The657,25948 +Figure~\ref{fig-riddleclass2}fig-riddleclass2689,27424 +\subsection{The {\tt RiddleUser} Class}The739,29245 +Figure~\ref{fig-p63f2}fig-p63f2771,30903 +\label{pg-fig-p63f2}pg-fig-p63f2781,31410 +\subsection{Object Instantiation: Creating {\tt Riddle} Instances}Object801,32350 +\noindent Figure~\ref{fig-riddleuser}fig-riddleuser803,32418 +\subsection{Interacting with {\tt Riddle}s }Interacting859,34392 +\subsection{Define, Create, Use}Define,899,35817 +\label{sect-mantra}sect-mantra900,35850 +(Fig.~\ref{fig-riddleclass2}fig-riddleclass2922,36613 +(Fig.~\ref{fig-riddleuser}fig-riddleuser935,36892 +\section{CASE STUDY: Simulating a Two-Person Game}CASE948,37166 +\subsection{Designing a OneRowNim class}Designing966,38214 +\subsubsection*{*967,38255 +\subsubsection*{*978,38795 +\subsubsection*{*991,39548 +\subsubsection*{*1029,41611 +\subsection{Defining the {\tt OneRowNim} Class}Defining1064,43414 +\subsubsection*{*1070,43637 +\subsubsection*{*1094,44570 +Figure~\ref{fig-form}fig-form1105,45039 +(Fig.~\ref{fig-riddleclass2}fig-riddleclass21135,46008 +declaring variables that were described in Section~\ref{sec-vardecl}sec-vardecl1139,46195 +\subsubsection*{*1218,49944 +\subsubsection*{*1264,51553 +\subsubsection*{*1283,52414 +class definition of {\tt OneRowNim}, in Figure~\ref{fig-ornmheaders}fig-ornmheaders1381,57276 +\subsubsection*{*1385,57437 +The completed class definition is shown in Figure~\ref{fig-orndef}fig-orndef1460,60342 +\subsection{Testing the {\tt OneRowNim} Class}Testing1499,61403 +Section~\ref{sect-mantra}sect-mantra1502,61514 +\subsection{Flow of Control: Method Call and Return}Flow1619,65880 +\label{sec-methodcall}sec-methodcall1620,65933 +\label{pg-sec-methodcall}pg-sec-methodcall1621,65956 +statement located in another method. Figure~\ref{fig-methodcall}fig-methodcall1632,66449 +\noindent Recall that if a {\tt void}\index{void}void1654,67433 +\subsection{Tracing the {\tt OneRowNim} Program}Tracing1663,67825 +\label{subsect-trace}subsect-trace1664,67874 +we will perform a trace of its execution. Figure~\ref{fig-trace}fig-trace1667,67970 +Figure~\ref{fig-trace}fig-trace1717,69592 +\subsection{Object-Oriented Design: Basic Principles}Object-Oriented1766,71947 +\item {\bf Encapsulation\index{Encapsulation Principle}.}Encapsulation1775,72230 +\section*{*1828,74791 +\section{From the Java Library: {\tt java.util.Scanner}.}From1871,77049 +\label{pg-sec-scannerclass}pg-sec-scannerclass1872,77107 +\subsection{Keyboard Input with the {\tt Scanner} Class} Keyboard1915,79622 +number, or string from the keyboard. The program in Figure~\ref{fig-scannerprog}fig-scannerprog1943,80767 +\subsection{Keyboard Input with the {\tt KeyboardReader} Class} Keyboard2074,85806 +TestKeyboardReader} class definition in Figure~\ref{fig-kbreaderprog}fig-kbreaderprog2099,87244 +For the {\tt Riddle} class (Fig.~\ref{fig-riddleclass2}fig-riddleclass22273,92004 +For {\tt RiddleUser} class (Fig.~\ref{fig-riddleuser}fig-riddleuser2285,92324 +\item In the {\tt RiddleUser} class (Fig.~\ref{fig-riddleuser}fig-riddleuser2397,95908 +\item In the {\tt RiddleUser} class (Fig.~\ref{fig-riddleuser}fig-riddleuser2405,96230 +diagram to depict this relationship. See Figure~\ref{fig-p63f2}fig-p63f22596,102966 -3.methods.tex,5980 +3.methods.tex,5742 \chapter{Methods: Communicating with Objects}Methods:6,122 \label{chapter-methods}chapter-methods7,168 \label{pg-chapter-methods}pg-chapter-methods8,192 @@ -921,252 +890,235 @@ given in Figure~\ref{fig-ornclass2}fig-ornclass2308,13468 parameter\index{parameter}parameter394,16752 \subsection{Passing an {\tt int} value to a {\tt OneRowNim} method.}Passing437,18361 Figure~\ref{fig-testorn1}fig-testorn1443,18692 -\label{fig-parameps}fig-parameps474,20005 -\subsection{Passing keyboard input to {\tt takeSticks()}}Passing490,20822 -in Figure~\ref{fig-testorn1}fig-testorn1493,20954 -{\tt main()} method shown in Figure~\ref{fig-testorn2}fig-testorn2498,21293 -a {\it method invocation}\index{method invocation}.method549,22903 -\item Modify the {\tt OneRowNim} class of Figure~\ref{fig-testorn2}fig-testorn2554,23043 -\section{Constructor Methods}Constructor568,23769 -\label{sec-constructors}sec-constructors569,23799 -As you recall from Chapter 0, a {\bf constructor\index{constructor}constructor576,24147 -\subsection{Default Constructors}Default725,30015 -\label{sec-defaultconstructors}sec-defaultconstructors726,30049 -constructor\index{constructor default}. The default constructor takesconstructor732,30342 -\subsection{Constructor Overloading and Method Signatures}Constructor759,31186 -\subsection{Constructor Invocation}Constructor863,34919 -\section{Retrieving Information from an Object}Retrieving902,36374 -\subsection{Invoking a Method That Returns a Value}Invoking959,38758 -\subsection{An Expanded {\tt OneRowNim} Class}An1017,40914 -\noindent Figure~\ref{fig-ornuml2}fig-ornuml21037,41996 -\label{fig-ornuml2}fig-ornuml21056,42542 -in Figure~\ref{fig-testorn3}fig-testorn31062,42786 -\section{Passing a Value and Passing a Reference}Passing1126,44590 -\label{sec-passby}sec-passby1127,44640 -\label{pg-sec-passby}pg-sec-passby1128,44659 -whether you are passing a value of primitive type\index{primitiveprimitive1131,44757 -type\index{reference type} (such as ``Hello'' or {\tt game1}). Whenreference1133,44879 -shown in Figure~\ref{fig-primcall}fig-primcall1162,45743 -\label{fig-vparameps}fig-vparameps1202,47477 -(Fig.~\ref{fig-refcall}fig-refcall1217,48228 -\section{Flow of Control: Control Structures}Flow1300,51486 -\subsection{The Simple If Statement}The1334,53046 -\label{sec-if}sec-if1335,53083 -\label{pg-sec-if}pg-sec-if1336,53098 -\noindent Semantically, the if statement\index{if statement} has the followingif1397,55160 -\noindent The flowchart in Figure~\ref{fig-getplayerflow}fig-getplayerflow1429,56425 -that when a {\tt return}\index{return statement} statement is executedreturn1436,56794 -\subsection{The {\tt if-else} Statement}The1502,59273 -\label{sec-ifelse}sec-ifelse1503,59314 -\label{pg-sec-ifelse}pg-sec-ifelse1504,59333 -Semantically, the if-else statement\index{if-else statement} has theif-else1547,61036 -interpretation is shown in Figure~\ref{fig-ifelsechart}fig-ifelsechart1554,61423 -\subsection{The Nested if/else Multiway Selection Structure}The1556,61481 -\label{sec-multi}sec-multi1557,61542 -\label{pg-sec-multi}pg-sec-multi1558,61560 -if-else statement, thereby creating a {\it nested\index{nestednested1565,61989 -{\bf multiway selection\index{multiway selection}}. As shown inmultiway1569,62255 -Figure~\ref{fig-multiway}fig-multiway1570,62319 -\label{fig-multiway}fig-multiway1577,62626 -Figure~\ref{fig-multiway}fig-multiway1585,62957 -\subsection{The While Structure}The1704,66752 -The {\bf while statement}\index{while statement} is a loop statementwhile1760,68919 -\noindent In pseudocode, the {\it while structure}\index{while structure} wouldwhile1795,70440 -\label{fig-whileflow}fig-whileflow1825,71558 -The semantics of the while structure are shown in Figure~\ref{fig-whileflow}fig-whileflow1831,71735 -\section{Testing an Improved {\tt OneRowNim}}Testing1848,72331 -Figure~\ref{fig-ornclass}fig-ornclass1918,75348 -in Figure~\ref{fig-ornclass}fig-ornclass1929,76106 -Figure~\ref{fig-tornclass}fig-tornclass2009,78238 -\section*{*2071,80891 -\section{{\bf From the Java Library} {\tt java.lang.Object}}2109,82851 -\label{sec-tostring}sec-tostring2110,82912 -\noindent The {\tt toString()}\index{toString() method} methodtoString()2144,84156 -and then run the program shown in Figure~\ref{fig-orntostring}fig-orntostring2231,87386 -\section{Object-Oriented Design: Inheritance and Polymorphism}Object-Oriented2272,88722 -\section{Drawing Lines and Defining Graphical Methods (Optional)}Drawing2377,93771 -Figure~\ref{fig-drawsticksprog}fig-drawsticksprog2434,96439 -\label{fig-drawstickseps}fig-drawstickseps2511,98949 -\item A {\it formal parameter\index{parameter}parameter2567,99763 -\item The {\it signature\index{signature}signature2584,100549 -\item A {\it constructor\index{constructor}constructor2589,100758 -{\it information hiding\index{Information Hiding Principle}}.Information2595,101037 +\subsection{Passing keyboard input to {\tt takeSticks()}}Passing490,20818 +in Figure~\ref{fig-testorn1}fig-testorn1493,20950 +{\tt main()} method shown in Figure~\ref{fig-testorn2}fig-testorn2498,21289 +a {\it method invocation}\index{method invocation}.method549,22899 +\item Modify the {\tt OneRowNim} class of Figure~\ref{fig-testorn2}fig-testorn2554,23039 +\section{Constructor Methods}Constructor568,23765 +\label{sec-constructors}sec-constructors569,23795 +As you recall from Chapter 0, a {\bf constructor\index{constructor}constructor576,24143 +\subsection{Default Constructors}Default725,30011 +\label{sec-defaultconstructors}sec-defaultconstructors726,30045 +constructor\index{constructor default}. The default constructor takesconstructor732,30338 +\subsection{Constructor Overloading and Method Signatures}Constructor759,31182 +\subsection{Constructor Invocation}Constructor863,34915 +\section{Retrieving Information from an Object}Retrieving902,36370 +\subsection{Invoking a Method That Returns a Value}Invoking959,38754 +\subsection{An Expanded {\tt OneRowNim} Class}An1017,40910 +\noindent Figure~\ref{fig-ornuml2}fig-ornuml21037,41992 +\label{fig-ornuml2}fig-ornuml21056,42538 +in Figure~\ref{fig-testorn3}fig-testorn31062,42782 +\section{Passing a Value and Passing a Reference}Passing1126,44586 +\label{sec-passby}sec-passby1127,44636 +\label{pg-sec-passby}pg-sec-passby1128,44655 +whether you are passing a value of primitive type\index{primitiveprimitive1131,44753 +type\index{reference type} (such as ``Hello'' or {\tt game1}). Whenreference1133,44875 +shown in Figure~\ref{fig-primcall}fig-primcall1162,45739 +(Fig.~\ref{fig-refcall}fig-refcall1217,48220 +\section{Flow of Control: Control Structures}Flow1300,51478 +\subsection{The Simple If Statement}The1334,53038 +\label{sec-if}sec-if1335,53075 +\label{pg-sec-if}pg-sec-if1336,53090 +\noindent Semantically, the if statement\index{if statement} has the followingif1397,55152 +\noindent The flowchart in Figure~\ref{fig-getplayerflow}fig-getplayerflow1429,56417 +that when a {\tt return}\index{return statement} statement is executedreturn1436,56786 +\subsection{The {\tt if-else} Statement}The1502,59265 +\label{sec-ifelse}sec-ifelse1503,59306 +\label{pg-sec-ifelse}pg-sec-ifelse1504,59325 +Semantically, the if-else statement\index{if-else statement} has theif-else1547,61028 +interpretation is shown in Figure~\ref{fig-ifelsechart}fig-ifelsechart1554,61415 +\subsection{The Nested if/else Multiway Selection Structure}The1556,61473 +\label{sec-multi}sec-multi1557,61534 +\label{pg-sec-multi}pg-sec-multi1558,61552 +if-else statement, thereby creating a {\it nested\index{nestednested1565,61981 +{\bf multiway selection\index{multiway selection}}. As shown inmultiway1569,62247 +Figure~\ref{fig-multiway}fig-multiway1570,62311 +Figure~\ref{fig-multiway}fig-multiway1585,62945 +\subsection{The While Structure}The1704,66740 +The {\bf while statement}\index{while statement} is a loop statementwhile1760,68907 +\noindent In pseudocode, the {\it while structure}\index{while structure} wouldwhile1795,70428 +The semantics of the while structure are shown in Figure~\ref{fig-whileflow}fig-whileflow1831,71719 +\section{Testing an Improved {\tt OneRowNim}}Testing1848,72315 +Figure~\ref{fig-ornclass}fig-ornclass1918,75332 +in Figure~\ref{fig-ornclass}fig-ornclass1929,76090 +Figure~\ref{fig-tornclass}fig-tornclass2009,78222 +\section*{*2071,80875 +\section{{\bf From the Java Library} {\tt java.lang.Object}}2109,82835 +\label{sec-tostring}sec-tostring2110,82896 +\noindent The {\tt toString()}\index{toString() method} methodtoString()2144,84140 +and then run the program shown in Figure~\ref{fig-orntostring}fig-orntostring2231,87370 +\section{Object-Oriented Design: Inheritance and Polymorphism}Object-Oriented2272,88706 +\section{Drawing Lines and Defining Graphical Methods (Optional)}Drawing2377,93755 +Figure~\ref{fig-drawsticksprog}fig-drawsticksprog2434,96423 +\item A {\it formal parameter\index{parameter}parameter2567,99741 +\item The {\it signature\index{signature}signature2584,100527 +\item A {\it constructor\index{constructor}constructor2589,100736 +{\it information hiding\index{Information Hiding Principle}}.Information2595,101015 -4.uis.tex,5044 +4.uis.tex,4552 \chapter{Input/Output: Designing the User Interface}Input/Output:6,130 \label{chapter-io}chapter-io7,183 \section{Introduction}Introduction36,989 \section{The User Interface}The61,2333 Figure~\ref{fig-ui}fig-ui89,3876 -\label{fig-ui}fig-ui96,4161 -\label{pg-fig-ui}pg-fig-ui97,4176 -the relationship shown in Figure~\ref{fig-ui}fig-ui101,4278 -\section{A Command-Line Interface}A110,4742 -console (Fig.~\ref{fig-command-line}fig-command-line116,5033 -environment, as in Figure~\ref{fig-console}fig-console129,5501 -\label{fig-console}fig-console134,5622 -\label{pg-fig-console}pg-fig-console135,5642 -which data flow (Fig.~\ref{fig-streams}fig-streams145,6085 -\label{fig-streams}fig-streams155,6497 -\label{pg-fig-streams}pg-fig-streams156,6517 -associated with the keyboard (Fig.~\ref{fig-streams}fig-streams162,6748 -\subsection{Using a {\tt BufferedReader} to Input Strings from the Keyboard}Using169,7156 -\label{fig-buffrdr}fig-buffrdr187,8071 -\label{pg-fig-buffrdr}pg-fig-buffrdr188,8091 -Figure~\ref{fig-buffrdr}fig-buffrdr191,8129 -\subsection{Inputting Numbers from the Keyboard}Inputting240,10365 -\subsection{Designing a Keyboard Reader Class}Designing304,12874 -Figure~\ref{fig-keybrdrdr}fig-keybrdrdr320,13428 -Note that Figure~\ref{fig-keybrdrdr}fig-keybrdrdr354,15047 -Figure~\ref{fig-keybrdrdrclass}fig-keybrdrdrclass380,16420 -\subsection{Designing a Command-Line Interface}Designing481,20331 -described in Figure~\ref{fig-ui}fig-ui486,20569 -Figure~\ref{fig-greeter}fig-greeter521,22023 -Figure~\ref{fig-greeterapp}fig-greeterapp537,22752 -\section{A Graphical User Interface (GUI)}A623,25907 -\subsection{Java's GUI Components}Java's654,27539 -Figure~\ref{fig-guiscreen}fig-guiscreen666,28133 -\subsection{Class Inheritance: Extending a Superclass}Class716,30721 -\label{fig-swing1}fig-swing1772,33359 -\label{pg-fig-swing1}pg-fig-swing1773,33378 -Figure~\ref{fig-swing1}fig-swing1779,33579 -\subsection{Top-level Windows}Top-level802,34586 -Referring again to Figure~\ref{fig-swing1}fig-swing1804,34618 -\label{fig-framecapture}fig-framecapture830,35794 -\label{pg-fig-framecapture}pg-fig-framecapture831,35819 -Figure~\ref{fig-framecapture}fig-framecapture834,35862 -Figure~\ref{fig-simpleframe}fig-simpleframe845,36521 -JFrame} (Fig.~\ref{fig-framesubclass}fig-framesubclass872,37277 -inherited from {\tt JFrame}. Figure~\ref{fig-framesubclass}fig-framesubclass902,38491 -\subsection{GUI Components for Input, Output, and Control}GUI909,38863 -be necessary to give it some components. Figure~\ref{fig-swing2}fig-swing2912,38992 -\label{fig-swing2}fig-swing2931,39994 -\label{pg-fig-swing2}pg-fig-swing2932,40013 -(Fig.~\ref{fig-guiscreen}fig-guiscreen944,40650 -\label{fig-constructors}fig-constructors961,41336 -\label{pg-fig-constructors}pg-fig-constructors962,41361 -Figure~\ref{fig-constructors}fig-constructors965,41404 -\subsection{Adding GUI Components to a Top-Level Window}Adding993,42509 -Container} (Fig.~\ref{fig-swing1}fig-swing1997,42704 -(Fig.~\ref{fig-borderlayout}fig-borderlayout1024,43927 -\label{fig-borderlayout}fig-borderlayout1029,44121 -\label{pg-fig-borderlayout}pg-fig-borderlayout1030,44146 -\subsection{Controlling the GUI's Action}Controlling1078,46003 -event. As Figure~\ref{fig-eventmodel}fig-eventmodel1084,46324 -Figure~\ref{fig-eventhier}fig-eventhier1121,47771 -\label{fig-eventhier}fig-eventhier1133,48395 -\label{pg-fig-eventhier}pg-fig-eventhier1134,48417 -For our simple GUI, the methods described in Figure~\ref{fig-constructors}fig-constructors1162,49693 -\subsection{The ActionListener Interface}The1168,49963 -\subsection{Connecting the GUI to the Computational Object}Connecting1312,55932 -Figure~\ref{fig-simplegui}fig-simplegui1314,55993 -illustrated in Figure~\ref{fig-greeter}fig-greeter1393,59068 -(Fig.~\ref{fig-command-line}fig-command-line1396,59253 -\subsection{Using the GUI in a Java Application}Using1443,61544 -\subsection{Using the GUI in a Java Applet}Using1473,62658 -as a subclass of {\tt JFrame}. Figure~\ref{fig-guipanel}fig-guipanel1508,63879 -shown in Figure~\ref{fig-greeterapplet}fig-greeterapplet1587,66234 -\label{fig-greeterapplet}fig-greeterapplet1594,66461 -\label{pg-fig-greeterapplet}pg-fig-greeterapplet1595,66487 -\section{Case Study: The One Row Nim Game }Case1598,66531 -\subsection{A Command-line Interface to {\tt OneRowNim}}A1630,68222 -KeyboardReader} (Fig.~\ref{fig-keybrdrdr}fig-keybrdrdr1635,68492 -shown in Figure~\ref{fig-ornapp}fig-ornapp1637,68627 -Figure~\ref{fig-ornapp}fig-ornapp1710,72238 -\subsection{A GUI for {\tt OneRowNim}}A1824,77115 -Figure~\ref{fig-orngui}fig-orngui1970,82737 -(Fig.~\ref{fig-simplegui}fig-simplegui1974,82991 -\section{From the Java Library: {\tt java.io.File} \\ and File Input (Optional)}From2064,87147 -\label{pg-sec-fileclass}pg-sec-fileclass2067,87311 -\subsection{File Input with the {\tt File} and {\tt Scanner} Classes} File2091,88548 -The program in Figure~\ref{fig-fileprog}fig-fileprog2167,92073 +\label{pg-fig-ui}pg-fig-ui97,4172 +the relationship shown in Figure~\ref{fig-ui}fig-ui101,4274 +\section{A Command-Line Interface}A110,4738 +console (Fig.~\ref{fig-command-line}fig-command-line116,5029 +environment, as in Figure~\ref{fig-console}fig-console129,5497 +\label{pg-fig-console}pg-fig-console135,5634 +which data flow (Fig.~\ref{fig-streams}fig-streams145,6077 +\label{pg-fig-streams}pg-fig-streams156,6505 +associated with the keyboard (Fig.~\ref{fig-streams}fig-streams162,6736 +\subsection{Using a {\tt BufferedReader} to Input Strings from the Keyboard}Using169,7144 +\label{pg-fig-buffrdr}pg-fig-buffrdr188,8075 +Figure~\ref{fig-buffrdr}fig-buffrdr191,8113 +\subsection{Inputting Numbers from the Keyboard}Inputting240,10349 +\subsection{Designing a Keyboard Reader Class}Designing304,12858 +Figure~\ref{fig-keybrdrdr}fig-keybrdrdr320,13412 +Note that Figure~\ref{fig-keybrdrdr}fig-keybrdrdr354,15031 +Figure~\ref{fig-keybrdrdrclass}fig-keybrdrdrclass380,16404 +\subsection{Designing a Command-Line Interface}Designing481,20315 +described in Figure~\ref{fig-ui}fig-ui486,20553 +Figure~\ref{fig-greeter}fig-greeter521,22007 +Figure~\ref{fig-greeterapp}fig-greeterapp537,22736 +\section{A Graphical User Interface (GUI)}A623,25891 +\subsection{Java's GUI Components}Java's654,27523 +Figure~\ref{fig-guiscreen}fig-guiscreen666,28117 +\subsection{Class Inheritance: Extending a Superclass}Class716,30705 +\label{pg-fig-swing1}pg-fig-swing1773,33358 +Figure~\ref{fig-swing1}fig-swing1779,33559 +\subsection{Top-level Windows}Top-level802,34566 +Referring again to Figure~\ref{fig-swing1}fig-swing1804,34598 +\label{pg-fig-framecapture}pg-fig-framecapture831,35795 +Figure~\ref{fig-framecapture}fig-framecapture834,35838 +Figure~\ref{fig-simpleframe}fig-simpleframe845,36497 +JFrame} (Fig.~\ref{fig-framesubclass}fig-framesubclass872,37253 +inherited from {\tt JFrame}. Figure~\ref{fig-framesubclass}fig-framesubclass902,38467 +\subsection{GUI Components for Input, Output, and Control}GUI909,38839 +be necessary to give it some components. Figure~\ref{fig-swing2}fig-swing2912,38968 +\label{pg-fig-swing2}pg-fig-swing2932,39985 +(Fig.~\ref{fig-guiscreen}fig-guiscreen944,40622 +\label{pg-fig-constructors}pg-fig-constructors962,41329 +Figure~\ref{fig-constructors}fig-constructors965,41372 +\subsection{Adding GUI Components to a Top-Level Window}Adding993,42477 +Container} (Fig.~\ref{fig-swing1}fig-swing1997,42672 +(Fig.~\ref{fig-borderlayout}fig-borderlayout1024,43895 +\label{pg-fig-borderlayout}pg-fig-borderlayout1030,44110 +\subsection{Controlling the GUI's Action}Controlling1078,45967 +event. As Figure~\ref{fig-eventmodel}fig-eventmodel1084,46288 +Figure~\ref{fig-eventhier}fig-eventhier1121,47735 +\label{pg-fig-eventhier}pg-fig-eventhier1134,48377 +For our simple GUI, the methods described in Figure~\ref{fig-constructors}fig-constructors1162,49653 +\subsection{The ActionListener Interface}The1168,49923 +\subsection{Connecting the GUI to the Computational Object}Connecting1312,55892 +Figure~\ref{fig-simplegui}fig-simplegui1314,55953 +illustrated in Figure~\ref{fig-greeter}fig-greeter1393,59028 +(Fig.~\ref{fig-command-line}fig-command-line1396,59213 +\subsection{Using the GUI in a Java Application}Using1443,61504 +\subsection{Using the GUI in a Java Applet}Using1473,62618 +as a subclass of {\tt JFrame}. Figure~\ref{fig-guipanel}fig-guipanel1508,63839 +shown in Figure~\ref{fig-greeterapplet}fig-greeterapplet1587,66194 +\label{pg-fig-greeterapplet}pg-fig-greeterapplet1595,66443 +\section{Case Study: The One Row Nim Game }Case1598,66487 +\subsection{A Command-line Interface to {\tt OneRowNim}}A1630,68178 +KeyboardReader} (Fig.~\ref{fig-keybrdrdr}fig-keybrdrdr1635,68448 +shown in Figure~\ref{fig-ornapp}fig-ornapp1637,68583 +Figure~\ref{fig-ornapp}fig-ornapp1710,72194 +\subsection{A GUI for {\tt OneRowNim}}A1824,77071 +Figure~\ref{fig-orngui}fig-orngui1970,82693 +(Fig.~\ref{fig-simplegui}fig-simplegui1974,82947 +\section{From the Java Library: {\tt java.io.File} \\ and File Input (Optional)}From2064,87103 +\label{pg-sec-fileclass}pg-sec-fileclass2067,87267 +\subsection{File Input with the {\tt File} and {\tt Scanner} Classes} File2091,88504 +The program in Figure~\ref{fig-fileprog}fig-fileprog2167,92029 -5.data.tex,5692 +5.data.tex,5663 \chapter{Java Data and Operators}Java6,110 \label{chapter-models}chapter-models7,144 \label{pg-chapter-models}pg-chapter-models8,167 \section{Introduction}Introduction43,1311 dominoes as shown in Figure~\ref{fig-chessboard}fig-chessboard74,2959 -\label{fig-chessboard}fig-chessboard85,3513 -\section{Boolean Data and Operators}Boolean104,4338 -type is derived from the work of British mathematician George Boole\index{Boole, George}, Boole,108,4570 -\subsection{Boolean (or Logical) Operations}Boolean154,6226 -\subsection{Precedence and Associativity}Precedence234,10165 -Java, the \&\& \mbox{operator} has higher precedence\index{precedence}precedence265,11299 -\subsection{Short-Circuit Evaluation}Short-Circuit359,14607 -\section*{*452,17624 -\subsection{Using Booleans in OneRowNim}Using497,20275 -Figure~\ref{fig-ornclass}fig-ornclass502,20492 -\noindent The remaining changes are shown in Figure~\ref{fig-newonerow}fig-newonerow552,22322 -\section{Numeric Data and Operators}Numeric652,25235 -\subsection{Numeric Operations}Numeric762,30713 -\TBT{2pc}{The standard arithmetic operators\index{arithmetic operators} in Java}arithmetic773,31336 -integer\index{integer division}. Hence, (3/2) has the value 1, aninteger808,32970 -and {\it floating-point division\index{floating-pointfloating-point825,33921 -\subsubsection*{*873,35820 -\JavaRule{Type Promotion\index{promotion rule}.}{Inpromotion929,38407 -\subsection{Operator Precedence}Operator1018,41214 -\noindent The built-in precedence order for arithmetic\index{arithmeticarithmetic1019,41247 -\TBT{3.5pc}{Precedence order of the arithmetic operators\index{arithmetic operators}}arithmetic1026,41593 -expressions have highest precedence\index{precedence}precedence1041,42287 -\subsection{Increment and Decrement Operators}Increment1127,45048 -{\it k++} uses the {\it increment operator}\index{increment operator ++}increment1130,45238 -be used either as a {\it preincrement}\index{preincrement}preincrement1144,45782 -{\it postincrement\index{postincrement}postincrement1147,45965 -decrement\index{decrement operator --}} operator {\it $--$}, which candecrement1211,48341 -also be used in the predecrement\index{predecrement}predecrement1212,48412 -postdecrement\index{postdecrement}postdecrement1213,48469 -\subsection{Assignment Operators}Assignment1269,50880 -\noindent In addition to the simple assignment\index{assignment operator =}assignment1270,50914 -\TBT{0pc}{Java's assignment operators\index{assignment operators}}assignment1317,52301 -\subsection{Relational Operators}Relational1359,54041 -\TBT{4pc}{Relational operators\index{relational operators}}relational1369,54484 -precedence\index{precedence}precedence1409,56377 -\section{{\bf From the Java Library} {\tt java.lang.Math}}1532,60206 -\section{Numeric Processing Examples}Numeric1646,64490 -\subsection{Example: Rounding to Two Decimal Places}Example:1652,64708 -\subsection{Example: Converting Fahrenheit to Celsius}Example:1705,66761 -\subsubsection*{*1710,66998 -serve as the user interface (Fig.~\ref{fig-convapplobjs}fig-convapplobjs1715,67279 -\label{fig-convapplobjs}fig-convapplobjs1722,67546 -\label{pg-fig-convapplobjs}pg-fig-convapplobjs1723,67571 -\subsubsection*{*1728,67684 -\subsubsection*{*1774,70212 -Figure~\ref{fig-temperature}fig-temperature1777,70336 -to the design shown in Figure~\ref{fig-p242f2}fig-p242f21785,70805 -\subsubsection*{*1831,72167 -\subsubsection*{*1873,74028 -interface. Figure~\ref{fig-tempcmdline}fig-tempcmdline1883,74560 -\item Following the design in Figure~\ref{fig-tempcmdline}fig-tempcmdline1897,75047 -The GUI should have the layout shown in Figure~\ref{fig-convapplgui}fig-convapplgui1918,75956 -\subsection{Example: Using Class Constants}Example:1921,76040 -\noindent As we noted in Chapter~\ref{chapter-intro}chapter-intro1923,76085 -program easier to modify and maintain\index{MaintainabilityMaintainability2028,80440 -shown in Figure~\ref{fig-constnim}fig-constnim2064,82157 -\subsection{OBJECT-ORIENTED DESIGN: \\ Information Hiding}OBJECT-ORIENTED2141,84578 -\subsection{Example: A Winning Algorithm for One Row Nim}Example:2187,86694 -\section{{\bf From the Java Library} \\{\tt java.text.NumberFormat}}2423,95464 -amounts, percentages, and other formats (Fig.~\ref{fig-pg267f1}fig-pg267f12437,96164 -shown in Table~\ref{fig-bankcd}fig-bankcd2491,98085 -\section{Character Data and Operators}Character2550,100685 -{\tt char}\index{char}char2553,100794 -backward compatible with ASCII\index{ASCII character set} systems, theASCII2583,102258 -\TBT{0pc}{ASCII\index{ASCII}ASCII2590,102592 -\subsection{Character to Integer Conversions}Character2624,103546 -type conversions\index{type conversion rule} from a narrower type to atype2747,108254 -\subsection{Lexical Ordering}Lexical2798,109899 -\subsection{Relational Operators}Relational2824,111370 -\TBT{2.5pc}{Relational operations\index{relational operators} on characters}relational2842,112383 -\section{Example: Character Conversions }Example:2860,113171 -characters\index{character conversion} as integers is that we cancharacter2862,113275 -\noindent This method\index{toUpperCase() method}toUpperCase()2920,115305 -digit\index{digitToInteger() method} to its corresponding integerdigitToInteger()2960,116795 -The Java application program shown in Figure~\ref{fig-testapplet}fig-testapplet2996,118103 -\jjjprogstop{A Java program illustrating character\index{charactercharacter3033,119362 -\section{Problem Solving = Representation + Action}Problem3039,119586 -\TBT{0pc}{Java operator precedence and associativity table\index{precedence table}}precedence3160,123632 +} {fig-chessboard}\label{pg-fig-chessboard}pg-fig-chessboard85,3513 +\section{Boolean Data and Operators}Boolean104,4334 +type is derived from the work of British mathematician George Boole\index{Boole, George}, Boole,108,4566 +\subsection{Boolean (or Logical) Operations}Boolean154,6222 +\subsection{Precedence and Associativity}Precedence234,10161 +Java, the \&\& \mbox{operator} has higher precedence\index{precedence}precedence265,11295 +\subsection{Short-Circuit Evaluation}Short-Circuit359,14603 +\section*{*452,17620 +\subsection{Using Booleans in OneRowNim}Using497,20271 +Figure~\ref{fig-ornclass}fig-ornclass502,20488 +\noindent The remaining changes are shown in Figure~\ref{fig-newonerow}fig-newonerow552,22318 +\section{Numeric Data and Operators}Numeric652,25231 +\subsection{Numeric Operations}Numeric762,30709 +\TBT{2pc}{The standard arithmetic operators\index{arithmetic operators} in Java}arithmetic773,31332 +integer\index{integer division}. Hence, (3/2) has the value 1, aninteger808,32966 +and {\it floating-point division\index{floating-pointfloating-point825,33917 +\subsubsection*{*873,35816 +\JavaRule{Type Promotion\index{promotion rule}.}{Inpromotion929,38403 +\subsection{Operator Precedence}Operator1018,41210 +\noindent The built-in precedence order for arithmetic\index{arithmeticarithmetic1019,41243 +\TBT{3.5pc}{Precedence order of the arithmetic operators\index{arithmetic operators}}arithmetic1026,41589 +expressions have highest precedence\index{precedence}precedence1041,42283 +\subsection{Increment and Decrement Operators}Increment1127,45044 +{\it k++} uses the {\it increment operator}\index{increment operator ++}increment1130,45234 +be used either as a {\it preincrement}\index{preincrement}preincrement1144,45778 +{\it postincrement\index{postincrement}postincrement1147,45961 +decrement\index{decrement operator --}} operator {\it $--$}, which candecrement1211,48337 +also be used in the predecrement\index{predecrement}predecrement1212,48408 +postdecrement\index{postdecrement}postdecrement1213,48465 +\subsection{Assignment Operators}Assignment1269,50876 +\noindent In addition to the simple assignment\index{assignment operator =}assignment1270,50910 +\TBT{0pc}{Java's assignment operators\index{assignment operators}}assignment1317,52297 +\subsection{Relational Operators}Relational1359,54037 +\TBT{4pc}{Relational operators\index{relational operators}}relational1369,54480 +precedence\index{precedence}precedence1409,56373 +\section{{\bf From the Java Library} {\tt java.lang.Math}}1532,60202 +\section{Numeric Processing Examples}Numeric1646,64486 +\subsection{Example: Rounding to Two Decimal Places}Example:1652,64704 +\subsection{Example: Converting Fahrenheit to Celsius}Example:1705,66757 +\subsubsection*{*1710,66994 +serve as the user interface (Fig.~\ref{fig-convapplobjs}fig-convapplobjs1715,67275 +\label{pg-fig-convapplobjs}pg-fig-convapplobjs1723,67563 +\subsubsection*{*1728,67676 +\subsubsection*{*1774,70204 +Figure~\ref{fig-temperature}fig-temperature1777,70328 +to the design shown in Figure~\ref{fig-p242f2}fig-p242f21785,70797 +\subsubsection*{*1831,72159 +\subsubsection*{*1873,74020 +interface. Figure~\ref{fig-tempcmdline}fig-tempcmdline1883,74552 +\item Following the design in Figure~\ref{fig-tempcmdline}fig-tempcmdline1897,75039 +The GUI should have the layout shown in Figure~\ref{fig-convapplgui}fig-convapplgui1918,75948 +\subsection{Example: Using Class Constants}Example:1921,76032 +\noindent As we noted in Chapter~\ref{chapter-intro}chapter-intro1923,76077 +program easier to modify and maintain\index{MaintainabilityMaintainability2028,80432 +shown in Figure~\ref{fig-constnim}fig-constnim2064,82149 +\subsection{OBJECT-ORIENTED DESIGN: \\ Information Hiding}OBJECT-ORIENTED2141,84570 +\subsection{Example: A Winning Algorithm for One Row Nim}Example:2187,86686 +\section{{\bf From the Java Library} \\{\tt java.text.NumberFormat}}2423,95456 +amounts, percentages, and other formats (Fig.~\ref{fig-pg267f1}fig-pg267f12437,96156 +shown in Table~\ref{fig-bankcd}fig-bankcd2491,98077 +\section{Character Data and Operators}Character2550,100677 +{\tt char}\index{char}char2553,100786 +backward compatible with ASCII\index{ASCII character set} systems, theASCII2583,102250 +\TBT{0pc}{ASCII\index{ASCII}ASCII2590,102584 +\subsection{Character to Integer Conversions}Character2624,103538 +type conversions\index{type conversion rule} from a narrower type to atype2747,108246 +\subsection{Lexical Ordering}Lexical2798,109891 +\subsection{Relational Operators}Relational2824,111362 +\TBT{2.5pc}{Relational operations\index{relational operators} on characters}relational2842,112375 +\section{Example: Character Conversions }Example:2860,113163 +characters\index{character conversion} as integers is that we cancharacter2862,113267 +\noindent This method\index{toUpperCase() method}toUpperCase()2920,115297 +digit\index{digitToInteger() method} to its corresponding integerdigitToInteger()2960,116787 +The Java application program shown in Figure~\ref{fig-testapplet}fig-testapplet2996,118095 +\jjjprogstop{A Java program illustrating character\index{charactercharacter3033,119354 +\section{Problem Solving = Representation + Action}Problem3039,119578 +\TBT{0pc}{Java operator precedence and associativity table\index{precedence table}}precedence3160,123624 -6.loops.tex,4618 +6.loops.tex,4577 \chapter{Control Structures}Control6,105 \label{chapter-loops}chapter-loops7,134 \label{pg-chapter-loops}pg-chapter-loops8,156 @@ -1174,80 +1126,79 @@ The Java application program shown in Figure~\ref{fig-testapplet}fig-testapplet \section{Flow of Control: Repetition Structures}Flow73,2842 \section{Counting Loops}Counting160,6029 \subsection{The For Structure}The239,9107 -\label{fig-forloop}fig-forloop243,9239 -\label{pg-fig-forloop}pg-fig-forloop244,9259 -Figure~\ref{fig-forloop}fig-forloop248,9311 -{\tt while} structure (Fig.~\ref{fig-whileflow6}fig-whileflow6250,9454 -\subsection{Loop Bounds}Loop330,12339 -\subsection{Infinite Loops}Infinite363,13732 -\subsection{Loop Indentation}Loop414,16000 -\subsection{Nested Loops}Nested607,21747 -\section{Example: Car Loan}Example:754,27028 -\subsection*{*762,27436 -\subsection*{*785,28499 -\subsection*{*834,30133 -Figure~\ref{fig-carloan}fig-carloan844,30737 -\section{Graphics Example: Drawing a Checkerboard}Graphics883,32259 -checkers game in Chapter~\ref{chapter-inheritance}chapter-inheritance898,33110 -\subsection*{*900,33163 -whose implementation is given in Figure~\ref{fig-checkerapplet}fig-checkerapplet913,33830 -\subsection*{*949,35041 -are shown in Figure~\ref{fig-checkeruml}fig-checkeruml964,35929 -\subsection*{*990,37363 -Figure~\ref{fig-checkerclass}fig-checkerclass993,37529 -The calculation here is illustrated in Figure~\ref{fig-checkerlayout}fig-checkerlayout1099,41698 -\label{fig-checkerlayout}fig-checkerlayout1110,42216 -\label{pg-fig-checkerlayout}pg-fig-checkerlayout1111,42242 -\section{Conditional Loops}Conditional1159,44188 -\subsection{The While Structure, Revisited}The1198,45887 -whose flowchart is shown in Figure~\ref{fig-whileflow6}fig-whileflow61224,46902 -\subsection{The \mbox{Do-While} Structure}The1360,50916 -Figure~\ref{fig-dowhileflow}fig-dowhileflow1464,55244 -\label{fig-dowhileflow}fig-dowhileflow1470,55408 -\label{pg-fig-dowhileflow}pg-fig-dowhileflow1471,55432 -occur.\index{loop design}}loop1494,56189 -\section{Example: Computing Averages}Example:1557,58091 -\index{Compute Average Example}Compute1558,58129 -Figure~\ref{fig-avg}fig-avg1731,65676 -\section{Example: Data Validation}Example:1796,68227 -\index{Data Validation Example}Data1797,68262 -(Fig.~\ref{fig-avg}fig-avg1845,70405 -which we name {\tt Validate} (Fig.~\ref{fig-validate}fig-validate1849,70687 -\section{Principles of Loop Design}Principles1905,72847 -principles\index{loop design principles} involved in correctlyloop1907,72951 -\item A {\it counting\index{counting loop} loop} cancounting1911,73047 -\item A {\it while structure}\index{while structure} shouldwhile1916,73263 -\item A {\it do-while structure}\index{do-while structure} shoulddo-while1921,73479 -\item A loop's {\it bound\index{bound}bound1929,73880 -\item An {\it infinite\index{infinite loop} loop} may result if theinfinite1934,74136 -\section{The {\tt switch} Multiway Selection Structure}The1988,76231 -A {\tt switch} statement\index{switch statement} is executed accordingswitch2042,78067 -structure\index{multiway-selection structure}, which would output,multiway-selection2086,79196 -to {\tt break\index{break}break2110,79842 -(Fig.~\ref{fig-multiwayswitch}fig-multiwayswitch2138,80612 -\section{OBJECT-ORIENTED DESIGN: \\Structured Programming}OBJECT-ORIENTED2231,83123 -\index{structured programming}structured2237,83357 -{\it go to\index{goto statement}} statement, which could be used to transfergoto2248,83992 -research results of that era was a 1966 paper by Boehm\index{Boehm}Boehm2258,84561 -Jacopini\index{Jacopini}Jacopini2259,84633 -influential paper by Edgar Dikjstra\index{Dikjstra}Dikjstra2262,84832 -The Pascal language, introduced by Nicklaus Wirth\index{Wirth}Wirth2266,85026 -in a program (Fig.~\ref{fig-controlstructs}fig-controlstructs2271,85364 -statement.\index{control structures}}control2277,85560 -\subsection*{*2317,86911 -entry point and exit (Fig.~\ref{fig-controlstructs}fig-controlstructs2323,87230 -4. Figure~\ref{fig-preposts}fig-preposts2375,89494 -\subsection*{*2473,92621 -\subsection*{*2548,95614 -\subsection*{*2584,97301 -basic control structures (Fig.~\ref{fig-controlstructs}fig-controlstructs2622,99383 -\section*{*2684,101290 -\item A {\it repetition structure} is a control structure\index{repetition structure}repetition2804,105533 -\item The {\tt for} statement\index{for statement} has the following syntax:for2814,105989 -\item {\it Structured programming\index{structured programming}}structured2861,107408 -\item The Fibonacci\index{Fibonacci sequence} sequenceFibonacci3688,130148 +\label{pg-fig-forloop}pg-fig-forloop244,9255 +Figure~\ref{fig-forloop}fig-forloop248,9307 +{\tt while} structure (Fig.~\ref{fig-whileflow6}fig-whileflow6250,9450 +\subsection{Loop Bounds}Loop330,12335 +\subsection{Infinite Loops}Infinite363,13728 +\subsection{Loop Indentation}Loop414,15996 +\subsection{Nested Loops}Nested607,21743 +\section{Example: Car Loan}Example:754,27024 +\subsection*{*762,27432 +\subsection*{*785,28495 +\subsection*{*834,30129 +Figure~\ref{fig-carloan}fig-carloan844,30733 +\section{Graphics Example: Drawing a Checkerboard}Graphics883,32255 +checkers game in Chapter~\ref{chapter-inheritance}chapter-inheritance898,33106 +\subsection*{*900,33159 +whose implementation is given in Figure~\ref{fig-checkerapplet}fig-checkerapplet913,33826 +\subsection*{*949,35037 +are shown in Figure~\ref{fig-checkeruml}fig-checkeruml964,35925 +\subsection*{*990,37359 +Figure~\ref{fig-checkerclass}fig-checkerclass993,37525 +The calculation here is illustrated in Figure~\ref{fig-checkerlayout}fig-checkerlayout1099,41694 +\label{fig-checkerlayout}fig-checkerlayout1110,42212 +\label{pg-fig-checkerlayout}pg-fig-checkerlayout1111,42238 +\section{Conditional Loops}Conditional1159,44184 +\subsection{The While Structure, Revisited}The1198,45883 +whose flowchart is shown in Figure~\ref{fig-whileflow6}fig-whileflow61224,46898 +\subsection{The \mbox{Do-While} Structure}The1360,50912 +Figure~\ref{fig-dowhileflow}fig-dowhileflow1464,55240 +\label{fig-dowhileflow}fig-dowhileflow1470,55404 +\label{pg-fig-dowhileflow}pg-fig-dowhileflow1471,55428 +occur.\index{loop design}}loop1494,56185 +\section{Example: Computing Averages}Example:1557,58087 +\index{Compute Average Example}Compute1558,58125 +Figure~\ref{fig-avg}fig-avg1731,65672 +\section{Example: Data Validation}Example:1796,68223 +\index{Data Validation Example}Data1797,68258 +(Fig.~\ref{fig-avg}fig-avg1845,70401 +which we name {\tt Validate} (Fig.~\ref{fig-validate}fig-validate1849,70683 +\section{Principles of Loop Design}Principles1905,72843 +principles\index{loop design principles} involved in correctlyloop1907,72947 +\item A {\it counting\index{counting loop} loop} cancounting1911,73043 +\item A {\it while structure}\index{while structure} shouldwhile1916,73259 +\item A {\it do-while structure}\index{do-while structure} shoulddo-while1921,73475 +\item A loop's {\it bound\index{bound}bound1929,73876 +\item An {\it infinite\index{infinite loop} loop} may result if theinfinite1934,74132 +\section{The {\tt switch} Multiway Selection Structure}The1988,76227 +A {\tt switch} statement\index{switch statement} is executed accordingswitch2042,78063 +structure\index{multiway-selection structure}, which would output,multiway-selection2086,79192 +to {\tt break\index{break}break2110,79838 +(Fig.~\ref{fig-multiwayswitch}fig-multiwayswitch2138,80608 +\section{OBJECT-ORIENTED DESIGN: \\Structured Programming}OBJECT-ORIENTED2231,83119 +\index{structured programming}structured2237,83353 +{\it go to\index{goto statement}} statement, which could be used to transfergoto2248,83988 +research results of that era was a 1966 paper by Boehm\index{Boehm}Boehm2258,84557 +Jacopini\index{Jacopini}Jacopini2259,84629 +influential paper by Edgar Dikjstra\index{Dikjstra}Dikjstra2262,84828 +The Pascal language, introduced by Nicklaus Wirth\index{Wirth}Wirth2266,85022 +in a program (Fig.~\ref{fig-controlstructs}fig-controlstructs2271,85360 +statement.\index{control structures}}control2277,85556 +\subsection*{*2317,86907 +entry point and exit (Fig.~\ref{fig-controlstructs}fig-controlstructs2323,87226 +4. Figure~\ref{fig-preposts}fig-preposts2375,89490 +\subsection*{*2473,92617 +\subsection*{*2548,95610 +\subsection*{*2584,97297 +basic control structures (Fig.~\ref{fig-controlstructs}fig-controlstructs2622,99379 +\section*{*2684,101286 +\item A {\it repetition structure} is a control structure\index{repetition structure}repetition2804,105529 +\item The {\tt for} statement\index{for statement} has the following syntax:for2814,105985 +\item {\it Structured programming\index{structured programming}}structured2861,107404 +\item The Fibonacci\index{Fibonacci sequence} sequenceFibonacci3688,130144 -7.strings.tex,5216 +7.strings.tex,5112 \chapter{Strings and String Processing}Strings6,116 \label{chapter-strings}chapter-strings7,157 \label{pg-chapter-strings}pg-chapter-strings8,181 @@ -1301,32 +1252,30 @@ Figure~\ref{fig-equals}fig-equals1628,65722 in Figure~\ref{fig-strings}fig-strings1702,68421 \figaleft{chptr07/p375f1.eps}{For {\tt String} objects, equality\index{String equality}String1706,68486 and identity\index{String identity} are different. Two distinctString1707,68574 -\label{fig-strings}fig-strings1712,68856 -\label{pg-fig-strings}pg-fig-strings1713,68876 -in Section~\ref{sec-strconstr}sec-strconstr1753,70108 -\section{From the Java Library: \\java.util.StringTokenizer}From1870,73574 -Java's {\tt java.util.StringTokenizer}\index{StringTokenizer class} classStringTokenizer1883,74324 -(Fig.~\ref{fig-p377f1}fig-p377f11887,74547 -\section{Handling Text in a Graphics Context \\(Optional)}Handling1968,77155 -(Fig.~\ref{fig-fontmethods}fig-fontmethods1984,77960 -Java programs back in Chapter~\ref{ch:intro2}ch:intro21989,78302 -\subsection{The {\tt Font} and {\tt FontMetrics} Classes}The2003,78787 -\subsection{Font Metrics}Font2089,82378 -are associated with a font. The {\bf baseline}\index{baseline}baseline2113,83454 -as the character's {\bf ascent}\index{ascent}ascent2128,83995 -The {\tt FontMetrics} class (Fig.~\ref{fig-fontmetrics2}fig-fontmetrics22143,84728 -\subsection{Example: Centering a Line of Text}Example:2155,85406 -remaining task is to draw the string (Fig.~\ref{fig-centertext}fig-centertext2246,89528 -Figure~\ref{fig-centertextscreen}fig-centertextscreen2249,89732 -\label{fig-centertextscreen}fig-centertextscreen2299,91311 -\label{pg-fig-centertextscreen}pg-fig-centertextscreen2300,91340 -\item A {\tt String\index{String}String2357,91827 -and {\tt last\-Index\-Of()} methods\index{String methods} are used forString2377,92834 -\item See Figure~\ref{fig-strobjects3}fig-strobjects32443,94942 -\label{ans-strobjects2}ans-strobjects22444,94983 -\label{pg-ans-strobjects2}pg-ans-strobjects22445,95007 +\label{pg-fig-strings}pg-fig-strings1713,68872 +in Section~\ref{sec-strconstr}sec-strconstr1753,70104 +\section{From the Java Library: \\java.util.StringTokenizer}From1870,73570 +Java's {\tt java.util.StringTokenizer}\index{StringTokenizer class} classStringTokenizer1883,74320 +(Fig.~\ref{fig-p377f1}fig-p377f11887,74543 +\section{Handling Text in a Graphics Context \\(Optional)}Handling1968,77151 +(Fig.~\ref{fig-fontmethods}fig-fontmethods1984,77956 +Java programs back in Chapter~\ref{ch:intro2}ch:intro21989,78298 +\subsection{The {\tt Font} and {\tt FontMetrics} Classes}The2003,78783 +\subsection{Font Metrics}Font2089,82374 +are associated with a font. The {\bf baseline}\index{baseline}baseline2113,83450 +as the character's {\bf ascent}\index{ascent}ascent2128,83991 +The {\tt FontMetrics} class (Fig.~\ref{fig-fontmetrics2}fig-fontmetrics22143,84724 +\subsection{Example: Centering a Line of Text}Example:2155,85402 +remaining task is to draw the string (Fig.~\ref{fig-centertext}fig-centertext2246,89524 +Figure~\ref{fig-centertextscreen}fig-centertextscreen2249,89728 +\label{pg-fig-centertextscreen}pg-fig-centertextscreen2300,91332 +\item A {\tt String\index{String}String2357,91819 +and {\tt last\-Index\-Of()} methods\index{String methods} are used forString2377,92826 +\item See Figure~\ref{fig-strobjects3}fig-strobjects32443,94934 +\label{ans-strobjects2}ans-strobjects22444,94975 +\label{pg-ans-strobjects2}pg-ans-strobjects22445,94999 -8.oop.tex,5072 +8.oop.tex,4914 \chapter{Inheritance and Polymorphism}Inheritance6,115 \label{chapter-inheritance}chapter-inheritance7,154 \section{Introduction}Introduction37,1080 @@ -1354,153 +1303,55 @@ alternate labels (Fig.~\ref{fig-toggleuml}fig-toggleuml1065,44133 Figure~\ref{fig-togglebutton}fig-togglebutton1079,44763 (Fig~\ref{fig-p204}fig-p2041174,49174 applet that uses a {\tt ToggleButton} (Fig.~\ref{fig-toggletest}fig-toggletest1188,49802 -\label{fig-toggledump}fig-toggledump1235,51415 -\label{pg-fig-toggledump}pg-fig-toggledump1236,51438 -principles of object-oriented\index{object-oriented design}object-oriented1241,51552 -\section*{*1273,52754 -{\it encrypt\index{encryption}encryption1278,52982 -\hspace*{1pc}One of the earliest and simplest {\it ciphers\index{cipher}cipher1286,53540 -Caesar\index{Caesar cipher} cipher, used by Julius Caesar during theCaesar1287,53621 -{\bf plaintext} alphabet\index{plaintext alphabet}. Thus, ``hello'' would beplaintext1304,54315 -\hspace*{1pc}The Caesar cipher is a {\bf substitution cipher}\index{substitution cipher},substitution1306,54426 -alphabet\index{ciphertext alphabet}. A more general form of aciphertext1309,54624 -substitution cipher uses a {\it keyword\index{keyword, cipher}} tokeyword,1310,54686 -cipher}.\index{transposition cipher} In this type of cipher, thetransposition1326,55313 -\section{Example: The Cipher Class Hierarchy}Example:1331,55553 -(Fig.~\ref{fig-cipherhier}fig-cipherhier1364,57311 -\subsection{Class Design: {\tt Caesar} }Class1436,60150 -\noindent Figure~\ref{fig-cipher}fig-cipher1437,60191 -\subsection{Algorithm Design: Shifting Characters}Algorithm1508,63018 -(Fig.~\ref{fig-caesar}fig-caesar1510,63145 -\subsection{Class Design: {\tt Transpose} }Class1640,68202 -\noindent The {\tt Transpose} class (Fig.~\ref{fig-transpose}fig-transpose1641,68246 -\jjjprogstop{The {\tt Transpose} class\index{Transpose class}.}Transpose1669,69327 -\subsection{Testing and Debugging}Testing1673,69421 -\noindent Figure~\ref{fig-testcipher}fig-testcipher1674,69456 -\jjjprogstop{The {\tt TestEncrypt} class\index{TestEncrypt class}.}TestEncrypt1701,70633 -\section{Case Study: A Two Player Game Hierarchy}Case1734,71723 -\subsection{Design Goals}Design1758,73052 -\subsection{Designing the {\tt TwoPlayerGame} Class}Designing1787,74612 -OneRowNim} class---would inherit these elements. Figure~\ref{fig-onerownim}fig-onerownim1796,75128 -Figure~\ref{fig-twoplayergame}fig-twoplayergame1835,77258 -\label{fig-twoplayergame}fig-twoplayergame1844,77668 -\label{pg-fig-twoplayergame}pg-fig-twoplayergame1845,77694 -\subsection{The {\tt TwoPlayerGame} Superclass}The1854,78062 -Figure~\ref{fig-twoplayercode}fig-twoplayercode2045,86367 -\subsection{The {\tt CLUIPlayableGame} Interface}The2104,88106 -Figure~\ref{fig-twoplayergame}fig-twoplayergame2107,88203 -As Figure~\ref{fig-twoplayergame}fig-twoplayergame2221,92979 -\subsection{Object Oriented Design: Interfaces or Abstract Classes}Object2226,93230 -\subsection{The Revised {\tt OneRowNim} Class}The2271,95627 -Figure~\ref{fig-revisednim}fig-revisednim2273,95675 -(Fig.~\ref{fig-revisednim2}fig-revisednim22404,100656 -\subsection{The {\tt IPlayer} Interface}The2481,104794 -Figure~\ref{fig-nimbad}fig-nimbad2546,107555 -\subsection{Playing {\tt OneRowNim}}Playing2600,109770 -Figure~\ref{fig-playnim}fig-playnim2714,114093 -\subsection{Extending the {\tt TwoPlayerGame} Hierarchy}Extending2755,115646 -\label{fig-wordguessuml}fig-wordguessuml2778,116851 -\label{pg-fig-wordguessuml}pg-fig-wordguessuml2779,116876 -Figure~\ref{fig-wordguessuml}fig-wordguessuml2784,117031 -source code is shown in Figures~\ref{fig-wordguess}fig-wordguess2938,123121 -\ref{fig-wordguess2}fig-wordguess22939,123177 -(Fig.~\ref{fig-wordguesser}fig-wordguesser2994,126488 -\section{Principles Of Object-Oriented Design}Principles3035,128016 - -9.arrays-mod.tex,5944 -\chapter{Arrays and Array Processing}Arrays6,114 -\label{chapter-arrays}chapter-arrays7,152 -\label{pg-chapter-arrays}pg-chapter-arrays8,175 -\section{Introduction}Introduction43,1289 -\section{One-Dimensional Arrays}One-Dimensional106,3574 -\subsection{Declaring and Creating Arrays}Declaring203,7469 -has {\it N} components\index{array component}, then we say that thearray220,8485 -{\bf array length}\index{array length} is {\it N}. Each of thearray221,8553 -{\it component\index{array component type} type}. An {\it empty}array223,8687 -A {\bf one-dimensional} array\index{one-dimensional array} hasone-dimensional226,8797 -components that are called the array's {\bf elements\index{arrayarray229,8964 -element}}. Their type is the array's {\bf element\index{array elementarray230,9029 -create both a name for the array and then the array\index{arrayarray238,9524 -\subsection{Array Allocation}Array265,10419 -the loop bound. Every array has a {\tt length}\index{array length}array297,11761 -When an array\index{array allocation} of {\it N} elements isarray434,17525 -\subsection{Initializing Arrays}Initializing470,18866 -array initializer}\index{array initializer} is written as a list of expressions separated byarray481,19354 -\subsection{Assigning and Using Array Values}Assigning511,20510 -subscripted. For example, the following assignment\index{arrayarray516,20791 -\section{Simple Array Examples}Simple568,22031 -principle\index{Maintainability Principle}.Maintainability630,24403 -\label{fig-squaresout}fig-squaresout703,27304 -storage\index{array storage} locations. In this example, {\tt intArr}array709,27450 -\section{Example: Counting Frequencies of Letters}Example:760,29285 -\subsection{A Class to Store the Frequency of One Letter}A786,30871 -\label{fig-letfreq}fig-letfreq852,33141 -\subsection{A Class to Count Letter Frequencies}A858,33352 -\label{fig-anafreq}fig-anafreq980,37461 -\section{Array Algorithms: Sorting}Array1010,38530 -\label{sec-sort}sec-sort1011,38566 -\subsection{Insertion Sort}Insertion1020,39016 -\subsection{Selection Sort}Selection1228,47259 -\label{sec-selectionsort}sec-selectionsort1229,47287 -\subsection{Algorithm: Swapping Memory Elements}Algorithm:1281,49631 -\subsection{Passing a Value and Passing a Reference}Passing1354,52203 -\label{fig-arrayparam}fig-arrayparam1433,55463 -\section{Array Algorithms: Searching}Array1465,56516 -\subsection{Sequential Search}Sequential1474,56956 -\noindent This approach is known as a {\bf sequential\index{sequential search}sequential1476,57047 -\subsection{Binary Search}Binary1549,59693 -binary\index{binary search} search}, which is abinary1555,60036 -divide-and-conquer\index{divide-and-conquer}divide-and-conquer1556,60084 -\section{Two-Dimensional Arrays}Two-Dimensional1727,66944 -{\tt IndexOutOfBoundsException}\index{IndexOutOfBoundsException}IndexOutOfBoundsException1828,71053 -\subsection{Two-Dimensional Array Methods}Two-Dimensional1931,75807 -\subsubsection*{*1959,77013 -\subsubsection*{*1994,78577 -\subsection{Passing Part of an Array to a Method}Passing2058,81079 -\section{Multidimensional Arrays (Optional)}Multidimensional2247,88378 -\label{fig-threedarray}fig-threedarray2282,89738 -\noindent Note again the proper use of the {\tt length}\index{array length}array2308,90687 -\subsection{Array Initializers}Array2320,91323 -\noindent It is possible to use an initializer\index{initializer, array} with ainitializer,2321,91355 -{\bf multidimensional array}\index{multidimensional array}. For instance, themultidimensional2322,91435 -\section{OBJECT-ORIENTED DESIGN: \\[2pt]Polymorphic Sorting (Optional)}OBJECT-ORIENTED2356,92927 -\label{fig-testsort}fig-testsort2514,99518 -\label{pg-fig-testsort}pg-fig-testsort2515,99539 -\subsection{The {\tt java.util.Arrays.sort()} Method}The2533,100439 -\section{From the Java Library: java.util.Vector}From2582,102177 -\label{sec-vectors}sec-vectors2583,102227 -Figure~\ref{fig-vectordemo}fig-vectordemo2603,103085 -\section{Case Study: An N-Player Computer Game}Case2668,105662 -\subsection{The {\tt ComputerGame} Hierarchy}The2685,106610 -\label{fig-game}fig-game2690,106769 -\label{pg-fig-game}pg-fig-game2691,106786 -Figure~\ref{fig-game}fig-game2694,106821 -\subsection{The {\tt ComputerGame} Class}The2733,109044 -Figure~\ref{fig-computergame}fig-computergame2735,109087 -Figure~\ref{fig-gamesource}fig-gamesource2793,111695 -(Fig.~\ref{fig-gamesource}fig-gamesource2876,114386 -\subsection{The {\tt WordGuess} and {\tt WordGuesser} Classes}The2912,115925 -example from Chapter~\ref{chapter-inheritance}chapter-inheritance2915,116056 -Figure~\ref{fig-wordguess}fig-wordguess2923,116528 -you compare it with the design we used in Chapter~\ref{chapter-inheritance}chapter-inheritance2924,116610 -Player} (Figure~\ref{fig-wordguesser}fig-wordguesser3033,120723 -Figure~\ref{fig-player}fig-player3049,121342 -\section{A GUI-Based Game (Optional Graphics)}A3130,124612 -game. An appropriate GUI is shown Figure~\ref{fig-capture}fig-capture3151,125742 -\subsection{The {\tt GUIPlayableGame} Interface}The3168,126580 -Figure~\ref{fig-capture}fig-capture3179,127225 -can be implemented by any game that wishes to use a GUI (Fig.~\ref{fig-GUIplayable}fig-GUIplayable3188,127730 -\subsection{The {\tt SlidingTilePuzzle}}The3236,129750 -Figure~\ref{fig-slidingpuzzle}fig-slidingpuzzle3240,129901 -Figure~\ref{fig-puzzlecode}fig-puzzlecode3339,133571 -\subsection{The {\tt SlidingGUI} Class}The3398,135356 -Chapter~\ref{chapter-io}chapter-io3402,135529 -Figure~\ref{fig-slidingGUI}fig-slidingGUI3404,135557 -Figure~\ref{fig-GUIsource}fig-GUIsource3423,136616 -\item An {\bf array}\index{array}array3616,142508 -subscript\index{subscript}subscript3619,142704 -values to each array location. An {\it initializer\index{arrayarray3650,143914 -square}. A magic square\index{square}square4147,158179 +\label{pg-fig-toggledump}pg-fig-toggledump1236,51434 +principles of object-oriented\index{object-oriented design}object-oriented1241,51548 +\section*{*1273,52750 +{\it encrypt\index{encryption}encryption1278,52978 +\hspace*{1pc}One of the earliest and simplest {\it ciphers\index{cipher}cipher1286,53536 +Caesar\index{Caesar cipher} cipher, used by Julius Caesar during theCaesar1287,53617 +{\bf plaintext} alphabet\index{plaintext alphabet}. Thus, ``hello'' would beplaintext1304,54311 +\hspace*{1pc}The Caesar cipher is a {\bf substitution cipher}\index{substitution cipher},substitution1306,54422 +alphabet\index{ciphertext alphabet}. A more general form of aciphertext1309,54620 +substitution cipher uses a {\it keyword\index{keyword, cipher}} tokeyword,1310,54682 +cipher}.\index{transposition cipher} In this type of cipher, thetransposition1326,55309 +\section{Example: The Cipher Class Hierarchy}Example:1331,55549 +(Fig.~\ref{fig-cipherhier}fig-cipherhier1364,57307 +\subsection{Class Design: {\tt Caesar} }Class1436,60146 +\noindent Figure~\ref{fig-cipher}fig-cipher1437,60187 +\subsection{Algorithm Design: Shifting Characters}Algorithm1508,63014 +(Fig.~\ref{fig-caesar}fig-caesar1510,63141 +\subsection{Class Design: {\tt Transpose} }Class1640,68198 +\noindent The {\tt Transpose} class (Fig.~\ref{fig-transpose}fig-transpose1641,68242 +\jjjprogstop{The {\tt Transpose} class\index{Transpose class}.}Transpose1669,69323 +\subsection{Testing and Debugging}Testing1673,69417 +\noindent Figure~\ref{fig-testcipher}fig-testcipher1674,69452 +\jjjprogstop{The {\tt TestEncrypt} class\index{TestEncrypt class}.}TestEncrypt1701,70629 +\section{Case Study: A Two Player Game Hierarchy}Case1734,71719 +\subsection{Design Goals}Design1758,73048 +\subsection{Designing the {\tt TwoPlayerGame} Class}Designing1787,74608 +OneRowNim} class---would inherit these elements. Figure~\ref{fig-onerownim}fig-onerownim1796,75124 +Figure~\ref{fig-twoplayergame}fig-twoplayergame1835,77254 +\label{pg-fig-twoplayergame}pg-fig-twoplayergame1845,77686 +\subsection{The {\tt TwoPlayerGame} Superclass}The1854,78054 +Figure~\ref{fig-twoplayercode}fig-twoplayercode2045,86359 +\subsection{The {\tt CLUIPlayableGame} Interface}The2104,88098 +Figure~\ref{fig-twoplayergame}fig-twoplayergame2107,88195 +As Figure~\ref{fig-twoplayergame}fig-twoplayergame2221,92971 +\subsection{Object Oriented Design: Interfaces or Abstract Classes}Object2226,93222 +\subsection{The Revised {\tt OneRowNim} Class}The2271,95619 +Figure~\ref{fig-revisednim}fig-revisednim2273,95667 +(Fig.~\ref{fig-revisednim2}fig-revisednim22404,100648 +\subsection{The {\tt IPlayer} Interface}The2481,104786 +Figure~\ref{fig-nimbad}fig-nimbad2546,107547 +\subsection{Playing {\tt OneRowNim}}Playing2600,109762 +Figure~\ref{fig-playnim}fig-playnim2714,114085 +\subsection{Extending the {\tt TwoPlayerGame} Hierarchy}Extending2755,115638 +\label{pg-fig-wordguessuml}pg-fig-wordguessuml2779,116864 +Figure~\ref{fig-wordguessuml}fig-wordguessuml2784,117019 +source code is shown in Figures~\ref{fig-wordguess}fig-wordguess2938,123109 +\ref{fig-wordguess2}fig-wordguess22939,123165 +(Fig.~\ref{fig-wordguesser}fig-wordguesser2994,126476 +\section{Principles Of Object-Oriented Design}Principles3035,128004 9.arrays.tex,6769 \chapter{Arrays and Array Processing}Arrays6,114 diff --git a/texfiles/a.tex b/texfiles/a.tex index 1aafc60..27234ce 100644 --- a/texfiles/a.tex +++ b/texfiles/a.tex @@ -11,7 +11,7 @@ \chapter{Coding Conventions} {{\color{cyan}APPENDIX\,A\,\,$\bullet$\,\,}Coding Conventions} \label{appendix-codestyle} -\label{pg-appendix-codestyle} + \noindent This appendix covers various aspects of programming style and coding diff --git a/texfiles/b.tex b/texfiles/b.tex index a29ec75..50be1c2 100644 --- a/texfiles/b.tex +++ b/texfiles/b.tex @@ -9,7 +9,7 @@ \chapter{The Java Development Kit} {{\color{cyan}APPENDIX\,B\,\,$\bullet$\,\,}The Java Development Kit} \label{appendix-jdk} -\label{pg-appendix-jdk} + \noindent The Java Development Kit (JDK) for Java$^{\rm TM}$\,2 Platform Standard Edition is a set of command-line tools for developing Java programs. It is @@ -18,7 +18,7 @@ \chapter{The Java Development Kit} Download information and documentation are available for the entire range of products associated with the Java$^{\rm TM}$\,2 Platform, -Standard Edition (J2SE) at; +Standard Edition (Java SE) at; \begin{jjjlisting} \begin{lstlisting}[commentstyle=\color{black}] @@ -54,7 +54,7 @@ \chapter{The Java Development Kit} \end{table} \noindent Sun Microsystems provides detailed instructions on how -to install JDK for J2SE on computers running any of the above operating +to install JDK for Java SE on computers running any of the above operating systems, including how to set the system's PATH and CLASSPATH variables. Installation instructions can be located using the above link to downloading information. @@ -613,7 +613,7 @@ \section*{The Java Documentation Tool: {\tt javadoc}} on using the tool, it is best to consult Sun's Web site. To illustrate how it might be used, let's just look at a simple example. -The {\tt FirstApplet} program from Chapter~\ref{chapter-intro2} +The {\tt FirstApplet} program from Chapter~\ref{ch:intro2} contains documentation comments. It was processed using the following command: diff --git a/texfiles/fm.tex b/texfiles/fm.tex index d50c27f..f890cb3 100644 --- a/texfiles/fm.tex +++ b/texfiles/fm.tex @@ -1 +1 @@ -%FM Morelli \documentclass{book} % % \input morelli.sty \input morelliFM.sty % % \raggedbottom%¥¥Eliminata giustif. verticale, mettere % prima di stampare % % \begin{document} % \setcounter{page}{1} \pagenumbering{roman} % \spnorm\thispagestyle{empty} \parindent 0pc \begin{minipage}{40.5pc} \begin{center} \vspace*{70pt}\fontFMtped SECOND EDITION \vspace*{36pt}{\color{cyan}\fontFMtpt JAVA, JAVA, JAVA\raisebox{35pt}{\fontFMtptsup TM}!} \vspace*{12pt}\fontFMtpst Object-Oriented Problem Solving \vspace*{48pt}{\color{cyan}\fontFMtpau Ralph Morelli} \vspace*{6pt}\fontFMtpaf Trinity College \vspace*{40pt}{\color{cyan}\fontFMtpaf Alan Apt Series} \vspace*{144pt}\epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:prenhall_b&w.eps,width=4pc,clip=} \vspace*{3pt}\bf Prentice Hall \rm Upper Saddle River, New Jersey 07458 \end{center} \begin{textblock}{1}(-3,-3)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \begin{textblock}{1}(0,17)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:FM_CO1.eps}% \end{textblock}% \begin{textblock}{1}(40,17)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:FM_CO2.eps}% \end{textblock}% \begin{textblock}{1}(0,-.75)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:TitleArt_cyan.eps}% \end{textblock}% \end{minipage} \clearpage \thispagestyle{empty} \begin{textblock}{1}(-3,-3)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \small\baselineskip11pt{\fontFMcip Library of Cataloging-in-Publication Data} \vspace{5pt}Morelli, R. (Ralph) \qquad Java, Java, Java : object oriented problem solving/by Ralph Morelli.---2nd ed. \qquad \quad p.\quad cm. \qquad ISBN 0-13-033370-0 \qquad 1. Object-oriented programming (Computer science) 2. Java (Computer \quad program language) I. Title. \quad QA76.64 .M64 2002 \quad 005.13'3---dc21\hfill 2001050018 \vspace{32pt}Vice President and Editorial Director: {\it Marcia Horton} Publisher: {\it Alan Apt} Associate Editor: {\it Toni D. Holm} Editorial Assistant: {\it Patrick Lindner} Vice President and Director of Production \hspace*{1pc}and Manufacturing, ESM: {\it David W. Riccardi} Executive Managing Editor: {\it Vince O'Brien} Assistant Managing Editor: {\it Camille Trentacoste} Developmental Editor: {\it Jerry Ralya} Production Editor: {\it Fran Daniele} Director of Creative Services: {\it Paul Belfanti} %¥¥¥Senior Manager, Artworks: {\it Patricia Burns} Creative Director: {\it Carole Anson} Art Director: {\it Heather Scott} Art Editor: {\it Xiahong Zhu} Design Technical Support: {\it John Christiana} Manufacturing Manager: {\it Trudy Pisciotti} Manufacturing Buyer: {\it Lynda Castillo} Marketing Assistant: {\it Barrie Rheinhold} %¥¥¥Production/Composition Services: {\it Prepar\'{e}, Inc.} \vspace{17pt}\epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:prenhall_b&w.eps,width=3pc,clip=} \vspace{-25pt}\hspace*{3.5pc}\copyright\ 2003 by Prentice-Hall, Inc.%¥¥¥Pearson Education \hspace*{3.5pc}Upper Saddle River, New Jersey 07458 \vspace{17pt}All rights reserved. No part of this book may be reproduced, in any form or by any means, without permission in writing from the publisher. \vspace{22pt}Printed in the United States of America 10\quad 9\quad 8\quad 7\quad 6\quad 5\quad 4\quad 3\quad 2\quad 1 \vspace{17pt}{\fontFMocra ISBN 0-13-033370-0} \vspace{17pt}Pearson Education Ltd., {\it London} Pearson Education Australia Pty. Ltd., {\it Sydney} Pearson Education Singapore, Pte. Ltd. Pearson Education North Asia Ltd., {\it Hong Kong} Pearson Education Canada, Inc., {\it Toronto} Pearson Educac\'{\i}on de Mexico, S.A. de C.V. Pearson Education---Japan, {\it Tokyo} Pearson Education Malaysia, Pte. Ltd. Pearson Education, {\it Upper Saddle River, New Jersey} \clearpage \thispagestyle{empty} \vspace*{132pt}{\fontFMded\color{cyan}To My Parents, Ralph and Ann Morelli} \begin{textblock}{1}(29,16)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:FM_CO3.eps}% \end{textblock}% \begin{textblock}{1}(-3,-3)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \clearpage \thispagestyle{plain} \mbox{ } \begin{textblock}{1}(-.75,-.75)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:Morelli_walk_01.eps}% \end{textblock}% \begin{textblock}{1}(-3,-3)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \clearpage \mbox{ } \thispagestyle{plain} \begin{textblock}{1}(-0.75,-.75)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:Morelli_walk_02.eps}% \end{textblock}% \begin{textblock}{1}(-3,-3)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \clearpage \thispagestyle{plain} \mbox{ } \begin{textblock}{1}(-3,-3)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \begin{textblock}{1}(-0.75,-.75)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:Morelli_walk_03.eps}% \end{textblock}% \clearpage \thispagestyle{plain} \mbox{ } \begin{textblock}{1}(-3,-3)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \begin{textblock}{1}(-0.75,-.75)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:Morelli_walk_04.eps}% \end{textblock}% \clearpage \thispagestyle{empty} \mbox{ } \begin{textblock}{1}(-3,-3)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \clearpage \thispagestyle{plain} \normalsize\parindent 1pc \setcounter{table}{0} \setcounter{figure}{0} \renewcommand{\thetable}{\mbox{\arabic{table}}}% \renewcommand{\thefigure}{\mbox{\arabic{figure}}}% \markboth{\fontRHch\color{cyan}PREFACE\hspace*{5pt}$\bullet$}{\color{cyan}$\bullet$\hspace*{5pt}\fontRHch PREFACE} \vspace*{60pt}\noindent{\fontFMprt\color{cyan} Preface} \begin{textblock}{1}(11,10.5)% \noindent\epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:FM_CO4.eps}% \end{textblock}% \begin{textblock}{1}(-3,-3)% \noindent\epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \vspace{10pt}\section*{Who Should Use This Book?} \noindent The topics covered and the approach taken in this book are suitable for a typical Introduction to Computer Science (CS1) course or for a slightly more advanced Java as a Second Language course. The book is also useful to professional programmers making the transition to Java and object-oriented programming. The book takes an ``objects first'' approach to programming and problem solving. It assumes no previous programming experience and requires no prior knowledge of Java or object-oriented programming. \section*{What's New in the Second Edition?} \noindent The second edition has the following substantive changes: \begin{BL} \item {\bf Unified Modeling Language (UML).} UML diagrams have been incorporated throughout the text to help illustrate object-oriented concepts and to describe the design of the Java programs we develop. Some of the UML diagrams replace diagrams used in the first edition, but many new diagrams have been introduced as well. \noindent\hspace*{1pc}UML is rapidly developing into an industry standard for designing object-oriented programs. So it will be useful for students to be familiar with it. But the main reason for incorporating UML is a pedagogical one: It makes it easier to present and teach object-oriented concepts such as information hiding, inheritance, and polymorphism. \item {\bf Emphasis on Object-Oriented Design.} The second edition places somewhat more emphasis on object-oriented design, mostly through the way examples are developed. Many of the programming examples were rewritten to focus on the design before getting into the Java coding details. This approach was greatly aided by the use of UML diagrams. \item {\bf Organizational Changes.} Based on suggestions from reviewers and users of the first edition, several chapters were reorganized. The first two chapters were extensively revised. Chapter 0 now provides a more detailed overview of object orientation and introduces the main features of UML. This should help orient the student before getting into the discussion of Java's implementation of object-oriented concepts. To underscore the importance of design versus coding, Chapter 1 has been reorganized to focus on program design and development before introducing any Java code. It also includes a concise overview of some of the basic Java language features. Thus, the student has been presented with a good bit of overview material before we begin looking at specific Java examples. \noindent In terms of the organization of Java language elements, discussion of the {\tt switch} statement was moved to Chapter 3, where it is covered along with the other selection-control structures. Chapter 11 ``Exceptions'' was reorganized so that it can more easily be used much earlier in the course. \end{BL} \section*{Why Start with Objects?} \noindent {\it Java, Java, Java} takes an ``objects early'' approach to teaching Java, with the assumption that teaching beginners the ``big picture'' early gives them more time to master the principles of object-oriented programming. The first time I taught Java in our CS1 course, I followed the same approach I had been taking in teaching C and C++---namely, start with the basic language features and structured programming concepts and then, somewhere around midterm, introduce object orientation. This approach was familiar, for it was one taken in most of the textbooks then available in both Java and C++. One problem with this approach was that many students failed to get the big picture. They could understand loops, if-else constructs, and arithmetic expressions, but they had difficulty decomposing a programming problem into a well-organized Java program. Also, it seemed that this procedural approach failed to take advantage of the strengths of Java's object orientation. Why teach an object-oriented language if you're going to treat it like C or Pascal? I was reminded of a similar situation that existed when Pascal was the predominant CS1 language. Back then the main hurdle for beginners was {\it procedural abstraction}---learning the basic mechanisms of procedure call and parameter passing and learning how to {\bf design} programs as a collection of procedures. {\it Oh! Pascal!}, my favorite introductory text, was typical of a ``procedures early'' approach. It covered procedures and parameters in Chapter 2, right after covering the assignment and I/O constructs in Chapter 1. It then covered program design and organization in Chapter 3. It didn't get into loops, if-else, and other structured programming concepts until Chapter 4 and beyond. Presently, the main hurdle for beginners is {\it object abstraction}. Beginning programmers must be able to see a program as a collection of interacting objects and must learn how to decompose programming problems into well-designed objects. Object orientation subsumes both procedural abstraction and structured programming concepts from the Pascal days. Teaching ``objects early'' takes a top-down approach to these three important concepts. The sooner you begin to introduce objects and classes, the better the chances that students will master the important principles of object orientation. Object orientation (OO) is a fundamental problem-solving and design concept, not just another language detail that should be relegated to the middle or the end of the book (or course). If OO concepts are introduced late, it is much too easy to skip over them when push comes to shove in the course. Java is a good language for introducing object orientation. Its object model is better organized than C++. In C++, it is easy to ``work around'' or completely ignore OO features and treat the language like C.~In Java, there are good opportunities for motivating the discussion of object orientation. For example, it's almost impossible to discuss applets without discussing inheritance and polymorphism. Thus, rather than using contrived examples of OO concepts, instructors can use some of Java's basic features---applets, the class library, GUI components---to motivate these discussions in a natural way. \vspace{7pt}\section*{Key Features} \noindent In addition to its ``objects early'' approach, this book has several other important features. \begin{BL} \item {\bf Unified Modeling Language (UML) Diagrams.} More than 225 UML diagrams have been incorporated throughout the text to explain object-oriented concepts and to focus on object-oriented design. The advantages of using UML are several. First, UML diagrams provide a concise visual means of describing the main features of classes and objects. In one glance you can see an object's attributes and methods, whether they are private or public, and how the class or object relates to other classes. Second, UML diagrams provide simple graphical models for important object-oriented concepts such as inheritance and polymorphism. A picture is worth 1,000 words, so in addition to the descriptions provided in words, the UML diagrams should help students learn these important concepts. Third, for the purposes for which it is used in this book, UML is relatively easy and intuitive to understand. The basic notation is introduced in Chapter 0 through simple, accessible examples. Finally, UML is rapidly becoming an industry standard. So gaining familiarity with UML in this book will make other books on Java or object-oriented design more accessible. \item {\bf The {\tt CyberPet} Example.} Throughout the text a {\tt CyberPet} class is used as a running example to motivate and illustrate important concepts. The {\tt CyberPet} is introduced in Chapter 2, as a way of ``anthropomorphizing'' the basic features of objects. Thus, individual {\tt CyberPet}s belong to a class (definition), have a certain state (instance variables), and are capable of certain behaviors like eating and sleeping (instance methods). Method calls are used to command the {\tt CyberPet}s to eat and sleep. In Chapter 3 the emphasis is on defining and using methods and parameters to promote communication with {\tt CyberPet}s. In subsequent chapters, concepts such as inheritance, randomness, animation, and threads are illustrated in terms of the {\tt CyberPet}. Some of the lab and programming exercises are also centered around extending the behavior and sophistication of the {\tt CyberPet}. \item {\bf Applets and GUIs.} Applets and GUIs are first introduced in Chapter 4 and then used throughout the rest of the text. Clearly, applets are a ``turn-on'' for introductory students and can be used as a good motivating factor. Plus, {\it event-driven programming} and Graphical User Interfaces (GUIs) are what students ought now to be learning in CS1. We are long past the days when command-line interfaces were the norm in applications programming. Another nice thing about Java applets is that they are fundamentally object oriented. To understand them fully, students need to understand basic OO concepts. That's why applets are not introduced until Chapter 4, where they provide an excellent way to motivate the discussion of inheritance and polymorphism. \vspace{3pt}\item {\bf Companion Web Site.} The text is designed to be used in conjunction with a companion Web site that includes many useful resources, including the Java code and Java documentation (in HTML) for all the examples in the text, additional lab and programming assignments, online quizzes that can be scored automatically, and PowerPoint class notes. \vspace{3pt}\item {\bf Problem-Solving Approach.} A pedagogical, problem-solving approach is taken throughout the text. There are a total of 13 fully developed case studies, as well as numerous other examples that illustrate the problem-solving process. Marginal notes in the text repeatedly emphasize the basic elements of object-oriented problem solving: What objects do we need? What methods and data do we need? What algorithm should we use? And so on. \vspace{3pt}\item {\bf Self-Study Exercises.} The book contains more than 200 self-study exercises, with answers provided at the back of each chapter. \vspace{3pt}\item {\bf End-of-Chapter Exercises.} Over 400 end-of-chapter exercises are provided, including ``Challenge'' exercises at the end of most sets. The answers are provided in an Instructor's Manual, which is available to adopters. \vspace{3pt}\item {\bf Programming, Debugging, and Design Tips.} The book contains nearly 400 separately identified ``tips'' (Programming Tips, Debugging Tips, Effective Design Principles, and Java Language Rules) that provide useful programming and design information in a nutshell. \vspace{3pt}\item {\bf Hands-On Learning Sections.} Each chapter concludes with a laboratory exercise, so the text can easily be used to support lab-based CS1 courses. For CS1 courses that are not lab based, these sections can still be read as preparation for a programming assignment, or as an in-class demo, or as some other form of hands-on exercise. For each lab in the text, the companion Web site contains additional resources and handouts, as well as a repository of alternative lab assignments. \vspace{3pt}\item {\bf ``From the Library'' Sections.} Each chapter includes a section that introduces one or more of the library classes from the Java API (Application Programming Interface). In the early chapters, these sections provide a way of introducing tools, such as I/O classes and methods, needed to write simple programs. In subsequent chapters, some of these sections introduce useful but optional topics, such as the {\tt NumberFormat} class used to format numeric output. Others introduce basic GUI (Graphical User Interface) components that are used in program examples and the laboratory sections. \vspace{3pt}\item {\bf ``Object-Oriented Design'' Sections.} Each chapter includes a section on object-oriented design, which is used to underscore and amplify important principles such as inheritance, polymorphism, and information hiding. For instructors wishing to emphasize object-oriented design, Table~1 provides a list of sections that should be covered. \vspace{3pt}\item {\bf ``Java Language Summary''.} Those chapters that introduce language features contain ``Java Language Summary'' sections that summarize the features' essential syntax and semantics. \end{BL} \begin{table}[tb] %\hphantom{\caption{An overview of object-oriented sections.}\label{tab-ood}} \TBT{0.5pc}{An overview of object-oriented sections.} \begin{tabular}{ll} \multicolumn{2}{l}{\color{cyan}\rule{26pc}{1pt}}\\[2pt] \TBCH{Topic} & \TBCH{Section} \\[-4pt]\multicolumn{2}{l}{\color{cyan}\rule{26pc}{0.5pt}}\\[2pt] What Is Object Orientation? & Chapter 0.7\\ Overview of UML & Chapter 0.8\\ Object-Oriented Design Process & Chapter 1.2\\ Objects: Defining, Creating, Using & Chapter 2\\ Methods: Communicating with Objects & Chapter 3\\ Inheritance: The {\tt toString()} Method & Chapter 3, OOD\\ Inheritance and Polymorphism in Applets & Chapter 4.2-4.4\\ Inheritance and Polymorphism: {\tt ToggleButton} & Chapter 4, OOD\\ Information Hiding & Chapter 5, OOD\\ Structured Programming Concepts & Chapter 6, OOD\\ Abstract Classes: {\tt Cipher} & Chapter 7, OOD\\ Polymorphism: Polymorphic Sorting & Chapter 8, OOD\\ Model-View-Controller Architecture & Chapter 9, OOD\\ Inheritance and Polymorphism: Spider/Fly Classes \hspace*{1pc}& Chapter 13.6\\ Generic Client/Server Classes & Chapter 15.7\\ Abstract Data Types: {\tt List} Class & Chapter 16, OOD \\[-4pt]\multicolumn{2}{l}{\color{cyan}\rule{26pc}{1pt}} \end{tabular} \endTB \vspace{-9pt}\end{table} \section*{Organization of the Text} \noindent The book is organized into three main parts. The first part (Chapters 0 through 4) introduces the basic concepts of object orientation, including objects, classes, methods, parameter passing, information hiding, inheritance, and polymorphism. Although the primary focus in these chapters is on object orientation rather than on Java language details, each of these chapters has a ``Java Language Summary'' section that summarizes the language elements introduced. In Chapters 1 to 3, students are given the basic building blocks for constructing a Java program from scratch. Although the programs at this stage have limited functionality in terms of control structures and data types, the priority is placed on how objects are constructed and how they interact with each other through method calls and parameter passing. The second part (Chapters 5 through 8) focuses on the remaining language elements, including data types and operators (Chapter 5), control structures (Chapter 6), strings (Chapter 7), and arrays (Chapter 8). Once the basic structure and framework of an object-oriented program are understood, it is relatively easy to introduce these language features. Part Three (Chapters 9 through 16) covers a variety of advanced topics, including Graphical User Interfaces (Chapter 9), graphics (Chapter 10), exceptions (Chapter 11), recursion (Chapter 12), threads (Chapter 13), files (Chapter 14), sockets (Chapter 15), and data structures (Chapter 16). Topics from these chapters can be used selectively depending on instructor and student interest. Table 2 provides an example syllabus from my % one-semester CS1 course. Our semester is 13 weeks (plus one reading week during which classes do not meet). \splarge Note that the advanced topic chapters needn't be covered in order. Recursion (Chapter 12) could be introduced at the same time or even before loops (Chapter 6). The recursion chapter includes examples using strings, arrays, and drawing algorithms (fractals), \spnormallar \begin{table}[htb]% %\hphantom{\caption{A one-semester course.}\label{tab-course}} \TBT{3.5pc}{A one-semester course.} \hspace*{3pc}\begin{tabular}{lll} \multicolumn{3}{l}{\color{cyan}\rule{20pc}{1pt}}\\[2pt] \TBCH{Weeks} & \TBCH{Topics} & \TBCH{Chapters} \\[-4pt]\multicolumn{3}{l}{\color{cyan}\rule{20pc}{0.5pt}}\\[2pt] 1 & Object Orientation, UML & Chapter 0\\ & Program Design and Development & Chapter 1\\ 2--4 & Objects and Class Definitions & Chapter 2 \\ & Methods and Parameters & Chapter 3 \\ & Selection Structure (if-else) & \\ 5 & Applet Programming & Chapter 4 \\ & Inheritance & \\ 6 & Data Types and Operators & Chapter 5 \\ 7--8 & Control Structures (Loops) & Chapter 6 \\ & Structured Programming & \\ 9 & String Processing (loops) & Chapter 7 \\ 10 & Array Processing & Chapter 8 \\ 11 & Recursion & Chapter 12 \\ 12 & Advanced Topic (GUIs) & Chapter 9 \\ 13 & Advanced Topic (Exceptions) & Chapter 11 \\ & Advanced Topic (Threads) & Chapter 13 \\[-4pt]\multicolumn{3}{l}{\color{cyan}\rule{20pc}{1pt}} \end{tabular} \endTB \vspace{-6pt}\end{table}% as well as some standard numerical algorithms (factorial). Another way to teach recursion would be to incorporate it into the discussion of strings (Chapter 7), arrays (Chapter~8), and graphics (Chapter 10), thereby treating iteration and recursion in parallel. Exceptions (Chapter 11) could also be covered earlier. The examples in the first few sections of this chapter use simple arithmetic operations and the basic for loop. If these language elements are introduced separately, then exceptions could be covered right after Chapter 3. Some of the examples in the advanced chapters use applets (Chapter~4) and GUIs (Chapter 9), so these chapters should ideally be covered before Chapters 10 (graphics), 13 (threads), 14 (files), and 15 (sockets and networking). However, Chapter 16 (data structures) and sections of the other advanced topic chapters can be covered independently of applets and GUIs. Figure~\ref{fig-depend} shows the major chapter dependencies in % the book. %\begin{figure} \begin{figure}[h] \figavarleft{FM:preface.eps}{20.25pc}{Chapter dependencies. \label{fig-depend}} \end{figure} %\end{figure} \section*{Acknowledgments} \noindent First, I would like to thank the reviewers and technical reviewers, whose comments often suggested important additions and revisions. For the first edition these include Pedro Larios (Metrowerks), Laird Dornin (Sun Microsystems), Katherine Lowrie (Trilogy Inc.), Robert Holloway (University of Wisconsin at Madison), Deborah Trytten (University of Oklahoma), Alan Miller (Golden Gate University), Haklin Kimm (University of Tennessee), and Jim Roberts (Carnegie Mellon University). For the second edition the reviewers include Jim Buffenbarger (Idaho State University), Dianne Wolff (Western Virginia Community College), Hamid Namati (University of North Carolina at Greensboro), Kelli Davis (Cape Fear Community College, North Carolina), Le Gruenwald (University of Oklahoma), Haklin Kimm (East Stroudsburg University), Dave Barrington (University of Massachusetts at Amherst), and John Ellis (University of Wyoming). The following UML experts deserve thanks for their many helpful suggestions regarding the use of UML in the book: William Tepfenhart (Monmouth University), Rolf Kamp (AT\&T), Scott Henninger (Univerity of Maryland), and Michael Huhns (University of South \mbox{Carolina).} At Prentice Hall, my appreciation goes to Sandi Hakansan for encouraging me to send the manuscript to Prentice Hall; to Alan Apt for taking on this project and for being a source of guidance and encouragement throughout; to Ana Arias Terry for her cheerful and professional management of the project; to Rose Kernan for guiding the project through a very tough production phase; and to Eric Unhjem and Toni Holm for their help and support. I especially want to thank my development editor, Jerry Ralya, whose careful work and many suggestions helped shape and improve the final result of both editions in immeasurable ways. I want to thank a number of Trinity College students who helped track down typos and other errors in earlier drafts of the text. These include Christian Allen, Jeff Green, Ryan Carmody, and Michael Wilson. I especially want to thank Jamie Mazur, whose feedback on the manuscript and enthusiasm for the objects-first approach and whose role in developing the solutions manual were much appreciated. My thanks to the following list of individuals who helped identify errors in the first edition: Ashton Hobbs, Elissa Lowe, Peter Casey, Bernd Bruegge, David Mix Barrington, Rommy Mayerowitz, Jason Smart, Colleen Kubont, Jonathan Amery, Shakira Ramos, Jennifer Chen, Robert Gaspar, Yolanda McManus, and Jim Parry. Thanks to my colleague Joe Palladino in the Engineering Department, who served as the La\TeX\ meister throughout the project; to Chuck Liang in the Computer Science Department for interesting Java examples; and to my good Hawaii friend and limerick meister, Lanning Lee. To my Trinity computer science colleagues, Madalene Spezialetti and Ralph Walde, thanks for their generous support and advice, especially during the early stages of this project. They're the ones who pulled me back over the rail when I went overboard with the ``objects first'' juggernaut. They also helped rescue CyberPet from its germ as a (lame!) horse. With their conjurings and refinements it evolved through a dog, a parrot, and then a ``net pet,'' before settling, rather nicely we think, as CyberPet. They also have my gratitude for being willing to subject our students to earlier (incomplete) drafts of the manuscript in their sections of our intro course. Madalene's suggestion to emphasize basic language features early led eventually to the book's ``Java Language Summary'' sections. She also took the first pass at drafting material that appears in Chapter 0 and 1. Although that material has been rewritten (and whatever flaws it has are entirely mine), it still bears the stamp of her influence. Their criticisms and suggestions have improved the text in immeasurable and significant ways, and the gentleness, subtleness, and humor with which they delivered their suggestions have helped sustain our friendship. Finally, thanks to my wife, Choong Lan How, for her love and encouragement, and for her careful reading of the first three chapters; to my daughter Alicia for her feedback on artistic matters; and to my daughter Meisha for her tremendous help in producing the solutions manual and the on-line study guide. \clearpage \thispagestyle{plain} \markboth{\fontRHch\color{cyan}Brief Contents\hspace*{5pt}$\bullet$}{\color{cyan}$\bullet$\hspace*{5pt}\fontRHch Brief Contents} \begin{textblock}{1}(-3,-3)% \noindent\epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \vspace*{60pt}\noindent{\fontFMprt\color{cyan} Brief Contents} \begin{textblock}{1}(15,10.5)% \noindent\epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:FM_CO3.eps}% \end{textblock}% \vspace*{26pt}\fontFMbrftcct\baselineskip16pt \begin{BCch} \addtocounter{BCchcount}{-1} \item[] Preface \hfill ix \item Computers, Objects, and Java\hfill 3 \item Java Program Design and Development\hfill 29 \item Objects: Defining, Creating, and Using\hfill 67 \item Methods: Communicating with Objects\hfill 115 \item Applets: Programming for the World Wide Web\hfill 167 \item Java Data and Operators\hfill 219 \item Control Structures\hfill 275 \item Strings and String Processing\hfill 331 \item Arrays and Array Processing\hfill 377 \item Graphical User Interfaces\hfill 439 \item Graphics and Drawing\hfill 495 \item Exceptions: When Things Go Wrong\hfill 551 \item Recursive Problem Solving\hfill 595 \item Threads and Concurrent Programming\hfill 635 \item Files, Streams, and Input/Output Techniques\hfill 691 \item Sockets and Networking\hfill 737 \item Data Structures: Lists, Stacks, and Queues\hfill 791 \end{BCch} \begin{BCap} \item Coding Conventions\hfill 824 \item The Java Development Kit\hfill 831 \item The ASCII and Unicode Character Sets\hfill 839 \item Java Keywords\hfill 840 \item Operator Precedence Hierarchy\hfill 841 \item Advanced Language Features\hfill 843 \item Java and UML Resources\hfill 849 \item[] Subject Index\hfill 851 \end{BCap} \clearpage \mbox{ } \thispagestyle{empty} \begin{textblock}{1}(-3,-3)% \noindent\epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \clearpage \thispagestyle{plain} \markboth{\fontRHch\color{cyan}CONTENTS\hspace*{5pt}$\bullet$}{\color{cyan}$\bullet$\hspace*{5pt}\fontRHch CONTENTS} \begin{textblock}{1}(-3,-3)% \noindent\epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \vspace*{60pt}\noindent{\fontFMprt\color{cyan}Contents} \begin{textblock}{1}(11,10.5)% \noindent\epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:FM_CO4.eps}% \end{textblock}% \vspace*{26pt}\normalsize\baselineskip12pt \begin{CH} \addtocounter{TOCchcount}{-1} \item[] Preface\hfill ix \vspace{-9pt}\item Computers, Objects, and Java\hfill 3 \begin{SEC} \item Welcome\quad 4 \item Why Study Programming?\quad 4 \item Why Java?\quad 4 \item What Is a Computer?\quad 6 \item[]{\color{cyan}Processors Then and Now}\quad 8 \item The Internet and the World Wide Web\quad 8 \item Programming Languages\quad 10 \item What Is Object-Oriented Programming?\quad 12 \begin{SUBSEC} \item Basic Object-Oriented Programming Metaphor: \\\hspace*{1pc}Interacting Objects\quad 12 \item What Is a Java Object?\quad 13 \item What Is a Java Class?\quad 14 \item What Is a Message?\quad 15 \item What Is a Class Hierarchy?\quad 15 \item What Is Class Inheritance?\quad 16 \item What Is an Interface?\quad 18 \item What Is Polymorphism?\quad 19 \item Principles of Object-Oriented Design\quad 20 \end{SUBSEC} \item Summary of UML Elements\quad 22 \begin{SUBSEC} \item Class Diagrams\quad 22 \item Packages\quad 23 \item Object Diagrams\quad 23 \item Collaboration Diagrams\quad 24 \item Sequence Diagrams\quad 24 \end{SUBSEC} \item[]{\small Chapter Summary\quad 24 \vspace{-1pt}\item[] Exercises\quad 25} \end{SEC} \vspace{-9pt}\item Java Program Design and Development\hfill 29 \begin{SEC} \item Introduction\quad 30 \item Designing Good Programs\quad 30 \begin{SUBSEC} \item The Software Life Cycle\quad 30 \item Problem Decomposition\quad 32 \item Object Design\quad 33 \item Data, Methods, and Algorithms\quad 34 \item Coding into Java\quad 36 \item Testing, Debugging, and Revising\quad 38 \item[]{\color{cyan}Grace Hopper and the First Computer Bug}\quad 39 \item Writing Readable Programs\quad 39 \item[]{\color{cyan}Java Language Summary}\quad 40 \end{SUBSEC} \item Editing, Compiling, and Running a Java Program\quad 45 \begin{SUBSEC} \item Java Applications and Applets\quad 45 \item Java Development Environments\quad 46 \end{SUBSEC} \item[]{\color{cyan}From the Java Library: System and Printstream}\quad 50 %¥¥¥{\tt java.io.PrintStream} \item Qualified Names in Java\quad 52 \item[]{\color{cyan}In the Laboratory: Editing, Compiling, \\\hspace*{1pc}and Running an Applet}\quad 53 \item[]{\small Chapter Summary\quad 60 \item[] Solutions to Self-Study Exercises\quad 61 \vspace{-1pt}\item[] Exercises\quad 62} \end{SEC} \vspace{-9pt}\item Objects: Defining, Creating, and Using\hfill 67 \begin{SEC} \item Introduction\quad 68 \item Class Definition\quad 68 \begin{SUBSEC} \item The {\tt Rectangle }Class\quad 68 \item The {\tt RectangleUser} Class\quad 70 \item Object Instantiation: Creating {\tt Rectangle} Instances\quad 70 \item Interacting with {\tt Rectangles}\quad 71 \item Define, Create, Use\quad 72 \end{SUBSEC} \item{\color{cyan}Case Study: Simulating a CyberPet}\quad 72 \begin{SUBSEC} \item Designing the {\tt CyberPet} Class\quad 73 \item Defining the {\tt CyberPet} Class\quad 74 \item Creating {\tt CyberPet} Instances\quad 82 \item Primitive Types and Reference Types\quad 84 \item Using {\tt CyberPets}\quad 85 \item Class Design: The {\tt TestCyberPet} Application\quad 86 \item Flow of Control: Method Call and Return\quad 87 \item Tracing the {\tt TestCyberPet} Program\quad 88 \item Class Design: The {\tt TestCyberPetApplet}\quad 90 \item Class Design: The {\tt CyberPet} Application\quad 91 \end{SUBSEC} \item[]{\color{cyan}Object-Oriented Design: Basic Principles}\quad 91 \item[]{\color{cyan}Alan Kay and the Smalltalk Language}\quad 93 \item[]{\color{cyan}From the Java Library: {\tt BufferedReader}, {\tt String}, \\\hspace*{1pc}{\tt Integer}}\quad 93 \item[]{\color{cyan}In the Laboratory: The {\tt Circle} Class}\quad 98 \item[]{\color{cyan}Java Language Summary}\quad 100 \item[]{\small Chapter Summary\quad 106 \item[] Solutions to Self-Study Exercises\quad 107 \vspace{-1pt}\item[] Exercises\quad 109} \end{SEC} \vspace{-9pt}\item Methods: Communicating with Objects\hfill 115 \begin{SEC} \item Introduction\quad 116 \item Passing Information to an Object\quad 116 \begin{SUBSEC} \item Arguments and Parameters\quad 119 \item Passing a String to {\tt CyberPet}\quad 121 \item Parameters and the Generality Principle\quad 122 \end{SUBSEC} \item Constructor Methods\quad 124 \begin{SUBSEC} \item Default Constructors\quad 126 \item Constructor Overloading and Method Signatures\quad 126 \item Constructor Invocation\quad 128 \end{SUBSEC} \item Retrieving Information from an Object\quad 128 \begin{SUBSEC} \item Invoking a Method That Returns a Value\quad 129 \end{SUBSEC} \item Passing a Value and Passing a Reference\quad 132 \item Flow of Control: Selection Control Structures\quad 134 \begin{SUBSEC} \item The Simple If Statement\quad 135 \item The If/Else Statement\quad 138 \item The Nested If/Else Multiway Selection Structure\quad 138 \item The Dangling Else Problem\quad 140 \item The Switch Multiway Selection Structure\quad 142 \end{SUBSEC} \item The Improved {\tt CyberPet}\quad 145 \item[]{\color{cyan}Intelligent Agents}\quad 148 \item[]{\color{cyan}From the Java Library: {\tt java.lang.Object}}\quad 148 \item[]{\color{cyan}Object-Oriented Design: Inheritance and \\\hspace*{1pc}Polymorphism}\quad 150 \item[]{\color{cyan}In the Laboratory: Feeding {\tt CyberPet}}\quad 151 \item[]{\color{cyan}Java Language Summary}\quad 153 \item[]{\small Chapter Summary\quad 156 \item[] Solutions to Self-Study Exercises\quad 156 \vspace{-1pt}\item[] Exercises\quad 159} \end{SEC} \item Applets: Programming for the World Wide Web\hfill 167 \begin{SEC} \item Introduction\quad 168 \item The {\tt Applet} Class\quad 168 \begin{SUBSEC} \item Java's GUI Components\quad 168 \end{SUBSEC} \item Class Inheritance\quad 170 \begin{SUBSEC} \item Objects, Assignments, and Types (Optional)\quad 171 \item Defining a {\tt Square} as a Subclass \\\hspace*{1pc}of {\tt Rectangle} (Optional)\quad 172 \end{SUBSEC} \item Applet Subclasses\quad 174 \item A Simple Applet\quad 175 \begin{SUBSEC} \item Inheriting Functionality\quad 176 \item Implementing an Interface\quad 178 \item Extending Functionality\quad 179 \item Using the Inheritance Hierarchy\quad 180 \item Polymorphism and Extensibility (Optional)\quad 182 \end{SUBSEC} \item Event-Driven Programming\quad 184 \begin{SUBSEC} \item The Java Event Model\quad 185 \item Tracing an Applet\quad 188 \end{SUBSEC} \item{\color{cyan}Case Study: The {\tt CyberPetApplet}}\quad 190 \begin{SUBSEC} \item Specifying the Interface\quad 190 \item Designing CyberPetApplet\quad 191 \item Applet Layout\quad 195 \item Handling CyberPetApplet Actions\quad 197 \item Running CyberPetApplet\quad 198 \end{SUBSEC} \item[]{\color{cyan}Object-Oriented Design: Inheritance and \\\hspace*{1pc}Polymorphism (Optional)}\quad 198 \item[]{\color{cyan}Tim Berners-Lee, Creator of the WWW}\quad 200 \item[]{\color{cyan}From the Java Library: {\tt java.awt.Image}}\quad 204 \item[]{\color{cyan}In the Laboratory: {\tt CyberPetApplet}}\quad 205 \item[]{\color{cyan}Java Language Summary}\quad 209 \item[]{\small Chapter Summary\quad 211 \item[] Solutions to Self-Study Exercises\quad 212 \vspace{-1pt}\item[] Exercises\quad 213} \end{SEC} \vspace{-8pt}\item Java Data and Operators\hfill 219 \begin{SEC} \item Introduction\quad 220 \item Programming = Representation + Action\quad 220 \item Boolean Data and Operators\quad 221 \begin{SUBSEC} \item Boolean (or Logical) Operations\quad 222 \item Precedence, Associativity, and Commutativity\quad 222 \end{SUBSEC} \item The Boolean-Based {\tt CyberPet} Model\quad 224 \item[]{\color{cyan}Are We Computers?}\quad 226 \item Numeric Data and Operators\quad 227 \begin{SUBSEC} \item Numeric Operations\quad 228 \item Operator Precedence\quad 231 \item Increment and Decrement Operators\quad 232 \item Assignment Operators\quad 234 \item Relational Operators\quad 235 \end{SUBSEC} \item{\color{cyan}Case Study: Converting Fahrenheit to Celsius}\quad 237 \begin{SUBSEC} \item Problem Decomposition\quad 237 \item Class Design: {\tt Temperature}\quad 237 \item Testing and Debugging\quad 238 \item The {\tt TemperatureTest} Class\quad 239 \item Algorithm Design: Data Conversion\quad 240 \item The {\tt TemperatureApplet} Class\quad 241 \end{SUBSEC} \item An Integer-Based {\tt CyberPet} Model\quad 245 \begin{SUBSEC} \item Class Constants\quad 245 \item The Revised {\tt CyberPet} Class\quad 248 \item Advantages of the Integer-Based {\tt CyberPet}\quad 249 \end{SUBSEC} \item[]{\color{cyan}Object-Oriented Design: Information Hiding}\quad 250 \item Character Data and Operators\quad 251 \begin{SUBSEC} \item Character to Integer Conversions\quad 252 \item Lexical Ordering\quad 254 \item Relational Operators\quad 254 \end{SUBSEC} \item Example: Character Conversions\quad 254 \begin{SUBSEC} \item Static Methods\quad 256 \end{SUBSEC} \item[]{\color{cyan}From the Java Library: {\tt java.lang.Math}}\quad 257 \item[]{\color{cyan}From the Java Library: {\tt java.text.NumberFormat}}\quad 259 \item Example: Calculating Compound Interest\quad 260 \item Problem Solving = Representation + Action\quad 263 \item[]{\color{cyan}In the Laboratory: The Leap-Year Problem}\quad 263 \item[]{\color{cyan}Java Language Summary}\quad 266 \item[]{\small Chapter Summary\quad 268 \item[] Solutions to Self-Study Exercises\quad 269 \vspace{-1pt}\item[] Exercises\quad 270} \end{SEC} \vspace{-10pt}\item Control Structures\hfill 275 \begin{SEC} \item Introduction\quad 276 \item Flow of Control: Repetition Structures\quad 276 \item Counting Loops\quad 278 \begin{SUBSEC} \item The For Structure\quad 278 \item Loop Bounds\quad 280 \item Infinite Loops\quad 280 \item Loop Indentation\quad 281 \item Nested Loops\quad 283 \end{SUBSEC} \item Example: Car Loan\quad 285 \item Conditional Loops\quad 287 \begin{SUBSEC} \item The While Structure\quad 287 \item The Do-While Structure\quad 289 \end{SUBSEC} \item Example: Computing Averages\quad 292 \item Example: Data Validation\quad 296 \item{\color{cyan}Case Study: Animated {\tt CyberPet}}\quad 299 \begin{SUBSEC} \item Problem Description and Specification\quad 299 \item Class Design: {\tt CyberPetApplet}\quad 299 \item Algorithm Design: {\tt doEatAnimation()}\quad 300 \item Implementation\quad 301 \end{SUBSEC} \item Principles of Loop Design\quad 303 \item[]{\color{cyan}Object-Oriented Design: Structured Programming}\quad 304 \item[]{\color{cyan}What Can Be Computed?}\quad 310 \item[]{\color{cyan}From the Java Library: {\tt java.awt.TextArea}}\quad 311 \item[]{\color{cyan}Cryptography}\quad 314 \item[]{\color{cyan}In the Laboratory: Finding Prime Numbers}\quad 314 \item[]{\color{cyan}Java Language Summary}\quad 319 \item[]{\small Chapter Summary\quad 320 \item[] Solutions to Self-Study Exercises\quad 321 \vspace{-1pt}\item[] Exercises}\quad 325 \end{SEC} \vspace{-10pt}\item Strings and String Processing\hfill 331 \begin{SEC} \item Introduction\quad 332 \item String Basics\quad 332 \begin{SUBSEC} \item Constructing Strings\quad 333 \item Concatenating Strings\quad 334 \item Indexing Strings\quad 335 \item Converting Data to String\quad 336 \end{SUBSEC} \item Finding Things Within a String\quad 337 \item Example: Keyword Search\quad 338 \item[]{\color{cyan}From the Java Library: {\tt java.lang.StringBuffer}}\quad 340 \item Retrieving Parts of Strings\quad 342 \item Example: Processing Names and Passwords\quad 343 \item Processing Each Character in a String\quad 345 \begin{SUBSEC} \item Off-by-One Error\quad 345 \item Example: Counting Characters\quad 346 \end{SUBSEC} \item{\color{cyan}Case Study: Silly {\tt CyberPet} String Tricks}\quad 346 \begin{SUBSEC} \item Class Design: {\tt StringTricks}\quad 346 \item Method Design: {\tt getNextTrick()}\quad 347 \item Method Design: {\tt reverse()}\quad 347 \item Method Design: {\tt toUpperCase()}\quad 348 \item Method Design: {\tt capitalize()}\quad 349 \item Miscellaneous {\tt String} Methods\quad 349 \end{SUBSEC} \item Comparing Strings\quad 350 \begin{SUBSEC} \item Object Identity Versus Object Equality\quad 352 \item String Identity Versus String Equality\quad 354 \end{SUBSEC} \item[]{\color{cyan}From the Java Library: {\tt java.util.StringTokenizer}}\quad 357 \item[]{\color{cyan}Historical Cryptography}\quad 358 \item[]{\color{cyan}Object-Oriented Design: The Abstract Cipher Class}\quad 359 \item[]{\color{cyan}In the Laboratory: Pig Latin Translation}\quad 365 \item[]{\color{cyan}Java Language Summary}\quad 368 \item[]{\small Chapter Summary\quad 368 \item[] Solutions to Self-Study Exercises\quad 369 \vspace{-1pt}\item[] Exercises\quad 372} \end{SEC} \item Arrays and Array Processing\hfill 377 \begin{SEC} \item Introduction\quad 378 \item One-Dimensional Arrays\quad 379 \begin{SUBSEC} \item Declaring and Creating Arrays\quad 380 \item Array Allocation\quad 381 \item Initializing Arrays\quad 383 \item Assigning and Using Array Values\quad 384 \end{SUBSEC} \item Simple Array Examples\quad 384 \item Example: Testing a Die\quad 386 \begin{SUBSEC} \item Generating Random Numbers\quad 387 \item The Die-Testing Experiment\quad 388 \end{SUBSEC} \item{\color{cyan}Case Study: CyberPet Animation}\quad 392 \item[]{\color{cyan}Data Compression}\quad 394 \item Array Algorithms: Sorting\quad 395 \begin{SUBSEC} \item Bubble Sort\quad 395 \item Algorithm: Swapping Memory Elements\quad 397 \item Selection Sort\quad 399 \item Passing Array Parameters\quad 400 \end{SUBSEC} \item Array Algorithms: Searching\quad 402 \begin{SUBSEC} \item Sequential Search\quad 402 \item Binary Search\quad 404 \end{SUBSEC} \item Two-Dimensional Arrays\quad 407 \begin{SUBSEC} \item Two-Dimensional Array Methods\quad 409 \item Passing Part of an Array to a Method\quad 411 \end{SUBSEC} \item Multidimensional Arrays\quad 415 \begin{SUBSEC} \item Array Initializers\quad 416 \item[]{\color{cyan}Object-Oriented Design: Polymorphic \\\hspace*{1pc}Sorting (Optional)}\quad 416 \end{SUBSEC} \item[]{\color{cyan}From the Java Library: {\tt java.util.Vector}}\quad 419 \item{\color{cyan}Case Study: Simulating a Card Deck}\quad 420 \begin{SUBSEC} \item Designing a {\tt Card }class\quad 420 \item Designing a {\tt Deck }class\quad 423 \end{SUBSEC} \item[]{\color{cyan}In the Laboratory: A Card-Game Applet}\quad 425 \item[]{\color{cyan}Java Language Summary}\quad 428 \item[]{\small Chapter Summary\quad 429 \item[] Solutions to Self-Study Exercises\quad 429 \vspace{-1pt}\item[] Exercises\quad 433} \end{SEC} \item Graphical User Interfaces\hfill 439 \vspace{6pt}\begin{SEC} \item Introduction\quad 440 \item[]{\color{cyan}From the Java Library: AWT to Swing}\quad 440 \item The Swing Component Set\quad 444 \item[]{\color{cyan}Object-Oriented Design: \\\hspace*{1pc}Model-View-Controller Architecture}\quad 445 \item The Java Event Model\quad 446 \begin{SUBSEC} \item Events and Listeners\quad 447 \item Event Classes\quad 448 \end{SUBSEC} \item{\color{cyan}Case Study: Designing a Basic GUI}\quad 450 \begin{SUBSEC} \item The Metric Converter Application\quad 451 \item Inner Classes and Adapter Classes\quad 455 \item GUI Design Critique\quad 456 \item Extending the Basic GUI: Button Array\quad 457 \item GUI Design Critique\quad 460 \end{SUBSEC} \item Containers and Layout Managers\quad 463 \begin{SUBSEC} \item Layout Managers\quad 463 \item The {\tt GridLayout }Manager\quad 464 \item GUI Design Critique\quad 465 \item The {\tt BorderLayout} Manager\quad 465 \end{SUBSEC} \item Checkboxes, Radio Buttons, and Borders\quad 467 \begin{SUBSEC} \item Checkbox and Radio Button Arrays\quad 469 \item Swing Borders\quad 470 \item The {\tt BoxLayout} Manager\quad 471 \item The {\tt ItemListener} Interface\quad 471 \item The {\tt OrderApplet}\quad 472 \end{SUBSEC} \item Menus and Scroll Panes\quad 475 \begin{SUBSEC} \item Adding a Menu Bar to an Application\quad 475 \item Menu Hierarchies\quad 477 \item Handling Menu Actions\quad 478 \item Adding Scrollbars to a Text Area\quad 479 \end{SUBSEC} \item[]{\color{cyan}In the Laboratory: The ATM Machine}\quad 482 \item[]{\color{cyan}Are Computers Intelligent?}\quad 483 \item[]{\small Chapter Summary\quad 489 \item[] Solutions to Self-Study Exercises\quad 490 \vspace{-1pt}\item[] Exercises\quad 492} \end{SEC} \item Graphics and Drawing\hfill 495 \begin{SEC} \item Introduction\quad 496 \item The Drawing Surface\quad 496 \item The Graphics Context\quad 496 \begin{SUBSEC} \item Graphics Color and Component Color\quad 498 \item The Graphics Coordinate System\quad 499 \item Properties of the Graphics Context\quad 499 \end{SUBSEC} \item The {\tt Color }Class\quad 500 \begin{SUBSEC} \item Example: The {\tt ColorPicker }Applet\quad 502 \item Painting Components\quad 504 \end{SUBSEC} \item[]{\color{cyan}Object-Oriented Design: Reference Constants}\quad 506 \item[]{\color{cyan}From the Java Library: {\tt Point}s and {\tt Dimension}s}\quad 507 \item Painting and Drawing Lines and Shapes\quad 508 \item Example: The {\tt ShapeDemo} Applet\quad 509 \item Graphing Equations\quad 512 \begin{SUBSEC} \item Example: The {\tt Graph }Program\quad 513 \end{SUBSEC} \item Drawing Bar Charts and Pie Charts\quad 517 \begin{SUBSEC} \item Scaling the Bar Chart\quad 517 \item Drawing Arcs\quad 520 \end{SUBSEC} \item Handling Text in a Graphics Context\quad 523 \begin{SUBSEC} \item The {\tt Font }and {\tt FontMetrics }Classes\quad 523 \item Example: The {\tt FontNames }Applet\quad 524 \item Font Metrics\quad 525 \item Example: Centering a Line of Text\quad 526 \end{SUBSEC} \item{\color{cyan}Case Study: Interactive Drawing}\quad 528 \begin{SUBSEC} \item Handling Mouse Events\quad 528 \item An Interactive Painting Program\quad 528 \item GUI Design\quad 528 \item Problem Decomposition: The MousePaint Class\quad 529 \item Algorithm: Handling Mouse Events\quad 529 \item Algorithm: The {\tt paintComponent()} Method\quad 530 \end{SUBSEC} \item[]{\color{cyan}Object-Oriented Design: The Scalable {\tt CyberPet}}\quad 533 \item[]{\color{cyan}In the Laboratory: The {\tt SelfPortrait} Class}\quad 541 \item[]{\small Chapter Summary\quad 543 \item[] Solutions to Self-Study Exercises\quad 544 \vspace{-1pt}\item[] Exercises\quad 547} \end{SEC} \item Exceptions: When Things Go Wrong\hfill 551 \begin{SEC} \item Introduction\quad 552 \item Handling Exceptional Conditions\quad 552 \begin{SUBSEC} \item Traditional Error Handling\quad 553 \item Java's Default Exception Handling\quad 553 \end{SUBSEC} \item Java's Exception Hierarchy\quad 554 \begin{SUBSEC} \item Checked and Unchecked Exceptions\quad 556 \item The {\tt Exception }Class\quad 557 \end{SUBSEC} \item Handling Exceptions Within a Program\quad 558 \begin{SUBSEC} \item Trying, Throwing, and Catching an Exception\quad 558 \item Separating Error Checking from Error Handling\quad 560 \item Syntax and Semantics of Try/Throw/Catch\quad 561 \item Restrictions on the Try/Catch/Finally Statement\quad 563 \item Dynamic Versus Static Scoping\quad 564 \item Exception Propagation: Searching for a Catch Block\quad 565 \end{SUBSEC} \item Error Handling and Robust Program Design\quad 568 \begin{SUBSEC} \item Print a Message and Terminate\quad 569 \item Log the Error and Resume\quad 569 \item Fix the Error and Resume\quad 570 \item To Fix or Not to Fix\quad 573 \end{SUBSEC} \item Creating and Throwing Your Own Exceptions\quad 576 \item[]{\color{cyan}From the Java Library: {\tt javax.swing.JOptionPane}}\quad 580 \item[]{\color{cyan}In the Laboratory: Measuring Exception Overhead}\quad 581 \item[]{\color{cyan}Java Language Summary}\quad 586 \item[]{\small Chapter Summary\quad 587 \item[] Solutions to Self-Study Exercises\quad 588 \vspace{-1pt}\item[] Exercises\quad 590} \end{SEC} \vspace{-9pt}\item Recursive Problem Solving\hfill 595 \begin{SEC} \item Introduction\quad 596 \begin{SUBSEC} \item Recursion as Repetition\quad 596 \item Recursion as a Problem-Solving Approach\quad 598 \end{SUBSEC} \item Recursive Definition\quad 598 \begin{SUBSEC} \item Factorial: {\it N}!\quad 598 \item Drawing a Nested Pattern\quad 599 \end{SUBSEC} \item Recursive String Methods\quad 600 \begin{SUBSEC} \item Printing a String\quad 601 \item Printing the String Backward\quad 604 \item Counting Characters in a String\quad 605 \item Translating a String\quad 607 \end{SUBSEC} \item Recursive Array Processing\quad 609 \begin{SUBSEC} \item Recursive Sequential Search\quad 609 \item Information Hiding\quad 611 \item Recursive Selection Sort\quad 613 \end{SUBSEC} \item Example: Drawing (Recursive) Fractals\quad 615 \begin{SUBSEC} \item Nested Squares\quad 615 \item The Sierpinski Gasket\quad 617 \end{SUBSEC} \item[]{\color{cyan}Object-Oriented Design: Tail Recursion}\quad 618 \item[]{\color{cyan}Object-Oriented Design: Recursion or Iteration?}\quad 620 \item[]{\color{cyan}Exploring the Mandelbrot Set}\quad 621 \item[]{\color{cyan}From the Java Library: {\tt javax.swing.JComboBox}}\quad 622 \item[]{\color{cyan}In the Laboratory: The {\tt RecursivePatterns} Applet}\quad 627 \item[]{\small Chapter Summary\quad 628 \item[] Solutions to Self-Study Exercises\quad 628 \vspace{-1pt}\item[] Exercises\quad 631} \end{SEC} \vspace{-9pt}\item Threads and Concurrent Programming\hfill 635 \begin{SEC} \item Introduction\quad 636 \item What Is a Thread?\quad 636 \begin{SUBSEC} \item Concurrent Execution of Threads\quad 637 \item Multithreaded Numbers\quad 638 \end{SUBSEC} \item[]{\color{cyan}From the Java Library: {\tt java.lang.Thread}}\quad 640 \item Thread States and Life Cycle\quad 645 \item Using Threads to Improve Interface Responsiveness\quad 647 \begin{SUBSEC} \item Single-Threaded Design\quad 647 \item Multithreaded Drawing: The Dotty Thread\quad 651 \item Advantages of Multithreaded Design\quad 654 \end{SUBSEC} \item{\color{cyan}Case Study: Cooperating Threads}\quad 655 \begin{SUBSEC} \item Problem Statement\quad 656 \item Design: The {\tt TakeANumber} Class\quad 656 \item Java Monitors and Mutual Exclusion\quad 658 \item The {\tt Customer }Class\quad 659 \item The {\tt Clerk }Class\quad 660 \item The {\tt Bakery }Class\quad 660 \item Problem: Critical Sections\quad 662 \item Using Wait/Notify to Coordinate Threads\quad 666 \end{SUBSEC} \item{\color{cyan}Case Study: The Spider and Fly Threads}\quad 669 \begin{SUBSEC} \item Problem Decomposition\quad 670 \item The Revised {\tt CyberPet }Class\quad 671 \item The Fly Thread\quad 673 \item The Spider Thread\quad 676 \item The {\tt CyberPetApplet }Class\quad 680 \end{SUBSEC} \item[]{\color{cyan}Object-Oriented Design: Inheritance and \\\hspace*{1pc}Polymorphism}\quad 680 \item[]{\color{cyan}In the Laboratory: The Spider, the Fly, and the Bee}\quad 682 \item[]{\small Chapter Summary\quad 685 \item[] Solutions to Self-Study Exercises\quad 687 \vspace{-1pt}\item[] Exercises\quad 688} \end{SEC} \vspace{-9pt}\item Files, Streams, and Input/Output Techniques\hfill 691 \vspace{-4pt}\begin{SEC} \item Introduction\quad 692 \item Streams and Files\quad 692 \begin{SUBSEC} \item The Data Hierarchy\quad 693 \item Binary Files and Text Files\quad 693 \item Input and Output Streams\quad 694 \end{SUBSEC} \item{\color{cyan}Case Study: Reading and Writing Text Files}\quad 698 \begin{SUBSEC} \item Text File Format\quad 698 \item Writing to a Text File\quad 698 \item Code Reuse: Designing Text File Output\quad 700 \item Reading from a Text File\quad 702 \item Code Reuse: Designing Text File Input\quad 706 \item The {\tt TextIO }Application\quad 707 \end{SUBSEC} \item The {\tt File }Class\quad 709 \begin{SUBSEC} \item Names and Paths\quad 709 \item Validating File Names\quad 710 \end{SUBSEC} \item Example: Reading and Writing Binary Files\quad 711 \begin{SUBSEC} \item Writing Binary Data\quad 712 \item Reading Binary Data\quad 715 \item The {\tt BinaryIO} Application\quad 717 \item Abstracting Data from Files\quad 717 \end{SUBSEC} \item Object Serialization: Reading and Writing Objects\quad 720 \begin{SUBSEC} \item The {\tt ObjectIO} Class\quad 722 \end{SUBSEC} \item[]{\color{cyan}From the Java Library: {\tt javax.swing.JFileChooser}}\quad 724 \item[]{\color{cyan}In the Laboratory: The {\tt TextEdit} Program}\quad 726 \item[]{\color{cyan}Databases and Personal Privacy}\quad 727 \item[]{\small Chapter Summary\quad 729 \item[] Solutions to Self-Study Exercises\quad 731 \vspace{-1pt}\item[] Exercises\quad 732} \end{SEC} \vspace{-11pt}\item Sockets and Networking\hfill 737 \vspace{-3pt}\begin{SEC} \item Introduction\quad 738 \item An Overview of Networks\quad 738 \begin{SUBSEC} \item Network Size and Topology\quad 738 \item Internets\quad 739 \item Network Protocols\quad 740 \item Client/Server Applications\quad 741 \item Lower Level Network Protocols\quad 742 \item The {\tt java.net} Package\quad 743 \end{SUBSEC} \item Using Network Resources from an Applet\quad 744 \item[]{\color{cyan}From the Java Library: {\tt java.net.URL}}\quad 745 \item The Slide Show Applet\quad 746 \begin{SUBSEC} \item The {\tt SlideShowApplet} Class\quad 747 \item The {\tt Timer} Class\quad 750 \end{SUBSEC} \item Using Network Resources from an Application\quad 751 \begin{SUBSEC} \item Downloading a Text File from the Web\quad 751 \item Code Reuse: The {\tt java.awt.Toolkit} Class\quad 753 \item The {\tt RealEstateViewer} Application\quad 754 \item Reusing Code\quad 758 \end{SUBSEC} \item Client/Server Communication via Sockets\quad 761 \begin{SUBSEC} \item The Server Protocol\quad 762 \item The Client Protocol\quad 763 \item A Two-Way Stream Connection\quad 763 \end{SUBSEC} \item{\color{cyan}Case Study: Generic Client/Server Classes}\quad 765 \begin{SUBSEC} \item Object-Oriented Design\quad 766 \item The {\tt EchoServer} Class\quad 768 \item The {\tt EchoClient} Class\quad 771 \item Abstracting the Generic Server\quad 774 \item Testing the Echo Service\quad 779 \end{SUBSEC} \item Java Network Security Restrictions\quad 780 \item[]{\color{cyan}In the Laboratory: The Internet CyberPet}\quad 781 \item[]{\color{cyan}Privacy and the Internet}\quad 782 \item[]{\small Chapter Summary\quad 786 \item[] Solutions to Self-Study Exercises\quad 787 \vspace{-1pt}\item[] Exercises\quad 788} \end{SEC} \vspace{-11pt}\item Data Structures: Lists, Stacks, and Queues\hfill 791 \vspace{-3pt}\begin{SEC} \item Introduction\quad 792 \item The Linked List Data Structure\quad 792 \begin{SUBSEC} \item Using References to Link Objects\quad 792 \item Example: The Dynamic Phone List\quad 794 \item Manipulating the Phone List\quad 796 \end{SUBSEC} \item[]{\color{cyan}Object-Oriented Design: The List Abstract \\\hspace*{1pc}Data Type (ADT)}\quad 803 \item The Stack ADT\quad 808 \begin{SUBSEC} \item The {\tt Stack }Class\quad 809 \item Testing the {\tt Stack} Class\quad 810 \end{SUBSEC} \item The Queue ADT\quad 811 \begin{SUBSEC} \item The {\tt Queue} Class\quad 811 \end{SUBSEC} \item[]{\color{cyan}From the Java Library: {\tt java.util.Stack}}\quad 812 \item[]{\color{cyan}In the Laboratory: Capital Gains}\quad 813 \item[]{\color{cyan}The LISP Language}\quad 814 \item[]{\small Chapter Summary\quad 818 \item[] Solutions to Self-Study Exercises\quad 819 \vspace{-1pt}\item[] Exercises\quad 822} \end{SEC} \end{CH} \begin{APP} \item Coding Conventions\hfill 824 \begin{APPSEC} \item Comments\quad 824 \item Indentation and White Space\quad 826 \item Naming Conventions\quad 826 \item Use of Braces\quad 827 \item File Names and Layout\quad 828 \item Statements\quad 828 \item Executable Statements\quad 830 \item Preconditions and Postconditions\quad 830 \item Sample Programs\quad 830 \end{APPSEC} \item The Java Development Kit\hfill 831 \begin{APPSEC} \item The Java Compiler: {\tt javac}\quad 831 \item The Java Interpreter: {\tt java}\quad 833 \item The {\tt appletviewer}\quad 833 \item The Java Archiver {\tt jar} Tool\quad 837 \item The Java Documentation Tool: {\tt javadoc}\quad 838 \end{APPSEC} \item The ASCII and Unicode Character Sets\hfill 839 \item Java Keywords\hfill 840 \item Operator Precedence Hierarchy\hfill 841 \item Advanced Language Features\hfill 843 \begin{APPSEC} \item Inner Classes\quad 843 \item Nested Top-Level Versus Member Classes\quad 844 \item Local and Anonymous Inner Classes\quad 845 \end{APPSEC} \item Java and UML Resources\hfill 849 \begin{APPSEC} \item Reference Books\quad 849 \item Online References\quad 849 \end{APPSEC} \vspace{12pt}\item[] Subject Index\hfill 851 \end{APP} % \end{document} \ No newline at end of file +%FM Morelli \documentclass{book} % % \input morelli.sty \input morelliFM.sty % % \raggedbottom%¥¥Eliminata giustif. verticale, mettere % prima di stampare % % \begin{document} % \setcounter{page}{1} \pagenumbering{roman} % \spnorm\thispagestyle{empty} \parindent 0pc \begin{minipage}{40.5pc} \begin{center} \vspace*{70pt}\fontFMtped SECOND EDITION \vspace*{36pt}{\color{cyan}\fontFMtpt JAVA, JAVA, JAVA\raisebox{35pt}{\fontFMtptsup TM}!} \vspace*{12pt}\fontFMtpst Object-Oriented Problem Solving \vspace*{48pt}{\color{cyan}\fontFMtpau Ralph Morelli} \vspace*{6pt}\fontFMtpaf Trinity College \vspace*{40pt}{\color{cyan}\fontFMtpaf Alan Apt Series} \vspace*{144pt}\epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:prenhall_b&w.eps,width=4pc,clip=} \vspace*{3pt}\bf Prentice Hall \rm Upper Saddle River, New Jersey 07458 \end{center} \begin{textblock}{1}(-3,-3)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \begin{textblock}{1}(0,17)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:FM_CO1.eps}% \end{textblock}% \begin{textblock}{1}(40,17)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:FM_CO2.eps}% \end{textblock}% \begin{textblock}{1}(0,-.75)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:TitleArt_cyan.eps}% \end{textblock}% \end{minipage} \clearpage \thispagestyle{empty} \begin{textblock}{1}(-3,-3)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \small\baselineskip11pt{\fontFMcip Library of Cataloging-in-Publication Data} \vspace{5pt}Morelli, R. (Ralph) \qquad Java, Java, Java : object oriented problem solving/by Ralph Morelli.---2nd ed. \qquad \quad p.\quad cm. \qquad ISBN 0-13-033370-0 \qquad 1. Object-oriented programming (Computer science) 2. Java (Computer \quad program language) I. Title. \quad QA76.64 .M64 2002 \quad 005.13'3---dc21\hfill 2001050018 \vspace{32pt}Vice President and Editorial Director: {\it Marcia Horton} Publisher: {\it Alan Apt} Associate Editor: {\it Toni D. Holm} Editorial Assistant: {\it Patrick Lindner} Vice President and Director of Production \hspace*{1pc}and Manufacturing, ESM: {\it David W. Riccardi} Executive Managing Editor: {\it Vince O'Brien} Assistant Managing Editor: {\it Camille Trentacoste} Developmental Editor: {\it Jerry Ralya} Production Editor: {\it Fran Daniele} Director of Creative Services: {\it Paul Belfanti} %¥¥¥Senior Manager, Artworks: {\it Patricia Burns} Creative Director: {\it Carole Anson} Art Director: {\it Heather Scott} Art Editor: {\it Xiahong Zhu} Design Technical Support: {\it John Christiana} Manufacturing Manager: {\it Trudy Pisciotti} Manufacturing Buyer: {\it Lynda Castillo} Marketing Assistant: {\it Barrie Rheinhold} %¥¥¥Production/Composition Services: {\it Prepar\'{e}, Inc.} \vspace{17pt}\epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:prenhall_b&w.eps,width=3pc,clip=} \vspace{-25pt}\hspace*{3.5pc}\copyright\ 2003 by Prentice-Hall, Inc.%¥¥¥Pearson Education \hspace*{3.5pc}Upper Saddle River, New Jersey 07458 \vspace{17pt}All rights reserved. No part of this book may be reproduced, in any form or by any means, without permission in writing from the publisher. \vspace{22pt}Printed in the United States of America 10\quad 9\quad 8\quad 7\quad 6\quad 5\quad 4\quad 3\quad 2\quad 1 \vspace{17pt}{\fontFMocra ISBN 0-13-033370-0} \vspace{17pt}Pearson Education Ltd., {\it London} Pearson Education Australia Pty. Ltd., {\it Sydney} Pearson Education Singapore, Pte. Ltd. Pearson Education North Asia Ltd., {\it Hong Kong} Pearson Education Canada, Inc., {\it Toronto} Pearson Educac\'{\i}on de Mexico, S.A. de C.V. Pearson Education---Japan, {\it Tokyo} Pearson Education Malaysia, Pte. Ltd. Pearson Education, {\it Upper Saddle River, New Jersey} \clearpage \thispagestyle{empty} \vspace*{132pt}{\fontFMded\color{cyan}To My Parents, Ralph and Ann Morelli} \begin{textblock}{1}(29,16)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:FM_CO3.eps}% \end{textblock}% \begin{textblock}{1}(-3,-3)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \clearpage \thispagestyle{plain} \mbox{ } \begin{textblock}{1}(-.75,-.75)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:Morelli_walk_01.eps}% \end{textblock}% \begin{textblock}{1}(-3,-3)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \clearpage \mbox{ } \thispagestyle{plain} \begin{textblock}{1}(-0.75,-.75)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:Morelli_walk_02.eps}% \end{textblock}% \begin{textblock}{1}(-3,-3)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \clearpage \thispagestyle{plain} \mbox{ } \begin{textblock}{1}(-3,-3)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \begin{textblock}{1}(-0.75,-.75)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:Morelli_walk_03.eps}% \end{textblock}% \clearpage \thispagestyle{plain} \mbox{ } \begin{textblock}{1}(-3,-3)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \begin{textblock}{1}(-0.75,-.75)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:Morelli_walk_04.eps}% \end{textblock}% \clearpage \thispagestyle{empty} \mbox{ } \begin{textblock}{1}(-3,-3)% \epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \clearpage \thispagestyle{plain} \normalsize\parindent 1pc \setcounter{table}{0} \setcounter{figure}{0} \renewcommand{\thetable}{\mbox{\arabic{table}}}% \renewcommand{\thefigure}{\mbox{\arabic{figure}}}% \markboth{\fontRHch\color{cyan}PREFACE\hspace*{5pt}$\bullet$}{\color{cyan}$\bullet$\hspace*{5pt}\fontRHch PREFACE} \vspace*{60pt}\noindent{\fontFMprt\color{cyan} Preface} \begin{textblock}{1}(11,10.5)% \noindent\epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:FM_CO4.eps}% \end{textblock}% \begin{textblock}{1}(-3,-3)% \noindent\epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \vspace{10pt}\section*{Who Should Use This Book?} \noindent The topics covered and the approach taken in this book are suitable for a typical Introduction to Computer Science (CS1) course or for a slightly more advanced Java as a Second Language course. The book is also useful to professional programmers making the transition to Java and object-oriented programming. The book takes an ``objects first'' approach to programming and problem solving. It assumes no previous programming experience and requires no prior knowledge of Java or object-oriented programming. \section*{What's New in the Second Edition?} \noindent The second edition has the following substantive changes: \begin{BL} \item {\bf Unified Modeling Language (UML).} UML diagrams have been incorporated throughout the text to help illustrate object-oriented concepts and to describe the design of the Java programs we develop. Some of the UML diagrams replace diagrams used in the first edition, but many new diagrams have been introduced as well. \noindent\hspace*{1pc}UML is rapidly developing into an industry standard for designing object-oriented programs. So it will be useful for students to be familiar with it. But the main reason for incorporating UML is a pedagogical one: It makes it easier to present and teach object-oriented concepts such as information hiding, inheritance, and polymorphism. \item {\bf Emphasis on Object-Oriented Design.} The second edition places somewhat more emphasis on object-oriented design, mostly through the way examples are developed. Many of the programming examples were rewritten to focus on the design before getting into the Java coding details. This approach was greatly aided by the use of UML diagrams. \item {\bf Organizational Changes.} Based on suggestions from reviewers and users of the first edition, several chapters were reorganized. The first two chapters were extensively revised. Chapter~\ref{chapter-intro} now provides a more detailed overview of object orientation and introduces the main features of UML. This should help orient the student before getting into the discussion of Java's implementation of object-oriented concepts. To underscore the importance of design versus coding, Chapter~\ref{ch:intro2} has been reorganized to focus on program design and development before introducing any Java code. It also includes a concise overview of some of the basic Java language features. Thus, the student has been presented with a good bit of overview material before we begin looking at specific Java examples. \noindent In terms of the organization of Java language elements, discussion of the {\tt switch} statement was moved to Chapter~\ref{chapter-methods}, where it is covered along with the other selection-control structures. Chapter~\ref{chapter-exceptions} ``Exceptions'' was reorganized so that it can more easily be used much earlier in the course. \end{BL} \section*{Why Start with Objects?} \noindent {\it Java, Java, Java} takes an ``objects early'' approach to teaching Java, with the assumption that teaching beginners the ``big picture'' early gives them more time to master the principles of object-oriented programming. The first time I taught Java in our CS1 course, I followed the same approach I had been taking in teaching C and C++---namely, start with the basic language features and structured programming concepts and then, somewhere around midterm, introduce object orientation. This approach was familiar, for it was one taken in most of the textbooks then available in both Java and C++. One problem with this approach was that many students failed to get the big picture. They could understand loops, if-else constructs, and arithmetic expressions, but they had difficulty decomposing a programming problem into a well-organized Java program. Also, it seemed that this procedural approach failed to take advantage of the strengths of Java's object orientation. Why teach an object-oriented language if you're going to treat it like C or Pascal? I was reminded of a similar situation that existed when Pascal was the predominant CS1 language. Back then the main hurdle for beginners was {\it procedural abstraction}---learning the basic mechanisms of procedure call and parameter passing and learning how to {\bf design} programs as a collection of procedures. {\it Oh! Pascal!}, my favorite introductory text, was typical of a ``procedures early'' approach. It covered procedures and parameters in Chapter 2, right after covering the assignment and I/O constructs in Chapter 1. It then covered program design and organization in Chapter 3. It didn't get into loops, if-else, and other structured programming concepts until Chapter 4 and beyond. Presently, the main hurdle for beginners is {\it object abstraction}. Beginning programmers must be able to see a program as a collection of interacting objects and must learn how to decompose programming problems into well-designed objects. Object orientation subsumes both procedural abstraction and structured programming concepts from the Pascal days. Teaching ``objects early'' takes a top-down approach to these three important concepts. The sooner you begin to introduce objects and classes, the better the chances that students will master the important principles of object orientation. Object orientation (OO) is a fundamental problem-solving and design concept, not just another language detail that should be relegated to the middle or the end of the book (or course). If OO concepts are introduced late, it is much too easy to skip over them when push comes to shove in the course. Java is a good language for introducing object orientation. Its object model is better organized than C++. In C++, it is easy to ``work around'' or completely ignore OO features and treat the language like C.~In Java, there are good opportunities for motivating the discussion of object orientation. For example, it's almost impossible to discuss applets without discussing inheritance and polymorphism. Thus, rather than using contrived examples of OO concepts, instructors can use some of Java's basic features---applets, the class library, GUI components---to motivate these discussions in a natural way. \vspace{7pt}\section*{Key Features} \noindent In addition to its ``objects early'' approach, this book has several other important features. \begin{BL} \item {\bf Unified Modeling Language (UML) Diagrams.} More than 225 UML diagrams have been incorporated throughout the text to explain object-oriented concepts and to focus on object-oriented design. The advantages of using UML are several. First, UML diagrams provide a concise visual means of describing the main features of classes and objects. In one glance you can see an object's attributes and methods, whether they are private or public, and how the class or object relates to other classes. Second, UML diagrams provide simple graphical models for important object-oriented concepts such as inheritance and polymorphism. A picture is worth 1,000 words, so in addition to the descriptions provided in words, the UML diagrams should help students learn these important concepts. Third, for the purposes for which it is used in this book, UML is relatively easy and intuitive to understand. The basic notation is introduced in Chapter 0 through simple, accessible examples. Finally, UML is rapidly becoming an industry standard. So gaining familiarity with UML in this book will make other books on Java or object-oriented design more accessible. \item {\bf The {\tt CyberPet} Example.} Throughout the text a {\tt CyberPet} class is used as a running example to motivate and illustrate important concepts. The {\tt CyberPet} is introduced in Chapter~\ref{chapter-objects}, as a way of ``anthropomorphizing'' the basic features of objects. Thus, individual {\tt CyberPet}s belong to a class (definition), have a certain state (instance variables), and are capable of certain behaviors like eating and sleeping (instance methods). Method calls are used to command the {\tt CyberPet}s to eat and sleep. In Chapter~\ref{chapter-methods} the emphasis is on defining and using methods and parameters to promote communication with {\tt CyberPet}s. In subsequent chapters, concepts such as inheritance, randomness, animation, and threads are illustrated in terms of the {\tt CyberPet}. Some of the lab and programming exercises are also centered around extending the behavior and sophistication of the {\tt CyberPet}. \item {\bf Applets and GUIs.} Applets and GUIs are first introduced in Chapter~\ref{chapter-io} and then used throughout the rest of the text. Clearly, applets are a ``turn-on'' for introductory students and can be used as a good motivating factor. Plus, {\it event-driven programming} and Graphical User Interfaces (GUIs) are what students ought now to be learning in CS1. We are long past the days when command-line interfaces were the norm in applications programming. Another nice thing about Java applets is that they are fundamentally object oriented. To understand them fully, students need to understand basic OO concepts. That's why applets are not introduced until Chapter 4, where they provide an excellent way to motivate the discussion of inheritance and polymorphism. \vspace{3pt}\item {\bf Companion Web Site.} The text is designed to be used in conjunction with a companion Web site that includes many useful resources, including the Java code and Java documentation (in HTML) for all the examples in the text, additional lab and programming assignments, online quizzes that can be scored automatically, and PowerPoint class notes. \vspace{3pt}\item {\bf Problem-Solving Approach.} A pedagogical, problem-solving approach is taken throughout the text. There are a total of 13 fully developed case studies, as well as numerous other examples that illustrate the problem-solving process. Marginal notes in the text repeatedly emphasize the basic elements of object-oriented problem solving: What objects do we need? What methods and data do we need? What algorithm should we use? And so on. \vspace{3pt}\item {\bf Self-Study Exercises.} The book contains more than 200 self-study exercises, with answers provided at the back of each chapter. \vspace{3pt}\item {\bf End-of-Chapter Exercises.} Over 400 end-of-chapter exercises are provided, including ``Challenge'' exercises at the end of most sets. The answers are provided in an Instructor's Manual, which is available to adopters. \vspace{3pt}\item {\bf Programming, Debugging, and Design Tips.} The book contains nearly 400 separately identified ``tips'' (Programming Tips, Debugging Tips, Effective Design Principles, and Java Language Rules) that provide useful programming and design information in a nutshell. \vspace{3pt}\item {\bf Hands-On Learning Sections.} Each chapter concludes with a laboratory exercise, so the text can easily be used to support lab-based CS1 courses. For CS1 courses that are not lab based, these sections can still be read as preparation for a programming assignment, or as an in-class demo, or as some other form of hands-on exercise. For each lab in the text, the companion Web site contains additional resources and handouts, as well as a repository of alternative lab assignments. \vspace{3pt}\item {\bf ``From the Library'' Sections.} Each chapter includes a section that introduces one or more of the library classes from the Java API (Application Programming Interface). In the early chapters, these sections provide a way of introducing tools, such as I/O classes and methods, needed to write simple programs. In subsequent chapters, some of these sections introduce useful but optional topics, such as the {\tt NumberFormat} class used to format numeric output. Others introduce basic GUI (Graphical User Interface) components that are used in program examples and the laboratory sections. \vspace{3pt}\item {\bf ``Object-Oriented Design'' Sections.} Each chapter includes a section on object-oriented design, which is used to underscore and amplify important principles such as inheritance, polymorphism, and information hiding. For instructors wishing to emphasize object-oriented design, Table~1 provides a list of sections that should be covered. \vspace{3pt}\item {\bf ``Java Language Summary''.} Those chapters that introduce language features contain ``Java Language Summary'' sections that summarize the features' essential syntax and semantics. \end{BL} \begin{table}[tb] %\hphantom{\caption{An overview of object-oriented sections.}\label{tab-ood}} \TBT{0.5pc}{An overview of object-oriented sections.} \begin{tabular}{ll} \multicolumn{2}{l}{\color{cyan}\rule{26pc}{1pt}}\\[2pt] \TBCH{Topic} & \TBCH{Section} \\[-4pt]\multicolumn{2}{l}{\color{cyan}\rule{26pc}{0.5pt}}\\[2pt] What Is Object Orientation? & Chapter 0.7\\ Overview of UML & Chapter 0.8\\ Object-Oriented Design Process & Chapter 1.2\\ Objects: Defining, Creating, Using & Chapter 2\\ Methods: Communicating with Objects & Chapter 3\\ Inheritance: The {\tt toString()} Method & Chapter 3, OOD\\ Inheritance and Polymorphism in Applets & Chapter 4.2-4.4\\ Inheritance and Polymorphism: {\tt ToggleButton} & Chapter 4, OOD\\ Information Hiding & Chapter 5, OOD\\ Structured Programming Concepts & Chapter 6, OOD\\ Abstract Classes: {\tt Cipher} & Chapter 7, OOD\\ Polymorphism: Polymorphic Sorting & Chapter 8, OOD\\ Model-View-Controller Architecture & Chapter 9, OOD\\ Inheritance and Polymorphism: Spider/Fly Classes \hspace*{1pc}& Chapter 13.6\\ Generic Client/Server Classes & Chapter 15.7\\ Abstract Data Types: {\tt List} Class & Chapter 16, OOD \\[-4pt]\multicolumn{2}{l}{\color{cyan}\rule{26pc}{1pt}} \end{tabular} \endTB \vspace{-9pt}\end{table} \section*{Organization of the Text} \noindent The book is organized into three main parts. The first part (Chapters 0 through 4) introduces the basic concepts of object orientation, including objects, classes, methods, parameter passing, information hiding, inheritance, and polymorphism. Although the primary focus in these chapters is on object orientation rather than on Java language details, each of these chapters has a ``Java Language Summary'' section that summarizes the language elements introduced. In Chapters 1 to 3, students are given the basic building blocks for constructing a Java program from scratch. Although the programs at this stage have limited functionality in terms of control structures and data types, the priority is placed on how objects are constructed and how they interact with each other through method calls and parameter passing. The second part (Chapters 5 through 8) focuses on the remaining language elements, including data types and operators (Chapter 5), control structures (Chapter 6), strings (Chapter 7), and arrays (Chapter 8). Once the basic structure and framework of an object-oriented program are understood, it is relatively easy to introduce these language features. Part Three (Chapters 9 through 16) covers a variety of advanced topics, including Graphical User Interfaces (Chapter 9), graphics (Chapter 10), exceptions (Chapter 11), recursion (Chapter 12), threads (Chapter 13), files (Chapter 14), sockets (Chapter 15), and data structures (Chapter 16). Topics from these chapters can be used selectively depending on instructor and student interest. Table 2 provides an example syllabus from my % one-semester CS1 course. Our semester is 13 weeks (plus one reading week during which classes do not meet). \splarge Note that the advanced topic chapters needn't be covered in order. Recursion (Chapter 12) could be introduced at the same time or even before loops (Chapter 6). The recursion chapter includes examples using strings, arrays, and drawing algorithms (fractals), \spnormallar \begin{table}[htb]% %\hphantom{\caption{A one-semester course.}\label{tab-course}} \TBT{3.5pc}{A one-semester course.} \hspace*{3pc}\begin{tabular}{lll} \multicolumn{3}{l}{\color{cyan}\rule{20pc}{1pt}}\\[2pt] \TBCH{Weeks} & \TBCH{Topics} & \TBCH{Chapters} \\[-4pt]\multicolumn{3}{l}{\color{cyan}\rule{20pc}{0.5pt}}\\[2pt] 1 & Object Orientation, UML & Chapter 0\\ & Program Design and Development & Chapter 1\\ 2--4 & Objects and Class Definitions & Chapter 2 \\ & Methods and Parameters & Chapter 3 \\ & Selection Structure (if-else) & \\ 5 & Applet Programming & Chapter 4 \\ & Inheritance & \\ 6 & Data Types and Operators & Chapter 5 \\ 7--8 & Control Structures (Loops) & Chapter 6 \\ & Structured Programming & \\ 9 & String Processing (loops) & Chapter 7 \\ 10 & Array Processing & Chapter 8 \\ 11 & Recursion & Chapter 12 \\ 12 & Advanced Topic (GUIs) & Chapter 9 \\ 13 & Advanced Topic (Exceptions) & Chapter 11 \\ & Advanced Topic (Threads) & Chapter 13 \\[-4pt]\multicolumn{3}{l}{\color{cyan}\rule{20pc}{1pt}} \end{tabular} \endTB \vspace{-6pt}\end{table}% as well as some standard numerical algorithms (factorial). Another way to teach recursion would be to incorporate it into the discussion of strings (Chapter 7), arrays (Chapter~8), and graphics (Chapter 10), thereby treating iteration and recursion in parallel. Exceptions (Chapter 11) could also be covered earlier. The examples in the first few sections of this chapter use simple arithmetic operations and the basic for loop. If these language elements are introduced separately, then exceptions could be covered right after Chapter 3. Some of the examples in the advanced chapters use applets (Chapter~4) and GUIs (Chapter 9), so these chapters should ideally be covered before Chapters 10 (graphics), 13 (threads), 14 (files), and 15 (sockets and networking). However, Chapter 16 (data structures) and sections of the other advanced topic chapters can be covered independently of applets and GUIs. Figure~\ref{fig-depend} shows the major chapter dependencies in % the book. %\begin{figure} \begin{figure}[h] \figavarleft{FM:preface.eps}{20.25pc}{Chapter dependencies. } {fig-depend} \end{figure} %\end{figure} \section*{Acknowledgments} \noindent First, I would like to thank the reviewers and technical reviewers, whose comments often suggested important additions and revisions. For the first edition these include Pedro Larios (Metrowerks), Laird Dornin (Sun Microsystems), Katherine Lowrie (Trilogy Inc.), Robert Holloway (University of Wisconsin at Madison), Deborah Trytten (University of Oklahoma), Alan Miller (Golden Gate University), Haklin Kimm (University of Tennessee), and Jim Roberts (Carnegie Mellon University). For the second edition the reviewers include Jim Buffenbarger (Idaho State University), Dianne Wolff (Western Virginia Community College), Hamid Namati (University of North Carolina at Greensboro), Kelli Davis (Cape Fear Community College, North Carolina), Le Gruenwald (University of Oklahoma), Haklin Kimm (East Stroudsburg University), Dave Barrington (University of Massachusetts at Amherst), and John Ellis (University of Wyoming). The following UML experts deserve thanks for their many helpful suggestions regarding the use of UML in the book: William Tepfenhart (Monmouth University), Rolf Kamp (AT\&T), Scott Henninger (Univerity of Maryland), and Michael Huhns (University of South \mbox{Carolina).} At Prentice Hall, my appreciation goes to Sandi Hakansan for encouraging me to send the manuscript to Prentice Hall; to Alan Apt for taking on this project and for being a source of guidance and encouragement throughout; to Ana Arias Terry for her cheerful and professional management of the project; to Rose Kernan for guiding the project through a very tough production phase; and to Eric Unhjem and Toni Holm for their help and support. I especially want to thank my development editor, Jerry Ralya, whose careful work and many suggestions helped shape and improve the final result of both editions in immeasurable ways. I want to thank a number of Trinity College students who helped track down typos and other errors in earlier drafts of the text. These include Christian Allen, Jeff Green, Ryan Carmody, and Michael Wilson. I especially want to thank Jamie Mazur, whose feedback on the manuscript and enthusiasm for the objects-first approach and whose role in developing the solutions manual were much appreciated. My thanks to the following list of individuals who helped identify errors in the first edition: Ashton Hobbs, Elissa Lowe, Peter Casey, Bernd Bruegge, David Mix Barrington, Rommy Mayerowitz, Jason Smart, Colleen Kubont, Jonathan Amery, Shakira Ramos, Jennifer Chen, Robert Gaspar, Yolanda McManus, and Jim Parry. Thanks to my colleague Joe Palladino in the Engineering Department, who served as the La\TeX\ meister throughout the project; to Chuck Liang in the Computer Science Department for interesting Java examples; and to my good Hawaii friend and limerick meister, Lanning Lee. To my Trinity computer science colleagues, Madalene Spezialetti and Ralph Walde, thanks for their generous support and advice, especially during the early stages of this project. They're the ones who pulled me back over the rail when I went overboard with the ``objects first'' juggernaut. They also helped rescue CyberPet from its germ as a (lame!) horse. With their conjurings and refinements it evolved through a dog, a parrot, and then a ``net pet,'' before settling, rather nicely we think, as CyberPet. They also have my gratitude for being willing to subject our students to earlier (incomplete) drafts of the manuscript in their sections of our intro course. Madalene's suggestion to emphasize basic language features early led eventually to the book's ``Java Language Summary'' sections. She also took the first pass at drafting material that appears in Chapter 0 and 1. Although that material has been rewritten (and whatever flaws it has are entirely mine), it still bears the stamp of her influence. Their criticisms and suggestions have improved the text in immeasurable and significant ways, and the gentleness, subtleness, and humor with which they delivered their suggestions have helped sustain our friendship. Finally, thanks to my wife, Choong Lan How, for her love and encouragement, and for her careful reading of the first three chapters; to my daughter Alicia for her feedback on artistic matters; and to my daughter Meisha for her tremendous help in producing the solutions manual and the on-line study guide. \clearpage \thispagestyle{plain} \markboth{\fontRHch\color{cyan}Brief Contents\hspace*{5pt}$\bullet$}{\color{cyan}$\bullet$\hspace*{5pt}\fontRHch Brief Contents} \begin{textblock}{1}(-3,-3)% \noindent\epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \vspace*{60pt}\noindent{\fontFMprt\color{cyan} Brief Contents} \begin{textblock}{1}(15,10.5)% \noindent\epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:FM_CO3.eps}% \end{textblock}% \vspace*{26pt}\fontFMbrftcct\baselineskip16pt \begin{BCch} \addtocounter{BCchcount}{-1} \item[] Preface \hfill ix \item Computers, Objects, and Java\hfill 3 \item Java Program Design and Development\hfill 29 \item Objects: Defining, Creating, and Using\hfill 67 \item Methods: Communicating with Objects\hfill 115 \item Applets: Programming for the World Wide Web\hfill 167 \item Java Data and Operators\hfill 219 \item Control Structures\hfill 275 \item Strings and String Processing\hfill 331 \item Arrays and Array Processing\hfill 377 \item Graphical User Interfaces\hfill 439 \item Graphics and Drawing\hfill 495 \item Exceptions: When Things Go Wrong\hfill 551 \item Recursive Problem Solving\hfill 595 \item Threads and Concurrent Programming\hfill 635 \item Files, Streams, and Input/Output Techniques\hfill 691 \item Sockets and Networking\hfill 737 \item Data Structures: Lists, Stacks, and Queues\hfill 791 \end{BCch} \begin{BCap} \item Coding Conventions\hfill 824 \item The Java Development Kit\hfill 831 \item The ASCII and Unicode Character Sets\hfill 839 \item Java Keywords\hfill 840 \item Operator Precedence Hierarchy\hfill 841 \item Advanced Language Features\hfill 843 \item Java and UML Resources\hfill 849 \item[] Subject Index\hfill 851 \end{BCap} \clearpage \mbox{ } \thispagestyle{empty} \begin{textblock}{1}(-3,-3)% \noindent\epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \clearpage \thispagestyle{plain} \markboth{\fontRHch\color{cyan}CONTENTS\hspace*{5pt}$\bullet$}{\color{cyan}$\bullet$\hspace*{5pt}\fontRHch CONTENTS} \begin{textblock}{1}(-3,-3)% \noindent\epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:commonart:morelli.eps}% \end{textblock}% \vspace*{60pt}\noindent{\fontFMprt\color{cyan}Contents} \begin{textblock}{1}(11,10.5)% \noindent\epsfig{file=e2kl-D1:PH-e2kl:Morelli:0333700MOREL:FM:FM_CO4.eps}% \end{textblock}% \vspace*{26pt}\normalsize\baselineskip12pt \begin{CH} \addtocounter{TOCchcount}{-1} \item[] Preface\hfill ix \vspace{-9pt}\item Computers, Objects, and Java\hfill 3 \begin{SEC} \item Welcome\quad 4 \item Why Study Programming?\quad 4 \item Why Java?\quad 4 \item What Is a Computer?\quad 6 \item[]{\color{cyan}Processors Then and Now}\quad 8 \item The Internet and the World Wide Web\quad 8 \item Programming Languages\quad 10 \item What Is Object-Oriented Programming?\quad 12 \begin{SUBSEC} \item Basic Object-Oriented Programming Metaphor: \\\hspace*{1pc}Interacting Objects\quad 12 \item What Is a Java Object?\quad 13 \item What Is a Java Class?\quad 14 \item What Is a Message?\quad 15 \item What Is a Class Hierarchy?\quad 15 \item What Is Class Inheritance?\quad 16 \item What Is an Interface?\quad 18 \item What Is Polymorphism?\quad 19 \item Principles of Object-Oriented Design\quad 20 \end{SUBSEC} \item Summary of UML Elements\quad 22 \begin{SUBSEC} \item Class Diagrams\quad 22 \item Packages\quad 23 \item Object Diagrams\quad 23 \item Collaboration Diagrams\quad 24 \item Sequence Diagrams\quad 24 \end{SUBSEC} \item[]{\small Chapter Summary\quad 24 \vspace{-1pt}\item[] Exercises\quad 25} \end{SEC} \vspace{-9pt}\item Java Program Design and Development\hfill 29 \begin{SEC} \item Introduction\quad 30 \item Designing Good Programs\quad 30 \begin{SUBSEC} \item The Software Life Cycle\quad 30 \item Problem Decomposition\quad 32 \item Object Design\quad 33 \item Data, Methods, and Algorithms\quad 34 \item Coding into Java\quad 36 \item Testing, Debugging, and Revising\quad 38 \item[]{\color{cyan}Grace Hopper and the First Computer Bug}\quad 39 \item Writing Readable Programs\quad 39 \item[]{\color{cyan}Java Language Summary}\quad 40 \end{SUBSEC} \item Editing, Compiling, and Running a Java Program\quad 45 \begin{SUBSEC} \item Java Applications and Applets\quad 45 \item Java Development Environments\quad 46 \end{SUBSEC} \item[]{\color{cyan}From the Java Library: System and Printstream}\quad 50 %¥¥¥{\tt java.io.PrintStream} \item Qualified Names in Java\quad 52 \item[]{\color{cyan}In the Laboratory: Editing, Compiling, \\\hspace*{1pc}and Running an Applet}\quad 53 \item[]{\small Chapter Summary\quad 60 \item[] Solutions to Self-Study Exercises\quad 61 \vspace{-1pt}\item[] Exercises\quad 62} \end{SEC} \vspace{-9pt}\item Objects: Defining, Creating, and Using\hfill 67 \begin{SEC} \item Introduction\quad 68 \item Class Definition\quad 68 \begin{SUBSEC} \item The {\tt Rectangle }Class\quad 68 \item The {\tt RectangleUser} Class\quad 70 \item Object Instantiation: Creating {\tt Rectangle} Instances\quad 70 \item Interacting with {\tt Rectangles}\quad 71 \item Define, Create, Use\quad 72 \end{SUBSEC} \item{\color{cyan}Case Study: Simulating a CyberPet}\quad 72 \begin{SUBSEC} \item Designing the {\tt CyberPet} Class\quad 73 \item Defining the {\tt CyberPet} Class\quad 74 \item Creating {\tt CyberPet} Instances\quad 82 \item Primitive Types and Reference Types\quad 84 \item Using {\tt CyberPets}\quad 85 \item Class Design: The {\tt TestCyberPet} Application\quad 86 \item Flow of Control: Method Call and Return\quad 87 \item Tracing the {\tt TestCyberPet} Program\quad 88 \item Class Design: The {\tt TestCyberPetApplet}\quad 90 \item Class Design: The {\tt CyberPet} Application\quad 91 \end{SUBSEC} \item[]{\color{cyan}Object-Oriented Design: Basic Principles}\quad 91 \item[]{\color{cyan}Alan Kay and the Smalltalk Language}\quad 93 \item[]{\color{cyan}From the Java Library: {\tt BufferedReader}, {\tt String}, \\\hspace*{1pc}{\tt Integer}}\quad 93 \item[]{\color{cyan}In the Laboratory: The {\tt Circle} Class}\quad 98 \item[]{\color{cyan}Java Language Summary}\quad 100 \item[]{\small Chapter Summary\quad 106 \item[] Solutions to Self-Study Exercises\quad 107 \vspace{-1pt}\item[] Exercises\quad 109} \end{SEC} \vspace{-9pt}\item Methods: Communicating with Objects\hfill 115 \begin{SEC} \item Introduction\quad 116 \item Passing Information to an Object\quad 116 \begin{SUBSEC} \item Arguments and Parameters\quad 119 \item Passing a String to {\tt CyberPet}\quad 121 \item Parameters and the Generality Principle\quad 122 \end{SUBSEC} \item Constructor Methods\quad 124 \begin{SUBSEC} \item Default Constructors\quad 126 \item Constructor Overloading and Method Signatures\quad 126 \item Constructor Invocation\quad 128 \end{SUBSEC} \item Retrieving Information from an Object\quad 128 \begin{SUBSEC} \item Invoking a Method That Returns a Value\quad 129 \end{SUBSEC} \item Passing a Value and Passing a Reference\quad 132 \item Flow of Control: Selection Control Structures\quad 134 \begin{SUBSEC} \item The Simple If Statement\quad 135 \item The If/Else Statement\quad 138 \item The Nested If/Else Multiway Selection Structure\quad 138 \item The Dangling Else Problem\quad 140 \item The Switch Multiway Selection Structure\quad 142 \end{SUBSEC} \item The Improved {\tt CyberPet}\quad 145 \item[]{\color{cyan}Intelligent Agents}\quad 148 \item[]{\color{cyan}From the Java Library: {\tt java.lang.Object}}\quad 148 \item[]{\color{cyan}Object-Oriented Design: Inheritance and \\\hspace*{1pc}Polymorphism}\quad 150 \item[]{\color{cyan}In the Laboratory: Feeding {\tt CyberPet}}\quad 151 \item[]{\color{cyan}Java Language Summary}\quad 153 \item[]{\small Chapter Summary\quad 156 \item[] Solutions to Self-Study Exercises\quad 156 \vspace{-1pt}\item[] Exercises\quad 159} \end{SEC} \item Applets: Programming for the World Wide Web\hfill 167 \begin{SEC} \item Introduction\quad 168 \item The {\tt Applet} Class\quad 168 \begin{SUBSEC} \item Java's GUI Components\quad 168 \end{SUBSEC} \item Class Inheritance\quad 170 \begin{SUBSEC} \item Objects, Assignments, and Types (Optional)\quad 171 \item Defining a {\tt Square} as a Subclass \\\hspace*{1pc}of {\tt Rectangle} (Optional)\quad 172 \end{SUBSEC} \item Applet Subclasses\quad 174 \item A Simple Applet\quad 175 \begin{SUBSEC} \item Inheriting Functionality\quad 176 \item Implementing an Interface\quad 178 \item Extending Functionality\quad 179 \item Using the Inheritance Hierarchy\quad 180 \item Polymorphism and Extensibility (Optional)\quad 182 \end{SUBSEC} \item Event-Driven Programming\quad 184 \begin{SUBSEC} \item The Java Event Model\quad 185 \item Tracing an Applet\quad 188 \end{SUBSEC} \item{\color{cyan}Case Study: The {\tt CyberPetApplet}}\quad 190 \begin{SUBSEC} \item Specifying the Interface\quad 190 \item Designing CyberPetApplet\quad 191 \item Applet Layout\quad 195 \item Handling CyberPetApplet Actions\quad 197 \item Running CyberPetApplet\quad 198 \end{SUBSEC} \item[]{\color{cyan}Object-Oriented Design: Inheritance and \\\hspace*{1pc}Polymorphism (Optional)}\quad 198 \item[]{\color{cyan}Tim Berners-Lee, Creator of the WWW}\quad 200 \item[]{\color{cyan}From the Java Library: {\tt java.awt.Image}}\quad 204 \item[]{\color{cyan}In the Laboratory: {\tt CyberPetApplet}}\quad 205 \item[]{\color{cyan}Java Language Summary}\quad 209 \item[]{\small Chapter Summary\quad 211 \item[] Solutions to Self-Study Exercises\quad 212 \vspace{-1pt}\item[] Exercises\quad 213} \end{SEC} \vspace{-8pt}\item Java Data and Operators\hfill 219 \begin{SEC} \item Introduction\quad 220 \item Programming = Representation + Action\quad 220 \item Boolean Data and Operators\quad 221 \begin{SUBSEC} \item Boolean (or Logical) Operations\quad 222 \item Precedence, Associativity, and Commutativity\quad 222 \end{SUBSEC} \item The Boolean-Based {\tt CyberPet} Model\quad 224 \item[]{\color{cyan}Are We Computers?}\quad 226 \item Numeric Data and Operators\quad 227 \begin{SUBSEC} \item Numeric Operations\quad 228 \item Operator Precedence\quad 231 \item Increment and Decrement Operators\quad 232 \item Assignment Operators\quad 234 \item Relational Operators\quad 235 \end{SUBSEC} \item{\color{cyan}Case Study: Converting Fahrenheit to Celsius}\quad 237 \begin{SUBSEC} \item Problem Decomposition\quad 237 \item Class Design: {\tt Temperature}\quad 237 \item Testing and Debugging\quad 238 \item The {\tt TemperatureTest} Class\quad 239 \item Algorithm Design: Data Conversion\quad 240 \item The {\tt TemperatureApplet} Class\quad 241 \end{SUBSEC} \item An Integer-Based {\tt CyberPet} Model\quad 245 \begin{SUBSEC} \item Class Constants\quad 245 \item The Revised {\tt CyberPet} Class\quad 248 \item Advantages of the Integer-Based {\tt CyberPet}\quad 249 \end{SUBSEC} \item[]{\color{cyan}Object-Oriented Design: Information Hiding}\quad 250 \item Character Data and Operators\quad 251 \begin{SUBSEC} \item Character to Integer Conversions\quad 252 \item Lexical Ordering\quad 254 \item Relational Operators\quad 254 \end{SUBSEC} \item Example: Character Conversions\quad 254 \begin{SUBSEC} \item Static Methods\quad 256 \end{SUBSEC} \item[]{\color{cyan}From the Java Library: {\tt java.lang.Math}}\quad 257 \item[]{\color{cyan}From the Java Library: {\tt java.text.NumberFormat}}\quad 259 \item Example: Calculating Compound Interest\quad 260 \item Problem Solving = Representation + Action\quad 263 \item[]{\color{cyan}In the Laboratory: The Leap-Year Problem}\quad 263 \item[]{\color{cyan}Java Language Summary}\quad 266 \item[]{\small Chapter Summary\quad 268 \item[] Solutions to Self-Study Exercises\quad 269 \vspace{-1pt}\item[] Exercises\quad 270} \end{SEC} \vspace{-10pt}\item Control Structures\hfill 275 \begin{SEC} \item Introduction\quad 276 \item Flow of Control: Repetition Structures\quad 276 \item Counting Loops\quad 278 \begin{SUBSEC} \item The For Structure\quad 278 \item Loop Bounds\quad 280 \item Infinite Loops\quad 280 \item Loop Indentation\quad 281 \item Nested Loops\quad 283 \end{SUBSEC} \item Example: Car Loan\quad 285 \item Conditional Loops\quad 287 \begin{SUBSEC} \item The While Structure\quad 287 \item The Do-While Structure\quad 289 \end{SUBSEC} \item Example: Computing Averages\quad 292 \item Example: Data Validation\quad 296 \item{\color{cyan}Case Study: Animated {\tt CyberPet}}\quad 299 \begin{SUBSEC} \item Problem Description and Specification\quad 299 \item Class Design: {\tt CyberPetApplet}\quad 299 \item Algorithm Design: {\tt doEatAnimation()}\quad 300 \item Implementation\quad 301 \end{SUBSEC} \item Principles of Loop Design\quad 303 \item[]{\color{cyan}Object-Oriented Design: Structured Programming}\quad 304 \item[]{\color{cyan}What Can Be Computed?}\quad 310 \item[]{\color{cyan}From the Java Library: {\tt java.awt.TextArea}}\quad 311 \item[]{\color{cyan}Cryptography}\quad 314 \item[]{\color{cyan}In the Laboratory: Finding Prime Numbers}\quad 314 \item[]{\color{cyan}Java Language Summary}\quad 319 \item[]{\small Chapter Summary\quad 320 \item[] Solutions to Self-Study Exercises\quad 321 \vspace{-1pt}\item[] Exercises}\quad 325 \end{SEC} \vspace{-10pt}\item Strings and String Processing\hfill 331 \begin{SEC} \item Introduction\quad 332 \item String Basics\quad 332 \begin{SUBSEC} \item Constructing Strings\quad 333 \item Concatenating Strings\quad 334 \item Indexing Strings\quad 335 \item Converting Data to String\quad 336 \end{SUBSEC} \item Finding Things Within a String\quad 337 \item Example: Keyword Search\quad 338 \item[]{\color{cyan}From the Java Library: {\tt java.lang.StringBuffer}}\quad 340 \item Retrieving Parts of Strings\quad 342 \item Example: Processing Names and Passwords\quad 343 \item Processing Each Character in a String\quad 345 \begin{SUBSEC} \item Off-by-One Error\quad 345 \item Example: Counting Characters\quad 346 \end{SUBSEC} \item{\color{cyan}Case Study: Silly {\tt CyberPet} String Tricks}\quad 346 \begin{SUBSEC} \item Class Design: {\tt StringTricks}\quad 346 \item Method Design: {\tt getNextTrick()}\quad 347 \item Method Design: {\tt reverse()}\quad 347 \item Method Design: {\tt toUpperCase()}\quad 348 \item Method Design: {\tt capitalize()}\quad 349 \item Miscellaneous {\tt String} Methods\quad 349 \end{SUBSEC} \item Comparing Strings\quad 350 \begin{SUBSEC} \item Object Identity Versus Object Equality\quad 352 \item String Identity Versus String Equality\quad 354 \end{SUBSEC} \item[]{\color{cyan}From the Java Library: {\tt java.util.StringTokenizer}}\quad 357 \item[]{\color{cyan}Historical Cryptography}\quad 358 \item[]{\color{cyan}Object-Oriented Design: The Abstract Cipher Class}\quad 359 \item[]{\color{cyan}In the Laboratory: Pig Latin Translation}\quad 365 \item[]{\color{cyan}Java Language Summary}\quad 368 \item[]{\small Chapter Summary\quad 368 \item[] Solutions to Self-Study Exercises\quad 369 \vspace{-1pt}\item[] Exercises\quad 372} \end{SEC} \item Arrays and Array Processing\hfill 377 \begin{SEC} \item Introduction\quad 378 \item One-Dimensional Arrays\quad 379 \begin{SUBSEC} \item Declaring and Creating Arrays\quad 380 \item Array Allocation\quad 381 \item Initializing Arrays\quad 383 \item Assigning and Using Array Values\quad 384 \end{SUBSEC} \item Simple Array Examples\quad 384 \item Example: Testing a Die\quad 386 \begin{SUBSEC} \item Generating Random Numbers\quad 387 \item The Die-Testing Experiment\quad 388 \end{SUBSEC} \item{\color{cyan}Case Study: CyberPet Animation}\quad 392 \item[]{\color{cyan}Data Compression}\quad 394 \item Array Algorithms: Sorting\quad 395 \begin{SUBSEC} \item Bubble Sort\quad 395 \item Algorithm: Swapping Memory Elements\quad 397 \item Selection Sort\quad 399 \item Passing Array Parameters\quad 400 \end{SUBSEC} \item Array Algorithms: Searching\quad 402 \begin{SUBSEC} \item Sequential Search\quad 402 \item Binary Search\quad 404 \end{SUBSEC} \item Two-Dimensional Arrays\quad 407 \begin{SUBSEC} \item Two-Dimensional Array Methods\quad 409 \item Passing Part of an Array to a Method\quad 411 \end{SUBSEC} \item Multidimensional Arrays\quad 415 \begin{SUBSEC} \item Array Initializers\quad 416 \item[]{\color{cyan}Object-Oriented Design: Polymorphic \\\hspace*{1pc}Sorting (Optional)}\quad 416 \end{SUBSEC} \item[]{\color{cyan}From the Java Library: {\tt java.util.Vector}}\quad 419 \item{\color{cyan}Case Study: Simulating a Card Deck}\quad 420 \begin{SUBSEC} \item Designing a {\tt Card }class\quad 420 \item Designing a {\tt Deck }class\quad 423 \end{SUBSEC} \item[]{\color{cyan}In the Laboratory: A Card-Game Applet}\quad 425 \item[]{\color{cyan}Java Language Summary}\quad 428 \item[]{\small Chapter Summary\quad 429 \item[] Solutions to Self-Study Exercises\quad 429 \vspace{-1pt}\item[] Exercises\quad 433} \end{SEC} \item Graphical User Interfaces\hfill 439 \vspace{6pt}\begin{SEC} \item Introduction\quad 440 \item[]{\color{cyan}From the Java Library: AWT to Swing}\quad 440 \item The Swing Component Set\quad 444 \item[]{\color{cyan}Object-Oriented Design: \\\hspace*{1pc}Model-View-Controller Architecture}\quad 445 \item The Java Event Model\quad 446 \begin{SUBSEC} \item Events and Listeners\quad 447 \item Event Classes\quad 448 \end{SUBSEC} \item{\color{cyan}Case Study: Designing a Basic GUI}\quad 450 \begin{SUBSEC} \item The Metric Converter Application\quad 451 \item Inner Classes and Adapter Classes\quad 455 \item GUI Design Critique\quad 456 \item Extending the Basic GUI: Button Array\quad 457 \item GUI Design Critique\quad 460 \end{SUBSEC} \item Containers and Layout Managers\quad 463 \begin{SUBSEC} \item Layout Managers\quad 463 \item The {\tt GridLayout }Manager\quad 464 \item GUI Design Critique\quad 465 \item The {\tt BorderLayout} Manager\quad 465 \end{SUBSEC} \item Checkboxes, Radio Buttons, and Borders\quad 467 \begin{SUBSEC} \item Checkbox and Radio Button Arrays\quad 469 \item Swing Borders\quad 470 \item The {\tt BoxLayout} Manager\quad 471 \item The {\tt ItemListener} Interface\quad 471 \item The {\tt OrderApplet}\quad 472 \end{SUBSEC} \item Menus and Scroll Panes\quad 475 \begin{SUBSEC} \item Adding a Menu Bar to an Application\quad 475 \item Menu Hierarchies\quad 477 \item Handling Menu Actions\quad 478 \item Adding Scrollbars to a Text Area\quad 479 \end{SUBSEC} \item[]{\color{cyan}In the Laboratory: The ATM Machine}\quad 482 \item[]{\color{cyan}Are Computers Intelligent?}\quad 483 \item[]{\small Chapter Summary\quad 489 \item[] Solutions to Self-Study Exercises\quad 490 \vspace{-1pt}\item[] Exercises\quad 492} \end{SEC} \item Graphics and Drawing\hfill 495 \begin{SEC} \item Introduction\quad 496 \item The Drawing Surface\quad 496 \item The Graphics Context\quad 496 \begin{SUBSEC} \item Graphics Color and Component Color\quad 498 \item The Graphics Coordinate System\quad 499 \item Properties of the Graphics Context\quad 499 \end{SUBSEC} \item The {\tt Color }Class\quad 500 \begin{SUBSEC} \item Example: The {\tt ColorPicker }Applet\quad 502 \item Painting Components\quad 504 \end{SUBSEC} \item[]{\color{cyan}Object-Oriented Design: Reference Constants}\quad 506 \item[]{\color{cyan}From the Java Library: {\tt Point}s and {\tt Dimension}s}\quad 507 \item Painting and Drawing Lines and Shapes\quad 508 \item Example: The {\tt ShapeDemo} Applet\quad 509 \item Graphing Equations\quad 512 \begin{SUBSEC} \item Example: The {\tt Graph }Program\quad 513 \end{SUBSEC} \item Drawing Bar Charts and Pie Charts\quad 517 \begin{SUBSEC} \item Scaling the Bar Chart\quad 517 \item Drawing Arcs\quad 520 \end{SUBSEC} \item Handling Text in a Graphics Context\quad 523 \begin{SUBSEC} \item The {\tt Font }and {\tt FontMetrics }Classes\quad 523 \item Example: The {\tt FontNames }Applet\quad 524 \item Font Metrics\quad 525 \item Example: Centering a Line of Text\quad 526 \end{SUBSEC} \item{\color{cyan}Case Study: Interactive Drawing}\quad 528 \begin{SUBSEC} \item Handling Mouse Events\quad 528 \item An Interactive Painting Program\quad 528 \item GUI Design\quad 528 \item Problem Decomposition: The MousePaint Class\quad 529 \item Algorithm: Handling Mouse Events\quad 529 \item Algorithm: The {\tt paintComponent()} Method\quad 530 \end{SUBSEC} \item[]{\color{cyan}Object-Oriented Design: The Scalable {\tt CyberPet}}\quad 533 \item[]{\color{cyan}In the Laboratory: The {\tt SelfPortrait} Class}\quad 541 \item[]{\small Chapter Summary\quad 543 \item[] Solutions to Self-Study Exercises\quad 544 \vspace{-1pt}\item[] Exercises\quad 547} \end{SEC} \item Exceptions: When Things Go Wrong\hfill 551 \begin{SEC} \item Introduction\quad 552 \item Handling Exceptional Conditions\quad 552 \begin{SUBSEC} \item Traditional Error Handling\quad 553 \item Java's Default Exception Handling\quad 553 \end{SUBSEC} \item Java's Exception Hierarchy\quad 554 \begin{SUBSEC} \item Checked and Unchecked Exceptions\quad 556 \item The {\tt Exception }Class\quad 557 \end{SUBSEC} \item Handling Exceptions Within a Program\quad 558 \begin{SUBSEC} \item Trying, Throwing, and Catching an Exception\quad 558 \item Separating Error Checking from Error Handling\quad 560 \item Syntax and Semantics of Try/Throw/Catch\quad 561 \item Restrictions on the Try/Catch/Finally Statement\quad 563 \item Dynamic Versus Static Scoping\quad 564 \item Exception Propagation: Searching for a Catch Block\quad 565 \end{SUBSEC} \item Error Handling and Robust Program Design\quad 568 \begin{SUBSEC} \item Print a Message and Terminate\quad 569 \item Log the Error and Resume\quad 569 \item Fix the Error and Resume\quad 570 \item To Fix or Not to Fix\quad 573 \end{SUBSEC} \item Creating and Throwing Your Own Exceptions\quad 576 \item[]{\color{cyan}From the Java Library: {\tt javax.swing.JOptionPane}}\quad 580 \item[]{\color{cyan}In the Laboratory: Measuring Exception Overhead}\quad 581 \item[]{\color{cyan}Java Language Summary}\quad 586 \item[]{\small Chapter Summary\quad 587 \item[] Solutions to Self-Study Exercises\quad 588 \vspace{-1pt}\item[] Exercises\quad 590} \end{SEC} \vspace{-9pt}\item Recursive Problem Solving\hfill 595 \begin{SEC} \item Introduction\quad 596 \begin{SUBSEC} \item Recursion as Repetition\quad 596 \item Recursion as a Problem-Solving Approach\quad 598 \end{SUBSEC} \item Recursive Definition\quad 598 \begin{SUBSEC} \item Factorial: {\it N}!\quad 598 \item Drawing a Nested Pattern\quad 599 \end{SUBSEC} \item Recursive String Methods\quad 600 \begin{SUBSEC} \item Printing a String\quad 601 \item Printing the String Backward\quad 604 \item Counting Characters in a String\quad 605 \item Translating a String\quad 607 \end{SUBSEC} \item Recursive Array Processing\quad 609 \begin{SUBSEC} \item Recursive Sequential Search\quad 609 \item Information Hiding\quad 611 \item Recursive Selection Sort\quad 613 \end{SUBSEC} \item Example: Drawing (Recursive) Fractals\quad 615 \begin{SUBSEC} \item Nested Squares\quad 615 \item The Sierpinski Gasket\quad 617 \end{SUBSEC} \item[]{\color{cyan}Object-Oriented Design: Tail Recursion}\quad 618 \item[]{\color{cyan}Object-Oriented Design: Recursion or Iteration?}\quad 620 \item[]{\color{cyan}Exploring the Mandelbrot Set}\quad 621 \item[]{\color{cyan}From the Java Library: {\tt javax.swing.JComboBox}}\quad 622 \item[]{\color{cyan}In the Laboratory: The {\tt RecursivePatterns} Applet}\quad 627 \item[]{\small Chapter Summary\quad 628 \item[] Solutions to Self-Study Exercises\quad 628 \vspace{-1pt}\item[] Exercises\quad 631} \end{SEC} \vspace{-9pt}\item Threads and Concurrent Programming\hfill 635 \begin{SEC} \item Introduction\quad 636 \item What Is a Thread?\quad 636 \begin{SUBSEC} \item Concurrent Execution of Threads\quad 637 \item Multithreaded Numbers\quad 638 \end{SUBSEC} \item[]{\color{cyan}From the Java Library: {\tt java.lang.Thread}}\quad 640 \item Thread States and Life Cycle\quad 645 \item Using Threads to Improve Interface Responsiveness\quad 647 \begin{SUBSEC} \item Single-Threaded Design\quad 647 \item Multithreaded Drawing: The Dotty Thread\quad 651 \item Advantages of Multithreaded Design\quad 654 \end{SUBSEC} \item{\color{cyan}Case Study: Cooperating Threads}\quad 655 \begin{SUBSEC} \item Problem Statement\quad 656 \item Design: The {\tt TakeANumber} Class\quad 656 \item Java Monitors and Mutual Exclusion\quad 658 \item The {\tt Customer }Class\quad 659 \item The {\tt Clerk }Class\quad 660 \item The {\tt Bakery }Class\quad 660 \item Problem: Critical Sections\quad 662 \item Using Wait/Notify to Coordinate Threads\quad 666 \end{SUBSEC} \item{\color{cyan}Case Study: The Spider and Fly Threads}\quad 669 \begin{SUBSEC} \item Problem Decomposition\quad 670 \item The Revised {\tt CyberPet }Class\quad 671 \item The Fly Thread\quad 673 \item The Spider Thread\quad 676 \item The {\tt CyberPetApplet }Class\quad 680 \end{SUBSEC} \item[]{\color{cyan}Object-Oriented Design: Inheritance and \\\hspace*{1pc}Polymorphism}\quad 680 \item[]{\color{cyan}In the Laboratory: The Spider, the Fly, and the Bee}\quad 682 \item[]{\small Chapter Summary\quad 685 \item[] Solutions to Self-Study Exercises\quad 687 \vspace{-1pt}\item[] Exercises\quad 688} \end{SEC} \vspace{-9pt}\item Files, Streams, and Input/Output Techniques\hfill 691 \vspace{-4pt}\begin{SEC} \item Introduction\quad 692 \item Streams and Files\quad 692 \begin{SUBSEC} \item The Data Hierarchy\quad 693 \item Binary Files and Text Files\quad 693 \item Input and Output Streams\quad 694 \end{SUBSEC} \item{\color{cyan}Case Study: Reading and Writing Text Files}\quad 698 \begin{SUBSEC} \item Text File Format\quad 698 \item Writing to a Text File\quad 698 \item Code Reuse: Designing Text File Output\quad 700 \item Reading from a Text File\quad 702 \item Code Reuse: Designing Text File Input\quad 706 \item The {\tt TextIO }Application\quad 707 \end{SUBSEC} \item The {\tt File }Class\quad 709 \begin{SUBSEC} \item Names and Paths\quad 709 \item Validating File Names\quad 710 \end{SUBSEC} \item Example: Reading and Writing Binary Files\quad 711 \begin{SUBSEC} \item Writing Binary Data\quad 712 \item Reading Binary Data\quad 715 \item The {\tt BinaryIO} Application\quad 717 \item Abstracting Data from Files\quad 717 \end{SUBSEC} \item Object Serialization: Reading and Writing Objects\quad 720 \begin{SUBSEC} \item The {\tt ObjectIO} Class\quad 722 \end{SUBSEC} \item[]{\color{cyan}From the Java Library: {\tt javax.swing.JFileChooser}}\quad 724 \item[]{\color{cyan}In the Laboratory: The {\tt TextEdit} Program}\quad 726 \item[]{\color{cyan}Databases and Personal Privacy}\quad 727 \item[]{\small Chapter Summary\quad 729 \item[] Solutions to Self-Study Exercises\quad 731 \vspace{-1pt}\item[] Exercises\quad 732} \end{SEC} \vspace{-11pt}\item Sockets and Networking\hfill 737 \vspace{-3pt}\begin{SEC} \item Introduction\quad 738 \item An Overview of Networks\quad 738 \begin{SUBSEC} \item Network Size and Topology\quad 738 \item Internets\quad 739 \item Network Protocols\quad 740 \item Client/Server Applications\quad 741 \item Lower Level Network Protocols\quad 742 \item The {\tt java.net} Package\quad 743 \end{SUBSEC} \item Using Network Resources from an Applet\quad 744 \item[]{\color{cyan}From the Java Library: {\tt java.net.URL}}\quad 745 \item The Slide Show Applet\quad 746 \begin{SUBSEC} \item The {\tt SlideShowApplet} Class\quad 747 \item The {\tt Timer} Class\quad 750 \end{SUBSEC} \item Using Network Resources from an Application\quad 751 \begin{SUBSEC} \item Downloading a Text File from the Web\quad 751 \item Code Reuse: The {\tt java.awt.Toolkit} Class\quad 753 \item The {\tt RealEstateViewer} Application\quad 754 \item Reusing Code\quad 758 \end{SUBSEC} \item Client/Server Communication via Sockets\quad 761 \begin{SUBSEC} \item The Server Protocol\quad 762 \item The Client Protocol\quad 763 \item A Two-Way Stream Connection\quad 763 \end{SUBSEC} \item{\color{cyan}Case Study: Generic Client/Server Classes}\quad 765 \begin{SUBSEC} \item Object-Oriented Design\quad 766 \item The {\tt EchoServer} Class\quad 768 \item The {\tt EchoClient} Class\quad 771 \item Abstracting the Generic Server\quad 774 \item Testing the Echo Service\quad 779 \end{SUBSEC} \item Java Network Security Restrictions\quad 780 \item[]{\color{cyan}In the Laboratory: The Internet CyberPet}\quad 781 \item[]{\color{cyan}Privacy and the Internet}\quad 782 \item[]{\small Chapter Summary\quad 786 \item[] Solutions to Self-Study Exercises\quad 787 \vspace{-1pt}\item[] Exercises\quad 788} \end{SEC} \vspace{-11pt}\item Data Structures: Lists, Stacks, and Queues\hfill 791 \vspace{-3pt}\begin{SEC} \item Introduction\quad 792 \item The Linked List Data Structure\quad 792 \begin{SUBSEC} \item Using References to Link Objects\quad 792 \item Example: The Dynamic Phone List\quad 794 \item Manipulating the Phone List\quad 796 \end{SUBSEC} \item[]{\color{cyan}Object-Oriented Design: The List Abstract \\\hspace*{1pc}Data Type (ADT)}\quad 803 \item The Stack ADT\quad 808 \begin{SUBSEC} \item The {\tt Stack }Class\quad 809 \item Testing the {\tt Stack} Class\quad 810 \end{SUBSEC} \item The Queue ADT\quad 811 \begin{SUBSEC} \item The {\tt Queue} Class\quad 811 \end{SUBSEC} \item[]{\color{cyan}From the Java Library: {\tt java.util.Stack}}\quad 812 \item[]{\color{cyan}In the Laboratory: Capital Gains}\quad 813 \item[]{\color{cyan}The LISP Language}\quad 814 \item[]{\small Chapter Summary\quad 818 \item[] Solutions to Self-Study Exercises\quad 819 \vspace{-1pt}\item[] Exercises\quad 822} \end{SEC} \end{CH} \begin{APP} \item Coding Conventions\hfill 824 \begin{APPSEC} \item Comments\quad 824 \item Indentation and White Space\quad 826 \item Naming Conventions\quad 826 \item Use of Braces\quad 827 \item File Names and Layout\quad 828 \item Statements\quad 828 \item Executable Statements\quad 830 \item Preconditions and Postconditions\quad 830 \item Sample Programs\quad 830 \end{APPSEC} \item The Java Development Kit\hfill 831 \begin{APPSEC} \item The Java Compiler: {\tt javac}\quad 831 \item The Java Interpreter: {\tt java}\quad 833 \item The {\tt appletviewer}\quad 833 \item The Java Archiver {\tt jar} Tool\quad 837 \item The Java Documentation Tool: {\tt javadoc}\quad 838 \end{APPSEC} \item The ASCII and Unicode Character Sets\hfill 839 \item Java Keywords\hfill 840 \item Operator Precedence Hierarchy\hfill 841 \item Advanced Language Features\hfill 843 \begin{APPSEC} \item Inner Classes\quad 843 \item Nested Top-Level Versus Member Classes\quad 844 \item Local and Anonymous Inner Classes\quad 845 \end{APPSEC} \item Java and UML Resources\hfill 849 \begin{APPSEC} \item Reference Books\quad 849 \item Online References\quad 849 \end{APPSEC} \vspace{12pt}\item[] Subject Index\hfill 851 \end{APP} % \end{document} \ No newline at end of file diff --git a/texfiles/jjj-os.tex b/texfiles/jjj-os.tex index e751c92..499a565 100644 --- a/texfiles/jjj-os.tex +++ b/texfiles/jjj-os.tex @@ -1 +1 @@ -% book Morelli % ********** % ********** How to generate a PDF. % 0) makeindex jjj-os % 1) latex jjj-os % 2) dvips -f jjj-os.dvi > jjj-os.ps % 3) ps2pdf jjj-os.ps % ********** % ********** \documentclass{book} \input 3E.sty \input 3Enewstuff.sty % \makeindex %\includeonly{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,a,b,c,d,e,f,g} % %\includeonly{a,b,c,d,e,f,g}%¥¥¥¥¥¥¥ % %\includeonly{7.strings}\setcounter{page}{307} \usepackage{bookmark} \usepackage[]{hyperref} \usepackage{caption} \hypersetup{ pdftitle={Java, Java, Java}, pdfauthor={Ralph Morelli and Ralph Walde}, pdfsubject={Java}, pdfkeywords={Computer Science}, bookmarksnumbered=true, bookmarksopen=true, bookmarksopenlevel=1, colorlinks=true, pdfstartview=Fit, pdfpagemode=UseOutlines, % this is the option you were lookin for pdfpagelayout=TwoPageRight } \begin{document} \begin{titlepage} \title{\Huge{Java, Java, Java} \\ \huge {Object-Oriented Problem Solving} \\ \LARGE {Third Edition}} \author{\huge R. Morelli and R. Walde\\ \LARGE Trinity College\\ \LARGE Hartford, CT} \date{\LARGE \today} \maketitle \newpage \thispagestyle{empty} \vspace*{20pc} \hspace*{-3pc} This work is licensed under a \\Creative Commons Attribution 4.0 International License (CC BY 4.0). \\ \\ This book was previously published by \\Pearson Education, Inc. \end{titlepage} \frontmatter \setcounter{tocdepth}{1} \include{preface-os} \include{preface} %%%\include{foreword} \tableofcontents \mainmatter \setcounter{page}{1} \include{0.intro} %% clean 4/9/05, spell-checked 4/9/05 \include{1.programs} %% clean 4/9/05, spell-checked 4/9/05 \include{2.objects} %% clean 4/10/05, spell-checked 4/10/05 \include{3.methods} %% clean 4/11/05, spell-checked 4/11/05 \include{4.uis} %% clean 4/11/05, spell-checked 4/11/05 \include{5.data} %% clean 4/13/05, spell-checked 4/13/05 \include{6.loops} %% clean 4/14/05, spell-checked 4/14/05 \include{7.strings} %% clean 4/14/05, spell-checked 4/14/05 \include{8.oop} %% clean 4/15/05, spell-checked 4/15/05 \include{9.arrays} %% clean, spell-checked 4/16/05 \include{10.exceptions} %% clean 4/4/05, spell-checked 4/7/05 \include{11.files} %% clean 4/5/05, spell-checked 4/5/05 \include{12.recursion} %% clean 4/6/05, spell-checked 4/7/05 \include{13.guis} %% clean 4/7/05, spell-checked 4/7/05 \include{14.threads} %% clean 4/7/05, spell-checked 4/7/05 \include{15.sockets} %% clean 4/7/05, spell-checked 4/7/05 \include{16.datastructs} %% clean 4/9/05, spell-checked 4/9/05 \begin{appendix} \include{a} \include{b} \include{c} \include{d} \include{e} \include{f} \include{g} \include{h} \end{appendix} \printindex %%\endinput \end{document} \ No newline at end of file +% book Morelli % ********** % ********** How to generate the PDF. % 1) ./makepdf.sh % ********** % ********** \documentclass{book} \input 3E.sty \input 3Enewstuff.sty % \makeindex %\includeonly{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,a,b,c,d,e,f,g} % %\includeonly{a,b,c,d,e,f,g}%¥¥¥¥¥¥¥ % %\includeonly{7.strings}\setcounter{page}{307} \usepackage{bookmark} \usepackage[]{hyperref} \usepackage{caption} \hypersetup{ pdftitle={Java, Java, Java}, pdfauthor={Ralph Morelli and Ralph Walde}, pdfsubject={Java}, pdfkeywords={Computer Science}, bookmarksnumbered=true, bookmarksopen=true, bookmarksopenlevel=1, colorlinks=true, pdfstartview=Fit, pdfpagemode=UseOutlines, % this is the option you were lookin for pdfpagelayout=TwoPageRight } \begin{document} \begin{titlepage} \title{\Huge{Java, Java, Java} \\ \huge {Object-Oriented Problem Solving} \\ \LARGE {Third Edition}} \author{\huge R. Morelli and R. Walde\\ \LARGE Trinity College\\ \LARGE Hartford, CT} \date{\LARGE \today} \maketitle \newpage \thispagestyle{empty} \vspace*{20pc} \hspace*{-3pc} This work is licensed under a \\Creative Commons Attribution 4.0 International License (CC BY 4.0). \\ \\ This book was previously published by \\Pearson Education, Inc. \end{titlepage} \frontmatter \setcounter{tocdepth}{1} \include{preface-os} \include{preface} %%%\include{foreword} \tableofcontents \mainmatter \setcounter{page}{1} \include{0.intro} %% clean 4/9/05, spell-checked 4/9/05 \include{1.programs} %% clean 4/9/05, spell-checked 4/9/05 \include{2.objects} %% clean 4/10/05, spell-checked 4/10/05 \include{3.methods} %% clean 4/11/05, spell-checked 4/11/05 \include{4.uis} %% clean 4/11/05, spell-checked 4/11/05 \include{5.data} %% clean 4/13/05, spell-checked 4/13/05 \include{6.loops} %% clean 4/14/05, spell-checked 4/14/05 \include{7.strings} %% clean 4/14/05, spell-checked 4/14/05 \include{8.oop} %% clean 4/15/05, spell-checked 4/15/05 \include{9.arrays} %% clean, spell-checked 4/16/05 \include{10.exceptions} %% clean 4/4/05, spell-checked 4/7/05 \include{11.files} %% clean 4/5/05, spell-checked 4/5/05 \include{12.recursion} %% clean 4/6/05, spell-checked 4/7/05 \include{13.guis} %% clean 4/7/05, spell-checked 4/7/05 \include{14.threads} %% clean 4/7/05, spell-checked 4/7/05 \include{15.sockets} %% clean 4/7/05, spell-checked 4/7/05 \include{16.datastructs} %% clean 4/9/05, spell-checked 4/9/05 \begin{appendix} \include{a} \include{b} \include{c} \include{d} \include{e} \include{f} \include{g} \include{h} \end{appendix} \printindex %%\endinput \end{document} \ No newline at end of file diff --git a/texfiles/makepdf.sh b/texfiles/makepdf.sh index 5806f6f..a3bf51c 100755 --- a/texfiles/makepdf.sh +++ b/texfiles/makepdf.sh @@ -1,4 +1,4 @@ -pdflatex -output-directory .. jjj-os +pdflatex -shell-escape -output-directory .. jjj-os cd .. makeindex jjj-os cd - diff --git a/texfiles/makepdf.sh~ b/texfiles/makepdf.sh~ new file mode 100755 index 0000000..5806f6f --- /dev/null +++ b/texfiles/makepdf.sh~ @@ -0,0 +1,6 @@ +pdflatex -output-directory .. jjj-os +cd .. +makeindex jjj-os +cd - +pdflatex -output-directory .. jjj-os +pdflatex -output-directory .. jjj-os