pyscript-0.6.1/0000755000175000001440000000000010441274723013100 5ustar cochraneuserspyscript-0.6.1/bin/0000755000175000001440000000000010441274721013646 5ustar cochraneuserspyscript-0.6.1/bin/pyscript0000755000175000001440000000706010245240702015446 0ustar cochraneusers#!/usr/bin/env python import sys, getopt, os, traceback import tempfile from pyscript.version import version as versionNum def usage(): print """Usage: pyscript [options] file.py options: [-h/--help] Print usage information and exit [-V/--version] Print version information and exit [-o/--output=outputFile] Specify an alternative output file name [-l/--logfile=logFile] Specify an alternative log file name """ def version(): print "This is pyscript version %s" % (versionNum,) print "For more information see http://pyscript.sourceforge.net\n" #--------------------------------------------------------------------- # Handle options #--------------------------------------------------------------------- try: opts, args = getopt.getopt(sys.argv[1:], "hVo:l:d", ["help", "version", "output=", "logfile="]) except getopt.GetoptError: # print help information and exit: usage() sys.exit(2) logFile = "pyscript.log" DEBUG=False globals={} for o, a in opts: if o in ("-h", "--help"): usage() sys.exit() if o in ("-V", "--version"): version() sys.exit() if o in ("-o", "--output"): globals['output']=a elif o in ("-l", "--logfile"): logFile=a elif o in ("-d",): DEBUG=True if len(args) != 1: usage() sys.exit() # print some pretty info version() #--------------------------------------------------------------------- # Set up log file #--------------------------------------------------------------------- # redirect stdout and stderr to file # keep a copy save_err = sys.stderr # open the log file #tempfile.template="pyscript-" #logFile = tempfile.mktemp(".log") if logFile=="-": log=sys.stdout else: log = open(logFile,"w") print "Log file is",logFile sys.stderr = log #--------------------------------------------------------------------- # look for ~/.pyscript #--------------------------------------------------------------------- # now see about importing the defaults from .pyscript/defaults.py HOME = os.path.expandvars("$HOME") # if $HOME/.pyscript directory exists, append this to the python path # this is so that user defined libs can be imported if os.path.isdir(HOME+'/.pyscript'): sys.path.append(HOME+'/.pyscript') if os.path.isfile(HOME+'/.pyscript/defaults.py'): # try $HOME/.pyscript/defaults.py execfile(HOME+'/.pyscript/defaults.py',globals) else: print "No user defaults file found." print "Executing script..." #--------------------------------------------------------------------- # now run the script #--------------------------------------------------------------------- try: execfile(args[0],globals) except: divider="-"*60+'\n' sys.stderr.write("Exception in user code:\n") sys.stderr.write(divider) traceback.print_exc(file=sys.stderr) sys.stderr.write(divider) sys.stdout.write("Exception in user code:\n") sys.stdout.write(divider) traceback.print_exc(file=sys.stdout) sys.stdout.write(divider) print "Further clues may be found in the log file:",logFile else: # clean up a bit sys.stderr = save_err if logFile!="-": log.close() if not DEBUG: print "Removing log file" os.remove(logFile) print "Removing temp files" tempfiles = ("temp.aux", "temp.dvi", "temp.log", "temp.ps", "temp.tex", "temp1.aux", "temp1.dvi", "temp1.eps", "temp1.log", "temp1.tex") for tmpfile in tempfiles: if os.path.exists(tmpfile): os.remove(tmpfile) print "Done!" pyscript-0.6.1/contrib/0000755000175000001440000000000010441274721014536 5ustar cochraneuserspyscript-0.6.1/contrib/styles/0000755000175000001440000000000010441274721016061 5ustar cochraneuserspyscript-0.6.1/contrib/styles/ccp2004-poster.py0000644000175000001440000000330110422757007021017 0ustar cochraneusers# poster style for PyScript, used for the CCP2004 conference HOME = os.path.expandvars("$HOME") stylesDir = HOME + "/.pyscript/styles/" # set the default style settings self.title = "" self.title_fg = Color("yellow")*2.0 self.title_scale = 1.4 self.title_width = 0.8 # as a fraction of the total poster width self.title_text_style = "\large \sf" self.authors = "" self.authors_fg = Color("yellow") self.authors_scale = 1 self.authors_width = 0.8 # as a fraction of the total poster width self.authors_text_style = "\sf" self.address = "" self.address_fg = Color("yellow") self.address_scale = 0.9 self.address_width = 0.8 # as a fraction of the total poster width self.address_text_style = "\sf" self.abstract = "" self.abstract_fg = Color("gold")*1.1 self.abstract_scale = 0.8 self.abstract_width = 0.92 # relative to total width of poster self.abstract_text_style = "" self.gutter = 0.2 self.pad = 0 # should get set by add_column() self.item_sep = 0.3 self.bg = Color("royalblue")*0.8 self.signature_fg = Color("white") self.logo_height = 1.2 # styles for columns self.column_item_sep = 0.3 # styles for column boxes # the title's style... self.column_box_title_align = "c" self.column_box_title_tex_scale = 1.4 self.column_box_title_fixed_width = 9.4 self.column_box_title_text_style = r"\sf" self.column_box_title_fg = Color("orangered")*0.95 # the text styles of the column box self.column_box_text_align = "w" self.column_box_tex_scale = 0.7 self.column_box_text_width = 9.4 self.column_box_text_style = r"" self.column_box_text_fg = Color(0) # the column box styles self.column_box_item_sep = 0.1 self.column_box_width = 9.9 self.column_box_bg = Color("LightGoldenRod")*1.1 self.column_box_border = 1 pyscript-0.6.1/contrib/styles/greenbullet.eps0000644000175000001440000002172210412567550021111 0ustar cochraneusers%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 61 61 %%Creator: PyScript 0.4.0 %%CreationDate: Wed Jul 23 14:26:11 2003 %%LanguageLevel: 2 %%Title: PyScriptEPS %%Pages: 1 %%EndComments %%BeginProlog %%BeginResource: procset pyscript /PyScriptDict 10 dict def PyScriptDict begin %%show text with kerning if supplied /kernshow { 0 2 2 counttomark 2 sub { -2 roll } for counttomark 2 idiv { exch show 0 rmoveto} repeat pop } bind def /BeginEPSF { /b4_Inc_state save def /dict_count countdictstack def /op_count count 1 sub def userdict begin /showpage { } def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [ ] 0 setdash newpath /languagelevel where {pop languagelevel 1 ne {false setstrokeadjust false setoverprint } if } if } bind def /EndEPSF { count op_count sub {pop} repeat countdictstack dict_count sub {end} repeat b4_Inc_state restore } bind def /PyScriptStart {} def /PyScriptEnd {} def /showpage {} def end %%EndResource %%EndProlog %%BeginSetup PyScriptDict begin /uu {28.346000 mul} def 0.5 setlinewidth 1 setlinecap 0 setlinejoin 10 setmiterlimit [ ] 0 setdash end %%EndSetup %%Page: 1 1 PyScriptDict begin gsave [1 0 0 1 1.09363 uu 1.09363 uu] concat gsave [1 0 0 1 0 uu 0 uu] concat gsave [1 0 0 1 -0.0206239 uu -0.0206239 uu] concat 0 0 0 setrgbcolor 0 0 1 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0 0 setrgbcolor 0 0 1 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0 uu 0 uu] concat 0 0.114834 0 setrgbcolor 0 0 0.966667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.114834 0 setrgbcolor 0 0 0.966667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.0206239 uu 0.0206239 uu] concat 0 0.162288 0 setrgbcolor 0 0 0.933333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.162288 0 setrgbcolor 0 0 0.933333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.0412479 uu 0.0412479 uu] concat 0 0.198535 0 setrgbcolor 0 0 0.9 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.198535 0 setrgbcolor 0 0 0.9 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.0618718 uu 0.0618718 uu] concat 0 0.228881 0 setrgbcolor 0 0 0.866667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.228881 0 setrgbcolor 0 0 0.866667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.0824958 uu 0.0824958 uu] concat 0 0.255369 0 setrgbcolor 0 0 0.833333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.255369 0 setrgbcolor 0 0 0.833333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.10312 uu 0.10312 uu] concat 0 0.279036 0 setrgbcolor 0 0 0.8 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.279036 0 setrgbcolor 0 0 0.8 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.123744 uu 0.123744 uu] concat 0 0.300493 0 setrgbcolor 0 0 0.766667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.300493 0 setrgbcolor 0 0 0.766667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.144368 uu 0.144368 uu] concat 0 0.32013 0 setrgbcolor 0 0 0.733333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.32013 0 setrgbcolor 0 0 0.733333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.164992 uu 0.164992 uu] concat 0 0.338215 0 setrgbcolor 0 0 0.7 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.338215 0 setrgbcolor 0 0 0.7 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.185616 uu 0.185616 uu] concat 0 0.35494 0 setrgbcolor 0 0 0.666667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.35494 0 setrgbcolor 0 0 0.666667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.206239 uu 0.206239 uu] concat 0 0.370445 0 setrgbcolor 0 0 0.633333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.370445 0 setrgbcolor 0 0 0.633333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.226863 uu 0.226863 uu] concat 0 0.384839 0 setrgbcolor 0 0 0.6 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.384839 0 setrgbcolor 0 0 0.6 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.247487 uu 0.247487 uu] concat 0 0.398204 0 setrgbcolor 0 0 0.566667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.398204 0 setrgbcolor 0 0 0.566667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.268111 uu 0.268111 uu] concat 0 0.410606 0 setrgbcolor 0 0 0.533333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.410606 0 setrgbcolor 0 0 0.533333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.288735 uu 0.288735 uu] concat 0 0.422097 0 setrgbcolor 0 0 0.5 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.422097 0 setrgbcolor 0 0 0.5 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.309359 uu 0.309359 uu] concat 0 0.43272 0 setrgbcolor 0 0 0.466667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.43272 0 setrgbcolor 0 0 0.466667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.329983 uu 0.329983 uu] concat 0 0.442508 0 setrgbcolor 0 0 0.433333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.442508 0 setrgbcolor 0 0 0.433333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.350607 uu 0.350607 uu] concat 0 0.45149 0 setrgbcolor 0 0 0.4 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.45149 0 setrgbcolor 0 0 0.4 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.371231 uu 0.371231 uu] concat 0 0.45969 0 setrgbcolor 0 0 0.366667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.45969 0 setrgbcolor 0 0 0.366667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.391855 uu 0.391855 uu] concat 0 0.467127 0 setrgbcolor 0 0 0.333333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.467127 0 setrgbcolor 0 0 0.333333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.412479 uu 0.412479 uu] concat 0 0.473817 0 setrgbcolor 0 0 0.3 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.473817 0 setrgbcolor 0 0 0.3 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.433103 uu 0.433103 uu] concat 0 0.479772 0 setrgbcolor 0 0 0.266667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.479772 0 setrgbcolor 0 0 0.266667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.453727 uu 0.453727 uu] concat 0 0.485004 0 setrgbcolor 0 0 0.233333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.485004 0 setrgbcolor 0 0 0.233333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.474351 uu 0.474351 uu] concat 0 0.489523 0 setrgbcolor 0 0 0.2 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.489523 0 setrgbcolor 0 0 0.2 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.494975 uu 0.494975 uu] concat 0 0.493335 0 setrgbcolor 0 0 0.166667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.493335 0 setrgbcolor 0 0 0.166667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.515599 uu 0.515599 uu] concat 0 0.496446 0 setrgbcolor 0 0 0.133333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.496446 0 setrgbcolor 0 0 0.133333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.536223 uu 0.536223 uu] concat 0 0.498861 0 setrgbcolor 0 0 0.1 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.498861 0 setrgbcolor 0 0 0.1 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.556847 uu 0.556847 uu] concat 0 0.500584 0 setrgbcolor 0 0 0.0666667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.500584 0 setrgbcolor 0 0 0.0666667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.577471 uu 0.577471 uu] concat 0 0.501617 0 setrgbcolor 0 0 0.0333333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0.501617 0 setrgbcolor 0 0 0.0333333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore grestore grestore end %PyScriptDict showpage %%Trailer %%EOF pyscript-0.6.1/contrib/styles/prosper-darkblue.py0000644000175000001440000000356710412575541021731 0ustar cochraneusers# talk style for PyScript, following the Darkblue design of prosper HOME = os.path.expandvars("$HOME") stylesDir = HOME + "/.pyscript/styles/" # set the foreground and background colour of the title text of the talk self.title_fg = Color('white') self.title_bg = Color('white') # set the talk title's text style self.title_textstyle = r"\bf\sf" # set the text style for the text of who is giving the talk self.speaker_textstyle = r"\sf" # set the colour and text style of the address of the speaker of the talk self.address_fg = Color('white') self.address_textstyle = r"\sf" # set the colour and text style of the authors of the talk (not necessarily # the speaker of the talk) self.authors_fg = Color('white') self.authors_textstyle = r"\sf" # set the colour and text style of the title of the *slide* self.slide_title_fg = Color('lightgray') self.slide_title_textstyle = r"\bf" # set the colour, scale, textstyle, bullet and indent type for a level 1 heading self.headings_fgs[1] = Color('white') self.headings_scales[1] = 3 self.headings_textstyle[1] = r"\sf" self.headings_bullets[1] = Epsf(file=stylesDir+"redbullet.eps").scale(0.2,0.2) self.headings_indent[1] = 0 # set the colour, scale, textstyle, bullet and indent type for a level 2 heading self.headings_fgs[2] = Color('white') self.headings_scales[2] = 2.5 self.headings_textstyle[2] = r"\sf" self.headings_bullets[2] = Epsf(file=stylesDir+"greenbullet.eps").scale(0.15,0.15) self.headings_indent[2] = 0.5 # set the colour, scale, textstyle, bullet and indent type for a level 3 heading self.headings_fgs[3] = Color('white') self.headings_scales[3] = 2.2 self.headings_textstyle[3] = r"\sf" self.headings_bullets[3] = Epsf(file=stylesDir+"yellowbullet.eps").scale(0.1,0.1) self.headings_indent[3] = 1 # set the colour, textstyle and scale for placed text self.text_scale = 3.0 self.text_fg = Color('white') self.text_textstyle = r"\sf" pyscript-0.6.1/contrib/styles/redbullet.eps0000644000175000001440000002173010412567550020562 0ustar cochraneusers%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 61 61 %%Creator: PyScript 0.4.0 %%CreationDate: Fri Jul 18 18:00:14 2003 %%LanguageLevel: 2 %%Title: PyScriptEPS %%Pages: 1 %%EndComments %%BeginProlog %%BeginResource: procset pyscript /PyScriptDict 10 dict def PyScriptDict begin %%show text with kerning if supplied /kernshow { 0 2 2 counttomark 2 sub { -2 roll } for counttomark 2 idiv { exch show 0 rmoveto} repeat pop } bind def /BeginEPSF { /b4_Inc_state save def /dict_count countdictstack def /op_count count 1 sub def userdict begin /showpage { } def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [ ] 0 setdash newpath /languagelevel where {pop languagelevel 1 ne {false setstrokeadjust false setoverprint } if } if } bind def /EndEPSF { count op_count sub {pop} repeat countdictstack dict_count sub {end} repeat b4_Inc_state restore } bind def /PyScriptStart {} def /PyScriptEnd {} def /showpage {} def end %%EndResource %%EndProlog %%BeginSetup PyScriptDict begin /uu {28.346000 mul} def 0.5 setlinewidth 1 setlinecap 0 setlinejoin 10 setmiterlimit [ ] 0 setdash end %%EndSetup %%Page: 1 1 PyScriptDict begin gsave [1 0 0 1 1.09363 uu 1.09363 uu] concat gsave [1 0 0 1 0 uu 0 uu] concat gsave [1 0 0 1 -0.0206239 uu -0.0206239 uu] concat 0 0 0 setrgbcolor 0 0 1 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0 0 setrgbcolor 0 0 1 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0 uu 0 uu] concat 0.228771 0 0 setrgbcolor 0 0 0.966667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.228771 0 0 setrgbcolor 0 0 0.966667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.0206239 uu 0.0206239 uu] concat 0.323309 0 0 setrgbcolor 0 0 0.933333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.323309 0 0 setrgbcolor 0 0 0.933333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.0412479 uu 0.0412479 uu] concat 0.395518 0 0 setrgbcolor 0 0 0.9 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.395518 0 0 setrgbcolor 0 0 0.9 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.0618718 uu 0.0618718 uu] concat 0.455973 0 0 setrgbcolor 0 0 0.866667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.455973 0 0 setrgbcolor 0 0 0.866667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.0824958 uu 0.0824958 uu] concat 0.508743 0 0 setrgbcolor 0 0 0.833333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.508743 0 0 setrgbcolor 0 0 0.833333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.10312 uu 0.10312 uu] concat 0.555893 0 0 setrgbcolor 0 0 0.8 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.555893 0 0 setrgbcolor 0 0 0.8 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.123744 uu 0.123744 uu] concat 0.598638 0 0 setrgbcolor 0 0 0.766667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.598638 0 0 setrgbcolor 0 0 0.766667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.144368 uu 0.144368 uu] concat 0.637759 0 0 setrgbcolor 0 0 0.733333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.637759 0 0 setrgbcolor 0 0 0.733333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.164992 uu 0.164992 uu] concat 0.673788 0 0 setrgbcolor 0 0 0.7 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.673788 0 0 setrgbcolor 0 0 0.7 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.185616 uu 0.185616 uu] concat 0.707107 0 0 setrgbcolor 0 0 0.666667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.707107 0 0 setrgbcolor 0 0 0.666667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.206239 uu 0.206239 uu] concat 0.737997 0 0 setrgbcolor 0 0 0.633333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.737997 0 0 setrgbcolor 0 0 0.633333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.226863 uu 0.226863 uu] concat 0.766672 0 0 setrgbcolor 0 0 0.6 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.766672 0 0 setrgbcolor 0 0 0.6 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.247487 uu 0.247487 uu] concat 0.793297 0 0 setrgbcolor 0 0 0.566667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.793297 0 0 setrgbcolor 0 0 0.566667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.268111 uu 0.268111 uu] concat 0.818004 0 0 setrgbcolor 0 0 0.533333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.818004 0 0 setrgbcolor 0 0 0.533333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.288735 uu 0.288735 uu] concat 0.840896 0 0 setrgbcolor 0 0 0.5 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.840896 0 0 setrgbcolor 0 0 0.5 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.309359 uu 0.309359 uu] concat 0.862058 0 0 setrgbcolor 0 0 0.466667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.862058 0 0 setrgbcolor 0 0 0.466667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.329983 uu 0.329983 uu] concat 0.881559 0 0 setrgbcolor 0 0 0.433333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.881559 0 0 setrgbcolor 0 0 0.433333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.350607 uu 0.350607 uu] concat 0.899454 0 0 setrgbcolor 0 0 0.4 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.899454 0 0 setrgbcolor 0 0 0.4 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.371231 uu 0.371231 uu] concat 0.91579 0 0 setrgbcolor 0 0 0.366667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.91579 0 0 setrgbcolor 0 0 0.366667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.391855 uu 0.391855 uu] concat 0.930605 0 0 setrgbcolor 0 0 0.333333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.930605 0 0 setrgbcolor 0 0 0.333333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.412479 uu 0.412479 uu] concat 0.943931 0 0 setrgbcolor 0 0 0.3 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.943931 0 0 setrgbcolor 0 0 0.3 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.433103 uu 0.433103 uu] concat 0.955796 0 0 setrgbcolor 0 0 0.266667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.955796 0 0 setrgbcolor 0 0 0.266667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.453727 uu 0.453727 uu] concat 0.96622 0 0 setrgbcolor 0 0 0.233333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.96622 0 0 setrgbcolor 0 0 0.233333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.474351 uu 0.474351 uu] concat 0.975221 0 0 setrgbcolor 0 0 0.2 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.975221 0 0 setrgbcolor 0 0 0.2 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.494975 uu 0.494975 uu] concat 0.982815 0 0 setrgbcolor 0 0 0.166667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.982815 0 0 setrgbcolor 0 0 0.166667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.515599 uu 0.515599 uu] concat 0.989013 0 0 setrgbcolor 0 0 0.133333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.989013 0 0 setrgbcolor 0 0 0.133333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.536223 uu 0.536223 uu] concat 0.993825 0 0 setrgbcolor 0 0 0.1 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.993825 0 0 setrgbcolor 0 0 0.1 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.556847 uu 0.556847 uu] concat 0.997257 0 0 setrgbcolor 0 0 0.0666667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.997257 0 0 setrgbcolor 0 0 0.0666667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.577471 uu 0.577471 uu] concat 0.999315 0 0 setrgbcolor 0 0 0.0333333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.999315 0 0 setrgbcolor 0 0 0.0333333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore grestore grestore end %PyScriptDict showpage %%Trailer %%EOF pyscript-0.6.1/contrib/styles/yellowbullet.eps0000644000175000001440000002255110412567550021325 0ustar cochraneusers%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 0 61 61 %%Creator: PyScript 0.4.0 %%CreationDate: Thu Oct 2 21:45:29 2003 %%LanguageLevel: 2 %%Title: PyScriptEPS %%Pages: 1 %%EndComments %%BeginProlog %%BeginResource: procset pyscript /PyScriptDict 10 dict def PyScriptDict begin %show text with kerning if supplied /kernshow { 0 2 2 counttomark 2 sub { -2 roll } for counttomark 2 idiv { exch show 0 rmoveto} repeat pop } bind def /BeginEPSF { /b4_Inc_state save def /dict_count countdictstack def /op_count count 1 sub def userdict begin /showpage { } def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [ ] 0 setdash newpath /languagelevel where {pop languagelevel 1 ne {false setstrokeadjust false setoverprint } if } if } bind def /EndEPSF { count op_count sub {pop} repeat countdictstack dict_count sub {end} repeat b4_Inc_state restore } bind def /PyScriptStart {} def /PyScriptEnd {} def /showpage {} def end %%EndResource %%EndProlog %%BeginSetup PyScriptDict begin /uu {28.346000 mul} def 0.5 setlinewidth 1 setlinecap 0 setlinejoin 10 setmiterlimit [ ] 0 setdash end %%EndSetup %%Page: 1 1 PyScriptDict begin gsave [1 0 0 1 1.09363 uu 1.09363 uu] concat gsave [1 0 0 1 0 uu 0 uu] concat gsave [1 0 0 1 -0.0206239 uu -0.0206239 uu] concat 0 0 0 setrgbcolor 0 0 1 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0 0 0 setrgbcolor 0 0 1 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0 uu 0 uu] concat 0.228771 0.228771 0 setrgbcolor 0 0 0.966667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.228771 0.228771 0 setrgbcolor 0 0 0.966667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.0206239 uu 0.0206239 uu] concat 0.323309 0.323309 0 setrgbcolor 0 0 0.933333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.323309 0.323309 0 setrgbcolor 0 0 0.933333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.0412479 uu 0.0412479 uu] concat 0.395518 0.395518 0 setrgbcolor 0 0 0.9 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.395518 0.395518 0 setrgbcolor 0 0 0.9 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.0618718 uu 0.0618718 uu] concat 0.455973 0.455973 0 setrgbcolor 0 0 0.866667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.455973 0.455973 0 setrgbcolor 0 0 0.866667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.0824958 uu 0.0824958 uu] concat 0.508743 0.508743 0 setrgbcolor 0 0 0.833333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.508743 0.508743 0 setrgbcolor 0 0 0.833333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.10312 uu 0.10312 uu] concat 0.555893 0.555893 0 setrgbcolor 0 0 0.8 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.555893 0.555893 0 setrgbcolor 0 0 0.8 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.123744 uu 0.123744 uu] concat 0.598638 0.598638 0 setrgbcolor 0 0 0.766667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.598638 0.598638 0 setrgbcolor 0 0 0.766667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.144368 uu 0.144368 uu] concat 0.637759 0.637759 0 setrgbcolor 0 0 0.733333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.637759 0.637759 0 setrgbcolor 0 0 0.733333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.164992 uu 0.164992 uu] concat 0.673788 0.673788 0 setrgbcolor 0 0 0.7 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.673788 0.673788 0 setrgbcolor 0 0 0.7 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.185616 uu 0.185616 uu] concat 0.707107 0.707107 0 setrgbcolor 0 0 0.666667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.707107 0.707107 0 setrgbcolor 0 0 0.666667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.206239 uu 0.206239 uu] concat 0.737997 0.737997 0 setrgbcolor 0 0 0.633333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.737997 0.737997 0 setrgbcolor 0 0 0.633333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.226863 uu 0.226863 uu] concat 0.766672 0.766672 0 setrgbcolor 0 0 0.6 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.766672 0.766672 0 setrgbcolor 0 0 0.6 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.247487 uu 0.247487 uu] concat 0.793297 0.793297 0 setrgbcolor 0 0 0.566667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.793297 0.793297 0 setrgbcolor 0 0 0.566667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.268111 uu 0.268111 uu] concat 0.818004 0.818004 0 setrgbcolor 0 0 0.533333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.818004 0.818004 0 setrgbcolor 0 0 0.533333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.288735 uu 0.288735 uu] concat 0.840896 0.840896 0 setrgbcolor 0 0 0.5 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.840896 0.840896 0 setrgbcolor 0 0 0.5 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.309359 uu 0.309359 uu] concat 0.862058 0.862058 0 setrgbcolor 0 0 0.466667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.862058 0.862058 0 setrgbcolor 0 0 0.466667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.329983 uu 0.329983 uu] concat 0.881559 0.881559 0 setrgbcolor 0 0 0.433333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.881559 0.881559 0 setrgbcolor 0 0 0.433333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.350607 uu 0.350607 uu] concat 0.899454 0.899454 0 setrgbcolor 0 0 0.4 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.899454 0.899454 0 setrgbcolor 0 0 0.4 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.371231 uu 0.371231 uu] concat 0.91579 0.91579 0 setrgbcolor 0 0 0.366667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.91579 0.91579 0 setrgbcolor 0 0 0.366667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.391855 uu 0.391855 uu] concat 0.930605 0.930605 0 setrgbcolor 0 0 0.333333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.930605 0.930605 0 setrgbcolor 0 0 0.333333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.412479 uu 0.412479 uu] concat 0.943931 0.943931 0 setrgbcolor 0 0 0.3 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.943931 0.943931 0 setrgbcolor 0 0 0.3 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.433103 uu 0.433103 uu] concat 0.955796 0.955796 0 setrgbcolor 0 0 0.266667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.955796 0.955796 0 setrgbcolor 0 0 0.266667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.453727 uu 0.453727 uu] concat 0.96622 0.96622 0 setrgbcolor 0 0 0.233333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.96622 0.96622 0 setrgbcolor 0 0 0.233333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.474351 uu 0.474351 uu] concat 0.975221 0.975221 0 setrgbcolor 0 0 0.2 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.975221 0.975221 0 setrgbcolor 0 0 0.2 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.494975 uu 0.494975 uu] concat 0.982815 0.982815 0 setrgbcolor 0 0 0.166667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.982815 0.982815 0 setrgbcolor 0 0 0.166667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.515599 uu 0.515599 uu] concat 0.989013 0.989013 0 setrgbcolor 0 0 0.133333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.989013 0.989013 0 setrgbcolor 0 0 0.133333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.536223 uu 0.536223 uu] concat 0.993825 0.993825 0 setrgbcolor 0 0 0.1 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.993825 0.993825 0 setrgbcolor 0 0 0.1 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.556847 uu 0.556847 uu] concat 0.997257 0.997257 0 setrgbcolor 0 0 0.0666667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.997257 0.997257 0 setrgbcolor 0 0 0.0666667 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore gsave [1 0 0 1 0.577471 uu 0.577471 uu] concat 0.999315 0.999315 0 setrgbcolor 0 0 0.0333333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn fill 0.999315 0.999315 0 setrgbcolor 0 0 0.0333333 uu 360 0 -1 mul add 90 add 360 360 -1 mul add 90 add arcn stroke grestore grestore grestore end %PyScriptDict showpage %%Trailer %%EOF pyscript-0.6.1/doc/0000755000175000001440000000000010441274721013643 5ustar cochraneuserspyscript-0.6.1/doc/examples/0000755000175000001440000000000010441274722015462 5ustar cochraneuserspyscript-0.6.1/doc/examples/Makefile0000644000175000001440000000120310423143526017113 0ustar cochraneusers# $Id: Makefile,v 1.8 2006/04/24 12:40:54 paultcochrane Exp $ MAIN = align.eps\ align2.eps\ atom.eps\ bifurcate.eps\ detector.eps\ distribute.eps\ div_con.eps\ fabry-perot_pdh.eps\ flower_algorithm.eps\ mach-zehnder.eps\ michelson-morely.eps\ qcirc.eps\ sagnac.eps\ sphere.eps\ stateSwap.eps\ teleport.eps\ tex.eps\ tutorial.eps\ twoqubitQST.eps all: $(MAIN) Makefile view: $(MAIN) $(foreach i, $(MAIN), $(shell gv $i)) # standard TeX stuff %.eps: %.py pyscript $< clean: rm -f $(MAIN) # vim: shiftwidth=4: pyscript-0.6.1/doc/examples/align.py0000755000175000001440000000200110211214563017112 0ustar cochraneusers#!/usr/bin/env pyscript # $Id: align.py,v 1.4 2005/03/02 01:40:03 paultcochrane Exp $ """ align.py - example of using the Align class. Define some Rectangles and Circles and show how the Align class aligns them in a horizontal line. """ # import the pyscript objects from pyscript import * # set the default units to use defaults.units=UNITS['cm'] # define some objects to align r1 = Rectangle(width=2, height=1, c=P(0,0)) r2 = Rectangle(width=1, height=2, c=P(2,1)) c1 = Circle(c=P(3,2)) c2 = Circle(r=2, c=P(6,3)) # group the objects together to save their original positions orig = Group(r1, r2, c1, c2) # define an Align object and add the rectangles and circles to it a = Align(a1="e", a2="w", space=None, angle=90) for o in orig: a.append(o.copy()) # record where they started in red orig.apply(fg=Color('Red')) # make the linewidth of the aligned objects thicker a.apply(linewidth=2) # render the objects and save to file render( orig, a, file="align.eps", ) # vim: expandtab shiftwidth=4: pyscript-0.6.1/doc/examples/align2.py0000755000175000001440000000112010374363175017213 0ustar cochraneusers#!/usr/bin/env pyscript # $Id: align2.py,v 1.3 2006/02/14 14:23:08 paultcochrane Exp $ """ Aligning boxes, with numbers inside, around a circle. """ from pyscript import * # define the object to hold all the objects all = Align(angle=90, space=2) # create an equal sided rectangle, put a number in it and add it to the # group of all objects for ii in range(10): rt = Rectangle(width=1, height=1) all.append( Group(rt, Text(str(ii), c=rt.c)), angle=all.angle+ii*360/10.) # render the diagram render( all, file='align2.eps', ) # vim: expandtab shiftwidth=4: pyscript-0.6.1/doc/examples/atom.py0000755000175000001440000000476410374363533017016 0ustar cochraneusers#!/usr/bin/env pyscript # $Id: atom.py,v 1.5 2006/02/14 14:23:08 paultcochrane Exp $ """ Diagram of an energy level diagram for quantum readout of an electronic state of an atom. (Helpful for quantum computing.) """ # import the pyscript libraries from pyscript import * # set up the default units for the diagram defaults.units=UNITS['cm'] # define some helpful definitions for LaTeX defaults.tex_head=r""" \documentclass{article} \pagestyle{empty} \newcommand{\ket}[1]{\mbox{$|#1\rangle$}} \newcommand{\bra}[1]{\mbox{$\langle #1|$}} \newcommand{\braket}[2]{\mbox{$\langle #1|#2\rangle$}} \newcommand{\ketbra}[2]{\mbox{|#1$\rangle\langle #2|$}} \newcommand{\op}[1]{\mbox{\boldmath $\hat{#1}$}} \begin{document} """ # function to define an energy level def level(x,y,label,**dict): w = 1 label.w = P(x+w/2., y) return Group( apply(Path, (P(x-w/2.,y), P(x+w/2.,y)), dict), label, ) # import some functionality from the standard math library from math import atan2, pi # function to describe a double-headed arrow def darrow(s, e, label, **dict): # don't yet have an arrow object ... gap = .05 d = e - s length = d.length theta = -atan2(e[1]-s[1], e[0]-s[0])/pi*180 label.s = P(length/2., gap) p00 = P(0,0) dh = .05 dl = .2 ah1 = apply(Path, (p00, P(dl,dh), P(dl,-dh), p00), dict) ah2 = apply(Path, (p00, P(-dl,-dh), P(-dl,dh), p00), dict) ah2.move(length, 0) g = Group( apply(Path, (P(0,0), P(length,0)), dict), ah1, ah2, label, ) g.rotate(theta) g.move(s[0], s[1]) return g # render the diagram render( # four labelled levels level(0, 0, TeX("$\ket{1}\equiv\ket{g}$")), level(2, 0.3, TeX("$\ket{2}\equiv\ket{e}$")), level(.5, 2, TeX("\ket{3}")), level(2.5, 2.5, TeX("\ket{4}")), # a dashed level describing the laser detuning Path(P(0,1.7), P(1,1.7), dash=Dash(2)), TeX(r'$\Delta\left\{\rule{0cm}{2.75mm}\right.$')(e=P(0,1.85)), # double-headed arrow for the signal darrow(P(0,0), P(.3,1.7), TeX('\small signal'), fg=Color('green'), bg=Color('green')), # double-headed arrow for the activation darrow(P(.6,1.7), P(1.8,.3), TeX('\small activation'), fg=Color('red'), bg=Color('red')), # double-headed arrow for the read out darrow(P(2.2,.3), P(2.5,2.5), TeX('\small read out'), fg=Color('blue'), bg=Color('blue')), # the output file name file = "atom.eps", ) # vim: expandtab shiftwidth=4: pyscript-0.6.1/doc/examples/bifurcate.py0000755000175000001440000000216610374363623020014 0ustar cochraneusers#!/usr/bin/env pyscript # $Id: bifurcate.py,v 1.2 2006/02/14 14:23:08 paultcochrane Exp $ """ bifurcate.py - a bifurcation diagram As lambda increases to some critical value the function becomes multivalued and bifurcates giving the fork structure after \lambda_c. """ # import the pyscript objects from pyscript import * # define the default units to use defaults.units = UNITS['cm'] render( # define the axes Arrow( P(0,0), P(0,4) ), Arrow( P(0,0), P(5,0) ), # dashed vertical line at lambda_c Path( P(2,3.8), P(2,0), dash=Dash(2), fg=Color(.5) ), # solid line before bifurcation point Path( P(.5,2), P(2,2), linewidth=1 ), # multi-valued part of function after bifurcation Path( P(4,3.7), C(P(3,3.5), P(2,3)), P(2,2), C(P(2,1), P(3,.5)), P(4,.3), linewidth=1), # dashed horizontal line after lambda_c Path( P(2,2), P(4,2), dash=Dash(3), linewidth=1 ), # axes labels TeX(r'$\bar{\lambda}_c$', n=P(2,-.1)), TeX(r'$\bar{\lambda}$', ne=P(4.8,-.1)), # the output file file="bifurcate.eps", ) # vim: expandtab shiftwidth=4: pyscript-0.6.1/doc/examples/ccp2004_poster.py0000644000175000001440000002735410423154443020513 0ustar cochraneusers#!/usr/bin/env pyscript # $Id# """ Poster for the Conference on Computational Physics 2004 """ from pyscript.lib.presentation import Poster, Column, ColumnBox, CodeBox, TeXBox defaults.tex_head+=r"\newcommand{\xmds}{\textsc{xmds}\xspace}" # firstly, write the code I would like to write... poster = Poster(size="a4", style="ccp2004-poster") poster.set_title(r"\xmds: the eXtensible Multi-Dimensional Simulator") poster.set_authors(r"""\underline{Paul~T.~Cochrane}, G.~Collecutt, P.~D.~Drummond, and J.~J.~Hope""") poster.set_address(r"""Australian Centre for Quantum-Atom Optics, Physics Department, The University of Queensland, Brisbane, Australia""") poster.set_abstract(r"""{\em Writing codes for the simulation of complex phenomena is an art and science unto itself. What with finding and using good algorithms, actually writing the code, debugging the code and testing the code, not much time is left to actually investigate what it was you were initially out to look at. This is where \xmds comes in. \xmds allows you to write a high-level description of the problem you are trying to solve (usually a differential equation of some form) it goes away and writes low-level simulation code for you (trying hard to keep the code as efficient as possible), compiles and presents it, ready to be run.} """) poster.add_logo("ARC_COE_crop.eps", height=1.2) poster.add_logo("uq_logo_new.eps", height=1.2) # could also do this as: #poster.add_logos("ARC_COE_crop.eps", "uq_logo_new.eps", height=1.2) col1 = Column(poster) what_xmds = ColumnBox(poster) what_xmds.set_title(r"What is \xmds?") what_xmds.add_TeXBox(r""" \begin{itemize} \setlength{\itemsep}{-1mm} \item \xmds = e\underline{X}tensible \underline{M}ulti-\underline{D}imensional \underline{S}imulator \item \xmds is open source software; released under the GNU General Public License \item Has applications in physics, mathematics, weather, chemistry, economics \ldots \item One writes a high-level description of a problem in XML \item \xmds converts XML to C language code, which is then compiled to produce an executable which solves the problem about as quickly as code written by an expert \item \xmds gives people doing simulations structure, organisation and standardisation \item Provides a convenient framework for describing simulations of a system be it in a scientific or industrial setting \item Keeps the ideas behind a simulation well laid out and, importantly, documented for others to see and use \item \xmds gives a common ground from which scientists can compare their numerical work; something lacking in an area at the interface between theory and experiment, which already have a well-ingrained culture of comparison and verification~\cite{Ceperley:1999:1} \end{itemize} """) col1.add_box(what_xmds) overview = ColumnBox(poster) overview.set_title(r"Overview") overview.add_TeXBox(r""" \begin{itemize} \setlength{\itemsep}{-2mm} \item \xmds is designed to integrate the following general PDE: \vspace*{-3mm} \begin{align} \frac{\partial}{\partial x^0}\vect{a}(\vect{x}) & = \vect{\mathcal{N}}\left(\vect{x}, \vect{a}(\vect{x}), \vect{p}(\vect{x}), \vect{b}(\vect{x}),\;\vect{\xi}(\vect{x})\right),\\ p^i(\vect{x}) & = \mathcal{F}^{-1}\left[\Sigma_j \mathcal{L}^{ij}\left(x^0,\vect{k_\bot}\right) \mathcal{F}\left[a^j(\vect{x})\right]\right],\\ \frac{\partial}{\partial x^{c}}\vect{b}(\vect{x}) & = \vect{\mathcal{H}}\left(\vect{x}, \vect{a}(\vect{x}), \vect{b}(\vect{x})\right) \label{eq:xmdsPdeEx} \end{align} \vspace*{-4mm} \item $\vect{a}(\vect{x})$ : main field, $\vect{b}(\vect{x})$ : cross-propagating field, $\vect{p}(\vect{x})$ : field in Fourier space,\\ $\xi(\vect{x})$ : noise terms \item \xmds integrates ODEs, PDEs, and stochastic ODEs and PDEs \end{itemize} """) tAlign = Align(a1="ne", a2="nw", angle=90, space=-0.2) t1 = TeXBox(r""" \begin{itemize} \item \xmds solves DEs with two methods: \begin{itemize} \setlength{\itemsep}{-1.5mm} \vspace*{-3mm} \item fourth-order Runge-Kutta, \item split-step semi-implicit method~\cite{Drummond:1983:1} \end{itemize} \end{itemize} """) t1.set_fixed_width(5.1) t1.make() t2 = TeXBox(r""" \begin{itemize} \item \xmds can handle any number of: \vspace*{-3mm} \begin{itemize} \setlength{\itemsep}{-1.5mm} \item components \item dimensions \item random variables \end{itemize} \end{itemize} """) t2.set_fixed_width(4.5) t2.make() tAlign.append(t1, t2) overview.add_object(tAlign) overview.add_TeXBox(r""" \vspace*{-3mm} \begin{itemize} \setlength{\itemsep}{-2mm} \item Performs automatic numerical error checking \item Handles cross-propagating fields \item Calculates trajectory means and variances of stochastic simulations \item Automatically parallelises stochastic and deterministic problems using MPI \end{itemize} """) col1.add_box(overview) why_xmds = ColumnBox(poster) why_xmds.set_title(r"Why use \xmds?") why_xmds.add_TeXBox(r""" \begin{itemize} \setlength{\itemsep}{-1.5mm} \item \xmds reduces development time and user-introduced bugs \item Execution time closely approximates that of hand-written code \item Input file size dramatically smaller than hand-written code \item Open source and documentation (\texttt{http://www.xmds.org})~\cite{xmdsweb} \item Uses XSIL output format for easy and portable data interchange \item FFTW (Fastest Fourier Transform in the West) for highly efficient FFTs~\cite{fftwweb} \item Allows simple and transparent comparison of simulations with other researchers \item The script documents the simulation \item Simulation script (and therefore parameters) are output with the simulation data, so the data and the variables that generated it are kept together for future reference \end{itemize} """) col1.add_box(why_xmds) nlse = ColumnBox(poster) nlse.set_title(r"Nonlinear Schr\"{o}diner Equation") nlse.add_TeXBox(r""" \begin{equation} \frac{\partial \phi}{\partial z } = i\left[\frac{1}{2} \frac{\partial ^{2} \phi}{\partial t ^{2}} + |\phi|^{2} \phi + i \Gamma (t) \phi \right] \end{equation} Where $\phi$ is the field, $z$ is the spatial dimension, $t$ is time and $\Gamma(t)$ is a damping term. """) nlseEpsf = Epsf("nlse.eps", width=4.29) nlseCode = CodeBox(r""" \begin{verbatim} nlse z t phi RK4IP pow_dens \end{verbatim} """).scale(0.4, 0.4) nlseAlign = Align(a1="ne", a2="nw", angle=90, space=0.1) nlseAlign.append(nlseEpsf, nlseCode) nlse.add_object(nlseAlign) col1.add_box(nlse) future = ColumnBox(poster) future.set_title("Future Features") future.add_TeXBox(r""" \begin{itemize} \setlength{\itemsep}{-2mm} \item More algorithms, user-defined libraries of routines \item Improved load balancing of parallel stochastic simulations \item Timed output of simulation data to monitor data on-the-fly \item Reimplementation and generalisation of \xmds engine %\item breakpoints: binary output of entire simulation state at end of %simulation so that can restart the simulation from this point at next run %of the simulation \end{itemize} """) col1.add_box(future) # add the column to the poster poster.add_column(col1, side="left") # start a new column col2 = Column(poster) # make a column box fibre_optic = ColumnBox(poster) fibre_optic.set_title("Fibre Optic Laser Field") fibre_optic.add_TeXBox(r""" Equation~(\ref{eq:fibre}) describes a one dimensional damped field subject to a complex noise.\\ This is a stochastic PDE. \begin{equation} \frac{\partial \phi}{\partial t} = -i \frac{\partial^{2} \phi}{\partial x^{2}} - \gamma \phi + \frac{\beta}{\sqrt{2}} \left[\xi_1(x,t) + i\xi_2(x,t)\right]. \label{eq:fibre} \end{equation} """) fibre1 = VAlign(space=0.2) fibre1.append(Epsf("fibre1.eps", width=4)) fibre1.append(TeX("single path").scale(0.8, 0.8)) fibre2 = VAlign(space=0.2) fibre2.append(Epsf("fibre2.eps", width=4)) fibre2.append(TeX("1024 path mean").scale(0.8, 0.8)) fibres = Align(a1="ne", a2="nw", angle=90, space=0.2) fibres.append(fibre1, fibre2) fibre_optic.add_object(fibres) # add the column box to the poster col2.add_box(fibre_optic) # make a column box process = ColumnBox(poster) process.set_title("Process and Functionality") process.add_TeXBox(r""" The figures below describe the processes involved in creating an \xmds simulation (left-hand diagram) and operating within an \xmds simulation (right-hand diagram). \xmds reads the XML script, parses it, generates C/C++ code and then compiles the simulation binary using a C++ compiler. The simulation when executed generates XSIL output, which can then be converted for display in your favourite graphing package. """) procAlign = Align(a1="ne", a2="nw", angle=90, space=1.0) procAlign.append(Epsf("xmdsProcess.eps", width=3)) procAlign.append(Epsf("xmdsFunctionality.eps", width=3)) process.add_object(procAlign) # add the column box to the poster col2.add_box(process) other = ColumnBox(poster) other.set_title("Other Features") other1 = TeXBox(r""" \begin{itemize} \setlength{\itemsep}{-2mm} \item ASCII and binary output \item Benchmarking of simulations \item User-defined preferences \end{itemize} """) other1.set_fixed_width(4.5) other1.make() other2 = TeXBox(r""" \begin{itemize} \setlength{\itemsep}{-2mm} \item Field initialisation from file \item Command line arguments to simulations \item \xmds script template output \end{itemize} """) other2.set_fixed_width(5) other2.make() otherAlign = Align(a1="ne", a2="nw", angle=90, space=-0.2) otherAlign.append(other1, other2) other.add_object(otherAlign) col2.add_box(other) takehome = ColumnBox(poster) takehome.set_title("Take-home message") takehome.add_TeXBox(r""" \xmds will save you time by solving your problems very quickly. So why not give it a go? See \texttt{http://www.xmds.org} and try it out. """) col2.add_box(takehome) refs = ColumnBox(poster) refs.set_title("References") refs.add_TeXBox(r""" \renewcommand*{\refname}{ } \begin{thebibliography}{14} \expandafter\ifx\csname natexlab\endcsname\relax\def\natexlab#1{#1}\fi \expandafter\ifx\csname bibnamefont\endcsname\relax \def\bibnamefont#1{#1}\fi \expandafter\ifx\csname bibfnamefont\endcsname\relax \def\bibfnamefont#1{#1}\fi \expandafter\ifx\csname citenamefont\endcsname\relax \def\citenamefont#1{#1}\fi \expandafter\ifx\csname url\endcsname\relax \def\url#1{\texttt{#1}}\fi \expandafter\ifx\csname urlprefix\endcsname\relax\def\urlprefix{URL }\fi \providecommand{\bibinfo}[2]{#2} \providecommand{\eprint}[2][]{\url{#2}} \setlength{\itemsep}{-2mm} \bibitem{Ceperley:1999:1} \bibinfo{author}{\bibfnamefont{D.~M.} \bibnamefont{Ceperley}}, \bibinfo{journal}{Rev. Mod. Phys.} \textbf{\bibinfo{volume}{71}}, \bibinfo{pages}{438} (\bibinfo{year}{1999}). \bibitem{Drummond:1983:1} \bibinfo{author}{\bibfnamefont{P.~D.} \bibnamefont{Drummond}}, \bibinfo{journal}{Comp. Phys. Comm.} \textbf{\bibinfo{volume}{29}}, \bibinfo{pages}{211} (\bibinfo{year}{1983}). \bibitem{xmdsweb} \emph{\bibinfo{title}{\xmds home page}}, \urlprefix\url{http://www.xmds.org}. \bibitem{fftwweb} \emph{\bibinfo{title}{FFTW home page}}, \urlprefix\url{http://www.fftw.org}. \end{thebibliography} """) col2.add_box(refs) poster.add_column(col2, side="right") poster.make(file="ccp2004_poster.eps") pyscript-0.6.1/doc/examples/detector.py0000644000175000001440000000415410374363635017660 0ustar cochraneusers#!/usr/bin/env pyscript # $Id: detector.py,v 1.4 2006/02/14 14:23:09 paultcochrane Exp $ """ A quantum circuit diagram of a detection setup in optical quantum computing. """ # import the pyscript libraries from pyscript import * # set up the default units for the diagram defaults.units=UNITS['cm'] # define some helpful LaTeX macros defaults.tex_head=r""" \documentclass{article} \pagestyle{empty} \newcommand{\ket}[1]{\mbox{$|#1\rangle$}} \newcommand{\bra}[1]{\mbox{$\langle #1|$}} \newcommand{\braket}[2]{\mbox{$\langle #1|#2\rangle$}} \newcommand{\ketbra}[2]{\mbox{|#1$\rangle\langle #2|$}} \newcommand{\op}[1]{\mbox{\boldmath $\hat{#1}$}} \begin{document} """ # import helpful objects from the optics and quantumcircuits libraries from pyscript.lib.optics import BS from pyscript.lib.quantumcircuits import detector, classicalpath # distance between the two "rails" of the quantum circuit h = 1.7 # define the phase plate pp2 = P(2,0) phase = Rectangle(width=.1, height=.4, c=pp2, bg=Color(.8) ) # define the beam splitter pp = P(1.5,0) bs = Rectangle(width=.1, height=1, c=pp, bg=Color(1) ).rotate(-45, pp) # define detectors d1 = detector()(c=P(1.5+h/2.,0)) d2 = detector()(c=P(1.5,-h/2.)).rotate(90, P(1.5,-h/2.)) # render the diagram render( # the rails of the quantum circuit Path(P(1.5,h/2.), P(1.5,-h/2.)), Path(P(3.5,h), P(0,h), P(-.5,h/2.), P(0,0), P(1.5+h/2.,0)), # the state at one output port TeX(r'$\ket{p}$', s=P(1.5,h/2.)), # beam splitter and label bs, TeX(r'$\omega$', se=bs.n), # labels of paths through system TeX('$a$', sw=P(.1,h+.1)), TeX('$b$', sw=P(.1,0.1)), TeX('$c$', w=P(1.6,h/2.4)), # phase plate and label phase, TeX(r'$\lambda$', s=phase.n+P(0,.1)), # detectors and label d1, d2, TeX('$y$', w=d1.e), TeX('$x$', n=d2.e), # box highlighting part of the circuit Rectangle(width=h+.6, height=h+1, dash=Dash(2), e=d1.e+P(.4,0)), # the input state Dot(P(-.5,h/2.), r=.05), TeX(r'$\ket{\psi}$', e=P(-.5,h/2.)), # the output file name file="detector.eps", ) # vim: expandtab shiftwidth=4: pyscript-0.6.1/doc/examples/distribute.py0000644000175000001440000000172610374363650020224 0ustar cochraneusers#!/usr/bin/env pyscript # $Id: distribute.py,v 1.4 2006/02/14 14:23:09 paultcochrane Exp $ """ An example showing usage of the Distribute class and functionality. """ # load pyscript libraries from pyscript import * # define the default units for the diagram defaults.units = UNITS['cm'] # end points of line about which to distribute objects p1 = P(-3,0) p2 = P(3,0) # objects to distribute o1 = Rectangle(width=.5, height=1) o2 = Circle(r=.5) o3 = Rectangle(width=.5, height=.5) o4 = Rectangle(width=2, height=.5) # render the diagram render( # distribute the objects Distribute(o1, o2, o3, o4, p1=p1, p2=p2, a1='c', a2='c', as='w', ae='e'), # highlight the line about which everything is distributed with a line Path(p1, p2, fg=Color('red')), # dots showing centres of all objects distributed Dot(o1.c), Dot(o2.c), Dot(o3.c), Dot(o4.c), # output file name file="distribute.eps" ) # vim: expandtab shiftwidth=4: pyscript-0.6.1/doc/examples/div_con.py0000755000175000001440000000445510374363662017477 0ustar cochraneusers#!/usr/bin/env pyscript # $Id: div_con.py,v 1.3 2006/02/14 14:23:09 paultcochrane Exp $ """ Example usage of the qi (quantum information) library. Output is of a divide-and-conquer scheme of quantum gates. """ # import relevant pyscript libraries from pyscript import * from pyscript.lib.qi import * # assemble one set of quantum gates and wires together g1 = Assemble( Gate(Boxed(TeX(r'$\mathcal{E}_1$'), height=1.5)), 1.5, Gate(Boxed(TeX(r'$\mathcal{E}_2$'), height=1.5)), 2.5, Gate(Boxed(TeX(r'$\mathcal{E}_3$'), height=1.5)), 1.5, wires=[QWire, QWire, QWire], ) # assemble another set of quantum gates g21 = Assemble(Gate(Boxed(TeX(r'$\mathcal{E}_1$'), height=1.5)), 1.5, wires=[QWire, QWire, QWire], ) g22 = Assemble(Gate(Boxed(TeX(r'$\mathcal{E}_2$'), height=1.5)), 2.5, wires=[QWire, QWire, QWire], ) g23 = Assemble(Gate(Boxed(TeX(r'$\mathcal{E}_3$'), height=1.5)), 1.5, wires=[QWire, QWire, QWire], ) # and assemble a third set of quantum gates together g31 = Assemble(Gate(Boxed(TeX(r'$\mathcal{E}_1$'), height=1.5)), 1.5, wires=[QWire, QWire], ) g32 = Assemble(Gate(Boxed(TeX(r'$\mathcal{E}_2$'), height=1.5)), 1.5, wires=[QWire, QWire], ) g33 = Assemble(Gate(Boxed(TeX(r'$\mathcal{E}_3$'), height=1.5)), 1.5, wires=[QWire, QWire], ) # define some TeX objects for later reuse m1 = TeX(r'\Large $\le$') m2 = TeX(r'\Large $+$') m3 = TeX(r'\Large $+$') m4 = TeX(r'\Large $=$') m5 = TeX(r'\Large $+$') m6 = TeX(r'\Large $+$') # align all the gate and TeX objects Align(g1, m1, m2, m3, m4, m5, m6, g31, g32, g33, a1="e", a2="w", angle=90) # distribute the objects equally along a line divnconk = Distribute( g1, m1, g21, m2, g22, m3, g23, m4, g31, m5, g32, m6, g33, a1="e", a2="w", p1=P(0,0), p2=P(15,0), ) # define some labels t1 = TeX(r'\Large (by chaining)', n=P(g22.s.x, divnconk.s.y-.2)) t2 = TeX(r'\Large (by stability)', n=P(g32.s.x, divnconk.s.y-.2)) # append the labels to the object for the diagram divnconk.append(t1,t2).scale(.7) # render the diagram render( # object to render divnconk, # output file name file="div_con.eps" ) # vim: expandtab shiftwidth=4: pyscript-0.6.1/doc/examples/fabry-perot_pdh.py0000755000175000001440000000211410401335014021106 0ustar cochraneusers#!/usr/bin/env pyscript # $Id: fabry-perot_pdh.py,v 1.1 2006/03/01 15:13:16 paultcochrane Exp $ # a Fabry-Perot cavity in a Pound-Drever-Hall setup # import the pyscript objects from pyscript import * # import the optics library from pyscript.lib.optics import * # set up some handy defaults defaults.units=UNITS['cm'] # initialise a laser beam beam = Group() # the laser laser = Laser(c=P(0,0)) # the EOM eom = Modulator() eom.w = laser.e + P(1,0) beam.append(Path(laser.e, eom.w)) # the "west" mirror mirror_w = Mirror() mirror_w.w = eom.e + P(1,0) beam.append(Path(eom.e, mirror_w.w)) # some free space fs = FreeSpace() fs.w = mirror_w.e + P(1,0) beam.append(Path(mirror_w.e, fs.w)) # the "east" mirror mirror_e = Mirror() mirror_e.w = fs.e + P(1,0) beam.append(Path(fs.e, mirror_e.w)) # set the colour of the beam beam.apply(fg=Color("red")) # collect all the objects together fig = Group( beam, laser, eom, mirror_e, mirror_w, fs, ) # render the figure render(fig, file="fabry-perot_pdh.eps") # vim: expandtab shiftwidth=4: pyscript-0.6.1/doc/examples/flower_algorithm.py0000644000175000001440000000637010374363702021410 0ustar cochraneusers#!/usr/bin/env pyscript # $Id: flower_algorithm.py,v 1.5 2006/02/14 14:23:09 paultcochrane Exp $ """ Quite a complex example of using the quantumcircuits library. This shows the quantum circuit of the flower algorithm. """ # import the relevant pyscript libraries from pyscript import * import pyscript.lib.quantumcircuits as qc # define the default units for the diagram defaults.units=UNITS['cm'] # define some handy LaTeX macros defaults.tex_head=r""" \documentclass{article} \pagestyle{empty} \newcommand{\ket}[1]{\mbox{$|#1\rangle$}} \newcommand{\bra}[1]{\mbox{$\langle #1|$}} \newcommand{\braket}[2]{\mbox{$\langle #1|#2\rangle$}} \newcommand{\op}[1]{\mbox{\boldmath $\hat{#1}$}} \begin{document} """ # the main paths through the diagram p1 = Path(P(-.8,0), P(11,0), linewidth=2) p2 = Path(P(0,2), P(6.7,2)) p3 = Path(P(0,4), P(6.7,4)) p4 = Path(P(0,5), P(6.7,5)) # define the quantum fourier transform box r = Rectangle(c=P(6,3.5), width=.8, height=4.2, bg=Color(1)) t = TeX(r'QFT$^\dagger$') t.rotate(-90) t.c = r.c qft = Group(r, t) # define a vacuum state ket0 = TeX(r'\ket{0}') # define a detector det = qc.detector() # define the horizontal and vertical dots TeX objects dots = TeX(r'$\cdots$') vdots = TeX(r'$\vdots$') # define a Hadamard gate H = qc.Boxed(TeX(r'H')) # ancilla qubits label anc = TeX('$q$ ancilla qubits') anc.rotate(-90) # render the diagram render( # the paths through the circuit p1, p2, p3, p4, # place the dots in the diagram Rectangle(s=P(2.7,-.2), height=5.4, width=.5, bg=Color(1), fg=Color(1)), dots.copy(c=P(2.7,0)), dots.copy(c=P(2.7,2)), dots.copy(c=P(2.7,4)), dots.copy(c=P(2.7,5)), vdots.copy(c=P(-.2,3)), vdots.copy(c=P(1,3)), vdots.copy(c=P(6.8,3)), # place the Hadamard gates H.copy(c=P(1,2)), H.copy(c=P(1,4)), H.copy(c=P(1,5)), # describe the classical path qc.classicalpath(Path(P(6.7,2), P(7.5,2), P(7.5,5), P(6.7,5)), Path(P(6.7,4), P(7.5,4)), Path(P(7.5,3), P(9,3), P(9,0)), ), # place boxes for the various unitary operations qc.cbox(TeX(r'$\;U^{2^0}\;$'), 1.8, 0, 2), qc.cbox(TeX(r'$U^{2^{q-2}}$'), 3.8, 0, 4), qc.cbox(TeX(r'$U^{2^{q-1}}$'), 5, 0, 5), # place the detectors det.copy(c=p2.end), det.copy(c=p3.end), det.copy(c=p4.end), # place the displacement of the state \rho and a label qc.Boxed(TeX(r'$\mathcal{D}$'), c=P(9,0)), TeX(r'\renewcommand{\arraycolsep}{1mm}$\left\{\begin{array}{ccc}0&\mathrm{w.p.}&1-p(E_j)\\1&\mathrm{w.p.}&p(E_j)\end{array}\right.$', w=P(9.1,3)), qc.Boxed(TeX(r'$\phi_j$'), c=P(7.5,3)), qc.Dot(P(9,3)), # place the vacuum states ket0.copy(e=p2.start), ket0.copy(e=p3.start), ket0.copy(e=p4.start), # place some labels TeX(r'$\rho$', e=p1.start-P(.1,0)), TeX(r'$\mathcal{E}(\rho)$', w=p1.end+P(.1,0)), TeX(r'\ket{E_j}', s=P(7.5,0.1)), # place the ancilla qubits label anc(c=P(-1,3.5)), # place the quantum fourier transform qft, # output file name file="flower_algorithm.eps") # vim: expandtab shiftwidth=4: pyscript-0.6.1/doc/examples/mach-zehnder.py0000755000175000001440000000262710402060065020401 0ustar cochraneusers#!/usr/bin/env pyscript # $Id: mach-zehnder.py,v 1.1 2006/03/03 15:26:45 paultcochrane Exp $ # Mach-Zehnder interferometer # import the pyscript objects from pyscript import * # import the optics library from pyscript.lib.optics import * # set up some handy defaults defaults.units=UNITS['cm'] # initialise a laser beam beam = Group() # the laser laser = Laser(c=P(0,0)) # the "west" beam splitter bs_w = BSBox(height=0.7) bs_w.w = laser.e + P(1,0) beam.append(Path(laser.e, bs_w.w)) # the "north" mirror mirror_n = Mirror(angle=45) mirror_n.s = bs_w.n + P(0,3) beam.append(Path(bs_w.n, mirror_n.c)) # the "east" mirror mirror_e = Mirror(angle=45) mirror_e.w = bs_w.e + P(3,0) beam.append(Path(bs_w.e, mirror_e.c)) # the "east" beam splitter bs_e = BSBox(height=0.7) bs_e.c = P(mirror_e.c.x, mirror_n.c.y) beam.append(Path(mirror_e.c, bs_e.s)) beam.append(Path(mirror_n.c, bs_e.w)) # the "north" detector det_n = Detector(angle=-90) det_n.s = bs_e.n + P(0,1) beam.append(Path(bs_e.n, det_n.s)) # the "east" detector det_e = Detector() det_e.w = bs_e.e + P(1,0) beam.append(Path(bs_e.e, det_e.w)) # set the colour of the beam beam.apply(fg=Color("red")) # collect all the objects together fig = Group( laser, bs_w, mirror_n, mirror_e, bs_e, det_n, det_e, beam, ) # render the figure render(fig, file="mach-zehnder.eps") # vim: expandtab shiftwidth=4: pyscript-0.6.1/doc/examples/michelson-morely.py0000755000175000001440000000210310401331362021307 0ustar cochraneusers#!/usr/bin/env pyscript # $Id: michelson-morely.py,v 1.3 2006/03/01 14:42:58 paultcochrane Exp $ # Michelson-Morely interferometer # import the pyscript objects from pyscript import * # import the optics library from pyscript.lib.optics import * # set up some handy defaults defaults.units=UNITS['cm'] # initialise a laser beam beam = Group() # the laser laser = Laser(c=P(0,0)) # the beam splitter bs = BSBox(height=0.7) bs.w = laser.e + P(1,0) beam.append(Path(laser.e, bs.w)) # the "north" mirror mirror_n = Mirror(angle=90) mirror_n.s = bs.n + P(0,3) beam.append(Path(bs.n, mirror_n.s)) # the "east" mirror mirror_e = Mirror() mirror_e.w = bs.e + P(3,0) beam.append(Path(bs.e, mirror_e.w)) # the detector det = Detector(angle=90) det.n = bs.s + P(0,-1) beam.append(Path(bs.s, det.n)) # make the beam red beam.apply(fg=Color("red")) # collect all the objects together fig = Group( laser, bs, mirror_n, mirror_e, det, beam, ) # render the figure render(fig, file="michelson-morely.eps") # vim: expandtab shiftwidth=4: pyscript-0.6.1/doc/examples/qcirc.py0000755000175000001440000000305710374363723017152 0ustar cochraneusers#!/usr/bin/env pyscript # $Id: qcirc.py,v 1.3 2006/02/14 14:23:09 paultcochrane Exp $ """ A quantum circuit example usingt the qi (quantum information) library. """ from pyscript import * from pyscript.lib.qi import * defaults.tex_head=r""" \documentclass{article} \pagestyle{empty} \newcommand{\ket}[1]{\mbox{$|#1\rangle$}} \newcommand{\bra}[1]{\mbox{$\langle #1|$}} \newcommand{\braket}[2]{\mbox{$\langle #1|#2\rangle$}} \newcommand{\op}[1]{\mbox{\boldmath $\hat{#1}$}} \newcommand{\Ket}[2]{|#1\rangle^{ (#2)}} % Paragraph formatting \setlength{\parindent}{0pt} \setlength{\parskip}{1ex} \usepackage{amsmath} \usepackage{amssymb} \usepackage[dvips,nodvipsnames]{color} \begin{document} """ def RX(theta,**dict): return Circled(TeX(r"$X_{%s}$"%theta,**dict),r=.5) def RY(theta,**dict): return Circled(TeX(r"$Y_{%s}$"%theta,**dict),r=.5) def RZ(theta,**dict): return Circled(TeX(r"$Z_{%s}$"%theta,**dict),r=.5) render( Path(P(-1,0),P(5,0)), Path(P(-1,2),P(10,2)), classicalpath(Path(P(5,0),P(5.8,0),P(5.8,2)),Path(P(5.8,0),P(7,0),P(7,2))), Boxed(TeX(r'$\mathcal{E}(\rho)$',c=P(0,2))), RX(r'\frac{\pi}{2}',c=P(2,2)), RX(r'-\frac{\pi}{2}',c=P(8.5,2)), RY(r'\chi',c=P(4,0)), RY(r'\eta',c=P(7,2)), TeX(r'$\ket{\psi_s}$',e=P(-1-.1,2)), TeX(r'$\ket{\psi_m}$',e=P(-1-.1,0)), TeX(r'$\rho_s$',w=P(10+.1,2)), NOT(target=P(3,0),control=P(3,2)), Detector(c=P(5,0),height=.7), Z(c=P(5.8,2)), Rectangle(w=P(1,1),height=3.5,width=8.5,dash=Dash(2,1)), file="qcirc.eps", ) # vim: expandtab shiftwidth=4: pyscript-0.6.1/doc/examples/sagnac.py0000755000175000001440000000237410403335107017272 0ustar cochraneusers#!/usr/bin/env pyscript # $Id: sagnac.py,v 1.3 2006/03/07 16:52:23 paultcochrane Exp $ # Sagnac interferometer # import the pyscript objects from pyscript import * # import the optics library from pyscript.lib.optics import * # set up some handy defaults defaults.units=UNITS['cm'] # initialise a laser beam beam = Group() # the laser laser = Laser(c=P(0,0)) # the beam splitter bs = BSBox(height=0.7) bs.w = laser.e + P(1,0) beam.append(Path(laser.e, bs.w)) # the "north" mirror mirror_n = Mirror(angle=45) mirror_n.s = bs.n + P(0,2) beam.append(Path(bs.n, mirror_n.c)) # the "east" mirror mirror_e = Mirror(angle=45) mirror_e.w = bs.e + P(3,0) beam.append(Path(bs.e, mirror_e.c)) # the "north-east" mirror mirror_ne = Mirror(angle=135) mirror_ne.c = P(mirror_e.c.x, mirror_n.c.y) beam.append(Path(mirror_n.c, mirror_ne.c)) beam.append(Path(mirror_e.c, mirror_ne.c)) # the detector det = Detector(angle=90) det.n = bs.s + P(0,-1) beam.append(Path(bs.s, det.n)) # set the colour of the beam beam.apply(fg=Color("red")) # collect all the objects together fig = Group( beam, laser, bs, mirror_n, mirror_e, mirror_ne, det, ) # render the figure render(fig, file="sagnac.eps") # vim: expandtab shiftwidth=4: pyscript-0.6.1/doc/examples/sphere.py0000644000175000001440000000532310374363715017333 0ustar cochraneusers#!/usr/bin/env pyscript # $Id: sphere.py,v 1.5 2006/02/14 14:23:09 paultcochrane Exp $ """ A Poincare sphere. The example shows a sphere with axes labeled and a vector pointing to a point on the surface of the sphere. """ # import the pyscript libraries from pyscript import * # define the default units for the diagram defaults.units=UNITS['cm'] # define some handy LaTeX macros defaults.tex_head=r""" \documentclass{article} \pagestyle{empty} \newcommand{\ket}[2]{\mbox{$|#1\rangle_{#2}$}} \newcommand{\bra}[1]{\mbox{$\langle #1|$}} \newcommand{\braket}[2]{\mbox{$\langle #1|#2\rangle$}} \newcommand{\op}[1]{\mbox{\boldmath $\hat{#1}$}} \begin{document} """ # define an arrow head function def ArrowHead(tip=P(0,0), width=0.2, height=0.2, fg=Color("black"), bg=Color("black"), angle=0, dent=0.2): """ ArrowHead object """ tmptip = P(0,0) ah = Path(tmptip, tmptip + P(width/2.0,-height), tmptip + P(0,-height*(1-dent)), tmptip + P(-width/2.0,-height), tmptip, fg=fg, bg=bg) ah.rotate(angle) ah.move(tip-tmptip) return ah # define the circle in the x-z plane circ1 = Circle(c=P(0,0)) # define the circle in the x-y plane circ2front = Circle(c=P(0,0), start=90, end=270) circ2back = Circle(c=P(0,0), start=270, end=90, dash=Dash(3)) circ2 = Group(circ2front, circ2back) circ2.scale(1, 0.3) # define the circle in the y-z plane circ3front = Circle(c=P(0,0), start=90, end=270) circ3back = Circle(c=P(0,0), start=270, end=90, dash=Dash(3)) circ3 = Group(circ3front, circ3back) x2 = 0.78 circ3.scale(x2, 0.3*x2) circ3.c = P(0,-0.6) # define the axes zaxis = Path(P(0,-1.2), P(0,1.2)) xaxis = Path(P(-1.2,0), P(1.2,0)) yaxis = Path(P(-0.7,0), P(0.7,0)) yaxis.rotate(p=yaxis.P(.5), angle=-30) # define the arrows for each axis xArrow = ArrowHead(tip=xaxis.end, width=0.07, height=0.07, angle=90) yArrow = ArrowHead(tip=yaxis.end, angle=90-30, width=0.07, height=0.07) zArrow = ArrowHead(tip=zaxis.end, width=0.07, height=0.07) # define the labels xLabel = TeX("$\mathbf{J}_x$").scale(.5)(sw=xaxis.end) yLabel = TeX("$\mathbf{J}_y$").scale(.5)(se=yaxis.end+P(0,.05)) zLabel = TeX("$\mathbf{J}_z$").scale(.5)(sw=zaxis.end) # define the vector R rad = Path(P(0,-0.59), P(0.5,-0.59)) rad.rotate(p=rad.bbox().w, angle=20) radArrow = ArrowHead(tip=rad.end, width=0.06, height=0.06, angle=90+20) radThing = Group(rad, radArrow) radLabel = TeX("$\mathcal{R}$").scale(0.5,0.5)(sw=rad.P(.5)) # define the figure describing the diagram fig = Group(circ1, circ2, circ3, zaxis, xaxis, yaxis, xArrow, yArrow, zArrow, xLabel, yLabel, zLabel, radThing, radLabel) # render the diagram render(fig, file="sphere.eps") # vim: expandtab shiftwidth=4: pyscript-0.6.1/doc/examples/stateSwap.py0000644000175000001440000000214410374363715020016 0ustar cochraneusers#!/usr/bin/env pyscript # $Id: stateSwap.py,v 1.5 2006/02/14 14:23:09 paultcochrane Exp $ """ State swapping quantum computing circuit diagram. Uses the quantumcircuits library. """ # import the pyscript libraries from pyscript import * from pyscript.lib.quantumcircuits import * # define some handy LaTeX macros defaults.tex_head=r""" \documentclass{article} \pagestyle{empty} \newcommand{\ket}[2]{\mbox{$|#1\rangle_{#2}$}} \newcommand{\bra}[1]{\mbox{$\langle #1|$}} \newcommand{\braket}[2]{\mbox{$\langle #1|#2\rangle$}} \newcommand{\op}[1]{\mbox{\boldmath $\hat{#1}$}} \begin{document} """ # define the rails rail1 = Rail(w=P(0,0), length=3.0, labelIn=r'\ket{\psi}{}', labelOut=r'\ket{\phi}{}') rail2 = Rail(w=P(0,1), length=3.0, labelIn=r'\ket{\phi}{}', labelOut=r'\ket{\psi}{}') # three controlled nots cnot1 = Cnot(c=P(0.5,0), targetDist=1.0, direction="up") cnot2 = Cnot(c=P(1.5,1), targetDist=1.0, direction="down") cnot3 = Cnot(c=P(2.5,0), targetDist=1.0, direction="up") # draw it! render(rail1, rail2, cnot1, cnot2, cnot3, file="stateSwap.eps") # vim: expandtab shiftwidth=4: pyscript-0.6.1/doc/examples/teleport.py0000755000175000001440000000166010374363715017706 0ustar cochraneusers#!/usr/bin/env pyscript # $Id: teleport.py,v 1.3 2006/02/14 14:23:09 paultcochrane Exp $ """ Create a quantum circuit of a quantum teleporter using the qi library """ # import the pyscript libraries from pyscript import * from pyscript.lib.qi import * # Assemble the quantum circuit g = Assemble( SWAP, 1, 2, NOT, 2, 1, H, 1, X, 3, 2, Z, 3, 1, hang=.5, wires=[QWire, QWire, QWire], ) # define the object for the wires w = g.wires # render the diagram render( # the main circuit g, # some labels TeX(r'$|\psi\rangle$', e=w[0].w), TeX(r'$|\psi\rangle$', w=w[2].e), TeX(r'$|\beta_{00}\rangle\left\{\rule{0cm}{7mm}\right.$', e=(w[2].w+w[1].w)/2.), # the meters Meter(w=w[0].e), Meter(w=w[1].e), # the output file file="teleport.eps" ) # vim: expandtab shiftwidth=4: pyscript-0.6.1/doc/examples/tex.py0000644000175000001440000000171710374363715016650 0ustar cochraneusers#!/usr/bin/env pyscript # $Id: tex.py,v 1.4 2006/02/14 14:23:09 paultcochrane Exp $ """ Example showing off the TeX object. This shows a series of TeX objects of a mathematical description of a wavefunction (but you don't need to know that) placed at various angles in a circle, with a blue background. """ # import the pyscript libraries from pyscript import * # define the default units for the diagram defaults.units=UNITS['cm'] # define a TeX object tex = TeX(r'$|\psi_t\rangle=e^{-iHt/\hbar}|\psi_0\rangle$', w=P(.5,0), fg=Color(1)) # define the group of objects to render g = Group() for ii in range(0, 360, 60): g.append(tex.copy().rotate(ii, P(0,0))) # render the diagram render( # one circle Circle(r=.6+tex.width, bg=Color('midnightblue')), # the TeX object g, # another circle Circle(r=.4, bg=Color(1)), # the output file name file="tex.eps") # vim: expandtab shiftwidth=4: pyscript-0.6.1/doc/examples/tutorial.py0000644000175000001440000000475010374363715017713 0ustar cochraneusers#!/usr/bin/env pyscript # $Id: tutorial.py,v 1.5 2006/02/14 14:23:09 paultcochrane Exp $ """ A tutorial script showing how to create a quantum circuit. """ # import the relevant pyscript libraries from pyscript import * from pyscript.lib.quantumcircuits import * # set the default units for the diagam defaults.units=UNITS['cm'] # set up some handy LaTeX macros defaults.tex_head=r""" \documentclass{article} \pagestyle{empty} \usepackage{amsmath} \newcommand{\ket}[1]{\mbox{$|#1\rangle$}} \newcommand{\bra}[1]{\mbox{$\langle #1|$}} \newcommand{\braket}[2]{\mbox{$\langle #1|#2\rangle$}} \newcommand{\ketbra}[2]{\mbox{|#1$\rangle\langle #2|$}} \newcommand{\op}[1]{\mbox{\boldmath $\hat{#1}$}} \newcommand{\R}[3]{% \renewcommand{\arraystretch}{.5} $\begin{array}{@{}c@{}}{#1}\\{#2}\end{array}{#3}$ \renewcommand{\arraystretch}{1} } \begin{document} """ # define some colours blue = Color(.65, .65, 1) green = Color(.65, 1, .65) # define a Bell detector function def BellDet(c=P(0,0)): H = P(0,.8) W = P(.5,0) D = Group(Path(c+H, C(c+H+W,c+H+W), c+W, C(c-H+W,c-H+W), c-H, bg=blue, )) return Group( Path(c-H, c+H, linewidth=2), D, TeX(r'$\mathcal{B}$', c=D.c) ) # a box showing what part of the circuit happens "offline" offline = Rectangle(height=4, width=5.5, e=P(3.5,1.5), dash='[3 ] 0', bg=Color(.85)) render( # the offline background box and label offline, TeX('offline', nw=offline.nw+P(.1,-.1)), # the quantum path in the offline part Path(P(5,0), P(-.3,0), P(-.6,.5), P(-.3,1), P(2,1)), Path(P(2,2), P(-.3,2), P(-.6,2.5), P(-.3,3), P(3.7,3)), Path(P(-1,4), P(3.7,4)), # two dots Dot(P(-.6,.5)), Dot(P(-.6,2.5)), # the classical path classicalpath(Path(P(2.1,1.5), P(4.5,1.5), P(4.5,0)), Path(P(3,1.5), P(3,0)), Path(P(3.8,3.5), P(4.5,3.5), P(4.5,1.5)), ), # Bell detectors BellDet(P(2,1.5)), BellDet(P(3.7,3.5)), # displacement operation Boxed(TeX(r'$D\left(\frac{i\theta}{2\alpha^2}\right)$'), c=P(1,2), bg=green), # Pauli operators Boxed(TeX('$X$'), c=P(3,0), bg=green), Boxed(TeX('$Z$'), c=P(4.5,0), bg=green), # input quantum states TeX(r'$\ket{B_{00}}$', e=P(-.7,.5)), TeX(r'$\ket{B_{00}}$', e=P(-.7,2.5)), TeX(r'$\ket{Q}$', e=P(-1.1,4)), # output file name file="tutorial.eps", ) # vim: expandtab shiftwidth=4: pyscript-0.6.1/doc/examples/twoqubitQST.py0000644000175000001440000001446010423142766020311 0ustar cochraneusersfrom pyscript import * defaults.units=UNITS['mm'] defaults.linewidth=1 black = Color("Black") grey = Color("LightGray") laserCol = Color("OrangeRed") pumpCol = Color("RoyalBlue") def ScaledText(text,**dict): t=TeX(text).scale(2,2) apply(t,(),dict) return t def arrowhead(n,wid,len,angle,col): L = P(0,len) W = P(wid,0) arrow = Path(n,n-L+W,n-L-W,n,bg=col).rotate(angle,p=n) return arrow def loop(c,radius): return Circle(r=radius,c=c) def fibre(c): loops = Group( loop(c+P(0,1),10), loop(c,10), loop(c-P(0,1),10) ) l = 10 x1 = P(0,l) x2 = P(0,1.5*l) x3 = P(-l/2,2*l) x4 = P(-l,2.5*l) return Group( Path(loops.e, loops.e+x1, C(loops.e+x2, loops.e+x2), loops.e+x3 #loops.e+x4 ), Path(loops.w, loops.w-x1, C(loops.w-x2, loops.w-x2), loops.w-x3 #loops.w-x4 ), loops ).rotate(-45,p=c) def fibrecoupler(c,angle): boxW = 15 boxH = 12 nozzle = 3 box = Rectangle(c=c+P(boxW/6,0),width=boxW,height=boxH) fibrepos = c lenspos = box.e-P(box.width/3,0) irispos = box.e-P(box.width/12,0) irisInside = P(0,1) irisOutside = P(0,5) iris = Group( Path(irispos+irisInside, irispos+irisOutside ), Path(irispos-irisInside, irispos-irisOutside ) ) lens = Circle(r=4) lens.scale(0.3,1) lens.c = lenspos coupler = Group( box, Path(box.w,fibrepos), Path(fibrepos, fibrepos-P(0,nozzle/2), fibrepos-P(nozzle,0), fibrepos+P(0,nozzle/2), fibrepos, bg=black ), lens, iris ).rotate(angle,p=c) return coupler def fibrecollimator(c,angle): rectW = c collimator = Group( Path(c, c+P(0,1.5), c+P(-3,0), c+P(0,-1.5), c, bg=black ), Rectangle(w=rectW,width=2,height=8,bg=black) ).rotate(angle,p=c) return collimator def hologram(c,angle): platesize = P(0,6) plate = Path(c-platesize,c+platesize,linewidth=3) stageStart = 1.25*platesize stageFinish = 2.25*platesize arrowL = 2 arrowW = 1 offset = arrowL/4 hologram = Group( plate, Path(c+stageStart,c+stageFinish-P(0,offset)), Circle(r=0.75,c=c+stageStart,bg=black), arrowhead(c+stageFinish,arrowW,arrowL,0,black), ScaledText(r"$x$",c=c+stageFinish-P(4,0)), ScaledText(r"$y$",c=c+stageStart-P(4,0)) ) return hologram def laser(e): box = Rectangle(e=e,width=20,height=8,bg=grey) lasername = ScaledText(r'Laser',c=box.c,fg=Color("DarkBlue")); #I want to do a squiggle with an arrow (the light symbol) return Group( box, lasername, ) coupler1 = fibrecoupler(P(180,10),180) coupler2 = fibrecoupler(P(180,10),180) analyser1 = Group( Path(P(110,10),P(150,10),linewidth=2,fg=laserCol), arrowhead(P(140,10),1,3,90,laserCol), Path(P(150,10),P(180,10),linewidth=2,fg=laserCol).rotate(-22.5,p=P(150,10)), hologram(P(150,10),0), coupler1.rotate(-22.5,p=P(150,10)) ) analyser2 = Group( Path(P(110,10),P(150,10),linewidth=2,fg=laserCol), arrowhead(P(140,10),1,3,90,laserCol), Path(P(150,10),P(180,10),linewidth=2,fg=laserCol).rotate(22.5,p=P(150,10)), hologram(P(150,10),0), coupler2.rotate(22.5,p=P(150,10)) ) analyser1.rotate(40,p=P(110,10)) point1 = analyser1.itoe(analyser1[4].w) analyser2.rotate(-40,p=P(110,10)) point2 = analyser2.itoe(analyser2[4].w) fibre1 = fibre(P(220,10)) fibre1.scale(1,-1,p=fibre1.c) #fibre1.move(point1+P(10,-5)-fibre1.itoe(fibre1[0].path[-1])) fibre1.move(point1+P(10,-5)-fibre1.itoe(fibre1[0].P(1))) fibre2 = fibre(P(220,10)) #fibre2.move(point2+P(10,5)-fibre2.itoe(fibre2[0].path[-1])) fibre2.move(point2+P(10,5)-fibre2.itoe(fibre2[0].P(1))) detector1 = Group( Rectangle(c=P(240,10),width=10,height=10,bg=black), Circle(r=5,c=P(245,10),bg=black), ) #detector1.move(fibre1.itoe(fibre1[1].path[-1])-detector1[1].w) detector1.move(fibre1.itoe(fibre1[1].P(1))-detector1[1].w) detector2 = Group( Rectangle(c=P(240,10),width=10,height=10,bg=black), Circle(r=5,c=P(245,10),bg=black), ) #detector2.move(fibre2.itoe(fibre2[1].path[-1])-detector2[1].w) detector2.move(fibre2.itoe(fibre2[1].P(1))-detector2[1].w) render( laser(P(70,10)), Path(P(70,10),P(110,10),linewidth=2,fg=pumpCol), arrowhead(P(100,10),1,3,90,pumpCol), Path(P(110,10),P(140,10),linewidth=2,fg=pumpCol), arrowhead(P(130,10),1,3,90,pumpCol), Rectangle(c=P(140,10),width=4,height=4,fg=None,bg=black), analyser1, analyser2, # label analyser hologram # label coupler2 Rectangle(c=P(110,10),height=12,width=3,bg=grey), ScaledText(r'BBO',n=P(110,2)), ScaledText(r'coupler 2',s=point2+P(-5,5)), Path( point1, C(point1+P(5,-5), point1+P(5,-5)), point1+P(10,-5), ), Path( point2, C(point2+P(5,5), point2+P(5,5)), point2+P(10,5), ), ScaledText(r'holo 1',s=P(140,-28)), ScaledText(r'holo 2',s=P(135,48)), # label preparation hologram # insert fibre between coupler and fibre loop fibre1, Rectangle(width=20,height=7,c=fibre1.c,bg=Color(1)), ScaledText(r'SMF',c=fibre1.c), fibre2, Rectangle(width=20,height=7,c=fibre2.c,bg=Color(1)), ScaledText(r'SMF',c=fibre2.c), # insert fibre between coupler and detector detector1, ScaledText(r'detector 1',nw=detector1.itoe(detector1[1].s)+P(-3,-3)), # label detector detector2, ScaledText(r'detector 2',sw=detector2.itoe(detector2[1].n)+P(-3,3)), # label detector Path(detector1.itoe(detector1[1].e), detector1.itoe(detector1[1].e)+P(20,0) ), Path(detector2.itoe(detector2[1].e), detector2.itoe(detector2[1].e)+P(20,0) ), arrowhead(detector1.itoe(detector1[1].e)+P(20,0),1,3,90,black), arrowhead(detector2.itoe(detector2[1].e)+P(20,0),1,3,90,black), ScaledText(r'''\begin{center} Coincidence Counting\\Electronics\end{center}''', w=P(240,10)), file="twoqubitQST.eps" ) pyscript-0.6.1/doc/manual/0000755000175000001440000000000010441274722015121 5ustar cochraneuserspyscript-0.6.1/doc/manual/electronics/0000755000175000001440000000000010441274722017433 5ustar cochraneuserspyscript-0.6.1/doc/manual/electronics/AndGate.pdf0000644000175000001440000000164010402637414021430 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœµPKÂ@Ýs N€Ì™^ÁΚؘt ¯/53mդƅ!ÃLÈdg«±/0Ááìq¸ÁAý F E‡–±´<$¡ÎâÞ2ÝŠ/ð®ªãOªüV) ¬ ßp´‰$ &6 9vä{¨Øxíå«Tסšõú°¿¯X®ØÞ¬ù¸.ÿ`2hŽÉÚ´ù¨Z˜•ûüS…¤Óé ß U¿Ãgx=µ@ŠL.5> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000477 00000 n 0000000623 00000 n 0000000418 00000 n 0000000525 00000 n 0000000289 00000 n 0000000015 00000 n 0000000270 00000 n 0000000594 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 673 %%EOF pyscript-0.6.1/doc/manual/electronics/Capacitor.pdf0000644000175000001440000000153610402637415022037 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœ+T0Ð3T0A(œËUÈ¥d¢^Ìe¨Ä™\F †f ¹\†f†zæÆ`NW—©B9PÞ ‡|0—‘±‘ž©¥)TÒØÜDÏØÈ®Ÿl0Ü( =#s„ÉÆ` ¤€$Û¡*`|$3* æ B¿9endstream endobj 7 0 obj 119 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000411 00000 n 0000000557 00000 n 0000000352 00000 n 0000000459 00000 n 0000000223 00000 n 0000000015 00000 n 0000000204 00000 n 0000000528 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 607 %%EOF pyscript-0.6.1/doc/manual/electronics/NandGate.pdf0000644000175000001440000000175210402637415021613 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœÝQAnÄ0¼ó ^@ÁÆÆþBomžiW•6‡Uý~I×v¢tµU½T–e`ð™y=í¸ÂÓ«âùÏ~ß@²E ŒK·SÉT^@5‘Ô Ÿ ᇳžÅšž2;C;¶P('ÔÌÄÒQäHšq††E=—+6ª7nEÝš}°?o1Tì5»}Ùš‹LàOŠL!”Ý¢šce>Žñ-S®^}Ä»£ñÄ'°äšjÆ… gO2 .V†ÇJ¢¨£TIÛiŽPÌ žÐ sÑ¢Ø[tì gì2nûî¯ ÐØcÀƒ„õ·ÿ¥¬ C.PƒÛp¬?þsÎ/~>›|Å„endstream endobj 7 0 obj 259 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000551 00000 n 0000000697 00000 n 0000000492 00000 n 0000000599 00000 n 0000000363 00000 n 0000000015 00000 n 0000000344 00000 n 0000000668 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 747 %%EOF pyscript-0.6.1/doc/manual/electronics/NorGate.pdf0000644000175000001440000000175410402637415021473 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœÝRIN1 ¼û~ñgù7è'´Ä€DFø>nÔΠ> gPEUvÅe'Wdä}çºÁž ^>@ðû z'66T#ã.¸Ù ç>w&-¥;±;6íT­»BƽõZ0õª(f…Ä+¨ t®Ô»cbUŽTdz§^Àñ3ü>þ¿¯°€2úˆRÚäT¡f“xŽîÇ¿õb•êÐ[<‰C'¾@óJcT´}r¤Ö4&!“i1!+ŠÖ‰ø ç¨&QZ"!/0AÁYâÀ¡ˆ¡Zù‘q ?/8½Eâ4ê4xjaÿÿ²­N&7ÚˆÛ$öÿ=g§X_ÄŽendstream endobj 7 0 obj 261 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000553 00000 n 0000000699 00000 n 0000000494 00000 n 0000000601 00000 n 0000000365 00000 n 0000000015 00000 n 0000000346 00000 n 0000000670 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 749 %%EOF pyscript-0.6.1/doc/manual/electronics/NotGate.pdf0000644000175000001440000000170310402637415021467 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœÝRAn! ¼û~c0ð…ÞÚ}R¢HÙC”C¾o %ÚCõX¡•a<3Øf¯È$ÈÛê±­p…ÃWÄÓ OþAL(TÆuìS1ªŠH¦d¬8P4&ùGHxw‹¿[,à!&Õò¤íÀvÅëü·>Y•:óèúùReª±`B…ÍIÆžæð‹˜TÒ1xIóüÓPƒhÉ.pB7М\q\1Î ’ï´>1úŒ†Ãnfm±×0 Fû.Úö8ÿ´³vu®ý]YãüÇŽopøôõFÜ›^endstream endobj 7 0 obj 220 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000512 00000 n 0000000658 00000 n 0000000453 00000 n 0000000560 00000 n 0000000324 00000 n 0000000015 00000 n 0000000305 00000 n 0000000629 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 708 %%EOF pyscript-0.6.1/doc/manual/electronics/NxorGate.pdf0000644000175000001440000000200410402637415021650 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœÝRIN1 ¼û~ñ’Åù7è'´Ä‰>Œ8ð}<£vú0\¸€¢¨å²«RéÊ™ù²öïºÁž žÞAðû¤ꪨFÆ.¸Aá@ºL¤é m(}›¡‹QsGkF¥á {¿–Nî“Þ9æD1ÈzãA}T¬Ü‚Q1kUŽ*-­ð?Âîãß°»€{´Ø¦ÊZ„ËTÉ:U’ñõÒ¿¡²€2ÖÁ¤ê! M¨ÛÞâ”ûý+_¬Qzë'°óïôã_ Sm9·òÚ#“1ïLEd"u–™XÖ—Ä8Úɶã§þ^A…Øm"ß@*ßÄÒA ¤ÁîáüÇk-ðÝeÊ¢ANàø# <Åú¤þÞ5endstream endobj 7 0 obj 284 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000577 00000 n 0000000723 00000 n 0000000518 00000 n 0000000625 00000 n 0000000388 00000 n 0000000015 00000 n 0000000369 00000 n 0000000694 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 773 %%EOF pyscript-0.6.1/doc/manual/electronics/OrGate.pdf0000644000175000001440000000164310402637416021313 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœÕO9Â@ ìý ¿ÀøX;Îè OˆD@"EDÁ÷YPÔÈZ­fÆcdä{­ÿ8Û}Áé‚S}'È$66T#ãœÁ¬'ç|2îLZ%Ø;M G £ÊŽÐt/B›¿c£Ŷ¡áÔ„ :e:6¬ÊµÕñ3Óp¼Ö¼Û?É{„”ÑûºJ³†”êìIœëEßõ‡_,(z}éXý_ôÞïž!;&ˆï~u °«uÕ¨p³endstream endobj 7 0 obj 188 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000480 00000 n 0000000626 00000 n 0000000421 00000 n 0000000528 00000 n 0000000292 00000 n 0000000015 00000 n 0000000273 00000 n 0000000597 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 676 %%EOF pyscript-0.6.1/doc/manual/electronics/Resistor.pdf0000644000175000001440000000154010402637416021740 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœ}ÌM‚P à}O1'(¾ÞÜ G0@Ld.¼¾Å(;MÓ4í—ÎSÂöúÌË*›tCÆòb‰¾ŠX «°Rûô^n2KÁ3üôÃG¡Ñ•ü"KÒ–ï:îQ`C+ó}Â|Ä7õ>Ä4µÀ¤¹†ÇÏ9êí®) endstream endobj 7 0 obj 120 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000413 00000 n 0000000559 00000 n 0000000354 00000 n 0000000461 00000 n 0000000224 00000 n 0000000015 00000 n 0000000205 00000 n 0000000530 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 609 %%EOF pyscript-0.6.1/doc/manual/electronics/XorGate.pdf0000644000175000001440000000167710402637416021512 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœÕQKnC1Üs N@ùl_¡»æáI*å-¢,zý’êÙM²H7ÝTYÌ0¶ÏÈ$ÈרÏuƒ3¼ / xÌü)…ª*ª‘qÜ p"U&ÚI¥vb3lb­¡…Q \aç½Tj­âWÎ>QF½‚q§Ú#Ž£Våœàø¸Ò ïàø™ë¾þuh-)¶é²º‘p™.£.Cq{é¿pY@½3©¶4ª6SNyÎëÅ‚¢ë?€]ÿ„Ï·¸ÿ º;™ÀÕã÷žÞ2¾öa‹¶endstream endobj 7 0 obj 216 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000508 00000 n 0000000654 00000 n 0000000449 00000 n 0000000556 00000 n 0000000320 00000 n 0000000015 00000 n 0000000301 00000 n 0000000625 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 704 %%EOF pyscript-0.6.1/doc/manual/figs/0000755000175000001440000000000010441274722016051 5ustar cochraneuserspyscript-0.6.1/doc/manual/figs/fig_area.pdf0000664000175000001440000001147410210760205020300 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœÝWÉN1½û+|)8^Ûîk¤)·9r` ÊDb‘øý”Û~.·Hñ¬z]]ë«)ó(µ2RçO=÷Gñ(¾^yyxA¾ #Ð÷AägF^] 3©àæ$Öò(ŒwN%¿HÄ/‘Oh‹T5òÓbäé ¥YœâØå·¹%ÑX¹»%# 1ØYš¨RœéÑQœ]Ÿé/úúü|÷[|ßÉŸB+KÞ.où›‚V.áxº%ÇÅ9Ž6(CæLL*: 1zMÑ…†Ä@.ÝDò4)ÝËÅÜ^0⼊V²k—7࢈ô‚žéV˜æ‰^ðÍËpÁH ¢Y¨A®³Ø‹;*íåV“˼921ªyž,¡ZEÊümdiL@@\-„ÏG*Œ”dY³ƒ} \¬ œ#Î>€À64×ÑôdØnn'r!s ˜°œÉV.Ü~LП ÆQÙ9ŽTa+׋é\ Œ™ëÅuƆ‘ê\T ÅP‡tcÈ=¶–Ù'ˆàéÇ€2q:•=ò8Kz¾¯Ù ¦ÀÕÊ‹‡Ke“'m.•†´¹T¹T¬Q*ÁŠ ûUjÞËÛÝ:þžÛÉé½×s.¨˜êâùæW6rÀF `"mò’$d‰·Q…jžË„i‚iÈÅ|“༾݂[GŸ;¿±„N¿„H÷€UÛßv}¹5¶ ! íñ%HHZ(@Öâò@ H;¼ØnlÂGAßìmäqb©·:Ä¥ÇÉÅÚã×÷›Ìð ÝÁ¸q<°žŠV=¡yûtoó2ŒG3ß ®Ç~§o)›ÓîM¾P a* ÿ ß|ù}³×Úf÷ .¦ŒÔ]Ô,ðæâ‹ï¸×xï{ö©»´YàÍÛ_è·•Ï'zcù‡.ÅP.ñï4½2' ÒÎuP¹ Ep¿*òp@HSðæ¡žÖ¡ôӾɴNßå)%»º¾ï3.̬t N^L¤âí$w7ô‹ðpórŸSÙ]ë_6}Aß!Òú0É•óbýþöápÿÒH–?ÿv¹Hendstream endobj 7 0 obj 796 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 11 0 obj <> endobj 12 0 obj <> endobj 9 0 obj <> endobj 8 0 obj <>stream xœeT{PSg¿1„{í*n¡Y‰ØäêN«ŽÔ VGYݺà£0Pž"ÈB¼ /H "$á@ !‘‡¼$áý²´ Pª‚‹ÒÕZ§ÖǶÊîlgWív§³ßµ·ì¥Ýýcÿùæ›óøó;s~‡…¬ÃX,VHrz|B\Üî¹R¬}+I­©ÖÌ;¨0µuõ:›>L~ßþ½ó:×ÉÞØ½ÏF/^Ew6¡…ŸclkråË(µÆP$—ÊtäÎÔ¤S»vïÿŸ%"22’Ì5üÇCF‹µr©Š|“ù”ˆjR¬Ò"£˜h…B~–”* ™–åå‰óÖÒÒD qyL®k4êrgÔ.r¯Pñóì=DÆ+ÅEêpR®’ÈUr©òÈ¥X*"•¢<ñ@´R®+2û„rÕ³ãåÊÜb-ù#[2^IÆ‘Ibi±BTôÿ ÂTgóÄR­L'×ïÜ.İ,‹ÁŽa'°ì$–н‹¥cë±W°Ø«Ø&f¬XV‚ÝfŲ†ÖÕ±·±=ìg¿ ¸Ë æ$s,œ¿ {UmÔ–k¬•'(ú »ÚÎuØÝ ­@ø[Œº‡$Ó¹ôZˆdmxz“ÑãůÌôxF€˜ëSœÐbâ*ÊN¯åµáÍ•˜#ÿ[öõ£YвØãüG¸¥1à 7¥”ó‚¨÷Ì÷(Î °©íHÈÍŒ‘j“€Æ>Fø?¯}öÇq¯Iâ8Š]êNC7ðú{.ô^¹| #]/ÍœÎV‡Ãý‹G{{æRûÐ8ß×wÁ7xƒ`˜˜¨-~¬"ý6zaæ¢ œvÜPoƒ: ¤Õ­³j¯iÌ,“™cËx師Á. &Z̹Zˆ‹‡5­g ñ=4‡ÞN¿vZw}²ëò¨ G¬°X*Í&ƒ¾È¬â`Êc´ qæ>ÿâã¹3i‚5RŸ"Õ0ÂÇYT8:ÈÍ<’£Š…$ÈP-&-#¶e-Vb(VŽguŸ‚ÓpÆ –ŸÉÕDC$AóïíGø³û76ͧ¢pnëÃщeX†>µwß7Zµˆn]DùSÍþ`¸«ú Å<ðù6‡ÐT>Êz׃Ѯw»B5nMs!!hÏÑ(aœOü‡|A©ÁPf­ÉWUèA%žÊ÷õD}J“/Ù’ö0ûÙý‡ýÓ üÉ¡Ža˜„›g¦Úi®#4­±¨Ú¡kdÌçj©wÖÛá‚Í[ï€ ¸Ô6äñ·Á< Ôôž&hË[¸#–ÇÖ9 ¾©&É£9o'|ØëôNÏ BP3ú+÷†lv¨¿LÙÎï”y² HVɲDŸ<çQ> endobj 2 0 obj <>endobj xref 0 14 0000000000 65535 f 0000001119 00000 n 0000004516 00000 n 0000001060 00000 n 0000001167 00000 n 0000000900 00000 n 0000000015 00000 n 0000000881 00000 n 0000001582 00000 n 0000001298 00000 n 0000003494 00000 n 0000001236 00000 n 0000001266 00000 n 0000003473 00000 n trailer << /Size 14 /Root 1 0 R /Info 2 0 R >> startxref 4566 %%EOF pyscript-0.6.1/doc/manual/figs/fig_circle.pdf0000664000175000001440000001061510210760206020626 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœÝXËjÝ0Ýë+´L Uõ°^ÛB ºhz—Ù™&iè $ä÷;’|4¾Ê¼*˜p#Ïñh43:ã‘ý µ2R—¿eœâA|¹œäÍ“ðòEù~D¹gäå…&(?ɬµ< «S©IÅ/QÆEáX(”›ÍÄãx¦.‰a>ʯZ”DcåáZ4WŒ NùèŒQ¥˜éÖQœ]éOúêüüp'¾äOr¼Ôò¢.g¢×Ê%ZܸUðé〗Y³€49&Öšè¿É¡jázÐÒÇo¶!u›Xcå®gJS žÒÔnĤ¢+Ù4žfûŽd›ÈL‘CPz-Ã#nRÑJ¶`mQí·ëY¤4‘öÔ‘ iO}6˰ÏHó€-,®üŸÅu¥Ó¾b*œÞ@çTÎd+ÐD€ÂæûÎã¾íÌX¤ ÎáqÄ#-PÖl‰à5*Ö„Æç5€À64O½YS`¿±m¤‚ñ4/¤Ê…¨.ü~Ÿ à='Œ+aaæXK˃­IÌã…×ó!s²Xc©¡–`‘úêK]• yM‚ýÄ´uó˦›‰ÜQ®îüO­/VI‚4¯lœb—¹O¡œÃz¢¬¡.ö@ s¢X£¥‚-4y½FCØ‹f½x ÝÕÿ…ûŠgë) ª Ãéž¿Þr8Ãi‚3@0Ž8‡B‰€&§ š@0Ž8¯¶¡9z³Þþýƶ• *¦˜láQ86.¼¼Oî˜cmtf޵T;$ð¸óz`>w̱6zí µÔìwiY½×åP¹ëSÀþbÚúð7Êi“ê)€ÞËÞ°õ|b{"w£±‡â4ËHë_lá´ãñ‰yì‰Ü3ÇŠ5i^°…Óν~Øol›ŸΙÐÞ £kß9îß Ca&× ˜ ¤#^ù l‡ª¡hq­@ H¼Ùîlb•ëÚßGÛû¾‹‰ýsß_|ißÔLpA•× g½2¹~:±¢¥ 5 Zƒ fz#ägA¯˜¡"θ:òó+«£üL[eÉ7+Ðïî¿yqKø(ÍT¦Ùº%×ÊÇ輑ŸûUqÇÒ9»> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 11 0 obj <> endobj 12 0 obj <> endobj 9 0 obj <> endobj 8 0 obj <>stream xœeS{LSw¾— ÷¢Â¦¬“жW'D\Š(ÁÌ9P\ ˆ±€®¹mïè JBÁ¢eˆ‡W[ ¥€Pyæ4 >‡cé™ó1lÉ–é6³eÙïêýgÅdÛûçääœï|çœïäàØ"? ÇñdI²äýØ ©Œ†6l”è4ríBx=†³«üØÕ2ý$V§7å1JU>~@r0bÆÈÿ"QÑÑÑT–éŸ G¥–zÛçÐj^Ckóc¨XZ­fŽRJµI¯2Pòìl:{¡,M®¦s¨=ŒšÑëuTxlµI,ŽÚè3›b¨$£†ÎÓERŒVÁh™|%×fSû4´RNiäÙôAœ†ÉÏ3Q[ÄŒößê$F“e4P¯¶¥’tÑT"%¡•Fµ<ïÿ ÃkÒy†ÂðˆH1†íÃâ°=X –ŠI±@l1„-Öø¤ÄaØ ¾¯ö[ç7æ÷’ÃSó¾DµÁìIp³+¯ãÓ³(n–×®åÛj«›€ìm0gˆ¸j$–Ri%iF*7!­3;ÁK¢Ab|Ôãòr—úGXVœ¾ÊvõÇœp™D&âgÙ]‡ÕÅ ñÂG„µ&ÃÄXRKÁlrù=Öÿ,xìZ$ægîV$@Š#âëw¿õº,ŠF‘Íèе™:@Ðí9Ýyc÷¥mÒBe–(]¦‹‡$÷æ£woô|Ë9¯°§ëtOßMr÷+¤íG„g#Ñv~æÎ#ÚÀ‘³Ú Óˆu jŠDS'¾(?›×¯ñî8épÈD3‡²ôqMrÂ{[ñôþM„]rQ$¿éáàðLA—ε… FóàFÏÅïÎòììJ~smCµÈ3 %2WK@ºÕšpÌ'€ÕMÄ×»a‚DF¢ÿâ•[ÃÇåM–Ҧ ]îÖÞ‚vF®ÍËýD|\“fT–%ùT”{J:بö2Ïr¸…¢ï¬iE·Ñ ?$²­ò·TU·ž:U ‚ (¯±Ô“!­£±.7l‡D›Òt.S4ùÑPa«ÔYŽNʨ]ž"aÁ™ãedI@H"'vöƺ'4@sUg… ¢·§²-ìÁôä+†}^‡MëZÌg Gpþ\ïØD³©SüBÁÆ»qö6›Æ7ƒÖF+ƒ¹Â`ÑGqy¡ÛP~ñ¸ài²_²“nNf&†+–öö"{‘Í$æ2CÃQsecU#4  Ãé¬ó¡öš‰Î*G¹GŠÂ¸§¡N£Ôõàp9»Ñ"d ý‘³4+ê*l °C}CËy$D¿…¶]¨­o÷µ n1ÏCã/¶ówejr‡ã¶¨Ö\ÈpÄë>Íì6^Ëq¶„Æ|®Òß7ÌX¾çð§ëIÏ­Þ[}Þ{“ ÇDïÎóF¸Ýü¯Çûº‡Çî~?ôP  7¿lþ=k<×s°ÿXIèãÄUï{]{›vÂzx«l»>I—¨QÆî÷Ô~Ç­áÏ ŒNÁgäÕ'ª ùLNg‘×f¯®¶ í5Õ@:l'rtŠ ‘ïÏJ»_,ïÆár=ã!»oöT+TûShŽx5<>À^J–]5LÂU¸Øêš¼>‚H@A$’‹Ñn…ðd.v”óçhŽ–Q[·ÊþBÙH5Šxó¢àÂv6­¥¶ô-ž[ÒçXºt®mi†ý ’^X endstream endobj 13 0 obj 1297 endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 14 0000000000 65535 f 0000001205 00000 n 0000004085 00000 n 0000001146 00000 n 0000001253 00000 n 0000000986 00000 n 0000000015 00000 n 0000000967 00000 n 0000001660 00000 n 0000001384 00000 n 0000003063 00000 n 0000001322 00000 n 0000001352 00000 n 0000003042 00000 n trailer << /Size 14 /Root 1 0 R /Info 2 0 R >> startxref 4135 %%EOF pyscript-0.6.1/doc/manual/figs/fig_circle_eg1.pdf0000664000175000001440000000300410210760205021353 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœÝXK’1Ýë}EèÓ’®]â#¸j¦²ðb’E®Úæš™ ¤Ë‹6X^ È[Š´¥ã#Ïû#|„o?ëöþ'°&ŽZXûû…_!´ÕL±—íJ1÷…<œöØq?rÓ5TŽçs|½¬–œµ/«"ÀÖ,žåë=¼…¶ýeßÿ_7ÿý~+-Õ#~¢XH¥ìqŸykiòž¬rí#֜وjjç¼âeà+¹^ª?åKºQe5 œË~Ķ~œÇE€ÜBé3fâØÓˆCx„J)¶lšÊ«gâô%R&7Š£Ì#¹ ÉÇN^!Êd?•óC|@füþLËŠœc£©TVª‘(`QzÇ!]Û-`7âclƒbt˜aíT#þÔ¿‹òA#g ŠÑcVÐ }îMC>ÎíºØøÜ¤PÁàYBYäL*/ÆUIªEîh2£òD!> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000001088 00000 n 0000001234 00000 n 0000001029 00000 n 0000001136 00000 n 0000000891 00000 n 0000000015 00000 n 0000000872 00000 n 0000001205 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 1284 %%EOF pyscript-0.6.1/doc/manual/figs/fig_circle_eg2.pdf0000664000175000001440000000172110210760206021361 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœ…Aj1 E÷>…N X¶$ÛWè.éf‘2‹!‹^¿2c) Å žÿùú~: #AžgÝÛžŽt¹1ÜŸIà'|Ø÷ ”•OR­XkÒ {j9c‘S=Bµ¢8Šã+}Âõïb&Å6"»'i6Ì솗«Ý™B2Wd…-/Ýâ>=ɼzþo©¨ùT¸†\F©ëQ]HoÈÛÿËufë›ÛiíH}„Ó©¡ª€*c (n”R0Ïà*à‚Ò;Œkƒ‚uôpHŒ’8\¿¶]†3x3¾oq.<Ï/ }s>endstream endobj 7 0 obj 224 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000526 00000 n 0000000672 00000 n 0000000467 00000 n 0000000574 00000 n 0000000328 00000 n 0000000015 00000 n 0000000309 00000 n 0000000643 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 722 %%EOF pyscript-0.6.1/doc/manual/figs/fig_colorchart.pdf0000664000175000001440000002217210210760206021526 0ustar cochraneusers%PDF-1.3 %Çì¢ 5 0 obj <> stream xœ­\Í’Û¸¾ÏSð¸¹0ø'pMUjÏIùh‰3âZÇ’f]“§O7 ‚ΚBÊeŽ-ÙFÿ~ø0ßÖò†á¯ðõpyùþl;®ð©»æöö"\gÞ5Îê†Ó܆æõåïÿîš·û kÞ^¾7Ü¿$~9\š|o€¿rÑ|y}¡—óF Ý2¡›®Ì9Ó|¹¼üvßN÷ñúío_þxùç—æ_$_K|Â÷Ìò­ÈØ'Yš–Ú„lÕÜK΄²ÖÉ: O!õ,XªÕÊyó;üÞµì®Uº‘¶uBI/ûp/÷隊×+‰OÝ-ëÖ<®[Çuÿ¾sí\·ÆñF›Ö¨®£µ÷ç…sÿ$àÛ¾_~ûsœÎÃã6³­pÊ? ŸU2ð»b+¸l¥'à­ãŒÔ9÷(Ò¶J¨¨ ~ [u®Çáöõüq?eÊ)x7ø [ìeAÝ å*! vaÎzåNSéŸä&é>qÆLµŸ¨ÖhßgZæÈIÃð¾rT/š¡eZ ªÎ ðޝØ#œµ™„O9lòÂ/Ãqü¸”nÞªgoµðœ•€@«uW 8PDv­ÅE¦Ûá4fò!(ÁÊËWI–ÒŒU¥ Ñ H\«V8 ÕÇi¼?(ZæLÂÀ'þyn`Ñ5ÂU«páh§ìø~þ¸$’Ä¥}@—Ü(ëV-[Ê-$æÎyÁ´é©Ï7KàÎéj_w­‚ˆL¶¤Å¾~N÷±ÿ‰PÁ Ë]k§@þÚÆ¥%^ú·áúèójÈÒX ñë,¢²&¬ ùvLÀk:Ȥ”íŽýíÛ†p&H8[bZ(ëj„C(îŒYÍ{ÔÇí=óæN`IïYV,Þ,0­œjwåá>§éÔð$§­­_|¦€åÅâw{™h¥‚²o¡ü3[åÝÌØ9|ÚE¾³U;/àe`|Éä 1ËF©c‹¥®°…pŠðžYćò•V1»Jº ¸¬IºXo…×X°|ªÁýÜ?†h¡è^ AÝa’¤e¶6F¸?SXhÎåì¦[Z(Ž"}onÁg-\'«R³n¡GnãmpÎ-é(„žK\(èj]œPArRÐ £QüÛiº?~œÆG&t|.iBA€Wuœ¦…ü¯Áêoö´Ã‰nثƧJú1¥Lõô‚þaD£4ôFÁA.ãñŠs[¾CY¹VFŠªÒÓ |úÂt–5fi¹ªÎu5^È ¬^c% &6 È ¹i *œjò#6ÞºÎú^;à–Ô¤5€¹°˜7vÙWû@ÖàõÊ}¯Þí 32k£ß}¦Iˆš~?rY›¨"\1síB-̨†‘n¾8¹ÖbðÚ|öçUNÎAÑ '¿‡ý©›Q™/ ˜Á'È:‡év}={@I©£R?ü\š*å+hGu´["BQ5šBj˜M4D„îøžÜð¶‹ò#ŠöM¯äвsÂpÌ“òt²z©¼ñ¹e+ *f¬· ºå*~öù×z”§FE N( £ãÿT±Ï4¢êêó»6zÖ‰ §u‚üÞ³(h­:¡–êú@ËͯZì'úBdÒ‘{§~Æéh¦_f.ÎmP„Ϫ2ô¼©8!C²å2ÎJÓñ­°IÅNÀ‹&ܧf—Œl¬…~”²OEÖé8~ȉœ– ŸÙÞÌÚÐ nÅ´öƒš¥FÔ.Ò ÷y>f,ì±…O¤›ÄŒŸT¤ð]IðÆÿ¥AQ¤¡@Ï»$Œ‹_ãZF‰†”áØÛme´8D€‚jì¢BAÚOFŒ f‘i®ó¿Gè¢r,1 áCÏûIæà„‰$»m•ëuȤHô¼t,‰`ˆåŠ<…†¡‹µðXĪô]»1›µ!éym }é2ôèЇ¢! Îi3éißäÚ㘫Ô(<>nß?¦ñ¾ÎRÉØ°~nB’ž·<žCɶ]0Ã2®ì–ré„#=/Ê,ƒ8õß?úÌÍ=r§êZ1ªi ”àb„ŽN;ÿÖ‰Í…Ï J’y€d*†PÌÛj$Ž-ÚRÜ=†þœö#~œIófײwzláD\çèHh(ù¯¶¼?Ñp¤ Ñ ¥ ¹¿Ô0káU¢Ç¢AJ¦bšÌx¬HZ°^'’Qz+Or¾k”©;£¯³dBž—¬Zÿ[k>ŸßŸ&òu!Ó^áH…Ú ?û‘ÎUþ$Êùr¡Ý’Ž‚TÓ4ƒ‡dRBÁÃö¹e¶Â!>|Èc]Á Ú¥ ¤}(å¶Ä“VÒq—‰U, (ñ€‚|>NP—l¤5~º—œ"΋\°€ö †p€2|‘Þ :…ô9™‡½G6x@»ŒmZ]XŠòÄ•Ã$³ôñ…:´é>HyèäQ:‚ NÈ éynýØüx.åôžÝ­$‡~ZKhqÀ£ã`_JõÀòâväž®žN¼ž…°¶µ¢©É#³ä‚Õ³»Cé z× á‰'LV13еPˆú’E™ vÏNEô)³çpêoÛðq_(þ,ÚªEv³‡ bK¥pμÜ|ž΄òCÊžqÐð¡ÄZ¿‚ü³ß3¹‚ô”á;Û„óèS¶€þvæî­×óézo S›yf‹K´Ûᬶ*ÒabÝ´jáo~rÔÏ5Ý¢RA7Ú©”»Qù% oýׄ‹”6 ¨UÉGÚY‹ºÖ‰”ò*É–Ií\®Œ/óGÓís¥Ž-³R[iw^¶<#+ù’<ïžB6ÓVËâlìãñ|eV§à/í,› ‚µ+ñ§·é|®·)eÍ8yªÄåuØà1íÜ'QD˜‘_‡ñmÈwaW°–vŠ“ÐÁKxM×2Â_%¤pI´(¸K;µ öÝs—”ýõ˜IyeŠˆä–²åÜHL¦Ý5ÄI¯q0Z/ì·Sÿm,˜’Ž'“­—^p™v:$ø¿ô亨ízË?éЊ6K¹´³,ØL;Ûñ% Û,d’Ü|ŽL¶Df%{ Ú0„ËØKçá2]§ñÕ' :Aôâª%…iwO?CM½ÖÏWïÏ Ò¤P2–v e>!%Œ%¤ÜÇsv£Àó%Œ?B+ ß"-í <ÉK× ¢ˆ£L-k¯$,aR†äâ¡%±ðÅJ f¿K«fIHÚ¹v Ý!H׸«´ö×ót#$Ûì97ô-O U‚- ©$*ítèªMÆSKœûÃPÔ&$ƒæ2Ë.(K;eƒ'€<ÊDSåÓÐg´mò¿EbAVÚ]žp,†jÓâ[ˆœß_³r+uþúO§×ºy™é ^c|»ãa¥épèïcžZœÜ­\‚m‹œ´K2LÇÐĤĤ÷þ½ÿìÃ1°Ûrp¸÷\€iÖ­¤%q¤%ñŽhIJR\Iw8ögȾyð‘¿™¤=¬¤ ¡1˜î2i‹4F]¦5~ÔÿAGÅ*áû®Ôs<±b.8°Õ ÑJµ¼ƒ&~«ÆôÈN*]6Šr$ʬc!¡úBdwÍúëcüNGÓR§¨ßÚ”"BæŽ6¨d ùžgàÓ×r°ø¸?„sÝ…r7­:n jU ·ŒgÔOøñ?Ë/&¨Žw„@±0„F‰p¸øu¼Ï9G±’ÍÕ¯‰U‘Ž$R/sÖÑy¼f1ÍçÚûƒ÷œD„£žŽ ôx¼f%KP }n¹…}ïÒQׂ"+YF0Í|Ç ÂM”¡?œÞ?^Ã!¥‰1ñšZ݃Ø«"“ÄDejùE-sFdü¢þzüüJŒSÔe¾ùãZd("À"ý-hSI4²à–gwΧé0ÅÜôrTAÜÖÍûRpŠöŸ­c$)¼w†7nm°Çñx¢ALJw]\ê§ä’:K–Ñn.09%è:šÖñç~‚98°üý;éCƒ/®QðŠöÞñb¸GJ.ºÃõÚç}•—¯ºè[Ä¢½çæ>É ¢#k_Ý3ñÞ¢èJf§2ƒ}(é®ï+Ÿaw¢à:~&@œ!„–m8$=Ä^>&ω2[Wòˆ$^‡Ëï¥ùã˜ÒÌÒK‹ä:*t‘z¹¿Ö…~L—þ1­KG³1çW²ˆ$NŒg·Ñ6–K…5’ûE5‹È¾²œEtïÏÛtÏ+º[X­(¶` í[¬…ÀNã"£öJ¨ñµ¶DÑ–#¿ùà:¯‚ ³gý¦eZ}–+4 Hòc}8½bR¡2Shïfh¦xÆ"6ß*æ¨éÞr1Å/hŸôΞ^3Èý5¿XÐàÌM¬r%hV7˜ä8A6!«‡mð?asˆ”Dg |®q%+hçM{¼*á5nMà•°ÿN›ù8n¼AýÙϘ3~ÉÚ¥^ƒÐþ5 ²*ù>„«ÐQ\AÚyÙÆF+µÑËñ÷J$]€Ž" Ð^‘ÐP¨‹´þ6%ù…l°|öv+â4îfŠÁ¬'ƒª£¸JvôÎʃ/ˆ>ÊEÖý2y7Ñø 1¹å?±@6qd«b¸txgUfôž7%\FÉ~¼Þ¿N·)k» A%»ÇAþHñ˜Èñ1„¤äù(wSJ’ÞOMI>AŒ[‰?Á†äÕ‘v°'CÞ¤¯psÏúÐ|7'¹ Š¿þ C…nendstream endobj 6 0 obj 3948 endobj 4 0 obj <> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 7 0 obj <> endobj 11 0 obj <> endobj 12 0 obj <> endobj 9 0 obj <> endobj 8 0 obj <>stream xœmV{TSWº?“}Æ*Îf$Rs²ÚN_>ŠÞέܶc[|u ÈK”Á¼€„„òà±I oO o-ŠC­hEk;Ú©£ö]Gk;w¦³ff{ücvtͽÜ»VÖYYçìïÛû÷íß÷û}bå ‚Ãáðó~¹worÖÆ,©\R½9S)/QD_?Ë$p˜'V0bØWÙñ:Hän RÃ1kzŸXýC³æ'èÎZ´ðc"†Ã™ºúy²R¥«’–•«ÅÏegæ>¿qã¦ÿ}³5))I|H÷ï/â’ji™Bü þS#‘)Ur‰BýŠ8¯–ɤ‡Åe2ª¼Z\RZ*)†å”È$GÅ»¥2©J¥¬?—ü¼x[bâÖÍø±íqšF.©RnKG¤ ©Z'.Q”Š÷É%e%byI©$š`§\ª®Ò‰_J”*þ':M*?¤©?D+NS&‰SÅ™’2¬¤êÿ~!B¨SÖ+KU’Ê#UeÕåj©¦¢æ¨VV"?DùÄ>b'Q@¤»ˆ b7‘Iì!ö{‰,â-"›ø%‘C¤¹D*‘G¼M¼I¤ÉÄz\wb%a%þÉIã¸8Ÿ¯È_q'&)æäÊØ•rn ÷÷¼|Þ8 €Ü$N~ð£â…W½¶êϽ…œ±L«øž9â0J&GÀ&x£ u-¶&+õ;Ää²; _Ã!÷)bÁñÆ.³GxlK¼Ó’è,ƒ!4¨Sõrc¥¦Öm°ÁA·×ºõmzHªµÚêŠÑªÙÏ^@OŸ§ÐfSǨß7àâýaˆYÿçê2Ú¹ÓÉ<)p9}­~Hz ùÛ `¦Ù˜×HPyäµp’Dãàì;}1HÎÈÞ¢X €©&ýè¢ÒÈo¯ÀyéÀ7EÞ(”éSöˆî«#_'5gÕáÓéîÞŠažD‰‚‚]eÕ™LLù¿½wã³ÉóåÒx”a]/ïëî¿°ëÌËùyÚ²CÔ"åø*ÉþôÎóÎLçȤ(2оDâ¼p˜Y?Ìaþ%tmô[I/4ê¥ ydE<ÔÇ<Ï ±Mì*n˜çým(ô>$‘ˆÇv?xžk`Ö\ zÙ6È@Á?Ä 'S,`š¸‘± _?ƒâPÜ·ÿ@"´îÅ{ìã”I)X¾´‘ÝÀrµçõÒ#35”r¡î:¼AÞ;³tC͵À¬Ç¹¾DÚåô-@Ï.p;®¥6A²Ì⟣˜«Àî(ЗÓ)zað´º ’'¼ô!ŠM’Q•ÿ0>9ØÂrÙ'ÙÇo¾„V\˜ê93N¥ÄY ­ÖzÚ¬ÓVÑ HnÏú­EÜùO~÷îüÁ*Ê*y—>Œ2F™Ø÷ã®/#Í—ëø/³AàmuC/$ÇÝôAêA9àÏÃ\³9ÝFê߀ìaÞë­&?¼B¢­`¢b€žÅZõ'´ý ýx×ï_Ø_T•]DÝ6GvM¹)K/D/¼.¾09÷Éü–dcò_O>˜99,ŠÞñobI³ mì(V¤ÀLX<¤XÔMYÇš/“è2Ïò=T5*Ÿ,ìÍ…àADzðj'L·õñϸwó"fEìm´Ià¿=~â2¼ ”/‘à¡ÌËLÜ`uO®pÝò:þgèóš€ÿ]¤Pî-M`²‘]É>ÍÆ]ÛöÍÅ÷ŽŸ=M±éî×vÚI=2AVÀâ³$ÿ3æž¼É~!€Õ&Ú¢©­¨—ATù´=G‡j>€×HþwhÕ»ŸÜ]©Ø+ŠE_â~yv”ó¾Ó¥hÇ®E$ïb÷ÈToV„E•º ’ýÝáþÉ¢ãûÞÎQVR•E–²–WȤ£Ÿ³òà›æúäh«t„@’Óì‡7Iô!Š3£¿ü™sc9ÆÍ¬ÞÖ$yëŠ(Ö à«5¥‡YC`S‚‹$Ò€ÑSç".¯ö‹:~[$B]ƒc5=Ò…zg>õ'L¯M™)½VøPhÑ•c¨bº}0^W|vÝŠDÖñY¦‚‰Lÿh¡Á©uk<ñ*Ÿª½’|´åäÄÔˆäZU«Óémö …I µ°&PRKòÙ¹ªŠ#ësnÝ»yûøì‚hj¤kNÁ¥ƒ³o8Y+>ÇQå…°gl"âñ¶¸[œ°»¹£ÅOÀ™ÐHdl04ÏÁ!{¿q”d­Ö ƬŸÚæ!ùÇ1SYÆŽR–ûC§ûݳç(>jG_ . NÌ×Ë;Eáò@!,%÷+Ê ÷•|ð-&œî«ëe¶ö˜úâàJº¾Žß…>B ø›Ñ\3¯¹¹ÁÚÒÒ…6H;Ìí$¿Ë£Ñ´U&¼š™—¼ôðÝêbÅ„¶«Ê„EG•yRYG_­¨æXC¿i‘¬ãñSÙÄàöµ9¸{‚Íý6œÀ6i 'ܺzñú¹ê±}“K\UvŽÁˆpfdpnqXº­_ôH_ÎGõ5 Sf+úV0;7Ü5 ÉsÇÊvQl>€{hS†í‘Àfûlø€¿—œÿ¯ô’ê}…"´ìNi}•ePeáÖ¶V'l‡ä)¥˜zpÀ]¶† Ž—…@†‹àøX4‚Ågõ(goéÁ,}“Ô×â´‰¬ ¶+-É*.¨k4[mVh‡M­ÍÎfò]ö<ïåáâKóS c"“¿¦JOk ðˆ!r…BÓÅôÁ@®|ϹƒS&G…ñÅ,®kVÀÑÑê…‡<5˜L›wGéM‡À[íü˜Dä¡J­V*ûÔƒCý}Cƒê~ET¥è‹Œ ËŒ[ZF»q ¿ÃTŸØy…f¬è[À¿ÅnÓó–š4<@²õ*íF£Y¥‘ÕË!Yzt|–⿃î°ÏÁÙ¦ ’l;xõlÞoOLwF"¢S§¸ÛA[ó¹žIÿ¯ƒB|~æö÷´?›)Øéj‰)]‡u·½5äµú °ß«Ç] àŽ¦*³ÖF-Fh€´[ß«ë7zë°êôš£3êóhťߡ'©¼û;þ_TÌlç•Qq °7…hX éfº‘~Ž Äÿ ymÁ¦ ôbC÷»'œØÐó `ªÙMÏ=V³3ñ›Óê´¸t.‹ º »#t=Ž>‰úÈåv’•äÜÄ2q?F€‹NŽùLÔƒs›š’£2a mëa‡!'„( 1»ÏÙèhr49›„Úiƒv²¡ÁV/ª5 EˆWä”u—üšÝŒrâ‡"7®-Í y„¡¶ K™'ÄyÓ-þFh„–£±{^l<³4:$õ KFPnáÆÞ?òõGµŒ[}V¨‡[µYµ•­Š©õsÂ!ìó»Ï¸1æ"8Ñ0÷d»kݵ.]"[ÿ 6úš}Ð'„½Ïx^µ×ú›=t_J`ïÅä£ SßÓ8Ž=ÉÿGÖ<ÒfsA¡¶{;g°9ÿw|xÖÙÞƒ·xDÙ(_»q\<k Ûë¨Ïˆ¯Àl£)ÕŽ+eÔ¶z|d¾Á˜rõz·þá˜r‘‰ˆƒ_íþ =õÙ:þ×LÚ5ÞXo7`"Xƒ§)” à‚}È0 ™,îNÇzykóù©êmÿ@oO_[K{‹›jö¶x ›ŒŒöÍÌGÙ¢4Àny[o)–ü¯5Z£´b}êé¢Ë§Oö.\µç†kNÂq ~bŠd_ÄŽ$³7ÔÔW• 5,WŽŸ¢Ú¼tr­9MÆÞïÆ<ذÀÁæžýÅtãÙ­Ãé‰ÎnǽuëŠb4ìoÁ«B ÇaðÃiMèðøÜîcý§º& yº¯«[£Ùœí[ud¶ºà‰ÚÁð©±ð$êí[†gA‹%Ê)C Ò!w˜ÂpZˆ´ªôý_däUfd‹t‹ÒH6,‚JãöTò&ûòjñØgˆú=Ê> endobj 2 0 obj <>endobj xref 0 14 0000000000 65535 f 0000004272 00000 n 0000008930 00000 n 0000004213 00000 n 0000004053 00000 n 0000000015 00000 n 0000004033 00000 n 0000004320 00000 n 0000004733 00000 n 0000004451 00000 n 0000007908 00000 n 0000004389 00000 n 0000004419 00000 n 0000007887 00000 n trailer << /Size 14 /Root 1 0 R /Info 2 0 R >> startxref 8980 %%EOF pyscript-0.6.1/doc/manual/figs/fig_path.pdf0000664000175000001440000000737310210760207020331 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœeTËŽ1 ¼ç+|„Ú8ï\WB+qcé?h´DKŒ8ðûë$¶»gÐh4S•T¹œîø üøÈï~¸›ûôšàÇ_×àŸ#øÂߟn­¾¾¸Z°S¯@9b*p¸’"¶)òB€ßŽj­X÷sA5xŒ d»®îŽy¬(´Š‘ ¾¹Ì…=¼v±»7;¡<âÆ ÿ+¥SrCORۉיrU%B„§êóRÈV.l`áˆb« „FPxßÃ¥-ò4Â]ÚRFS3æ…zÁúZ)Óû¨vöÕÛJ#%ž}Ù‰m‚/%Œ‘â`!ï»ÙË=!Þ1˜†¹C!$äc Ð3R¼ày=Æ}Q¢ö%ƒPãè}Zx(|ÅÚAÜÒR,ÃZÂÍ –ñ¾‹Ù™ÝM}fT[ÆLÆPåKÔ²׉m£G®úH´ÆùШò- ÛQâT˜ÃÂ×ÊhŠåp¦¼ïcôf#%&Ìù:?”ÑñPCÃàÛÏ!tÎJa ÌÀœóCñ9?”Ññ †µÄI¬ f »ݸÏ9Ùåg?àyãùÏ_äíMæ> 6_|„„±÷Xa;܇?þãöËåŠÔW©lßy…Æ QĹ`á90è}ÒOD }ã×§pð,Š0½8bæoy­…(ž’1ÀSîÈlÙMÍç ¾ºñyoþSHendstream endobj 7 0 obj 596 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 11 0 obj <> endobj 12 0 obj <> endobj 9 0 obj <> endobj 8 0 obj <>stream xœePoLu¾£”»!àÖZ(ío—mŒYÐqQ [²q”!­½^oíµ]ÿ€-Ë6ôÇdë`[…ìB÷¯ûƒ³Ö…Ì!L§1›¸ e$K4™Æè7޶&꿼yó<ïóŠÃ™øÒª^/c]$µ[¿GÄ×¾™‹k7õiyÛÞ Ì ž(‹î|­™mÐÔì›a1)=:»É¢—ŽŸŠ¨OŽ ž O‘b—Äø¨ê´˜q]qky2•B¯˜£êíöÃ^HžõwÔk–Ì„ò ¬moß¾—ôJí ¤”t·7H”OœÛ5Òñ!$QêO(=…–—Ý[WmpÖ43ÄÞ5Mæ6½/ ­+Q…'"ß¾ò¢DJ²%¥õT$¬Žç‹K×ht–™ÎT^EyèGÕ~w¤“T¿ð\¤Ê³ ©W^r4ûGLj>àóû éZ›Ì—=·ffCc1Ml,4 ¿†ã-1Û©æo5 ’Ê«7cœÿ4{nëÄÓuŸ…Uóa·g[ÿþ•cßFÏÜ€äWQC+°N§†çíÂfW¢‡ÖÐE‡÷ѱû2äðœJiŸÉ\UÍH”–A ?#-‹UŸ7Œ»&á8¼<97yí"!J'­E«¤Lu×nÕ|T’KŒÄÀƆ?‘™£H¶ ‰À~ü÷ú(n-mÑÊ[‰£ôôøzú ì,š¥:îÚãné:[»è÷HöÅÝ-}ðRü…H˜Ü‡oãèó™hG9ª¶ƒ&ª­óM˜%íIAÅHwïç‹wàwY¿=?ó¤¾ÖÓhR[8ÁâÓ÷­¼ôkäôMHÎF¾ðƆÂT.UÉß³‰Œæ!qÇÒ¥„Sï>>œ–v7–Ža‰?ž' endstream endobj 13 0 obj 947 endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 14 0000000000 65535 f 0000000919 00000 n 0000003427 00000 n 0000000860 00000 n 0000000967 00000 n 0000000700 00000 n 0000000015 00000 n 0000000681 00000 n 0000001353 00000 n 0000001098 00000 n 0000002405 00000 n 0000001036 00000 n 0000001066 00000 n 0000002385 00000 n trailer << /Size 14 /Root 1 0 R /Info 2 0 R >> startxref 3477 %%EOF pyscript-0.6.1/doc/manual/figs/fig_path_eg.pdf0000664000175000001440000000440610210760206020775 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœ]XKŽå6 Üû:"ê¯È.“#4 @z1È"×OQbÑ~Æ`Ð]õXEÒO¢äþR”ôŸýüú¾~^¿ü¨á¯¯þ»$ü†ÿ_çÓ¿^¥Ç•Ó¥ÄÚÃ÷ÕS‰³J(¢„.eÄ>ÜúA`|O)–nŸ~]"#ÅуH±@ÿ‡§¨ð)Y“ÔGN4‰i•ªÄ<‡8ÖšÚp%“›*J0YôåE]y© 8“3cºñ‚ ‹ ‹|wñuýyIEP«AðFt&­Ç9³3ÒKÌy„…‡ÑZs02ö`£©N–ƒ - (u+ÜøÎaŒWa^å«í-w‰2ñŒÛÂ÷9Ð[îLÖ:Ô 1Ëk‹mébpKhôÜ¡ÈQ0‡a(àuÇ}æ@|ç Ã*èÀ*_}hoe FW´8±¬¾¯‚‡'͉2G¬ 8-ü|@‰½ëw@FV1ÁÖ‹ÒK@ AoGÀ”#ý$N¦öú^ hSu"¦á ‰k/Æ óŒ]I¦®{Æf€›.Ç 7O¸8ƒ±‚ëk9ñÌ`ñcX¼E Ý=…z¢ÛŸ + ž¾zо°=ñU‡’G\ØÉ:¢$Ó™.Xø½ãáåzcÁj^ºSr+Ì!ïvK°„˜7sm`¼UnàØS8cEÐE¾ºÐÆFš1 B&FKÓ60t“_c†~N=Üx`XíqëL¯GA‡6‚9 C±ww¦¯zæàØs8Ã*èÀ*_}hoS°+ñ`jqá³ïkføãÁ™Øá˜À96ìKÇEg;LœÈýhÓ0…a(°YŽÂ"R†¢ÜÄž‚k k|u¡­¬gQÃ!5õœûs&c 0cA´§ÛÔ2ÉÔÕ·Àôu¥#°Ä`•e”ç©›â|d ÃÌ€%~¶°O²„É#ºwrœ¢ êêÎH¬)X/ð®Ãa[XFuKÎ$ƒ6+®+01ÊÄ|)i:³taúÑáÆÌAÆŠ Á]ãgçûÂÙq_•ØóøÂJÆ]ά¢§R [¶ŽüÀØÊud0vÂpÇÙ æ0¬_Ù8 FH: :ß9œ±*èÀ*_}ì]†õÛpmÓ)0¦.Æ —‚µMfb Y{.T½§'Ýýº¢o&™â8讯50…AÌü¢ñFŒ9^\~c&pÆJ —øjBëC5à*.²IÇGÇ7ŸSu¦/UÁ7¸±Ç–aÜðVÙSË,ò- ž*` ÃPàæz‰xæ@ì)H°°ÆWû4k˜b8ÿ®%èµ®‹u8ÓpI’®@l§1nŒ‹Î>tÀª<3@[À†¡€ô(,¢êë·±§ ÁhÀ_]ìÎôòˆ['¦[zš5ötÄ1k´U8þtEb~â] ;3q®·¢okûÀt¼–¾üí+…3rÇ`M½‹´ÀÄà®Ñp zî"[a=ƒ1^ƒx¯.ö™V1J±O$a”ªg6änä«ëa¢¦˜ k=06´ì+‚3ØÚª v¾ <ÃÁzb ÷vGà <‚£'ô$¬—[…¯Î%Dï¤à¶î;HGT#! {or‚·úÔ¶ìˆØÃmb<çnî†5^WÓ# Ö“Íô„·¿3VÀѳºêwCþÇóUW ˜©ïdð³êaÏ­<ðþó‰þ=…D[G@¼çnS¬ }âåѺ)ÌØS` 4`Ÿ]hg¿ãßÿlïendstream endobj 7 0 obj 1554 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000001858 00000 n 0000002004 00000 n 0000001799 00000 n 0000001906 00000 n 0000001659 00000 n 0000000015 00000 n 0000001639 00000 n 0000001975 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 2054 %%EOF pyscript-0.6.1/doc/manual/figs/fig_position_eg1.pdf0000664000175000001440000000212110210760207021757 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœ]QIn1 »ûzjÙ²–/ôÖö ƒn@sH{è÷«™X¤2"E1W¨HP÷g¾·K¹–‡g†÷Ÿ2à·<Æç³tÁÁÕ€Ž/0DÐ[¾¾_ËËšPR”ÞáR˜±‹µÅŒŠúÀ„Íôĵ# l% ñ‚i æ‡ W$ÞJ³]Á‹i-êË!ñZ±ˆ™! 2ãÿ+¶òvô qéÐ0ŒŒÃ8®£æŽq” Ø0ø*ÄÞ1:‰(L„KEVPëØ‰ƒøˆš’tE6 Ãæ¶WFᘘN|Øì‰£ã¦HñP@n¸¡í6>f‰i=Õ‰Oÿd2AdÂû²"ŠâtX…öŠö¤JÐ*Êh ´Þ#Dü³ƒÑûÑšWFë`m²Î–Û;ŽvXQ„$:VkФ|â鲕“!ä° ê˜Š¹aâPX´+r¼ŠtXxíH&S¤C†¼;bïé)ž?#‡¬°endstream endobj 7 0 obj 352 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000654 00000 n 0000000800 00000 n 0000000595 00000 n 0000000702 00000 n 0000000456 00000 n 0000000015 00000 n 0000000437 00000 n 0000000771 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 850 %%EOF pyscript-0.6.1/doc/manual/figs/fig_position_eg2.pdf0000664000175000001440000000212110210760207021760 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœ]Q[ŽÐ0 üÏ)|;~å üG¨v‰ýXøàú¸mœŠUUµ3õLÆÓwèHÐÏk=·öÞ>}øþ§)ümŸóþÙ†¡J ëÔ '×ã÷Kû¶'œm xk"8,x3ÚÑSŸ˜ÃÜŠÁÑŠ°©)`(‹y êˆÂGã8²æTøÜ…÷›XÊ 2~Üâh¯Wž›ª§afÔÜŽxNÌ¥ -4àW#™³“Œ"äILë(I?²¦2òé(aiä.({d ¢‰ IèÁ—Ëh3®·âÖÛÌyØö7Ìi{z}×,`ÎG\ø±/¦”Aü°@5DÙ ÃÅnt643™pGS¦,€ÇÈùcUpŽ«´Ùc@P–)¾J*¯•O+•@Ö"HÓÀ Ø‘\6\GÛ¡Ò„­îºæ—ý§`ð)Øl—`~NXÌŽpT¾ÿòŸ}Éëâþ«7endstream endobj 7 0 obj 352 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000654 00000 n 0000000800 00000 n 0000000595 00000 n 0000000702 00000 n 0000000456 00000 n 0000000015 00000 n 0000000437 00000 n 0000000771 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 850 %%EOF pyscript-0.6.1/doc/manual/figs/fig_rectangle.pdf0000664000175000001440000001147510210760207021337 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœÝWÉN1½û+|)8^Ûîk¤)·9r` ÊDb‘øý”Û~.·Hñ¬z]]ë«)ó(µ2RçO=÷Gñ(¾^yyxA¾ #Ð÷AägF^] 3©àæ$Öò(ŒwN%¿HÄ/‘Oh‹T5òÓbäé ¥YœâØå·¹%ÑX¹»%# 1ØYš¨RœéÑQœ]Ÿé/úúü|÷[|ßÉŸÂjŠSËËÅ]þ¦ •K8žnÉs±Gž£ Ê=“ŠŽbŒ^Sx¡!1O7‘€À64×ÑôdØnn'r!s ˜°œÉV.Ü~LП ÆQÙ9ŽTa+׋é\ Œ™ëÅuƆ‘ê\T ÅP‡tcÈ=¶–Ù'ˆàéÇ€2q:•Eò8Kz¾¯Ù ¦ÀÕÊ‹‡Ke“'m.•†´¹T¹T¬Q*ÁŠ ûUjÞËÛÝ:þžÛÉé½×s.¨˜ê%âùæW6rÀF `"mò’$d‰·Q…jžË„i‚iÈÅ|“༾݂[GŸ;¿±„N¿„H÷€UÛßv}¹5¶ ! íñ%HHZ(@Öâò@ H;¼ØnlÂGAßìmäqb©·:Ä¥ÇÉÅÚã×÷›Ìð ÝÁ¸q<°žŠV=¡yûtoó2ŒG3ß ®Ç~§o)›ÓîM¾P a* ÿ ß|ù}³×Úf÷ .¦ŒÔ]Ô,ðæâ‹ï¸×xï{ö©»´YàÍÛ_è·•Ï'zcù‡.ÅP.ñï4½2' ÒÎuP¹ Ep¿*òp@HSðæ¡žÖ¡ôӾɴNßå)%»º¾ï3.̬t N^L¤âí$w7ô‹ðpórŸSÙ]ë_6}Aß!Òú0É•óbýþöápÿÒH–?ÿ]´¹¯endstream endobj 7 0 obj 796 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 11 0 obj <> endobj 12 0 obj <> endobj 9 0 obj <> endobj 8 0 obj <>stream xœeT{PSg¿1„{í*¶Ð¬Dlrug«ŽÔ VGYݺ ࣰPž"ÈB¼ /H "$’ð:HBHä!/Ix„§¥ ¥*¸(]­uj}l«ìÎvvÕÙnw:û]{ûÇ^ÚÙÝ?öŸo¾9ß9¿3çwXXÀ:ŒÅb…$FEýæÝã»SåJ±ö­dµR¤Z3ï ÂXÔÖuÔlú0=ú]ÇwBÎX|{cÏV<'½x ÝÙ„^ÅØ,ÖäÊÑj¡X.•éÈiÉ'wíÞþ?KDdd$™gø‡ŒkåRù&ó)+Ô¥X¥;DF3Ñ …ü )U42-)ÊÏ篥¥‹âBò¨\!×hÔ¥äÎè]ä^¡0â-æÙ{ˆL(QŠ‹Õá¤\%‘«ä:)R哉J±TD*Eùâ5€¥\Wl ÷ åªÿf'È•y%Zò¶d‚:’Œ'“ÅÒ…¨øÿ=†©Îä‹¥Z™N®ß¹+\ˆa‰X ‹ÅŽc©Ø , {ËÀÖc¯`±×°MÌX±¬»ÍŠc ¯«coc»ÙÏ~p—ÌIáX8A¶ ªÚ©-×X+OPÌvµk·¹Û€ðµ3t#ɦ³µ„ÉÚñŒf£Æ 4Š_™éuû˜ëWœÐbâ+ËO­å·ã™-Un˜#ÿ[Îõ¨lEyÜ1þ#ÜÒ”i›R+xAÔ{æ{gØÔv$äfÅJµÉ@ã#üŸ×>ýã¸Ç$q ì%Nu—¡x½ú®Ç^>™¡—æ Nå¨Áa‚þé£=ˆ=s©cxœïí¿àºA0LÌ Ô V‘þ ½0sÑŽNnh¨‡: ¤Õm³j¯iÊ*—™ãÊy¸³ÑN &ZÍyZˆ‹G4mg€ ñ=4‡ÞN¿~Zw}²ûò¨ G¬°XªÌ&ƒ¾Ø¬â`êc´ qæ>ûü£¹Óé‚5RŸ ÕÂÇYT8:ÈÍ:’«ŠƒdÈT-&-þúe-Vl,QŽg÷œ„SpÚ –ŸÎÓÄ@$AóïíGø³û76ͧ¢pnÛÃщeX†~µgß7Zµˆn]DS-¾`¸«úÅ>ðz7‡ÐTÊz׃Ѧw”8C5.MK!hOT´0Þ+þC Ì`(·Ö¨*õ ‡RwÕûz"„Ž9©)lI˜óìþÃéþäpçLÂÍÓÓQ6škMo*n…èöy­ Ž\¨÷4Øa.µ{ý¾ö1˜‡Áš¾³#mù~ ×oylâ+¥4éH>Íy;iðw}Ïô¼ µ ¿roøÆf‡Ê•ü.™;ò‰•,;Qôñs~Å3÷VôPÝ•½ÁpEÞÝÒ‰î ÛÜðZ´•c ¬¯?gih¨žÌM¦"¤ÓYRÒ\v89#:eäÌÓ,ÁRÁ˜¾S ^N¡:C®ðô–ñK/žë«\$*Câi¡w¸š›ÜÐ çëû¬ €Õç­í {°²tw^ëOÐØŠºÃx¼¼KþÙÅ!ùÞ>þ⻺&Žf¥"ÐsîôìPçó¥±:‡cæÊ$ëêHsYð ²ðoEWùžH›˜ÍG‹xM^U\RÁÓTs*ðæF´ñ³:Wð}!±ÖsIÕL¾¢O²›ÝL~fyÃk‘)é¤Ò¹o""ÐÕ`³ò-ç¬ç,fqjnVE­Ébµ@ Ô5ÖÛê‰è«†roÌMö/øù•m¥ÅåæàIŒÞ[4õœdˆÜú†õˆŒ¦r¹ô/R9FfÿÝMžÆVàõ·Väh#ÑfÓÑ5›Ûñ-Õ.¸G „g R®F§S«{u¾Á¾ÞAŸ®O%z)¡Žµ³¨;LƒF|Ôâ²@9­Z“&‚.=€tå³àáAo›ã²ƒh§sŒøD­ÛÔæ(s”Ù B:+t':_ëªw‹=nçh3u܈÷Õ;ͽ(Œ~êV:ÏÚ™q9=î€,¡_Ѧó’f«xhií¸„øèï¡]Ó¶–n¦CsVÙèÊ˃ܨ,e‘$;fŸlÐë™Øõ矿Ÿ5P²Pèî=tK=¦¹¯½mú¾†o=_xoúnß[bF¿ŠÞYeOÒ±ÜÏ® LÌ~ú§±¯­ôºäÅÛßä])ê=9RUú8Þ+óýºÿxÛØ?«<¨IPÇ+¥ÑI €íKz÷¶f~OÌ˦~+Óêä…}eãvGc£ïhhÂi·Vª%iæpÔx<À‚çÈóœLï© *—È’RÄ4þCó,?½þrÊD·Ú%ø>è[º6‰@ $¢môf~]÷É sµÄ´8‡Ü¿?ç_(Éf{U¤ï¦Ò»QjwàÐ+O2äܰái׆öo%np: endstream endobj 13 0 obj 1807 endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 14 0000000000 65535 f 0000001119 00000 n 0000004517 00000 n 0000001060 00000 n 0000001167 00000 n 0000000900 00000 n 0000000015 00000 n 0000000881 00000 n 0000001582 00000 n 0000001298 00000 n 0000003495 00000 n 0000001236 00000 n 0000001266 00000 n 0000003474 00000 n trailer << /Size 14 /Root 1 0 R /Info 2 0 R >> startxref 4567 %%EOF pyscript-0.6.1/doc/manual/figs/fig_tex_eg.pdf0000664000175000001440000002227010210760207020641 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœíWKnÛ0Ýû\¦ O9$g†³è¦@n[øé/²’ åY÷b}”[Ž)'­‘"‹@ ÉÒÎ#çÍÇ×!‡Ø®é~~µº^½ÿZÂÏ›ÕuàáÓÃíü*|Üà#~:¹&-aóc5Úq`VrÖP,ãËÕêìòÝæ²áóŸÈÄñÃæÛêì÷ÑkËUD©xÊÖŒ‡ì> o'äžóL€9ðbú¨¤Ùdrú¡Ç‹#Öz õ}D¤4§UH‹‰†LÊ5¦x×矒m·xñ¹aœª2Žïn' IævF±JIæ¾·ôb«ÆèWïT„ØsMa=gúü`쓃‘÷ƒ{n ËðÖ F …¼rN£d°˜å%lï™G&$æüH@skÊæ5(S©êÇ8lD•*»nŸOÖ‡ IR¬wJ›YgÊ\-HmJÂnZ{rII8£¢#ÿ»Þî3$’·4ÊÞsìÉoÏâÛ*ë¾·4ä¥z)ù@O`6$X ‰¡Î¿ ï>Ñþú%REáiqÊ,ƒƒø|v¥PVœs,¦»ð®;p¼säaE,¬R-r’X<ÔBI%ã–GäºdŸ©ÆÂAQ=Õ—ì SŠ%yÓ,syÅš]à/•¬âŠ›Liÿ¯²]r‘Ð@Ž­%Æá.Ù3y–!|±h{Þ«Ïë±U7m:M Þ$¦o­ú­U/¶jˆe'µYùª^}hÚ%Ö¬—\@ΪgT–¿žyu´JC¤öúÊ_†™â±5?Œ ù•׿Þ0îoǨè®ñäú×u@V„l*±Kõ¯g/†‚!hü–H]v‘îÀÛÇÿðqärZç^pÐþá U âÈ”Ù5®ÔfSôJJjù‹L™=IÈÅÍÖúºçÌý’ih‡Ð…”|â ÙuàÄhyŒÜxH‰…A³g-ØšjoƒÑ6Ÿ6á˪]O“Ašendstream endobj 7 0 obj 742 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 26 0 obj <> endobj 27 0 obj <> endobj 12 0 obj <> endobj 11 0 obj <>stream xœàýWCZILY+CMMI10øøø¨ûaùùJ©ø“÷D÷?÷4FL[^Copyright (C) 1997 American Mathematical Society. All Rights ReservedCMMI10Computer Modernpsi€e €ŠÃŠFŠsEÿMUPÿÑ €¡÷p¡÷;¡‹Ó÷œ¬÷O÷{¨‹Õ½ Ñ©Æ‹™·e´Fûû+*ûC%Æ<í÷#ßõ—‘…’…†‰‰ƒ…<(û‹‹=‚ß«—ŒªšÈ‘¡²÷,òš¥‹º¦ni#û4‹bÿ‹càûa ÷A¡ø-¡÷|ŸÞÍÇ÷¾éøvù0Œ‘‹•„Œ†Š‰y‡û:ý)?”e°‹Í‹Ÿ‹¥Á÷ —’œ‹Ÿ¸k°Y,fû%‚•‹•Œ›¦ê³¨­‹“œ‹kqr~h[û‹q‹z‹,Ùbë…ƒg‹‰}Vˆ€w:‹ˆŠ‹‚—‹Ž‘¤Ž™˜¼—½˜½°‹ã‹éö´¹ ·–©”¤¡â‹·Ãp™zrrqu~‘…”ƒ–€¤q‹[‹KW9hg32K‹g‹u¡ù?¡û¦––˜ûa–ª Ó  7Ÿ ¤‘ \vî5 endstream endobj 28 0 obj 554 endobj 9 0 obj <> endobj 8 0 obj <>stream xœcd`ab`ddäsóôô Óvö Ž44‰Èÿfü!ÃôC–¹ûwß÷U?›X—|?#ôÝSð» ÿwFF7Ÿè,çü‚Ê¢ÌôŒ gMCKKsÇÜÔ¢ÌäÄ<ßÄ’ŒÔÜÄ 'G!8?93µ¤ROÁ1'G!¤£X!(µ8µ¨,5b«s~nAiIj‘‚o~JjQ^b^zRQbrvj Ø|¦¬L†XÆ.fFF&Z¾ÿŒ¢Ç~÷-ø<Ÿ±{3ów㟉¢3»ç•—wWÔÊý³b¯í®˜?¿{ÞL9 Ê–Ç 0•ß‹˜¿/ý^#:az÷„î œÐ6ý·ó‰¶éSk»9ššººÛ&ÔËwù“ôˆÛê»Ûº»$¦4M›Ñ?eZ¿_éŸö Ù~ L`ßÌõ€[Ž‹Å|>çæY<< æ1„ endstream endobj 29 0 obj 332 endobj 21 0 obj <> endobj 20 0 obj <>stream xœcd`ab`ddä u qrñ×vö Ž4 (þfü!ÃôC–¹»ûç’ïËY{xç~Ïún%øÝœÿ»3#£›w”s~AeQfzF‰‚†³¦‚¡¥¥¹‚cnjQfrbž‚obIFjnb “£œŸœ™ZR©§à˜“£ÒQ¬”ZœZT–š¶Õ9?· ´$µHÁ7?%µ(¡‘q!Ã2 bbddÒâûÏ\s;á{ÙÆîŸÌ?ë¿—‰ÎXܽxIIw­üŸwlµ%ÝEÅ‹»gÈó•,úi¿„í·ðTö=\/¸÷Lçáa`–P® endstream endobj 30 0 obj 236 endobj 18 0 obj <> endobj 17 0 obj <>stream xœcd`ab`ddäutqqÔvö 24 Èýfü!ÃôC–ùp÷ÏÔ̬뾷}7ünÀÿ]W€™‘ÑÍ;Ê9¿ ²(3=£DAÃYSÁÐÒÒ\Á17µ(391OÁ7±$#57±ÈÉQÎOÎL-©ÔSpÌÉQé(VJ-N-*KM[霟[PZ’Z¤à›Ÿ’Z”ÇÀÀÀhËÀ ÇÀÄÈÈîóŸÑ74€ï?3çqï’›¿ëmfìþ©ËüÓùûmÑYóºçϯ讕ÿóš­¶¢»¼|^÷,ù¯~‡‰Î„ÈÔÈÿyÉV‘™)ÏWºð§ýÂßËæ|Ï›Æö;i:û*® Ür\,æóy8Náá¹0Ÿ‡—2¢dÑ endstream endobj 31 0 obj 275 endobj 15 0 obj <> endobj 14 0 obj <>stream xœ•’lÇïZVMš¬ïê&#’%üa&‘EX#qƒÆÉÆB „­l5[[n]»ÝÚ믵åúî®Wèµ×ë í`ÁŽ(™q¢QP"‰aQ1Ñ? ÆÿÐø¹v·8oð¯ÿðÇûã½¼÷}ŸïËC‘mEÑ]G{Moö{Åd6wwlˆú h}¦þ¢ö¦Â¯÷7‚MW×Ïˇž“_}VnßhQôÈÑwMvÇ isÛL{ûè0ž°Öá!›Ñ<ä³L 9ÕdÜØg¶Zœ3íÆÃããÆã[“Æã–I 鲌<Þi²O8¦œÒh¶XH‚ McNë[Òœ@z½ÈnD§¢"Û‘oÐ#èšGÚý›¨ùDo˦& TëDU>»ŠÊ_¯q?hå{}z–ã%`1!šô¹_ 1$Šycà¼H¯Â\hŽ 3A\yiãnd` ž4UN„R çÉšPZø­•ÏŠ7¶ØâÒÒ§·îüØmþôäÛƒŠvvˆðÛ£A °•÷>û{EƳ ¼±°?Š;_?sv0W4SZ¤ù‰ôµÁmÈÁÍs‹”dËœ‚.>7ˆµl¢5Ö¯òïªÉ]Eôs>V'ôÿè ”34PÄ>Ý²ÜÆ œqü7ã&=Ôù9|Ž”VÏ(]ØËºi¦¼i˜'þÔMtwº†Éà(ÐXï­Ñ;²ö®l”¶¸|1† áöc'ûúU.¯Tã%N$ÔõÉöïžœOÿúíýkkZùA£IŸó•íÛy%¹*‹•jW7}”ŽøTǧ>´|ùÿŽÝ©¼p±,b%UI]I¾_û=žæE> "öÉðþ¶ÓʊΟa…_ùu¥¶ X.r8ÃÒ¬i«Ôä/jr¥†6~©ÿ¥O.s—¾¬œ†rü‚HÛº¢`#(Šu³“Ü4`aÏãÙ0óD‰á@ ÂQO¯âoUê¾’=ÉëÜ¥`ÈKO§Â@$êQ ÕÖ• uFÑà \Œ$×â°HäáÈÇŠ±ËL0!¥lœ³Qàfˆ)8…D<{OζÊu=Jú‰ŠáiU¼È&ÔoÑt¿³¬ð¥õ¾"ÊÖiëLc@ŸÔ–8–£“~*â£#øÆŽ;´Š5ÌJÁT^HKÞâ.6Þ(*—E1­SÅíK;~ß¹­£Ø¼c)ÞÜŒ ÿ¡Ãæ endstream endobj 32 0 obj 917 endobj 24 0 obj <> endobj 23 0 obj <>stream xœcd`ab`ddäñöðòðÕvö 2ñå~H3þaú!˼¿üÇŒŸ:¬ë¾Ÿún!øÝ˜ÿ»¶3#£›W¤s~AeQfzF‰‚†³¦‚¡¥¥¹‚cnjQfrbž‚obIFjnb “£œŸœ™ZR©§à˜“£ÒQ¬”ZœZT–š²Ñ9?· ´$µHÁ7?%µ(¡É@Œq'Cƒ ÚÆ^ÚûŸ±áõ¾ÿL–…Ê—ÿäXÎØýìûºgÌ?f|¿,Úý©îVìÅœ¾›­»9~×tÿ^êìÜý{þ÷šï5Ýßç_–ÿ]óû´hl·ß²ò»µÇºïv_í¾Ò}}Ö¡·N/ØÒ}°{ÖÜÀÙ¡=ÎÝ&ÝŽÝŽu>åî¥ÉÝÛ~ØÈØýC‰ùGù¢ÿ(¥²ó•Ïÿi?ÿ÷’Yßó¦²ýNœÆ¾žë·‹ù|Îå“yxnÍæáe`¿êY endstream endobj 33 0 obj 354 endobj 25 0 obj <> endobj 22 0 obj <> endobj 19 0 obj <> endobj 16 0 obj <> endobj 13 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 34 0000000000 65535 f 0000001056 00000 n 0000008592 00000 n 0000000997 00000 n 0000001104 00000 n 0000000846 00000 n 0000000015 00000 n 0000000827 00000 n 0000002377 00000 n 0000002167 00000 n 0000008449 00000 n 0000001507 00000 n 0000001290 00000 n 0000007658 00000 n 0000004211 00000 n 0000003986 00000 n 0000007300 00000 n 0000003605 00000 n 0000003394 00000 n 0000007163 00000 n 0000003052 00000 n 0000002814 00000 n 0000006702 00000 n 0000005453 00000 n 0000005234 00000 n 0000005913 00000 n 0000001173 00000 n 0000001203 00000 n 0000002147 00000 n 0000002794 00000 n 0000003374 00000 n 0000003966 00000 n 0000005214 00000 n 0000005893 00000 n trailer << /Size 34 /Root 1 0 R /Info 2 0 R >> startxref 8642 %%EOF pyscript-0.6.1/doc/manual/figs/fig_text_kerning.pdf0000664000175000001440000000677010210760210022070 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœ=ŒÍ 1 „ïyŠÜܽĤ-¥× {óàO x^Qz(¾?˜­Uæ0ä›Ì4däMÃ× ö—€Ï74”ýl­xP ítŒú€oEPH"³y$—P+LײœsÉ·Y_ ž ÿxÞAò䬫w˜J‰Ò¹G> ÐGÅ3lúXÝ%ôendstream endobj 7 0 obj 129 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 11 0 obj <> endobj 12 0 obj <> endobj 9 0 obj <> endobj 8 0 obj <>stream xœeSkLSg>‡¶ç7dÓ¦¡DÅ£†"n0œËÜ’1ÖbªÎYä½ÑÖÒÖ[®Âår  VçeAts f‰îÏ6·hft—d1qÙØŸ÷”¯?v Ùöc¾¼y/ßó>Ož—$¤QI’òÜ÷ŠUoæ'kõœ%¥Ð¨×VÒ/ Hac”°I‚÷àË˃˩²MDþ°díèFéÌzx¸_€ù INÝ}”c49ÌÚŠJ+›t ðàöääÿeÒ²²²ØRÇ?6—³h+ l¢Ø8Ѥç Öl6GìÖé´ÇÙ ÃTia5ee\ÙÊX‰FÇU±ûµ:­Éd´±I9ÛÙôÔÔ´ñIÏf Nè9³q'«5”k Z«ƒÕÊØwõ\…†Õkʸ•rõZ«ÙÁf¤j ÿNhõ¥',ì*[¶À˜Åæ³…\Å Æüÿ AÌjU^QñA– ¶¯iD"‘Aì&2 ’X#ŠHH Žx@ªÈÇQµQw%%5øbÂåˆõ´°e„ —ðŠ£>¯¿ò>nî)k(\9õ6N> endobj 2 0 obj <>endobj xref 0 14 0000000000 65535 f 0000000451 00000 n 0000003168 00000 n 0000000392 00000 n 0000000499 00000 n 0000000233 00000 n 0000000015 00000 n 0000000214 00000 n 0000000882 00000 n 0000000630 00000 n 0000002146 00000 n 0000000568 00000 n 0000000598 00000 n 0000002125 00000 n trailer << /Size 14 /Root 1 0 R /Info 2 0 R >> startxref 3218 %%EOF pyscript-0.6.1/doc/manual/figs/logo.pdf0000664000175000001440000001063510210760210017475 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœíXÍŠG ¾×SÔ19D)©þ¯`È)ñÌ xqð‚×1˜¼}>UW©»g„ÓvæSë_*µjÞ| öAÿæçíÕ½¹ß'ÿò‡{ó<­Û«ÿ銇€)øë·‰°Ï‘RmÙwê‰9ùë«ûîrûòñó×ﯿ»Ÿ¯þ7¨ƒ›šà_‰ì¿¼@ú£ãFR¡¿Páâ_—àE‚ÿäR‚ÒâcaªÑŸQ•B]ãÍqà@±ù:U”L©{îL%'å–©%/E(3žÜã$L€©Q„A¤˜)×éG(nÍ<~ÀSÇD½ÈÁ½ ÕRÿaF³‹Ì`¥B'ÜAMÑAý)ŸÜ—ý7¤ö—ÿSû_§ö2úýûwð•;Åì%àÜä¦Ù1RFâ8QDö˜*ACej,ƒ In ´LçE™‚çZ'†6–@µõC­Ö§D{,8GšìF¹$dœ©êïaEÊ;øK§ò¸z‘Ä;˜Õk9òg¸ˆš-…w°äB!ý9ôÍñkG(JOÍrs­4´‹/‰B¯âï`­’=¬Å\ê¡ÆÖ¸1I:Jpb6ø¡qµ/#çÜ"ê9 €/(ã$0DJLÃôbÙq­”«U£$m “ŸµÊçw0#}m0ϧykš%lд/ʲ¿,÷Ìõ›Ó±¬ªmú$!]œž}œÔ„jë4“^ ·.‚tÌŠŽÏب 0&ŒöÝNJ ˜¼à¥5¦‰U" aòÎÑ*e•X /FX>LËÅSZ¨gŒêb3¶ aÞ!ª” t±QR¼تÓ$ð6†uZ- †ê˜Ð]Aâ>·7¨˜ C`2D ž!06FYNL æä) -דvqE,=í}˜ÑGM¬È¹ãmW¢õÀŽg“ì„­‹L~v™°>Ìh£¬‹£5Ä—w †— #,¦‚åâ)-×3FuY/Zë«AÈ6Ö+,å¶uÃ6xwʘÌ&?÷Òo“½J[ÉÎ_²MöšEY.,ÓÃSZ¨§ é‚5‹aÒ¥5cñÑYÑðú”Z‚u¶uéƒï!îX7Ë*cUZ”‚ G%¦†ñ!1mL ‰\) ‰ÉwlSƒa³±(Ë‹¥Á¼<Ç¡åzÞØ.¶n¢’ØEÇÎ`¥_`Ý}=ÖÎB7¼ÝŠÆÂºa,Ì“Èc#/!´ý5±J„Šî:p„D•&6 Þ=Øäžb+áSÆ¥‹;ÏY’†ÃŠAšˆqB€I7Êx¸~þ îÛÝj”ÿ_hÑ›Q;Üj·+Ý?þíYLzClRpMÑßN~ýÓ~7Ñ¿¿)dˆendstream endobj 7 0 obj 998 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 11 0 obj <> endobj 12 0 obj <> endobj 9 0 obj <> endobj 8 0 obj <>stream xœeRkLSw¿—B¹ T|tkƒr¯Ë|™)#™8—Åá "Џ¢ Š­´pKoŸÒ–RhéJù+¨€H[hm XpÈQöÁl>—ma[f²eš}rfYv®»~XͲøa_NNÎïœóû_Ž%'a8Ž‹*KËN(Èy_©’ë¶¿§¦e…z)­<ýÛÊfáìú$v;Å-¯O¾÷wEÊìðHZÆÈúäk º.®O&ÆÃñ¦Ápš1i•u =µURZ¾-'çõ•ùùùT­é?„Ú'×)ë©Í‰Ä(§ÕŒJÞ¨›*HtÓ rªŽ61 %•Éä²çceRZÞ@PÒJ†Q©­Û¨Ü;vnO„Ü#JU­AG•ªUÒFêˆ:Ÿ:LËeJƒŠú÷’ÿㆦÓL‰V¯<Ža•Ø>ì¶;ŽI°",[‘ðKÆ:±ÇxkRjRMRŒ—É›†.[ÂI!•uq–i¼!ö áêéô¸.¶ùj‡÷E¸¼‹¯!éí:“Ö¨fŒfÔŽš<Ù«í7!B£Ó4Ö™ØÒøÝ%^‚7! ÚÐ"ÚªW1 ­óØ&LÙ#Ö^jA*“ô'¶}'2ÀJ $›OÚêœEN"¡¢å6+ˆàÖÁ6HçÁ×°Qxò­¯ADjúæ‡ÓwÈÀbh"„ï@{›ËítÚI»ÅÕŠl„ÊoˆL¦ænTÍr¹W¹]\^î—Å?ºæ›ŠfÆ}£±Oœ4ù1œ-†Õ¼ËlŽpÁÝïBMÈn?ÝR¹å™Hd9bk©E„“óA~å9Kš@Þ¾ÈÈW}“¢®Á˜É뺄į@!ìýVºXXZݰ«„œ…ÔM™³Ü)o0àÖ»\E [êŠhI½º³oÌ× >"'~˜ôMø¯FüwB ?\Â융Ãf¤< ‡Ü^wOg¸ã‚‘Õ¥s¸UÏ$"K™­µÜAhaÑŸz¼ËÒ‚h 7Òí» 'EÓ®ÑÎ"`÷_ËþdïMŽ$¹8˜w…ž „º{ú/\èEÄpý1…½ÊJ“š’3úýÈŠZÏ™Ï%dˆÑ%X¾ðD«äÖäLdð‡¯]ë¾òdxvêãÀ¸u£—Ç>ltøõ‡çãú€²¢¶‚ËÝCÞùÑæ¦.£M,€°ý><žÇ!ÊJ„ü«°)EÁ—ì>Q»GE(>K=ÈÙ­m ³X6©™¿üq7Û0¤,Ó0$v8ú<##ßLƒ€ŒÀÊ”üÄ66'dá@'¾ÃzV#ӛힾÞÞh——|¿HlûÛÞqŠ™Ôk>‡ÑÑÑì2“Ǹ‡úC5jŸ™ÔÌÝš ÿy?»š]*hZ!›RÍ̆C33 á3¤€½aŠ>Ätck~‡ È„Œ—×.Ÿ7 C|ï”§w  ÁŽËŽOÌÑöxÂlê× óçª{œà7²x±y-·ãs·¼Zɭ̺RÖ.Ä¡*EÅ·›¬#²#s·ÖC¬]ªazÔY?ï-.‰é1ô™Éqé\õçÕßBUÈЮ³ô2ES%*GU~í|SØrÝj> endobj 2 0 obj <>endobj xref 0 14 0000000000 65535 f 0000001320 00000 n 0000004101 00000 n 0000001261 00000 n 0000001368 00000 n 0000001102 00000 n 0000000015 00000 n 0000001083 00000 n 0000001754 00000 n 0000001499 00000 n 0000003074 00000 n 0000001437 00000 n 0000001467 00000 n 0000003053 00000 n trailer << /Size 14 /Root 1 0 R /Info 2 0 R >> startxref 4151 %%EOF pyscript-0.6.1/doc/manual/figs/tutorial.pdf0000664000175000001440000002610710210760210020401 0ustar cochraneusers%PDF-1.3 %Çì¢ 5 0 obj <> stream xœÍVKn1Ýû^†E —íòg؅̱’h¢ (aÁyà,¸Ï¿îžÌ A€%ª~UõêãrßiC¬MùéÏõVÝ)CIX_+ë4'ÍŒfv¢ï/õ•zþ&êëOJôgÅú5~7À‘‰™&—LÆGÉÃJ](wwšk¨ñXoõÙ þ fÊÁ¯WWªñ`-”XrØSpxµU'¿o>\>[ݨ—+}®¬1‘ô¶JË«t«<Ã#è;Ããµ÷Ž|€‚‘ ³âbRE[³Ï®˜Ý¦(ÈÂ-6äRñ\¢´P\(g‰C&6ׂl'PWÐĘ…2ª·UÞFŠ2)¼ódr@J™DâB®)®ÕP§Õ ÙÛ¾2 Ø6ƒ0R †}gÿCîñ»õÄïAku5×+YJv‘ÔP Î)ò1Ír+ðœT ¦t{ñÀÏI yNjB4Ö“ý‡ÿ.øÃzð{@IÊš2úœ¤ »àÁ¹´4!™·“¢ $¦Ëû:³EWL€"±à܈%æ…Ï¡¹Ý³JG¿ú(Õ ™J©('‰¼-Gjh3eiçà8õõ/ëûë=Ìl® šcr'±ž Fä=ù³ÒغҞ"ô#ëÑZè6 -èyߎg‹ÍXRiK&[!çíb븈DZÒïb`“Áöš4Gå>ëÉbÞ“wyM•‚ÈTø(¢ð\ú¿WùQÊöDA:lÙ,849µ;J0våŽNY3F‚s{>~e†CÔ¢!ƒ7!OÄ^b€ç8.û˜uÂ¥íôê½:ùÒP˜E ftI •Š^ŸzbŸ+jócÊÛ—"ø:C—*_SC+1¶²t>ãÌdÁl_lÝÂØâ‚ )$¶0)D¾uŠJ9±³‚‚F)SAT ÌÊ]°Þ½±P ÎeKìëñîá«»ÍÆM¾w¯(ËNB³¤lËØ»çÿª{Œá¬ƒeqß¶ö½ý³˜be&KfP’µ33ù7Ìpû¹]fïzqwŽÈ)ãZõˆF±ö¦ƒvœÂ‡düÛzyÖ{¹3ø ß›§Œ±p½KÆ ‰x¸£ñmµ@n ðû1–µþ2 d¼%ù]2ç‡"DJƒn›ÙwòóA]vendstream endobj 6 0 obj 867 endobj 4 0 obj <> /Contents 5 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 7 0 obj <> endobj 29 0 obj <> endobj 30 0 obj <> endobj 15 0 obj <> endobj 14 0 obj <>stream xœe’mL[UÇïmáîZ¨±KÑÙÛÍ6|cn `aL­ ÍÀµ\¡¬”µà(}öÞûܶJÛFÙ¦€,YüàãpšÅÍ1ç>8hœÓEÉNë™â%˜øÁÏyÎ9Ïÿÿû?$‘ !H’L©.)ß[QþL±Z½o[æê {ŒŒmÄ—NàÊøOñŠÄ©?¿~=„²SQ惄”$K^©)Ö·´ëŒªÍÅ[TÛrr²U…MZC㑺f•ºÎØ mª3Š…NuP¤Qkl^U¨Ó©¬¾hUжj '´šµ¡Åú¦–6£Ö Rë5ZC3A‰UEÕ{Ê"‡x‚ØMBž—äJ.H+¤ºbÊŠ4ÏüDãd”ŒµÇ¶Ê³Q ÛÏyAHßPxÞ; 0D»€}³–…:¥ÔÐ=]`²@hÁgkó3H†§q=6õ8y¾Ç™V]ùúÛU¬…·˜il¡©Óˆ*߇Yö= }A° ctn˜„Áwƒ¡»ˆPLžý`tüwìPx­8Ì—•·óÐAwÀ;yÅ“Ê|ÊF€î B8hS*pžŽ9Í­R”i\øâÊ2Jšž<5>3¾à ~€0-À€¥é-tÊ£ õÔ‹â-`êîeûxÆÏG9ÐC§Õâ°Ó)+’{V¢èÒšy|vKŠ^¸!·i8GÐ6ѱ†§P’!Ù«eŸd˜?ÂË×à6}mßç8Y‰ ÌkÃî0pCÌ0ççÁ.že»è!ì–_D‚ÿ¬ÛsÒœZÝxûŽgq ƒâ%y§hºG° ¬ýàwïðe4­@eÔ/áÂÚÍYXƈ"£ãµp&öw”ŒkâérÁëîíw‚Iy?—j1s9.UpN¾¸UþA¿»ÏãVÎ ÙG—P&Ð(›ºÿñ_‰À»:M³÷Á°2¶—Að…¿DÇ‚×Ó^º×å³Ûy׉nåa¼¡¦¿4. Ä•Ù}{tme⻾—¢íÿ!²‚¹KtΠo)¤A‡P=Ò£;QÎ`VÁ¬µGBÃ<d9 ÖÁ|ÃË× Ð÷¨;7+±¢Ú„wíĦùh^N'Rÿ‡#&&]ïnÁ•¿~A©c±SRXZ‹­_’Æ^òÉÑÖ (•ª ÑŽˆÀ[°·`îĹ(áiôdäŒ70«t©Å-ô1È¿‰’>D/úº=.çìá”­{Ê ðœœ°]§qY¿> endobj 11 0 obj <>stream xœcd`ab`ddäóôqöp Òvö Ž44‰Èÿfü!ÃôC–¹ûwßOÝŸM¬K~Lúî#øÝ•ÿ»ƒ #£›Ot–s~AeQfzF‰‚†³¦‚¡¥¥¹‚cnjQfrbž‚obIFjnb “£œŸœ™ZR©§à˜“£ÒQ¬”ZœZT–š±Õ9?· ´$µHÁ7?%µ(/1/=©(19;µl>³SV&ƒ2C,cØÙ L GÞ1Úóýgšpî@é¡ÿ1þ˜ü€ùûšŸ¶¢Ý½½S»{9&uö5Õý–,hÔÝ?cꄹkåê5‹‹Tš¦üö¨Œˆ7nªêîìîähJÏÛ²hÞ4¹îž]××—_ñyíw–³/·Û¼éR7ÇÑ©‘Æ:Ù éòÙ ±åÝem½“û—ôwÏ“ûtÛWï7«A„¢mÚ¶õòíºz[º9Š#s*Û7y}gø®ø=ùÝw³î‡ çÈß_ÿõR÷ ŽcQ["ó—ÿ–ýÍ(×ÅÆ÷ŸQô¸À﾿‚ç3vofþnü3Qtf÷¼òòîŠZ¹VìµÝóçwÏ›)TÙò¸¦ò{ó÷¥ßkD'LïžÐ݄ڦÿvþ‘ Ñ6½cjm7GCSSCWwÛ„zùï.’~q[}w[w—dÔ¦i3ú§Lë—ã+]øÓ~!Ûo 웹pËq±˜ÏçáÜ<‹‡‡´'çh endstream endobj 32 0 obj 541 endobj 9 0 obj <> endobj 8 0 obj <>stream xœ…QmHSa¾ws»·Ú–º.BÛ „4©ô—AØ0¬\™²Êùy›Ú¾Û³â:³9ÏÖšHîÒœl¦–ejE%ý(,âÈ"ŒþùÃ"*yïx#ÛŒúWÁËá=‡ç<Ï9Ï!‰$ A’¤rÁ.cáŽ,¾8';QЈ+Hq¥D\% 󱑘AÖûžŠt)hãR´.™’ä¶FÍ^ï¬5Õ¸Ø ]&›³iS.›g᜵UVV_áªá,®xbfKlUµœ«~=›g6³Å‰Ž#l1w„såª$u6‹Ýí✬ÞVÍ9­Áˬ6®v)9H*b7QDl#vÄ¿òø´E´ˆ4’C’È<©7©æ%Yg²!*ʆÜBê›ñÂIÄM¦©¯" šep:ÈCÆLõûïÂÐ ÷}}­t”*àaD‹ ©¯/>ï0kð‰¿ ÷Z#4*¡àDÍ':ëºöÀV8PnÓÓê—ß(¼š—™©çm§ŒZ•ØÂ‡Äl„i™–ЇQƒ–­™ÃJœ²“83_³Ð"¤üü©5Ø0åP´:‡á1 À Œ]ÞÞ€a¸åî.ï.‡=À î2÷Á2k)Ъyò®ãB– Úº ä™ŠËQ#œà'Ãl\…ÞË¿­ER éå MÓ_s“O[“žP U×5˘€ÚdΣÌ÷¡> ¿\À+ªµq æQò‚¥H9—:4—?‘¦žAùâ.³‰eŸ¶7µXøíX¯,pú¡ÿ—cÛ½çµêÏgÅëL¯3h3»í»àˆö„‚½Õ¼4ÏP” Ž"o/¤¾@¦ÄKSŠeˆé žúÍzÕÿ ‚Üõ]ûs1ñej–©§½Ðê÷_ªòãæ²½YÒQ t&–ïeµX¾ÙüößLh ™þ‡ ¶G\‡dòÙwCÏ:ûZº5>‡êàøùcBS '§QËÁf^¾jƒ§Gãñ64‚êÛŽw6Ó*·Û"àp'²vÈqåE*ºxr‰fqRn—b‘ЮPLv)”ñíµœ± endstream endobj 33 0 obj 797 endobj 27 0 obj <> endobj 26 0 obj <>stream xœB½þ DGXBGM+CMR5øøøæ‹øáù.®÷±÷1÷.÷+FJYCopyright (C) 1997 American Mathematical Society. All Rights ReservedCMR5Computer Modern2{ÿØ8àÿ¨°‹ë÷á÷ Ö·‹÷ ÷¦öøá÷UaˆxM{ƒ…7‹|‹ûXͼÕÃdzåÉßÅ‹õ÷û Òû#û(=)W·‚™¦«´¯qŸlާ¸Å©Î‹ìÜQ)7QK>Jûˆûc‚ЋЄmøeu¡ù?¡û¦œ÷n–ûb—· ä  7Ÿ ¬– äœ «Ò‹ endstream endobj 34 0 obj 333 endobj 24 0 obj <> endobj 23 0 obj <>stream xœcd`ab`ddäñ w v×vö 2ñå~H3þaú!˼¿üÇŒŸ:¬ë~È }7ü®Ïÿ][€™‘ÑÍ+Ò9¿ ²(3=£DAÃYSÁÐÒÒ\Á17µ(391OÁ7±$#57±ÈÉQÎOÎL-©ÔSpÌÉQé(VJ-N-*KMÙ蜟[PZ’Z¤à›Ÿ’Z”ÇÀÀÀd`ÄÀ È ²‰½ôÉƆ×øþ3Y(_þ“c9c÷³ïëž1ÿ˜ñý²h÷w¦º[±svún¶îæø]Óý{©³s÷ïùßk¾×tŸYþwÍïÓ¢±Ý~ËÊïÖë¾Û}µûJ÷õY‡Ü:½`K÷ÁîýYsg‡ö8w›t;v;Öù”¸—&ws@lë~ðýÍ×뻿~o~Ãü£÷»—h&[Gic@]cs«]w-ÐB¶//Ö-?¾ëê± '»_q|çU¼ú[ä·€¹‰~Ͷ©‹WÌY?·e]¸ÜªKçîêæx¿ßÖÊÄ×-;]þwëï¦Æ¦îÎî|Él|åóÚÏÿ½dÖ÷¼©l¿§±¯çºÅ-ÇÅb>Ÿ‡sùdž[³yx|Ó»õ endstream endobj 35 0 obj 440 endobj 21 0 obj <> endobj 20 0 obj <>stream xœ~ý NPRHQH+CMMI7øøøºù8ùT©øò÷L÷E÷9FKZ_dCopyright (C) 1997 American Mathematical Society. All Rights ReservedCMMI7Computer Modernthetaalpha€i ®‹µŠJŠ‹˜šÿMUPÿ”.Чø§÷èÌÒªÓ÷Øù›¡opnqnz˜v¦¨¦§¦û`ü‡~†‹z\³eÂï·÷š˜~‹ˆ}Š…€‡t;_bd‹w†˜¡¢’ž”¡•¦–¦–¥”£¯æ—ޕޗ‹•ºc±T(]ûz~™‹Ž™Œ–Ž¥á·¯°‹›”ƒpt…|rMÿ $§÷˯÷˧‹Ö÷¾Öø“ø{ôc÷)û*û4û ûyû ¹)ç÷,÷2÷¥÷tûãû¾÷láêÆ‹Ë‹ûxdƒQv7‚goûtUmZlWc\_‹T‚×ÁÍžÙ•°ÿæ­°§ø§‹Þ÷ÕÖø·÷!çê°÷‹–˜‹†}‹ˆu„yIjNaUŠš‰Î‰”|î@Ë'‹û'û!ûû /Î9÷çÞµ¶Ã¢B¾©‹ů¼ —‹†~‰‡…‰}el…‹}‹z‹†÷=i);6‚e‹If·Î¨™÷¿Ð¹ÇÄœ®‹Û‹¢>“M‘`‰DVwŸù?Ÿû¤••—û`•« Ü  7Ÿ « ƒÎy endstream endobj 36 0 obj 649 endobj 18 0 obj <> endobj 17 0 obj <>stream xœcd`ab`ddä‹ôq÷s×vöu04‰Èÿfü!ÃôC–y»ÌïÊq›Y—ýÐú"øÝŸÿ»·+#£›Otz‰s~AeQfzF‰‚†³¦‚¡¥¥¹‚cnjQfrbž‚obIFjnb “£œŸœ™ZR©§à˜“£ÒQ¬”ZœZT–š±Ö9?· ´$µHÁ7?%µ(¯ ±(5/'5­$)3Ì[ä0000-\ÄÀØÅØÍÀÌÈÈžså?£oh߯S¡@Ç.ai›ÏØ}ù‡¡ÌïfÑîþÎÞξØ=îw¿›—Ÿ hË|ö]\»¸å¸X*óy87Oâáb^iŲ endstream endobj 37 0 obj 425 endobj 28 0 obj <> endobj 25 0 obj <> endobj 22 0 obj <> endobj 19 0 obj <> endobj 16 0 obj <> endobj 13 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 38 0000000000 65535 f 0000001190 00000 n 0000010446 00000 n 0000001131 00000 n 0000000971 00000 n 0000000015 00000 n 0000000952 00000 n 0000001238 00000 n 0000003902 00000 n 0000003683 00000 n 0000009657 00000 n 0000003036 00000 n 0000002822 00000 n 0000009434 00000 n 0000001657 00000 n 0000001435 00000 n 0000009200 00000 n 0000007427 00000 n 0000007190 00000 n 0000009056 00000 n 0000006435 00000 n 0000006212 00000 n 0000008238 00000 n 0000005666 00000 n 0000005450 00000 n 0000008094 00000 n 0000005011 00000 n 0000004804 00000 n 0000007958 00000 n 0000001307 00000 n 0000001337 00000 n 0000002801 00000 n 0000003663 00000 n 0000004784 00000 n 0000005430 00000 n 0000006192 00000 n 0000007170 00000 n 0000007938 00000 n trailer << /Size 38 /Root 1 0 R /Info 2 0 R >> startxref 10496 %%EOF pyscript-0.6.1/doc/manual/optics/0000755000175000001440000000000010441274722016422 5ustar cochraneuserspyscript-0.6.1/doc/manual/optics/BSBox.pdf0000644000175000001440000000146410402637366020103 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœ+T0Ð3T0A(œËUÈ¥d¢^Ìe¨Ä™\F @” ¢ ŒõLÌr¸  t>PIT=¦š4.S…r ‰^T31˜+ù& endstream endobj 7 0 obj 78 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000369 00000 n 0000000515 00000 n 0000000310 00000 n 0000000417 00000 n 0000000181 00000 n 0000000015 00000 n 0000000163 00000 n 0000000486 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 565 %%EOF pyscript-0.6.1/doc/manual/optics/BSLine.pdf0000644000175000001440000000152310402637366020236 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœ­ÌÁ ÃP л§ÐŽm¾zk2B i¡9„²~UèEÃC耩þùýe—C†©a;űñ^â¥V Ý53»%äq ¼%²´[!‚bI!øÍÙqm½«$.îÝÿ´÷”YÌîæ&xendstream endobj 7 0 obj 108 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000400 00000 n 0000000546 00000 n 0000000341 00000 n 0000000448 00000 n 0000000212 00000 n 0000000015 00000 n 0000000193 00000 n 0000000517 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 596 %%EOF pyscript-0.6.1/doc/manual/optics/Detector.pdf0000644000175000001440000000152110402637367020672 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœEŒAƒ0 ïûŠ}k'i’~[á 9´Hä€8ð}R¨v­ñZZ¯T1êO¥bÅc ülxr‡qh3Ã)›ëÉ%ÅÌÙItj÷żŸíE5üsgÁµ%mŸxÐî‚/&¼›`mendstream endobj 7 0 obj 106 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000398 00000 n 0000000544 00000 n 0000000339 00000 n 0000000446 00000 n 0000000210 00000 n 0000000015 00000 n 0000000191 00000 n 0000000515 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 594 %%EOF pyscript-0.6.1/doc/manual/optics/FreeSpace.pdf0000644000175000001440000000146610402637367020766 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœ+T0Ð3T0A(œËUÈ¥d¢^Ìe¨Ä™\F @daj gl¡`da¬gb¦P”楮 êJá2U(ªõÂ¥6˜+ß<endstream endobj 7 0 obj 80 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000371 00000 n 0000000517 00000 n 0000000312 00000 n 0000000419 00000 n 0000000183 00000 n 0000000015 00000 n 0000000165 00000 n 0000000488 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 567 %%EOF pyscript-0.6.1/doc/manual/optics/LambdaPlate.pdf0000644000175000001440000000147410402637367021276 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœ+T0Ð3T0A(œËUÈ¥d¢^Ìe¨Ä™\†† F ¹\F&z–fFF Nœcl`¬gb)Cá`W–ÆeªP4×‹Êæs!âÖ(‚endstream endobj 7 0 obj 86 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000377 00000 n 0000000523 00000 n 0000000318 00000 n 0000000425 00000 n 0000000189 00000 n 0000000015 00000 n 0000000171 00000 n 0000000494 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 573 %%EOF pyscript-0.6.1/doc/manual/optics/Laser.pdf0000644000175000001440000000145710402637367020177 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœ+T0Ð3T0A(œËUÈ¥d¢^Ìe¨Ä™\F @daj gl¡`da¬gb¦P”Ê•ÆeªPTà…KA0W òžâendstream endobj 7 0 obj 73 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000364 00000 n 0000000510 00000 n 0000000305 00000 n 0000000412 00000 n 0000000176 00000 n 0000000015 00000 n 0000000158 00000 n 0000000481 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 560 %%EOF pyscript-0.6.1/doc/manual/optics/Lens.pdf0000644000175000001440000000153510402637367020027 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœÅMKÂ@Ý¿Spd†¡ÌÜY0‰m»h\x}i"^Á<yä}.$'¾wì8p™-/Zb7T¡˜.<©)qvQJ^‹±›Ÿ"å6Ñ@Qeí-OôÊÞºýÄÉ3, 2ð€Ñ;º¯è^qÇ-ð¢Ô6–endstream endobj 7 0 obj 118 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000410 00000 n 0000000556 00000 n 0000000351 00000 n 0000000458 00000 n 0000000222 00000 n 0000000015 00000 n 0000000203 00000 n 0000000527 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 606 %%EOF pyscript-0.6.1/doc/manual/optics/Mirror.pdf0000644000175000001440000000152210402637370020366 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœ­ŒË Â@ Dï®b*0¶×ή[àFR)9Dh£PšÃŒž4o‡°B¾ùõu£N³ãþ"Å“4¹‡9LXÌÕ2ïŠ&}8VòÁ‘6Òâ ’CQïì1¹Qà]ÆóߌZèRùöž&œendstream endobj 7 0 obj 108 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000399 00000 n 0000000545 00000 n 0000000340 00000 n 0000000447 00000 n 0000000212 00000 n 0000000015 00000 n 0000000193 00000 n 0000000516 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 595 %%EOF pyscript-0.6.1/doc/manual/optics/Modulator.pdf0000644000175000001440000000152610402637370021066 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœ}ŒK €@ C÷=ENPÛùéÜéAT]¨ ¯ïø7J(…¼$3„rèþÍD3eµC¿’¢O7x),»uʹÅÒRG[ ”_x£¼SLdåä1¦~õ°äáÅoãéóHUÒæ,fendstream endobj 7 0 obj 111 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000403 00000 n 0000000549 00000 n 0000000344 00000 n 0000000451 00000 n 0000000215 00000 n 0000000015 00000 n 0000000196 00000 n 0000000520 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 599 %%EOF pyscript-0.6.1/doc/manual/optics/PhaseShifter.pdf0000644000175000001440000000147510402637370021510 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœ+T0Ð3T0A(œËUÈ¥d¢^Ìe¨Ä™\F @”Ëei gafª`dh¡gbd¤Ãehf¨gn ’ÌáJã2U(*÷"NyW0W ”'\endstream endobj 7 0 obj 87 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000378 00000 n 0000000524 00000 n 0000000319 00000 n 0000000426 00000 n 0000000190 00000 n 0000000015 00000 n 0000000172 00000 n 0000000495 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 574 %%EOF pyscript-0.6.1/doc/manual/optics/fabry-perot_pdh.pdf0000644000175000001440000000177610402637371022215 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœ­“=nÃ0 …wž‚'`IJ”äèÖx,:õÇ) i‡^¿ô,wh¼‚aø½§OE_‘IDZ¼_/p…‡cÄá @ðÑŸO˜ÝãJ6’NPãD¬P²éë =HŒJ²ºY,77[¤X]å©4WK)¤¶¸A²P–6ÐHe„{,c1¦PPK ˜ðë>€ñ°“é×—Ž$Xµ$úba¦ì%#1å⵸¬ç®Êyù•j,µŽT¶©ªlY·R½Ÿhuót±›+©ÁÀnXôdPf2›¶ªpšfEKÓšãõß‹všn醕åJ"ÎVíÆr%P§vv/Ò©öUíÄÿë•ñÅ€·©*;ùž|üc'¨+endstream endobj 7 0 obj 278 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000571 00000 n 0000000717 00000 n 0000000512 00000 n 0000000619 00000 n 0000000382 00000 n 0000000015 00000 n 0000000363 00000 n 0000000688 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 767 %%EOF pyscript-0.6.1/doc/manual/optics/mach-zehnder.pdf0000644000175000001440000000221510402637371021462 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœ½TKnÛ@ ÝÏ)x–ŸùpNP »ÆG0â´€µH»èõCޤ±RÈ&C˜'¾÷ø¿!ų½ÏKzMßž2¼üM /þû$£1J+„j ¦˜+üyN—TàŸÇýø ‹a-P ›u†e"R:ŠS¯‰µ4¤öÙY×;G¬Ë—ºE¯87¬ÌÒ±æpÔlHX•‚ÜjÞjVv@‡|uRsu,}¤>ú9b¿<7j˜½‚ŽFÚ\J²#ÖA¡d“, »zI¾=´E);¶:´/Ÿ¤Åf‰ø¢d‹) ]nˆrGZå¸blœëÊÎÚÏ/³ó~ge$ª$^z8QF帀ZDJ‰‘rã2ú©ìsìó|N¢Fƒ±GLMá½çy|#'ÕX‡ƒ[nˆª¢Œü[ì61VlXL‚s;{¦‘ÊŽ°_a˜ ›Ëÿ®çmäñ÷òô=Yó„ûhÆáNÆ)zÇâ¢VçÝZ&²'0¢¶¸jÌnmÇóáëÙéNó° —ÉÜfûÎiäiÎÿ¦´—PúéÏÇ `endstream endobj 7 0 obj 420 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000714 00000 n 0000000860 00000 n 0000000655 00000 n 0000000762 00000 n 0000000524 00000 n 0000000015 00000 n 0000000505 00000 n 0000000831 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 910 %%EOF pyscript-0.6.1/doc/manual/optics/michelson-morely.pdf0000644000175000001440000000201510402637371022401 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœ½RAn! ¼ó ¿ÀÅÆó‚J½5û„U“VJiý~½ìB¢&R.U…V+{ÆÌp†ˆqYÛ>…sxÚ ¾ÁÁ¿À‚F©r®`1°%” Ÿoa¾½òåaåˆÔ0+G,fpH¦ŠLp ”´`,·@ï9Þ°ÜiÚÿŸÔââQFJ@’+jí·fÃ$¾m>=®™s,(ºšXÅÇnHõ±3aÑäŠÌ)ûáŠDYE[›DÚý—PþˆìÝçj“Š¥‚‰›¥©²ä8"ÎV–wÎ{8a ÄnŸå±Ÿµª ]*6•ÁðKunó¬ïu÷¬(R%PÏ£Öz•sG–ˆºì–Úi=‹V´E{¡êÞ£ºzXk¸0…W_?½¼©”endstream endobj 7 0 obj 292 endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000586 00000 n 0000000732 00000 n 0000000527 00000 n 0000000634 00000 n 0000000396 00000 n 0000000015 00000 n 0000000377 00000 n 0000000703 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 782 %%EOF pyscript-0.6.1/doc/manual/optics/sagnac.pdf0000644000175000001440000000211610402637371020351 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœ½SInÃ0 ¼ëz+.©è­É‚&-àÒúýR¶eI€^‚Â0 ‡Cr<ºÆS»æçñ®áe/ñürü _ýþ Ó×ý.˜fÀŠ1c…Zk¼ÄlPò‚ ᲂ•X#l¤@ªX';–t#EŒ ¥>”ê•+k«u[ù˜Õµ„¨Ùv.V`²‰Ï 1²‹XNÀɤį÷p )îþds6gd¶fXl¸zÍp§ò èô­¾ûÙ‰âþ’û› `û/ÈbÜKq¤LòÅ> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 2 0 obj <>endobj xref 0 9 0000000000 65535 f 0000000651 00000 n 0000000797 00000 n 0000000592 00000 n 0000000699 00000 n 0000000461 00000 n 0000000015 00000 n 0000000442 00000 n 0000000768 00000 n trailer << /Size 9 /Root 1 0 R /Info 2 0 R >> startxref 847 %%EOF pyscript-0.6.1/doc/manual/Makefile0000644000175000001440000000336410441273463016570 0ustar cochraneusers# Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # $Id: Makefile,v 1.11 2006/06/06 12:38:11 paultcochrane Exp $ MAIN = pyscript FIGS = all: $(FIGS) $(MAIN).pdf view: $(FIGS) $(MAIN).pdf gv $(MAIN).pdf acro: $(FIGS) $(MAIN).pdf acroread $(MAIN).pdf pdf: $(MAIN).pdf dvi: $(MAIN).dvi $(FIGS) : %.pdf : %.py ./$< epstopdf $*.eps %.pdf: %.tex $(FIGS) pyscript_defs.tex libpresent.tex libpresentation.tex libqi.tex pyscriptElectronics.tex pyscriptOptics.tex pyscript.bib pdflatex $< -bibtex $* pdflatex $< pdflatex $< %.dvi: %.tex $(FIGS) pyscript_defs.tex libpresent.tex libpresentation.tex libqi.tex pyscriptElectronics.tex pyscriptOptics.tex pyscript.bib latex $< -bibtex $* latex $< latex $< # standard TeX stuff #%.dvi: %.tex $(FIGS) # latex $< # -bibtex $* # latex $< # latex $< #%.ps: %.dvi # dvips -o $*.ps $*.dvi #%.pdf: %.tex # ps2pdf $*.ps $*.pdf #dvi: $(MAIN).dvi #ps: $(MAIN).ps #pdf: $(MAIN).pdf figs: $(FIGS) clean: -rm -f *~ *.mpx *.log *.aux *.blg reallyclean: clean -rm -f figs.[0-9]*.eps *.pdf *.dvi $(FIGS) *.bbl pyscript-0.6.1/doc/manual/class_structure.pdf0000644000175000001440000001224507661026765021061 0ustar cochraneusers%PDF-1.3 %Çì¢ 6 0 obj <> stream xœÍ[K—ä´f]¿Â›xˆZïÇšj8<Rlr²"i §{AeÁ.¿=ß•mÙr¹ÊŽú0Ìá0ÕV}Ö½ºï+©8§ÿúÏïžv?ínÿ¢«ïÿ³Õ÷øÿÇ–B3'+$sÂUÆ&ƒªB`ÞûPþµ{Ø9&”ºúy ü¸ã˜û§JDÒÃÇwOÕÇ÷ ªa²û‡]Ç–¨´VŒ‹ÊI&¤±ÕýÓîýê7ïþöþß»Oï«o#¯‰°ÕL¸‘°ǫ̂à;>7€Ž äBŠ¢OnM>ÓÐõu ¼ÃwÁd •’ SX0-ô½››uÓ6ÍéææƒßÑš»÷ †¯†oYS߯o›8Â8k&§ZœÒ£”J÷ÛžÜ𷺽­y3<ÚÖÝÐדG_Ÿ¸hÙ04´ã,ðÙLW@%Æ¢4'`Œ3MÖÜ[KÒ~2ՙЀºë^}ño2ªéóDãݳºÊÁ¸¦ƒ3;øð4~ÿþ}n‚{θ„c(°­ ®rƒØ*0!1ˆpaÉ LçM!³ƒD—T oèfv°tL eÁ²U $ ùLW@%v x`ŒØäú²ô!Ã(ÞœÔ~t}ñzæÄöÉML€Ù†<ˆ''^èÌ8æE¨‚ÇÒ-åݶyÉtî¿m%V¿ì7€Ž ¤˜±®™VÛ¡@œÍtTì‘w÷•w,¢}{8,ºïÍͽš„õó¸·g¦¾œ ö5Ÿ<ÝÞí'O¼~1Mù—'w'';§=}EªÃëþÏCÝô1ç!$ºå*¹L™!ªi˜”~f|ë ’ " a -SªSÈ¡~hïöËí¯'¯¬³Ì…DÞ`8x“óxTõ9’&ŒN „£®z¯©õ­ÛÃh3¢³ú¢iÙ>Š›(Ï·üŸï`.þµg¼þ›žL+ÒߣøŠ·¬9Õ{†N‘­³SÍ!®Àµ*!ȰMï%:WÜ:¦$hè€ (1«E\í¢Æç/ÕÈ”–H Á¬H¤³X¿Ž9ÊUVª„éÔšÏsS¢zDj! n×zR&_<ë1aƒ/·BÔüÀ›šò¿Ü¿þà“OÌ4=BäˆIÍ™â@R‹¢ò•T"0G²¦`f6@v#¥ACÙ‡=<3ö/ë63›´€S1géÌ×7€J.±Ú …a›¾Âãg ×Q¶Ý¿®ÿèþý°+Ì⿼û0KÒN¢zH|£†ŽÂš-îæ9kN3n:§,%‹µ"jþÈ3©– È  ’| ¬š÷åõ§Â=\à-*BÏb¹tA]Ú±8JË0›é2¨(§`‰Æu•¤4rµ“8÷bå45¾‚%Sò‚–ÖA%Z‚u†(]”Á¾Ëˆ÷µnr=%ÒЩó3ø9AÇ Ú3éf5ül¢Ë˜"-9¼îÀr‹´bµÎ¿i^‹Ú¥jë\i‚+ËH”4š©YÛåSÓ² *éÍ`iJ’åa-1ô>< Úø³üxÖ£õô¢µ÷Ë~±TÖY¡º:ú‡—ï©3A¶$Ti!¯0²’íl=‹_î˜v½£1m³`u£ØP‰7jhâoÕ«Ôï+×L wqª'O'Õ´©ów¦Ý×󼎵Xª¥\LÙ‹a¨$¯+$£bäòú}ý‡YZ(Ó¶ÑrÜ^ÇG —2v"Kæ¹T–B=Oñ  Ó­„…âËzˆ(æÍsçNJZ•( ÷ÁE% à‹VÔ/s5%Úˆ¨ÉåzZGÇ*ô¨Í¼ÔY)Êt;]ÔÓvIOcø°ÆÂv µ©¦@ ¡ç1yT“Á%·Û׹͗µiZþb__` Î%ò$o=çpq¨­˜2 ’éc¨(NZtäÂF}8Ó;Nïyî!mú9à‘Óç›—« ¢ÍK$¥ñ‰î[‡Þ=С/ò'œBœHÏö/WAÇòh¡­Õ ¤ §]>ÓPYÖB  ˆA„m¹¾I=íÍÐö®iOg…rß^¹z¢&¬y“ÀÀ™Ô°Irü€L/ÐêØÜÝ6€J4ŒæÓÊVÈùº3ÂÀ^𙝠ą3}W"žõŸ@ešaœºOÌ9Tü¬xF÷™Ø6Kâ:«¥×1å+£´Œ¤6÷ÿÌÚöÊÜ [åi#cì+ âL_(‰ài.ô=ë û¡ šŠLïúújÖö ”%G"/4•ë ¢ímšÄuÇ0®ßË¿ÚTž Wøÿúó/ÿ´È¢ eíH=+%6€žÇâØÉ^KtóXåšázΘ·û“f˜VÜH\.+ÖA%e…@ íb$é¿pó=¹‘2:3ßñsö.‚Ž ¤¬­áÊOR×AE5 ÊÒæñ§’ÞL»ßçzƒÞ®]¬šêqùÈkrÕâêÞZ³Th °ÖþÐåiÐBpÕãÎX4œ(*F¤F}«1r켃" }¯¢÷§ùôà2}ÿHÎò¿óQ“Fź~cói1°,iž…JVu|Kvmª Ðòt¢~êGŒ jÉAL¼D\o¶ÒèN•X‘ñ^bdúÍ z ËŽYìÒˆÄg”üe™¶cmHnü4Žè ¨óxLúZQÐ`/e:ïç4‘”ϟΦÆkŽ˜FLd»è½Ò–ŠîñØ¥Úêì­ú­2éƒG…¾4"]öÛıðV¯-ŒHGÉì-diÜû?QˆÖ^¿a–7Eh´&!, (4ŠÎ¿ùøÜ‘ï·€žÒ³¶š©Èž„ƒÙ¥êß{à Åkƒ:­W6-ÞBÏCEDrÁ[[ƒ]ìQ¿Csó­<ê]ƒ– +eŽvò5¬;„a1ý"ú%ý¼á­’åX:zñ•GÈQýU¤SÍõirf2þÄø@›>Uà(Õ1ÑÓÀU@³äMªLM€Q©zgÑ´Øñ.^P ÉTGó(y+6Gãn¬GÎ@ÌÁ¿”Ÿ¯ÙÆê+e·hŠaaŽî™úÎ4¾n?›Qkª'O×\¦Ü®BЏÓt3KdÜ^11ÞM•Mž ÷è:IGC©ó æÂôH~tŒµ„DÀm¹Wj]Ôð`Õeï“®Ïyγñš¡oŸòŒÄ/{åæ]DA̶³>‡4.s~‹Þ_ä× ™#|C)ói¼PQ¼íø Žî8`ŒÌÔ.¢"FÓ!¬´]W8á·è}â×Ð W„-„gQ3Óé N#» 5ÓX»æÎ0ë'#°+ÕÍ5Ì3Ž<ü‚sÿ0ì9`=?ŸÍ:¡s6ë8Rvu—)£É.ÚùTýª>½n ÒóÐ5¯OmCß4»÷i« ËÙmkpªí·!ò JÒôC÷¡ºðN6BÜ™¢3žÉˆ 6>¦yÆ‘éïù~9*3MÌfÒ™Ï:ŽiYPsº#EwEº­rÓò*^cž+¢ýè#Æëª9µ|*{Ë1‹¦8N&AëÝOM–¹^°QgaÜŠn/ÓMÙmÞ·r_¿“e‘¸@øz$žíÕmGñÝFÞÕ™.ƒ;„pTõ‹€çè*‚E×9»ä²Tò[úݦ§»ßª¢«cþö•Ò¹Ðm kP#íl©@“¥*0Öfº ÂL ágò3¡­ƒJ„†¶ÊÄ{è£Ðþz.´v&9[ê:h²ÔL—fº :¦Ñá—OiD›x7÷qgñ2rõù€tß¶Û1VººmžÎ3ÌŒpüÕH‰™¬è½¶qnèÈ›NýæÚֽŜ;0J׿¿.çßîþŽ|Tœendstream endobj 7 0 obj 3320 endobj 14 0 obj <> endobj 15 0 obj <> endobj 5 0 obj <> /Contents 6 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 5 0 R ] /Count 1 >> endobj 1 0 obj <> endobj 4 0 obj <> endobj 8 0 obj <> endobj 9 0 obj <> endobj 16 0 obj <> endobj 10 0 obj <> endobj 11 0 obj <> endobj 17 0 obj <> endobj 12 0 obj <> endobj 13 0 obj <> endobj 18 0 obj <> endobj 2 0 obj <>endobj xref 0 19 0000000000 65535 f 0000003726 00000 n 0000004775 00000 n 0000003667 00000 n 0000003774 00000 n 0000003507 00000 n 0000000015 00000 n 0000003405 00000 n 0000003843 00000 n 0000003907 00000 n 0000004150 00000 n 0000004208 00000 n 0000004490 00000 n 0000004556 00000 n 0000003425 00000 n 0000003455 00000 n 0000003999 00000 n 0000004295 00000 n 0000004651 00000 n trailer << /Size 19 /Root 1 0 R /Info 2 0 R >> startxref 4827 %%EOF pyscript-0.6.1/doc/manual/libpresent.tex0000644000175000001440000000575610441263767020036 0ustar cochraneusers% Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane % % This program is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License % as published by the Free Software Foundation; either version 2 % of the License, or (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program; if not, write to the Free Software % Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. % $Id: libpresent.tex,v 1.4 2006/06/06 11:33:11 paultcochrane Exp $ \chapter{Presentation Library} \begin{python} pyscript.lib.present \end{python} It's straightforward to create whole posters in \pyscript. Talks can also be simply created. \section{Common Objects} These are useful objects for both posters and talks. %-------------------------------------------------------------------------- \subsection{Box()} \begin{python} class Box(Group, Rectangle): pad = .2 width = None height = None \end{python} This places a box around an object. \Verb|pad| gives the amount of padding around the object. \Verb|width| and \Verb|height| can be set also and these will override the calculated values. %-------------------------------------------------------------------------- \subsection{TeXArea()} \begin{python} class TeXArea(Group): width = 9.4 iscale = 1 align = "w" \end{python} This will typeset some \LaTeX{} within a fixed width minipage environment. the width of the minipage is set with the \Verb|width| attribute which must be supplied. The initial scale of the text can be set with \Verb|iscale| as per the \Verb|TeX| object. The \Verb|align| attribute is used when the \LaTeX{} doesn't fill the minipage --- an invisible rectangle is added with the minipage aligned according to this attribute. %-------------------------------------------------------------------------- \section{Posters} \begin{python} class Poster(Page, VAlign): size = "A0" orientation = "portrait" bg = Color('DarkSlateBlue') space = 1 topspace = 2 def background(self) \end{python} %-------------------------------------------------------------------------- \section{Talks} \begin{python} class Pause(object) class Talk(Pages): def append(self, *slides_raw): class EmptySlide(Page): title = None orientation = "Landscape" size = "screen" def flatten(self, thegroup=None, objects=[]): def append(self, *items, **options): def append_n(self, *items): def append_s(self, *items): def append_e(self, *items): def append_w(self, *items): def append_c(self, *items): def make_back(self): def make_title(self): def clear(self): def make(self, page=1, total=1): \end{python} pyscript-0.6.1/doc/manual/libpresentation.tex0000644000175000001440000005216210441263767021062 0ustar cochraneusers% Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane % % This program is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License % as published by the Free Software Foundation; either version 2 % of the License, or (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program; if not, write to the Free Software % Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. % $Id: libpresentation.tex,v 1.6 2006/06/06 11:33:11 paultcochrane Exp $ \chapter{The Old Presentation Library} \begin{python} pyscript.lib.presentation \end{python} In addition to the newer \vrb{pyscript.lib.present} library, there also exists the old \vrb{pyscript.lib.presentation} library. This is not quite so object-oriented in usage, but it works nevertheless, and hasn't been completely deprecated. The \vrb{presentation} library can be used to create posters and talks, which can then be used to ``wow'' your colleauges at your next conference. \section{Common Objects} These are useful objects for both posters and talks. \subsection{TeXBox()} Typeset some \LaTeX{} within a fixed width box. \subsection{Box\_1()} A box of fixed width. Items added to it are aligned vertically and separated by a specified padding. \section{Creating a talk or seminar} \subsection{The Talk() object} The first thing you will need to do when you start writing a seminar presentation is to instantiate the \vrb{Talk()} object. This object defines some overall parameters, attributes and styles for the talk as a whole. After you set these parameters for your particular talk, then you only need to worry about adding \vrb{Slide()} objects. To set up the \vrb{Talk()} object for your talk you merely need to do this: \begin{python} talk = Talk() \end{python} More interesting things happen when we add styles to the talk, but more on that later. If you want to know about that now, go to \Sec{sec:styles}. The next thing you probably want to do is to give your talk a title. There are two ways to do this: with the \vrb{set\_title()} method, or by merely setting the \vrb{title} attribute of the instantiated \vrb{Talk()} object. In other words you can either do this: \begin{python} talk.set_title(r"This is my talk") \end{python} or this: \begin{python} talk.title = r"This is my talk" \end{python} It is common that there are many people who have contributed to a particular piece of work being discussed in the seminar or talk, and consequently there will be more than one ``author'' of the talk. However, there is usually only one person presenting the talk, and so we have two separate attributes for these situations, namely the \vrb{authors} and \vrb{speaker} attributes. To set the name of the authors contributing to the talk, either use the \vrb{set\_authors()} method, or set the attribute directly, like so: \begin{python} talk.set_authors(r"Tom, Dick, and Harry") \end{python} or: \begin{python} talk.authors = r"Tom, Dick and Harry" \end{python} For the speaker, this is almost an identical procedure, just use either the \vrb{set\_speaker()} method, or set the \vrb{speaker} attribute directly. You are likely to be representing a business or institute of some form, so it is best to give their address. To do provide this information to the \vrb{presentation} library so that it can place the text appropriately, just use the \vrb{set\_address()} method or set the \vrb{address} attribute of the instantiated \vrb{Talk()} object. It is possible that your business or institute has a logo that you'd like to use. If so, convert it to an EPS file, and you can add it to the talk using the \vrb{add\_logo()} method like so: \begin{python} talk.add_logo("myepslogo.eps", height=2) \end{python} You can set the height of the logo using the \vrb{height} attribute as shown in the example above. That's basically it as far as the \obj{Talk()} object itself goes. The main amount of work is in producing the individual slides of the presentation, which is what we discuss next. \subsection{The Slide() object} The \vrb{Slide()} object defines a particular slide; one creates a new \vrb{Slide()} object for each slide in the presentation, calling them all at the end in the \vrb{render()} function to generate the entire talk. The first slide in your talk will be the titlepage. However, since getting you to make a new \vrb{Slide()} object just to generate the title page is silly (well, you've just given the title page all it needs to know eh?) the library automatically generates the title page slide for you. Slides usually have a title, some sequence of headings, possibly a figure (defined in \pyscript for example), or an imported EPS image, and possibly some equations. The \vrb{presentation} library provides methods for doing all these things. To add a slide to the presentation, one must instatiate a new \vrb{Slide} object, passing to it the current \vrb{Talk} object, like so: \begin{python} intro = Slide(talk) \end{python} To add a title to the slide~\footnote{Note that this is \textbf{not} the title of the talk!}, one can use the \vrb{set\_title()} method (this time of the \vrb{Slide} class), or set the \vrb{title} attribute directly: \begin{python} intro.set_title(r"Introduction") \end{python} or: \begin{python} intro.title = r"Introduction" \end{python} There isn't much of a difference between the two I know, but some people like to call a \vrb{set\_} function and others like to set the attribute directly, so we're catering to both kinds of people. To add other things like headings, figures and epsf images to your slide, you just need to use one of the relevant \vrb{add\_*()} functions. In other words, to add a heading use the \vrb{add\_heading()} method. This method takes two arguments, the first argument is the level of the heading (there are currently three separately defined levels of headings in the library) and the second argument is the heading to add. For instance: \begin{python} intro.add_heading(1, r"What are we talking about?") intro.add_heading(2, r"Some stuff") intro.add_heading(2, r"Some other stuff") intro.add_heading(3, r"Something more specific to some other stuff") \end{python} Adding a heading puts one of the predefined bullets in front of the heading, typesets the text at a predefined size and indentation dependent upon the heading level. You can change these settings by defining your own style, or by setting one of the myriad attributes of the talk object itself, for more information see \Sec{sec:styles}. If you want to place a diagram generated from \pyscript code to your slide, and have it automatically positioned by the library, then use the \vrb{add\_fig()} method. For instance, if you've produced earlier in your \pyscript script a diagram called \vrb{mydiag} then to add it to the slide, merely use: \begin{python} intro.add_fig(mydiag) \end{python} You can set the location of the figure by passing one of the \pyscript anchor locations as an optional argument. For example, \begin{python} intro.add_fig(mydiag, ne=intro.area.ne - P(1,1)) \end{python} will locate the diagram in the ``north-east'' corner of the page one centimetre from the right-hand edge, and one centimetre from the top edge. You can set the width of the diagram as well by specifying the \vrb{width} option: \begin{python} intro.add_fig(mydiag, width=12, c=intro.area.c) \end{python} which will make the diagram 12cm wide, and centre it on the current page. Similarly, one can add diagrams or images that already exist in EPS files. To do this use the \vrb{add\_epsf()} method like so: \begin{python} intro.add_epsf(file="myEpsFile.eps", c=intro.area.c, width=14) \end{python} The \vrb{add\_epsf()} method processes the anchor location, width and height options in the same way the \vrb{add\_fig()} method does. You might like to add some text to your slide and position it arbitrarily on the page, as opposed to have \vrb{presentation.py} work out where to put it for you (as is done with the \vrb{add\_heading()} method). Therefore, there is the convenience function \vrb{add\_text()}. Here is an example: \begin{python} intro.add_text("Hello there!", e=intro.area.e-P(-2,-2), scale=2) \end{python} Just to be different, the \vrb{add\_text()} method has a scale attribute as opposed to a height or width attribute. This is really silly, and should probably be changed. If you read this sentence, please put a feature request to change this on the \href{http://pyscript.sf.net}{pyscript} web page :-). At the end of your script you'll want to make the talk in its entirety, to do this use the \vrb{make()} method of the \vrb{Talk()} class like so: \begin{python} # make it! talk.make( intro, another_slide, file="mytalk.ps") \end{python} This will generate a Postscript document called \vrb{mytalk.ps} in the same directory as that in which the \pyscript script was run. Note that this is a Postscript file and not an EPS file; this means that the output has multiple pages as one would hope for a seminar! To actually give your seminar there are several tools you can use. One of the most common is to turn the Postscript into PDF via \ttt{ps2pdf} or some similar tool, and then use the full screen mode of Adobe Acrobat Reader~\cite{acroread} to display the talk. Alternatively, you might like to use a program like \ttt{pspresent}~\cite{pspresent}. Please note that due to a bug in Ghostscript version 7 (and possibly below) if there is insufficient text on a page, the postscript will be converted by \ttt{ps2pdf} incorrectly to give a portait-orientated page, as opposed to a landscape page. The postscript will view correctly in Ghostview (and so will the pdf incidentally), however, the pdf will view incorrectly in \ttt{xpdf} and \ttt{acroread}. This bug seems to have been fixed in Ghostscript version 8. \subsection{Styles for talks and seminars} \label{sec:styles} To change your talk style from the default you can specify one of the predefined styles by passing the \vrb{style} option to the \vrb{Talk()} class on instantiation. For instance: \begin{python} talk = Talk(style="prosper-darkblue") \end{python} which will load the style that looks a lot like the ``darkblue'' style of the \href{prosper}{prosper} \LaTeX{} package. To load the style, \pyscript will look in either the \ttt{~/.pyscript/styles/} directory or the current directory for a python file whose file name will be the name of the style with `\ttt{.py}' appended. If you are feeling really keen, you can write your own style. One of the best ways to do this is to copy and then modify one of the ones provided with the \pyscript distribution. Let's go through the details of the ``prosper-darkblue'' style now. \begin{python} # talk style for PyScript, following the Darkblue design of prosper HOME = os.path.expandvars("$HOME") stylesDir = HOME + "/.pyscript/styles/" # set the foreground and background colour of the title text of the talk self.title_fg = Color('white') self.title_bg = Color('white') # set the talk title's text style self.title_textstyle = r"\bf\sf" # set the text style for the text of who is giving the talk self.speaker_textstyle = r"\sf" # set the colour and text style of the address of the speaker of the talk self.address_fg = Color('white') self.address_textstyle = r"\sf" # set the colour and text style of the authors of the talk (not necessarily # the speaker of the talk) self.authors_fg = Color('white') self.authors_textstyle = r"\sf" # set the colour and text style of the title of the *slide* self.slide_title_fg = Color('lightgray') self.slide_title_textstyle = r"\bf" # set the colour, scale, textstyle, bullet and indent type for a level 1 heading self.headings_fgs[1] = Color('white') self.headings_scales[1] = 3 self.headings_textstyle[1] = r"\sf" self.headings_bullets[1] = Epsf(file=stylesDir+"redbullet.eps").scale(0.2,0.2) self.headings_indent[1] = 0 # set the colour, scale, textstyle, bullet and indent type for a level 2 heading self.headings_fgs[2] = Color('white') self.headings_scales[1] = 2.5 self.headings_textstyle[2] = r"\sf" self.headings_bullets[2] = Epsf(file=stylesDir+"greenbullet.eps").scale(0.15,0.15) self.headings_indent[2] = 0.5 # set the colour, scale, textstyle, bullet and indent type for a level 3 heading self.headings_fgs[3] = Color('white') self.headings_scales[1] = 2.2 self.headings_textstyle[3] = r"\sf" self.headings_bullets[3] = Epsf(file=stylesDir+"yellowbullet.eps").scale(0.1,0.1) self.headings_indent[3] = 1 # set the colour, textstyle and scale for placed text self.text_scale = 3.0 self.text_fg = Color('white') self.text_textstyle = r"\sf" \end{python} %stopzone % help for vim First off we work out where the styles directory is, and since it should be in \ttt{~/.pyscript/styles} we define this with the \ttt{stylesDir} variable. Note that this is a python file like any other, all it's doing is expecting you to add a certain set of values that \pyscript's \vrb{presentation.py} library knows about. Next we set the title foreground and background colour by setting the \vrb{title\_fg} and \vrb{title\_bg} variables. The text style is bold (\ttt{\\bf}) and a sans serif (\ttt{\\sf}) font. Note that this uses \LaTeX{} to specify these styles as internally \pyscript \vrb{TeX} objects are used. If this is a problem for you, just send us a bug report or feature request on the \href{http://pyscript.sf.net}{pyscript} web page and we'll try and fix it for you as soon as we can. Next the text style for the speaker element of the title page is set, and the colour and text style for the authors and address elements. Now we process the elements for the slides themselves. We need to set a foreground colour and text style for the title of the slide. We also need to specify the scale, foreground colour, text style bullet and indentation amount to use for the three levels of headings defined in the \vrb{presentation.py} library. Note that one has to specify for which level the style is being set by the square brackets: e.g.~\vrb{headings\_fg[1]}. One doesn't have to set the bullets to a text or \LaTeX kind of string, but also to EPS files, which is what we have done in the above example where red, green and yellow circles are used for the various heading levels. We've scaled them here (using the \pyscript \vrb{scale} method) so that they have different sizes and one can more easily tell when viewing the talk that one level has precedence over the other. If one wishes to place arbitrary text on the page, one can specify the default scale, colour and text style here too. Styles can be found in the \vrb{contrib/} directory of the \pyscript distribution. \section{Creating a poster} \subsection{The Poster() object} The very first thing to do when making a new poster is to instantiate the \vrb{Poster()} object. You do this like so: \begin{python} poster = Poster(size="a4") \end{python} Note that the size of the poster has been set here explicitly. A handy thing about using postscript is that if you want an a0 poster, you just need to change the size paramter to ``a0'' and the size of the poster will change, but not the actual amount of postcript. The reason we add this size declaration to the poster class is because it is often handy to have a4 size versions of your poster when you are at a poster session at a conference to give to people who have viewed your a0 size poster. Your poster will then require a title, a list of authors, an address of the insititution you are representing and the abstract that you submitted (or are using) for the poster. You set these properties using the relevant \vrb{set\_()} methods of the \vrb{Poster()} class. For instance: \begin{python} poster.set_title("My poster") poster.set_authors("Me, him, and her") poster.set_address("Over the hills, and far away") poster.set_abstract(""" I should have written something better when I applied for the conference: I might have got a talk instead... """) \end{python} One often wants to put logos onto a poster. The \vrb{Poster()} class lets you do this easily by using the \vrb{add\_logo()} method. Just supply the name of an EPS file and the height you want to use for the logo, and the class will place it at the top of your poster for you. E.g.: \begin{python} poster.add_logo("my_first_logo.eps", height=1.2) poster.add_logo("my_second_logo.eps", height=1.2) \end{python} The first logo is placed at the top left-hand corner. The next logo will be placed in the top right-hand corner. If you specify more logos then they will be distributed evenly across the top of the poster. If you want, you can also specify a list of logo names all at the one time, instead of having to call \vrb{add\_logo()} several times. You do this with the \vrb{add\_logos()} method: \begin{python} poster.add_logos("my_first_logo.eps", "my_second_logo.eps", height=1.2) \end{python} Obviously, when you use this method, all logos are given the same height. A poster is usually split up into columns. For a portrait-orientated poster, one usually has two columns; for a landscape-orientated poster three columns. A column is made up of one or more ``column boxes'' which define the actual content in the poster. So, to make your first column, you need to make a new \vrb{Column()} object: \begin{python} col1 = Column(poster) \end{python} Note that we have passed the current \vrb{poster} object through as an argument. This is so that any styles defined in the poster can flow through to the subobjects. We will eventually add this column to the poster as a whole, but not yet, as we need to fill the column with some content first. To do this instantiate a \vrb{ColumnBox()} object like so: \begin{python} intro = ColumnBox(poster) intro.set_title("Introduction") intro.add_TeXBox(r""" Here is some \LaTeX{} """) \end{python} Again, the \vrb{poster} object is passed in as an argument so we can make use of previously defined styles. We then set the title of the column box with the \vrb{set\_title()} method, and then added a \vrb{TeXBox()} object, which can contain arbitrary \LaTeX{} expressions, with the \vrb{add\_TeXBox()} method. There are more things than just \vrb{TeXBox}es that you can add to a column box; you can add an already-defined \pyscript object, or an EPS file. Say you want to align two images up together, and display them side by side within the column box. To do this you would set up an \vrb{Align()} object, append the EPS files as \vrb{Epsf()} objects and then add the \vrb{Align()} object to the column box with the \vrb{add\_object()} method. E.g.: \begin{python} # the figures fig1 = Epsf("fig1.eps") fig2 = Epsf("fig2.eps") # make the Align object figs = Align(a1="ne", a2="nw", angle=90, space=0.2) figs.append(fig1, fig2) # add the Align object to the column box intro.add_object(figs) \end{python} The \vrb{add\_epsf()} method is merely a convenience function so that you don't have to define an \vrb{Epsf()} object first and then add it with the \vrb{add\_object()} method. You can do all that work if you want to though! We are now ready to add the column box to the column. We do this with the \vrb{add\_box()} method of the \vrb{Column()} object: \begin{python} col1.add_box(intro) \end{python} We can now add the column to the poster itself, and yes, you guessed it, to do this we use the \vrb{add\_column()} method of the \vrb{Poster()} object: \begin{python} poster.add_column(col1) \end{python} Since this is the first column, it will automatically be the left-most column. Any other columns that you add will be added to the right of it. So, for instance, if one were making a poster in portrait mode then one would simply add two columns; the \vrb{Poster()} class should handle aligning most of the bits and pieces for you. For more complex examples, have a look in the \vrb{examples/} directory of the \pyscript distribution. The \vrb{Poster()} class is a complete rewrite and extension of the older \vrb{Poster\_1()} class, so it is likely that there will be problems with the way that it has been designed and so the interface might change slightly in the future. If you are having problems, feel free to email the developers! If you read this sentence, you might want to email the developers anyway! :-) \subsection{Styles for posters} \label{sec:poster-styles} To change your poster style from the default you can specify one of the predefined styles by passing the \vrb{style} option to the \vrb{Poster()} class on instantiation. For instance: \begin{python} poster = Poster(size="a4", style="ccp2004-poster") \end{python} which will load the style that PTC used at the Conference on Computational Physics in 2004 (hence ccp2004). Just like with styles for talks, to load the style, \pyscript will look in either the \ttt{~/.pyscript/styles/} directory or the current directory for a python file whose file name will be the name of the style with `\ttt{.py}' appended. If you are feeling really keen, you can write your own style. One of the best ways to do this is to copy and then modify one of the ones provided with the \pyscript distribution. Styles can be found in the \vrb{contrib/} directory of the \pyscript distribution. pyscript-0.6.1/doc/manual/libqi.tex0000644000175000001440000000154710441263767016761 0ustar cochraneusers% Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane % % This program is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License % as published by the Free Software Foundation; either version 2 % of the License, or (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program; if not, write to the Free Software % Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. % $Id: libqi.tex,v 1.3 2006/06/06 11:33:11 paultcochrane Exp $ \chapter{Quantum Information Library} pyscript-0.6.1/doc/manual/pyscript.bib0000644000175000001440000000211010441264240017440 0ustar cochraneusers% Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane % % This program is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License % as published by the Free Software Foundation; either version 2 % of the License, or (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program; if not, write to the Free Software % Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. % $Id: pyscript.bib,v 1.3 2006/06/06 11:36:00 paultcochrane Exp $ @Misc{pspresent, key = {pspresent}, author = {Matthew Chapman}, howpublished = {\url{http://www.cse.unsw.edu.au/~matthewc/pspresent/}} } @Misc{acroread, author = {Adobe Systems Incorporated}, howpublished = {\url{http://www.adobe.com}}, } pyscript-0.6.1/doc/manual/pyscript.pdf0000644000175000001440000143302410441264431017474 0ustar cochraneusers%PDF-1.4 5 0 obj << /S /GoTo /D (chapter.1) >> endobj 8 0 obj (Introduction) endobj 9 0 obj << /S /GoTo /D (section.1.1) >> endobj 12 0 obj (Overview) endobj 13 0 obj << /S /GoTo /D (section.1.2) >> endobj 16 0 obj (Conventions and Pitfalls) endobj 17 0 obj << /S /GoTo /D (section.1.3) >> endobj 20 0 obj (Tutorial) endobj 21 0 obj << /S /GoTo /D (chapter.2) >> endobj 24 0 obj (How Do I ...?) endobj 25 0 obj << /S /GoTo /D (section.2.1) >> endobj 28 0 obj (Aligning things) endobj 29 0 obj << /S /GoTo /D (subsection.2.1.1) >> endobj 32 0 obj (Using attributes) endobj 33 0 obj << /S /GoTo /D (subsection.2.1.2) >> endobj 36 0 obj (Understanding boundingboxes) endobj 37 0 obj << /S /GoTo /D (subsection.2.1.3) >> endobj 40 0 obj (Using Align\(\)) endobj 41 0 obj << /S /GoTo /D (subsection.2.1.4) >> endobj 44 0 obj (Using Distribute\(\)) endobj 45 0 obj << /S /GoTo /D (section.2.2) >> endobj 48 0 obj (Trouble Shooting) endobj 49 0 obj << /S /GoTo /D (subsection.2.2.1) >> endobj 52 0 obj (LaTeXStuff) endobj 53 0 obj << /S /GoTo /D (section.2.3) >> endobj 56 0 obj (Transformations and Things) endobj 57 0 obj << /S /GoTo /D (chapter.3) >> endobj 60 0 obj (PyScript Objects) endobj 61 0 obj << /S /GoTo /D (section.3.1) >> endobj 64 0 obj (Base Objects) endobj 65 0 obj << /S /GoTo /D (subsection.3.1.1) >> endobj 68 0 obj (PsObj\(\)) endobj 69 0 obj << /S /GoTo /D (subsection.3.1.2) >> endobj 72 0 obj (AffineObj\(\)) endobj 73 0 obj << /S /GoTo /D (subsection.3.1.3) >> endobj 76 0 obj (Area\(\)) endobj 77 0 obj << /S /GoTo /D (section.3.2) >> endobj 80 0 obj (Drawing Objects) endobj 81 0 obj << /S /GoTo /D (subsection.3.2.1) >> endobj 84 0 obj (Common Attributes) endobj 85 0 obj << /S /GoTo /D (subsection.3.2.2) >> endobj 88 0 obj (Rectangle\(\)) endobj 89 0 obj << /S /GoTo /D (subsection.3.2.3) >> endobj 92 0 obj (Circle\(\)) endobj 93 0 obj << /S /GoTo /D (subsection.3.2.4) >> endobj 96 0 obj (Dot\(\)) endobj 97 0 obj << /S /GoTo /D (subsection.3.2.5) >> endobj 100 0 obj (Path\(\)) endobj 101 0 obj << /S /GoTo /D (subsection.3.2.6) >> endobj 104 0 obj (Arrowhead\(\)) endobj 105 0 obj << /S /GoTo /D (section.3.3) >> endobj 108 0 obj (Text Objects) endobj 109 0 obj << /S /GoTo /D (subsection.3.3.1) >> endobj 112 0 obj (Text\(\)) endobj 113 0 obj << /S /GoTo /D (subsection.3.3.2) >> endobj 116 0 obj (TeX\(\)) endobj 117 0 obj << /S /GoTo /D (section.3.4) >> endobj 120 0 obj (Groups) endobj 121 0 obj << /S /GoTo /D (subsection.3.4.1) >> endobj 124 0 obj (Group\(\)) endobj 125 0 obj << /S /GoTo /D (section.3.5) >> endobj 128 0 obj (Vectors and Matrices) endobj 129 0 obj << /S /GoTo /D (section.3.6) >> endobj 132 0 obj (Other) endobj 133 0 obj << /S /GoTo /D (subsection.3.6.1) >> endobj 136 0 obj (Color\(\)) endobj 137 0 obj << /S /GoTo /D (subsection.3.6.2) >> endobj 140 0 obj (Paper\(\)) endobj 141 0 obj << /S /GoTo /D (subsection.3.6.3) >> endobj 144 0 obj (Epsf\(\)) endobj 145 0 obj << /S /GoTo /D (chapter.4) >> endobj 148 0 obj (Development) endobj 149 0 obj << /S /GoTo /D (section.4.1) >> endobj 152 0 obj (Submitting patches) endobj 153 0 obj << /S /GoTo /D (appendix.A) >> endobj 156 0 obj (Presentation Library) endobj 157 0 obj << /S /GoTo /D (section.A.1) >> endobj 160 0 obj (Common Objects) endobj 161 0 obj << /S /GoTo /D (subsection.A.1.1) >> endobj 164 0 obj (Box\(\)) endobj 165 0 obj << /S /GoTo /D (subsection.A.1.2) >> endobj 168 0 obj (TeXArea\(\)) endobj 169 0 obj << /S /GoTo /D (section.A.2) >> endobj 172 0 obj (Posters) endobj 173 0 obj << /S /GoTo /D (section.A.3) >> endobj 176 0 obj (Talks) endobj 177 0 obj << /S /GoTo /D (appendix.B) >> endobj 180 0 obj (The Old Presentation Library) endobj 181 0 obj << /S /GoTo /D (section.B.1) >> endobj 184 0 obj (Common Objects) endobj 185 0 obj << /S /GoTo /D (subsection.B.1.1) >> endobj 188 0 obj (TeXBox\(\)) endobj 189 0 obj << /S /GoTo /D (subsection.B.1.2) >> endobj 192 0 obj (Box\1371\(\)) endobj 193 0 obj << /S /GoTo /D (section.B.2) >> endobj 196 0 obj (Creating a talk or seminar) endobj 197 0 obj << /S /GoTo /D (subsection.B.2.1) >> endobj 200 0 obj (The Talk\(\) object) endobj 201 0 obj << /S /GoTo /D (subsection.B.2.2) >> endobj 204 0 obj (The Slide\(\) object) endobj 205 0 obj << /S /GoTo /D (subsection.B.2.3) >> endobj 208 0 obj (Styles for talks and seminars) endobj 209 0 obj << /S /GoTo /D (section.B.3) >> endobj 212 0 obj (Creating a poster) endobj 213 0 obj << /S /GoTo /D (subsection.B.3.1) >> endobj 216 0 obj (The Poster\(\) object) endobj 217 0 obj << /S /GoTo /D (subsection.B.3.2) >> endobj 220 0 obj (Styles for posters) endobj 221 0 obj << /S /GoTo /D (appendix.C) >> endobj 224 0 obj (Quantum Information Library) endobj 225 0 obj << /S /GoTo /D (appendix.D) >> endobj 228 0 obj (PyScript Optics Object Package) endobj 229 0 obj << /S /GoTo /D (section.D.1) >> endobj 232 0 obj (Examples) endobj 233 0 obj << /S /GoTo /D (subsection.D.1.1) >> endobj 236 0 obj (Michelson-Morely Interferometer) endobj 237 0 obj << /S /GoTo /D (subsection.D.1.2) >> endobj 240 0 obj (Mach-Zehnder Interferometer) endobj 241 0 obj << /S /GoTo /D (subsection.D.1.3) >> endobj 244 0 obj (Sagnac Interferometer) endobj 245 0 obj << /S /GoTo /D (subsection.D.1.4) >> endobj 248 0 obj (A Fabry-Perot Cavity) endobj 249 0 obj << /S /GoTo /D (section.D.2) >> endobj 252 0 obj (Objects) endobj 253 0 obj << /S /GoTo /D (subsection.D.2.1) >> endobj 256 0 obj (BSBox) endobj 257 0 obj << /S /GoTo /D (subsection.D.2.2) >> endobj 260 0 obj (BSLine) endobj 261 0 obj << /S /GoTo /D (subsection.D.2.3) >> endobj 264 0 obj (Detector) endobj 265 0 obj << /S /GoTo /D (subsection.D.2.4) >> endobj 268 0 obj (Free Space) endobj 269 0 obj << /S /GoTo /D (subsection.D.2.5) >> endobj 272 0 obj (Lambda Plate) endobj 273 0 obj << /S /GoTo /D (subsection.D.2.6) >> endobj 276 0 obj (Laser) endobj 277 0 obj << /S /GoTo /D (subsection.D.2.7) >> endobj 280 0 obj (Lens) endobj 281 0 obj << /S /GoTo /D (subsection.D.2.8) >> endobj 284 0 obj (Mirror) endobj 285 0 obj << /S /GoTo /D (subsection.D.2.9) >> endobj 288 0 obj (Modulator) endobj 289 0 obj << /S /GoTo /D (subsection.D.2.10) >> endobj 292 0 obj (Phase Shifter) endobj 293 0 obj << /S /GoTo /D (appendix.E) >> endobj 296 0 obj (PyScript Electronics Object Package) endobj 297 0 obj << /S /GoTo /D (section.E.1) >> endobj 300 0 obj (Introduction) endobj 301 0 obj << /S /GoTo /D (section.E.2) >> endobj 304 0 obj (Objects) endobj 305 0 obj << /S /GoTo /D (subsection.E.2.1) >> endobj 308 0 obj (AND gate) endobj 309 0 obj << /S /GoTo /D (subsection.E.2.2) >> endobj 312 0 obj (NAND gate) endobj 313 0 obj << /S /GoTo /D (subsection.E.2.3) >> endobj 316 0 obj (OR gate) endobj 317 0 obj << /S /GoTo /D (subsection.E.2.4) >> endobj 320 0 obj (NOR gate) endobj 321 0 obj << /S /GoTo /D (subsection.E.2.5) >> endobj 324 0 obj (XOR gate) endobj 325 0 obj << /S /GoTo /D (subsection.E.2.6) >> endobj 328 0 obj (NXOR gate) endobj 329 0 obj << /S /GoTo /D (subsection.E.2.7) >> endobj 332 0 obj (NOT gate) endobj 333 0 obj << /S /GoTo /D (subsection.E.2.8) >> endobj 336 0 obj (Resistor) endobj 337 0 obj << /S /GoTo /D (subsection.E.2.9) >> endobj 340 0 obj (Capacitor) endobj 341 0 obj << /S /GoTo /D (section*.3) >> endobj 344 0 obj (Bibliography) endobj 345 0 obj << /S /GoTo /D [346 0 R /Fit ] >> endobj 349 0 obj << /Length 317 /Filter /FlateDecode >> stream xÚR¹RÃ0íý[Ê…íÚºJÎ TdpǤȃ=“ĉm®¿ge' FÍêéZ­4/Gà¼UäÊM¢á™Ñy‚‡Ó\“òÖpýÇ¡$O*`WÁÙSÒ/'°‡#ª'dŸüf7„Ë6Y$°øÎÃ`UÈ2–œÊ´‰Ìó"™]cÊ•óŠ' ²Êy ¥5Añø î>îˮ٠鲸é衉té2•#›­ˆ[ém?ô©DQv)Ѝ“™ÑbÞ¥ÅjW7e?!oÍPÇ 9a¨ÛíÁßø{¶'Ç1^YÝ_S²¢êÆ€†ýY&3MBs­l´àV-¿ûQ5ÉÎÖÕ{ÕLÔy³.£KÝ5ýØðœ2Ã#AžˆŸšˆ„ÕË:*P\´©äýAµâ¨m…ÉUñõÀüøÞÿÿŸS¸bendstream endobj 346 0 obj << /Type /Page /Contents 349 0 R /Resources 348 0 R /MediaBox [0 0 595.276 841.89] /Parent 358 0 R >> endobj 347 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figs/logo.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 359 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 153 39] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R4 360 0 R >>/Font << /R10 361 0 R >> >> /Length 362 0 R /Filter /FlateDecode >> stream xœíXÍŠG ¾×SÔ19D)©þ¯`È)ñÌ xqð‚×1˜¼}>UW©»g„ÓvæSë_*µjÞ| öAÿæçíÕ½¹ß'ÿò‡{ó<­Û«ÿ銇€)øë·‰°Ï‘RmÙwê‰9ùë«ûîrûòñó×ﯿ»Ÿ¯þ7¨ƒ›šà_‰ì¿¼@ú£ãFR¡¿Páâ_—àE‚ÿäR‚ÒâcaªÑŸQ•B]ãÍqà@±ù:U”L©{îL%'å–©%/E(3žÜã$L€©Q„A¤˜)×éG(nÍ<~ÀSÇD½ÈÁ½ ÕRÿaF³‹Ì`¥B'ÜAMÑAý)ŸÜ—ý7¤ö—ÿSû_§ö2úýûwð•;Åì%àÜä¦Ù1RFâ8QDö˜*ACej,ƒ In ´LçE™‚çZ'†6–@µõC­Ö§D{,8GšìF¹$dœ©êïaEÊ;øK§ò¸z‘Ä;˜Õk9òg¸ˆš-…w°äB!ý9ôÍñkG(JOÍrs­4´‹/‰B¯âï`­’=¬Å\ê¡ÆÖ¸1I:Jpb6ø¡qµ/#çÜ"ê9 €/(ã$0DJLÃôbÙq­”«U£$m “ŸµÊçw0#}m0ϧykš%lд/ʲ¿,÷Ìõ›Ó±¬ªmú$!]œž}œÔ„jë4“^ ·.‚tÌŠŽÏب 0&ŒöÝNJ ˜¼à¥5¦‰U" aòÎÑ*e•X /FX>LËÅSZ¨gŒêb3¶ aÞ!ª” t±QR¼تÓ$ð6†uZ- †ê˜Ð]Aâ>·7¨˜ C`2D ž!06FYNL æä) -דvqE,=í}˜ÑGM¬È¹ãmW¢õÀŽg“ì„­‹L~v™°>Ìh£¬‹£5Ä—w †— #,¦‚åâ)-×3FuY/Zë«AÈ6Ö+,å¶uÃ6xwʘÌ&?÷Òo“½J[ÉÎ_²MöšEY.,ÓÃSZ¨§ é‚5‹aÒ¥5cñÑYÑðú”Z‚u¶uéƒï!îX7Ë*cUZ”‚ G%¦†ñ!1mL ‰\) ‰ÉwlSƒa³±(Ë‹¥Á¼<Ç¡åzÞØ.¶n¢’ØEÇÎ`¥_`Ý}=ÖÎB7¼ÝŠÆÂºa,Ì“Èc#/!´ý5±J„Šî:p„D•&6 Þ=Øäžb+áSÆ¥‹;ÏY’†ÃŠAšˆqB€I7Êx¸~þ îÛÝj”ÿ_hÑ›Q;Üj·+Ý?þíYLzClRpMÑßN~ýÓ~7Ñ¿¿)dˆendstream endobj 359 0 obj << /Producer (GNU Ghostscript 7.07) >> endobj 360 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 361 0 obj << /Subtype /Type1 /BaseFont /ZRVYFC#2BTimes-BoldItalic /Type /Font /Name /R10 /FontDescriptor 363 0 R /FirstChar 32 /LastChar 251 /Widths [ 250 389 555 500 500 833 778 333 333 333 500 570 250 333 250 278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 832 667 667 667 722 667 667 722 778 389 500 667 611 889 722 722 611 722 667 556 611 722 667 889 667 611 611 333 278 333 570 500 333 500 500 444 500 444 333 500 556 278 278 500 278 778 556 500 500 500 389 389 278 556 444 667 500 444 389 348 220 348 570 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 389 500 500 167 500 500 500 500 278 500 500 333 333 556 556 250 500 500 500 250 250 500 350 333 500 500 500 1000 1000 250 500 250 333 333 333 333 333 333 333 333 250 333 333 250 333 333 333 1000 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 944 250 266 250 250 250 250 611 722 944 300 250 250 250 250 250 722 250 250 250 278 250 250 278 500 722 500] >> endobj 362 0 obj 998 endobj 363 0 obj << /Type /FontDescriptor /FontName /ZRVYFC#2BTimes-BoldItalic /FontBBox [ -200 -324 1230 964] /Flags 98 /Ascent 964 /CapHeight 685 /Descent -324 /ItalicAngle -17 /StemV 148 /MissingWidth 250 /XHeight 462 /CharSet (/P/S/c/i/p/r/t/y) /FontFile3 364 0 R >> endobj 364 0 obj << /Subtype /Type1C /Filter /FlateDecode /Length 365 0 R >> stream xœeRkLSw¿—B¹ T|tkƒr¯Ë|™)#™8—Åá "Џ¢ Š­´pKoŸÒ–RhéJù+¨€H[hm XpÈQöÁl>—ma[f²eš}rfYv®»~XͲøa_NNÎïœóû_Ž%'a8Ž‹*KËN(Èy_©’ë¶¿§¦e…z)­<ýÛÊfáìú$v;Å-¯O¾÷wEÊìðHZÆÈúäk º.®O&ÆÃñ¦Ápš1i•u =µURZ¾-'çõ•ùùùT­é?„Ú'×)ë©Í‰Ä(§ÕŒJÞ¨›*HtÓ rªŽ61 %•Éä²çceRZÞ@PÒJ†Q©­Û¨Ü;vnO„Ü#JU­AG•ªUÒFêˆ:Ÿ:LËeJƒŠú÷’ÿㆦÓL‰V¯<Ža•Ø>ì¶;ŽI°",[‘ðKÆ:±ÇxkRjRMRŒ—É›†.[ÂI!•uq–i¼!ö áêéô¸.¶ùj‡÷E¸¼‹¯!éí:“Ö¨fŒfÔŽš<Ù«í7!B£Ó4Ö™ØÒøÝ%^‚7! ÚÐ"ÚªW1 ­óØ&LÙ#Ö^jA*“ô'¶}'2ÀJ $›OÚêœEN"¡¢å6+ˆàÖÁ6HçÁ×°Qxò­¯ADjúæ‡ÓwÈÀbh"„ï@{›ËítÚI»ÅÕŠl„ÊoˆL¦ænTÍr¹W¹]\^î—Å?ºæ›ŠfÆ}£±Oœ4ù1œ-†Õ¼ËlŽpÁÝïBMÈn?ÝR¹å™Hd9bk©E„“óA~å9Kš@Þ¾ÈÈW}“¢®Á˜É뺄į@!ìýVºXXZݰ«„œ…ÔM™³Ü)o0àÖ»\E [êŠhI½º³oÌ× >"'~˜ôMø¯FüwB ?\Â융Ãf¤< ‡Ü^wOg¸ã‚‘Õ¥s¸UÏ$"K™­µÜAhaÑŸz¼ËÒ‚h 7Òí» 'EÓ®ÑÎ"`÷_ËþdïMŽ$¹8˜w…ž „º{ú/\èEÄpý1…½ÊJ“š’3úýÈŠZÏ™Ï%dˆÑ%X¾ðD«äÖäLdð‡¯]ë¾òdxvêãÀ¸u£—Ç>ltøõ‡çãú€²¢¶‚ËÝCÞùÑæ¦.£M,€°ý><žÇ!ÊJ„ü«°)EÁ—ì>Q»GE(>K=ÈÙ­m ³X6©™¿üq7Û0¤,Ó0$v8ú<##ßLƒ€ŒÀÊ”üÄ66'dá@'¾ÃzV#ӛힾÞÞh——|¿HlûÛÞqŠ™Ôk>‡ÑÑÑì2“Ǹ‡úC5jŸ™ÔÌÝš ÿy?»š]*hZ!›RÍ̆C33 á3¤€½aŠ>Ätck~‡ È„Œ—×.Ÿ7 C|ï”§w  ÁŽËŽOÌÑöxÂlê× óçª{œà7²x±y-·ãs·¼Zɭ̺RÖ.Ä¡*EÅ·›¬#²#s·ÖC¬]ªazÔY?ï-.‰é1ô™Éqé\õçÕßBUÈЮ³ô2ES%*GU~í|SØrÝj> endobj 351 0 obj << /D [346 0 R /XYZ 72 768.281 null] >> endobj 348 0 obj << /Font << /F19 354 0 R /F17 357 0 R >> /XObject << /Im1 347 0 R >> /ProcSet [ /PDF /Text ] >> endobj 368 0 obj << /Length 148 /Filter /FlateDecode >> stream xÚm±Â@†wž‚Q‡ÃãÎ^a5Q“nÆÛšN6º´ƒ“¯/ÕzvhX€ÿ½c°–DAo#x|X÷ > endobj 369 0 obj << /D [367 0 R /XYZ 72 786.281 null] >> endobj 366 0 obj << /Font << /F21 372 0 R >> /ProcSet [ /PDF /Text ] >> endobj 375 0 obj << /Length 1770 /Filter /FlateDecode >> stream xÚí›ßoÛ6ÇßýWèQ~'þ&÷2¤MÛµÐnÉ€mœÄM<$vç(M÷ßï(ŠGÙɱÅuKb­eé¯zŸãÝ‘RxÕÂ^YQYg˜p¼:¾˜´Õ)œ}1áÃUÕ æŒ†ã[.6éjc³0Øü9y÷¡­NÀöÕ¤eÞ›êŽ[¦¼«.&8\ÿý|r0ùGk«†3éõÍQ$ØÆQ¸÷£„4pm ã\…‘žN~x.DÅ-\W‡+!%SJUÆxæ<¯OÞÕíÓFqW?]-»ù²›òúrúáðÕäÙ! ãåX{'78)Þ ¯<óF†ûƒëÚi&„êoO/týr9•¢îÖ«iŸ'Wp‹ÇÓ†×Ýbµ §ZÁÁîù‡ç.Åóð_m8ÈÉ8ƒy+DýúóT¸z¾þ¼€±æa¬kâ¾fÓF·íèCù[Nþ×¾›ÐׯmÑW!Xœª´±ÀTÝ>›fdÔÓÙ'Þ³ªŸ¢Ø`Sƒièkå7ƒ~õÀ?A؇RˆüFJUÏÂñI8–õ›E÷¾ÍÎÏ/ƒÜã@=¸­Œ:‘¨Çî'Q—Ä5-–PK˜ß2¡–êé“uÈÝj½˜OãÍïü{ƒ7ËÈQd”Ä0¶Ä¶ëF+YkÍ ÔןW¡n@f—û«øù2~°ôYÿïOp†k%ký 5D` Ù;Åãt¹Éâ4&ŽP=Ïâ ÈFîÂiU½U¦N##*œ’I@¡©p*Š¥p*ˆñÄ´QËZn÷ž~ßêþÂdÕ¥ÿ/Ùñ;ò\Uæ›H¾#—[’oI ùÒbÈ— æEæ«nòÝ_\vë€xȵ¡tgÖÖÚŽuðPk6"±ŽK/MÎN6"Àsþ)G§•)£ I9»ž“¯A”¤2)5¬˜)£ÈÍôù—n{¡Ôïv±ÛíÜD]XFŽ6$ò ‚“/P”¤9)•&¶7L¦/‰K¦}´·éä.‡o Žž+’F tö>͹ “0“:‰²uL¤,6(¿½*¡w}Ù&äè¸"d4¡ gçÓ : 2©3doÓ2™¶»Ô¼_Ä—)>ÅÇÂø‡ŒðŽÑGÑ£ …>3áäÃÒ‚NBOêàKR°–Nè1‰àò¸•»¹áôN+òM^t;M—I¿%&4ßüKfhñ¾Mendstream endobj 374 0 obj << /Type /Page /Contents 375 0 R /Resources 373 0 R /MediaBox [0 0 595.276 841.89] /Parent 358 0 R /Annots [ 380 0 R 381 0 R 385 0 R 386 0 R 387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 394 0 R 398 0 R 399 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R ] >> endobj 380 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [71.004 584.227 151.106 593.138] /Subtype /Link /A << /S /GoTo /D (chapter.1) >> >> endobj 381 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 566.197 151.563 574.998] /Subtype /Link /A << /S /GoTo /D (section.1.1) >> >> endobj 385 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 548.167 217.649 557.078] /Subtype /Link /A << /S /GoTo /D (section.1.2) >> >> endobj 386 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 530.138 146.028 539.049] /Subtype /Link /A << /S /GoTo /D (section.1.3) >> >> endobj 387 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [71.004 502.08 155.866 510.991] /Subtype /Link /A << /S /GoTo /D (chapter.2) >> >> endobj 388 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 482.113 177.604 492.961] /Subtype /Link /A << /S /GoTo /D (section.2.1) >> >> endobj 389 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 464.083 213.442 474.931] /Subtype /Link /A << /S /GoTo /D (subsection.2.1.1) >> >> endobj 390 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 446.053 274.879 456.901] /Subtype /Link /A << /S /GoTo /D (subsection.2.1.2) >> >> endobj 391 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 427.47 202.013 439.425] /Subtype /Link /A << /S /GoTo /D (subsection.2.1.3) >> >> endobj 392 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 409.44 222.713 421.395] /Subtype /Link /A << /S /GoTo /D (subsection.2.1.4) >> >> endobj 393 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 391.963 186.155 402.811] /Subtype /Link /A << /S /GoTo /D (section.2.2) >> >> endobj 394 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 373.726 189.058 384.781] /Subtype /Link /A << /S /GoTo /D (subsection.2.2.1) >> >> endobj 398 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 355.903 234.502 366.752] /Subtype /Link /A << /S /GoTo /D (section.2.3) >> >> endobj 399 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [71.004 327.569 172.028 338.694] /Subtype /Link /A << /S /GoTo /D (chapter.3) >> >> endobj 403 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 309.816 168.112 320.664] /Subtype /Link /A << /S /GoTo /D (section.3.1) >> >> endobj 404 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 291.233 178.075 303.188] /Subtype /Link /A << /S /GoTo /D (subsection.3.1.1) >> >> endobj 405 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 273.203 193.102 285.158] /Subtype /Link /A << /S /GoTo /D (subsection.3.1.2) >> >> endobj 406 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 255.173 171.267 267.128] /Subtype /Link /A << /S /GoTo /D (subsection.3.1.3) >> >> endobj 407 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 237.696 184.412 248.544] /Subtype /Link /A << /S /GoTo /D (section.3.2) >> >> endobj 408 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 221.603 230.268 230.514] /Subtype /Link /A << /S /GoTo /D (subsection.3.2.1) >> >> endobj 409 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 201.083 193.24 213.038] /Subtype /Link /A << /S /GoTo /D (subsection.3.2.2) >> >> endobj 410 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 183.053 175.971 195.008] /Subtype /Link /A << /S /GoTo /D (subsection.3.2.3) >> >> endobj 411 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 165.023 166.95 176.978] /Subtype /Link /A << /S /GoTo /D (subsection.3.2.4) >> >> endobj 412 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 146.993 171.377 158.948] /Subtype /Link /A << /S /GoTo /D (subsection.3.2.5) >> >> endobj 413 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 128.963 198.138 140.918] /Subtype /Link /A << /S /GoTo /D (subsection.3.2.6) >> >> endobj 414 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 111.486 167.641 122.335] /Subtype /Link /A << /S /GoTo /D (section.3.3) >> >> endobj 415 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 92.903 170.409 104.858] /Subtype /Link /A << /S /GoTo /D (subsection.3.3.1) >> >> endobj 416 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 74.873 168.748 86.828] /Subtype /Link /A << /S /GoTo /D (subsection.3.3.2) >> >> endobj 417 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 57.397 142.555 68.134] /Subtype /Link /A << /S /GoTo /D (section.3.4) >> >> endobj 418 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 38.813 178.254 50.768] /Subtype /Link /A << /S /GoTo /D (subsection.3.4.1) >> >> endobj 379 0 obj << /D [374 0 R /XYZ 72 608.244 null] >> endobj 373 0 obj << /Font << /F22 378 0 R /F21 372 0 R /F8 384 0 R /F7 397 0 R /F26 402 0 R >> /ProcSet [ /PDF /Text ] >> endobj 421 0 obj << /Length 2170 /Filter /FlateDecode >> stream xÚíœ]sÛ¶†ïõ+tI]ˆ%>H—q’vÚIgìétÚÓ Z¡µ–äJLÿûî‚ÑÞ•ÏœžÖ±<™Œ>¸â+í³Ä. Å´€bZËimª\1]¬&Åô Þýf"üÑ9ž'ÇOÎ'_}-ÅÔæ¶RÓóËþã67•™žø9[.g¿œ7UÊäRX8¾ùòÝLdߟ¿þþü N^ŸÇó»—¹1 Ïþûäç_ŠéøßMŠ\Y3ýž¹°vºšèB‚Né__OÎ&ïãy†cø©û~ˆ®µ³¸ókÌðcàˆÕzZ—&W¢ÿA*/gsQH™ý03*kÝf»›Í•ÒY³†ŸõŸ«ìmÓmáÕrÑ‚uº¨²¬Å‡²(î>ü×ÇþÖ“ýoÇFu¥s[¨è¹{x›yb40>掚GɪEÜ´ZÀ­!j X{Ü•Çý®û@Îíln¬x4¾€0ðåÃ`0"à !ħÀVŒ_¥±H¦q `/´Î^n®7xqÿ§( øoÛêÑøÇB„BíÆ£ŒHÔ‰óÔœZDM«EԅΕŒ¤¥'}:“&knfsYgívà]óÌÛsê=ÇãŽ6$íÁÿ lF*²&¥ê Fùµò¨_Ã}³»Wº~dƒë¿Ú{ŽE=ØP¨ÿÓ¨9©€z$5*B+—æµÓÑ0BË2{Õþ1S2k¯77+Lãí_vP° YÈL ü6û1£]A0÷•‡v)‹3ˆ–O«eÝr}Õ}7 ¾^Ì`´øØbÍ'êãÍù•K°ú@¸ Fd¼xÐ#º7`8µ1#µqÈÈEí”^À DvºŽ1R/„Ír³ÜPû¿Y^l,n1AÈÚfRÑ!TçÖöéì†Q]K($V.Ý !~pZtn-³_Ûè0ˆÀðØëÇÒ¨^˜F$FT,KŠŠ%V-Ä£2MYWQ ˜#ucuv²ÁªâóiL]>gš}ÞÞs<ïÁˆä`xsj‘7­ycÊ)â5ŽU$ò>w}‚_lÛ&™1ØúˆñzGñx#oâp/§ñÒj¾+Pbòˆte?‚» Âf׵ؒF?÷ÞŸ| Fd$\˜ àÔbÐj!ÜTÒÇ€êcÀ]ßÍõo3×çÃFàÓ¿°ÿîXèÝʇB´!#a€#5ŒTŒƒ}©Q™¨]æWNçÊD!ð±íKÂwרÿ…qàëÂv Çe¬ó|ᇛ-ŽP9êL–)O\ !ôsáøÐÀÒ.k˜„$FTh[%[¬Z.F-Ú%#˜#u«ªPH`ýXgŸ÷å^9qœUEðÏz0"Y'ÞgXsj‘5­Y»œSFÖ²gí' cuQÚ\•UüÔÁ52™[cï]!›‡sÍ““Ýù–Œ„ºÜû–"éƒZù¨G…ÿG¸RÑ78‘‰>ÚÓãóˆ>N-F­æË‰.ŸôÉ&*Ý×2¯üºfŸd:¬qܳͶܹհ•³m¶¸Æižx:ñþâ!F$äÄï dN-B¦Õâƒ=ñ¢ ”c:qE ` ìp];Ⱦ ‹ž l~O>‰x_ñ„#’pâs†0§ Ój°ÂVxBXŽŸ]/qkB›ÖÙÆWÕ>dxÒŒƒ·XƉÅ8õº¬(ƬZ`̨EÆ•‰Ýid¬zƸÑaAx O®[?½ C4 Úðþo÷ìPÙ¹%¼] ^óeÒô~áiF$ÍÄ¿’\˜bÕ"MZÍ'^U LÅ'Þ~ýyã€u-æÙª:ú™]ð }0"±'$TAbçÔ"vZ-^ÄJƆ4p¿“Š}?Ñ‘Ž»pÔîg{aà¾'5ÛòÉ×Þg<éÁˆ$øž!Í©EÒ´Z$-ôiù á:\êßgæ沨Žb\ƃWùR×+rŘU‹ Gj£V ti»o9¾œÍ«Êfï?5}ÏïÓªoö}»¾t­:„¹âVeY‹L¹6|‹¹4yá‹‹Wpja²ÓÛ³…ÛTŠç¸é|Çñ¦ï-.vþõ®\ÃØ€Ù}áNñ5‹™‚R`VAb¹‚ø’¢4E¦ÊC»^¹åêÒ¸-2Ÿ×x¼ Ñûïvš’0—öÀŒ11¢b:˜¸˜&ç¬ZˆiF- ^&•ÒV´±ólDövw¸„ìs½Û¬ço]|÷¯ûxÆqíÛõLÚlÌ.ÛífÕÆ:¦.Ê/cd þà)F$Åį EN-R¤Õ"E˜8Ž(JOÆ(4>Îr0åúC²»SÑvå—™c‚Ox’ƒI2ñ­"ç~¬Z$I«’oQ°uJRõ$±žh®ÖÀ3^p&)/ñÙþ5'ÔS«‚wX¦‰Å4õ²"g€¬Z`ʨE¦0I1Õ=ÓýøµkË]ÀûÛÛ¹›É®?ö²Á×,;|¸Å4üäªÁàžê`DRMü¬,I•S‹Ti5?¯%æÖP7ɾnzwgº†Ý–J<ï x@x‡òQ0‘Q€ÑääU‹Q@«Åk[É4 ’úéä,¬ìAanŸ·ýíÃönãaF$ìÄý lN-¦Õ"l¡Ç°e€ýƵóષ÷mÆ8RÊÞ_<åÁˆ¤œø¡Ì©EÊ´Z l1¡Û²¯À^µßsãš8µxæÜóñc16åÄïšìåpR1-o3cľ ƒJLgÛ¶íkì3l~49¦óBˆ#¾ûËf<Øw™0椆[¹1®Š\¥„Ëžð›f…Yù7ñf8nzÖ§Øçjp,ksŒ·|¡»ø;x¼yûNp¸–ä½;¤H¼q‡‰;ä>Õ*PÝ…Ž†(Šç›,Æ›Y± ô6–ƒliÿæ²Ìï½Ñ/þ‡ôà_>R&Ôendstream endobj 420 0 obj << /Type /Page /Contents 421 0 R /Resources 419 0 R /MediaBox [0 0 595.276 841.89] /Parent 358 0 R /Annots [ 422 0 R 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R ] >> endobj 422 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 757.322 203.175 766.233] /Subtype /Link /A << /S /GoTo /D (section.3.5) >> >> endobj 423 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 739.323 136.342 748.234] /Subtype /Link /A << /S /GoTo /D (section.3.6) >> >> endobj 424 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 718.832 174.311 730.788] /Subtype /Link /A << /S /GoTo /D (subsection.3.6.1) >> >> endobj 425 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 700.833 176.11 712.788] /Subtype /Link /A << /S /GoTo /D (subsection.3.6.2) >> >> endobj 426 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 682.833 169.772 694.789] /Subtype /Link /A << /S /GoTo /D (subsection.3.6.3) >> >> endobj 427 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [71.004 655.38 153.534 666.228] /Subtype /Link /A << /S /GoTo /D (chapter.4) >> >> endobj 428 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 637.381 195.316 648.229] /Subtype /Link /A << /S /GoTo /D (section.4.1) >> >> endobj 429 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [71.004 609.374 192.625 620.222] /Subtype /Link /A << /S /GoTo /D (appendix.A) >> >> endobj 430 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 591.374 187.013 602.223] /Subtype /Link /A << /S /GoTo /D (section.A.1) >> >> endobj 431 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 572.821 167.503 584.777] /Subtype /Link /A << /S /GoTo /D (subsection.A.1.1) >> >> endobj 432 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 554.822 189.532 566.777] /Subtype /Link /A << /S /GoTo /D (subsection.A.1.2) >> >> endobj 433 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 539.313 142.403 548.113] /Subtype /Link /A << /S /GoTo /D (section.A.2) >> >> endobj 434 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 521.314 134.156 530.225] /Subtype /Link /A << /S /GoTo /D (section.A.3) >> >> endobj 435 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [71.004 491.37 238.003 502.218] /Subtype /Link /A << /S /GoTo /D (appendix.B) >> >> endobj 436 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 473.37 187.013 484.218] /Subtype /Link /A << /S /GoTo /D (section.B.1) >> >> endobj 437 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 454.817 185.768 466.772] /Subtype /Link /A << /S /GoTo /D (subsection.B.1.1) >> >> endobj 438 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 436.818 176.071 448.773] /Subtype /Link /A << /S /GoTo /D (subsection.B.1.2) >> >> endobj 439 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 419.372 226.394 430.22] /Subtype /Link /A << /S /GoTo /D (section.B.2) >> >> endobj 440 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 400.819 220.499 412.774] /Subtype /Link /A << /S /GoTo /D (subsection.B.2.1) >> >> endobj 441 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 382.819 222.159 394.774] /Subtype /Link /A << /S /GoTo /D (subsection.B.2.2) >> >> endobj 442 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 365.373 268.098 376.221] /Subtype /Link /A << /S /GoTo /D (subsection.B.2.3) >> >> endobj 443 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 347.374 187.069 358.111] /Subtype /Link /A << /S /GoTo /D (section.B.3) >> >> endobj 444 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 328.821 228.746 340.776] /Subtype /Link /A << /S /GoTo /D (subsection.B.3.1) >> >> endobj 445 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 311.375 217.676 322.223] /Subtype /Link /A << /S /GoTo /D (subsection.B.3.2) >> >> endobj 446 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [71.004 283.368 239.531 294.216] /Subtype /Link /A << /S /GoTo /D (appendix.C) >> >> endobj 447 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [71.004 255.361 249.398 266.209] /Subtype /Link /A << /S /GoTo /D (appendix.D) >> >> endobj 448 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 237.362 152.836 248.21] /Subtype /Link /A << /S /GoTo /D (section.D.1) >> >> endobj 449 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 219.362 285.422 230.21] /Subtype /Link /A << /S /GoTo /D (subsection.D.1.1) >> >> endobj 450 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 203.3 270.976 212.211] /Subtype /Link /A << /S /GoTo /D (subsection.D.1.2) >> >> endobj 451 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 183.363 238.847 194.211] /Subtype /Link /A << /S /GoTo /D (subsection.D.1.3) >> >> endobj 452 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 165.364 237.989 176.212] /Subtype /Link /A << /S /GoTo /D (subsection.D.1.4) >> >> endobj 453 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 147.364 144.395 158.212] /Subtype /Link /A << /S /GoTo /D (section.D.2) >> >> endobj 454 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 131.302 172.346 140.102] /Subtype /Link /A << /S /GoTo /D (subsection.D.2.1) >> >> endobj 455 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 113.302 174.283 122.103] /Subtype /Link /A << /S /GoTo /D (subsection.D.2.2) >> >> endobj 456 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 95.303 180.261 104.103] /Subtype /Link /A << /S /GoTo /D (subsection.D.2.3) >> >> endobj 457 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 75.366 189.393 86.103] /Subtype /Link /A << /S /GoTo /D (subsection.D.2.4) >> >> endobj 458 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 59.304 204.448 68.215] /Subtype /Link /A << /S /GoTo /D (subsection.D.2.5) >> >> endobj 459 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 41.304 166.202 50.104] /Subtype /Link /A << /S /GoTo /D (subsection.D.2.6) >> >> endobj 419 0 obj << /Font << /F21 372 0 R /F8 384 0 R >> /ProcSet [ /PDF /Text ] >> endobj 462 0 obj << /Length 1012 /Filter /FlateDecode >> stream xÚí™MoÓ@†ïþ>®YöÛ»G  -4¤ª‡4 ©KÚ”$ñï™õÇz²Ã¥H¨‰"Åvfì×û>ãYÇæ9ƒÏK‘—ÖPay>»ÏX¾€_ßf¼Ž <Šâ'“ìÅÁsG‘ùäk³»£ÖØ|rsI^œœNƧ“‹âjò>—NRÉ-ËG«ªqRùH6ž‘úšZ+½Ä÷ìòŠå7p*ï3F¥³ùOXg”;—ßgŠ Óíö2»È>…ãô1¿×¾Ñ¨RÕ Éö#â †£m^j[Ÿº?ñ×TPXYŒ¬åäÃüaSŒ´Q„‚1¿PÎE[ÃÅûB;•QÔ1ŒÛ  ÍEI»vã(ñ‡Z‹U ¸Ój·‚²±&ÆmÜ+X_¯Wko?ÂÂnmÃa÷IIØ‘ýJ&acjvZ-À‚*-cØ®…½*F¢$7?à§åtë¡K&Ž˜[ÃpÌ}Rsd<‚S ˜Ój3ST‹˜2gÀ0ŸÃúít3‡-©ÈÅ-lV_·ð=÷3@7J"æÆ0œrÈIBîmG#RñPjç¾Ã”†¡kq—½"ç¿.fkÏÒS|ÜzÖ’Œ—óÙ¶ÁÊÉꡚùõ rvíQ“»û¬ÝἂLgþû[Ñ釀Ò~<ÃbƒA+•xIl*{\—4%È»‡BX²­µ¡µØ¦µÔçàë­Z=øcŸI]=q=˜·ûKAFI©ŠìRê’Ô©’DÕºšDÔàžÒW‚ù§Ô®¯ÑT‚¯5­É]×ef[(Bkø³l0O]­§x!ôIÉBˆØ …€©…BH«uó)Ê U…®à ¥¼<}í§IÓ-ƒ²æào1:³pÄ}Rqd:‚S ˆÓj1LQÖ©±hŸî0Ö\0ÜÖ&nŸ”„ÙÀÅÔÜ´ZWûŽnx W6pÏ>._mÿ@e(è():¶^™hT­¨ÐÆQ&l ZµWñéc£fáˆû¤$âÈt1¦§ÕbÍ)s:F¬Ä_ü úó°W(æÖ0sŸ”įÊ$fL-`N«ÌRRndŒÙ´Wò>ÎJ0àÖ*pŸ”YŽÆÔà´ZÌ5¾eש'´Çɸó r’|{ǼˆT ›”êà*WRáʘ®mè~žoêwG›ú‘¬áìxÃÕÐé,C!GI)ʱõʦ0£jgD-€.•fð·É5 _M§³ª¡,õokŽ·OJâ GðbjïŽÚÎcY“´2Í#–“êzY_¶«Åzúx럨þjß CëÞ +·ç•0/éÞûð–7þÜÑÃendstream endobj 461 0 obj << /Type /Page /Contents 462 0 R /Resources 460 0 R /MediaBox [0 0 595.276 841.89] /Parent 358 0 R /Annots [ 464 0 R 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R ] >> endobj 464 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 757.322 162.854 766.122] /Subtype /Link /A << /S /GoTo /D (subsection.D.2.7) >> >> endobj 465 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 739.389 171.322 748.19] /Subtype /Link /A << /S /GoTo /D (subsection.D.2.8) >> >> endobj 466 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 721.457 188.701 730.368] /Subtype /Link /A << /S /GoTo /D (subsection.D.2.9) >> >> endobj 467 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 703.524 200.795 712.435] /Subtype /Link /A << /S /GoTo /D (subsection.D.2.10) >> >> endobj 468 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [71.004 673.691 272.291 684.54] /Subtype /Link /A << /S /GoTo /D (appendix.E) >> >> endobj 469 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 657.696 165.4 666.607] /Subtype /Link /A << /S /GoTo /D (section.E.1) >> >> endobj 470 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [85.948 637.826 144.395 648.674] /Subtype /Link /A << /S /GoTo /D (section.E.2) >> >> endobj 471 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 619.893 186.875 630.631] /Subtype /Link /A << /S /GoTo /D (subsection.E.2.1) >> >> endobj 472 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 601.96 194.347 612.698] /Subtype /Link /A << /S /GoTo /D (subsection.E.2.2) >> >> endobj 473 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 584.028 179.403 594.765] /Subtype /Link /A << /S /GoTo /D (subsection.E.2.3) >> >> endobj 474 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 566.095 186.875 576.832] /Subtype /Link /A << /S /GoTo /D (subsection.E.2.4) >> >> endobj 475 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 548.162 186.598 558.9] /Subtype /Link /A << /S /GoTo /D (subsection.E.2.5) >> >> endobj 476 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 530.229 194.07 540.967] /Subtype /Link /A << /S /GoTo /D (subsection.E.2.6) >> >> endobj 477 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 512.297 186.737 523.034] /Subtype /Link /A << /S /GoTo /D (subsection.E.2.7) >> >> endobj 478 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 496.301 177.881 505.101] /Subtype /Link /A << /S /GoTo /D (subsection.E.2.8) >> >> endobj 479 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [108.862 476.431 185.381 487.169] /Subtype /Link /A << /S /GoTo /D (subsection.E.2.9) >> >> endobj 480 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [71.004 448.536 137.262 459.384] /Subtype /Link /A << /S /GoTo /D (section*.3) >> >> endobj 463 0 obj << /D [461 0 R /XYZ 72 786.281 null] >> endobj 460 0 obj << /Font << /F21 372 0 R /F8 384 0 R >> /ProcSet [ /PDF /Text ] >> endobj 483 0 obj << /Length 170 /Filter /FlateDecode >> stream xÚm±‚@ †÷>EG¨×;vÕ  Æpa’hLdpÑ×÷NÈ-½~ý¿»2šp ‹…äd…ñ<€Ákè€GšœÎøÖÃzo•4wè/߸’䂾oW·gÒù ²¬A›»c«ڗµo"…ÒOþO<#íh;ƒ}øE†œ ¾BmˆUq€±ál¼ß¡Óäù³˜ZZä7‘¹/o;Yæð ‘è<endstream endobj 482 0 obj << /Type /Page /Contents 483 0 R /Resources 481 0 R /MediaBox [0 0 595.276 841.89] /Parent 358 0 R >> endobj 484 0 obj << /D [482 0 R /XYZ 72 786.281 null] >> endobj 481 0 obj << /Font << /F21 372 0 R >> /ProcSet [ /PDF /Text ] >> endobj 487 0 obj << /Length 2964 /Filter /FlateDecode >> stream xÚÝ]Û¸ñ}…ßN"žH‰ú8 iqW$(šk³E[äò ØZ[ùã,9›ý÷/J”%{ƒ&O½kŠÎó=ÃÓ‹þéEfYž*“ëÅjw-60û—;-«IdTžZÏ,†n5ÔÆ*]äôÇÝûÑb Àoî"UéâÆ‘J`yw×ã£ïæîÝÝß{tàQqa§Xb€e,º(FXð{Œ%„ …©-TšÓyþt÷ã/Æ,t¦Œ¶‹û‡…1††©‰•MÒÅýú} Z†‰Îƒ×ûîtX†& ÖçUW/upØ/?Ü¿¹ûù¾§ÒH«ì ×M€ï&{rIÏ¢é×¾ MèÃ8Q6K¯b£½`ã‘@ÏÈÀ’ 2È:Q12eP¨ÄÄ •E1Ë@ià·BvtîCk•[DŽ`o?/cTËP§Ï(!>^J)É•¤ÙÂ;Æÿ~”#" yÛ·+(žÊ&EÏœ8ZªHc¼-¬ƒq¨ÌXºï¯OïV§úØ1_ò´'³±p¥n—aœeAÉ?ǥɃ§nË ÌSå '?-m”› 'óàápÂA¬ˆŸŽ›%©þ~Ã;·ø±Ù†œËFuGÈ¡ÐdÁ¡Å]]ÛcÁóÒú>N%nx¬÷ˆ† Õ2.¯è#!©6¥õQvxc2¼f¨µ*,³„îMR˰ç¶;Á™ñªIš‡üƒîôÄDyº;ð–Õ©*;ÙÞ™P%Ám?øïšç~‹t‚8Χª’xºHý#üiê•w:aÙñqVg‡Óõ¾Ü=u¼i4ºcù‘øØáßòÜN¢8ø++A¶HU‘%¤Vº%†¶½šª‰Šó컹'jVÙØâ´N˜àÏýt²fÿÍ„I+¾ÀQŽÀ!^U4|0& JœX3ü¶ly ¢¥[îyª)ñNšC}’»ÕûöˆŠvªÖn+©Ù…]ÇI¡¢œÌ;×–ÃDX;atâá?¼ %Bo‡3¹xDæ)^|w<´Ý„xfTª³1õ‹ è`&=™\âA‚`©M‚ ¶¤9cîmJ´Hžfæ’ú°ê„q1QOƒþ8£Ñg`ô:ËÞ Ð.ëÓ`ɈÂC·ìH‡eLgøŒà”*FD»ÁÎLA†Ð%O‚5 ?·Õùá1‚¡×hú·ÈF%UW‰7j«€@öêñT<Ž[دɣhPbÑɶâëâ¡j8éÙŒ•^y6Îb ÜaT¸LÑ ÷4ñÖIœ9çfš}/‚nÉ÷œ3 B†B# GÒöp]!yò {¡[ü^­Ø§Ê®3yï-•2ÛócÕ•ûMã¾Ú¸œ€OB©œ‘Æ6–ã£%w#vpTu+qÏI’÷[ǃ8 Ê#÷P’Šà9 cäÛˆÃI_á‡oH8k”Âà\SÒ\µsRBÏH;Ðu¼LÃãn+[W‡Ý‘ôÞ]•%,äûÍüƒlݜ骿l¦Š˜ýà;D¿Ï „>‘ö=1šˆŒ…x+$NÕL^©²&õ ö½ur :|$áE’ô(ð„pì’JÒ‚Ìà%™Pó¬Q6"ö Œ„ƒ’h;zûnˆŸ–r ü]SV!´–ˆ7Öz hƶwB[tXJþÜÖ›­sJ½³õ7„Cü_Ù>ñ> ¡È›ª<ù´zŸ!Êãëã<Ÿºžñ£¦Ï‚b [{R&ÈÔœèS«bk®‹~X¿*zyNô7(õ¢¿ 6#z‰ž-MüEy­(?‹9,å ‡IVÙg äUknhWeS¹hó‚ÁO‡ä ’ß"xOí:*sÇ hÙ±•†Z¯ðøÓ( Cˆšå¤{®rrX¿ÊIyŽ“7(õœ¼ 6ÃIØ–9Äœ3³ï¿B„)Q®>§ÜU¸3ÍÆuT(“æß9·ã|IßÈÇIör‰'JØ(xMB¢b3òŒ2•öº<‡õ«òçäyƒR/Ï j3òôˆ]—§+ú=¶0>= äÔpÚÎÿ¬y0T¼Ä£©?RÙ{zò“#Ü? >‹ò£zWw5#jçäaò\%Ùõ¤Â[¿&òŒœ½ö%vF>º …ýÆGËgʲÐržåJB£æÃy‡4ŶNÌ=ˆKÈ4¿®tÆ´¡~Ö‘Z++¯¡9·zëJ"$·ÔÆ0Éíéf3¬ÖàS3}=¯gÙäÊÚÆ<¬_5fyΘoPêù‚ÚŒ1{Ä^Q»¢q^;50ÈÈÄp‚’· wsª–×\ƒ×IØlÜ¥ªdaåZ n{¥ÔØ2~(0yo§<¦žCžÎ[ôïü~Á ”¹ª 'F©êpn ò Ðèí Yã´©1êgI ­µÎˆKÜæðšÎMµvÿPxûM‰=Gé÷Úìh,]w¯ÅÖÄû¡°¯^xÅŒŒÛчû¥–¯|¸_Âû8§ÀE%ÖõúeX¾¦¾ñŒöÞ ã”÷‚ÔTw=J‡l6Ôÿ87ä“Ò༧<¬e –—}æ¶Éz-b@æ¥q WÐt¼ä“O‰Ñ™Êu!î⧉31*K«<“úÃØ†×6ø3vê[~ €ƒz¥§bˆ'péê|ÛŒzMäJ ¾”æc_Z±®Õòz;¼”à‡´±øÛÃÜ#eE[þÿ)Àø:·Ûavu!h¡KGé"·ÙÅS“ƒû “—¦1J¼ ݼéZuÞƒt_þóo¯ïß½ÿaµûáÃäõ)URŒŽsùö$ð_žF8äÝ)I´ôd}È#'÷톲7÷¦jE@`4r)_@®ƒ7D`ð;nßÝ{ŽtÑ9Ö‘£àÂ%õ¬ ‹¾nYí&*¨A©[Ÿs6QÆ^/‡åk®@ žq7È8WpAjê B¼…ù1Ï–ô’¢É@üªÔázäÆD}wl3eu>Д„ö’PfU–Ç_}W¿qW¡ÜU/«RøoâÍbl›æ×oì®Þx„  öõÿgÛ·CÞëendstream endobj 486 0 obj << /Type /Page /Contents 487 0 R /Resources 485 0 R /MediaBox [0 0 595.276 841.89] /Parent 503 0 R >> endobj 6 0 obj << /D [486 0 R /XYZ 72 768.281 null] >> endobj 10 0 obj << /D [486 0 R /XYZ 72 561.899 null] >> endobj 14 0 obj << /D [486 0 R /XYZ 72 279.981 null] >> endobj 485 0 obj << /Font << /F22 378 0 R /F27 490 0 R /F28 493 0 R /F30 496 0 R /F8 384 0 R /F7 397 0 R /F14 499 0 R /F11 502 0 R /F26 402 0 R >> /ProcSet [ /PDF /Text ] >> endobj 507 0 obj << /Length 3146 /Filter /FlateDecode >> stream xÚÝ[{ܶÿÿ>…pçº"K‹©G­Û$p­}ZØF¡ÛÕîÊÞ•6’Ö—Åå¾{g†¤Þ:_Ò]†½9$g~ó$Esǃ?Ü …Fw–û ÏÙ@ëwÜô. {Ñéusñâ[Á˜Åïܬõð˜EAäܬ޹âz!€‡îŸ¶Éáš»õõ‚»iy½ð#ßå__/çîëüÚn]Ð,ÜÕqYgE~ýáæû‹onš•ibÅ¢ÈÇuºx÷ÁsVÀß÷óãȹƒgñ8vöÒÀ2ﻋ·kæiûp‰è1 ]%Jªßt¶ô É8 ŠŠ˜Ï£.[P¯XJÇ’ 0ï=EŒ9‹…r:3V2$£Õ¢v±óÂÞb¯’åµÝOÕ.©¶i0û›åø+Ý UR— œ,ßPŸr·ÉµˆÜÏøOª©«hÞ–Y²Ó44.ƒa›<i$<-±)ÉíSúU‡òH­ÀÅV7&f©Ušu†c6º!Oï~G Yfß{ÊÂ%…b2}¼×¥1‚Ï÷œð ¿á´àå{îËürÄ”@ÂÕ˜¥yLeÃy´(ήRyîÍa®pugáËIO: ¦ Ñ.Ôe¸·ZIúe]i˜UoÒÂ…î‹RS¦H“£¶kh¥·—Ì7ºÿ\úÅ·¡¦Jä˜K)G0OúÄÁ5EW&«€×4$7Ä¿bÊ—ØÌ¥æý›¦ç³­ÿè0ö3Ž2mì­È+&ð¤ûÏëHºÅQÓZ㣗E/ÍKæék©Q¾mV鑤NËCi%¯$2`V pzxßâ Z¦ï6·6ì»%ùÏq°ºÔ}Ä;)•û^ŽU­IeŠ®Z%pw¥;HøEÓ+/õs]˜ßmªzΫ›R¶aCCõÁ°D9¡/Áxžâ*vÄ¢3dä*Ãi›ÍËòòòœìÛäÙØgx îå÷Yø Ù8Ð,g!BÀgÒ÷'~Ó÷ŸM³°ÀSa0;õ`6ýd¨“aƈq·i4·b¾$hŒ^ì˜LCmvœù h¦]MD]jÎ"…“kG‹Á,kòoŒÖC„|¾Ü.ÿÛåÀ숓-štúÛ3³%d¡àSQºpÆ(uÈ©´{%Æ%Ðk-1w¿Ò}w”Ážïv†&ùÔ¤´fàªuülgŸâ{A1µød¼²îy x÷²ÌLeƒ¯`,…¤&°$uº²ƒuX¸È® €Ñ81&Ô Å°ôë¡yaX GA†^¯"z’dqĵå;?9¶Õ³¾0hxñz/œ? §£BàC»ï¬7¡ æ$£€TóCWÀ[9¡óÍ®''PT DÙ¡F¥‘UZS}À`ˆŸ"†0m‰WYÕ š¥ Á„/̺,öøºOut¯ô$)%’]’åMnÚ;­-|2 r÷9¯G¡yÀ¯aŽôÛéHÚ£Táõr„‘ —:sÈ‹¥âJ®¶¸ävgŒáÉëí ÈðTšàN Ç„$Pj§ÍyéjÚ–Én¨èˆ´ R 1ê£vv8ò¸ )ckBfjðâP`N É4°ëÛ¬Qˆ+„ 6 —¨ª¢4íÆ*h!È&­qæÅʬô×Ó[t¬z\W(Š‹šj—Ý¢ª2 ¦= iÀÀÕ:!_7e‚E’0¬ûßchU:5ÓaUÝ”!KcìU'öÃvÆ.‡» ž„¿ m%A±ðÜ ÖšÂZz=ðS÷nhŠ\OÄ&vRø *°/k |9fžO¢ô©æ>ç#ü¥Üç@áÀ!¹{b§Lu/ïéÞf’/˜QèùBBöq&­(  ´ K‚\£ /”P9é·l ÇÄçßO!æÁzg£Ã&Ai Õ.d|&â'D…±è ÙãpZË2ð[±c>Ï… £>#3³4£¥£®º cûqoå»m¶DkØ*ýûñØÍã2À:ÛÉrŽ{üׄÛRwlЮ>SI×}ÕÁ[H½ø°GSF¨©fÞ ™Þiƒ3 ]…®“eM§^SÕáÀ„t‡d«ž°5FU÷R‘¦™2ÿ!ÎìbŒ>*`¾>AávÄ¢3d¤ðá´(Òß|}óv´~+(Ù_¨gC3Z±«çBê/HY J4«ÌžÏÕú4%)Oº§Xë_Š;š¢0EŽ_[ETZ©Q‹®£öE®ßT^k=Lå`_úŒûñÿC†Z¶Ðác¹Ç’Œ]ý%»çËýóS0 Å”-U¦KÛ?•XPP›VÊôy¥m¢°h>æ½ ¬´öáw|Øâ/öÓ‡}JöÉÉÃ>ÙöWûdY†Ñ×&ç¡õ¥ú¹X×iNy€»o’ºMšmjHL2¤Š{èv«G$é^÷ëý¸~Ô—íÓ&ž—mžáž û€yš®Òn •….lDéŒAÆ dsžã|Ês[N÷š‚26übX†.`w#ƒ=¥N]Ø‹ÎqLK%}úó¿¶i²± ñëè³0ŒD†f´h/ãøÌ—ý5õžvš·´oÕøŒ³/n/H“OGÁŽx…á´]—± =ˆŸòQ,Íc( çÁ5­Ù´é·µ›ÜÚJÕ7|®ê+Q$&_mMsC¤yé©>ýøLûò"ßÛCþØUÝu\¨Ý‹Þg+.ì~öQ樣_è)òzs’Ð9Ùšøj³ö›&Ä—?ˆßöÙ sÐBu­Þº.5ª•9Ý›NM»Šž¶Ù‰XÄÏx[$ÉÂG3“¡è%&^–———SSGœŸ±Ø-ƒ³rúÈÆ}¹*–Ç}š×Ë]RU÷àbÙr—>L /‹Ô—#g…7$VøC²I«ú´KïÓý¡>MŠíóv‡{–b· ΊmH¬ØÇ*=$ËO ü}²¯öPMLJ.€Oÿ \S/Ìdç«Âz¨UŒ!±ŠÉÓ;Øæí“|u¯ŸÒúáÿ@ÏûÛâçûg¿`ü¾âôQ4É7»ôÙÔêx 5+žŒMøßÀ&üØtœÃÆ’Ì`s[&lð‰®N0úÌêŠÿ2ƒP1O…gŒPËà,B†d!2 Ñ‚„ðh  ]‰/šTÂ6(:cÀZg3$óîFV5ì—+þ¬…g„ž˜3± È3®‘ZþfñÒ3p‡¾’Íä+Ì)Bn›Ô÷Wüa'¥θªê08‹”!™êÍÃ;ÿÃý濾—’‰s>äé08+¼!±Â—é@ü¤,“SU—i½Ü>ÜÓɘš´¸ θÖê08 †!A0Èöoñ»Ü=Aðpÿ‡û‡%ü}@oÀN›³î¯½§€˜!½òžMa$ó½s+-ƒ³’_a0|Ò^`»ï?ñ{æÿ‹–ÁY, b1)£çÑéâùÊØ28+£!±úÖ.awžSRG1“⌫³–¿9™ ]Ÿ(ä!›üïÍõÆyOú7|Hendstream endobj 506 0 obj << /Type /Page /Contents 507 0 R /Resources 505 0 R /MediaBox [0 0 595.276 841.89] /Parent 503 0 R >> endobj 504 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figs/tutorial.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 511 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 203 140] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 512 0 R >>/Font << /R28 517 0 R /R25 520 0 R /R22 525 0 R /R19 530 0 R /R16 533 0 R /R13 536 0 R /R10 539 0 R >> >> /Length 540 0 R /Filter /FlateDecode >> stream xœÍVKn1Ýû^†E —íòg؅̱’h¢ (aÁyà,¸Ï¿îžÌ A€%ª~UõêãrßiC¬MùéÏõVÝ)CIX_+ë4'ÍŒfv¢ï/õ•zþ&êëOJôgÅú5~7À‘‰™&—LÆGÉÃJ](wwšk¨ñXoõÙ þ fÊÁ¯WWªñ`-”XrØSpxµU'¿o>\>[ݨ—+}®¬1‘ô¶JË«t«<Ã#è;Ããµ÷Ž|€‚‘ ³âbRE[³Ï®˜Ý¦(ÈÂ-6äRñ\¢´P\(g‰C&6ׂl'PWÐĘ…2ª·UÞFŠ2)¼ódr@J™DâB®)®ÕP§Õ ÙÛ¾2 Ø6ƒ0R †}gÿCîñ»õÄïAku5×+YJv‘ÔP Î)ò1Ír+ðœT ¦t{ñÀÏI yNjB4Ö“ý‡ÿ.øÃzð{@IÊš2úœ¤ »àÁ¹´4!™·“¢ $¦Ëû:³EWL€"±à܈%æ…Ï¡¹Ý³JG¿ú(Õ ™J©('‰¼-Gjh3eiçà8õõ/ëûë=Ìl® šcr'±ž Fä=ù³ÒغҞ"ô#ëÑZè6 -èyߎg‹ÍXRiK&[!çíb븈DZÒïb`“Áöš4Gå>ëÉbÞ“wyM•‚ÈTø(¢ð\ú¿WùQÊöDA:lÙ,849µ;J0våŽNY3F‚s{>~e†CÔ¢!ƒ7!OÄ^b€ç8.û˜uÂ¥íôê½:ùÒP˜E ftI •Š^ŸzbŸ+jócÊÛ—"ø:C—*_SC+1¶²t>ãÌdÁl_lÝÂØâ‚ )$¶0)D¾uŠJ9±³‚‚F)SAT ÌÊ]°Þ½±P ÎeKìëñîá«»ÍÆM¾w¯(ËNB³¤lËØ»çÿª{Œá¬ƒeqß¶ö½ý³˜be&KfP’µ33ù7Ìpû¹]fïzqwŽÈ)ãZõˆF±ö¦ƒvœÂ‡düÛzyÖ{¹3ø ß›§Œ±p½KÆ ‰x¸£ñmµ@n ðû1–µþ2 d¼%ù]2ç‡"DJƒn›ÙwòóA]vendstream endobj 511 0 obj << /Producer (GNU Ghostscript 7.07) >> endobj 512 0 obj << /Type /ExtGState /Name /R7 /TR /Identity /OPM 1 /SM 0.02 >> endobj 515 0 obj << /Type /FontDescriptor /FontBBox [ 91 0 589 666] /Flags 4 /Ascent 666 /CapHeight 666 /Descent 0 /ItalicAngle 0 /StemV 88 /MissingWidth 472 /FontName 541 0 R /FontFile 513 0 R >> endobj 517 0 obj << /Subtype /Type1 /Type /Font /Name /R28 /FontDescriptor 515 0 R /FirstChar 50 /LastChar 50 /Widths [ 681] /BaseFont 541 0 R /Encoding 516 0 R >> endobj 518 0 obj << /Type /FontDescriptor /FontBBox [ 52 -20 516 664] /Flags 4 /Ascent 664 /CapHeight 664 /Descent -20 /ItalicAngle 0 /StemV 77 /MissingWidth 384 /FontName 542 0 R /FontFile 396 0 R >> endobj 520 0 obj << /Subtype /Type1 /Type /Font /Name /R25 /FontDescriptor 518 0 R /FirstChar 48 /LastChar 50 /Widths [ 569 384 569] /BaseFont 542 0 R /Encoding 519 0 R >> endobj 523 0 obj << /Type /FontDescriptor /FontBBox [ 47 -10 676 704] /Flags 4 /Ascent 704 /CapHeight 704 /Descent -10 /ItalicAngle 0 /StemV 101 /MissingWidth 333 /FontName 543 0 R /FontFile 521 0 R >> endobj 525 0 obj << /Subtype /Type1 /Type /Font /Name /R22 /FontDescriptor 523 0 R /FirstChar 11 /LastChar 181 /Widths [ 742 333 333 333 333 333 333 544 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 403 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 742 333 333 333 333 333 333 544] /BaseFont 543 0 R /Encoding 524 0 R >> endobj 528 0 obj << /Type /FontDescriptor /FontBBox [ 44 -1159 458 40] /Flags 4 /Ascent 40 /CapHeight 40 /Descent -1159 /ItalicAngle 0 /StemV 68 /MissingWidth 458 /FontName 544 0 R /FontFile 526 0 R >> endobj 530 0 obj << /Subtype /Type1 /Type /Font /Name /R19 /FontDescriptor 528 0 R /FirstChar 161 /LastChar 162 /Widths [ 458 458] /BaseFont 544 0 R /Encoding 529 0 R >> endobj 531 0 obj << /Type /FontDescriptor /FontBBox [ 27 -194 851 705] /Flags 4 /Ascent 705 /CapHeight 705 /Descent -194 /ItalicAngle 0 /StemV 127 /MissingWidth 333 /FontName 545 0 R /FontFile 501 0 R >> endobj 533 0 obj << /Subtype /Type1 /Type /Font /Name /R16 /FontDescriptor 531 0 R /FirstChar 66 /LastChar 90 /Widths [ 758 333 827 333 333 333 333 333 333 333 333 333 333 333 333 790 333 333 333 333 333 333 828 333 682] /BaseFont 545 0 R /Encoding 532 0 R >> endobj 534 0 obj << /Type /FontDescriptor /FontBBox [ 0 -250 665 750] /Flags 4 /Ascent 750 /CapHeight 750 /Descent -250 /ItalicAngle 0 /StemV 99 /FontName 546 0 R /FontFile 498 0 R >> endobj 536 0 obj << /Subtype /Type1 /Type /Font /Name /R13 /FontDescriptor 534 0 R /FirstChar 66 /LastChar 106 /Widths [ 656 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 388 277] /BaseFont 546 0 R /Encoding 535 0 R >> endobj 537 0 obj << /Type /FontDescriptor /FontBBox [ 27 -11 804 705] /Flags 4 /Ascent 705 /CapHeight 705 /Descent -11 /ItalicAngle 0 /StemV 120 /MissingWidth 333 /FontName 547 0 R /FontFile 383 0 R >> endobj 539 0 obj << /Subtype /Type1 /Type /Font /Name /R10 /FontDescriptor 537 0 R /FirstChar 15 /LastChar 178 /Widths [ 832 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 444 333 333 333 277 333 333 333 333 555 499 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 832] /BaseFont 547 0 R /Encoding 538 0 R >> endobj 540 0 obj 867 endobj 538 0 obj << /Type /Encoding /Differences [ 0 /.notdef 15/ffl 16/.notdef 101/e 102/.notdef 105/i 106/.notdef 110/n/o 112/.notdef 178/ffl 179/.notdef] >> endobj 535 0 obj << /Type /Encoding /Differences [ 0 /.notdef 66/B 67/.notdef 105/angbracketright/bar 107/.notdef] >> endobj 532 0 obj << /Type /Encoding /Differences [ 0 /.notdef 66/B 67/.notdef 68/D 69/.notdef 81/Q 82/.notdef 88/X 89/.notdef 90/Z 91/.notdef] >> endobj 529 0 obj << /Type /Encoding /Differences [ 0 /.notdef 161/parenleftbig/parenrightbig 163/.notdef] >> endobj 524 0 obj << /Type /Encoding /Differences [ 0 /.notdef 11/alpha 12/.notdef 18/theta 19/.notdef 105/i 106/.notdef 174/alpha 175/.notdef 181/theta 182/.notdef] >> endobj 519 0 obj << /Type /Encoding /Differences [ 0 /.notdef 48/zero 49/.notdef 50/two 51/.notdef] >> endobj 516 0 obj << /Type /Encoding /Differences [ 0 /.notdef 50/two 51/.notdef] >> endobj 18 0 obj << /D [506 0 R /XYZ 72 725.811 null] >> endobj 505 0 obj << /Font << /F21 372 0 R /F14 499 0 R /F8 384 0 R /F30 496 0 R /F7 397 0 R /F27 490 0 R /F28 493 0 R /F26 402 0 R /F32 510 0 R >> /XObject << /Im2 504 0 R >> /ProcSet [ /PDF /Text ] >> endobj 550 0 obj << /Length 3007 /Filter /FlateDecode >> stream xÚíÛŽÛ¸õ}¾Â±X‘u)0š¤Ý`Úíîi‘äAãÑØÚ•­©,ïì è¿÷\H‰¶%w¶hFP‹äṑ<72rÁ?9KÕ,Í¡29[n®¢Ù z¿¾’v4„áÐs{õÛ?*9ËEžèÙíOÏE–d³Ûûzê,nçy컦ˠš‡2(êùçÛof:O…Ô) Gp}W¸íé:#²L#µ¿_}üÍî«o®"¡ólöß‘y>Û\Å‘ºÆ¶ë«ï¯þÒãÆpÖ˜`"”v<1Œ´ÆŸß ÐÑ,d‰_©AYé û³àØŸIËt&#‘›|Ö–³‡Öy´Grž\˜jS“ Í¢Ðéh–Ç ­Q"â(™9Tü]½/oÞ6uÓ~ŠL$³À? 9¶$q*4ðz¹Ò NJoAPúU[–ÛCñ%*`J| ;RfÓçc'êÙáñPRDZáÛuÙ–×;>"ÿ,ñt4›Çy¨Ò Ù–۹ʂŽÇšüÕA·.¹ãS$ãÕÎTk;žæ0«¼®kÜï¨ßø+ƒŸWÙv´«6Ô½[@;Oƒ]ÃH!œTf§!x&oñ—Û%5hbÜ—ÈŽXr|ZžQD:ê°¤„UNHôbÇÿ É=" ñ;œ„­HгFªKnͽ-X§Æè¸å£¹›‡Æ?”ËNÀWž¿÷õñ E[tzY;‹ä åmu}o—§ÞÑÊp뎖§d`»V;@ÖïêÒªônï4aN@è«Ã:ªAËM=—½¾ãH›¦µ_Œ¡ý@œ$N‚s`ÆŽ.7ŒÜc+B~îGݨºiÄzî•*°Óº5÷áDO{ÜQlü°µú)åñ)M!2“Î4ïê'×M‡''÷)ªmÙ<>ã‘;©±2BFò€‡c£oAŽ©z'6V¹ˆ²Ü'ʇ†•:=4´°¡6)Mñ×wSüh•¯uÜã®x¬yO“úÝBÐQÔzØ7M”ŠŽè€Aû­°Ëz¿Ù=Ïáp‹Ë•$h0~¡ƒ‹”º\Ÿˆ2´:gâêÿ¾Ói” Þ”uý®ìpÓ,o¾ÅŸhAÛÿ~7¦³t–^ «gèÐ"»Ü…Ò©Èe<ºP¹J›™Á…zïEdî7Q y‘—Jœý7$Î~‰Äƒ“[”øK,Ì"š’XÀû&ìß±aˆ7ëô„Ò• ïNˆ&"Òf4ÒaЃ9¶Y6$; TíØNl»Þ…»uñè ùì&¿Ü­¹¡š»º´£ÕÖšÂÊô._£gØ}ÉLÕ.žqöÓ™agu-‰­£Pm]•í˜ 5Y Qsò?0¡¿ú>5)lÆüìÉt ´In¾…5!ÃùêýbL5 ¨&]®Àƒ'K• ™%½(ñ[+ì«x0GE6Zèô‚m‘Çà´È†ªWFåŒá»\9§å´0ÃÒ†ç–V'&»`‘§E¶0´´áûÅÝêSýQyÊ/8ðœ–× ¼ÎÔD0ˤ“Ù»7>’½Çy,ìúSƒ=d§àdOÓQè?2¤ÍðÜ­1;Ü®xS`œ[s)óL¤J;b/í„p˜qª¢C¤(Á×m³<&®” VÍ'~¤&rLÎSÕ¤™MŒxy|†y<*á©ÂZ~AiÕ¶*;ÖLg+~†t¬U÷ÝúFMy‘XÇ€ñ‚c"ÁiXŠG¥T]pä18-¥…¡ÂlùW\èöú«ORÇX÷eQÿãÍ?¿º^,oÞ‰å„o³"¢ø‚Ã$Ái=X˜3>4ޤ0‘™ô¡ÞøˆÕ¤ŽöâáKUXSr[’,¹+‡R$~ßU+ZµzgnÝQýñÏX9“1×HÉS\{uTÂÇþó¿¾Ç)'`ò‰=è­‹ —]ÙxèPË“èûç–œ{…5ÒÕ©à€†*wÅHw.n¤.lË~uc%•Á6…ÞV®\þ l^²ÙJ¹—ß;î$,;/Õ^Vèà–EWQ¡]«>7ßumQ­Ös•» $VçÛfã’sâd׿e‹lž¾,î;º,Û1yºá#@{Œöi¾Fzª¿õS‚æ-ŸI}ËGÝŒ©“Æ ¹19hTž0¯*O‘¾Áì…[»ŠîþðÓÕÒðû¾A×·¶ŽVÔYÃmù€\ø]=wÝäæ.Q)8P¬Šj{b`´æò¢Ž"Èý^÷¹¡7åô–é-G¼[TÞ1`Þî%Ÿ£è`NHzÛQÃùP°S}Š•&®GY}vïacY¸^ì´NŽ2•åDÄ_i[„ýinðöWUPõÔºº’Ä}·Áu¾\‡-¥¢3zàÏ¢]í7öªÚ]aùWÑXŠuž=LþÕâ±H:WÂEĸ’£½€cäcàú²Ï¼ KíÂ¥sn@Πèw{&¢”uðç±M§AŽ‚®ÔáãàQ…:(°;ªà/é} Ÿ37BfÁ£ƒD°Êí9ä‚f¥\Þ&o:0k&Êg*…Íb^´ëíŒÐ›rºëл~êzU'Ù'Ù!#ǻߜ>Øý)øMs@™ b|ß,XµlÝx;Á*ooUKk¬Rw ä kEœþf'3»âM´jùJœãHí®ó9ŽnZ~T[káv^ÙÚH H4Äjýfï×6û;¹¹¯õNáÞºûTã™InW¶›!Œ$T,E–Ë/!ÚRc}¿ã@7ê˜Zì Žœþ¦j/‹,ÇBDEl]² ƒ“’Z/¿¶"_/¶O7ö[lŸ^á1à{S¹…tâ˜fd‘y4)zã#‘¢Ìb‘¨£HQåeWœŒÚgáñ»&Á)ß»²þñ xbÏ:LM·C‹§#|¡„ -†ñgÞ¹gP ~Ž`¼`Lô8kéáF犀þ5kË“¬ñyhÚrísÇ5Yb¢ Tמ†‹ë²~´¾¶ükoSWû¶7]økïžA­ ûeŸ±%Á² 颖¼'iBû‹ý0| ¯ÒÀá<+4ží[­á‘U1<š3lwì`½øU£„Ìq¬JLA ù݈ð‡%…ÁGØàšSw {ø`ÌnË8½èàþÂÇ¿ú—Úæçθñ ªtíû‡5B¡›ÉB Í!ˆšjqÞ¨XÄìòþ&Ç'zS u¨u¨7E»ýHqzhj‘rsRuxL.سx N*Ï‚œh/”‹øPñY]D âdõÿ×`ÿá•K.…™¨£Ù•²t×ÐtÃ:¡0ç–&‹„ÉâË}àoJt 1&º:/{}¬'#œax$À1±PÖ •°\Å=Gô?Т˜ä®¶ / ÔU_êÁûÝ(¡D¹éª¥Xû(ûT¾9HaGݺÌúûcÕ?ÊT#@ î¥Ѧ‹•ôI¾ŽÏm…~©8€”侮ÍqÕöõˆƒ[ØúÁd@ƒò{]› bR"èU@è¡;4¸@F“^–TŒþ›þ®øƒÿ@ 7zendstream endobj 549 0 obj << /Type /Page /Contents 550 0 R /Resources 548 0 R /MediaBox [0 0 595.276 841.89] /Parent 503 0 R >> endobj 548 0 obj << /Font << /F21 372 0 R /F30 496 0 R /F8 384 0 R >> /ProcSet [ /PDF /Text ] >> endobj 553 0 obj << /Length 1580 /Filter /FlateDecode >> stream xÚÍYmoÛ6þî_!"+¾IÔ€~hÖvX1 ëêaÅÚnPlÙV+[‰,/-‚ü÷ÝñÅ’m)ImŠ&ÔÝ‘w|Ž|xd¨Â?êÅÌ‹UD˜¢Þl= ½%HQ« @´ôÓÑÓWŒz I"îM¦{BT¤¼éü½/Æ‹#û߯ҫ1õëq@ý¬\qŸ~7$¥þ›1g~]• fþ|7«ór3þ8}=z9Ý{ÖK¢G¿×£÷Coñ½…„'Ê»vHh’xë‘D íw1z;z³§Ña¯®):‹€Z}Hh*43Í_ëÐ ÌÜcɶø$|ïü×á{”{4$‰L¼*ó¡í~ûÝ1׿A,áf*:[<ôDa¶I—ž3ÁŒÍŠt»Ígiq•Ö«¡ q¿ñ#tB‰Ä,Â'h¡ …‡‚?µ¨+“"&¦8\КO@£%”«ý$µø!ü,xDDH…ú7°Pß‚E`?Öæ ¢&üxm p99Ìzab’Á S`?LÖaê(„*ÑϾ^ûQä% ‘Ü,Êß¶0*~½Ò î/vÀÁïZp3fÊ·VóìCHÅ,2LÈ¥Ì´Ó ¤E®‰zÕ¥é‘ÎÇÖd+h—[ÍïF[Œ±ãÒîÆ­³Y]V[YÙêm-1Š%Ze¤ŸHqIñHj.ËD± g÷Q³3Á|^dEñ"«2~hÏD@øljØ €5逓ØqI/’«¨w7µô]»‰Ç$޵ïçsXèL1_/ñrá—ð/±ÀñË1üøÒÚ9 Ê›ìqŠ›mk$¸Ú±“[íØÆÕ_Ë®ö@Àvœ¢6ßu ¤ô?Á¦1‚ÜŽµ¨Êµv÷ÑĹ„|„ÊÅÿpB\‡ éq’£A”ë]º©wëY^Ívy½=C0FBÈs;ŒãbËš;nåA0A” m¿E~‰ü iéë0˜ ÷Ó&$§Ät·€RX²R÷»É‹ÂN›ºRÃ;ûT*H¥QT¥&LggI3ÕÎs,g!„¯FèåÁ¬î$¯¦ÅÍ]® ¢† “{·®5Ñ[·ü’ÍqÏN³wø«:?{ñrQd ½Ÿ±½¨ÒÙmŽ-}N¬²:½»eø Õè*ý“Ýa»Ê—+ìBÏÎõ¦Ÿ=Ó\@'L^.Ÿ-«,Ûô‚„ÛI"‡‡«±ì`ƒM»Œ!Ë ½/íΤ+íçgïÓf‹cHæüÔEŠ„|À%`+À^p¬I78‚³¿GMœW¶Œ€û Ç–¾ã¨“îvÌlÖW9òhZÀ­¹oé)€"–­PÄ‘ÿFòô³å(Š·6d ø…™ˆ.‹QµNµae+XÝà‰nÕ§…1öÎÒ +bÌh4Hìà¢øŽ ØÁ´Ìÿvw¤šªÚè¢p.4ükWK£%ÖÉQìßTyíD`³²í+stéÌÔÛY•Û·Óê )bÿg 4!f°Ï:”¯zª%N~¾…ipÄ ­ð蛡neÌÓ“óÇ®5Ô“<$4©3l Õå´Ð8[äEöìÄ¢H©CÿG+ßÙœxl-ÇãqСE3”"yÃ…bšKû;] âpA2µ‹ŒÓVê¯tµ’®í%ÈÝ€°ŒØÔ!8Òn£ÁGK,ÝuMKR¼‹]Õ¾ÏÀÿÁÕè§R‘pÂé½TêL4ì« ,>gõíÅ_·axwwv>É ™Á‹'÷ß„倯L­{±&ß {™˜žˆ#ÓØ‹Œ5éFæMJèDhrwo]˜D—Ãä]Mªïr‘ÑsÝt)³&ûCàI½«Ë*O ’]mŸtf…+"é§ÝØ;mkâ^ »¦ÉbÂú_6uGµ'(#5ÓïXäéSé¼j^áæå¾àÁw !ü·xÕæ º„Š ÎÃÏîb> endobj 551 0 obj << /Font << /F21 372 0 R /F30 496 0 R /F8 384 0 R /F7 397 0 R >> /ProcSet [ /PDF /Text ] >> endobj 557 0 obj << /Length 2247 /Filter /FlateDecode >> stream xÚ­ÉrãÆõί@ùVmô†\•J%±Ø§ÄVN¶ ‘pH@@Óúû¼¥bGcMMÐË[úí¯›2ˆáŸ œ \š•Ê`wÞÄÁVÿ±‘~×ÄJ¤‰…ñÊfÔïFR+aSƒ@ÿÛüôKìøûM,², ®0Ž…ÉÒà¼èÑü´ùqóï\ t„Îì’ŠX¦"³lBçS*%V +¤ô·‡Í—ß*H'”´ÁÃS `è`%‰Sᜠö?…ê«mddþ³Þ*^·‘–:üºæïwø1¡â/Û_¾ß|ó0pf´—¹ô}§Ù­‰T'£b)ŒÖ«d†½÷‘‰úÍHa]ò*5Â<ôŠAÀÚÂe7{¸@¡MBö; =+caq í!äV†Õ ÐéZŠÔ"mûë  Êü©Êêfr&ìŽ%ÎíÜVÆaÜÎòÇeB["­ˆÑÞï±x(ݼË}køHÎæÁ³¯p€Žt9ùì [¥‡¢F<õàz¹ï<¯T•_Ú•Î —’`;±êâeJdTpDÆ}Á껽2ñ]GF¨tñòB°¯™_ã¥v"Íú5^‚ «TaíN¿èV¬&vôæaØå¾ùµsæ»)Dg±ì”¬p.+埲ß{¿âÀµ°Øå¢02ÎV‹>ÜK Ú"P§üÖÆïÚ÷«‡h³ªïL¸ÂŒa¸ÒL4cœHd2PC ë1¢ʲ…‘õÉH/Ø'‰0ÆNÙÏ[X³`8vЇvÂê½5·5Pú/§z܆þ\æÉ«óZ¼ðx{ë¸e¤Âg0‚ð©‰bÇÓ–uGÐÞã ¨×ì!'”Ó„ŒjTö¦«5cD#”•«õ”l_ìS¸¶ÅjÊ~Þ©z˜ñӦlMù­<$ Û»Ì~‚´=Æ]içd½´jÁ^¹”¹+msOÚ9ä÷Õ‚ÜhSõ)¢2Â}I§Dû0ƒš÷_.ÿâÞè¾T‹zùBØX¼‡¹§ƒ9<ʲ8AþU)¤¯?øjÑyÃ+½V°ËÕT>ì}ž,>k¥I‚˜™L}ÇŒgá™^2tì/Âü³š÷ÿKù¦xæÕ–Ju¯{¿Ñ2ø-×á¤o$`\åýcHáQÖd°äއôŒ=­à7­F~Ÿâ ½ÿ%ܬØZ~‚™?çh%’¤ÜñŲnè­¬Ê;Æö¥íŠ3÷v”Nµ’ôƒÎø^ôÝÓèE ²/?˜SôDÛ9ïÊÚ·R½0ÐI壯kÿ=úÎlù ÷Áé–O=Ëz¥Å{SÞ£,G)øØ[¤Â{Oßä¾ÒÞáCm¬ÞØÝ%Ÿ§»K>Www;ükÍ΄òssw£ú™z»w©-Ò‰ô½þÜ–¼ù§áÿ)-½Ýendstream endobj 556 0 obj << /Type /Page /Contents 557 0 R /Resources 555 0 R /MediaBox [0 0 595.276 841.89] /Parent 503 0 R >> endobj 558 0 obj << /D [556 0 R /XYZ 72 786.281 null] >> endobj 22 0 obj << /D [556 0 R /XYZ 72 768.281 null] >> endobj 26 0 obj << /D [556 0 R /XYZ 72 547.128 null] >> endobj 30 0 obj << /D [556 0 R /XYZ 72 436.919 null] >> endobj 555 0 obj << /Font << /F22 378 0 R /F27 490 0 R /F28 493 0 R /F30 496 0 R /F8 384 0 R /F34 561 0 R /F32 510 0 R >> /ProcSet [ /PDF /Text ] >> endobj 565 0 obj << /Length 1864 /Filter /FlateDecode >> stream xÚíZKÛ6¾ûWè°¾)XI“¦Í©I·§4­-?ÛRdmœý÷!)K~ÈÙ즭‹¬(ò#çÉÑÌlXDá‡E†G&Õ„§,¯4šÁìë « ,'õ׃§¿pYbµˆ®§~»%©N£ëÉûXn˜°ñÏó¬¬ój˜ˆTÄüÙ0QŒÅ¿CÁã­Ÿ|Yøçoø1!ÄÅä§á‡ë7ƒW×;EÒT ýOƒ÷h4>ß (6¶0¦„Y­’ràD…÷åàÁÛÝ9íî:%ª4Ò!ŽäM[qçD¨42šS óóÍ0‘ÒÆõ<÷ƒéÅÅrY yoëΦqŽò}ÉV%¬.rƒss„¹‰·›L›N‚©Yg+·sâO)QÁq±Xãᵟ˖[ÜžáÔ]`fSï½"o X4aŒX¥ç›l…GÃùBˆÎtO'Š0›Š?æcDÕ?ë^ÀvpzQŸØÇâ¬v›d¼¹ÛԎᕇÿEõìÕãhÞÐÚ2ž¸ XF`§r‘+7%+´ ¾k 2¦Dj{/¤K›#ÏŠ>Â?çY#’™ˆQPšª<šîy•_Ýrž\¸ Æ ‡ X4éÎÃ@8­½‹ib´Œ ªºz—ël=[æNŸ‹I=¿â£y¾˜Íë+ŽêFÝõªŽY¢ØE+¤å°_!ƒ ™]½®ŠÛ•qVpš¥Ù½O¿‡àé}wè$vyì5vÑÖMùY»4´ËBB¢¸‚`äSðùžŽ8IúáYŸ©4]-Å%ë¢åðXReÅN ÔEyõ;úgöÔÑY/ÕFÊK½å°_ô€qñŠ_Ud\”w¨€ñUé{UÔð•p*•gõ¡%1\]²>Zûõ0.\‘¬,óõ…¯øèeQûYoQg•¡€&œü#„=ÔV?j·°€q¾ vÊ+´Ïl4],ó+BÈY F”´'SÊ“t@})¥†gšú0ZVÃ&ÇšÜbÚä2ªÍ! R ‰±JÁÕŒè²pÈŠ$6Å1@¢O˜s òR§ºvìlÓZÌM<ým%¢—"z»¯^ÙIeéí¿Ÿ›[«ÑªDB¶M!7÷# Ö;ÌÌ=–~=½>‰ ìdz¿[{ '‰€´^BËÁÙtoE$ ØÊvò7¹W5ËhJN ¥eð8òª Z³Žý'`Î<<©þ‰> 5Àz²â®a*¾*·í$ S_|&\lÏ=!= Š*|x¾Æ:EúAÇq÷®F ¹*(Á’«f7¾bÀ¢ä‹!¯1[À™ªaÃ纡‚uǯDŽªÁ±)xË'‡º†ÃuŽoñ¬j¨»®„¼b‡mŠϬ«dÒæÎ•guÃÔªÃ@Vû_ ­Êeªóå«´.S¹Ü+¸Æ…¯Û2§8žëPoqÍë-(ˆ%§ñµ_­RwE×ÌïÛW-θ4 ÙzÿèVÁ~ÞQj@ž@ ;XÃhS€"h»¸*Æ—•]·–r ÷ Ã8½O¤nv$-G‘úðXÔæÍMñ¥¯`b¥ø>‡ÀîxŠ–0`¡K×äõ¼Ñ0"ÞêB‡÷V÷_gA‘òÓì, âÌbãŸãl9¾]‚ONðl5 ].—³+¤Ó`Ð"iœyW™#¬Ê‚×1ߢ¨VY½(ÖRV5§¸,.S/Û#źσn‚³ußÚÑ ¾RÊøÛ‹CáuGxwâ[š»&Ægü•ûßœ€#áz#øÖé’@ ?ê’ $ gVáz¡j° vpÍÆèó·µ?(mšîn¯òf6IŠ5*çnº [n'r‡d‹Û:gë'µodØ*!ZøfHåøÙL½UÐ<Î0Bz­‹žûß,4÷?oU¿ÿ±1p}Tĵ&”³¯g ¬…fËã>ë=Ç~Ú™0€É“ŸvÐ&}pO;ÜÞS®$‘Å@`‚¼Ä¦^¡;ùWhºæOVAÞd»Zy8›ÍÚã5Iø4¥¡FžK¹€À(}Wä9øƒ4p_à£ì®óÂ]pœÕq1õÏ]´dYåŸ:ýÆO䨠\æèÓŠÆÛy^ä6ÜA?AU.ýY%&§µGd~ ;yn…ù.=w·§îEQ­]\öãô¸?Øãûr?rödèœi"Óûu-8¿àj†ÃE–Z­fÌwè2 ŸHª/¸sØá°W! æ:‡,…*þžÝæWð•Ýÿ]Œ„v¾ÅÝ`×9dZ}ÉÖÁÞfQ€|SÛ)N´a—,xËa¿äóø¶!“ŒvÉÁ»Ãa¿>ælÛ°[ù5ñ¯ödáF‰}ÄYb¬<Ðæ!}D†«ú|±êK-þ5Þ>¤¨Áó”ýǺˆò×EäŠðSöÜý_„îâß .7øendstream endobj 564 0 obj << /Type /Page /Contents 565 0 R /Resources 563 0 R /MediaBox [0 0 595.276 841.89] /Parent 503 0 R >> endobj 554 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figs/fig_position_eg1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 567 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 236 85] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 568 0 R >>>> /Length 569 0 R /Filter /FlateDecode >> stream xœ]QIn1 »ûzjÙ²–/ôÖö ƒn@sH{è÷«™X¤2"E1W¨HP÷g¾·K¹–‡g†÷Ÿ2à·<Æç³tÁÁÕ€Ž/0DÐ[¾¾_ËËšPR”ÞáR˜±‹µÅŒŠúÀ„Íôĵ# l% ñ‚i æ‡ W$ÞJ³]Á‹i-êË!ñZ±ˆ™! 2ãÿ+¶òvô qéÐ0ŒŒÃ8®£æŽq” Ø0ø*ÄÞ1:‰(L„KEVPëØ‰ƒøˆš’tE6 Ãæ¶WFᘘN|Øì‰£ã¦HñP@n¸¡í6>f‰i=Õ‰Oÿd2AdÂû²"ŠâtX…öŠö¤JÐ*Êh ´Þ#Dü³ƒÑûÑšWFë`m²Î–Û;ŽvXQ„$:VkФ|â鲕“!ä° ê˜Š¹aâPX´+r¼ŠtXxíH&S¤C†¼;bïé)ž?#‡¬°endstream endobj 567 0 obj << /Producer (GNU Ghostscript 7.07) >> endobj 568 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 569 0 obj 352 endobj 562 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figs/fig_position_eg2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 570 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 236 85] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 571 0 R >>>> /Length 572 0 R /Filter /FlateDecode >> stream xœ]Q[ŽÐ0 üÏ)|;~å üG¨v‰ýXøàú¸mœŠUUµ3õLÆÓwèHÐÏk=·öÞ>}øþ§)ümŸóþÙ†¡J ëÔ '×ã÷Kû¶'œm xk"8,x3ÚÑSŸ˜ÃÜŠÁÑŠ°©)`(‹y êˆÂGã8²æTøÜ…÷›XÊ 2~Üâh¯Wž›ª§afÔÜŽxNÌ¥ -4àW#™³“Œ"äILë(I?²¦2òé(aiä.({d ¢‰ IèÁ—Ëh3®·âÖÛÌyØö7Ìi{z}×,`ÎG\ø±/¦”Aü°@5DÙ ÃÅnt643™pGS¦,€ÇÈùcUpŽ«´Ùc@P–)¾J*¯•O+•@Ö"HÓÀ Ø‘\6\GÛ¡Ò„­îºæ—ý§`ð)Øl—`~NXÌŽpT¾ÿòŸ}Éëâþ«7endstream endobj 570 0 obj << /Producer (GNU Ghostscript 7.07) >> endobj 571 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 572 0 obj 352 endobj 566 0 obj << /D [564 0 R /XYZ 72 786.281 null] >> endobj 34 0 obj << /D [564 0 R /XYZ 72 532.066 null] >> endobj 38 0 obj << /D [564 0 R /XYZ 72 -5.579 null] >> endobj 563 0 obj << /Font << /F21 372 0 R /F8 384 0 R /F30 496 0 R /F34 561 0 R /F32 510 0 R >> /XObject << /Im3 554 0 R /Im4 562 0 R >> /ProcSet [ /PDF /Text ] >> endobj 575 0 obj << /Length 4539 /Filter /FlateDecode >> stream xÚÝ;koì¶•ßý+ÜOw ÜQŇ^E‚$E‹ÝMÜEm±gdÖ3#w¤¹÷Èïy‘¢žv’~ZðHäá9äáy“R·1ü©ÛLßfyé\ÝîN7ñí´þáFIﺷAÿ×÷7¿ýN«Û"*Rs{ÿÈË(OóÛûýß6:Òw[“ÛÍý]‘n.wjÓ\Žw[µ©°Ýl~84ð 7MWŸŸî¶º0q¾Éîþqÿ§›oï=YšDynè?oþöøv“ûÓM™"¿ý Ïq¤Šâötcc äy?Þüpó_O߇£æÖç ¶:£%-ò É#£rÏc‡Žuw§óÍ«L®Ïß…×YÏêÂD¬iuÈëp‘ÉSâµ€8^'ýN¤lðš›ûÖ£»mšªÍ=ó+Ù¼\`r:Ûìh^4;YU}çŸkdù>äÊ3Pz1¥¢"I ý®9!†bÁ®ì*|ƒqÆàRƒ x:à«Ý´¨ã&aæþ§–[h*å™G=\ªò&mm¶ùcÇCÕñ…'Gn}Fͬ峀5¸òRËØòxä‡ÏÙÀ˳ Â?rç+Žl®°»âÞ§†'É@™Ëꙹ ÁV…So™¿5Ž Ò@¼FŽ9˜µÒi™8mî¶I²ù¿j'Ú†“]âí+/²[ÞöZq@h,D]‰9)÷¢F¨Ž‡8ìjó{•JØ1–ÿ4†¸c92 ú—ä_ Ø;/Éÿ /ÿ#R¡#r ÐZõFY.Þèó¥î‡Ðn«X¼">T_:´Þû"h)]Çéì?°¹[^^¹-ÚpÞ–ç=¼z9ß¡íNæ³6±Îe< Ì„z°ø1$>«u&Ž´^®ýKZ'HÁ,jÝ2 ¦LsBõ×eC's ™î6=˜Ô€çP[&lW›Uv8˜5ž(xÞ-¤_·l Ió¿ìèg‡q~5P¡8TÎ<;5ŸÙ8l»²q}ÿÒÆ ÎÑ.nÜ2™_°q£9Ím\0©ý§ú¥ì”Ž)jX[¿ƒYc‚‚L0Kí€`-®¬úRí\ô×Uã râ¥ò!â± ƒÏoÐÒþ÷ ÷ðèìþœÚÖÅ}ì»¶QpþÉÒ.®Ðp>oDgÆå„–=X•ŠÇƒ0pߘf7_S,@îª>?}M)À†!–ƒzNbˆ2ڻÅӈœÝÝ¿BZ7Ø»=zzýÍÜ€7QË‘wß½´ €kN·`™†ß‚E:nz:ßQìÙÒë]n1±IºõÄÅ«4_<œÈº““ãy |Ü)ïúy_]¦ÖFq^¬±ÁLèéоæT¦ è•0&XIË¢J Ñ(DB~£#«Š÷óÄ XãÉé[ñ~’P‚ºÂ²"  ­tH3ö1ÜÙ§àÞºbBsôfiGF{ºæ‰ZØ ] ±Ït ywVR=À‚Ds¡€ÿ•»ÈÊU\xP˜8>×”{)—àëÊ•Ì䆰ä,åÜмšùÜÐÎVZ¬Ï adòaOÕ¹º”lì•¥Œ4ÛJ°íúTãϵ”Å8f÷¼ûêXŸj÷AÊNø,|l¿éÍ*’åÑ]Éâk¦`‹‹QE#‰ÉópÙêâÕ'œ»«;0!žW][C±¬4KÞú*ª”Ïí¢Ã2à1óbÙ\öýKöR p Ù¢Á\!ã-æ2)g2R_ážÆ%Dw'æÊ&Q:šÃº±ä“ Œåé{cSmŠ(+ÒU†8˜5Žh Òúµ°„cS/½W¤Â„‘U"O…ÄH…éu»‚XtRq¾ylÐî›>Ý»mÑèÆXdU¥ÆþŒ`3±l:7ƒÍõ¥`sLplñ,ec6ŽA·—Ï%ƒþ%Õ¤/ªÖ ¯Zˤ÷RT¯6:YеTÒ¼½x#è}!gÂVlÏM>êƒç=š30¹®Ñ¿ð#ÐÐ\6Á7Æ@´:Óœ[&D’©-HŸD–:BÛ@èzáÈgÈÕöý•L¡¯÷ ð´°ì°JíüΞüƒ5oÚz¸0[Ð@ÑèªäŠ¿õް¡¶8?x¡yø# @Á.ßÿ:óÓµui'¾‘c¦*Ÿ€õä]¹¼<Î,yK ›¸”μä²"B¢eå(‰ÅDe}˜^¶´3 D¡s%sèoEZ°Cò‚é¡…ò‡ 8„¸…m`TJƒêê¼{åÆŸ¨/vBÛžäƒs·x0Q’O=D¢•4ˆV°²Vb„Ëg™É#! †ÖgjšáÏ+Ÿ¾Âªž?qàšª;qx©«d6£øb<@|óDiX‡e¬WYó\Zûq€ì V°R'·*‹ ã4u6‰cÔ]>¦ âs“¬‰¹ÏÍ4AXèQPØ”ð^Â#D? Á€Þ:/ÈæÏ ì»x…”y*-ÏkïÊúéìžQy ¶:8àÁX8à2„"Á<ãBðVN¾„ÂOÜëwA¾R–ntä0ʼ‚>ÈÙ(Ë‹©=º4W:Ë+ ‚ðCÒÉÊ ˜ú¨ð"Þû‘¬ÛÍKËœŒ+´»Ô€^jùe AŸß04q¯¹à¡`ªm`—&5g®¢q3Ï\ub½æ,#¶ÁiÍy„ö½a–Uxe`8›qÕ™A&äC„íÝPoùdõ(qΤÜm,²¬œ tQD¹Qïà ô„!2œÍ¶>wê캺9ÿÇCÙí§f?Ù•r¤j8qä#0꡾g0fö9¡| mÐou¹4wjZˆyó ½ü™ ,ãž…R Ê6×:_ÚÚ$ß|G'“î—³r–'yƒT‡ *÷Ç©EÓ6rmÅb•ç×9“–ù:CsE÷.–ÔdÌŒz 5N3±n¬!éͳ(ÏÒ÷ź8`Œ˜‹uC¤Ë±.¬²õññ†3Ȅܨ¬j’!9 òr`Hïõ9¿Èc2³&×|ŸÞ|d]¡óuJֺϕì5‹I®XwFE¢¢ìÌÝÙþsºc¶ÔÝ%ñÒB“äÆ(tЏýƒP'zÂÿ’C^¸ƒ,gNiR΂ËË|vóÔ\Q)E&4p ïX…212 Æø›ÞRãË b°;¨}º ³W|q•öUxÃÃú™\í~¥þ ƒÃÒßþÂs^W3O*xŠÍ•bva¤‰ ¼UPªå‹¸ÇÏ<ø®Ò´ÿqSs|Ã1-.§îª¹:’+ãÔ.˜³!élÉ6\ê–ó’ã«”ý¢ÄmØ…þVƒ2Á•%¹2ïÓYjB¸àÝñºï+Z’õ>]/Á™/×ÞSþƒ½ã¢Ñ¯ up.épL•ôf *Y“”¸æCG0¯M\{–lxØÑ2TÕí¸’´M¦)ÀÖÒYmìß±–Á¡£¨…õ?µá•¬É=‰ LAö96æ=µ[± †L‹·#´d!”±õùåÚMæP€³GÛÎa\™˜ Õ°2SdQ ÁBHôR2w/oÊé¹}¢"ƒnúÝ\p#V¹0FÛs¥|ÉåE«b•f¦ÐQ’ëÙ²u )Aù*».;Îh«“JŽ MX€&c™ú9+ÛôR˜„—Á±U}Ùóëè\BU‡±,ÄLÆFqöžnÄ62•ÇÚE÷­‰â"ÒŸT fB1”EHáRÈÐB‚,|/½7hQ{¦ö|†Êµ§¿]»s×ãðÜÁKÇNº'øŸª®/"0ÊåÎÇxLON,Íu®ãÎσ³×­µvóÕ±mäòÞžb¾âñ¨.â¯ëñÁíÓÕß0´—µwåƒÜ½¡³b¨š2®ó© .KSzýp©<æ¤)»vÞýÁOæ$îYÊôν:Î.§›ó•ß×`?¥ÂõqÆÁËéªZ.¸‹•Æ\ØØp1‡Øv_ óx}é¢Ã¼&ˆö>qç>J©¾”'–RI|¦€–GWAËx=>pN hàÔƒ{Ì™YP„’•ß xûŠÝOû‘aæÎƒ©à¯¸æ¾Ñ5 È[®y…’wÍ#j3–# &Ÿ0çeÎtë྅WÙ˜/ axÞ!š½dƒõ4Ê“(¶£e­«Œ˜¬r w#´Nñf’ÖQÛUÎ:˜5ÖF™Òü|è¯ù3“|X¿žÈ9ö¹oÈè<{|Ô1v#6ZÙŸÁ47b•ic´žiS[å®õ¯ñÌ_ý‡8Æ`Üå{×!ËH%ëã1Ðàð´5Òå}±sw¦| xxƒÊešOe}ž„îzøýšªú\ùD¢ lFo,Îüý,ü”>±ÿO¿s†¿©˜ýÌ#›<¹MMË™µœÕà#çòÜ>Ò‡dî¹âª‚Mt‹$KÄÌßjºïŸ¾îçúoúü¹øÕŸ?CgUs·ùÝÀ°ó_´ðÕÄendstream endobj 574 0 obj << /Type /Page /Contents 575 0 R /Resources 573 0 R /MediaBox [0 0 595.276 841.89] /Parent 585 0 R >> endobj 576 0 obj << /D [574 0 R /XYZ 72 786.281 null] >> endobj 42 0 obj << /D [574 0 R /XYZ 72 746.153 null] >> endobj 46 0 obj << /D [574 0 R /XYZ 72 719.641 null] >> endobj 50 0 obj << /D [574 0 R /XYZ 72 668.716 null] >> endobj 577 0 obj << /D [574 0 R /XYZ 72 592.918 null] >> endobj 578 0 obj << /D [574 0 R /XYZ 72 573.684 null] >> endobj 579 0 obj << /D [574 0 R /XYZ 72 544.686 null] >> endobj 580 0 obj << /D [574 0 R /XYZ 72 526.006 null] >> endobj 581 0 obj << /D [574 0 R /XYZ 72 506.186 null] >> endobj 582 0 obj << /D [574 0 R /XYZ 72 487.284 null] >> endobj 583 0 obj << /D [574 0 R /XYZ 72 444.416 null] >> endobj 584 0 obj << /D [574 0 R /XYZ 72 414.278 null] >> endobj 54 0 obj << /D [574 0 R /XYZ 72 100.131 null] >> endobj 573 0 obj << /Font << /F21 372 0 R /F34 561 0 R /F27 490 0 R /F28 493 0 R /F8 384 0 R /F30 496 0 R /F7 397 0 R /F32 510 0 R /F14 499 0 R >> /ProcSet [ /PDF /Text ] >> endobj 588 0 obj << /Length 193 /Filter /FlateDecode >> stream xÚm¹Â0 †w?…Çdˆ‰Ú:,Hܰ!²U ˆsq‰×'¥P_lÿ£MÆX8,$''ŒëXܧêøMMÂæ‡÷"´FŽ1PÈ=Æ]ÝHrÁ¸)•hã öAõ«Ë}{ÓÆ‹W®£MƬ&gízÔÅÁ¹öÓʵ‘6¬¨«—qÃØ(x-ÈHÄWû¯P.-n’ÎXòAð‘bKž m]R’½ó#,`ÞÌù²ªëß©Ÿ¦Èñÿÿh¦üÂ'WB­endstream endobj 587 0 obj << /Type /Page /Contents 588 0 R /Resources 586 0 R /MediaBox [0 0 595.276 841.89] /Parent 585 0 R >> endobj 589 0 obj << /D [587 0 R /XYZ 72 786.281 null] >> endobj 586 0 obj << /Font << /F21 372 0 R >> /ProcSet [ /PDF /Text ] >> endobj 592 0 obj << /Length 2328 /Filter /FlateDecode >> stream xÚíZßã¶~ß¿Bok'†¿%8 дÈC{í-‡$8ȶ¼ÖU¶¶’|Îþ÷’²$Ë»›MPìC\L‘ÃáðÓÌGjfEÄá?%2JRËd*¢õþ†G÷Ðû·áG5—,µÚ4È™†fƒ2®ùï³hdc!-ËD‚Sþ{óÓ/<ÚÀÔn8Ë2œš,ö7½vz®n>Þü«WÇAS™¹Ô¢@ÖiY6Ò‚Ïc-1l/¶&a™ÍPÓww7_/e$&…‰î¶‘ÈR&¹Œ¬„ù<î6?-Ô7Ë_î~øú{ÅG‚ €­(ñáñãº):'7R˜dÌfÚËýsõy)źkQòæ¯w½e`˜¥•Àšh‡i”ÁŽ™ëhÅRmÉ »]Ñ.c0i«$[äÍÒµS¾è ¹óý«¼-×=½²4#Ûæ0,©-Kn'U¯–±1‹Ï„[ó°ÁFºØaÅú+ë4È,Â`Ê·K™€=$Õõ6-cè-îËC‰óî]o½ubE¾ÆI;÷´FeUÔú•»Û­X4^gI°ð6e™° 4ËŒ!ãs2¸2Ì( \ɤ‹CöÝd=õ×~<¬‚3I²CëîØœœpvÚë*ï­Å¹»z)ÓÅ©Dtî½ø@wC;©Â–¾,lqJç ÙS?M©;°ÜkÎQãÆ ‘7ì;pÓ2B„ øXà²J/ò* Zc‡ZüÌ…¾ÇWÙx ÍàA¸6BЕß{)]ç¶n\#')¹(Á5Ä¢¤·—#4e˜OxÁ¯Û ˜yrÏÎ; ±`x ‹€$¬‡ÂHç§Ô÷‚¾a3‘©ÑÑ“äùÈ”\0­Ôldöc¿OMc¥™IìUm4—ƒ6×òÒ3l¡f)g>L"¡™B†ØFRÀa  ±eÆ$Ž™Xbl:²KGÒ,5‡úw½g Ì·Œ­ôq?AX'šiµ!¯ß’#*‹Ý´ßO¦h•æê ™j‰®‘MÉÔð´'Sl{jÝxë:O;pmˆÃ>&‹|³q *è}Äÿ9vr†SÐïñw‹‚aKŠ;¤žúW%¹5M&±®¾$mi8³Z=ËÚ)ãF_°vˆ”@Ï™Mÿ¨›}^UÎz²»>:•pÙlÌ¢''Paln! ¥å‹#F¨´ÈO=ˆø¸‚†›² ·îpMšPT.ƽœ7ãÖK“®fá%œ8vݧĬb€æ³ˆf25{ÎTZòÅËT»unÑâÊï©ßQSzÖuð)žÁ-DŒà;ŸZ{ÏE`Ú05å„(öž'<º íq¿Ï›2ŒŸv¹§Âðêƒæžk7KÏí Z‚²ÒLö'üS÷×Àkø\Ò®²xMæ.¢™ƒqŠL¥G¡†=eÑ)t±Œàp̧êɵ‚Ì“ N-\ø~æ†Ã?1·A­Y¦õó—i8{!Žlò"Ië__ôþñEp~À{p7YÔÑvDzn´WòÌ-?Q$ÞÛNÐð(hèTH,¨‚"ãÃÚHs©^¡7 TßÌa% ¸Oú†8x@f˜T¦ß"°Áû#îÿÓ§5ç§OA[TÛw_}µ)ŸÀO[“½aÎ^à `ŒÃadÜM²s@äîç´«‘ɱYÕ~¨öXå] yì ï;p†_ gŸŸq_ÏAÆÁ´–ü€½ Rc'{eoμð>e*-žòë 2òëuýðøBŸ–)˜–Ê7ŒÁÙÀ«>d„¦€¯»ÃÈ­ޱ3w»Ò»±c¾9`ÎŒÔo7Ø^ÆËÐÝ/.¶Ë¶+6óa½¯7å¶„ÑDLÆŒ5o‘×Eóÿÿ…Á½Þrûd4{‘É)ÕvÍùºÉ*‹7|OxÝa½ÌE$¯»c^¹öCÝv­»çÒ3 SⷶφÐTŠ&ïŠç]ZfÓôO·~ík†%2{Ò­½ÈÈ­WõæñYŸæš%oÙ¥{û®{´Á­·Ç]¾×¶;úwîù¥hÊM1=ž¶µûp:tïì.ú8X×›bC‘)– ñç%ì•‘J–ù”‘±¯ê_Ÿóo‘–fê oþlàU2SÎvŒÛ†h?6½ç4shX5µW“ƒñ™t €£CHÙç?}i¥OHÓW/%Â}û´sn_«€ž=TÈSžSšè/!0N¼•²Dý¦¼K_T(¼!yH1Pú¨Ï¸1_I ã_CƬ÷¯oARJºÃ¹n)¯ßä¾ÔP4­ëvüƒ{è³TR*°Ãk8¡HŸ©"Ñó”iþ‘:]±†´L3{¡µñºKJîmÁÒ@ågSÚô?.Ý:qn%U n–°—\kâ0!>ϸðÙ‰RJ꽿+~Åï#~û÷¢ªêÛwÛúнLJ/Eç+ ·si$ƒ9wô¼…· "S›&®Ë 3Âå©Ȭ–2£¬!bœWU_{’¡ÔA*ÏuT¥“žr÷3¬îA‡¤Â €ÎÉ–¤Å4IÖ[ô<êaF<˜rûT-áNäxzÿù;‰Ï¡¬B¸LšÀd.Œà<Õƒ6`jX ¬8@fbˆpl U[hæ/K?G®ò•+ÿ¹Ô»Î¼9˜;v×ùÈE}ì·¾Þ†ß_Ð Ÿ`!rÚ‹“BXIWT8ÉÍKŽÊ8LˆÏ3.é{¬”^ kOk÷µ®=MÒz‘éjðEªYªF‹ÝzHuB’Àê> ­”®ŽÚšû¥º¤¦PÞl|‘•нçòc_£Ôô=±$.ò“Pž®SDg®žìO¯¬8×bÑDáÿªÀ™p®‹´XmH\1ד ÃõR`âèº~Àolj÷ ‰¾`0J ¯X«“ýƾ$(ý„ø<ã2&ÇJé„òy£¹0¤OS¸; m˜øA™®šë’e*.:b'DŠþ*ƒÂ3f~pþt#áP¼ò0“¹fþÎ ådÌ0Ló† è{¢ëyß¡žû‹ðPp¥µdê%éÅã –C…DîÊôÞ°>¹×S'¿FRIÆ3;0núƼÀØœáûjpŒ9w‹e¯ý“¥ÿE#5Vendstream endobj 591 0 obj << /Type /Page /Contents 592 0 R /Resources 590 0 R /MediaBox [0 0 595.276 841.89] /Parent 585 0 R /Annots [ 594 0 R 595 0 R ] >> endobj 594 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [136.397 517.002 151.12 527.85] /Subtype /Link /A << /S /GoTo /D (figure.4.1) >> >> endobj 595 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [189.532 517.002 201.487 527.85] /Subtype /Link /A << /S /GoTo /D (figure.4.1) >> >> endobj 593 0 obj << /D [591 0 R /XYZ 72 786.281 null] >> endobj 58 0 obj << /D [591 0 R /XYZ 72 768.281 null] >> endobj 62 0 obj << /D [591 0 R /XYZ 72 517.998 null] >> endobj 66 0 obj << /D [591 0 R /XYZ 72 403.255 null] >> endobj 70 0 obj << /D [591 0 R /XYZ 72 40.308 null] >> endobj 590 0 obj << /Font << /F22 378 0 R /F30 496 0 R /F8 384 0 R /F27 490 0 R /F28 493 0 R /F34 561 0 R >> /ProcSet [ /PDF /Text ] >> endobj 600 0 obj << /Length 2205 /Filter /FlateDecode >> stream xÚí[[ã¶~Ÿ_¡·Ê…Íò.i€}H‹¶@€4ÛdÞ’ mÚÖÖ–\I³žÉ¯//m‹îv¶(„b°˜5‡üHžóñr>Ò’`ý$M²\"š“duxÀÉVçþõ¸Ò….^å|zøÃ_(I TH–üùél²±H é3V AœdÚpTˆ"iU²¹'[znä~w‹Œ¸— ñb`'¹fHš!‘ˆc™8ð³Ú—]7[*Òo6›êLÓÇÎ&ÈãYD"ÁÈô(°è…kìKÍËþæeÿÉa„æqlˆ (‰‡À5>ÂàylòÊ‚#IØt Œ9ì!àðÓ‡ïʾ­^Àk2×~ÏIÌóœ!)øô<gâ„÷ ™Q$ yw`f­6v¯X5õªìa|:µßÌûùñÃßšZÅ6 ) ÊX6aox „#¬c¡Ç˜mÓøo¹8˜¹jÓ.«oÜg[Ö›¦Õˆª©!KzôGkµ0å¹2xËÕ ¬8;õ–„Ò~Ðjß|­µÌi«eUo} Qqh °ai…FŠ ³6gÍa€µ£c­ß9 š¶ÚVµMk&®JAÀÚ’h®ÕÜ„9:Û§ÈB€¡VõÏmíhjÕFµª^©Ë…»ÒDËYü#\þ÷¥¶>Ý r.Ígu¿/Ûm‹B7SälºF#…ǘ]è¾ìýj^ÂÉΦ—¯äJµ}éWzy0kú¹îÇHÒ‡@Lùtõ^``tE{ŒÙôʶ<8ÇõäxÂ9î+å n®=U¡ŽbbÂr)00JÇuUÿ»îú´´—ááih„‰\"Vð 31Ýô=˜0›†WBv“¨ö'çm«TçõϾYÁ´ùGlždq6a¹gÇaÂcò±©®%b¸é„K ¶cõ,õª­Ë½¿ÉZ4íº‹Ü/rÉu×–MqÞæ+¥ ’½ßµ¾uà QÜÓr!&ºU¹´D÷2ï^ƒëV˜ÏcZ‚3‚&|ås6/ ˜0ÜŸ»ê75¬ì¾9•z_ÂHÚÝ^¢ù;´clÍSŒ$Ÿ° Œ¯y‡1ü¹ËÖîõ1˜QîF±\õMÛ]]/ªrµ³×ÕåK5v|æ¸@2Ÿ°d Œsä0‘xÆŽÓ®²Œ»ä BIÇÂ-+r”Ñ Ë²ÀÀ(=ó•aƒåÊ$?¾u¨2‰r,î… ¹Uß Qãøk;t2)PÎ'*£ÁÂcÜwsŸUÛ{¹Š=?UÕ˵4_ ¬Ç¶:&8Êólº000¾–Ælu¿Vgr®…pUƒva3TÐ|Â, ÆYp˜›ív>Üa‚QÝnñ.ƒßºœ)E˜»û™ƒ\ìgªoª`?‹¾5`„ ,&,Mãû™ÃÜìg—3Õïg—»Ü¿ÙÏ0F¸˜²6 Œ¯d‡±û™zÃ2¦y›ð}Q``”¹ÙÐn'Ä&d8΢o<ƒrcH~ñÄ“ Š$fî±å‚2™.ËNA*KÍÔ~Fà;8{ƒÜ΀“`›¥6QÀsWs1ÓÙÜ~k eêí Â3´³¶¹Õá¸W£¾ëÍS.íKOÛKßB¿æõˆNpÙWÐRíì0»Éó ع\Ig¬)÷¯·s)d ͘ûÜZ'¶@$Ì ½P a¥—êWþv_WaŒi?4®}ãi·kžõ¯ûµ-3oˆûW‡l\®ñÇezrfpÊÐ-ÑÖ6[ºÔÚ8 UNŽ`S¯ö8eÇr«ÐÈГ¢@ŒÆŸ÷åcÏ{}qð¼—EŸ÷Þëëü¼÷^‡× ÙǰQh‚ôå¾$Ë‘ô‹_øNøµ‘9â…¸÷Ä×C®ßø¶Êp¾õ¢DdH0ù~j{ëq‰D–ÝS9òEO| H’ ˺ÀÀ¨ÃŸªu¿û€Ç<¥ÉIí``ÔSOwªÚîúqW CÙû+ú7žø¦(ãwãP»¯Êjåþ³;'üçÉ%ügmÒè½LS„¯«ü×qùëžó—½KµoN#cž3}´ш;h-)uÇ"-µ'éN7©³5©lmQÙzÙPBÖ&jyÄkŸ»¶¹K¯7tÚê]·kžtYðÕÙ~ ÎôidU­|oõÌ5i­ñ-™unk…hÖ…ošK.eú´3JI—Žèž[µu(«üÕ¶s­®Ê5´ÞÁ/Nø˜Ü%°}Õ;/¹“Zð©åݶvY íl 0²´Òrm ­·^CC5 ŽZfi£U!-Œ€…̦¾0Ä5Re&Bð·¨ðKísÖ´®œ0f[€·ê‚{×µ4›Vö‘£2O+Ÿ±wþ;°°ð_± ÔMendstream endobj 599 0 obj << /Type /Page /Contents 600 0 R /Resources 598 0 R /MediaBox [0 0 595.276 841.89] /Parent 585 0 R >> endobj 601 0 obj << /D [599 0 R /XYZ 72 786.281 null] >> endobj 74 0 obj << /D [599 0 R /XYZ 72 238.158 null] >> endobj 598 0 obj << /Font << /F21 372 0 R /F26 402 0 R /F34 561 0 R /F30 496 0 R /F8 384 0 R >> /ProcSet [ /PDF /Text ] >> endobj 605 0 obj << /Length 2490 /Filter /FlateDecode >> stream xÚÍÙŽã6ò½¿BÈKd`ÌðÔ v“½ì.’4°“yðØ²­·å‘åéÌßoU‘”¨Ó =¢YÅ*²î"EÄៈR¥YÂd&¢íó0û·á k¯øŸŸ¾ù«QÎòDEO{»ºi`ëÈÍv*霳L™Yë àd"0Èx¹Ö- <Ð/\¤C.9œWšENeÄ-L¢9pãiÛþ0²/ˆûYæÅ·`;Ü€QýAðÄÁŽSž_1Ú âQ¬)H ÉZ9Uõ/Üpø%pa2& À-IÆãŒ8gÒAÆo0& ëH ê‰-l’ŒU¼¯Ü …’}lÇè,+1ñ†U]ê íù¼c YeâŸÁ§ì"òÓ$þ€KZWExeå<^_ʆ ”LõLúƒd.8Mß3ÁÙnf¥ì">§¸¤þyAbƒžr+FRÃá fP+½FÙnÁº[1ÖuŸ(îø_ÕyÄ[B ËÝã=P°Gr ô+¡ÎY™¯<^:—w2ÙnÂj§:cP´²êˆSï“«VÐ>˽+iP¼_;¹ßlíëvd¿–eé×ί£Ù º˜\&ưÕDÌg»>oʽx³À©7nSñ&àö~o„dÒÈ à1pœƒ†[ºp¼ÛvØ8}²÷8ÏÓEÑxœçðÐ:mÀ1AÔÈzf–$.qB8CÁ™4&£H¸Èg|Ÿ¿¶Å½Þ.0u!“«j^R—+ÉF1&i,A!ˆp ï‡âP b%ÔoP‹_±¨–!Ù¹à ä ½ìgIÛ°¼oÏ$»ÍÙ5/ se¿R(ô*,­³~ìEói¨5=_/PþØ>‰ jÆ©¡˜Ó|¾7à³NíPî9õ§Ö©ܦœ:àv*)^/Iq¸sº¹†jUªÎÍ5XÚÓ±*4 Pîlb’mx¾\æ$†µ´Êç%ÖÁg%æPîIlS+±·)‰ܼĶ›ËHPÊ@[—öõ÷¶À"µòIGè3åøa2/|þØùô¿·R…bûh ibþØV×Í»N<úòþssò‘bÃ'¬ |‡?­…W)i:«‘>§rG#Kœ¼F†Ü&4róùPÙÁX- KÍkÔÒÔŦ /1ì…GÝ“û3Bʶ³©;yu A¨*ºv)>SsšT@b |Íw"|Våž8µ p›R@Àí™äÞõ©´ÂiF*0œ¥Üt*H ÿsô&‰M¦V é¿$|2oüú˜PŽ·SCW\ˆæK9AY“6¾öÔoWºg¤Åe· Õ†z¾í&åߪ<_1êƒêSºeÐâÛ¬áÎ&ír2˜ˆ¯Ö51iè d]øEV‡“kiêd/êÜ/* 6gû#çö»óäua±ÑÈtÓÕ‡CêdwµÛhwdpGÅx+‡SÛ.OoÅîCÇ ŸèâwE¸­E,8ƒ½hÉû{ÑR´Š˜ß Nã^p΋ÅMÃÀZq –ök9ÓN‰³ÄÛ’Ãkx{ßn…qš8gOeo‚›‹*h1lôо9øì..eÉö®µ½h…Éì^¨sørui³®hõî¶-v“±‚çLgó]DŸå^¬XàÔÆŠ·©XpÛA‡&âã·ã ­˜L}/AÕ…ND?ÚÑ…ÄKWÍô}«²ÃÛ•°Sש;¸'±§š»íÞq²çìܳTÅß!¼övŽšJzWc·ô}Oïæ\ùnëI{†Ðl\Í~µ×Ûº¼Ø°¦xfÍç ðËãfó+³¡©`‡ñfž2è8$|ŒR¯êâiÁ:X1ÑÅ÷ˆâf¿zûî«qŸ°¬ÏzÔÄ#ƈW¯‡Ï![÷XÑíÇg´ øZJ|Wài¨š7£Íà ¶ü-’ð+E1$ke!¡§’&Vïì—ÛÏH@JæL. Èb,  <&„±Ó^Ë’t†òB´—’ªpXGרíØûŽ¥ý\.Öd%Ô¬ 6ÚìJ[ø?áXÙÏåb³Ê= 'lrH R2.éH»œÝ]í"5Kʹ&Δ´ADÞ[o™PK«³ZZtG;ﯲmÖkJ_µäì·í¨µ=ú®ÈëÂC‹ºèøÄV16 ÷¸ Ô®$¬(4tA*øâ¼uhÛӦ͛˜*;}-\R «örò-Lj õÅ|À§ÞA<8x‘³!K¼Ú—%†CBÈõ§•ÉA(&‹· VÅÜ- ^çñ\EBJ¦òôÿö|šŒŸOsô|ª“BÎ 2^8ÎÈÚAQ«YQw”æ%½Àm@†n¸Jº@aoçeŒoã’eYr?>‚ dôõL8o6~=Œ>À½øEX$§°mð©<ª‹hß{í³Ð–ÈÀ*B_'”5}×”á+röŽòqê² Ÿ ¯Éÿ¸Çìö7wL‡aŸ~Û«Î9 çTÜãúÝÍ–àxÔúœvâx"e“!¬}nžß̯©endstream endobj 604 0 obj << /Type /Page /Contents 605 0 R /Resources 603 0 R /MediaBox [0 0 595.276 841.89] /Parent 585 0 R >> endobj 597 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figs/fig_area.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 607 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 145 145] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R4 608 0 R >>/Font << /R10 609 0 R >> >> /Length 610 0 R /Filter /FlateDecode >> stream xœÝWÉN1½û+|)8^Ûîk¤)·9r` ÊDb‘øý”Û~.·Hñ¬z]]ë«)ó(µ2RçO=÷Gñ(¾^yyxA¾ #Ð÷AägF^] 3©àæ$Öò(ŒwN%¿HÄ/‘Oh‹T5òÓbäé ¥YœâØå·¹%ÑX¹»%# 1ØYš¨RœéÑQœ]Ÿé/úúü|÷[|ßÉŸB+KÞ.où›‚V.áxº%ÇÅ9Ž6(CæLL*: 1zMÑ…†Ä@.ÝDò4)ÝËÅÜ^0⼊V²k—7࢈ô‚žéV˜æ‰^ðÍËpÁH ¢Y¨A®³Ø‹;*íåV“˼921ªyž,¡ZEÊümdiL@@\-„ÏG*Œ”dY³ƒ} \¬ œ#Î>€À64×ÑôdØnn'r!s ˜°œÉV.Ü~LП ÆQÙ9ŽTa+׋é\ Œ™ëÅuƆ‘ê\T ÅP‡tcÈ=¶–Ù'ˆàéÇ€2q:•=ò8Kz¾¯Ù ¦ÀÕÊ‹‡Ke“'m.•†´¹T¹T¬Q*ÁŠ ûUjÞËÛÝ:þžÛÉé½×s.¨˜êâùæW6rÀF `"mò’$d‰·Q…jžË„i‚iÈÅ|“༾݂[GŸ;¿±„N¿„H÷€UÛßv}¹5¶ ! íñ%HHZ(@Öâò@ H;¼ØnlÂGAßìmäqb©·:Ä¥ÇÉÅÚã×÷›Ìð ÝÁ¸q<°žŠV=¡yûtoó2ŒG3ß ®Ç~§o)›ÓîM¾P a* ÿ ß|ù}³×Úf÷ .¦ŒÔ]Ô,ðæâ‹ï¸×xï{ö©»´YàÍÛ_è·•Ï'zcù‡.ÅP.ñï4½2' ÒÎuP¹ Ep¿*òp@HSðæ¡žÖ¡ôӾɴNßå)%»º¾ï3.̬t N^L¤âí$w7ô‹ðpórŸSÙ]ë_6}Aß!Òú0É•óbýþöápÿÒH–?ÿv¹Hendstream endobj 607 0 obj << /Producer (GNU Ghostscript 7.07) >> endobj 608 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 609 0 obj << /Subtype /Type1 /BaseFont /SXNOLL#2BTimes-Roman /Type /Font /Name /R10 /FontDescriptor 611 0 R /FirstChar 32 /LastChar 251 /Widths [ 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 333 500 500 167 500 500 500 500 180 444 500 333 333 556 556 250 500 500 500 250 250 453 350 333 444 444 500 1000 1000 250 444 250 333 333 333 333 333 333 333 333 250 333 333 250 333 333 333 1000 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 889 250 276 250 250 250 250 611 722 889 310 250 250 250 250 250 667 250 250 250 278 250 250 278 500 722 500] >> endobj 610 0 obj 796 endobj 611 0 obj << /Type /FontDescriptor /FontName /SXNOLL#2BTimes-Roman /FontBBox [ -168 -281 1031 924] /Flags 34 /Ascent 924 /CapHeight 676 /Descent -281 /ItalicAngle 0 /StemV 111 /MissingWidth 250 /XHeight 461 /CharSet (/parenleft/parenright/comma/zero/c/d/e/g/h/i/n/s/t/w) /FontFile3 612 0 R >> endobj 612 0 obj << /Subtype /Type1C /Filter /FlateDecode /Length 613 0 R >> stream xœeT{PSg¿1„{í*n¡Y‰ØäêN«ŽÔ VGYݺà£0Pž"ÈB¼ /H "$á@ !‘‡¼$áý²´ Pª‚‹ÒÕZ§ÖǶÊîlgWív§³ßµ·ì¥Ýýcÿùæ›óøó;s~‡…¬ÃX,VHrz|B\Üî¹R¬}+I­©ÖÌ;¨0µuõ:›>L~ßþ½ó:×ÉÞØ½ÏF/^Ew6¡…ŸclkråË(µÆP$—ÊtäÎÔ¤S»vïÿŸ%"22’Ì5üÇCF‹µr©Š|“ù”ˆjR¬Ò"£˜h…B~–”* ™–åå‰óÖÒÒD qyL®k4êrgÔ.r¯Pñóì=DÆ+ÅEêpR®’ÈUr©òÈ¥X*"•¢<ñ@´R®+2û„rÕ³ãåÊÜb-ù#[2^IÆ‘Ibi±BTôÿ ÂTgóÄR­L'×ïÜ.İ,‹ÁŽa'°ì$–н‹¥cë±W°Ø«Ø&f¬XV‚ÝfŲ†ÖÕ±·±=ìg¿ ¸Ë æ$s,œ¿ {UmÔ–k¬•'(ú »ÚÎuØÝ ­@ø[Œº‡$Ó¹ôZˆdmxz“ÑãůÌôxF€˜ëSœÐbâ*ÊN¯åµáÍ•˜#ÿ[öõ£YвØãüG¸¥1à 7¥”ó‚¨÷Ì÷(Î °©íHÈÍŒ‘j“€Æ>Fø?¯}öÇq¯Iâ8Š]êNC7ðú{.ô^¹| #]/ÍœÎV‡Ãý‹G{{æRûÐ8ß×wÁ7xƒ`˜˜¨-~¬"ý6zaæ¢ œvÜPoƒ: ¤Õ­³j¯iÌ,“™cËx師Á. &Z̹Zˆ‹‡5­g ñ=4‡ÞN¿vZw}²ëò¨ G¬°X*Í&ƒ¾È¬â`Êc´ qæ>ÿâã¹3i‚5RŸ"Õ0ÂÇYT8:ÈÍ<’£Š…$ÈP-&-#¶e-Vb(VŽguŸ‚ÓpÆ –ŸÉÕDC$AóïíGø³û76ͧ¢pnëÃщeX†>µwß7Zµˆn]DùSÍþ`¸«ú Å<ðù6‡ÐT>Êz׃Ѯw»B5nMs!!hÏÑ(aœOü‡|A©ÁPf­ÉWUèA%žÊ÷õD}J“/Ù’ö0ûÙý‡ýÓ üÉ¡Ža˜„›g¦Úi®#4­±¨Ú¡kdÌçj©wÖÛá‚Í[ï€ ¸Ô6äñ·Á< Ôôž&hË[¸#–ÇÖ9 ¾©&É£9o'|ØëôNÏ BP3ú+÷†lv¨¿LÙÎï”y² HVɲDŸ<çQ>/Font << /R10 616 0 R >> >> /Length 617 0 R /Filter /FlateDecode >> stream xœÝWÉN1½û+|)8^Ûîk¤)·9r` ÊDb‘øý”Û~.·Hñ¬z]]ë«)ó(µ2RçO=÷Gñ(¾^yyxA¾ #Ð÷AägF^] 3©àæ$Öò(ŒwN%¿HÄ/‘Oh‹T5òÓbäé ¥YœâØå·¹%ÑX¹»%# 1ØYš¨RœéÑQœ]Ÿé/úúü|÷[|ßÉŸÂjŠSËËÅ]þ¦ •K8žnÉs±Gž£ Ê=“ŠŽbŒ^Sx¡!1O7‘€À64×ÑôdØnn'r!s ˜°œÉV.Ü~LП ÆQÙ9ŽTa+׋é\ Œ™ëÅuƆ‘ê\T ÅP‡tcÈ=¶–Ù'ˆàéÇ€2q:•Eò8Kz¾¯Ù ¦ÀÕÊ‹‡Ke“'m.•†´¹T¹T¬Q*ÁŠ ûUjÞËÛÝ:þžÛÉé½×s.¨˜ê%âùæW6rÀF `"mò’$d‰·Q…jžË„i‚iÈÅ|“༾݂[GŸ;¿±„N¿„H÷€UÛßv}¹5¶ ! íñ%HHZ(@Öâò@ H;¼ØnlÂGAßìmäqb©·:Ä¥ÇÉÅÚã×÷›Ìð ÝÁ¸q<°žŠV=¡yûtoó2ŒG3ß ®Ç~§o)›ÓîM¾P a* ÿ ß|ù}³×Úf÷ .¦ŒÔ]Ô,ðæâ‹ï¸×xï{ö©»´YàÍÛ_è·•Ï'zcù‡.ÅP.ñï4½2' ÒÎuP¹ Ep¿*òp@HSðæ¡žÖ¡ôӾɴNßå)%»º¾ï3.̬t N^L¤âí$w7ô‹ðpórŸSÙ]ë_6}Aß!Òú0É•óbýþöápÿÒH–?ÿ]´¹¯endstream endobj 614 0 obj << /Producer (GNU Ghostscript 7.07) >> endobj 615 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 616 0 obj << /Subtype /Type1 /BaseFont /OAAMJH#2BTimes-Roman /Type /Font /Name /R10 /FontDescriptor 618 0 R /FirstChar 32 /LastChar 251 /Widths [ 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 333 500 500 167 500 500 500 500 180 444 500 333 333 556 556 250 500 500 500 250 250 453 350 333 444 444 500 1000 1000 250 444 250 333 333 333 333 333 333 333 333 250 333 333 250 333 333 333 1000 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 889 250 276 250 250 250 250 611 722 889 310 250 250 250 250 250 667 250 250 250 278 250 250 278 500 722 500] >> endobj 617 0 obj 796 endobj 618 0 obj << /Type /FontDescriptor /FontName /OAAMJH#2BTimes-Roman /FontBBox [ -168 -281 1031 924] /Flags 34 /Ascent 924 /CapHeight 676 /Descent -281 /ItalicAngle 0 /StemV 111 /MissingWidth 250 /XHeight 461 /CharSet (/parenleft/parenright/comma/zero/c/d/e/g/h/i/n/s/t/w) /FontFile3 619 0 R >> endobj 619 0 obj << /Subtype /Type1C /Filter /FlateDecode /Length 620 0 R >> stream xœeT{PSg¿1„{í*¶Ð¬Dlrug«ŽÔ VGYݺ ࣰPž"ÈB¼ /H "$’ð:HBHä!/Ix„§¥ ¥*¸(]­uj}l«ìÎvvÕÙnw:û]{ûÇ^ÚÙÝ?öŸo¾9ß9¿3çwXXÀ:ŒÅb…$FEýæÝã»SåJ±ö­dµR¤Z3ï ÂXÔÖuÔlú0=ú]ÇwBÎX|{cÏV<'½x ÝÙ„^ÅØ,ÖäÊÑj¡X.•éÈiÉ'wíÞþ?KDdd$™gø‡ŒkåRù&ó)+Ô¥X¥;DF3Ñ …ü )U42-)ÊÏ篥¥‹âBò¨\!×hÔ¥äÎè]ä^¡0â-æÙ{ˆL(QŠ‹Õá¤\%‘«ä:)R哉J±TD*Eùâ5€¥\Wl ÷ åªÿf'È•y%Zò¶d‚:’Œ'“ÅÒ…¨øÿ=†©Îä‹¥Z™N®ß¹+\ˆa‰X ‹ÅŽc©Ø , {ËÀÖc¯`±×°MÌX±¬»ÍŠc ¯«coc»ÙÏ~p—ÌIáX8A¶ ªÚ©-×X+OPÌvµk·¹Û€ðµ3t#ɦ³µ„ÉÚñŒf£Æ 4Š_™éuû˜ëWœÐbâ+ËO­å·ã™-Un˜#ÿ[Îõ¨lEyÜ1þ#ÜÒ”i›R+xAÔ{æ{gØÔv$äfÅJµÉ@ã#üŸ×>ýã¸Ç$q ì%Nu—¡x½ú®Ç^>™¡—æ Nå¨Áa‚þé£=ˆ=s©cxœïí¿àºA0LÌ Ô V‘þ ½0sÑŽNnh¨‡: ¤Õm³j¯iÊ*—™ãÊy¸³ÑN &ZÍyZˆ‹G4mg€ ñ=4‡ÞN¿~Zw}²ûò¨ G¬°XªÌ&ƒ¾Ø¬â`êc´ qæ>ûü£¹Óé‚5RŸ ÕÂÇYT8:ÈÍ:’«ŠƒdÈT-&-þúe-Vl,QŽg÷œ„SpÚ –ŸÎÓÄ@$AóïíGø³û76ͧ¢pnÛÃщeX†~µgß7Zµˆn]DS-¾`¸«úÅ>ðz7‡ÐTÊz׃Ѧw”8C5.MK!hOT´0Þ+þC Ì`(·Ö¨*õ ‡RwÕûz"„Ž9©)lI˜óìþÃéþäpçLÂÍÓÓQ6škMo*n…èöy­ Ž\¨÷4Øa.µ{ý¾ö1˜‡Áš¾³#mù~ ×oylâ+¥4éH>Íy;iðw}Ïô¼ µ ¿roøÆf‡Ê•ü.™;ò‰•,;Qôñs~Å3÷VôPÝ•½ÁpEÞÝÒ‰î ÛÜðZ´•c ¬¯?gih¨žÌM¦"¤ÓYRÒ\v89#:eäÌÓ,ÁRÁ˜¾S ^N¡:C®ðô–ñK/žë«\$*Câi¡w¸š›ÜÐ çëû¬ €Õç­í {°²tw^ëOÐØŠºÃx¼¼KþÙÅ!ùÞ>þ⻺&Žf¥"ÐsîôìPçó¥±:‡cæÊ$ëêHsYð ²ðoEWùžH›˜ÍG‹xM^U\RÁÓTs*ðæF´ñ³:Wð}!±ÖsIÕL¾¢O²›ÝL~fyÃk‘)é¤Ò¹o""ÐÕ`³ò-ç¬ç,fqjnVE­Ébµ@ Ô5ÖÛê‰è«†roÌMö/øù•m¥ÅåæàIŒÞ[4õœdˆÜú†õˆŒ¦r¹ô/R9FfÿÝMžÆVàõ·Väh#ÑfÓÑ5›Ûñ-Õ.¸G „g R®F§S«{u¾Á¾ÞAŸ®O%z)¡Žµ³¨;LƒF|Ôâ²@9­Z“&‚.=€tå³àáAo›ã²ƒh§sŒøD­ÛÔæ(s”Ù B:+t':_ëªw‹=nçh3u܈÷Õ;ͽ(Œ~êV:ÏÚ™q9=î€,¡_Ѧó’f«xhií¸„øèï¡]Ó¶–n¦CsVÙèÊ˃ܨ,e‘$;fŸlÐë™Øõ矿Ÿ5P²Pèî=tK=¦¹¯½mú¾†o=_xoúnß[bF¿ŠÞYeOÒ±ÜÏ® LÌ~ú§±¯­ôºäÅÛßä])ê=9RUú8Þ+óýºÿxÛØ?«<¨IPÇ+¥ÑI €íKz÷¶f~OÌ˦~+Óêä…}eãvGc£ïhhÂi·Vª%iæpÔx<À‚çÈóœLï© *—È’RÄ4þCó,?½þrÊD·Ú%ø>è[º6‰@ $¢môf~]÷É sµÄ´8‡Ü¿?ç_(Éf{U¤ï¦Ò»QjwàÐ+O2äܰái׆öo%np:endstream endobj 620 0 obj 1807 endobj 606 0 obj << /D [604 0 R /XYZ 72 786.281 null] >> endobj 78 0 obj << /D [604 0 R /XYZ 72 637.394 null] >> endobj 82 0 obj << /D [604 0 R /XYZ 72 573.117 null] >> endobj 86 0 obj << /D [604 0 R /XYZ 72 261.47 null] >> endobj 90 0 obj << /D [604 0 R /XYZ 72 112.182 null] >> endobj 603 0 obj << /Font << /F21 372 0 R /F8 384 0 R /F27 490 0 R /F28 493 0 R /F34 561 0 R /F14 499 0 R /F30 496 0 R >> /XObject << /Im5 597 0 R /Im6 602 0 R >> /ProcSet [ /PDF /Text ] >> endobj 626 0 obj << /Length 2215 /Filter /FlateDecode >> stream xÚíZKÜ6¾Ï¯Ð-jl‹ßäì® ’Ãî&žË"ÉAÓ­îQ¶G«5˜Ø¿U|HjI=žØFЇÀ°Å&‹dÕWŪ’i’Úh–h£34Ù<\åÉz¿¹¢a4ƒál4þ÷Û«/ÿÁhb‰U<¹Ýùé–e’Ûí)e«Œ +Xúæ¾x\Ñ´[e4-ÛUÆ OùõêçÛï`5,À©!ZkØ çÿû·w›¶zì‚Üh#!‰R,ˆýën•)‘þRnº#Š^}}Û«ì4’ÄŽ ¿¿úñç<Ù‚aß]å„[““DvÁæ ž5?ˆ ùÛâ8²-M†_žÑ^: ‹]®OrN$/ú$ˆ Oêõ*“L¦uñyìñùñYû†J7P[r™§„8·ômyte¤jjßqWšç¯+ˈ„þ§×?ÎëÊP¢ò3nq'±ÜyšÍÓñ'pÞ±<ìÖE½?”k¨:û²»AÂðϦ.a”^/¹LçD }Á˜ Î0¡erˆ·(ƒ ¼+;JÓúç>vþñØTu ñÜÝ—# —P’–¨×¨ýGs’ ì?œ2)´”Ù—dЉ},Úâ!¸ Ãùz쟩«:æ©}ër¹èC®_0F½~sˆ4wM@„ð´¿{ÑVgü°ùïsu ‘¼k›€_Ý´Ý=ÿ%L˜"†^07)x>p‚Ì4p|¼ÿ‡Î.:’_0ƒ‚çÑ2¶ìžÚz‚*D –†ë3y(AÕnžve[Ö›WESfl¹ó¹„f.ˆ±â‚Ñœ£)ïóÞwÁ9#TÇÓHò€4“ZâàÆtÔ­#P[ßð^‰íïAi9±\^.‚#çA”½aĨ¹Ãw KF¬VK ž±ó¯v$\û-ð0'ov¤–¢|ú~Û+fÒçUÆGf‚I—Ž]Ÿ›W@H`Ø·÷ò®ã=f©"îî) ¶6MÛ–N"lër]؋ҩӒÌ(g÷®¿lo00pØá£‰ûŒjÀph‹ëÓàÉË3sH‰(×–ÅÖwã…Ÿ>;2;JÔ@‚á (M¸åcßM}(ˆ5Ø‘ä=–¥Ü š®rõÔu|ùíƒNÞ6P&“ïÇÉ2”òl´óB}ã/ɬoÝÙ³P8èq¡±¡NÀó3¤i÷oѺ²`æpzá8¹ žO٩늋ÃÖƒ×n}ïÑ“³(#A…§cUïO¶›8Ê3”y þð9޲aÆìOu/šãk¥Û›ÐÂ}.+1ý¢D¦ÛNÜÆàRÉ| óGÔYís$b&lú?xÈ+åmÎ^"¥P¸YHÓ¯æ¤ÃªŸ‰’ªOs•¢DŽu‰˜X8'.Šÿ»o<øÏ6Ösendstream endobj 625 0 obj << /Type /Page /Contents 626 0 R /Resources 624 0 R /MediaBox [0 0 595.276 841.89] /Parent 585 0 R >> endobj 621 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figs/fig_circle.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 628 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 205 205] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R4 629 0 R >>/Font << /R10 630 0 R >> >> /Length 631 0 R /Filter /FlateDecode >> stream xœÝXËjÝ0Ýë+´L Uõ°^ÛB ºhz—Ù™&iè $ä÷;’|4¾Ê¼*˜p#Ïñh43:ã‘ý µ2R—¿eœâA|¹œäÍ“ðòEù~D¹gäå…&(?ɬµ< «S©IÅ/QÆEáX(”›ÍÄãx¦.‰a>ʯZ”DcåáZ4WŒ NùèŒQ¥˜éÖQœ]éOúêüüp'¾äOr¼Ôò¢.g¢×Ê%ZܸUðé〗Y³€49&Öšè¿É¡jázÐÒÇo¶!u›Xcå®gJS žÒÔnĤ¢+Ù4žfûŽd›ÈL‘CPz-Ã#nRÑJ¶`mQí·ëY¤4‘öÔ‘ iO}6˰ÏHó€-,®üŸÅu¥Ó¾b*œÞ@çTÎd+ÐD€ÂæûÎã¾íÌX¤ ÎáqÄ#-PÖl‰à5*Ö„Æç5€À64O½YS`¿±m¤‚ñ4/¤Ê…¨.ü~Ÿ à='Œ+aaæXK˃­IÌã…×ó!s²Xc©¡–`‘úêK]• yM‚ýÄ´uó˦›‰ÜQ®îüO­/VI‚4¯lœb—¹O¡œÃz¢¬¡.ö@ s¢X£¥‚-4y½FCØ‹f½x ÝÕÿ…ûŠgë) ª Ãéž¿Þr8Ãi‚3@0Ž8‡B‰€&§ š@0Ž8¯¶¡9z³Þþýƶ• *¦˜láQ86.¼¼Oî˜cmtf޵T;$ð¸óz`>w̱6zí µÔìwiY½×åP¹ëSÀþbÚúð7Êi“ê)€ÞËÞ°õ|b{"w£±‡â4ËHë_lá´ãñ‰yì‰Ü3ÇŠ5i^°…Óν~Øol›ŸΙÐÞ £kß9îß Ca&× ˜ ¤#^ù l‡ª¡hq­@ H¼Ùîlb•ëÚßGÛû¾‹‰ýsß_|ißÔLpA•× g½2¹~:±¢¥ 5 Zƒ fz#ägA¯˜¡"θ:òó+«£üL[eÉ7+Ðïî¿yqKø(ÍT¦Ùº%×ÊÇ輑ŸûUqÇÒ9»> endobj 629 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 630 0 obj << /Subtype /Type1 /BaseFont /PRPRBC#2BTimes-Roman /Type /Font /Name /R10 /FontDescriptor 632 0 R /FirstChar 32 /LastChar 251 /Widths [ 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 333 500 500 167 500 500 500 500 180 444 500 333 333 556 556 250 500 500 500 250 250 453 350 333 444 444 500 1000 1000 250 444 250 333 333 333 333 333 333 333 333 250 333 333 250 333 333 333 1000 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 889 250 276 250 250 250 250 611 722 889 310 250 250 250 250 250 667 250 250 250 278 250 250 278 500 722 500] >> endobj 631 0 obj 882 endobj 632 0 obj << /Type /FontDescriptor /FontName /PRPRBC#2BTimes-Roman /FontBBox [ -168 -281 1031 924] /Flags 34 /Ascent 924 /CapHeight 676 /Descent -281 /ItalicAngle 0 /StemV 111 /MissingWidth 250 /XHeight 461 /CharSet (/parenleft/parenright/comma/zero/c/e/n/r/s/w) /FontFile3 633 0 R >> endobj 633 0 obj << /Subtype /Type1C /Filter /FlateDecode /Length 634 0 R >> stream xœeS{LSw¾— ÷¢Â¦¬“жW'D\Š(ÁÌ9P\ ˆ±€®¹mïè JBÁ¢eˆ‡W[ ¥€Pyæ4 >‡cé™ó1lÉ–é6³eÙïêýgÅdÛûçääœï|çœïäàØ"? ÇñdI²äýØ ©Œ†6l”è4ríBx=†³«üØÕ2ý$V§7å1JU>~@r0bÆÈÿ"QÑÑÑT–éŸ G¥–zÛçÐj^Ckóc¨XZ­fŽRJµI¯2Pòìl:{¡,M®¦s¨=ŒšÑëuTxlµI,ŽÚè3›b¨$£†ÎÓERŒVÁh™|%×fSû4´RNiäÙôAœ†ÉÏ3Q[ÄŒößê$F“e4P¯¶¥’tÑT"%¡•Fµ<ïÿ ÃkÒy†ÂðˆH1†íÃâ°=X –ŠI±@l1„-Öø¤ÄaØ ¾¯ö[ç7æ÷’ÃSó¾DµÁìIp³+¯ãÓ³(n–×®åÛj«›€ìm0gˆ¸j$–Ri%iF*7!­3;ÁK¢Ab|Ôãòr—úGXVœ¾ÊvõÇœp™D&âgÙ]‡ÕÅ ñÂG„µ&ÃÄXRKÁlrù=Öÿ,xìZ$ægîV$@Š#âëw¿õº,ŠF‘Íèе™:@Ðí9Ýyc÷¥mÒBe–(]¦‹‡$÷æ£woô|Ë9¯°§ëtOßMr÷+¤íG„g#Ñv~æÎ#ÚÀ‘³Ú Óˆu jŠDS'¾(?›×¯ñî8épÈD3‡²ôqMrÂ{[ñôþM„]rQ$¿éáàðLA—ε… FóàFÏÅïÎòììJ~smCµÈ3 %2WK@ºÕšpÌ'€ÕMÄ×»a‚DF¢ÿâ•[ÃÇåM–Ҧ ]îÖÞ‚vF®ÍËýD|\“fT–%ùT”{J:بö2Ïr¸…¢ï¬iE·Ñ ?$²­ò·TU·ž:U ‚ (¯±Ô“!­£±.7l‡D›Òt.S4ùÑPa«ÔYŽNʨ]ž"aÁ™ãedI@H"'vöƺ'4@sUg… ¢·§²-ìÁôä+†}^‡MëZÌg Gpþ\ïØD³©SüBÁÆ»qö6›Æ7ƒÖF+ƒ¹Â`ÑGqy¡ÛP~ñ¸ài²_²“nNf&†+–öö"{‘Í$æ2CÃQsecU#4  Ãé¬ó¡öš‰Î*G¹GŠÂ¸§¡N£Ôõàp9»Ñ"d ý‘³4+ê*l °C}CËy$D¿…¶]¨­o÷µ n1ÏCã/¶ówejr‡ã¶¨Ö\ÈpÄë>Íì6^Ëq¶„Æ|®Òß7ÌX¾çð§ëIÏ­Þ[}Þ{“ ÇDïÎóF¸Ýü¯Çûº‡Çî~?ôP  7¿lþ=k<×s°ÿXIèãÄUï{]{›vÂzx«l»>I—¨QÆî÷Ô~Ç­áÏ ŒNÁgäÕ'ª ùLNg‘×f¯®¶ í5Õ@:l'rtŠ ‘ïÏJ»_,ïÆár=ã!»oöT+TûShŽx5<>À^J–]5LÂU¸Øêš¼>‚H@A$’‹Ñn…ðd.v”óçhŽ–Q[·ÊþBÙH5Šxó¢àÂv6­¥¶ô-ž[ÒçXºt®mi†ý ’^Xendstream endobj 634 0 obj 1297 endobj 622 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figs/fig_circle_eg1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 635 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 56 56] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 636 0 R >>>> /Length 637 0 R /Filter /FlateDecode >> stream xœÝXK’1Ýë}EèÓ’®]â#¸j¦²ðb’E®Úæš™ ¤Ë‹6X^ È[Š´¥ã#Ïû#|„o?ëöþ'°&ŽZXûû…_!´ÕL±—íJ1÷…<œöØq?rÓ5TŽçs|½¬–œµ/«"ÀÖ,žåë=¼…¶ýeßÿ_7ÿý~+-Õ#~¢XH¥ìqŸykiòž¬rí#֜وjjç¼âeà+¹^ª?åKºQe5 œË~Ķ~œÇE€ÜBé3fâØÓˆCx„J)¶lšÊ«gâô%R&7Š£Ì#¹ ÉÇN^!Êd?•óC|@füþLËŠœc£©TVª‘(`QzÇ!]Û-`7âclƒbt˜aíT#þÔ¿‹òA#g ŠÑcVÐ }îMC>ÎíºØøÜ¤PÁàYBYäL*/ÆUIªEîh2£òD!> endobj 636 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 637 0 obj 787 endobj 627 0 obj << /D [625 0 R /XYZ 72 786.281 null] >> endobj 624 0 obj << /Font << /F21 372 0 R /F26 402 0 R /F30 496 0 R /F8 384 0 R >> /XObject << /Im7 621 0 R /Im8 622 0 R >> /ProcSet [ /PDF /Text ] >> endobj 641 0 obj << /Length 1976 /Filter /FlateDecode >> stream xÚíZK“ã¶¾Ï¯à‘ª’`¼©Òa³»âCì¬ç¶ÞG¢4œhÄYŠãÉþût HQ$­ur`¥\[;¤€&º¿¯ÝH–PøÇÃc5á–%›ç;šì¡õ‡;{Wнêôÿõþî»ï9KqZ$÷»ð¸#VÛä~û)„/VÂÊôCµ`i¶<}+Ž{léO‹•–éS¾Y¬XZŸ+nÔ)‹Ï÷?Þýíþ¬Öªˆµ•~¹ûô™&[0îÇ;J„³ÉÜSœKžï$å ^Å߇»_îþy§íç†ð ʼn¢&Y±ØO‰„ž ÅÂíÇVšDv“$Paí•ùÉü÷æ'ŒHfF‰S.©òdwazè=2­nŸ Æ(°OS¢[W šXp•FW1®‰Ñ2‰"è®ýú‡ª|}ù•*ú1ßÔÙqÈñÇémý3^é’Â…-Ñ_oŶ~\óåc^ìë5=Ç1ΉP61Ò­fMTká5SZÉÅRõ¾¨6œjÍ–=‚¦¹–hÇçÌEká8Q¦ÏÅéKUãox ‡róz¦jhº…*nˆbÎTµŽSe*„;Š–Á„4rÎh[ ÇÓI”ñù„œ6Yˆ FÔ’¨Iø2”ÀMÒÒ³r0·%AGdÐvYsÓÈ3‘PE)ÔÜp'Ï~Å ²ô÷˶àÐFÙ`Ù>÷ý7–¬„†´C«ôèòFi שòbyÓtÇå u$W¥š0ÐÕëJW#3©°?jý*K¿dÂÐ (4S(ã¶dÞÖf~iÇ/¾R?¹3ƒÓÎh"©N¤gsÈN°–T\¥JOѹ>±¿ 1 K;cü­Wø"\¨3ŸuÖd0 1 ãf ³5pfA˜ûõûòPúô:6 ¤Ã <_È­}cˆ£Þí×ÿ(ùL Þ×ã­ÓïõØ‹„&%T.æÎ;Ø™ ‘ž0»fžñæn9öÈtSܦ¿áŸüXäÇMìØÐëqS <­Ëб…Ž*Cù·ÐØ^Ö±©mõ#4Æ÷ETº07©ß*f^Ë5Â1âÄ( m÷P^½´®FÓú„¢sVŸÐÖUþœÕÉo$˜,'5ÿ]((NBOeôF¤—ÑžÞívÅ1ÿéái,« !3gZÇ&#gÿï¦;˜6„²W²Ž£˜£HLñ#OÀ’œ*7¿½Âikà(Ò(‚HÌá@e 0ã„ÍncÞ(X/Ð@Ýd/£@a§È䜡¶Ž‚" ܧ²8ŽáåŽúZ0Û9Û1p o#‚xŸ‹:¯\FG8—3FÜ8Š8Š âmv¶\[µš1ÖÖÀQ¬Q$Tâò”o×tª2°I×3<½ Hã`óõ,Ã…^0E\ÐÈ +ól{Zú<ä Øû kÿtÅuÇM×dñnD|ŠÏ{ع øÁ€f¾¥¬µof@”§:«ê!”Åf\°;ŽÂŒ"ˆ3?nP2ت)Ågx8Ý™R3^ù3K‰r“5µñ55ßÅýžý˜vËzl§Ç´#Z̸Æv ¼ÎìÔ¡Ì‚åbàgñº«²x´‚¿bc9òù†rS–hógYþÃΓ†6™$‘‹ÀÅ—çù±¾!|…&fÖS·5p<|£ Rðz,b€þ–o겺à#þ(Ãõéú"}0ʹ"ƹÙF9·°Õ—£'“Hª‘óYc Óá ìÐ")M³üœ¦¨« ¯_±1ÓfÀŽ—À¸ƒ­g8NÅ^púŠg±áX5´æõæ|âÈR‚ßã˜ôOa‹Sh®eg,t^khzŒmÏe•7vàAm¹€?o^UµC½‡øì¸R¥Oa4°«nù]^gôZ„Q|›éÏH¿þ²©Š—:ÈuH’<¾eD)2Z~ËÅ;£¾>›<ÕœÙö•ÁNØÂ²°«°çï(ÑWÓã$±P;šêì_žIO•ÃtI-0܃Žð Á/¦ñ@áê¿ÖGDÞœë×yÕ7sj¥n'«y`Š±Þ ž¶kÅÄùiÈk\pB¹éj*¯1úUý ã“/EͯC}·bc™Âx9Êùƒïàâ¼_4÷Sß׸´®p †ïì|rEÁ·"d ÓÔ)¼íÁà s³ø•2ÙÌÔ*ÈîÊ*HLJ6¯˜ƒÚ¤â|¤õñã+(nåíÄ7LßÔŠt¥ØàGlŠøFd‚øÞ(Ý/yðM Ï3%#¬áâÜk¹cé¶8!·˜Oùv±š¦ÌX¡\z ß@æÞ§¬úº°Ó±â2ý~a†²ô£ý3}÷Õ\?Øä—( SOßäA~Õ>pãCvßX½Ðå [¾ÇÛ [nÂw€/|ù"†ÞRƒ•ó´þ˜A¢oLÇÂhbÁ¬Ž1¾Ð”¯‡m`ék‘7·žÑò9iê•/Šûè9*ýHÁs:؆\;´Ê0d0‚Ο•v;ÿJ)/endstream endobj 640 0 obj << /Type /Page /Contents 641 0 R /Resources 639 0 R /MediaBox [0 0 595.276 841.89] /Parent 643 0 R >> endobj 623 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figs/fig_circle_eg2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 644 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 125 44] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 645 0 R >>>> /Length 646 0 R /Filter /FlateDecode >> stream xœ…Aj1 E÷>…N X¶$ÛWè.éf‘2‹!‹^¿2c) Å žÿùú~: #AžgÝÛžŽt¹1ÜŸIà'|Ø÷ ”•OR­XkÒ {j9c‘S=Bµ¢8Šã+}Âõïb&Å6"»'i6Ì솗«Ý™B2Wd…-/Ýâ>=ɼzþo©¨ùT¸†\F©ëQ]HoÈÛÿËufë›ÛiíH}„Ó©¡ª€*c (n”R0Ïà*à‚Ò;Œkƒ‚uôpHŒ’8\¿¶]†3x3¾oq.<Ï/ }s>endstream endobj 644 0 obj << /Producer (GNU Ghostscript 7.07) >> endobj 645 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 646 0 obj 224 endobj 642 0 obj << /D [640 0 R /XYZ 72 786.281 null] >> endobj 94 0 obj << /D [640 0 R /XYZ 72 593.381 null] >> endobj 98 0 obj << /D [640 0 R /XYZ 72 444.85 null] >> endobj 639 0 obj << /Font << /F21 372 0 R /F30 496 0 R /F34 561 0 R /F8 384 0 R >> /XObject << /Im9 623 0 R >> /ProcSet [ /PDF /Text ] >> endobj 650 0 obj << /Length 3300 /Filter /FlateDecode >> stream xÚÕÉ’ã¶õÞ_¡ÛPU-˜X¸À7gâ¤ìCâØsIÙ®2GÍ–˜PâXb»Ý®||Þ Áæhâ’r›$ÞÃÛHnRøOn µ)Ê\¨Rnö§»ts€¯¾“nuË»`ýïî>û“’+l®7ïy»e^nÞ=|ŸH³Ý)cJÞ«[™ôÛLêËv§KèÏ·?¾ûä#-KQPÃýß¼|·¿4z2™ÈsåÀþú~»ËMòzß_ôîËwÑéD™(KþùîûÓÍ0öõ]*´-7Ïðœ iíætgRGÏÜ{{÷ÝÝß<ãîZ’²¥°Rov̰%>Èæçÿšò—Ÿïf>ûê$ÓÍ;8Êf<ÍN–©°ˆåÊL´QN”‘e…ÈSERzw¬A §ëËy«Ê¤¯~Åw4Wþ^WWTÏ˶4É=|*Š uðÏ[U$u}öÀ{|?2 ÔmÕ\ø¥{ôqs×À$ôósÓa¡{긚+N+)Š’g* ,]Pœüøm ~†ßH:Ý€ZòœŒk‚eò6¦š “–Sº3E{˜ˆV {­¬Hµ™kH (Òb*RËy;ˆ¦rjê/Us8’äXFmƒP^‹äJ‡“Û­lBnv$‘ôNJa³ŒI´.Òäö_*"}[`@'_¶t»Qõ¥f@¿!R‹,”(4=Ð7(ÆïØ["ÕÌÑ.*G…0&›Òž)ÇÃDÔåÈR Q'$öå" >Tügÿtùw8Ù]A+¤œ³ÓÂ,h @t]Üÿ »Æy”S"ú6)_¦–X •/u'¿ûŽq\Ð Û¶~àÏïÑ”^øy ,Áîðtª_&ˆn®$eŒ(¸™Ö"··x®ß± ¶D2G»h kD¦³)íy˜v0µÀ@æxHÚè<ùÂë4<“ƻӨsøÖ¡»¶/^®¤âß®¡˜–ÉßžÐ$XCW–õ¾:󺋿ŒáʵÞ7?¤Ò€¾Xã`ðÄO ñ÷ˆìe.Hƒ¹«Ç(¨oñ\·aìˆô2Cº¨ ISé)á™VHD*PŠÕÂXÒó“‹ODZBQýs¤J¼CAâõêr@q‡þyå•9Çú…ŸH7Õ–½Þq é‹”ˆ8ùÏÔ3ù[wqÎãpTçCëcT‘|ƒþ6ø3ƒQlg|5£yÜÊäe8¡ ô’2quïÓ] À:[ÌÁÌs4®#2ú0p'“ßÀ<ïùku~`¸ðàÅ`Žt@X||á…ž=Ú\¸Ð¶}ßtgOÕ9ðÑ ^†{Úš%_F¯@¼iíOswO¢I'B©¹¬ÙgB=ôh;šë üËŠo÷h(mÕ TIõÔw§ªoöUÛR$<=-E¦²±ÐÒ™™ÇjþØwü—ÞqüÌB‹2^.tšoLŽÕMÙ–wì‚- ÙvŠ–jí Ž2'o3!!¶LÈÏ®ƒ‰† Jã<—zhZóð Å¿‚"àvnýŽUnçh—S‡RšuV=Ì« ‹ÃbÊ*‡óAçdûs9éÞÁÐØ ©?{Çò6R7cr‰*× Ä“éOžß±*¼9Z2•˜6Ø@ ßŪÙÁ¬ Og`'e1!ÖÅœR¤öSœÂïXçt†‰Ó†^25ëœ:˜UNgx¸Â˜+¡üæSu;Ö¡]ViYBFVëŒ:˜UF­¥™:_uq²z¿uÉ®k1ÚöAà,9pÚ„{zŒ°–0…¡ý‘Š×–É>—ÁCwiKÜøJŽ×)Àw»î‚Åxs®z—rHj/Wø'Ì€8áèqØÏ£†…öÎb2#ôMÝß± ¶Äk†vÙS%t®¦´çr0µPCi&¬µb¬!ÕOÏ~Kbj|¢–É–êb…‘cé°åH†š¡ä†ó|ã–•Ö©¡=¸rŠm<ë7§s<ÔA$„ˆÝd Uð÷ùÈ-«Éƒîì…×hâ䊔ê‚åV™&_8¯‚†Ë—¸«)¡ŸY§•·è™7삱š§H_ËÂ:-Àðí”x¤h†‰è…ŠÁÉ ½iKk²): @Ñ\j°‚&,×P^ßYóÇÁf~ihÄsõ ¶D?tà¨h†ªî‡4KŸ¨uª¯C½™%MÏÕ_³JPWâi.×~R²yhW|Κø²çÁW=âï=þíðùZ J ´IE™CTÕ` :¿%X»»`K¬gh—ƒµÉD†EGH{n!&¢ZÈ mHôÌùv˾ƒ…}ä8F+åæ'ˆÅïXËíbM 4ø]‹‡Y‹(5ÕÁÔq€uìиVYç%mXêB”MÙ\}êÃá^i§­~˜»~#Û|se,ah×Ð)qy>0)rf‡‹Æ´!È|Á˜®Dâ0N6”úB|p\;D#‡ìPÀÓÃŒ;6-4iq €†¬ã}ݸØ3ö‰š6A¿i|k¨]ƒ«|ˆ0ó©\TlIˆ  7Zc™Q||‚¿ƒteòøVÁB ù -úäž …¾éþ‚f~9!uAãÒåR~H7Áé£Îò»I `0*åðÿå¯8¸?ñ¸n\àd¢(l(•ÿü˜~í÷K¼U‹ Ý\OØt1ßIh× £€¼Ç±bìÍÁ>»¶íh:äjgJá¼ÀÂI 7j~ƒ8ØVurOìõóȾüiR &·tònÃnÜ7òS¤¾‚À ú þOÞKŒß÷ô¢î½¼–Õ½æed ?h÷h†ÀñU‰ÓP†æ 3”ŸFŽqð˜VÐ[¨<[åÚÄl²=yy;,§~Ù³ÞïäÀw¸i™o+ÌH|‘oY€ù€(ÀàwŒH?îxhéT.:Þ°ößñ9•"Ë_»sT`eÉÆÈÕ6Þ' K=á‹÷¯§#µq~õk8íì±÷ÊÔtQàRÏ/®è´IKå^ýÜ…Y·cÙZ¤^ÇÔMjDŠN»Â«‡YcÖ¤S0\…Ìö F¬óÞ_¾¢]†9ÄshíGX{<@mË¿1âTRóø–ÕÚ]öÂCíxr®GèÁ}w™Î^É*ÓØ€bÑÜöó‚ßâAé%rÕÖçCìÕª¾™ŸÇD sw Ù%ŸRŒSÈã0$è‚Á_$w‰=Þ/¯H“¿RnÎièáç¥ÐÔã)Bm>ÔfŸÚíëV¼Æ á;ÝTã·ë g¯ú„¢L“¿oKMå§~Öpæ­TrðU)¾xFð¹â?ј²úH¿jâþèÆ¬€º kKIû–Û:Þ± ¶,ÜÖMÑÒmP”Hs;¥]b1LD- D%øU¡'ζsƒ–XíåätŠ/ô#Ç…L—Zh¤ä­™n„^Ìtn™†hè›Ô·?.u®RY>¥?/mLD6,ðgxô½«¡Îþ—œïÑYÎ+¤ØW¸Å£n çsÕùP‡C?_OôcÉ0L-î$È·8ÒñHoÏîæ|áNÕÎeðÑ;U»$‘ùª‰„´Áüõ¯êoݲb]'fM's<‹Ê~Æ iܦêÿtÄ9þÕ §Ê] Þ<à±þOÌ7!´¹Y t‘ÙâÕÅð‹ôpñßx90endstream endobj 649 0 obj << /Type /Page /Contents 650 0 R /Resources 648 0 R /MediaBox [0 0 595.276 841.89] /Parent 643 0 R >> endobj 638 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figs/fig_path.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 652 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 185 144] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R4 653 0 R >>/Font << /R10 654 0 R >> >> /Length 655 0 R /Filter /FlateDecode >> stream xœeTËŽ1 ¼ç+|„Ú8ï\WB+qcé?h´DKŒ8ðûë$¶»gÐh4S•T¹œîø üøÈï~¸›ûôšàÇ_×àŸ#øÂߟn­¾¾¸Z°S¯@9b*p¸’"¶)òB€ßŽj­X÷sA5xŒ d»®îŽy¬(´Š‘ ¾¹Ì…=¼v±»7;¡<âÆ ÿ+¥SrCORۉיrU%B„§êóRÈV.l`áˆb« „FPxßÃ¥-ò4Â]ÚRFS3æ…zÁúZ)Óû¨vöÕÛJ#%ž}Ù‰m‚/%Œ‘â`!ï»ÙË=!Þ1˜†¹C!$äc Ð3R¼ày=Æ}Q¢ö%ƒPãè}Zx(|ÅÚAÜÒR,ÃZÂÍ –ñ¾‹Ù™ÝM}fT[ÆLÆPåKÔ²׉m£G®úH´ÆùШò- ÛQâT˜ÃÂ×ÊhŠåp¦¼ïcôf#%&Ìù:?”ÑñPCÃàÛÏ!tÎJa ÌÀœóCñ9?”Ññ †µÄI¬ f »ݸÏ9Ùåg?àyãùÏ_äíMæ> 6_|„„±÷Xa;܇?þãöËåŠÔW©lßy…Æ QĹ`á90è}ÒOD }ã×§pð,Š0½8bæoy­…(ž’1ÀSîÈlÙMÍç ¾ºñyoþSHendstream endobj 652 0 obj << /Producer (GNU Ghostscript 7.07) >> endobj 653 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 654 0 obj << /Subtype /Type1 /BaseFont /HLMRBR#2BTimes-Roman /Type /Font /Name /R10 /FontDescriptor 656 0 R /FirstChar 32 /LastChar 251 /Widths [ 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 333 500 500 167 500 500 500 500 180 444 500 333 333 556 556 250 500 500 500 250 250 453 350 333 444 444 500 1000 1000 250 444 250 333 333 333 333 333 333 333 333 250 333 333 250 333 333 333 1000 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 889 250 276 250 250 250 250 611 722 889 310 250 250 250 250 250 667 250 250 250 278 250 250 278 500 722 500] >> endobj 655 0 obj 596 endobj 656 0 obj << /Type /FontDescriptor /FontName /HLMRBR#2BTimes-Roman /FontBBox [ -168 -281 1031 924] /Flags 34 /Ascent 924 /CapHeight 676 /Descent -281 /ItalicAngle 0 /StemV 111 /MissingWidth 250 /XHeight 461 /CharSet (/zero/one/two/three/c/p) /FontFile3 657 0 R >> endobj 657 0 obj << /Subtype /Type1C /Filter /FlateDecode /Length 658 0 R >> stream xœePoLu¾£”»!àÖZ(ío—mŒYÐqQ [²q”!­½^oíµ]ÿ€-Ë6ôÇdë`[…ìB÷¯ûƒ³Ö…Ì!L§1›¸ e$K4™Æè7޶&꿼yó<ïóŠÃ™øÒª^/c]$µ[¿GÄ×¾™‹k7õiyÛÞ Ì ž(‹î|­™mÐÔì›a1)=:»É¢—ŽŸŠ¨OŽ ž O‘b—Äø¨ê´˜q]qky2•B¯˜£êíöÃ^HžõwÔk–Ì„ò ¬moß¾—ôJí ¤”t·7H”OœÛ5Òñ!$QêO(=…–—Ý[WmpÖ43ÄÞ5Mæ6½/ ­+Q…'"ß¾ò¢DJ²%¥õT$¬Žç‹K×ht–™ÎT^EyèGÕ~w¤“T¿ð\¤Ê³ ©W^r4ûGLj>àóû éZ›Ì—=·ffCc1Ml,4 ¿†ã-1Û©æo5 ’Ê«7cœÿ4{nëÄÓuŸ…Uóa·g[ÿþ•cßFÏÜ€äWQC+°N§†çíÂfW¢‡ÖÐE‡÷ѱû2äðœJiŸÉ\UÍH”–A ?#-‹UŸ7Œ»&á8¼<97yí"!J'­E«¤Lu×nÕ|T’KŒÄÀƆ?‘™£H¶ ‰À~ü÷ú(n-mÑÊ[‰£ôôøzú ì,š¥:îÚãné:[»è÷HöÅÝ-}ðRü…H˜Ü‡oãèó™hG9ª¶ƒ&ª­óM˜%íIAÅHwïç‹wàwY¿=?ó¤¾ÖÓhR[8ÁâÓ÷­¼ôkäôMHÎF¾ðƆÂT.UÉß³‰Œæ!qÇÒ¥„Sï>>œ–v7–Ža‰?ž'endstream endobj 658 0 obj 947 endobj 651 0 obj << /D [649 0 R /XYZ 72 786.281 null] >> endobj 648 0 obj << /Font << /F21 372 0 R /F26 402 0 R /F8 384 0 R /F30 496 0 R /F32 510 0 R >> /XObject << /Im10 638 0 R >> /ProcSet [ /PDF /Text ] >> endobj 661 0 obj << /Length 2389 /Filter /FlateDecode >> stream xÚíZK7¾Ï¯è[Z ‰æ›ì:xãÝ ¹ÄÙ`8>ôH=#9µÒjG˜¿U$ûý°2Y,t0ŒqSd±ŠõU±ªÈnQøÇ"Ã#c5á–E›ç;=Aï÷w,Œ®`xÕÿûýÝ›r%$Ñ"ºôÓbµî·bAøb%¬Œß § ÁãËþø„}"þéa±Ò2þ”m+—çÅŠÛD꘩ÅÇûïþq_‹u\±V Ðßï>|¤Ñ÷ã%"±ÑÚ”°$‰žï$å ^…߇»ßý\óiÆp–Ó Cªé›ÿji+'ŠšhÅ® ¦€ ц]E ÀX;P&úN™ˆÉLÄ(ITYôØQÄÖL¾ ã‚£`}šÝNÐÈ‚á4ŽqMŒ–Q AãÒr·~ÿýJ=Ñå‰-¿Ãæ†-7lyâK4ÝI,ŸÖß凼ÀñoŠlû?ìÙe¿6ÄbGß®Œs"”ŒLˆV·ˆœ£^f7lXa‰Nø¼e šöiý}‘>¡µfí 1BܲâÍ §4¨ø6;”éš½á”L*Í`š‘·¬t³Âi¥ *ý˜‹•â*>ùÇþèŸEz|ÊÐ8C/øv ±—©«1ÿ DÌŸB¤YᩈJD­…ó’žNÙq‹Ê¿ËKà Б÷®õ7ç%Ù–êo Hb•¾atZ+œô—ŠÑ)™¬¨@Y>- !³XF4Õc” °_1Ñ ¡ž¤O*Ib9´€$ú=j@£¯^Ç›ž‹Þå€NôsKgÊ“²"½¼n¹$¡& å‚oI€´_,xZúåŠC@0”VõØ_YÉJhF?PÎõde&vm¥٩̪áP™(Éô0 RMÈjñȪhfö¡Ô· Aã¢Xh縿.°„]¶P6N·SÉn€Õuirœ¶·»ð•„Ô†H=ž¨AI »¨"A¼6‡ô|öÁúmQä—]æqzûø¥ÕOŸFã6"¦4T®â†h8† UëàRX«¾œô ôRÞ^ ®un8©s A®ÑYHˆ ·˜š_U9ÿÿM9Rs=k’@â3ãYqÎÖtÌŒßxìi8©k qÇ¿ü¼u9H±†&_k¯4ƒH(1jÎ PîOkW”ÒåT&!&a7¬p³ÀI ª ‡’ÃøÚ+øWÏ{­!”!ÖÌæÜŠ q.Ó¢\Áù¤& “7¬s³ÀI‰Óy—ž²õ8ð|ÓêïD}Ͷ¯Í¶‚Kwì™3F ñÕo~ζ£IH0I¨0·m‰®„šdÖÄm‹MzÈ.£–à 'Œß®¦Íú¦ µž»q=-#L½£~µ %œÎ" %Z¯ø˜5TB¸¼áómk“ê’JÝOùþ¸UVZ.¿ºÞkm! |¶ä®HÐÏû2+{xø›—µŒZ†k"´¾Ý4õŠ“÷…œámf㤶s]ÈðJX†{»•"v/jø&÷Œ­3öʸÌýhö+eû7ûì¸à6./~d SŠ».~JzÄ'Ó¢ÈënãõY¬¤”ñý.+²@ŒïŽC»ôÔÜÄAè;RìxYÔ+ÊýàgßÅð‹Ÿ*îαaÝZ‚Œw^¨ˆ‹»ZcZ^•¼# ¶Æ¨¬u'j¡Ò”²fÐh¦/%a$gœ“HÒZ&L@5aÿÙƒRå_ @+\ÿJ> endobj 647 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figs/fig_path_eg.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 663 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 120 120] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 664 0 R >>>> /Length 665 0 R /Filter /FlateDecode >> stream xœ]XKŽå6 Üû:"ê¯È.“#4 @z1È"×OQbÑ~Æ`Ð]õXEÒO¢äþR”ôŸýüú¾~^¿ü¨á¯¯þ»$ü†ÿ_çÓ¿^¥Ç•Ó¥ÄÚÃ÷ÕS‰³J(¢„.eÄ>ÜúA`|O)–nŸ~]"#ÅуH±@ÿ‡§¨ð)Y“ÔGN4‰i•ªÄ<‡8ÖšÚp%“›*J0YôåE]y© 8“3cºñ‚ ‹ ‹|wñuýyIEP«AðFt&­Ç9³3ÒKÌy„…‡ÑZs02ö`£©N–ƒ - (u+ÜøÎaŒWa^å«í-w‰2ñŒÛÂ÷9Ð[îLÖ:Ô 1Ëk‹mébpKhôÜ¡ÈQ0‡a(àuÇ}æ@|ç Ã*èÀ*_}hoe FW´8±¬¾¯‚‡'͉2G¬ 8-ü|@‰½ëw@FV1ÁÖ‹ÒK@ AoGÀ”#ý$N¦öú^ hSu"¦á ‰k/Æ óŒ]I¦®{Æf€›.Ç 7O¸8ƒ±‚ëk9ñÌ`ñcX¼E Ý=…z¢ÛŸ + ž¾zо°=ñU‡’G\ØÉ:¢$Ó™.Xø½ãáåzcÁj^ºSr+Ì!ïvK°„˜7sm`¼UnàØS8cEÐE¾ºÐÆFš1 B&FKÓ60t“_c†~N=Üx`XíqëL¯GA‡6‚9 C±ww¦¯zæàØs8Ã*èÀ*_}hoS°+ñ`jqá³ïkføãÁ™Øá˜À96ìKÇEg;LœÈýhÓ0…a(°YŽÂ"R†¢ÜÄž‚k k|u¡­¬gQÃ!5õœûs&c 0cA´§ÛÔ2ÉÔÕ·Àôu¥#°Ä`•e”ç©›â|d ÃÌ€%~¶°O²„É#ºwrœ¢ êêÎH¬)X/ð®Ãa[XFuKÎ$ƒ6+®+01ÊÄ|)i:³taúÑáÆÌAÆŠ Á]ãgçûÂÙq_•ØóøÂJÆ]ά¢§R [¶ŽüÀØÊud0vÂpÇÙ æ0¬_Ù8 FH: :ß9œ±*èÀ*_}ì]†õÛpmÓ)0¦.Æ —‚µMfb Y{.T½§'Ýýº¢o&™â8讯50…AÌü¢ñFŒ9^\~c&pÆJ —øjBëC5à*.²IÇGÇ7ŸSu¦/UÁ7¸±Ç–aÜðVÙSË,ò- ž*` ÃPàæz‰xæ@ì)H°°ÆWû4k˜b8ÿ®%èµ®‹u8ÓpI’®@l§1nŒ‹Î>tÀª<3@[À†¡€ô(,¢êë·±§ ÁhÀ_]ìÎôòˆ['¦[zš5ötÄ1k´U8þtEb~â] ;3q®·¢okûÀt¼–¾üí+…3rÇ`M½‹´ÀÄà®Ñp zî"[a=ƒ1^ƒx¯.ö™V1J±O$a”ªg6änä«ëa¢¦˜ k=06´ì+‚3ØÚª v¾ <ÃÁzb ÷vGà <‚£'ô$¬—[…¯Î%Dï¤à¶î;HGT#! {or‚·úÔ¶ìˆØÃmb<çnî†5^WÓ# Ö“Íô„·¿3VÀѳºêwCþÇóUW ˜©ïdð³êaÏ­<ðþó‰þ=…D[G@¼çnS¬ }âåѺ)ÌØS` 4`Ÿ]hg¿ãßÿlïendstream endobj 663 0 obj << /Producer (GNU Ghostscript 7.07) >> endobj 664 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 665 0 obj 1554 endobj 662 0 obj << /D [660 0 R /XYZ 72 786.281 null] >> endobj 102 0 obj << /D [660 0 R /XYZ 72 521.403 null] >> endobj 106 0 obj << /D [660 0 R /XYZ 72 40.363 null] >> endobj 659 0 obj << /Font << /F21 372 0 R /F30 496 0 R /F34 561 0 R /F8 384 0 R /F14 499 0 R >> /XObject << /Im11 647 0 R >> /ProcSet [ /PDF /Text ] >> endobj 669 0 obj << /Length 3894 /Filter /FlateDecode >> stream xÚÍ[ëoÜ6ÿî¿bÈ.`±|ŠTèõr‡+×G ´‡¶8ÈkÙQ²^9Ò:Ž‹þñ7ÇD=³nî€E¬,gø’ÃΈ­(üc+ÍWÚ¤„¶ÚÞÑÕ-¼ýûó­ 4'Qû_.Ͼüg«Œd©X]Þ¸î1©Y]^ÿ²fé&á2“|ýÍ›ü~ÃÖ‡MÂÖE½I„kñÕæ·ËoAÚ1Ì­5HÃþß?½ÞÖåýÁÓE‚¤"iÊ=ÙwW›$•ë·ÅöÐ éÙ«ËvÈvDŠ#pÀïÏ~ù®®Ø·g”ˆÌ¬á™–e«»3I9 ]ù¿wg¯Ï~hùtmØkJ7"žfY§ŒH!&ŵmŸÇ& ‰Dét–›íK›{òÔfvö… ‚ênöõŠI"dгÂYJ´Zi˜ŠósÔ0ïÄϠ飘ŸÂËM&ÖÅGXBK7¡býz¸b¶xM­Ô’ÈT¯¢!ýyl8{È,ÁnÙç­ z$ã {ˆ’™N‹Bö÷oö $€ž‘!|FSÂ`YG¼F²Í¢À!#7ÆÀ|à–ý•*Š“¿lbw¥%FJ'ž ïk…{üñï±V lZs¥3žÑÕ[øogaËšÁÒ£$SÙª.V7½p­-“eq°¦-y’N˜Û$NItIíjÕ)‘4]ÔÑv—7Í&Q\­/a颞¾®‹õôÕ”¢4#œé†ß p?S„ Õb@ø_;èM¹¿ÝîyWîýÓÁîe|ª®Ð.»çÇÒáM¹wçþÕÖ£žÐ^J W'¸xub™?<ó¿žyÎäÊŒˆÅ©µ8±8w/_NM‚€£M²FÙ p§'A¤7Õþpñâ²¼+šäÇê.ß¿˜Í5†Ÿ0èn€³ = ‚nÊß‹ ƧÂñ-¹8a¤Ýg‘z;½·ßT»ªFËLçŽ/ªàÜ—'Œ¹à,fO‚˜¯n/þU#U8>T.Òh€sH "}WÔ{8{.¦fUÁ1-¸šõ¿¢v+ÊôÜ/•jâ#˜Ë7#UfM ú4Ó˜ÁƤ`ŸÙ÷XÆ<`;Ä\]íÊ÷Å8Xæ„B »=Ð,Aò™„Ž6T ¢Š>зÄ㸫eÉ$è†õd ¤£JŒícÇ$<&51ìC‡% ¦(øM±ûPÊm>ÄÜL›E žd iŸË4T8x…aÏ€ê;,Bí3íAÜ·<…°Óˆ%¼dï€Ë$^ž‚ûhÒãñ†KxLÇxg–³HAO"[‚H`¸LÛ*M‰’ÏXÑ¡ÃìÓ>ì93¥ Oš.A$ \&!K4`iv<äÐa ò€© ·žî`ŠGÒ$”-®è@²„³ÏeÖ ¦EkŒ;êIkì›íMFΓ;–ÁÉLµè‹9«Žf$±ç­öùL)®C›}4ÎÐcìmqyÈwåvd?(C›º€;Ð,áò™6V4…e®Ÿ;ôXÄ=dÛážÁœ B•\Æìi1øÌhpù¤xfßcó€m‡¹Æ{¡‘½äùòååh– . —}Èù~ì·ÂþNYú СÇ"è![”þ{~s ñÜU>Î¥IX”Œ.£4K¨‡|P.qA›àÆu‡(5¢Á!ÌÓþRŸËÝŸ l —[<Šá•½Q Ý=Ft—Ý:âx Éd Í0ž­lôš°— ‰!†Ç§° ž¥.(ÌýhÊ&~kk ð=0Ó‰Í}¾µ12Žø9"kA¯¯BLÝr DßÚ(7„×6 ¼v¯ ò{¤óµÕƒ8W`ÜÅ»î&"—Èôú>GÙµk¨nܯ,Š©`$´ò«ˆÂÅ?Jÿ»«\ôýÎwÀÁ”Û– Ážlƒw¤xg£á@°ÈÌéÙ·Õv: 2ê}¤ˆxäÆ?îÝýEaÞä5Ì—Äù’ŒûË »Tð~+ÒQñ1¿»Ç‹ƒõ‚ýÍÇDÊMAÕJ¦¶vo 7 ,`qMd]³,µ™I ‘”ËLâØ3Ê%ZÚ6ä$CP9 f /äà€F?2ÁJI5WYgVA¯0 ˜Ç:C“ î¼âˆïŸfhû|Í%f™sLȧÀò¸Ä›&©>Áüãèà)àl¦lÆ_IÁù”«@cÏ0vr“/_ÿôêûKŸpûéë¿<÷7¨8³ôÜæøä=9ãœj=úÖO7Âyýx«~¤~XÐÏùþñâÀHó¸¨(&‰2ⳕ­¢ºÎ+ÊÓ ¢j8q ›I9°ó?¿)wÅ!dQ Ž$!¦ümÍΗEõ CÊ]ÌêýªÓ›¯Œ¼øòwŒ¯þZ‚V?ôîà™½ ΈTÙçÛã#ÊrÐý”M¹¶í³ì›ÂNœ\0ul.›!Àî›ÔÙò×ÖÚŽs`÷kIHj¸IÔcœÕè3OkàíH_ö(R´$#iƒ@QЬ'­lÐ-Ó˜dÀŸæÁïÖK@‡ÎÝÜ{"p(†³…næZ =Õ2dkk)°bÝAø‰[{A1fI3œÂ^ƒ-Ëërûà¹N .¹ÂƒKVÝÝÛ*lóÙçLÃÓÁ¿·B£|pú克ʲE0ãèLÁ¦cjQsfIsC>ÓWg &žÔ÷X:`kNßòåÍh‘ø8¤‰ r]¶mõ—ÛM>kÆ3ã²f˜1Û×nÑ`ôÚ­9Ã:lÇ9Þ“Ž7¬tì…XWµûõéE2qŸÅ± I›ÙìnÔ>U]š£ê:>[]·$«­®[8dÔU×ý¼aëO×q—PG×éÓÍîs‰Õšf©¸.ŒŠë~þTmÇ£f'Œ¾à\mC qw@-t÷P|¼¯‹¦)«ýzð·Ô vÄ¥q§<7`”T¶X4HÚò¸S•bxi›Š®‹8‹Ô“[?ÅŒ—šÏÚâ¨}Â7e02 Í}=)Úýº:½JI¦¥µ 0z'T O9¼Ä“DÄ×’\Úsâ<0ÅðšIwæ¼j_ÒöíÏþä–ÁàË?ÜOnž§¹!b=@¦ÿŸCDÐÖ¡4á ±ÚŸ»!míÕ<\¹ëA÷ÇlÍNÀä®ÓàÙÑTŽñÁ±.‰ìY··ˆp^ÛÛÇü¶ÎïÈ&‘RèéÜu$„8T²Þ‰?Ö'f¢Jø§µÆÿÜÄj¯´xyUûËÁÒbÒN‰x}©ùÚù¹@}íš•ÿ—€¡Áe`XŠß0ðc’¾Gu'!lÂ.{3’/±øB÷åCO3’‡‚&ü(#h—Y…3ëàßT¡¬½¼õ ºÂZª§±ãωÖé3tz,êfȇzý¡¼oÆ.qJ㋺ 4Kºò .±aÝF€U+êag7 ^¡Zºš´m¸é.CMϤÜí ŒR%8Ì÷ynýq ÊL9gn*l»ó᪌®ôe† „Ëúå,]OÍ¡°Ë ¡Ö?a. ·5°…üMÃ][:yíZüqu°©®[÷ÅÞ»G/Ǧ³FVÀñ,凋30d;»ÌDœšÅy4K!À`dZ9VßöÜBE5EÈ©rË#6:ñy†ª.ý×™x¶ßØÓß]𜇣?÷NƒÝÝù†ëà 9ûòäºöÜ6¸o|58v„C§ ¯×Ý 9º.üÏþq-íÔÂÅ¿qàåǜۄ*¼òúÁG7p®…¿áÒÒYË-"x×@ùƽµ€Ñ9«4QZ€nleÂç¼ï‘D]Æçü€-Bü• 9®uàöKÛžøQa…£ ìVôù ¼—þB4Sz]=4m¦ßîÝï½›#<õ*ÿª­åöóð매ðÞ:žnÞàÙ¦‘ë|’ÍÎŲ‡Ð­O{ò ­ÖõÂÒõmqhÜSé–fQ;‡îй$*¸$–n0p×ÜzÂv‘×…#íô4ÞXîDW Ûm“À·½9ŽE;wQM¹‹Â`½£Xe)¡ÙQ7„¾CÒõ˜¨î1?ðð«N–õ„j6ÉP\|Ü1n?¸Ž¤uŽ"ØtŽÿV:j‰Ý„º% ï ÍÁ©ñ׃ukÞ¹Öý©‚ùÇiiUZFº¯«+ÿ]õˆì’^¼nûØÅÜ-;Ãn¤Ö±&ì1i‹,º\þpLâ: ûâ¾.¢h*jîWnãúE»"Æåq5îÞäv|)Rb$8„wóâè“®Ã8 ÑciS|/¾Àáç»û7ù/ÆÙð 8ëaxêI†bã4MŸKTùƒ9ÛÙÚ}ÞUþÉ&Bsé«_Þuiw&¼¸©}ñ AÑ£zæÌ–(I¸Jªgv’®ÇD=sélB‡vÑ—=´æžd(-6æpšS!bavx^KáÍ'¨ÄÈGkI%‹ŽfÐ’ûnfßÓªð†$¼ð÷ÿè·¥Æ>dâ °,ãöÇyºñ“©¨dlâ•_•¬‡·.î#ž© X“ßÒ·áÇÿå¯r]endstream endobj 668 0 obj << /Type /Page /Contents 669 0 R /Resources 667 0 R /MediaBox [0 0 595.276 841.89] /Parent 643 0 R >> endobj 666 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figs/fig_text_kerning.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 671 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 136 32] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R4 672 0 R >>/Font << /R10 673 0 R >> >> /Length 674 0 R /Filter /FlateDecode >> stream xœ=ŒÍ 1 „ïyŠÜܽĤ-¥× {óàO x^Qz(¾?˜­Uæ0ä›Ì4däMÃ× ö—€Ï74”ýl­xP ítŒú€oEPH"³y$—P+LײœsÉ·Y_ ž ÿxÞAò䬫w˜J‰Ò¹G> ÐGÅ3lúXÝ%ôendstream endobj 671 0 obj << /Producer (GNU Ghostscript 7.07) >> endobj 672 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 673 0 obj << /Subtype /Type1 /BaseFont /DQTPGL#2BTimes-Roman /Type /Font /Name /R10 /FontDescriptor 675 0 R /FirstChar 32 /LastChar 251 /Widths [ 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 333 500 500 167 500 500 500 500 180 444 500 333 333 556 556 250 500 500 500 250 250 453 350 333 444 444 500 1000 1000 250 444 250 333 333 333 333 333 333 333 333 250 333 333 250 333 333 333 1000 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 889 250 276 250 250 250 250 611 722 889 310 250 250 250 250 250 667 250 250 250 278 250 250 278 500 722 500] >> endobj 674 0 obj 129 endobj 675 0 obj << /Type /FontDescriptor /FontName /DQTPGL#2BTimes-Roman /FontBBox [ -168 -281 1031 924] /Flags 34 /Ascent 924 /CapHeight 676 /Descent -281 /ItalicAngle 0 /StemV 111 /MissingWidth 250 /XHeight 461 /CharSet (/space/A/E/P/S/T/W/Y) /FontFile3 676 0 R >> endobj 676 0 obj << /Subtype /Type1C /Filter /FlateDecode /Length 677 0 R >> stream xœeSkLSg>‡¶ç7dÓ¦¡DÅ£†"n0œËÜ’1ÖbªÎYä½ÑÖÒÖ[®Âår  VçeAts f‰îÏ6·hft—d1qÙØŸ÷”¯?v Ùöc¾¼y/ßó>Ož—$¤QI’òÜ÷ŠUoæ'kõœ%¥Ð¨×VÒ/ Hac”°I‚÷àË˃˩²MDþ°díèFéÌzx¸_€ù INÝ}”c49ÌÚŠJ+›t ðàöääÿeÒ²²²ØRÇ?6—³h+ l¢Ø8Ѥç Öl6GìÖé´ÇÙ ÃTia5ee\ÙÊX‰FÇU±ûµ:­Éd´±I9ÛÙôÔÔ´ñIÏf Nè9³q'«5”k Z«ƒÕÊØwõ\…†Õkʸ•rõZ«ÙÁf¤j ÿNhõ¥',ì*[¶À˜Åæ³…\Å Æüÿ AÌjU^QñA– ¶¯iD"‘Aì&2 ’X#ŠHH Žx@ªÈÇQµQw%%5øbÂåˆõ´°e„ —ðŠ£>¯¿ò>nî)k(\9õ6N> endobj 110 0 obj << /D [668 0 R /XYZ 72 724.329 null] >> endobj 114 0 obj << /D [668 0 R /XYZ 72 301.914 null] >> endobj 667 0 obj << /Font << /F21 372 0 R /F26 402 0 R /F27 490 0 R /F28 493 0 R /F34 561 0 R /F30 496 0 R /F8 384 0 R /F32 510 0 R /F7 397 0 R >> /XObject << /Im12 666 0 R >> /ProcSet [ /PDF /Text ] >> endobj 681 0 obj << /Length 2437 /Filter /FlateDecode >> stream xÚíZ[o#·~÷¯˜‡+-4 ï—~hÑt›¼t›h‹ÍÖKcy¶²¤ŒÆõ:Mþ{Ï!9wI«ØE¡cá ÏåãáGjXBáK OŒÕ„[–Ìï/h²„·ï.XlM¡9í´ÿáêâë?q–8â´H®nCwG¬¶ÉÕâÃD9M…•“wå”M6ÛÝôãÕw‰pŒHjA% 1ƒ//¾¹j†ñZ±Và ?]|øH“óÝ%ÂÙäî)aÎ%÷’rNÅçÕÅmô´mØkŸ?B¢t’rã=èˆ E%q;'õØ*ç4ZE¤C¯îã„8 m ²Ô cÂKå^çRÆèÇ„(K³MBl›®$DÚ$®Šñþæ3ä"»Ÿ¦l²…»U> ?wŠã’ŽÞç›Y·½.¿;XèY#¢cá80RåDã…GɶÛ|½ÀÀô'óÍö©†)7UVùèà¤/ŠÙû©fb‘Q„½Níg'RKÂ$;Žð(ƒ‰,!‰y‰ùYÎn ¨Ô„£émÝ^"0¡°"¤Ìñ6HLj E‘䧤  ñ¼øúÛ{&’?n :IgéÕ°´K̉#2 ÷2þC¿L*‡w”í%MÛËø„fDÇD¯l ´ÇMâ"Ä^“š¶—©IëÆTH¢ÌaŽèûñ.J”!]ú 5V·tæ$Bz˜r¡‰¶9R>Þv6!ˆJ¶]iF¬b‘¶¥‡Š³ÑHë»–x§†9Õþ|/Æ£²»¹—m  XÀôuüðöF(G´kã%do{S7ÇHðŸ‘Ñ ¦š0@VG×h¬Zæè€CE1ðÊMŽp´R´•8©xZ¢µ=?ŠlDX„€lZµ·Ê »ØMEŒÎ|•ív84Dê÷eží% )µãæuüæ5éAuz?̓¢Â…JjLÏ"¿ ɹ¾.ÖEu}ùÙå«ÛÙÛÍͧ|^ífo±®¼]óê`Î(%”º×œ=3g°»<–²(ÑËXËB›|íeˆ …qZÇÜ V< ëG-ƒQ·@ ú@øòë_V›p]bÑÙmü³ÏM˜‚•Ј£ "CÔ®žZЭ+h5gòŒƒÐxµQ&¢võãPUeqóPå»>^³Õª‹êݾ°-ãJá)Ú³ ûg0'ï¼=Ð"=è–ù<[ͯwÅÏy àƒÈe°eæŒcÐx¹Q&ì•Ñ÷‡UVåõiP•—ë,‚u¾YWY±Îã‘Ñ®@Îðs½Évy]ª×}pû‡Ç¢º+Öû¢{/a^yÅsËsÐÆá†‡•Ï"Çâ‚ÊÖø Oy…¶(ôäGÛÄ¡WÅ®:–]<Þ‰Ó¡S&K”OÛãÌöT¢#˜ËËåþq4ºÑÄ:Õ~˜Æ(2±›Å¾–f!B$ÊТëDXÄÿÖ+>Ά²æœ_G+ßp_ìÂuPâ ‹/qÐÒä•RÈkøœ*T)AõÞÖ¨2”ÐÍæoQàÿË^Ãþûƪ­(CEö;°i¬‹Aa AËîâò‚ƒâ9 ÊÎh`µÀP“7«¸v…³@!6áU[õý¢–"wEUx¬å‹ðþ¡.(øz½å[2ØR»DkÂ;n±CÚöã­¯[lPÝx´(2ª ´¾–¦÷#šÛßàbìpÔžRïâø1ͦzÌÇ(rÌG-ˆ±¬;T^ÍkŽÀåä[¼ô²]·áá>üöˆ(Y·ÿÈ6³H|†Ô#\Z[½Ùµh&•¯£œ¸„ùiÍ€©¡=,ÃÈ‚±vÒé”ZÆ:å”Q(§¤xÔ†­w6ÿ;ò7¯)j ÜgÒªb{¡ˆ¥*Qx*§Oª£¡CÚöØSH{J}]œ?í[…èPÓ³eø‰eŽÞÁÁ@ þKprÛ‰'þÖž±Î@²îVm üM‡Ùb^êê‡5[@¥ðrMõ³PýBç.XêS­ÛTÃzVB˜jà„¯ŠêÍ´Y}ç°‚¦*{´«Kv:Ë+àõx ­ëMÕYx³ ©^Í‹vPÂóÈ·¼-y ¼eê×—šƒvŠyV›u˸ǻCI‰Ð§m—ñl²ÿqìèÛnã Ú‚)endstream endobj 680 0 obj << /Type /Page /Contents 681 0 R /Resources 679 0 R /MediaBox [0 0 595.276 841.89] /Parent 643 0 R >> endobj 678 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figs/fig_tex_eg.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 683 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 202 182] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R4 684 0 R >>/Font << /R25 687 0 R /R22 692 0 R /R19 695 0 R /R16 698 0 R /R13 701 0 R /R10 704 0 R >> >> /Length 705 0 R /Filter /FlateDecode >> stream xœíWKnÛ0Ýû\¦ O9$g†³è¦@n[øé/²’ åY÷b}”[Ž)'­‘"‹@ ÉÒÎ#çÍÇ×!‡Ø®é~~µº^½ÿZÂÏ›ÕuàáÓÃíü*|Üà#~:¹&-aóc5Úq`VrÖP,ãËÕêìòÝæ²áóŸÈÄñÃæÛêì÷ÑkËUD©xÊÖŒ‡ì> o'äžóL€9ðbú¨¤Ùdrú¡Ç‹#Öz õ}D¤4§UH‹‰†LÊ5¦x×矒m·xñ¹aœª2Žïn' IævF±JIæ¾·ôb«ÆèWïT„ØsMa=gúü`쓃‘÷ƒ{n ËðÖ F …¼rN£d°˜å%lï™G&$æüH@skÊæ5(S©êÇ8lD•*»nŸOÖ‡ IR¬wJ›YgÊ\-HmJÂnZ{rII8£¢#ÿ»Þî3$’·4ÊÞsìÉoÏâÛ*ë¾·4ä¥z)ù@O`6$X ‰¡Î¿ ï>Ñþú%REáiqÊ,ƒƒø|v¥PVœs,¦»ð®;p¼säaE,¬R-r’X<ÔBI%ã–GäºdŸ©ÆÂAQ=Õ—ì SŠ%yÓ,syÅš]à/•¬âŠ›Liÿ¯²]r‘Ð@Ž­%Æá.Ù3y–!|±h{Þ«Ïë±U7m:M Þ$¦o­ú­U/¶jˆe'µYùª^}hÚ%Ö¬—\@ΪgT–¿žyu´JC¤öúÊ_†™â±5?Œ ù•׿Þ0îoǨè®ñäú×u@V„l*±Kõ¯g/†‚!hü–H]v‘îÀÛÇÿðqärZç^pÐþá U âÈ”Ù5®ÔfSôJJjù‹L™=IÈÅÍÖúºçÌý’ih‡Ð…”|â ÙuàÄhyŒÜxH‰…A³g-ØšjoƒÑ6Ÿ6á˪]O“Ašendstream endobj 683 0 obj << /Producer (GNU Ghostscript 7.07) >> endobj 684 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 685 0 obj << /Type /FontDescriptor /FontBBox [ 52 -20 516 664] /Flags 4 /Ascent 664 /CapHeight 664 /Descent -20 /ItalicAngle 0 /StemV 77 /MissingWidth 384 /FontName 542 0 R /FontFile 396 0 R >> endobj 687 0 obj << /Subtype /Type1 /Type /Font /Name /R25 /FontDescriptor 685 0 R /FirstChar 22 /LastChar 185 /Widths [ 569 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 569 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 384 569] /BaseFont 542 0 R /Encoding 686 0 R >> endobj 690 0 obj << /Type /FontDescriptor /FontBBox [ 0 0 784 275] /Flags 5 /Ascent 275 /CapHeight 275 /Descent 0 /ItalicAngle 0 /StemV 117 /AvgWidth 893 /MaxWidth 893 /MissingWidth 893 /FontName 706 0 R /FontFile 688 0 R >> endobj 692 0 obj << /Subtype /Type1 /Type /Font /Name /R22 /FontDescriptor 690 0 R /FirstChar 0 /LastChar 161 /Widths [ 893 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 893] /BaseFont 706 0 R /Encoding 691 0 R >> endobj 693 0 obj << /Type /FontDescriptor /FontBBox [ 56 0 721 367] /Flags 4 /Ascent 367 /CapHeight 367 /Descent 0 /ItalicAngle 0 /StemV 108 /MissingWidth 333 /FontName 547 0 R /FontFile 383 0 R >> endobj 695 0 obj << /Subtype /Type1 /Type /Font /Name /R19 /FontDescriptor 693 0 R /FirstChar 61 /LastChar 61 /Widths [ 777] /BaseFont 547 0 R /Encoding 694 0 R >> endobj 696 0 obj << /Type /FontDescriptor /FontBBox [ 42 -250 960 750] /Flags 4 /Ascent 750 /CapHeight 750 /Descent -250 /ItalicAngle 0 /StemV 143 /MissingWidth 333 /FontName 543 0 R /FontFile 521 0 R >> endobj 698 0 obj << /Subtype /Type1 /Type /Font /Name /R16 /FontDescriptor 696 0 R /FirstChar 61 /LastChar 116 /Widths [ 585 333 333 333 333 333 333 333 333 333 333 935 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 668 403 333 333 333 333 333 333 333 333 333 333 431] /BaseFont 543 0 R /Encoding 697 0 R >> endobj 699 0 obj << /Type /FontDescriptor /FontBBox [ 29 -205 635 694] /Flags 4 /Ascent 694 /CapHeight 694 /Descent -205 /ItalicAngle 0 /StemV 95 /MissingWidth 333 /FontName 545 0 R /FontFile 501 0 R >> endobj 701 0 obj << /Subtype /Type1 /Type /Font /Name /R13 /FontDescriptor 699 0 R /FirstChar 32 /LastChar 195 /Widths [ 651 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 465 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 651 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 333 651] /BaseFont 545 0 R /Encoding 700 0 R >> endobj 702 0 obj << /Type /FontDescriptor /FontBBox [ 0 -250 278 750] /Flags 4 /Ascent 750 /CapHeight 750 /Descent -250 /ItalicAngle 0 /StemV 41 /FontName 546 0 R /FontFile 498 0 R >> endobj 704 0 obj << /Subtype /Type1 /Type /Font /Name /R10 /FontDescriptor 702 0 R /FirstChar 105 /LastChar 106 /Widths [ 388 277] /BaseFont 546 0 R /Encoding 703 0 R >> endobj 705 0 obj 742 endobj 703 0 obj << /Type /Encoding /Differences [ 0 /.notdef 105/angbracketright/bar 107/.notdef] >> endobj 700 0 obj << /Type /Encoding /Differences [ 0 /.notdef 32/psi 33/.notdef 101/e 102/.notdef 128/psi 129/.notdef 195/psi 196/.notdef] >> endobj 697 0 obj << /Type /Encoding /Differences [ 0 /.notdef 61/slash 62/.notdef 72/H 73/.notdef 104/h/i 106/.notdef 116/t 117/.notdef] >> endobj 694 0 obj << /Type /Encoding /Differences [ 0 /.notdef 61/equal 62/.notdef] >> endobj 691 0 obj << /Type /Encoding /Differences [ 0 /minus 1/.notdef 161/minus 162/.notdef] >> endobj 686 0 obj << /Type /Encoding /Differences [ 0 /.notdef 22/macron 23/.notdef 48/zero 49/.notdef 185/macron 186/.notdef] >> endobj 682 0 obj << /D [680 0 R /XYZ 72 786.281 null] >> endobj 118 0 obj << /D [680 0 R /XYZ 72 432.357 null] >> endobj 122 0 obj << /D [680 0 R /XYZ 72 375.038 null] >> endobj 679 0 obj << /Font << /F21 372 0 R /F8 384 0 R /F30 496 0 R /F27 490 0 R /F28 493 0 R /F34 561 0 R >> /XObject << /Im13 678 0 R >> /ProcSet [ /PDF /Text ] >> endobj 710 0 obj << /Length 3366 /Filter /FlateDecode >> stream xÚÍÙ’ÛÆñ}¿‚¥—SË 3¸\¥I¥(±£²#m%Ql— Kb¹I‚@o6Ç¿§¯ÁE»‘”Kéžîžîž>f g>üѳ8˜ÅI¤‚DÏ–Û ¶†Ñ7Z  /zð—׿ý] g©J#3»¾åé©J¢dv½úÖÓÉ|ØÔÞ«»l?×^3_h/¯æ “Ï|1ÿþúK uŒNTÇÀ çóð~YûFðzŒl¨¢(´¯oæ‹ÈzŸòeS#êÅëëVd’(TIbPà/¾ýÞŸ­`a_^øÊ¤Éìž}¥Ót¶½°~¢‡ò¾¹xñ§–NÃYSº±±%Œ#–€Ü‘SP˜(X&Iþ¦*ûú;?ôáŸË®ýTEaÒΘâêp=$âštÊÓAΗ5”¶Ìvü: b/ç—Ø*G[Õ ý¬pØx÷EsòÐðû¾Â·›M¾E$5_„&ô^l6 %\!X0­p½/RmèUŽ-ò_åU.|‹£(äÊj5G‚7ÇH{¨ÂÙÂĬ­U†´Þû; èÆzÙŠ¨¯!û€–(íB»FAäËÒö𒟦hÂàò–k|^£1ç‚¢½e¹›Ãä&癸D"¨ó L»Å#~MôÅ×MЙ/ðøZœ=ß-¶Y Ȅ׳²5Ê#ÁºAžÌåP»õ@Ü‘Ÿ™€À(b7ó•X…ÞÆïzNç&,ºGž>"ŠB©l¿ß<œòv«C'ñ@Šñ”1ß¾À˜&Žûl·¬Xò\²'ÚœÕ>†í-ÄklDSûnÃ1e¤È|ß)Ñ?/åí ÎZ7ÙnÅCÿ쳪XA6?ÀÓ&«2ô.g,€ðÎÀ§Î9€y$~@/Üïݸnb|~WkulÛQGÃâüðIÆå‹Þ” ëÉ¢®Ö}7Å.¿/VÍÝó`ÒÔq |£¡ŽÂ)ã‰Ñ7öˆ9ÙDˆR£“>ž`›)kÌdha?ÌÂÁßTG'©Ñ\¨ñ“`ˆaB†PÉÐt 9ži«À›)ö'1L׳(Kë”TdTHŽÃY5éaZ%¡‹4ž§Öÿ/¹’ØgbˆŸèæ&½·YS˼>6¯U6Šg=Á>…˜x‘آͼŸŸÄ1ÖCnŽŽþŽàÇÊÓ~X0­›èTé8?ˆžâ_c»£S4uËú²tú³-X·ç'ËØ0 —tÚ2vPÆ:°èI ´:.Ð"¥¡²ìÑš(Ðç,Ã1!äúªÜ`’¨NåK2‹úñ êÀ­? ber¼ÑfŸà©n«Á·|Èé¬Êg·Õ3´%òH¶‰ ¡/Â*úÐNÍ‘²~4s(¨œåj ¨7ƒõÄJú¦þúæÓ)MY«¢4ü¯¿ðhýiž¶kÀõ¯ò[^ýÇÛÃæãG\on¯J¨‘«SJ0 ² No‰>δ8B§Ö‘”ÉVEqê U¾¯òZêw,y¥N|*ˆâÄãÒ¥¤b¦©—Q @Ú7 §q{*Ð",ȱnGú™´ø|[*žs¬2ª DަäßZê«eqûÀ¸Ô?Ôè3<¶*XLŸvëC;ж«¶Sè*CWaÓëtŒå¥c±·ÃZoºb­bÜŒÊE™G4Ú‚§cc l$2*3j®ò*LF!nX‹9×Õлn[6€ßßu= < Ïò€/ך€0²Fh¹€OÁÂÐûä–ÍT…eãP…ÜcOºVN®¥{ÁÚåÔÚ–*÷;_Çc.)è>Ïq²*MNËìºXúñ±Xƒ]Ç8}±ÚPóêêíÕ‡«¯&›ö²’ŸžÕˆÃ9âßoÚ#ØnfÀ~!ý«óÁfª 9`A”WoáùÃWhêW½=ÅiäÙÞfkiS3ù0O,|Csx¯¿¡v†üç+x<ql6‰íi·èà'ÝBPs‹Óœ>Ã-FbM¹EO¬Ö-Þ]½¹z9é¡òÅžÕ‡Ã9âÞwŠ0R±ÜÅ+Þ¡…Þ¼|Å‘ÍÙù]¾ƒ½i·yî¬þrspc§ì•š‰¢Óöëà'í'(Ùï4§Ï°ßH¬)ûõÄjí÷fÒvX­Fg%\8œ#Î}Û™X%I4à,¶{ƒç°)#h£â09m„~Ò‚ò˜Nsú #ŒÄš2BO¬Ö—òͦ¼¿œ®±‚:ä¬JΑ}[@7œ˜¡y³äs 4!ÔÐ¥pÇü‚e‚63â3gú-þ#'9rT”qÚ/±ø á2£¢ä¿¦7ãÝ¢ÕË-ƒ|¡_ò¯¦cí½ÇØËèà‘N£¤B;ª\Ödz#)¤ÊJJ°ÔtU X ¹Uî`w]¡ÃçWü®=fºš(·g”b=,9çØ~ÎÁìr”s^b±äý/¸$9Yæöâ2 ¦q[ÅäKN—8šÈáwšôN¡á… 7:®k(§n :‡&´ ¥š/M( Ãχۼ­e—<~›-*b#ó©2ŽJ¬ÕFä`áŠÚ1F«ÕÍæÇÑp|E•ïâH\É˜ŠØzÂ.ÖqÔ•¥q,òð8ñƒ±M^·Ç:1»6)P4µÅ*R+e®r}çζ Ö/Ü…œ¢h.ç-u•gM«+4c5òA ‚L*Ø«¼wÖI’ ¶|¤ ÷nÁù„:DOäb]9\u%;iAXÑJ Ü_á6´â”ë£h”„Æ¢™1Z=¥ _¸ ‹nÆQh„F\©þbhü ¹|>jƒʪ¯”¿S1Ô@m¢t õ(„:”±œÃ†Ð@ðÔÅÛ{°S$ìXpê©ä܇‡! ½ž ak‡C¼È.«|ÃD(4áC}ÇñAˆ÷øˆñÖ‡ b‚RâÀz/DªŒ@ ›§òµŒð@áÊ&÷´¡äTQçTs¼‘ðv²š_ຠõ57pè–Â<>vÈíï9áFÞ_µæ‡¹Z¢ž5Q»vÎN 1NÂhN%~ã÷¼%«ƒâ«ÐßÕÅjäû-Ùl*Š,³Í  k}¿]'Cî¡qçâÖBð-ÇÚÔûýõÛ?òЪ½rYJˆ¤pÙ´Ëɰ‘ ûD˜I÷|ðK}:ÈwÂL®ïHŒü§6 ÇlURóCû5²ÝñabIwTc¹é˜BĉH­<^IrÉ~¤ƒ¾ƒä¾~麧‹8T ÓtíX^m³]¾[Nä$îá^ð½“øèŽ\N§Þ®lÜæÐÞp°Û0þ8ÂâпøçÞ%v|i»{œ¿–EzqD÷Ù~p&c[©=‰{??W] ÃîÀ1΄ö€+7±»¥Lm"9ÊóÆÙ$’Dia›s~Dÿ"ÃÐrØÈÚXnäè‰qWóÛaÏ¿”&l$ׯ6‘C•ᑌ•ü‹LkYn÷›.(Ð.F0Ök‡Ý²)]:«€s"&&"‘OMn,¾üko"Ë^‘µ0:– x톙w”µá•é® Ä±»Œ.Å™ok8ª#]¢¹èäc¢†£LÔZžÛr0L:XRDçã! Á,Üù—æªÛ jh€ÝñðéEöRÖuU…Ü–Ëvë…w{ºíW„D†Ãs´RUý¸‡#ü©BǪ+ŒåPïH[rrBš5ø tAýN:ÚrÕŠÏ«|êDLCO™Ó][>uÿàÀ½û‡àäýÃ9^íýÃ9†cBôñ ì”0íÖgŽ t i6Nž|‘üzÏâuݼ>w!£›Ð½û/ ÌE5}1¥§Ð¨0ÔO^}üK¬>þoVß xê&¡›¼øæõ»÷øÛë÷Ïÿù,óŸ]±.”R——›¼‘jÿò²ÿ÷”VLªâäôm]>Q‰êÃLïjÂøÒæøÖ}W`îº ]ÑöKi²[T¶«eí}:´÷ŒÁhA*‹÷¨"Îã:w3½)GJ“¥2‚=lòb0ëD=­LéÔá1î)6ÀÃÆ ð¥/Àhù{.ŽŽÎVÿÈY÷ëÂéší¥‰ï²²Ï­ví‚> endobj 712 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [342.165 310.173 356.887 321.021] /Subtype /Link /A << /S /GoTo /D (figure.3.1) >> >> endobj 711 0 obj << /D [709 0 R /XYZ 72 786.281 null] >> endobj 126 0 obj << /D [709 0 R /XYZ 72 714.312 null] >> endobj 130 0 obj << /D [709 0 R /XYZ 72 649.539 null] >> endobj 134 0 obj << /D [709 0 R /XYZ 72 598.295 null] >> endobj 138 0 obj << /D [709 0 R /XYZ 72 221.335 null] >> endobj 142 0 obj << /D [709 0 R /XYZ 72 99.07 null] >> endobj 708 0 obj << /Font << /F21 372 0 R /F26 402 0 R /F30 496 0 R /F8 384 0 R /F32 510 0 R /F27 490 0 R /F28 493 0 R /F34 561 0 R /F14 499 0 R >> /ProcSet [ /PDF /Text ] >> endobj 716 0 obj << /Length 1672 /Filter /FlateDecode >> stream xÚ•É’ÓFôî¯Ð-š*,zÕ’[RÔpÈÆÜ€ƒ,kl%¶e¤6©||ÞÒ-kq†PTáÖÛ÷~=2ðOF™Š²È¹âë–/b-oâÁNa€L+•¨‚¬‰>‚8kM¦‰f|&[«¼¼?JýÔ‚UÑÕ0kÁÚ4Z+™·5*O”ÎÀDe‘ ‘ί$žcùº¹“ñîÒÕr­!öòû»µ1&þ¥<Þ­e\oQµ‡¶ëçq×*ORUDW•K³lJ$k°\ß$€UúŸÅƒAW·]´.k,¹sªðh þ¨TÆå E\ŸªòÜ_¥C‡r†Ÿ,n{tÒõþtÀØœãß ið‚Þ +j$:Œ˜"™´ñJÜ~L/Í-éˆ+ *ÿ€ÔçþJ àƒgl<¸d™¤ stÚ ´ Ü k•ƒ®êD8ê )ÄÛrPF®è"‹·x$¹À³AŸO;ÄXÔ©‹4Þ6¤¡+`vªUü}X3® ‡#„4aÎs×î0|å‘¿w%ÄéRÝA÷^zÏœ -ÝCØ ô†üÄ«8˜¥côSƒö&¾¥äÛ®>ÕdèT3¤Aó[ÿM&]‹™qgúScT|ïEj=¹k=ù†Š¥þŸ©éRbî†Î_@Ï üÌÙóœ<dP»/øi9€0^Ë™’Ч …ò/$&U,Ì?mo¤·äÚbɳÓ6¨0² ”Jûœ ÿË×ZŒ:¨Hlæ'ëo_Þb9¦µ™É™¥ž ²q`Ñç² íP³¡ð<ª;üD뉫þ캲ržK¡žº€AÙ†ò!È… iXÞ¥”—\ÿk©Ò$3é4N˜cªæÃƧšŒ°ëGü5ƒ#HÈ4û/òIÎè\I££æaI-áË‚ìà ž'SVô-Ÿ¯¹qßyKŸº6ô|aRÛÓw^üæPëe6µÕ‰RùWó©’¢°ž 'YrãJÕZ%&-x,‹Ä¼ÛEáøÇlH¨iHƒU9¨KÔöhTøêÜ?¢ç4Bgz¥0ÍÍTùìN4 #¥ÐÉL­ó-…ѵ‚¦)âž §+C!;»Ëq”Ë"þ‡†š°‚§°Û3‚s‡Ò*xºãz ÆSHœ£ íxþb%Ü0QTºµñŸ5U•c©tƛ̫81­J\ðZ¢·ãr_pXß®iOá6¿„®õºç9€ÎÑ 6ØD¾ž|¤^ÈÙ‹CËN }V$¬wóœ{š…¦qÎgrPÙ‹¥2˜Ì~‹ƒžãy'gbQwµÔ'2W_q”ižwt*ç¶£©€bø?™áy7§B)õBs tjžwÓÓ<ëfo|ª­v•ß0°Ã5€gjB\UO÷`×ÓZk⊺p¡gÊ;Py]Áƒö®u¼(´gê-÷>4NÓÕÛÄß3B’…ଷš,ä.Ouü 8hÀy¼ƒ¥Á TÅåÆªý5íYy!-Aç–©§-ù“¯_×TÃ0ažš-Í&8¶´¯›Ý>Ì4øÞ„õ ÕC\ Úf ë&Ì=\‘ÙŽý"çî {¾†]݆‡à³å8Ö#–E½ÍÅòþÎÍõg†fýóÇ›§Yhœ>(T!àÉÂû%EOØ0úo\V¹¸rüóë˲ÉfbÑJŸ[  xp¦Sææi*Çפȳ‰ÆÒ9zmhMæÒç`<ñ§/XDÐkôQu5oâ"½^•".µPDíÜÚúNÖoaã"tŒ€Õ¾ñ²ÀgÖøQ×~øþº³O¹OÃþŒÝ#Lü„ç¡”OÜÁ0ÏÐññÍyu*ƒÇPË¿nß„K¬·™‰ï3!ß5^-ofj¼À[9 ›öæÎ‚[\ÆÓ7:& ›6Nêä,£Õ„Fè™t3|c²ÐÀY²€kÈœ—ëE–úuO×m“1D0¢íýÒ!5Ü·VNdôxôÛpßÐþêèÏ‘öâx°ÞÌÙ° m-ž¹ìù¥{µ$t%ï5·–WÈ7‡Àð'ž1ò_PŠendstream endobj 715 0 obj << /Type /Page /Contents 716 0 R /Resources 714 0 R /MediaBox [0 0 595.276 841.89] /Parent 718 0 R >> endobj 707 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./figs/fig_colorchart.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 719 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 398 581] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 720 0 R >>/Font << /R10 721 0 R >> >> /Length 722 0 R /Filter /FlateDecode >> stream xœ­\Í’Û¸¾ÏSð¸¹0ø'pMUjÏIùh‰3âZÇ’f]“§O7 ‚ΚBÊeŽ-ÙFÿ~ø0ßÖò†á¯ðõpyùþl;®ð©»æöö"\gÞ5Îê†Ó܆æõåïÿîš·û kÞ^¾7Ü¿$~9\š|o€¿rÑ|y}¡—óF Ý2¡›®Ì9Ó|¹¼üvßN÷ñúío_þxùç—æ_$_K|Â÷Ìò­ÈØ'Yš–Ú„lÕÜK΄²ÖÉ: O!õ,XªÕÊyó;üÞµì®Uº‘¶uBI/ûp/÷隊×+‰OÝ-ëÖ<®[Çuÿ¾sí\·ÆñF›Ö¨®£µ÷ç…sÿ$àÛ¾_~ûsœÎÃã6³­pÊ? ŸU2ð»b+¸l¥'à­ãŒÔ9÷(Ò¶J¨¨ ~ [u®Çáöõüq?eÊ)x7ø [ìeAÝ å*! vaÎzåNSéŸä&é>qÆLµŸ¨ÖhßgZæÈIÃð¾rT/š¡eZ ªÎ ðޝØ#œµ™„O9lòÂ/Ãqü¸”nÞªgoµðœ•€@«uW 8PDv­ÅE¦Ûá4fò!(ÁÊËWI–ÒŒU¥ Ñ H\«V8 ÕÇi¼?(ZæLÂÀ'þyn`Ñ5ÂU«páh§ìø~þ¸$’Ä¥}@—Ü(ëV-[Ê-$æÎyÁ´é©Ï7KàÎéj_w­‚ˆL¶¤Å¾~N÷±ÿ‰PÁ Ë]k§@þÚÆ¥%^ú·áúèójÈÒX ñë,¢²&¬ ùvLÀk:Ȥ”íŽýíÛ†p&H8[bZ(ëj„C(îŒYÍ{ÔÇí=óæN`IïYV,Þ,0­œjwåá>§éÔð$§­­_|¦€åÅâw{™h¥‚²o¡ü3[åÝÌØ9|ÚE¾³U;/àe`|Éä 1ËF©c‹¥®°…pŠðžYćò•V1»Jº ¸¬IºXo…×X°|ªÁýÜ?†h¡è^ AÝa’¤e¶6F¸?SXhÎåì¦[Z(Ž"}onÁg-\'«R³n¡GnãmpÎ-é(„žK\(èj]œPArRÐ £QüÛiº?~œÆG&t|.iBA€Wuœ¦…ü¯Áêoö´Ã‰nثƧJú1¥Lõô‚þaD£4ôFÁA.ãñŠs[¾CY¹VFŠªÒÓ |úÂt–5fi¹ªÎu5^È ¬^c% &6 È ¹i *œjò#6ÞºÎú^;à–Ô¤5€¹°˜7vÙWû@ÖàõÊ}¯Þí 32k£ß}¦Iˆš~?rY›¨"\1síB-̨†‘n¾8¹ÖbðÚ|öçUNÎAÑ '¿‡ý©›Q™/ ˜Á'È:‡év}={@I©£R?ü\š*å+hGu´["BQ5šBj˜M4D„îøžÜð¶‹ò#ŠöM¯äвsÂpÌ“òt²z©¼ñ¹e+ *f¬· ºå*~öù×z”§FE N( £ãÿT±Ï4¢êêó»6zÖ‰ §u‚üÞ³(h­:¡–êú@ËͯZì'úBdÒ‘{§~Æéh¦_f.ÎmP„Ϫ2ô¼©8!C²å2ÎJÓñ­°IÅNÀ‹&ܧf—Œl¬…~”²OEÖé8~ȉœ– ŸÙÞÌÚÐ nÅ´öƒš¥FÔ.Ò ÷y>f,ì±…O¤›ÄŒŸT¤ð]IðÆÿ¥AQ¤¡@Ï»$Œ‹_ãZF‰†”áØÛme´8D€‚jì¢BAÚOFŒ f‘i®ó¿Gè¢r,1 áCÏûIæà„‰$»m•ëuȤHô¼t,‰`ˆåŠ<…†¡‹µðXĪô]»1›µ!éym }é2ôèЇ¢! Îi3éißäÚ㘫Ô(<>nß?¦ñ¾ÎRÉØ°~nB’ž·<žCɶ]0Ã2®ì–ré„#=/Ê,ƒ8õß?úÌÍ=r§êZ1ªi ”àb„ŽN;ÿÖ‰Í…Ï J’y€d*†PÌÛj$Ž-ÚRÜ=†þœö#~œIófײwzláD\çèHh(ù¯¶¼?Ñp¤ Ñ ¥ ¹¿Ô0káU¢Ç¢AJ¦bšÌx¬HZ°^'’Qz+Or¾k”©;£¯³dBž—¬Zÿ[k>ŸßŸ&òu!Ó^áH…Ú ?û‘ÎUþ$Êùr¡Ý’Ž‚TÓ4ƒ‡dRBÁÃö¹e¶Â!>|Èc]Á Ú¥ ¤}(å¶Ä“VÒq—‰U, (ñ€‚|>NP—l¤5~º—œ"΋\°€ö †p€2|‘Þ :…ô9™‡½G6x@»ŒmZ]XŠòÄ•Ã$³ôñ…:´é>HyèäQ:‚ NÈ éynýØüx.åôžÝ­$‡~ZKhqÀ£ã`_JõÀòâväž®žN¼ž…°¶µ¢©É#³ä‚Õ³»Cé z× á‰'LV13еPˆú’E™ vÏNEô)³çpêoÛðq_(þ,ÚªEv³‡ bK¥pμÜ|ž΄òCÊžqÐð¡ÄZ¿‚ü³ß3¹‚ô”á;Û„óèS¶€þvæî­×óézo S›yf‹K´Ûᬶ*ÒabÝ´jáo~rÔÏ5Ý¢RA7Ú©”»Qù% oýׄ‹”6 ¨UÉGÚY‹ºÖ‰”ò*É–Ií\®Œ/óGÓís¥Ž-³R[iw^¶<#+ù’<ïžB6ÓVËâlìãñ|eV§à/í,› ‚µ+ñ§·é|®·)eÍ8yªÄåuØà1íÜ'QD˜‘_‡ñmÈwaW°–vŠ“ÐÁKxM×2Â_%¤pI´(¸K;µ öÝs—”ýõ˜IyeŠˆä–²åÜHL¦Ý5ÄI¯q0Z/ì·Sÿm,˜’Ž'“­—^p™v:$ø¿ô亨ízË?éЊ6K¹´³,ØL;Ûñ% Û,d’Ü|ŽL¶Df%{ Ú0„ËØKçá2]§ñÕ' :Aôâª%…iwO?CM½ÖÏWïÏ Ò¤P2–v e>!%Œ%¤ÜÇsv£Àó%Œ?B+ ß"-í <ÉK× ¢ˆ£L-k¯$,aR†äâ¡%±ðÅJ f¿K«fIHÚ¹v Ý!H׸«´ö×ót#$Ûì97ô-O U‚- ©$*ítèªMÆSKœûÃPÔ&$ƒæ2Ë.(K;eƒ'€<ÊDSåÓÐg´mò¿EbAVÚ]žp,†jÓâ[ˆœß_³r+uþúO§×ºy™é ^c|»ãa¥épèïcžZœÜ­\‚m‹œ´K2LÇÐĤĤ÷þ½ÿìÃ1°Ûrp¸÷\€iÖ­¤%q¤%ñŽhIJR\Iw8ögȾyð‘¿™¤=¬¤ ¡1˜î2i‹4F]¦5~ÔÿAGÅ*áû®Ôs<±b.8°Õ ÑJµ¼ƒ&~«ÆôÈN*]6Šr$ʬc!¡úBdwÍúëcüNGÓR§¨ßÚ”"BæŽ6¨d ùžgàÓ×r°ø¸?„sÝ…r7­:n jU ·ŒgÔOøñ?Ë/&¨Žw„@±0„F‰p¸øu¼Ï9G±’ÍÕ¯‰U‘Ž$R/sÖÑy¼f1ÍçÚûƒ÷œD„£žŽ ôx¼f%KP }n¹…}ïÒQׂ"+YF0Í|Ç ÂM”¡?œÞ?^Ã!¥‰1ñšZ݃Ø«"“ÄDejùE-sFdü¢þzüüJŒSÔe¾ùãZd("À"ý-hSI4²à–gwΧé0ÅÜôrTAÜÖÍûRpŠöŸ­c$)¼w†7nm°Çñx¢ALJw]\ê§ä’:K–Ñn.09%è:šÖñç~‚98°üý;éCƒ/®QðŠöÞñb¸GJ.ºÃõÚç}•—¯ºè[Ä¢½çæ>É ¢#k_Ý3ñÞ¢èJf§2ƒ}(é®ï+Ÿaw¢à:~&@œ!„–m8$=Ä^>&ω2[Wòˆ$^‡Ëï¥ùã˜ÒÌÒK‹ä:*t‘z¹¿Ö…~L—þ1­KG³1çW²ˆ$NŒg·Ñ6–K…5’ûE5‹È¾²œEtïÏÛtÏ+º[X­(¶` í[¬…ÀNã"£öJ¨ñµ¶DÑ–#¿ùà:¯‚ ³gý¦eZ}–+4 Hòc}8½bR¡2Shïfh¦xÆ"6ß*æ¨éÞr1Å/hŸôΞ^3Èý5¿XÐàÌM¬r%hV7˜ä8A6!«‡mð?asˆ”Dg |®q%+hçM{¼*á5nMà•°ÿN›ù8n¼AýÙϘ3~ÉÚ¥^ƒÐþ5 ²*ù>„«ÐQ\AÚyÙÆF+µÑËñ÷J$]€Ž" Ð^‘ÐP¨‹´þ6%ù…l°|öv+â4îfŠÁ¬'ƒª£¸JvôÎʃ/ˆ>ÊEÖý2y7Ñø 1¹å?±@6qd«b¸txgUfôž7%\FÉ~¼Þ¿N·)k» A%»ÇAþHñ˜Èñ1„¤äù(wSJ’ÞOMI>AŒ[‰?Á†äÕ‘v°'CÞ¤¯psÏúÐ|7'¹ Š¿þ C…nendstream endobj 719 0 obj << /Producer (GNU Ghostscript 7.07) >> endobj 720 0 obj << /Type /ExtGState /Name /R7 /TR /Identity /OPM 1 /SM 0.02 >> endobj 721 0 obj << /Subtype /Type1 /BaseFont /XJHHCT#2BTimes-Roman /Type /Font /Name /R10 /FontDescriptor 723 0 R /FirstChar 32 /LastChar 251 /Widths [ 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250 278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667 722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722 722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 333 500 500 167 500 500 500 500 180 444 500 333 333 556 556 250 500 500 500 250 250 453 350 333 444 444 500 1000 1000 250 444 250 333 333 333 333 333 333 333 333 250 333 333 250 333 333 333 1000 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 250 889 250 276 250 250 250 250 611 722 889 310 250 250 250 250 250 667 250 250 250 278 250 250 278 500 722 500] >> endobj 722 0 obj 3948 endobj 723 0 obj << /Type /FontDescriptor /FontName /XJHHCT#2BTimes-Roman /FontBBox [ -168 -281 1031 924] /Flags 34 /Ascent 924 /CapHeight 676 /Descent -281 /ItalicAngle 0 /StemV 111 /MissingWidth 250 /XHeight 461 /CharSet (/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/y/z) /FontFile3 724 0 R >> endobj 724 0 obj << /Subtype /Type1C /Filter /FlateDecode /Length 725 0 R >> stream xœmV{TSWº?“}Æ*Îf$Rs²ÚN_>ŠÞέܶc[|u ÈK”Á¼€„„òà±I oO o-ŠC­hEk;Ú©£ö]Gk;w¦³ff{ücvtͽÜ»VÖYYçìïÛû÷íß÷û}bå ‚Ãáðó~¹worÖÆ,©\R½9S)/QD_?Ë$p˜'V0bØWÙñ:Hän RÃ1kzŸXýC³æ'èÎZ´ðc"†Ã™ºúy²R¥«’–•«ÅÏegæ>¿qã¦ÿ}³5))I|H÷ï/â’ji™Bü þS#‘)Ur‰BýŠ8¯–ɤ‡Åe2ª¼Z\RZ*)†å”È$GÅ»¥2©J¥¬?—ü¼x[bâÖÍø±íqšF.©RnKG¤ ©Z'.Q”Š÷É%e%byI©$š`§\ª®Ò‰_J”*þ':M*?¤©?D+NS&‰SÅ™’2¬¤êÿ~!B¨SÖ+KU’Ê#UeÕåj©¦¢æ¨VV"?DùÄ>b'Q@¤»ˆ b7‘Iì!ö{‰,â-"›ø%‘C¤¹D*‘G¼M¼I¤ÉÄz\wb%a%þÉIã¸8Ÿ¯È_q'&)æäÊØ•rn ÷÷¼|Þ8 €Ü$N~ð£â…W½¶êϽ…œ±L«øž9â0J&GÀ&x£ u-¶&+õ;Ää²; _Ã!÷)bÁñÆ.³GxlK¼Ó’è,ƒ!4¨Sõrc¥¦Öm°ÁA·×ºõmzHªµÚêŠÑªÙÏ^@OŸ§ÐfSǨß7àâýaˆYÿçê2Ú¹ÓÉ<)p9}­~Hz ùÛ `¦Ù˜×HPyäµp’Dãàì;}1HÎÈÞ¢X €©&ýè¢ÒÈo¯ÀyéÀ7EÞ(”éSöˆî«#_'5gÕáÓéîÞŠažD‰‚‚]eÕ™LLù¿½wã³ÉóåÒx”a]/ïëî¿°ëÌËùyÚ²CÔ"åø*ÉþôÎóÎLçȤ(2оDâ¼p˜Y?Ìaþ%tmô[I/4ê¥ ydE<ÔÇ<Ï ±Mì*n˜çým(ô>$‘ˆÇv?xžk`Ö\ zÙ6È@Á?Ä 'S,`š¸‘± _?ƒâPÜ·ÿ@"´îÅ{ìã”I)X¾´‘ÝÀrµçõÒ#35”r¡î:¼AÞ;³tC͵À¬Ç¹¾DÚåô-@Ï.p;®¥6A²Ì⟣˜«Àî(ЗÓ)zað´º ’'¼ô!ŠM’Q•ÿ0>9ØÂrÙ'ÙÇo¾„V\˜ê93N¥ÄY ­ÖzÚ¬ÓVÑ HnÏú­EÜùO~÷îüÁ*Ê*y—>Œ2F™Ø÷ã®/#Í—ëø/³AàmuC/$ÇÝôAêA9àÏÃ\³9ÝFê߀ìaÞë­&?¼B¢­`¢b€žÅZõ'´ý ýx×ï_Ø_T•]DÝ6GvM¹)K/D/¼.¾09÷Éü–dcò_O>˜99,ŠÞñobI³ mì(V¤ÀLX<¤XÔMYÇš/“è2Ïò=T5*Ÿ,ìÍ…àADzðj'L·õñϸwó"fEìm´Ià¿=~â2¼ ”/‘à¡ÌËLÜ`uO®pÝò:þgèóš€ÿ]¤Pî-M`²‘]É>ÍÆ]ÛöÍÅ÷ŽŸ=M±éî×vÚI=2AVÀâ³$ÿ3æž¼É~!€Õ&Ú¢©­¨—ATù´=G‡j>€×HþwhÕ»ŸÜ]©Ø+ŠE_â~yv”ó¾Ó¥hÇ®E$ïb÷ÈToV„E•º ’ýÝáþÉ¢ãûÞÎQVR•E–²–WȤ£Ÿ³òà›æúäh«t„@’Óì‡7Iô!Š3£¿ü™sc9ÆÍ¬ÞÖ$yëŠ(Ö à«5¥‡YC`S‚‹$Ò€ÑSç".¯ö‹:~[$B]ƒc5=Ò…zg>õ'L¯M™)½VøPhÑ•c¨bº}0^W|vÝŠDÖñY¦‚‰Lÿh¡Á©uk<ñ*Ÿª½’|´åäÄÔˆäZU«Óémö …I µ°&PRKòÙ¹ªŠ#ësnÝ»yûøì‚hj¤kNÁ¥ƒ³o8Y+>ÇQå…°gl"âñ¶¸[œ°»¹£ÅOÀ™ÐHdl04ÏÁ!{¿q”d­Ö ƬŸÚæ!ùÇ1SYÆŽR–ûC§ûݳç(>jG_ . NÌ×Ë;Eáò@!,%÷+Ê ÷•|ð-&œî«ëe¶ö˜úâàJº¾Žß…>B ø›Ñ\3¯¹¹ÁÚÒÒ…6H;Ìí$¿Ë£Ñ´U&¼š™—¼ôðÝêbÅ„¶«Ê„EG•yRYG_­¨æXC¿i‘¬ãñSÙÄàöµ9¸{‚Íý6œÀ6i 'ܺzñú¹ê±}“K\UvŽÁˆpfdpnqXº­_ôH_ÎGõ5 Sf+úV0;7Ü5 ÉsÇÊvQl>€{hS†í‘Àfûlø€¿—œÿ¯ô’ê}…"´ìNi}•ePeáÖ¶V'l‡ä)¥˜zpÀ]¶† Ž—…@†‹àøX4‚Ågõ(goéÁ,}“Ô×â´‰¬ ¶+-É*.¨k4[mVh‡M­ÍÎfò]ö<ïåáâKóS c"“¿¦JOk ðˆ!r…BÓÅôÁ@®|ϹƒS&G…ñÅ,®kVÀÑÑê…‡<5˜L›wGéM‡À[íü˜Dä¡J­V*ûÔƒCý}Cƒê~ET¥è‹Œ ËŒ[ZF»q ¿ÃTŸØy…f¬è[À¿ÅnÓó–š4<@²õ*íF£Y¥‘ÕË!Yzt|–⿃î°ÏÁÙ¦ ’l;xõlÞoOLwF"¢S§¸ÛA[ó¹žIÿ¯ƒB|~æö÷´?›)Øéj‰)]‡u·½5äµú °ß«Ç] àŽ¦*³ÖF-Fh€´[ß«ë7zë°êôš£3êóhťߡ'©¼û;þ_TÌlç•Qq °7…hX éfº‘~Ž Äÿ ymÁ¦ ôbC÷»'œØÐó `ªÙMÏ=V³3ñ›Óê´¸t.‹ º »#t=Ž>‰úÈåv’•äÜÄ2q?F€‹NŽùLÔƒs›š’£2a mëa‡!'„( 1»ÏÙèhr49›„Úiƒv²¡ÁV/ª5 EˆWä”u—üšÝŒrâ‡"7®-Í y„¡¶ K™'ÄyÓ-þFh„–£±{^l<³4:$õ KFPnáÆÞ?òõGµŒ[}V¨‡[µYµ•­Š©õsÂ!ìó»Ï¸1æ"8Ñ0÷d»kݵ.]"[ÿ 6úš}Ð'„½Ïx^µ×ú›=t_J`ïÅä£ SßÓ8Ž=ÉÿGÖ<ÒfsA¡¶{;g°9ÿw|xÖÙÞƒ·xDÙ(_»q\<k Ûë¨Ïˆ¯Àl£)ÕŽ+eÔ¶z|d¾Á˜rõz·þá˜r‘‰ˆƒ_íþ =õÙ:þ×LÚ5ÞXo7`"Xƒ§)” à‚}È0 ™,îNÇzykóù©êmÿ@oO_[K{‹›jö¶x ›ŒŒöÍÌGÙ¢4Àny[o)–ü¯5Z£´b}êé¢Ë§Oö.\µç†kNÂq ~bŠd_ÄŽ$³7ÔÔW• 5,WŽŸ¢Ú¼tr­9MÆÞïÆ<ذÀÁæžýÅtãÙ­Ãé‰ÎnǽuëŠb4ìoÁ«B ÇaðÃiMèðøÜîcý§º& yº¯«[£Ùœí[ud¶ºà‰ÚÁð©±ð$êí[†gA‹%Ê)C Ò!w˜ÂpZˆ´ªôý_däUfd‹t‹ÒH6,‚JãöTò&ûòjñØgˆú=Ê> endobj 713 0 obj << /D [715 0 R /XYZ 269.6 436.025 null] >> endobj 714 0 obj << /Font << /F21 372 0 R /F8 384 0 R /F30 496 0 R /F32 510 0 R >> /XObject << /Im14 707 0 R >> /ProcSet [ /PDF /Text ] >> endobj 728 0 obj << /Length 219 /Filter /FlateDecode >> stream xÚmP=O1 Ýý+<&CLœä§# uÔlU¸¶@E¥RNBü{rp\o¨²8~~6£­19LÉ c{‹/µ{< ¦Âf‚_¸ºuŒ™rôXvòLËf¥œÕÆ…œš¿>5«NVÛ“6^¼ò3½.‹jÏž…RJuZ¯ø^¶§·c7ð&ƒBC1ºvÿ¬M j¿m»Ïž 7eŒü›¨!ßþ€ÕÚâ¦.¶K> ~ÕÚçŒÖÕèÍð‡%<Ž>g¬W]ºÍ?䘉/pt™‚?$"Psendstream endobj 727 0 obj << /Type /Page /Contents 728 0 R /Resources 726 0 R /MediaBox [0 0 595.276 841.89] /Parent 718 0 R >> endobj 729 0 obj << /D [727 0 R /XYZ 72 786.281 null] >> endobj 726 0 obj << /Font << /F21 372 0 R /F26 402 0 R >> /ProcSet [ /PDF /Text ] >> endobj 733 0 obj << /Length 592 /Filter /FlateDecode >> stream xÚ­TMoÛ0 ½ûWè(Ìê[ÖŽÃÖa=mˆoEùPcvœ%j¶þûQ’ë¤m† ë &ùžžHŠ' œXAlm@Ôœ,û‚‘{Œ~*øˆ*& 6í `õ„V\hஎ¤ïÅí#+$ß œ3äÚ Â}1é%¿+fÅ×IŽ¡H§_«HäfîÜ3•è?W©° Êh¦Nù¼oŠ«k!· ¸&Íšî@CŒ •!Íê–ªwe¥xM?ø£ï†]ï·¡¼knŠÍ$Œº†q°ÿ%¿I(¥WÎȘ¢Z9`L¦¼š/+a·}44Ö9JN7í!;øáÔ/ãh¶9žqMÃýUÄЬiâ> ÛûhmKŒ…Qlèý‹½6HcíHMN÷[´æÝaZ€]»º–ìT‘0hÆ Šõ|yœ-÷í.dÚYÝJƒnd=¥;¦†,ºS+Œ)ÄsJ¥øý!Ê‘Jr Æ:#Ž;êIJJIû\öª]£ÐcŽÍ·«løŸÁg[Ð6Ž‚RôsˆlÇfˆ}êFî> endobj 734 0 obj << /D [732 0 R /XYZ 72 786.281 null] >> endobj 146 0 obj << /D [732 0 R /XYZ 72 768.281 null] >> endobj 150 0 obj << /D [732 0 R /XYZ 72 535.111 null] >> endobj 731 0 obj << /Font << /F22 378 0 R /F8 384 0 R /F30 496 0 R /F27 490 0 R /F28 493 0 R >> /ProcSet [ /PDF /Text ] >> endobj 737 0 obj << /Length 367 /Filter /FlateDecode >> stream xÚmRËN1 ¼ç+rÌ’Æv’M8ò(‚ˆ½¡ª²”J-}ƒø{œmw[è*98ž±=Ö¤å²DYÆ`0‚œ,„•SÎÞ 8¢ša}†_Wb0Dɤ@²z?”'C”ÕÛ«B,4†2Euó1^íêM¡)’rW…öê¶þ*U=/4¨åjQæç®Uâ®ê¦6M½‰‘ò̵xYùÆÚ…5”¢üæØHI.„³ÈÓýñ=/â¹ësÂrUßz-C§`×÷pÀà]µ'bEÚü§R(÷‘c&ÉõaÄìR&„Cê6[¶]މÁü¼]ò>²¹h,­AŒR°¢~ß :ãË$ã:óâÉ»–ÓR²ÃÙt_€ÚÔl±qØ:眺ɖÍos´Í¸SÛ݆SûÉnßV,ß³›ƒ!Ù³A,ÔdeyÄÓÏËd3[]¸N ±õgŠ/ÖÂdŽFƒàú(–W¶®ù =h÷#ÎÁ_Ü¡endstream endobj 736 0 obj << /Type /Page /Contents 737 0 R /Resources 735 0 R /MediaBox [0 0 595.276 841.89] /Parent 718 0 R >> endobj 730 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./class_structure.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 739 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 642 436] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R4 740 0 R >>/Font << /R9 741 0 R /R11 742 0 R /R13 743 0 R >> >> /Length 744 0 R /Filter /FlateDecode >> stream xœÍ[K—ä´f]¿Â›xˆZïÇšj8<Rlr²"i §{AeÁ.¿=ß•mÙr¹ÊŽú0Ìá0ÕV}Ö½ºï+©8§ÿúÏïžv?ínÿ¢«ïÿ³Õ÷øÿÇ–B3'+$sÂUÆ&ƒªB`ÞûPþµ{Ø9&”ºúy ü¸ã˜û§JDÒÃÇwOÕÇ÷ ªa²û‡]Ç–¨´VŒ‹ÊI&¤±ÕýÓîýê7ïþöþß»Oï«o#¯‰°ÕL¸‘°ǫ̂à;>7€Ž äBŠ¢OnM>ÓÐõu ¼ÃwÁd •’ SX0-ô½››uÓ6ÍéææƒßÑš»÷ †¯†oYS߯o›8Â8k&§ZœÒ£”J÷ÛžÜ𷺽­y3<ÚÖÝÐדG_Ÿ¸hÙ04´ã,ðÙLW@%Æ¢4'`Œ3MÖÜ[KÒ~2ՙЀºë^}ño2ªéóDãݳºÊÁ¸¦ƒ3;øð4~ÿþ}n‚{θ„c(°­ ®rƒØ*0!1ˆpaÉ LçM!³ƒD—T oèfv°tL eÁ²U $ ùLW@%v x`ŒØäú²ô!Ã(ÞœÔ~t}ñzæÄöÉML€Ù†<ˆ''^èÌ8æE¨‚ÇÒ-åݶyÉtî¿m%V¿ì7€Ž ¤˜±®™VÛ¡@œÍtTì‘w÷•w,¢}{8,ºïÍͽš„õó¸·g¦¾œ ö5Ÿ<ÝÞí'O¼~1Mù—'w'';§=}EªÃëþÏCÝô1ç!$ºå*¹L™!ªi˜”~f|ë ’ " a -SªSÈ¡~hïöËí¯'¯¬³Ì…DÞ`8x“óxTõ9’&ŒN „£®z¯©õ­ÛÃh3¢³ú¢iÙ>Š›(Ï·üŸï`.þµg¼þ›žL+ÒߣøŠ·¬9Õ{†N‘­³SÍ!®Àµ*!ȰMï%:WÜ:¦$hè€ (1«E\í¢Æç/ÕÈ”–H Á¬H¤³X¿Ž9ÊUVª„éÔšÏsS¢zDj! n×zR&_<ë1aƒ/·BÔüÀ›šò¿Ü¿þà“OÌ4=BäˆIÍ™â@R‹¢ò•T"0G²¦`f6@v#¥ACÙ‡=<3ö/ë63›´€S1géÌ×7€J.±Ú …a›¾Âãg ×Q¶Ý¿®ÿèþý°+Ì⿼û0KÒN¢zH|£†ŽÂš-îæ9kN3n:§,%‹µ"jþÈ3©– È  ’| ¬š÷åõ§Â=\à-*BÏb¹tA]Ú±8JË0›é2¨(§`‰Æu•¤4rµ“8÷bå45¾‚%Sò‚–ÖA%Z‚u†(]”Á¾Ëˆ÷µnr=%ÒЩó3ø9AÇ Ú3éf5ül¢Ë˜"-9¼îÀr‹´bµÎ¿i^‹Ú¥jë\i‚+ËH”4š©YÛåSÓ² *éÍ`iJ’åa-1ô>< Úø³üxÖ£õô¢µ÷Ë~±TÖY¡º:ú‡—ï©3A¶$Ti!¯0²’íl=‹_î˜v½£1m³`u£ØP‰7jhâoÕ«Ôï+×L wqª'O'Õ´©ów¦Ý×󼎵Xª¥\LÙ‹a¨$¯+$£bäòú}ý‡YZ(Ó¶ÑrÜ^ÇG —2v"Kæ¹T–B=Oñ  Ó­„…âËzˆ(æÍsçNJZ•( ÷ÁE% à‹VÔ/s5%Úˆ¨ÉåzZGÇ*ô¨Í¼ÔY)Êt;]ÔÓvIOcø°ÆÂv µ©¦@ ¡ç1yT“Á%·Û׹͗µiZþb__` Î%ò$o=çpq¨­˜2 ’éc¨(NZtäÂF}8Ó;Nïyî!mú9à‘Óç›—« ¢ÍK$¥ñ‰î[‡Þ=С/ò'œBœHÏö/WAÇòh¡­Õ ¤ §]>ÓPYÖB  ˆA„m¹¾I=íÍÐö®iOg…rß^¹z¢&¬y“ÀÀ™Ô°Irü€L/ÐêØÜÝ6€J4ŒæÓÊVÈùº3ÂÀ^𙝠ą3}W"žõŸ@ešaœºOÌ9Tü¬xF÷™Ø6Kâ:«¥×1å+£´Œ¤6÷ÿÌÚöÊÜ [åi#cì+ âL_(‰ài.ô=ë û¡ šŠLïúújÖö ”%G"/4•ë ¢ímšÄuÇ0®ßË¿ÚTž Wøÿúó/ÿ´È¢ eíH=+%6€žÇâØÉ^KtóXåšázΘ·û“f˜VÜH\.+ÖA%e…@ íb$é¿pó=¹‘2:3ßñsö.‚Ž ¤¬­áÊOR×AE5 ÊÒæñ§’ÞL»ßçzƒÞ®]¬šêqùÈkrÕâêÞZ³Th °ÖþÐåiÐBpÕãÎX4œ(*F¤F}«1r켃" }¯¢÷§ùôà2}ÿHÎò¿óQ“Fź~cói1°,iž…JVu|Kvmª Ðòt¢~êGŒ jÉAL¼D\o¶ÒèN•X‘ñ^bdúÍ z ËŽYìÒˆÄg”üe™¶cmHnü4Žè ¨óxLúZQÐ`/e:ïç4‘”ϟΦÆkŽ˜FLd»è½Ò–ŠîñØ¥Úêì­ú­2éƒG…¾4"]öÛıðV¯-ŒHGÉì-diÜû?QˆÖ^¿a–7Eh´&!, (4ŠÎ¿ùøÜ‘ï·€žÒ³¶š©Èž„ƒÙ¥êß{à Åkƒ:­W6-ÞBÏCEDrÁ[[ƒ]ìQ¿Csó­<ê]ƒ– +eŽvò5¬;„a1ý"ú%ý¼á­’åX:zñ•GÈQýU¤SÍõirf2þÄø@›>Uà(Õ1ÑÓÀU@³äMªLM€Q©zgÑ´Øñ.^P ÉTGó(y+6Gãn¬GÎ@ÌÁ¿”Ÿ¯ÙÆê+e·hŠaaŽî™úÎ4¾n?›Qkª'O×\¦Ü®BЏÓt3KdÜ^11ÞM•Mž ÷è:IGC©ó æÂôH~tŒµ„DÀm¹Wj]Ôð`Õeï“®Ïyγñš¡oŸòŒÄ/{åæ]DA̶³>‡4.s~‹Þ_ä× ™#|C)ói¼PQ¼íø Žî8`ŒÌÔ.¢"FÓ!¬´]W8á·è}â×Ð W„-„gQ3Óé N#» 5ÓX»æÎ0ë'#°+ÕÍ5Ì3Ž<ü‚sÿ0ì9`=?ŸÍ:¡s6ë8Rvu—)£É.ÚùTýª>½n ÒóÐ5¯OmCß4»÷i« ËÙmkpªí·!ò JÒôC÷¡ºðN6BÜ™¢3žÉˆ 6>¦yÆ‘éïù~9*3MÌfÒ™Ï:ŽiYPsº#EwEº­rÓò*^cž+¢ýè#Æëª9µ|*{Ë1‹¦8N&AëÝOM–¹^°QgaÜŠn/ÓMÙmÞ·r_¿“e‘¸@øz$žíÕmGñÝFÞÕ™.ƒ;„pTõ‹€çè*‚E×9»ä²Tò[úݦ§»ßª¢«cþö•Ò¹Ðm kP#íl©@“¥*0Öfº ÂL ágò3¡­ƒJ„†¶ÊÄ{è£Ðþz.´v&9[ê:h²ÔL—fº :¦Ñá—OiD›x7÷qgñ2rõù€tß¶Û1VººmžÎ3ÌŒpüÕH‰™¬è½¶qnèÈ›NýæÚֽŜ;0J׿¿.çßîþŽ|Tœendstream endobj 739 0 obj << /Producer (GNU Ghostscript 6.53) >> endobj 740 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 741 0 obj << /Subtype /Type1 /BaseFont /Helvetica-Bold /Type /Font /Name /R9 /Encoding 745 0 R >> endobj 742 0 obj << /Subtype /Type1 /BaseFont /Courier /Type /Font /Name /R11 /Encoding 746 0 R >> endobj 743 0 obj << /Subtype /Type1 /BaseFont /Courier-Oblique /Type /Font /Name /R13 /Encoding 747 0 R >> endobj 744 0 obj 3320 endobj 745 0 obj << /Type /Encoding /Differences [ 0/question 32/A/F/M 37/g/e/t 42/a/r 46/i 48/n/p/b/o/x/c/h/s 57/C/v 61/l 63/d/u 66/j 72/X/P/R/D/B 85/H] >> endobj 746 0 obj << /Type /Encoding /Differences [ 0/question 35/plus/underscore/g/e/t 42/a 44/parenleft/parenright/i/m/n/p/b/o/x/c/h/s/k/C/v/w/two/l/y/d/u/f/j 70/T/O/X 74/R 77/L/S 80/slash/period] >> endobj 747 0 obj << /Type /Encoding /Differences [ 35/plus 39/t 42/a 44/parenleft/parenright/i 49/p 53/c 61/l/y/d 68/asterisk] >> endobj 738 0 obj << /D [736 0 R /XYZ 72 786.281 null] >> endobj 596 0 obj << /D [736 0 R /XYZ 235.856 135.468 null] >> endobj 735 0 obj << /Font << /F21 372 0 R /F8 384 0 R /F30 496 0 R >> /XObject << /Im15 730 0 R >> /ProcSet [ /PDF /Text ] >> endobj 750 0 obj << /Length 2144 /Filter /FlateDecode >> stream xÚÝZYãÆ~ׯ öŶÙw·?ŒLja8[°ýÀ‘8ÚºBq­ ?>U}ðÅ™õÚ†,vÕdWWu]õUsi’Ášh–h£34YífY²·_Íh˜#FI»ÉŒVHã‡ßµ¤i¤M)“„ZƒKþ=ûá§,YÃÒ¯g±V%gϦw³†»{ÞξŸý³a—­¼äÂÖs¡Öö¸àsŸK ê¥JZ¢ŒÛÏËÙ§c,¡š0*“åcB­$™‰bœH¡’åú‡ùÝg‹”S>¿¯ŠÓ"¥ób¿ ó:¯áßò°Ç91ÿLÍ«Üýû¼øiùõìËe#D«Œý‘*€!„$†™—]¤š(M_EÉÁç—>J~†¿nk %‚ê„‚Û¤Mª"yìmËÏ6L^ˆ Íy*…!LÒÆ#x£Ø×#f–|8¿Îÿí´“i "¹ k¸Lâþ^þæœÏÛë |œ—›§3óúÕÇyµödõÁÿ®© ¸@)pFÌÏO‡m቎‹ÖNu©Ož¦Ü£NÎÍÎX¦E-p_÷Ïß;3x²ÎþsgÊS‘E*„˜/†Ïóí/§ÎÖò½È·^*hâ_<ÀžtÜ«›(b‡ƒ# ¶ÏSúÑùdÄ!Âjb){9ðÁùhà7sÇ&“)Dju•›[›7? Ô#ùD(N8Wm>S"ÊçK¨‘‰Ðt–ù|B(ñ¾ƒSÜ’BšäÒïýõ€†ßa¡³´œÿœ£ØüçbUŸ†6Z¡tÒÙÊo× ³2Ký²O¸BA\rsåÄ A ¥Âi½| 6ÄgBñ]ŒÓâ‡[?}‹H‰qÇ3Døã¡êó¡~jÏ<ú£\T:ßdzëÃ/nz4†!óA¢¿šU:ó>•‰¾–aÚû$Ñ]14ƒìyqJV¤™8d„R¿8¼±?f2Cá—ŽhÉ-#ô•ÃQr³µ…¨à™˜ª-‘Í³Úæ'p¾d-…fúª:¼;þÅ¿úN]¾ßl ´Ûgc†Ó ð‚¼as´¼0`Æe£ƒ+µùÚkþ¹ÿ!lLiE‰4êö”öÔi`v»>‘QLOú$ OÎå“YÇ+ßöŘ_8 \enXñvƒW$¨øS¨«~•æ N6ÓW³tg~¤q øÜ°PŠJH‚gùä+‡p«~˜u bÀ÷þM9ȱ¨¸Ç½ÿTª1˜Ä  Èáq/3®H;K.¬9dÏöPº”à_Õ—>°_¤¹×1"SxOõÄmÊ_ÑBE°]ýT#î¼­œö¯Þ^hò|p²ÜoF-Ûp‰¦tUUo0Ì0ýš…(éP_–Ž–Y{&!„%×}¡c’ Q[ZCŒÔ=iˆV†˜BÄìhWLª9dÛ9†Ã 8RšOji¦Ô¥ÂmEOâ*v*þ¤n¬¨cÓm`rlÍ#¢ëƒÉs¹¸#ÎÇdldªrÝ6i.¶Úf q¡9è™×EàÿëâÎ;+®ÂF¦,Éb³>’:óc°1Nw`#» §d5°qJà‘˃ vz ¢ïpÊÀNº^ÄHW`$ƒªeŒ|5Œ¼áRÅ ©fTOÁÈHÒ‘l3_oïª"o°ä5ìÈ8xUÞ² Ú ^+בd§X"ÆôfP,ìëñ™þ=ôÖ¢w»Á«zÔ»<­r¼Ýé(>z82 -ÿ kÝìïªÒžÂU¤m¹Ù÷T~s~3¢4µŠ\¿’kfG@5 †”PƵŠÙF5&ògßÝmi€_v…úÆ_¹èD«…OwP„T.’‰p3sy¥F848iK²D’«·Ä×4ôK_6¯¡‚5o߯ÍÖO¥ƒ:î1÷??fT¼o¯ÎÜ%Ï9Þ¹¹„T»KZéÑÆ©¢ñ+XY¹ë¡c°Çì Ø'•K_¨f@|v¥-²C„å­F¡ž»M§bØjƒÈâÈïÄâ6ŽN¦àÆmê䇧£XxÐN7?jYöŠ“˜¡*¡PSäkÐI O›—ؤÇò* cPÍ´ä]ÉCD(²ºx–rB3Û•×î¸|@4Pãœ{W Á`ŒzèÝ)©/øpŠXâè:‹²Xƒ×´Txûå)¼íëÀ…_€H˜v( î½ì}ˆ·h°QïCÿÝ¢.Þ;ù¶½õŇæ’Wˆ¬ÅR8ã|9ôŸ2îzŽJM¤¯ñ`X‘v–\úpÀ¶“?‡€Ü€÷¢½ ÑM ¹Ùue– »+1?y+£I :S´¶í·IÀC±0F\1iŒ![—gs ¥+¨JLZ"ÒLZ‚™ Äu¨©VÜå`œ’QúVˆ+&­0dÛ–—¡|I@OÚ!ÒLÙcCËT_àÅñ†ð(C˜´×Ðëp`žŠ}Œ—p™áŽi7™^–F”x±îèñº#ÆëŽÔÀéëƒÏ;'_ èü“ÚO`éÙ†‹tEÛrã^âÇÿõK\'¿¥¯=h£æуû¦“UhÁ]¶Ù®f+ìè±°¹ö h}áÀÑP|[ëpÑ%löÅ:$:Û7o¾rA{@Ç­]¹Ü„Fî;Á°]| v ß6nu1Ö´QŠÃüŸ~¯‚®ÅtnozŸ«,³Â$º2ÛNöâתûgø)ýXù{²+_¨Zá¿Ó*ûÑŸÓA')ÕЫþéÈ]Âi'¿¦{ŠÁ{ü ]aŸzç.|òø×æÞk=+´¼üv ww­qóh„SùŸ~Ãöæ.m_4ù­ÿ!毕 endstream endobj 749 0 obj << /Type /Page /Contents 750 0 R /Resources 748 0 R /MediaBox [0 0 595.276 841.89] /Parent 718 0 R >> endobj 751 0 obj << /D [749 0 R /XYZ 72 786.281 null] >> endobj 154 0 obj << /D [749 0 R /XYZ 72 768.281 null] >> endobj 158 0 obj << /D [749 0 R /XYZ 72 518.151 null] >> endobj 162 0 obj << /D [749 0 R /XYZ 72 439.177 null] >> endobj 166 0 obj << /D [749 0 R /XYZ 72 297.835 null] >> endobj 170 0 obj << /D [749 0 R /XYZ 72 131.697 null] >> endobj 748 0 obj << /Font << /F22 378 0 R /F30 496 0 R /F8 384 0 R /F27 490 0 R /F28 493 0 R /F34 561 0 R /F7 397 0 R >> /ProcSet [ /PDF /Text ] >> endobj 754 0 obj << /Length 1145 /Filter /FlateDecode >> stream xÚíX[oÛ6}÷¯ òR»˜8ÞIðCÛuŠ¢È¿eAÀØtêZ¶4IAÐþú‘ºX¶C:±7Ú`eñˆ>OÖ3WØ “ÌÕLp»òÄÒ·DÛ1 ÃÏG‚ìð(õFMÛ?ë&j#Ê —"Ø[õ,²½ÕW z¯3½„M ¼[׉õŽAÊ*m # „»eWf'î[H¡SÐBÕ6”Cj»Af2ŠéP'6Z-‹}µ™´UMØ>7¿{:—ž\_Ñ&`žÕ¬Ïv4œËM…ý0\ÚùÁýiMº @ q~M]õ”¹Ô…q³%½ûj¦e`¾paãjÜ㊱E0(@Ù`¢“¥ÿ¥¾7…þßøm½@¬ÇÃßð Õ˱S.u–™®TþTß|]$‹™)nsýèvOAE˜€¨ÝáõR’Ž`ðh {oćUV~»r*´ïEPÊ!&ÿ›PüÃ7™6»B,†âRå¯E™ì†¯ÏéÚø|Á–ÉóõǼ#x9¸»þ¤×³bª3ãÛ^s»úÆ{¬BG0¨B©öD‹ï»î_Óܘµoì,Æ/#sNà^k˜²iŠ<þi!;KÊ<ÑeiÖ{kJùŸXž?»%ÅÎÙæ~9ŠñõM¨Â2C*ú,TG0(TyÁÚ»(ͪh¿¼NZ™›õÁ`¸‚¬Ç«pÇ/¨Nðˆs»öÊ”‚IÈxŸµèÅh >5ŠãÔp'1é±Á  ħ†9N »]å”öXŽ`PâSãñ85ÜÆWö8m ªÑ@|jLSQ(pcÒ$ÄÓ˜@ÁÅ!³ZÈŽY+½4·îÄnû¬Îgu§©±ì±Á  ä©Õ¦æY $‚’Æç8{by¥<†ÒŸf±-$HX‡jÈŽAÓÄèüYo˜‚Šô8wl ¾ž äÉë¹WI3}oƸMõi©QÇ8¨ µkVè˜b›ü¼›sÛíÆ¿¥å¿¤endstream endobj 753 0 obj << /Type /Page /Contents 754 0 R /Resources 752 0 R /MediaBox [0 0 595.276 841.89] /Parent 718 0 R >> endobj 755 0 obj << /D [753 0 R /XYZ 72 786.281 null] >> endobj 174 0 obj << /D [753 0 R /XYZ 72 657.397 null] >> endobj 752 0 obj << /Font << /F21 372 0 R /F30 496 0 R /F27 490 0 R /F28 493 0 R >> /ProcSet [ /PDF /Text ] >> endobj 758 0 obj << /Length 2274 /Filter /FlateDecode >> stream xÚÝËŽãÆñ>_Aä 0;ýb7i oàk8p’ƒ¯\‰3Ã]I”IŽ5ó÷©G“")J«}‚Áˆý¨®*Ö»š*’ð§"¯#Ÿ9¡3­ww2z„ÕïîTصR‹Ì¥0^ØLúÝDéT8‹0¿Þýü‹Œ6ûýyî¢#Œ¥°yíît4ßÞ½»û×€Maò,`‹Êó œO±$ð>‰Ks¡­GLoîïþòw­#å…Vitÿ)g…Ñiä´Ιè~ósüæëUb”‰ïŸJü¸ÝðàŸMÙ®—û•Š»¢ƒßªÞãžÀɇ•vqSÐïëê—ûïï¾½¸fœ”À¬ÿ}o²± #ÏZéÁJƒÊàá¿¿CzἺ Ò€Ú³3΢ðOœEJXå#ŠLó¨)£‡ W¼; ¹N.ñ†À“Þ$×nPŽ‘Q&rçP7Þ +]Ôƒ j¯íº©ØVÄ´QîA ¨ƒsY§F “.2ÙÅhŸHgQ” Q†Óh#`ÅHõ-¨XkÐñ¦ê*xÔa­«Ãûò¸Ò>.›9K ÞGf'ÌŸR"9“Òí%1ÍÙÑ^ ­³);31õ0g Œd¥½ÖNéYQS4ðûºÊLüÈÆZ,”èAMV±mI€&._P¬ä^];‘©‰kØœ½•^(ó%íO\èíÙ]ª­È”½*ÕæšTÑe*ŒÌ—*VIšç¢‚ÐLæâÑãSÝá8}ÆÈÔ•<#×<®?–4þØ+eÝ%uSApÓYÜ•ª0¾e6~n‹Çô‘*Ffžúªã}²úü4b‚ðþ†ËÃåS¹¥¥–ø t>.öÆñT´û?chE±RPlRðŠnÂob­×ô.»Zmtåö•·6=mÜløí x'$¸øØçn¡Aû™ln :ÜbTý‰dtą̈æhɨ®Ø‘Î n=ecîæŒðØ;³ ŒyBvjK ­ D$:WŸ[’Û†·0БЛ²èÄÀ³¸n»²iy¥@¥“§Ê!mV"Çï®Ø~꽕oL|$^£õ<ñ qƒðÿ0ø2-‘lj~¾WƲý¡¥ÿÄp¯8ÁÐñÜÄõv[ϘÄ èx{¨Ál_È r]ï†ÐÕöÄ7Ú£XH?6õBºìó©^KHÆ,¦úaï÷¡IúÍÄX‘zw•€Gz¡¨²P/Ù\ŸŠ*(  ’²œ’ò\Xï# çµÍ¸¨Ф ÙB¡÷XQ"ÌßPY»]ȮƧñ0Ý;,׿À[a¡œqóß¿–\ˆ,ÁcùPx"W27»A!á@¥Éu%[`Ñô–ÞûJù€Ã-o÷a»\÷ÉWêfì+u¼éÀSN¬ä§Dbß»P± ![ÅKflTa¹½XEö9èÙé[†m6 ¤‚L*#™u^%@®’›¡!Á®2È¡zÜ—¶¯âªu±Å2‹€÷a³-ESt3ôÈ‹h䢌üŠâWÌ5œ~¡ç mÚùã’Ñj«EšùÿÓL«ÁÎ¥R2­»æU.<¤.ö;ýùD‹5 ”ólÁÔVh0±1åXlËÍ¥ô;bñ#ý‚áûZs1© Oç—Y¿=2}9mP] d×ÈÍЄzÊi•bþÊQ9˜û!KcÁ Űè¼P!q—B!ßÝ”Ü=dFt½¦íxRÉ#ÏBMÌ“cµÝòh(Ž1*ЩšŸ›ð]ˆí,xÄœ„–ˆ’.ŒöåcaF=°SxÿÀMèêq¥ÝÔ$¤ÿàáóË­ˆ³‘‚4âü-Wá@r:q~ã1EŠïón[mÊK†O÷ˆÊM˜8»Žd9ÙÉm¤ƒT4&:ë–ú˜€¦ÂKAåÅêîx‚;ðp9Xï…sîv¡õ® m†ôsÁÂÊTäêšÈĉY™C|J—E„¬\žnJÈWñttl³ÁO·*<Ù• ÝÍÑËÉ~w8–bMÝßûTí× …^.‰Ü-3r!µ¾ù³‡ÿ#>{ø/øì‘Á±Ì\ûê N"Muÿ•×L?2åPôé‹¥Ïi{éÒÙ êîÔá¦Ëä“)] ‡`ô勊ÇÜ …CË è-ÅaÔ:ïŒ+Qª`hìIhƒ< áaƒì"?}3 1GN+GWÐp”r̘ÛzßsV-¤þ|ÞøÞ>,tk%‹PqLn?íùŠ14Ü¡I{^ W$š9C†kÎÇzŒÈÆïN¹–?!‚+¼¡À¤aG˜¥FGyqûwÙÿ£¯íendstream endobj 757 0 obj << /Type /Page /Contents 758 0 R /Resources 756 0 R /MediaBox [0 0 595.276 841.89] /Parent 761 0 R /Annots [ 760 0 R ] >> endobj 760 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [286.308 39.367 310.855 50.215] /Subtype /Link /A << /S /GoTo /D (subsection.B.2.3) >> >> endobj 759 0 obj << /D [757 0 R /XYZ 72 786.281 null] >> endobj 178 0 obj << /D [757 0 R /XYZ 72 768.281 null] >> endobj 182 0 obj << /D [757 0 R /XYZ 72 479.461 null] >> endobj 186 0 obj << /D [757 0 R /XYZ 72 397.51 null] >> endobj 190 0 obj << /D [757 0 R /XYZ 72 337.015 null] >> endobj 194 0 obj << /D [757 0 R /XYZ 72 264.98 null] >> endobj 198 0 obj << /D [757 0 R /XYZ 72 198.653 null] >> endobj 756 0 obj << /Font << /F22 378 0 R /F30 496 0 R /F8 384 0 R /F27 490 0 R /F28 493 0 R /F34 561 0 R /F7 397 0 R >> /ProcSet [ /PDF /Text ] >> endobj 764 0 obj << /Length 4591 /Filter /FlateDecode >> stream xÚÝ\ëÛÈ‘ÿî¿Bç/Ñ+.ûÅÇA€½Ë^68${g9dƒ€#qfhKâ¬ÈÉÄÿýÕ«›Í‡hÙ8A`Ø"ÙÕ]ͪêª_U7­6)üQ›\oò"Kt¡6ûÓ›tóOÿó’Ö4ï¢öïß¿ùö­6eRffóþ»—I‘›÷‡?ouv·S…NÝößïÔö©zîëËÝÎfûýwøk·ïŸj~ð§#n|óÓÈk|ÐáÅùÎèm_õø iÏLó_Íý¥BºOwyÿ‡7¿{fI“pIQœã/oþü—ts€wùÛ41e±y…ë4Qe¹9½±©†Ù:¹?¾y÷æ¿Ã8Cö"q¤‰…¦ J…/ÿ'ŽÍ-ÑÏ$TŒäŠÄ(½¾.óí¹þ{ÏWýSs†·zä»OwºØ¶/|ó|i¡å¾º?ÒkÓ³×;o«3’ùZþ=ÈoÓÅÏ‹íc½ÿ†j~ <.B­Õñ#ßTLÏšþX'w;k ÌÚ«Gô„4Õ¥öÄ0Ü+O|ê†ñd6º ‚ wJ%¥s$™yàÔÕLŦvûÚ`·'èæ 7×SÍ+ceóMn³Ädæù»¨ é̤›”–¡Ò¦ÃâüººŸq·yRs_7>0/mMoçÇZŸ—K“Ì£yõ¨§ŸS—Â_5›aa’,-Çò™,qO3ãY±WzÌøDAzAÕ²f¿«¬Ü¶ÖÚý.ÉpáúÚé±Þ’Æë¾‹àª².’B™/P¶ï±*Ôé°A¨3þN'Æ­ÊRHÖDi:rÄ®ê{”Ksÿÿö5 ¡} ƒ®›s×ËÚÇE]õ5;чhlbÓ[¼¹øz&Ÿh0ò`à+®š[š&ÚÚ1ó©¹ ÍŒgln©I8Ö˜o{·snû¡Þ÷蕬ÛþˆEÛ?Q”GEž§EY:|bŠ”{”VufÚºé#·FØ7Q?r=M÷Ý’hL~ƒýƒ+“Të›( D|æB6à/¹J¬ÊA4à1ËÍ¥Þ<Œ·†A>§sCä»<…ØíÔ²Þ3}¶ñ$´,@÷ 8¿§syûþ ¶ÓnëOŸø—Â7ôx»d* Ǭ^` ×pGÔ¾U³Â&ü(Ù†èoCæi’§ê&uˆœoÕ\ñÿ¡¹â 4—¹2É­^Óœ' šc¯Fºù ÿ¬ª¯"„öñí’$mAÑêªê†ö%ÕÁ²V«îG°£3ân`ñîÛÓ Ùêƒç´+!Â…^óeÅùöÄþð?~?™óšnŸ¡ëQ¨^%Lá5^:ñ˜ˆù²[½4÷ÐüÒ{Ïpέ°6Dûfÿr¬.ž3˜^MF†Dn@ƒSú¸€{˜eÛCÓí_:Ž~ÍôK"Á€å€JN¡'ÎÛ[ùEO ÉEŠnÞ[àe;âø ¾kÍoN»ÍÀðymŽGnóÅǧ–@ õªhz4'?+c+ŠhOôöoÞždT’fñ"gC½ÛeÆmß`IÓau]à}¬ÒÁðâïK÷B¯Œo‚÷íyzC o%—.XZÉ ¼p"ñú yÅd c•©¸w×r3)[HŸb+[@¼òz9&ÈuòLª¤Ðn@ŠlÐñÓry#muÒ^ ÑAÿRJeÃlMî¶d%d05‰%cÁOqŽ¿8Õÿ5ÚÞ‚³¤Ç.ê2ÇY“a ø¼ mtKH+ËÝx P if¼ÈF\ÔöÃK'CQœÀ˜æ×a¢Ku%«,„Õ"¼ß …_鱋ºÌ”:öJذº$ õÕaõ>/£°´ñ¼“\ RèIh6|1|Ê{bD™N´)×#†±!¥G‰ ™yJi\ö†°ôØE] ­ãaWp›Â5SäãÌJ¬L3ã×¼JhJóËr£ˆOB¤q X¥Se§rx®.þ/¼,ªëm%IM‡ˆ‰¹¶!Ãç!ÅÛP°½ž!YÅCÐL»’2yÇ$¨R¤¡^öœ¦ô Ñ$tíIž@šs¢L«”€.#ôòÛM& ãöü¨ÒÇæzþR§æ"Ðe{¸ÔœwÓæGæ12ä7f0µÃù–ƒ‡ÃzGœ½OÁ„Fªž|fÏB@ á©q7@ﱋºÌìy:,¾þ3¼g}îa‚0»Y†ɧ1KÀ˜fÆx”€•‰ÍËß#UXüVÉ¢‹eBÅádåvO5[”û±Ú³*Á]ä4ô’F  Ú`3 ¥ -÷ٵϗ¨lÖÎ7ÜãC:éì¸æû…tC6¸4N:»EWÒcu™ëj2앸¡­NÒ¬Œ¹uÜðc­ÏË‚ƒ/Íh^ÕV˵¸:Ò®KhbFžfÆ;2#]¦  Òë…àÁU· +lH+tq%x˜\±uÞ¬@ßcUPÓa#AÍ“~›X³*!YMó$+ó1ÃYèÐ’®“1{߯duŽ×Qä¡+A`°ffE…Y Î©taí-ÎÊ÷ØE]æÁw2ìgw XƒÌÇÓ˜F`¡™1Ž#0$†Y©F|‡]'¶&å-$¾HÇY*e;v\_>“e¶]¨ÉÝSAÚŮΕa“Š7¢\a´ÇO¤j¥7›>èZž*!©˜âØ>¶«l~uÂ!gFâ–Ÿ¾ðÚÁ‘N·?>ðÓ®E?™9ÞEkÉ.þгT_²Oì[þõ»o¿û :¼ãëŸSe¥V¯|6ïËÕxíá‰Hqf($ú ¼¨’@5[¢à \œ}Ñaa¯9OòÌRQǹÛöš¹Ç.ê²°×<V\ÃŒ;øcëbæ__Iâ¡Öge]¢s7ššÐµg §uª gŠ„fÆ8F÷bºó]tëTÝ¡ý_à±+ºÌnÛŸEäÿ¼û³Æ™¤¼f¤hàI†¢ÁáðW¯½·§Oõs‡w ü¾õ™²v ›Ç§þ7úJeÇX“¤EqµRµ/$yx¤ÂÚIöa”6à•õ'?ðÆ ËUeÛ—c~ñ$GŠ؈ÚygWâ4=ͱe ­ó»±I]ÔeŽŒ&Ãâk³|çð–jªÇ˜"¡™±"ÈOíˆá<àƒ$).€,º'ÞK;óm#àš;< iÿ=ì…Shªî9† [Yµ68Ž€ZN·Uý¯ØÃâ.Äù{Û}uôYf#Z%T²u?Ê·?îB4`ÐÔ¢¨–@Á$õ7Y etx„5=[ßQRÎGv6as$s6œzà *”MñÔ¾0&Š“V#à.e|ÉL›³äå9$Bv´·ÂI¨{¼ì›! ¡«9S¾Ï™æ Õÿwä*™œs¡•1éû|‰÷}1>‰²´-ÞìïhW<Sò•÷Ý {°\€—i¼ÁSŒÉ‚ûÐY!I_uQ;¯&;ò¾Åô}3Ò‰Næ‡ Æk¬„d•Ýd˜pHÓ‚í¿Ã±9ÐI VÿÈ eŒõ 'A‡S¸$ü!cO^Ö»µ%äW*1·€h¡ß fi<$ò}w”÷XDÐÚ—xSAÁ”cŒ5cçˆãhÍ£¶¡¨+xï̶«µštv¨y#Ç^¿fâ°×{®GUþæhÀ€ _çõ ˆÇ.¿]æ¾ÃšÐ'ƒ~Vê¦àÓm+r÷$+’7&åªäh?–…ÂÛãŠ~„ì“Aåh°I2ˆI: ]#·Â…@®!ñéÏ2ߢ³gY ªœøª¢S$xÑOÅGTàžð¹ï¾x40…ÒÖeb`ª7èPzì¢.s%N†E \êóázq÷Íq¯v4‘©…fÆ:V$@ª¼°#ÎèñÏ{/Ë«e™<ÖçšÏˆˆ€EŠR˜½ ù½Î ;ª“ñ–$äkCËçó³Â/ҋߟ GKÄ'2!‰,Ÿd°Yáñ ŸBºP©5Y2}CµìáÌcÈAm>‚¾ãœ“N¶ÀÌÈÞÂé« %4œ)Æû!‰ÌXŒøðT…”î*þ9ׯ !MÁ:C'~ÛÚˆzé@­oþ¼gN-hM¹Ï¢Ó̘ã(—Bê3» wBvÜ >`=XÛªsßcÅgÒ!L<Â}8¾âp˜ëxô§Fu‰p$oi:¾–ž'r´‘&á­‡0ç–‘–ªçºö†}¡âã™à™5ÔO¿•øo=r†§´î/„a?Ia‚xKHšËÿœö„£i@óü]°ä* af`à?ÅH^.‚€|÷à·Ìq.-piè¼e:D[²²Ê¥3’)­…ÅÀ~T­Ñ2íÚ Ýèlá^rêA§®¼.»h€…B™ÌD˜Š;z|¹øJ5îÀÈ›VÞàb3Eç±9)øéÓ»ý¥y^„mL›Êo_˹ZnTQ€t%¥¹Hßœäå.¦¸Å×Àº9Ze:|A*ÿIa[ñüÒœD`¿q•åj jZU$&/ ‚8Ÿ•7mus]Ôea«{<ìç¶—ü^ñh×ö“§ŒÇ¥üT'Wvqg)çh¯.¤KðœAÆe&iP)O·‡6ܯ_nÕ6‡r)WEFQ }=T«í¨´%Ö{òB—(©žBS@œu_ EßcUŽÓa}džß䉱vUžfM&Kaí¹+‚ìNÞATZ,ʪ4Kô-k¿ø£™øI®2Otºúå…PpöÔãy¥èWÀ{=—¯–ʯø=iyýóŠ¡yésS•dVLCFp{8È¢7 7ºkå7|[Pyá·?ä›,)sKk … fc’Lq!k^{ƒ¤w“úAùOdC'C[MÄx©Z -$¿òB·k¹Ãnè±P« zms=wIYºˆõ×ï­ËP«“ÊñÄ2žÔêg\~ž3]ÜL1e/mZ²YÌsiïES*ÆêO·°íœDmô‘b¶x<‚Ï(sw»ú|‡5IM½I,€§Ôšˆ<ÉŠŒ¬-Șbnû#W´;F|œXÀ²W“Ìb8¿6?Ý> endobj 766 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [181.947 68.162 188.409 80.755] /Subtype /Link /A << /S /GoTo /D (Hfootnote.1) >> >> endobj 765 0 obj << /D [763 0 R /XYZ 72 786.281 null] >> endobj 202 0 obj << /D [763 0 R /XYZ 72 296.618 null] >> endobj 770 0 obj << /D [763 0 R /XYZ 87.243 51.765 null] >> endobj 762 0 obj << /Font << /F21 372 0 R /F8 384 0 R /F30 496 0 R /F26 402 0 R /F34 561 0 R /F7 397 0 R /F39 769 0 R /F38 773 0 R /F46 776 0 R >> /ProcSet [ /PDF /Text ] >> endobj 779 0 obj << /Length 3806 /Filter /FlateDecode >> stream xÚÝkã¶ñûþ w¿Ä[œY‘Ô³À¡hФI>¥½Š" ­-{•ó«’ÜÍö×w^”¨—Ϲ¦Å¢8,‘ÙÑpÞäêEÿô"1‹$•Iõb}¸ ;ýó–ÙL¯¼ùÏßßýîK£™Êb»x¿åå™Jãtñ~óÝòseV6 —zÐ˪țòa¥—GxÙñxŽ?vÙä{œøÀo§Šk€+8Qs36ÕñÒ$?¼ÿæî‹÷-WD4Rij‘§Ü}÷C°ØïßÜÊfé➥³lq¸ ÜEò¾¿{w÷—O7‡«èóÂT…RàÇ¿zÂpð+}t°X±”n´ àdô1‹Ÿà?}ÌB«P' ¨,ÊU±Øö>„g[$ùŒÄø*‰ReùSh_m°Hã˜ö5Va/îmylª“ª‹æÇ¦löÅ÷AT÷_ãàæ²nÊíô= ë©ý a¿t2¯cÝ<ñ’öUÌ*Š4±qª~?…_‡*±·m‹HñÖ}I}IɾV%Ivu_¤ÛÚ“‡Ud¢å[þémÎñ~Bhq¦•IÒÙMñæ'6%^Í›òþ©¨€º ÃeY?kðÑ.&Y^À¨×øðă§-Ãåüº)¿´…ÕÇ5!ˆ–`øÉ²hLº|Æ…EÁN„à›'t é@Òå‰q~Í?ÐáœxV¾ÁÑðêåE8«qüt–Ï@1]§ó¾ÃåÄ!@ÐXçû½û‚HÃ(Q6 [ÉÜàQdÅÊ[2Úó!Z8˜áˆzbTjŸúu×ÎÌ„“ŽQf&#LBv‚C–Ú‡*ˆbbv‹:p$5ĽÉámøùäv<Ô8 âoeo í'=ÖÙðZ·'ò¦Áõå#kdpƒ#U±¦5¸¥/gÞà~ÇËúÄXXÉ>« ~%à¼)ªRâQò¬œÈ3 @üÇMÇ7j7NœY‰IÍÎ0½/|YÈfƒÜ ^¹æ–‰5$“¢âaüô'æ¤æ‘N4øöTÐÂò¸«QÏM¼{ wŠ¿H^V9‘#z?3Óz¹åÁòïü¤ï0þBöu©øVml ¡'<ÿÓ¥nxýÑíj!TùЋ#\´Ñà>#öîGü®À°›€ßÖÞ ´/þùÅø1@sd:Š@™ÁP¬UQxK(t+VÞ’‘ý Ñ"Ÿùf3¢Ci’‡êSíoåp]ç >`àóõ[ ËS1XC—š´/›i;˜UÏ´5f{6ëõí[öV=¬BkÑ!³çt«Ô°©ì³« ©l²jÀ8J•ø§õ NÇyØÓ Ò ²‘bä!%ÈÒôhƒ[qUêC´3ÚšLÅIô«hƒÃu/kT˜õ7HmN'œ+¿¦»Ÿ× t÷F«(ãØt`ý$N;%/ g)$ %ì\¨Ó)(O 4pî6A{qòŠ• ûT¥Ðf­¿uFžý º$™ääBˆ¦ã 4”ÐÏ8&ö ƒ‰aTäKQbìÊPêýØ†ê ˜òö9æ`Cκ’Ù¿àLÄtØ… lÝúí¼‚øä7~gën7<Úÿöêò8í… F^=²Â(ùùÇŠ¾H~Ü8ØgëÓq3!‡I©[p(uüe46ôÌc• ¿8C@9H¢süëËW;Zü×M9äTq% ªVßX³Ƽޚ-J]pµ6p ]mîéGÏè7®@øÛSÞðsN:*ijüB•þœ.A<ž.Íæê»(GúõUƒ³‚YÁ™Vpï¨vÀgŠCÍe»•Lt2óŠ%Ó18+ùE’9±ǘO‚º*$›ªÀÚW,¤ŽÁY! ȬlOHXBHNƒƒ‡“³¾ú\¬Ëm¹<Éh'×[ej"Y3[Ý{ó=ù™˜=ø7+ÄçgÑt~Å•`è݃xy:º>’¤>r =Ÿ«.rɃÄí#U€ïñ²§Š+?Že€¹|Ü2‚¼×© .°fŠí.ÚaÞ©N,^¼Z­ÒèʈŠJ½ü¿m*ÌaMšÅ(“%¦«b›¤.ÿU0T[g±Ô‘.JB&“KÁ síŒðzÜîcqåÍM · ­Œ³dj—d˜!PÊn–§¨za˜u.ø¤ƒ8Ž;AË’­äD” ,c¡|Fã³qy Ïó´+%1]¢nây»Z°wŸ„Y_Q€ ~‹-’Æé,áÂÒ’¶ ÌÙž‘>Õ R-ó Ϻ œŒN­Æ^6¶²}pßãôf-*Ö §1¥Ø0¿G•}ÃÃøÈyŒ?@ÀÈûöT¹D7G“F \Ýf†úΉCz,ð¹2 †íTßákü†0èJw|¡6HÞ¦Å0‚¾' 9åÜçØŸÃ·œÈ’ò]•ø}W LK7¼v[H™\eëXŒ_iÑ !ß¾¼[Wå¹a8Ïÿ„‰²i,Pk)„<3x} |ô%Â8á4çžruÊŽ8J6à•‰-u{v|¡n“ˆ¼¤î%>î¹}QkkuIó'rT8Þª_¢»:!1Ë}‰ÍÇ ²è‡4Ä]еýúR ¨,¸sH²UyiÃ7´®WnÁª[1Š[¤3…¬µZH';DŸ\Ç:TW™²!DÑÐgj[ÎV°6JT”ôÄ2ˆt1$é)› DºØ§8WÁ¦Q†UGÈþ&‘˜È~)§ˆsJÄ‹r+Z–DÀ×2ÑÞÏ`‘SL$GŽäeÝ–tàp‹¼" —z’Æ\ Ì’Î FV§Cl ĵºØ ª^»ªA‰@Î?¾á#ÏØ/Æj'Ôÿk‡Ú+ºEeeÅÊ[2VZÚ­—M™ïF d‘²}òCÕ ˆ9_5²L™(íQëJz‘»4§QmwF¤þŠ´Àš„pùZÐfvÜYÅXÀ;Í•>¼w}¯©*O'ý/¹ÿódÛf°"¸z0é@úɶx Vˆ™´Ø¦J‚ù“Ho~"-¶q¤B¢m¢d!  D‰äî|G¹³£{¶éµ¤tVòˆŒd½»K%.š Ô9¯iç]¶D§.³6‘‡Í…AàÅÚÖÞà (CQnÊy%'€½ÿÝÙƒÌÀÚÄJG¦ßÛ?Kƒ‡ÿÔÍ©è{^Ϋ8Ÿk,‚?ç‡óŒbb3m¤’[¼‹(ý+nPX«D‡W•^@®(½”˜Çâ-Ðñ“Ê«"WG©Wüó-7‚4Éœ¡èP=_?zó†b2à>ä<ø¹¤#S£=*zú ÏPÿÔl<ðœ‹mÆ;‚áïµ¥ŠêTÑèŠK›º¹gPŠ[”5ù MÎ’Œv¦fÀšv¾ÎŒÀŒ=U,% ¨ºi.3cž(Nîž(w^MCOíñdÅfG>Ž¥•¥rîW9ˆ1­–ä_Zðùtî°+Üd‹*dãœÅ™G‘F–ºžŸK aØ›À5$¸(ë¢X‹É¬0‘וÏsWYŠ­?â½H¨ó*îu‰B}áÞµ3ù/ž‡…qº0IÙá-Ù„[±ò–ŒOÐhYY7ÀÃ>„› ˆúô‡§g3¢èŸže±7Ù#غũ n }5P ýDu¦_upäãŽvé­F r½Çõ[Y‚în=ãÔ  w)k©yóSNÍ”H“ž<•kÔò'Ö[ñq˜µµXtrá¥x½ÌÞµYË›+(6:‡a=¯”’­¶ 9Gq¿Oj}©ª~7‰Çéôh7yá]é: %ÕûÕÞU«äCÉA™Àe:wa!à{ôe5pÆ,[œ@T¦:t°:ƒš¶jóÂ/ms­¬]£|,•-¿øö?H–ÄÍÀZq…ßÞ£€ÍÉ‘\øBå5Z‡ÚÙ-VF:âA¹C6SO§±ŠÓÄ'ùÉõ´ ºÊLEZ÷˜*Îõvöš€NTA«'‘¡£˜]ßÑ­‚$îÑ:ñE½Ý—Ô?ël¦>M¹B¼î ÓÛ28þüWë u +ttÍ:¾+t[·-÷ÅÛûÃËçúË’®Ò æî']aße†3žQGË?'=£7?áµÅº(q—‡ø3£€…êã’’+oÅHR¤s×r‚„ÒTÓ§_Ë\WÙÒ +{|]59 A/íËfhq 2"ë\¨U S>ÕiƒK–gj1%œr¿n¯~ÙÔ $™_¶]êtT¾a`T1L&¨ axS‚Òc‰C)&=Ü:’äç{¤%IÍ|¸°‚T ¿ÏϪ)Ë̹y-y 2…ûaÀún9ˆ]É‚•·b¼Ë}¤sÊgBà®t˜>]ù×u¶ DLÝãëJÿ: Ò¾l†Ê'0#º¾öEV%&ë‘s÷›v «b´¿©& ~FÒvXÂ0^\}…¯Iÿ~n¦® ‡st ×t×|qXÎïžkØ?Gˆ{]8Avd\´œ¸ ӞŠët…þ²©¨·Qb燲;–C†%s§Xx…uª”:a× Ó ýÚTó©4’'¶8€]o™¥7i¿,Xu+&®Dö"Ÿçª¨‹#ZªóË Lã¤ÏÆ@ÑȰ§gÆ€wƒ8ìÑ•»„X.'¼áÏ|#äÉê,wÀ¢”ß-5óSÿ4 ^ÐbP°5/,åwÃç=üò\b¡&ÙLZ *˜äƬ²žJ*eözNÙ¡øSÊ+ÜHFéqô‘k†ÚjðIIO£Ç Cº¾‹ÁÀ–YŸîä1 r€ýð4òW ZX©é’P @%T,WÐbׄ…‡5_"èNÆtâœóQíåè%†Ž ‡³`¾7ï¿[pMì¤s§uL‡æ×P‡ê*S™UiœøL5ÅÏÍì…S)|§;“÷MäŠ& ° QÙð¯FÛö£ÁaZ/}¾òäA­ì½”WÞV²ÁÕkoÑ/4Ü.ÞUì÷r‰ìæ7÷î„F ¿Î(VÔT^™7+ƒ›/0õ:‡ZÅÌU‰šüÃÃöOóæ?õßí¶Ümendstream endobj 778 0 obj << /Type /Page /Contents 779 0 R /Resources 777 0 R /MediaBox [0 0 595.276 841.89] /Parent 761 0 R /Annots [ 781 0 R ] >> endobj 781 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [273.218 471.466 297.765 482.314] /Subtype /Link /A << /S /GoTo /D (subsection.B.2.3) >> >> endobj 780 0 obj << /D [778 0 R /XYZ 72 786.281 null] >> endobj 777 0 obj << /Font << /F21 372 0 R /F30 496 0 R /F8 384 0 R >> /ProcSet [ /PDF /Text ] >> endobj 784 0 obj << /Length 3900 /Filter /FlateDecode >> stream xÚí[ëã¶ÿ¾…³-p^ô̈©GŠ|¸$—ÒæšÛ.‡Tk˶º²äHòííßyzھ͡- .¢Èáp8Îüfä•3þ“³PÍÂ(*’³åîÊ›m ÷›+iG0¼èq{õé×JÎbþìvÍÓcÑìvõf®¢›…Œ”gæ_ÞÈù6Ù7iu³ð#þÅgøÔóÛmÊ?æ@:_ñË« ÈS쨱QÜøjÞ$ vdeÁ4?dwU‚t7oo¿¿zyÛJIBE>ÊøëÕ›·Þl{ùþÊ~Í í dzݕöHkì{~õúê-Ÿn g‘:<¡a¨B­pó§žr=lù´ò‚h ¼h¨; _²î¾?ÜàöaË nØÌ›ŸÁüîf¡ÂyÊ/«ìgOúi:RѼy½q 3@ÛéX/2’Âxº]åÃ;r3½)$¶ïÍ";@¹ÇlQødµš¬ cÙ_ýüÑ€2•>z0 Çë¼\q,ÓmRó9&üNç½Lr{ºIÓ …gwh ë´SÊýž,¡¤Iéjh%–á6Í6[2 ~/+Ü6hÐÄ$äBJCB>d+2àª%® /Uvÿ?4©¸Yh‰÷å©™Ä=«4ÉóGn×YžÓ¥„+ ÖÊš'Å ÝlÞ–¸—œ^½ù¾*‘rÇsˆ¤µo|YÞ@{K6){9'Yüùwø¾fF¸G`M/ ]®é‹Ëzâ‹’Ëô9©Âè`Ÿ;ϓԨo_Ï÷¤lû¤Ux¬Ó¤9T)¿T鯇´n˜˜Ô,7n­ØXºf‹‚`‹\õØ¡=ÊôX/q]:ð½]ïHœ;G ,7V²ÏhÇ¢ÝF(bß§m¼°G®¢˜WÁñqgï嚟Vw¾EÖ« WjÏP79w=àþ’¢¿LÉÏ]ro…V±ÇàÚI~Ï4Ù ÂͦæQ{08T¥ ²ÒdCqÔr_ÙäXgvvë,ÓnÓ£û­u V¡ „ÍSº±èM™¸™1[ºîÉ}zÊÍèPS”ˆ1r3Žf²ð(\xZuÚÁ ©­©Ñ9Œ}²ˆÐ„ŽÑ‚°èfLýî)Jw 'J20ÂCwÙ“a¤G2^µ§ qÕW•,ó¤fAÈ3g—xuêò³#°!ˆ! é'(o›'”|©!?œ¼Ù¿á¼™Z†3àCl©ÒÙzîx´eò# }"_„Nÿè …`T^0³¨«?Ý,Œ2d·ÜÊšOŽé'€¨>}ÓÑcÓÑoÙt'àÉ][‚`—Â]Öcû…®X‰ºßNÀÉ~c#”oÚ=à~³¢©ÊçÇ6ª×è Þh'àÉZŸE  ú¥Î³UztÃà¤Tl.xÀ'7lIpÃë,O?¿Þ=’Eïëëcž·­Œ0'½ñ#ñ&À-z1»tF3z(-ChsǦ©4 ×X€’W„(êf6phÅñkyØ¥^`7a£$oáÙ$¿P–Æ~Ü ùaU»‹Þ”‰®Çl)Ø:5eðU,|Ï e©ÙÑLVíéâä7z°hV°"¢BmÖÉÎb|Cl”µ™ó²)«GžBCláAb ü(P¤µ™À6[¢î!ðƒÐ)RL+#À_û°'œðêñ5žbÃdÑ€ ¥\`Í8å "9 ðç/Él`¤“_0IÉì~†dXðÚ/…fé–‚DYSb…ÔÅŠà'\?_¾‚)¯{3œ>ÿÊêŠ}†"=mµ@1JXlO';¾pfNmÊ„šýÁÚ>`N‘ nã7¤*+å"€ý-‰#-‹nøzNàOÍ·å¾­À躬YLM¢î2dTŸI#n1‹ÃŒFCB¹l eܱÉÞ9@o]ouºs^¡HlŸ3\¶šjïµYfZ%¹Õ"Ú2¯KñË’]€é!V”ŠŽ5Á`mlÆÔ»²-­ “rGò–Å‘”OV+ŸRz*N_èÅnJ+=¶=gæH:VqËáÕW_cCÍße ßô ,,;qBZ«ýj=¹W>øé8´4x®È·.wV”:kõŸ'U'?– rH©4è‚î@·»¡CmYôw¶Æ‹ÉÙû ©„¨šì®Ó”.`I—‡ð!B ç/VeWÃÊ­¾Ê;¾ãzþd²êL†ºß¨·<‡òlx’Ï«÷yB4ñ!#zip%~4‘7iU$t¡ÞµIu¿RᇪgY¸^帶ùCßBvtE$ëòº`ð¾¯Ê E¿wçx—á±ÇÌÝžú¾Jë´˜:Tq,tdoä[[ â9:®¼Wº€ñ°…—ÎÁ êí²˜,~+5›6ܦ Ïo(±ä+3ö⺽³5g¡#´U&pÿ¡ ì¡¶«aEʱˆ9U›ÈÁ@êG”æ%r DC3²5#ÂKmWmŸ…ó¸ ðß ›uPç‘’ÞÛ7®'kW0CKUÔ¨óÕVÊc—g÷*´†KI÷¿3¼ÊÖó,Žyœ;6æ©gðEàÈ1há.,“:X€Šê*Ôn¨VçŠ*qÜ÷䞇ŠÀN{.U“d¨ˆEË%³ðZâ6Aüœî<[¤f%àqÙ»µíj9›k7é°hK^lé×n±Ý4°\"âxheý%á̺r\ì,QBKƒÿuþå;¬®z Št#xðù ØÁ»,}`v}ƒF Z³äv·WágïxÿÖŽó’6P`ÑÖ±ðFs®è¨Ð–‡&diƼ×GlÊJš¹•< 9­«„âÀý]~HOÕÖ|,,«à¤oï©­ùF ÉqùE‡± ÝØÊKü°‰-öo‘7p‚‘×||ɻܙüsDà®qT½¬Äò°Ÿ¥¯WT¸'\{?º(ùŰç#ú²ë̯çW+&ü£B8 D Ža+Jì‡3È+µ²Ÿ0'è@øqGrK>2aˆ[Ð-5»Ñ—m·™u½ÿäØíÇFø±?ò»¤îû ¦é ž±Ê÷=—`Êmõð|Z“2Û žP ó|Œø¤y1°÷üJydH;­_¤Ž¢ûyuì+ÎÒ"H®zÇH³È|Úù7$õú)uôî~fmdïý<¨EÆ„óÒæYm/­‚,AùƒleÓb+’ü°Ù@'•‹Û4 7\½y=%Å@Á:è;| ›Õ=ôBÔt¼®mé¹wÅ`~áÔ÷À4 ®ÊŒÒòIÀ#ž’— Q@_söµ¥è}˜ïp £rj’ÿóšç®Ÿj›yù@ÉÍßÚ9_% bøm•ÖÙ¦à6ž+>-ä9ve/P³L½°Ì.÷àU$ïüÉ[<úoüÛË6-k±Oš­HßïÁ“½ƒä‘êõŸ¿ÅãâSÀTAôôÿŠ¡'àIÅX’61­¿Êªv:uý…×-ì!'æ Ïõ1 yè^õ–ý‘(T‡Êœ;@GÒsjuÚŒ¼x´tS•ŒÓøž¸Æ]²¼ÇSì.ËœPIßyµœš¬qnó{Š ÝêÔd¤É]p–Ûð¤¾- ]˜4_ ÒÈ/ëÍàÒ| :¬Ð‹<ƒœ³IŸqùꨑ°xä…—ûƒ·ž€'•bIFJ¹ûx¥JD:º<¥|œãøÿŸ™‘Tù:wf–ä¬ãèð(@ßÑÕg´|¤ ‰‡¨aOþ+©•癩˜bdÖ¸û\´Ö]]#Z¿[ãÿ)…Y‹ˆRAêq‰¿ôü½DD‰|rþÐ,ÉyÃî,øð·dÁ‘÷°-í/yí]Ødï¦éÀ©èE»䟃ö<©^KÒ^ Èj’û´:{-ÈM½q(¼Kü½èïä>DþYÀb)ÎÞ†>äk±áàŠP曞€{ÉjU¥u}bÔÚÇoƒŠ¡2 /Wï|§ôn)Úkb•t)R…ñÙ©k¡dtÉ¿%wòü¦˜èäã\‡ñéoÿÀˆ´gã(ÿOÝÆ¡Ù–U}Î1P oýž_Št “TYþx4™GÿÀºý“ãÓúùñ|endstream endobj 783 0 obj << /Type /Page /Contents 784 0 R /Resources 782 0 R /MediaBox [0 0 595.276 841.89] /Parent 761 0 R /Annots [ 786 0 R 787 0 R 788 0 R 789 0 R ] >> endobj 786 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [290.68 730.921 327.625 742.876] /Subtype/Link/A<> >> endobj 787 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 0] /Rect [247.789 544.159 254.763 552.572] /Subtype /Link /A << /S /GoTo /D (cite.acroread) >> >> endobj 788 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 0] /Rect [220.509 532.204 227.483 540.617] /Subtype /Link /A << /S /GoTo /D (cite.pspresent) >> >> endobj 789 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 .5 .5] /Rect [411.033 351.34 445.515 362.396] /Subtype/Link/A<> >> endobj 785 0 obj << /D [783 0 R /XYZ 72 786.281 null] >> endobj 206 0 obj << /D [783 0 R /XYZ 72 473.425 null] >> endobj 782 0 obj << /Font << /F21 372 0 R /F8 384 0 R /F30 496 0 R /F26 402 0 R /F34 561 0 R /F7 397 0 R >> /ProcSet [ /PDF /Text ] >> endobj 794 0 obj << /Length 3666 /Filter /FlateDecode >> stream xÚí\Ýܶ¿¿bá>x7õÒ⇾ ä¡i“¢A‘¦µH‚@·«ÝS¬[]$Ï׿¾3œ¡D}­7F€îC`Ø¢È!9œÎü†âZ®ø#W±ZÅI$T"W»û›`u„Ú¿ÝHnÝBóÖkÿâíÍ믔\¥"ôêíº§"‰’ÕÛý÷ë/„ÚlubÖÙÈugm±ÙÊõ ^ŽTŸáC¯Û¬Ä†wôVÕôl€.¿Ç†â”AÒ‰ŒÖ*Ýüøöë›/ßv\ÙIC‘$yúåæûƒÕxÿú&:MVOP„LÓÕý pò{yóææ_Ý8}öš[¾£ØªØ®ØÒÂ@k¤Tüwß#Xm5+ž0¶úþZÆVR¯d Ò0]Õùê0`ŠZ»AÎO·µ%߯a"´L:é`•Ç‘ÕQ$L­ êé›m¨Âu{—S¡yȳwyM/ÕaÔ Úz÷CÊ9=˜Xèèb¹$¿…\’_#—Ž¿E±J¥É˃ÈÛ»ªn~:iñŸÓã/UYÕ „àåÓ]Ñ¢æ/—d¢qdyÅBé\” “LÄÒæÚ¦}.ótê?HmËáÅœHT(ŒQ×'¢Þò`׫1i„!w·¨1&ñ¶w“·£¼+~ämžöÜ *åí3ªÐ)wêŠv±í³¦,öùgsÊ´•¹béö .J—Iºý`Wû“Ȳ«°Â,Žwí±Îž—ÜE”*BŒ¹Zñx .‰Ç‘ÌŠgÎeDì2ngÝE”HÑïîâS5"2ñY1Éîâ7ï²2å» ¹¶jåºÛDzt#t¾¥8íó“öùÇ=TÎÑ£Ìßç%%=îòl_œŽs¶¦"ºDÿ/(æ1¸(|&é¶ /QGó½üqÞ À-úXD‘ID¬Ò+–MÏà¢l˜d*k€ñè99èXÄñ‹¡ãoQ D1BçL‡rpþ´™÷§*‰TWì°z%Â$S‘ã™Æ—ÖCpëŠ2ÿÜŠ­ùkQÿñEï©—Èš¸›„µ.¤ „z—¶˜„Ä3ÔW,ÊžÁEQ2ÉT”ä®Ç’ æä‘¤æ÷ý‰j S-R}T9’k Ñêc!:L”Hã+>ð\>“̇hõÉ!:Œ•d|Ųé\” “\¢!7˜“D$E&W,‰žÁEI0ɹ8­.Óaˆ ½büæ1¸(&YŽÓêò8}¬óüt&RËðþ³´×t*¤¹bivü- “(õH”ÁüFS‰‰¼>9ø¡úšý€Œ…Rg•#¹¶P­?ªƒH¨èŠÏæ<…Ï$ó¡Zr¨6i(tpÅsƒK²q$—‡j5'‰Äm®Ðy .J‚IÎ…j}y¨60µN®Çy .Š„I–Cµ¾ÔÎ^!ašÖø«G˜éoá‘t¤'”Øë¯TÔ¯Z+)…2ÂE¿ÏÍ®.Úשƒ'¥­ë°•l„ÀáÓ†&1AhWaWÒ2P>Ùz(*=í«³Ä¦$‚òÐ1Õá„ 3ðð´€ÈÞoÂhÕEv»Á[b³ÂxýMÕv d-–´ÇŠ{fÄûÃF¥ëgËUu¢\+ )ÊÂê¹_nv²º$â AÓàýSP ²¤¦™Ì=ò:àì¬eÖWgèÀ(´Öëw§ µõ„âÕ`j·V©à$„µpÊ2:%$ýÍæµL:ƒå&g7„/¼i œ®[´{­ßhu~¬+ÔçiOôÙÉÙD²F沎üîX[_á5ºû=ZÆ@HVíÍÞö6šx;ת#‰Aý@!"yAÊ·u=¶^—‰zÇâ è6ÑļÀƒ$½ÁÎ_ðTàÊÌìõέë,gºD ÎÐçì09*12RGC±Œmi&Óù› %Ê#Ãx:°Gˆ“¿B ®ÇùµŽ†]Öä2‘Š~-ðXç9‹BÉÏ€³ÛãâŽ?§…nÇ/kw<¨=Šä\رab¨ýƒ>º€Öî »³á­áðŸ“C(8@‘]C¹'B{Ò4 ŽÁ  Ü&>À[ï©-f´£Y a ÌFvâi›¼.ç¦Üò~Ìo.›8ˆÉ-Ù0Ù¢`tÈAÛ¬Á¸Ü½Øè/ÃFøöš,^E" 6CÈQ‰Àïýó4ÙŠmOòÖºÜP„Ú`µ4tð÷eW®úÚï˜+Œ­AD‹#²`żcæ•y@oC·"»Ådü„¨ xƒŒ½ñ Ñ9‰¾2¯¹éLôX¸éH³R‰qxɾçÛ¾Çts µRÌ¿›LmŠûò§ï-&OæëËtÊŸ«‚=†ëŸ7„ª4~@"ß³šáØ£ÃìùÞÀdý÷ƒ‡5 ï…ݳÃ} €ê¶ÓÓ=US<¥îŒ¸@Ò??z¹6Óœ¸Ãð[½pìÇ#•kg*dLUÍc¸©yÖ>Ö=æ¬-ñ/8BîÏé *æIô"y°¦gÁü†°ìt귴ײ#» ÌÁ¨uX^®_¢1–ìÁêçQ º‚ÛñoMå¡b'çh*›Ž ã~µ›Ë»ì4ÄE‰‹â~§é8áoXëûTxµ*:Ž(ï²” eÞkªµëìò°ûœ¼µYˆìÁ˜±ˆ"%éÖcá„“^áïQb”ß¿ÃWPÙ·Rh°*š*—wåãlÒ*Åż_oëÆt¨Ûö{ûsšÆ9 hÏËü>§×àz›Y$J¨¹ô4出²vKIh7ll<Õ˜É2!«Gz4tá9Ï»é=M^¾ï̸݆Q¸þÏ&1®ï)·M{µ¢'mÊ–H2ª;Œ2T±^|é÷Ø °¿vv!Ý·3ãbœ* „×dè¢û Ù^mÆ(ªï„Y‰{)NNfùžG䆯Ï»ØcŒ7¸U }Ô&²Üñ`þ’Kˆ»Õ®\®_ÍØ/:H‹†WëËÊÎYZ¢„…›§îYá™Íì†G«MâÄí4¨¦›zΛÞ;[‡rg)®L^‘k:C#3)ª¶â‡ ìaºÍ^¸azHÑ3O,Ýå3§KBºäÇö¬É£ž{õƒ]¬JH«X ¦EW&™LêÃ3ŠX¦ƒ‰‡ùj¢-tÕîØ¤; 3ƒ“K<µ=h²î[òvƒvçb Áá™:=J<+v¨£;z-ó~cóÉ™³œ;*ÃÙÜéŸlõ§"º?ÝàìÕÂ…XÛE,ÛÙ’f¯cc«Åè1oë>Kî˜kmþ‰°}.Žb¢¦Dl ­B]ò!fëzl½.[‹KpŸ‡Æ,(ðàiœú,|rîåÆ:ËœR0B ÌŽøexÌ™‰„ÖéP8##v4“=+ƒ >oƒìº÷ÀáŸÎhS:š¬Ü(¨óô’‘QjÖwªÚ#R[³Nwø/hwL0ñƒ½®w"OšÄÃç4QpàýcéL4ŸÎ„¤3ï t)ÇÈ-Ì Ñ­sðÌ1¦Ôt‹úò[h~CevŸœÝð±§ÒxrOˆûm¯’Àå¼*‘РÖ;œ ¶ÞW VZžrå„1åÃu¨pgkã^ù‡ìþ}H7g—vqe+÷6 nUŠa³‹Æ'ž‚eˆó>÷®«´¦s?ÙÎ~=ØÑâîZ3›œÚîg‚.##å!#G €¬Ž*Ž‘ˆhºE OûÎB‡¡WeÇea“êPàûÎÚ+ÑÇ7ÆPÊKhï‰`,2¬ÃӂǦ°‡‚±rAstpœ‚ òc©« DT†ˆä%©+uØz=¦©ëpP ¨í2'ft»c0û8{ešÉ„þþăà0LH8›à¹u=h]îC$³Qd» @åà}ƉyÎÀFž j,¶¡S šºÏbð”§øowôà§ova $\T¸¯\$£jŠò™hÛÎ8|ºË¹Ó{4JÛüÔ Öƒ‹?×§_ë»·,äaºÆ@{hCcúá q—ÊÜñ,ƒ=ße¡>U;0á¹,Ï T°‡IqQÍݾ©rŸY°ú¡Ìü¯pP“Õè4‹¶;ùÇJòû4 ×0 vH ­›Iûù¬2°0 ö‡#¨Åb{fCQËݽL'p©'òÂ'Æóh_ë9ØÒ£O™V¦œÄÏ ðÍÌ—ætÃÙÙ­[Y—Î>zéjqhn‚°p.Ÿ™ôEðŠÈ·Ž~[yâ vÕ©­‹Û×ø¢bبʛyŒ]˜`8—\4 ¯Ø›ÊnÛšàr[y_ŒªCŸßOüiˆ4øøw8I2bª}ÑVÙ r‹AS · &iŽ˜u‚Ýyá7þ”nfÂendstream endobj 793 0 obj << /Type /Page /Contents 794 0 R /Resources 792 0 R /MediaBox [0 0 595.276 841.89] /Parent 761 0 R /Annots [ 796 0 R ] >> endobj 796 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [71.004 255.906 107.949 266.755] /Subtype/Link/A<> >> endobj 795 0 obj << /D [793 0 R /XYZ 72 786.281 null] >> endobj 210 0 obj << /D [793 0 R /XYZ 72 40.086 null] >> endobj 792 0 obj << /Font << /F21 372 0 R /F30 496 0 R /F8 384 0 R /F26 402 0 R /F7 397 0 R >> /ProcSet [ /PDF /Text ] >> endobj 799 0 obj << /Length 3872 /Filter /FlateDecode >> stream xÚíkÛÆñûý á>Q€Å’»ËWŠ|ˆƒ¤HÐÖis@Q$AÀ“x':’¨’ÔÉ×_ßy-¹|H>;A`…ah¹;ûš÷ÌÎ…‹þ…‹D-’4öU.Öû›`ñ½¹ etÃ+güõÝÍŸ¾Vá"ó³X/îxzæ§qº¸Ûüàé`¹ SDÞ—ËÐ󾂦¨—+jïõgøk¼»mÁovêmøã»À ìh°qXjåµy‹eu`˜¿–÷uŽpÏËŸî¾½ùê®;%"òÓTãÿsóÃOÁbwùö&ðu–.ÎÐü0Ëû(8m$ß»›ïoþÑ­Óá,BGàª+Üü§ƒ W¶3®o®‚Ð7ZÏnÞýºeVvp¥%ñÅÕhn«qK G‹ùµöuôäO¡ñµ‰‘þ0Õ³HLäÈÀ¯}í#‰4u@•ñ“K0_ÖEÞ–@ÌÃ#P7‰¼œŽðz 4È:#B›Äø&NΑ>þnH=\l…Ó²_Ç9àÝø±Š/ Q‚©‹Ú …H†p}í‡þøú!½p–šl% W·-ƒ[’Tš0ò¾«ï?QÿCî«îßË(óÖ-S5í—Z阶S‰¯Â¸_J§‘÷´T©WÔÏ,÷?¡©›–?Úmy€;>2`[qï¦âïóÖ*ƒìó_\øœêÌPÀ:°!ŸÊFÖ_"GqNjpR›–*óÚ2oå¼-|Ìoö¸iœ†ÀÝñ‹TÏX9S˜Á"¬‘$Œ—E´?>ˆ¡Vjxé-Ìdk‡^ÄTEf°su¿\E‘÷¶X·Äq@ÔDÔ* ý,ŠêßKPÁÕ Pª™(¥5Ò±áÖ®ü…È_ÆkªÏftt?PÉû± ÃÎÙ‹@á¬éT,ÞÂß %Å+ÖÅâa º<Ú-òúf| LgÉ›€Lñ‚ öŽÂ–‘мÏù§'xSþ·øü67·s”G¼i V¤/ªg|LoœÆ~ÀŠùïòº1`[·h\¹ÅbdŒöà (S=L!PÆ1’ ¼àxÞ0À=X‚§á†¾Ú–¾kÙ…>ÞAïq‡æ`M&%v÷Œç/WIz_8;6äÈÙ¬ Á¯œw¯N²ÙÉ »hdî@¸šypŸf]—Ç%UÚ+y66]:P^ù€¿¸?êšwž—°ê“Ô°ü ¿ÿŽðö {Óá"oa»S#{“n+¬ƒ£¤#áw[1 "…ù¤u$?)ß#0«Cg‰Cmòàv€ –qD-¨Âžä¨V{¦@' ™‘BÖ“)^íËÝŽ[k¼á6'ôÓuðæYäÝŸÏs¨úvk×̉ZËe­|_Xg2À­e¡©w…¶Š2Ý;àuø”Ó럭K3/ß*RF[’l€‹ÌÛX^^ïß­øª©˜´ÔÞ'ëÙ2óó(Ìkde»ƒ#?ëüÔÈì²å ªzh&2J‚Øls¼Õ“{5Ã#,0Cî4EˆXð®À è†8W€PáÜ¿ÌT+`çy‹ [›ãGŽ‚O–—̯¬Áª£éNZf箫ÃC¯W– BL Ôci±€_ÜɾEuÜÉÀ§nÉe˜bd„M0|OeAâ_lø»Ç ~‘ükW³â—#0~· „¡˜Zæ“( tœ-BHÎ"â³·êâ?'A4kpÚr(Û]ÂG¶kW’¶‰2–$èÉI*·(uc¥56¬Íp|³¡•Ôs;…}½—…'­O8ʹj׬ç8¯.Ž}D(|NÞ… i[щU€)êëÝ‘<®Åð0IèDñ&^sÂiû²m YrUËFµ,>2&ì㲞…–£$C¯ŒŽ‘ª¦ß“¸ANèk.I!a¢:öŠ¡&l–ÀP§†C.™¨npÃêbW<-Á·_wO@ðÖuAhõ÷ÇÎX9S&þÏxY¼DSLvW0l¢ÔÝý=a¯Ÿ*s!蕵®žK… <î¹.9ÜJÅ~œ%CÔŒ|/ 3ÙÔqÀ”ü L{îÙ!bƒl²OHFâÔ“q|ª,õ“ ú‚Ù×3Zöýñˆ†¸Oà ¯¡ÇÂ\CÖ™§f°3ZEâmc¼¯IŠB%w¯àmMHœ 3L–ÊÃÅ$á‹£Œô·ˆ2Òˆ2Lšøœš¸dDcø i?“¶GÚÝþ홣 ¼a˜P¦?AD0ô‡Fƒ¿?bˆ±u•P2¢T~{[7L+4ÐH¬m¹§VÌ9u]!^ùa¨ÿO¼%ž1~™«Ä1ñ6p†˜xožl|O>o aP#$íù X~Ο/’Tk°rÑ…¤¿{vÆ(å+_%©€ŒIzß´u¾n‰¦··s´×L%É'|ùþ€// xùo˜›muÚYe“?Ü:×è¤Ú˜pYqƻËkqÀ‡-Y2?weaù¾ŠGDQ[áÚºøÌN›Áv~`˜~ÂØîxÛB¾_ù¸mÇX~¬¤+å»_¸U‚¯SäD¹ïû3ø€Þ×ñ§«\ûó]ÂŽ@ r@à.(D Š6ÑŨ3>“Õ±ò5øy¸Çy60!e0Ù i*NI&¯á.LàïQRV8q‡®ûcÕÈ2 /p¹€óàËÆièÝ]pë!€hÏžó%n=ÏX9SfÜúá²/që pªdâÖ3Ìdë[Ÿúfˆ÷ΫgôìŠV°×ÅâØ½á˜ˆðNo Ø"åM¹{æï{ fŸù©B[;¹ñ2ÃòX6/1Ž|ÃÈŒY0ßKv쌕3eùŽ–¥¤êf3Ù‚Bî¶³ÔGG¾v­ëç"@Npε¾Äa öN]ôŒ_f²±ÃaŒo¾Ù`ßÙèC½LyßrÜdœ A‰;ù-€z9½C¾/˜¾0›”sT0òÕwÿ=·ñÍq'éåô¶Iûe¶¨c›¶7™“‚W0³eŠnã2[[Ù Œä\ºl¶Ùlè}ñJ’‚‡Í4WãÈI “…».•% ¥äË5'BÇ+µ˜+ÂNÎ%¨QJr’hÅÎ>r+¡÷Wþ#g.ʹ6}q­>a‚–ºþ”gAgÄúg+B·ûçŸʺi±‡žüâØÜÚh™¬ý¤å’qÊàv§^Ä€\ÁPS€Ç‡]ˆ¡ÇC‘B'!3í¿3>cÿU&+ ò„8t àÏÉ-zb‰ñ92_S>8–´qŠgZE±¼TÄBÅ(™¼É1 BA8ñÀ¼bŒÆ×üJ’à{¥¼T}®œÂ•XÿZ+÷a>Î%|òôYY§‘oLøD¶3®"s¼ì"cªô7!²]ëê¹°Ô/‹Ô„ÈÍÅú,ùY ¯RÙÂ\£²Ñ™ÂÜgæ9—L),{™ÁWýd}2bm¦¾æqX£;eScà|¨3,dLzÙéÇgœ‘y^q.ùÍ=—àãø©ÁŠ'ãIÀÙ4§¢`gôâ Â"(º=‹ØhÃ;±Ì6Ô}¸`Ë"ÓH‚ìGZðÕ•n9Ű|=¬/°’7s^ÀmÅKbË\~L?ÁÑž¹¿á꯶=Ê„.·‚_ìNíp|@nëß.w€Ä´ã5Û:/ÛUE~­$à7÷¼í\ª$›”ñ±©^ ¢L²«öà66íÏ¿…àmê{µ¸U‡T®;hÏÿg.yî"Fô4{·’«y®bdx‚ÏŸ‹[Ì :‰Œua£FXs ûî;ëO¾hB´Ÿkèïó,`©MòbFËÔǰÅâbAE¨ìOßR§‡yÇ…·<@¥¿¥¹AOìm tÔÅQ¥j‰mßÎ×}…X .JŵNÑ–²wW¨2S¥yßSÚj¹kmµS8Âx¦R‘ÐP¹L;ƒ¾ò«‰+pÓ:ÖC™“$‚³ )wŠó´r"õcT%””yI$gg¬œ)3õÃe©NŸ®pѹ‰b_ëpx±s#0“­]ç&ÊÀóîì”%Ï»04¾Rñá•? "_]ðDÄØYáªpPIÜÓèh³»sf+Ã7Å‹F«1YIJNI_BÜ9І¨¸/DÁÖÈ)3ÌßrÓ†'pµU¦u=RÐc^—H%ö,/`y†_õ¦ ?XÒ©ÓoÇ>Ä…ƒ½Ç\. ãí\&3?‰»]Ïã¶RMIHW“’yÜrWÞ0")ÄÄw¢úñ´C nþÝÖÖ+»õq…ÚesÉdbƒgVÿâzϬÙ²]Ï»BÌÀ@ ÷iˆ% ’Á)Ææ¨vŒK.`°JDŽ,œòlgRÛ‰.ÝŸk Ò!•é‘Õ⌼@ɿР(º$ fx97k@;å”~‹J¸1NôU¿Së]\]8eÐã‹CG.óÅ'9o«.]Dnæx0¿ÁÈÛJÚd+ŠV xЩO\’dÝqÄqõuà”qÏ^B‚>t¿ªý´ú0mÃX+ºòv°I’;“,ñ9`<âüeH_Ôvñ¯nÈÊMä<¡’0£|ý"1gð•…Ÿ‘rgÁÞ¦½®Þ]4ki¡Eäa,í0ÜÔ•u|*Hã~OÇšõO/ø›™0ñgŸáº?F»Œ¢ÿ ˆ"Áendstream endobj 798 0 obj << /Type /Page /Contents 799 0 R /Resources 797 0 R /MediaBox [0 0 595.276 841.89] /Parent 761 0 R >> endobj 800 0 obj << /D [798 0 R /XYZ 72 786.281 null] >> endobj 214 0 obj << /D [798 0 R /XYZ 72 724.003 null] >> endobj 797 0 obj << /Font << /F21 372 0 R /F27 490 0 R /F28 493 0 R /F34 561 0 R /F8 384 0 R /F30 496 0 R >> /ProcSet [ /PDF /Text ] >> endobj 803 0 obj << /Length 4457 /Filter /FlateDecode >> stream xÚÍW0#¡i§"§„‰¥¶›4Ëbé%}Uäüˆ(2¹ñ´Ä™²`— 2J‡Ø×} ða¤žõ€"?×:]JÆ(š®Î Î)•š8CöŒ„™à ΃JmœæCv°Óf£àZ)R*ÉPÖQÆâÐ X«‘Ê<¥éC9,Æ+±dVÔªs,xäDÁˆ ?G“"âÞÎñu‘†Í1Ö0f‚9Ô0RƒCc˜Ç†Øid Þ‘Õ-N8 Úf¬´µÛÛšÕHÚȵ'x¾©Zü)NÏ<âw¸šo~È6iœgšÈH³8Õ*ãÄ™Õo& µ)lRrM»fbƒÒ*c¡yǾïšÍ¦oýÓS~9RÔ+iðÒ¿6:ÝHÝÌéÖÀÉ4O_±é~Äê®§%yÛí&Ø.]†Ø¿útû¹ÖéRp¼’ìâ¨3MQÑš8z˜5qDkoT AÞòÙŽiÁ' 3Š]ëò€ eîá‘”úÉRÛ(º‡û†ûÛ‡‚å_~îŒÕD¹JØ%¡à¨)púÄîZäGDÁ “ÇÓöLž€AøXFÌõ0”sÇó Æ² xS´ÌŒg<Æ`¾é…Ž71vç”)ò®vm†‚@~ çoÐf'ëó‘æ™aòCÍKpé¶Øsž`÷ÍyÄÕnVÇ&³Àœá§ç·§êØNU (P"ÉHݵ  ´(4Œ™(0Û §Äù$©’Û.ð™‚Åô¡È ±w…Ý-˲ʡç©î¾€È窹¡z,îYOñûÓÑñJ‰ØÈ«Úú¾µuB³ô‡?ì*/Õ¨õö™àGõæð‘šjWòÓÍ•Ì=XßJ R;‰S·®ýÖùMβb_'øNì¹i êÚ*Z Ú9.!ŽH|é™§œZ?íØ!5X?Ç‰Ô ÍØ^§¤MžÇFŸ“p¢`ÄÔ^'%ƒ…[¹f®…1c­d‚v`¬A³ƒÆ ÑÎk•{ƒ[~$­Y’<¤yïg õGnì$÷€…±J5 ^ÁC?b•‰ãiÉx›»%&ÊØd‹fèæY„çÙØ6ÌŸ¢gZyà'´Í!'^‚%–½‚M~Ä*›ÆÓ¾(lpØb¥ì*Ÿ<ÌŸ4D¨‰«âFIe)U’?Þ^OŒb,R4©;cy%Ããæ#ûÜÐ9²YlryN`Ï¢`Ä4®Nºà…É¢•†¸¿Ú ós­’%…ŒS<]õ Jèâ1@…ȇì3ApÁR=@¼à‰yÄÇûø×3‰“ÉXž™ââ…¿Ùd˜IÁ/ÙZ2̃ Ãþ…3€$þøpWÝ?ÊfŽGFRövWÞ¸¸r‚+‡•ŠÁ×é—Ø—Çf)Mh4hº<Üè \ä„qœ‹œ«œP@„~{Œ`èÈMöv÷ 3võöƒgõ±øTŽNí·ìŸã#«Þ¹½J,øãoøB# p‘ÄIm3ÚÎÙ(ÄûËCyùŽ› oŸ/Ñ.ø–Ãý¾|Ÿ'îµ9·åû$– B®s°/oùr4 p‰qÄ3..ŽGp·‘[¨íÞuÊ‘ J¤‰~{Løº£þËïQfÀW1«{ä@‚£Nžü 'ûë\Ú¥:°ñfš«Á…°&=g ÿ_ú p‘edx·Û{Ÿ(êKmtœ,_õõÝ3¹?­@) ãSzãÙsk`ƒ‡zyÅn@Œ˜¬x4é‚÷/’,: qµ÷ïçZ%K@ˆg²Ê•ØX(K¡‡¼gÌo˜b÷Å@WˆwÆ÷‡MÐ}7þ>ruN¹æ÷‚8à;`2éoîÎË|ªîé¶äTÎF…W5c›šÛÊI*f†§ÿêº(u‰É&†FÖ.æÓ\.ÍqpýÓDÊŸÌb}ÎåIr<=EÝT/å4Dö<½óxÛÈa¸k l& ‘ X°V~ý§Æ½wwcZúm­]ÚúñLË€¿G¦¹—šî° –Ó”4˜ª¦{ÂÅ ôÄ2:†Ù9)*?" †Ì\É §]º*Ôàǃ7LõõW…n®uº „»2Ðuóò=á€;K÷„c¼C_AYðê\²eÞBq=JpÙ1±™iœ™¬›é ŸØˆ‚!SË=š ä*ÉE#+Ö"2¶f‚:4Ygjˆ9°s :•LœƒåqòŠ0÷T ¢¨Wƒ~‚Œ È«uâJnî‚O«Lg ^ºAÿœ¤‚@$Ù@÷©ÌÕM¨,%OÈë>|gœ¹ [ºûÕŒ#lë:¬ìÿCgáÄÀUËWfû;w1dSw±ÏWÖPWhxè¦ò0W(á Êé@7—'fç‰BH~a–²‰pD•bÓK»ùãiñ>Ì’ýBŸsqÇ¢`Äôân8颷¯¨ -˜éŸðöy®U²D’Æišèº]×x#Gì™”2ÌõÀáÏ 8räëÔ)ÞWÐ!;{ÃüˆUÖŒ§¥‹}_g¾x ’¤z•5f5x ªt€ù%ušX°]âÿ@þâY™ãÕj®Ûƒô…°¤P{ÁE» R%•´ÊE•ôϨT ÖФ¬S?R¹†’Re½Ï†/¾,Ö·;˜.ò´*•1p±1a÷ç =g|*¬­ °h¹±L#`„aÿ³œbÞ—wmôX¯!޹åÛƒ+Ö@˜š}Í“Á/4››>5½>%ÿ>Ó¡N÷á÷Òzð©£ÙÇ.kw‡ § ¼zˆçÝÔ¤ ™,ÐmR½ýX¿ãÏwÐâP! š¶€-r]•Wܼl)NŽˆÇâmé=wÜêÍ\ëìÛtÙTšb2‰¡E{*(…ÖÇ>TB<Æú¨úêCßê«N&e£U=Ýî"43Ñô%;Õ²@Ïpg~³V, tkEº*5ç¸9n@Œ˜–å'}YU‚Ѭ» ÉǨf‚9 Ró„¬Hˆùv_4¾| xÓøâѾ¢Z8 ±/]%°4Ï Œ2³TyÄŸˆAÜG¨å'¶I]=’yèöðK—äPŠJ 8õtÛ•UAó iÞÎWþ€ž¦é¨´0…g}@RR~a Bò¥`ÑéÝ,å*Äê²UiF2Cö,£õ'~uu´ø8S”*­Ž%xR‚ó™æçØ[7" †Ì¤9†ÓRæ—±/›o¦)Ž46(?! “ÃL°†ò£’X*;@JÅk'WhBÌ~f^Ж÷<f"¶6=£o’«dÄRE}U ÒÊâ )ÿª>emó±¥ÌÀÆ Cp–3äGDÁ©Ÿ8šöå.Rð„ŒýD3Aú‰)tI3Àžð ìó¿á™h]¦÷äcŠÏÄê¶ËÆÒ!MÜ¡iûR}·3.3ì>ßP‰?ï¨nwÓp48݉x÷Ý€Uæ&íy?ÍŠÁæÿÛ<×:eJƒ<«ib¹<Ì‚\›U‰ð0k¡ZÎKÄ;w†lB0ƒ/{ÈXº ³qbc°–?-b3ÛåþMøW¹Fzº{šRßìËÇÆÃQ;˜†Z)}éëa}'#äÏ©Ü#5»©:D0͇íʬ9LÆ‹±q÷4k9ï¨PÚ4XÔ]Aw!V²mAÐÕâäªÅËéå½lö•q¾‰uå¹6X«u·+íSwôÐS³vûÛ;íD+\õ¼•þRÌTgw¡•>žîvµÃ»þW9{|Ìœ=Ovסt“’C %{ϸÊýr>¿Ç÷—Gˆ¶v%­§æWœÑÅeÈÜôËÀLóSäΙ+™û¥óG5:応rÓÄ5ÿ2Šjà{‘vî/œ/Bq¤e‰í¯£…ÀIhËl1nê»YKèAÜäzù3|À AaŒ¯ f²SxQa^Á?b• ãiÏÈNiÍ­Ze‡‡YcÞÔ©D02Œ¯ù—Ãoo*ª"t`MÙhç “±!ﻜKuY8à¹>»²7{Ã÷!ïwµÆA|‡õqý~7Õ—ï/ íKäúÃ%p&Þ_ÞÞe’èˆÇ/Õ}‚“'Ëe¥ïžÉ‰Ý}ûù¿Ð´Û¶3à*‘¥¥—}ͦ1í¾€î,£S:Þ€e½S„ ?]à‡§¦t3ø®ÞèeÛ$[wåiPå=õM䊞).~j½0Ž<üÔŠ ïsÉ5g++7™8ã2 ÷¨áÖ–ž»Ï»™ÿÄw÷1y²ýñ©id¿û´=þko›¾DïJºü>·Åþ“?7˜8t_ÈÑÄÌnË_SÓÔá¨I$‹5 J˜CYü³7Ê¥)[J@œ.•€e…ŸŠÍyY<+zÝÅ ;ÿ.½ôÙendstream endobj 802 0 obj << /Type /Page /Contents 803 0 R /Resources 801 0 R /MediaBox [0 0 595.276 841.89] /Parent 805 0 R >> endobj 804 0 obj << /D [802 0 R /XYZ 72 786.281 null] >> endobj 218 0 obj << /D [802 0 R /XYZ 72 170.458 null] >> endobj 801 0 obj << /Font << /F21 372 0 R /F30 496 0 R /F8 384 0 R /F7 397 0 R /F34 561 0 R >> /ProcSet [ /PDF /Text ] >> endobj 808 0 obj << /Length 784 /Filter /FlateDecode >> stream xÚ­UK›0¾ó+¸ÕHÅñƒ‡éq«¶êªÒ¶Ýܶ+•²A%†iÄ¿ïŒmXòè­Êñ¼ç›G¸ÏàÇýTø©J¨PÜ/ó_€ûÉãN‚8\ÈïÖÞê£à~F³Dúë5ϨJ”¿Þ>)‚+Ábò>àdŸ·CÙ¡T’ܽÃoDÖûÒ2jP%[ûøÚz‰Œ HA†|@FÕh«ó¥Út9êÁóúÞû°ž³4IÄT)‰9þöžž™¿…Zî=Fe¦üÐŒò,ó^Äd»wí=zßf?¯2´ºG”FFã uI¬¨ä’aoJƒ”¹äUMp Iƒ[TZÑvì‹®j‡U?ŒuÙ¯¬ÁÂm–@déô·8íÊ J(RI€†/€‡0#£8v3¶:,ÿŸv@Z/’äöÓ¢Ýh Áf ë㸪Foh¬!i —¿ê >ì¬áUï:ì”,šÖ$ç°F@¶–†FkK@tÌÐîœf£]ßí\Èi.ŒÄ…i;LÿTÛÒ¹=UÓ€˜<ÝnJ¶ØÍ”Ñtž‚¯ã£YÍ«Y‰Øòd¹’k ZmŽ8‰x½æI‘0!œ¥nR„1{´qcA…ÌÌ^æúÆn˜ý<.PªôTþth–·‘Ãu–™ô“LÑ8’öª1°ÃãfÉï‹7Y„ sã!¥'fM.Üb)E£‡®Ú¬.S"¥,ç)\ÖIç*èn!á0§ç1ož±Ë¡¸ê/´7cÿ¹½HØê[•Îÿ1Ká_-ÈXendstream endobj 807 0 obj << /Type /Page /Contents 808 0 R /Resources 806 0 R /MediaBox [0 0 595.276 841.89] /Parent 805 0 R >> endobj 809 0 obj << /D [807 0 R /XYZ 72 786.281 null] >> endobj 806 0 obj << /Font << /F21 372 0 R /F8 384 0 R /F26 402 0 R /F30 496 0 R >> /ProcSet [ /PDF /Text ] >> endobj 812 0 obj << /Length 237 /Filter /FlateDecode >> stream xÚ¥‘AK1…ïùsL;f&ÉlÒ£¢bñRÜ[页T Ý-–ñß;Ûµ E‚ä2/ïññ&!ðzj†: r&xm‡7½}4ôíFϘ%éü‹Y]ÜŠ8!•܇ÞÍ|áa­á©ñXŠÀ‡Î£Ú­yg½3/f6â¼r0”ô“4;P¨”+J¯¯)•.TI*(ùÜç¶17Ì@52%h6@1pá€) 4ë¹½›¸*P°³Ó²;žÙ¶×Ñ>u›½c±Õd—j·ûnÈ>oWŽk{œËôéÍÔÜ7c!í#ž°þç^ú:)G”ôçoúßb¿endstream endobj 811 0 obj << /Type /Page /Contents 812 0 R /Resources 810 0 R /MediaBox [0 0 595.276 841.89] /Parent 805 0 R >> endobj 813 0 obj << /D [811 0 R /XYZ 72 786.281 null] >> endobj 222 0 obj << /D [811 0 R /XYZ 72 768.281 null] >> endobj 810 0 obj << /Font << /F22 378 0 R >> /ProcSet [ /PDF /Text ] >> endobj 816 0 obj << /Length 215 /Filter /FlateDecode >> stream xÚmOoÂ0 Åïþ>&‡dq]Z‡ãІ†vAË q(‡´–Q Mûös)ë8 \ì÷Ës^Lô––RøL×5Ü«:ºR§ØÝðÇÏaô±`L»Þ½‚i³0œ[G8šÉ{õiÉ|io¶­u,l&*Œ»27ósÕX枟랿4»c[Wíplzñõ°j«V?v™fð”†p—·G^„»h'X,nô 3ž£à·ÖÁSŒXC2 9ºöðóaÎ?ë\÷¶ðwÕEôtUÔ[ø „8Lendstream endobj 815 0 obj << /Type /Page /Contents 816 0 R /Resources 814 0 R /MediaBox [0 0 595.276 841.89] /Parent 805 0 R >> endobj 817 0 obj << /D [815 0 R /XYZ 72 786.281 null] >> endobj 814 0 obj << /Font << /F21 372 0 R >> /ProcSet [ /PDF /Text ] >> endobj 820 0 obj << /Length 2175 /Filter /FlateDecode >> stream xÚíZ[¯ÛÆ~ׯ ܇PíÑvï$œ‡NqãÖ§O¶QðP<‰TH*ÇçßwfgyÑ…Š{Ba6—»ÃÙ™o¿¹¬pøO‘ ¢Ø2‹ ÛÎx°‚Ùïf¯j.Yl ŒÝ"g†5ÊÐðŸƒè¢“]i˜‚|òËìýG,áÓïgœ%‰ IMÛY¯Ý½ofïfÿèÕqÐÃTrF‹YÒ"’ä@ ¾jY€{ kf¤óïåÝ쯓2“Âw0š X©`FwË÷᫯ç %tøv.§wY=_ˆ°€ñ®Åyþ¸kñ5kHìÇûŸò ÞÛî+…iöó\Ú0…é~žÏ?Þ}?ûö®7 ì²\0-ìáà É9 K¬B÷`Ùè˜N®Ý­ g5wi††þ<7`æ*ÇIò²¡aJ Ì÷5üÖOôeõ@χ=Ì–Y[T¥×™–K/r?_.­W÷PÕ´´§-’~Ë’–2œ®ÊN Å]÷ ¿$QºÚ!ÐE–nè=+êl*º}š½skx; –ã|OQDé°]ƒ|ÕÛ T¸or|[Ò[g˹ŒÃ6¯æNX„hSµuß´ט¢…þëÊ“Eœ•0Gê[t}×l‰z÷›~3’Î ·{'àë.tF+éÝ߀ûtv†TF(fÌgDDÎ(u–TýÚïS³èJ3M3Ý}ËA¼ô¢ë(fI” ‘B3¥-R]J a"p):óWLb(ŽÇÒÆáÄØ·ŸÒí©ž7ǘêH3m£`´õó}ÀHFe úìwE>[j&•<—· -ƒÞh)}ºe œLœPJð„qH-#]'{u27Ñ€¯à§p¹e;íš®) ]Õt3ug”Ó©’{CN‘Ùx*‰c²ˆÂeQnžhò~Nvb×á&îéaÕ">f. À¡ÉC³qfØ ´¤íŠ õŽ÷pMg’LÅ} ?6§ÚãaíöÞ/ÒÂN€p|ºÇ! B:pñ£}ÈSç2°Î—$¶$г rÉrî:´òš>pÃ=ÿ7]–:üPÄG—‚:,Cɰ’žD5-ܦEºªÓ-ìµa¡­ ¿iºM!°Äƒ¼\µÈ#®ˆ \SBTÜô¸ñÚÏu\%–Â"©;U>šo»/~EžU›–ºV˜ |Ófß3`IŸ8 ¹ðáe'Óæ¥^ ×çÖ͆&~oáMôÜô¾©Še—;bíSé!'^»®áê"QÉ©"„K.£øqZûÁ¾é›`Õ'Dêiì¨Äj¸wõÙÿÈÚ§Åj¢0ÈÍ©Ëx¤ýòHÕ© ÷²ø3U¼|÷²útjDÂtß{ùÈ;õ&aÊ(/ô ¸ïxRÊ º+eG×E%˜Ð?ƒ—•ÌèÎ ìÛ³æ\3=l¬Ž’æ–Ú#Vá¹N\A‡)éþzùâ |ÖHÊÏ’„[j|Ú8?Á×8x„®.Û& ê:²Lst"ÏŸ°z OmötÐÏåXp¶ðMÜp‰:‡& }}ˆôÂ+»Ú“ 4Ùt œ:°Ndt`ÅvWÕ-]¶ÅÁî©¡&Ò½U÷\§G&c×ûÙ˜D&уÉ`à$&^1yp =E` ÒŸÏáÁOEWŒÃ`à$^ä·¸ás¦CN¬ñ'¢3ˆX04Н‘ÁÀID¼Èyf0pžÁ@´\cu‰(†3#¿¤¸ç¦8•0cÅÅCó"#7¹?‘ýÎO¸îGÐr.}Zæé~s>ÍɘY~ŵzdà$.^qé\eû²h›ÛýýõÝ»÷_eÛ¯>žs^DÌjõ…³Ï=n™õųñ"ãÔ 'S¤›¢ñDM}Âuý½Þãõîô¸DbX$Íõâ12p Nñpn:‡oéñ]]íwx Æëé9bÍ"kÿ_øú?/Œ1¿Ø*t"#¾öíÁ¦» \¼b}Å ÁÈÀI¿½ˆ»‘è‰éîÞHÌìö->ø£èM`q|…<Ó4¾â4¢AºØ t"çh:¤ü º=#2aItÅudà$^ÄåÒæ€°îwdê:/Vëö–³hЬÿG]1ƒ“@x‚=@ᢙynü….ˆÅÍdá1ãF_1&ƒ“˜x‘®Ð²t·ËË%:þ6m×øôÈÜø°i^q/$¶$b<1_ÚÅgžZl™P°ðç²Ú‹îëëô²íÉ=:¡È0E× Á`ß^! /ÿ]„3ýˆôMËÕ&¿M¦‚Øj&ÅW¹Á¾)(¼Ä v˜æ!fËÓÄÆoÔ&Œ¼æu°o /q!«!&7aY ‘»Ø´dêjÛ5üw‡gþ¿|ÿ2RÆÌendstream endobj 819 0 obj << /Type /Page /Contents 820 0 R /Resources 818 0 R /MediaBox [0 0 595.276 841.89] /Parent 805 0 R >> endobj 821 0 obj << /D [819 0 R /XYZ 72 786.281 null] >> endobj 226 0 obj << /D [819 0 R /XYZ 72 768.281 null] >> endobj 230 0 obj << /D [819 0 R /XYZ 72 534.61 null] >> endobj 234 0 obj << /D [819 0 R /XYZ 72 469.858 null] >> endobj 818 0 obj << /Font << /F22 378 0 R /F8 384 0 R /F27 490 0 R /F28 493 0 R /F34 561 0 R /F30 496 0 R /F26 402 0 R >> /ProcSet [ /PDF /Text ] >> endobj 825 0 obj << /Length 2101 /Filter /FlateDecode >> stream xÚíZmÛ6þî_!ì}¨|]±¢HQdýpí¶A l“\ö¾ä…ÖÖÚjõâHr÷ößw†¤,z-9¹à¨@dM‘Cò™g†Ã¡(ê…ðzIä%RHRoU.BoµÏÔ¶Ð8í?Ü.¾û9¢ž"J0ïöÞtWD éÝ®ßúL,*”Jü·é®ËšeÀ$ó¯¿7¿/¡Õ\RÿõªÉwVrÿÅ®ËW­xq· ÷ÏV¶ñå’E~ºÂ¿,¡%ÝdË÷·¿,~º=`Ôb"%C„o߇Þ4ùe¦¤÷åP¥¼rÁðÆö¹X¼^¼:Œ3´a/MFH845ȉ)þÛ¡¦—¢D³ñÑ¡0 29éýÿ5LN†DÅÊk2ïþ¢i= ò€ ÓâAK¨<Ø…žÄBÛO ¯AþcÄQìwÛÌ.²´í.L¹Ì›¦nÆ,ÀÂÄ's ÿÈÿ…ƒ¾I Œ2`´üÍêe~ntå»0á?£€á@tÆ 'I°". äሇ»–Xb¾5?/‘v9IKΣÓ2œ¤ÅŠ -wYZ’t·Ëª5*þ2í¶ø‹´\-uHÒ2E å„K6?jŒt`›¯åBF∟µœ l묃}f4œ ‘bûlUwN©Þ‹ ê êÑ"¾¶ª£ç¦Õ¦È®ÔÔú’Î8´;'©°"– R=híiD /ƒ©u+’žÌ˜’à$%Vä|Hk/K…Tš ˆjS¬ÄŠˆOù¥ó Ï‹f_c†€“ Ydè>ßíKÏšz¿COÑ=VŒ(6ãÅx¢;…¼7„̤—Aå‹´ÍšË1MeDT2ãüÃ8­©•Ñ«U3‰HHgœS8§Õ´2Îñ±::ý–ê.( c9cÝ€Óº[›cŽê‡$T3NA€ÓzZ™~óU”)BùŒõ<à›VÓˆ –ùCIB%w¾;çEEEgó‡^ÄÉ8¤àk壬vÎ}3öb8‰ÄŒSà$ VI0ÚëL7ߌ­<®bÂÂçÀɵע¤¨È®.Ê|µÍж®‚²n²â‘d»öbb]r8ì«ñë PšÂÕósÜH© L1Lê(è}Up1¡…ܲæmXW|÷¼¤Â»®% #"%^0*GïYh“8”`ƈC–Ã]K/Ó‹ =?ƒç/)øÅ{úׄ~¿ 8çþM¾ZFÒ·¬ÝhÖŒL^-#åw¦Ö ô½ÏšºÔOÝišÍJXœx¬ì‘RZbÉïØŸÅ“wL‘’°«8Ù?ºcê›Qåk )‰ÈS¬4T}Ïë”g+sv§á¬7éj Io`vÍÖÖ"N¹ÿ¼BêJCªýº4GCé‘8½ ‚Ä6cøWUC}Ð ˜þ {×eYWůÌtå¾Õã¯ÍS Úæ06ìm ͱŸã•šJ`LË7PLÁ/¼1Jà ë^¥¾ëaØ¡õd GuÊÝ£qNÁOÍø=Ì€oŠ+aÞg=ɾʻöê?¿>¿}ýö›UùÍûÍ¥ tŽŸþ]>jŠ =ûm%ܨ fÉÓ"o­‹¦6ÖâšóMÀÈ*'•sþ&¢Ç7ýI„–èo#Æ/P§Þàœ9¦g“ì‘GäìÛ{Ý>öáñ˱tžŒ¾¶=|™= î/yendstream endobj 824 0 obj << /Type /Page /Contents 825 0 R /Resources 823 0 R /MediaBox [0 0 595.276 841.89] /Parent 805 0 R >> endobj 822 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./optics/michelson-morely.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 828 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 226 152] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 829 0 R >>>> /Length 830 0 R /Filter /FlateDecode >> stream xœ½RAn! ¼ó ¿ÀÅÆó‚J½5û„U“VJiý~½ìB¢&R.U…V+{ÆÌp†ˆqYÛ>…sxÚ ¾ÁÁ¿À‚F©r®`1°%” Ÿoa¾½òåaåˆÔ0+G,fpH¦ŠLp ”´`,·@ï9Þ°ÜiÚÿŸÔââQFJ@’+jí·fÃ$¾m>=®™s,(ºšXÅÇnHõ±3aÑäŠÌ)ûáŠDYE[›DÚý—PþˆìÝçj“Š¥‚‰›¥©²ä8"ÎV–wÎ{8a ÄnŸå±Ÿµª ]*6•ÁðKunó¬ïu÷¬(R%PÏ£Öz•sG–ˆºì–Úi=‹V´E{¡êÞ£ºzXk¸0…W_?½¼©”endstream endobj 828 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 829 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 830 0 obj 292 endobj 826 0 obj << /D [824 0 R /XYZ 72 786.281 null] >> endobj 827 0 obj << /D [824 0 R /XYZ 229.5 345.624 null] >> endobj 238 0 obj << /D [824 0 R /XYZ 72 325.73 null] >> endobj 823 0 obj << /Font << /F21 372 0 R /F30 496 0 R /F8 384 0 R /F34 561 0 R >> /XObject << /Im16 822 0 R >> /ProcSet [ /PDF /Text ] >> endobj 834 0 obj << /Length 1551 /Filter /FlateDecode >> stream xÚí[[oÛ6}÷¯²‹¾ò~—,m±bº5OëŠÀq;…/©í Ù~ýH‰’è˜T2cÀø`eñX>ß!yt(ɸ@ö’R “ÅS»÷ýûÖÒ6—AûùåàÍ;‚ ZÐâò¶þ¸%TqyóexxTRņoGxø4^ÜÏG%šÝI(’C*G_/? Þ^¶ßP€ƒRÔÿûàËWTÜX¨VÅ£ÝF€µ.†ˆý&îßÏŸ¿µÇéÚܧb¥4ˆ’ÈŠ}…AÀlëÚAëÍß»O ¢¤¶p¹G¬øfÿ+b†eh®‹µ)nwHÕ­íAú¿®”´‚—’+ XµzST(ËXTz `H Äi>oÌzTr‡gõ˯nÏŸˆ£ÉÙ'÷‚N‘}Áî?&?“@Å«åPÿ…êrÔèÒ,;zmoQ×%¸··<ÄõÖumg¦Þ8y4›íI½}mÆ‹zks?¿Ûnm·Fº‹p`Œd,HG0)ˆ‡8A®7W;£÷üóùêÉ Û™¹›Î¶gdjäbLÑŒ¥è&¥ðF Ø£šÜàÇÊõK5§q=§cª œ°ŒUé&UñJ;+`|o–7®ðOãí̽zeNýÔÙ\¹3•¯Çé„&Àíàhu‡uœP}×@¢V·\­·3ïu‹»õzó7!&3V¡#˜TÁCœ u¡WËiý±Úé†ñx9›3ÆSC–k¯¡÷…•€`R  Հ͎•ó-÷]Ò”0L$:ca:‚Ia<¤ÇåjaN»9ã\®pÒgtT‚”ùiúœÊx† ÷&˜õ93n#]Úæ°]ôðŒ³K@0)‚‡ÛhsˆÒg–€`R  Õx–æªÙ s4渦 )ÏW˜€`J˜ò’Í™}›3½6Ç-K׃ûN@¸7É4—|îUKW.0 œ? ˜ÄCüz͸tåÒÇ—€`R i¤€ÉŽ•³µF8§hŠ¿R Q ˜e,PË/©Oè±½NJQ˸é³<¢7×j³”¥#˜ÔÅC^f¹+LßÚžc „Ðã¹àPëCˆèÏòâÚþÆlÍd½Ls (ã<LéÐ@œ¶ÔgKû _|—zKJwL1 Ld¬FG0©†‡´jì/íM|iŸšÊÌ~;U_ &UñþÌkÚ¥½SΗ½îÏFÔÑäí8n?'zCMy)ðöyCÀqÆ*´ü’"ÔˆfJ›¤Á¥Æ)ÑÀyÆ)% ˜ÔÀCZö×òæßݘaX×$cU:‚IU<ä%_3Ï|­?¼1$APz¼`yàŒ¦Z€½¡¥¾¶1Ûg7YÍWþY‚Õí³Æj‰¿ßwTq8ã LŠã!᨞»…)ºžýlE©ÌîdmnNzF1• $—dzó¡%(HÝ{õ¥£ØŽÙ¹=ÕoÆóù³Q»ºþf[}$Ý®¦•ÙÖØ‰›rŠæ¬PG0©‡8…nï¦;§¬÷ëÕýɱÚ•³Åµüö*ǘ¼)¡}&ê4V&µ¬HÆá, ˜.ÔcšgF¢…b÷Œ^Æa# ˜.ÔcÂ;ǧáµ+­i@(ã'ü‚éÚ=¦¹º+”hˆe|‘4 ˜,´Á´‚è¯ZI@*ãÄLWí1Mäˆj=“Œ/„Ó…zŒ+4œˆà€Åñ²ÆÁÝÀÔ HœÖvÝÖ<8ÜÆ%Ö&ÖGÌ²ÊøºmÇ/)Ap Ô¥Wùþny”ÑÇ„€`zæyLçæìd1žÌÊ¿ÍÌUæ~s’šˆ‚â$ö½-˜ë\±6ŒPMÝ„aÀëóÅw[…@Õ p»’¬;nµãÍ/ [ÞÅÊ Tt•„%Á qüé~¬Hꠈ삢ê~«Ð@<ÂÉòÎ÷¶ãadƒ^ùiT2ƆÇ“‘Ùm,ÿ0nÑà6ë ãwËÑÃmÕ²¶-·f½ZTï"·¾©`€)+:j{ô‰&ÄZަ2!<@Xôwí¯ÂÆÓj5endstream endobj 833 0 obj << /Type /Page /Contents 834 0 R /Resources 832 0 R /MediaBox [0 0 595.276 841.89] /Parent 837 0 R >> endobj 831 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./optics/mach-zehnder.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 838 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 283 174] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 839 0 R >>>> /Length 840 0 R /Filter /FlateDecode >> stream xœ½TKnÛ@ ÝÏ)x–ŸùpNP »ÆG0â´€µH»èõCޤ±RÈ&C˜'¾÷ø¿!ų½ÏKzMßž2¼üM /þû$£1J+„j ¦˜+üyN—TàŸÇýø ‹a-P ›u†e"R:ŠS¯‰µ4¤öÙY×;G¬Ë—ºE¯87¬ÌÒ±æpÔlHX•‚ÜjÞjVv@‡|uRsu,}¤>ú9b¿<7j˜½‚ŽFÚ\J²#ÖA¡d“, »zI¾=´E);¶:´/Ÿ¤Åf‰ø¢d‹) ]nˆrGZå¸blœëÊÎÚÏ/³ó~ge$ª$^z8QF帀ZDJ‰‘rã2ú©ìsìó|N¢Fƒ±GLMá½çy|#'ÕX‡ƒ[nˆª¢Œü[ì61VlXL‚s;{¦‘ÊŽ°_a˜ ›Ëÿ®çmäñ÷òô=Yó„ûhÆáNÆ)zÇâ¢VçÝZ&²'0¢¶¸jÌnmÇóáëÙéNó° —ÉÜfûÎiäiÎÿ¦´—PúéÏÇ `endstream endobj 838 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 839 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 840 0 obj 420 endobj 835 0 obj << /D [833 0 R /XYZ 72 786.281 null] >> endobj 836 0 obj << /D [833 0 R /XYZ 236.723 67.233 null] >> endobj 242 0 obj << /D [833 0 R /XYZ 72 42.3 null] >> endobj 832 0 obj << /Font << /F21 372 0 R /F30 496 0 R /F8 384 0 R >> /XObject << /Im17 831 0 R >> /ProcSet [ /PDF /Text ] >> endobj 843 0 obj << /Length 2542 /Filter /FlateDecode >> stream xÚí[Ýoܸ÷_±HNÛîòø¡Ï~h.½ÃÚ^Z»OIpµò®RYÚJÚsüßw†¤$j—”/FQ…Ä¢Èápæ7JZ¶¢ð­"¾Šâ𘭲‡+ºÚCïWLnaxkŒ¿½½úö{ÎV IB±º½WÓ‡ñêv÷ÁñzËÂ$‰¼ïé±Ë›õVÄÂ{÷Gu}£ÞÓšy7YS;ìô½Ÿ]‘µŠàç»õ6ô½Ïy¦߯÷Ò ÿþk #é>_ºýéêÏ·ƒŒR„€Ä±@ ÿ}õá]í@“Ÿ®(I¼z„6%,IVW>å k ïË«›«¿|Æ1œ%Á Ä‡¡1QÍÐôô[I4œð1,àþ>=Œð½#€ #‚œëÈhB( W¯‹µzšÙÏáª7龈·> ¼+4óîs4U³©W?`3Ç~êÛïã‘ÛVDjI’€1Éíö+ÓÝÍM[Tk{Àå>oê`§Pc@ÚªYiUw¸5‡ë{uíî!]oƒÐû =us¾Â0ÿ|¡¬®>RæÃøþ„j¦]QWjqæà˜øÞ-¶•ÊbXóÄëP}€zËI‚@*[ÀDŸú^{,aBÑ©;` ×Q^ìÇæ‘’*}˜N’a‚ôiµS#ÊVÃŒØËä”]¯‘^/•'}ׯ¥B@X­5ZQÀ»aBËWaü(—©Û¢Ó p­¢É39ÛuÕNT¥ê£•€›ð#SC´gµWÝšx,sWTý¬®õìÁ¶~¬¬‘½ò<Õ©Ù#x Ê_€¦¿/‰ã9Óúíî(ÿª Ry•ir´,^›<ÕÌÒ®gš[<¡>¡{õ(®}û‘ôÑðl%:,4eÌÑÜU/š‡JA›á}7¢iÒ}#û[ämPŸ‡Âš‘Ücü²´RSóáÍ©l„2èµ¥¿@²NK û'¹„´KV+¯ÊePÓž·Ô,=õñ†kE ZÒÈÙ HÙ/H5•ÒÐ8–iÕG&Uy‡{¡OÍ’Ê["Àt˜¨”‡Æ¨<°P´i{jL_ªVzofÈn÷…1clE™iÖ°À¯(X^J6{5(± À=«\uXÂO³›&EŠ ”:qBšNŸ] N˜>&ñ„Ù=ü]:ÑW¨7t\(b,oÕb˜9Iâ—I)z%±]W˜(†Ä‹B êí‹_‡´"”ºp9¦°8gâP|ÊC%žL6#ó°6K£ÔRÉvßÞŸ*5ýè‹r\õN¥X•.Á²X±•â6¨éQ£näÕRn p÷¨a×¶—öV2Ø}d¯j”µ;lóTÙý¢{(š¦ß=áö€£’i§¹–ã&$bâ­(-"=].¯»4(°Å Óeèj‡¹Ü[²ÞmUvld´qï´Ol¢ÞÕej·Êâ0Gi=_ÔeÜö”û©^•—:u3h±1Å€Y®$k´J,6j4(™‰·’ u©¬3LØEkñ}tU"8níÒ´œ{ŽºÖ}„Ñ ýWN«}>ÌÇKmÂ>³r#\ól¦}cܶšA‡Ê>â*µ"yè·ø¦‘Ø‹æÕ”öZpž¬fËŸN¯bb_aÑ^@qtðZrôò9QPÏ9F­Ÿ¦`»,îš´y²Á!âKÆcÐ ˆ&±»å‰ ¢%k«9/á>ñþÿ’à¢ÿ†xÑ×X 1k5Mbøq›k“œŽºC×°u€úíI5wù}z*íIŽrDþ‚qtâ¢IäéH«JN”­×ÿüÛ·7¾É¾ùdQÞO Y°<åMŸ—›iü˜’0ˆælÓ“˜¹,S¤eÑjGMuÆM[,¨±y‡ª,æ &KÆcЉ‡&A<¤šRákuù¡©OG|Øÿ™ € &‘H^‹È—ÚÇH4oEaxëP(ÿ´E„$^òéÆЩ¶&‘OàÆ8ÔnùìA·Ì®ßã…n¤ƒºœ”$ù«“¾Ô\Ì' -z››ŽI¥=–ê‰ÅFTÄ_ð®oèA“ÈLÚNöíÍÛú zê!/ö‡îš’Èá¬"á$‰ƒåaè¢'Q@Ç 2š‰ö?¨‹ b¶qí2"æ„òpÁ˜Œ:1Ñ$ý6KÒã1¯v¨øû´;àU#³Ñaƒ¬™÷8“ØDÄ ã×ÄöÂÄ&BJ}\Ñ“ØÛ› Nìø¨oðQfmËlÂOÈWTôÿ{ùœ( ù<[jùK5‰è¿ÊNôà´Ú—ùµ¸üUÄ„% .L `h 2Mö¹Õez£î‚…G„ ¾`XF°h’™ô†°l&Áé ÀËæ2 Äk†{©åh@›­Zzk†ËÓ¶{.ÁñÄ'"Xp†3tГQ¿,ÇñX‘,¸V1t¢¡IL4Ϊ8fK 'œ%8ñE´`XF°h’ù—_æ¸|6Çñ$Žâ×g~/ `vsÒînû›òœHH.¸z1t"¡IÌêe>Ñ1áÌt<&!]pÙbèÄC“Lð Ù™Ù†4˜‘/2ÀñúËÈ“ "‘Ð †hÐ ‘&™Éz#gÐ<“øhHÂØ_0:£€Nt4Éóèä_‰Kñàµô}¡ñXì“(œ­szÛÆ ?Þí¬ƒ%bºàZÆЩº&Qo(»IÂ{§U7ÄUÖ±“Ø Å(  M¢¡ Õy¡ÛÚó[gÜŒÄñ‚ßë:!Ñ$ó•n»B…T (v]¨ø ƒ`¯Ùì¥ÙŒ'$‰fk™žÄö1ÆÖ²º¬Oúe~·yù¦Æb;†?3ZpcèG“˜]bÙFï÷×ß(2Û½iòÝ›¹=™Æ„þ«¿ÐPIDh2û FS> [Ê_Ê/3Êòü9ýµ¤ê­÷ê›ïƒõ%c&ÂåÂ3Êç‚GSȯ䊽ýS ÛO*¢h¹Šò](ΘOhô*ôñ»±hú„³?¨åsj©I†¯6ÖÏ= _ôwƒƒ|N55‰z?¼±~²AÄ‚¿ÐÒ9õ“æ3…É3Á_¦á ¸±ž2ˆõWÜÃ/›Ýÿg{Žendstream endobj 842 0 obj << /Type /Page /Contents 843 0 R /Resources 841 0 R /MediaBox [0 0 595.276 841.89] /Parent 837 0 R >> endobj 844 0 obj << /D [842 0 R /XYZ 72 786.281 null] >> endobj 841 0 obj << /Font << /F21 372 0 R /F34 561 0 R /F8 384 0 R /F30 496 0 R >> /ProcSet [ /PDF /Text ] >> endobj 848 0 obj << /Length 2191 /Filter /FlateDecode >> stream xÚíZmoܸþî_¡¦(NÛZ<¾Šd|¸6ñ5‡¦çkÜO¹ wµ^ÚÕž¤Ïÿ¾3$µÒÚÒæb…P†!Šgžyá+Qøc‘æ‘6)á†EËíî ÷û FNã¹¹øöгÈ›Šèfí§[bRݬÞǯ[$ÂÈøõ‚Å¿fÛ}¹HXœ7ÐÉÕ±°‹7?\¼¾9®à(bŒ@þ¿\¼ÿ@£ÈñÃ%šèÚ”0k£í…¤VRá½¼xwñÓ‘O?†³œ*”HªQ#ßüç@±Ž>áÚéòÙ4JÀ Ÿˆ}„'fĈd:b”Xe£:Ö'"úÑ#“Ϩ…#O´2D0sD_ÐÈ€Ä)¢Ï˜$”èhЫ¼½Yj"Ò߬¦ùo¨i¾DÍ£|ÓZzTògªØ˜’"%’²ùié©“Àl¾FàŠHÉG­ Ú4êHÐ ¿_$Š«¸Îw«¼öív“ûƺ¸;Ôù˜ÀšÒˆƒÐ 8 B A¼öàT<*ˆârÆ ÷NÇ^ A×E™¿|Ñdw»lIò}ób"SØR!ÇöP•q" d,…$.¢ÄZµB’è?µ’ G3l;°z¾®ãÛ7[Ȇ¯*€& P`˱̌nwÌ¢m%J¥„úPu˜˜~Ëëh:„䪀ýÎ9|"„€mPüy‘H)ãw€ eKq±[p·Ð“ãÆX¯±UW[÷ÖB=BQHC¨ŽÒ<™ƒORÌ-Ä =µDK9¹Á+f‰Ðƒ-FžlðݰßàAbp3òXRF-¡,¼ž¢hÎ.ø˜®ú€Éd|µ0&Înë!AÄ®1eãªõãÍ>íJvb°Dh¿,O‰¥¶ãÈ­ã(€#ð«’k´ X£õcËlÁuü ÆŠG|wÑàSÅ8)kPŠb™•eý½‡&ph‘Á=έ|Ç>«qVYæ¥g²-°£®êƬ³e±»óíjçÝé²]ÕnŽ^ãÇ3_…¶”^ `~"°-¿Ùuòä#x4> ÊèX7› YÜïüë&w!­ûE{ ^Á4ÚÀ£À;»:ì«:ï…¬;þ[VB³ «9ëµ·¸‚5à+ŽÀ@¯7Áο€/y=ƒuUNmv‹ˆ–E“µEÄwÖ`ê‰ö¾¨qx‰z!ŸÌ·Ýö޼tj,ÛºJª=´~l‹ÞnâÂXf-Š$1šùõoÎàh¤½ ~!¨•s »:Ûú1pD7ñ J Œ’°ô+"}£Ù8ÅkBÊt8NÏF =Ûøà§®•ù,ÂÓ>@mî9.á×yþnŸ-sÔªÛÿN²NŠ'‘4Wà¾Ja¨aj€,†Bzk¯Â‚MÁùUY‰ÃÇ¥˜T7±Û4`|ãâø.As‹#{1UYˆi7Ý9 6î\6ê‘ðž‚ ÊA€A –ö9—ÎÂïÌ2µxèY¤ª½fRS§Ž‚×<øÖ¦_°ŸœùGéÒ84ÐKejâ5`ì{¯ßGY7Ïù‡c|—¬;õ›!3ëqê'"¹ß~]8ší10Ýr¿[$F±ø»²©Æ3gH’uðvLüKÇbå‹4ÄÎ7[—Ý_8š_Q™m§V™‡ò § !zê‚ N@j;ïTo«ÕÁÅ×94J>õA2R­á˜Rý›ÊTØ¡9Ÿï‘YXN¬Qç*øŽdpŒÉüã ŒäÚ×رôU…k£Ë h¯] B~wÉ=¯Èæ¥j\ 3Ô¼^:?ð†GT3ßÊР$æ¬mÉÀ¶Åv‰ðôˆºh–u±ÝÕ-FF3f2#¨JgŒI/à$&Äß Û!0éc8HK˜š1 Gù&QðŸsŒjÕLãÛeq[gõÃÂfÙŒñèœ$Œ»åÉ DËm’缄kÂÿz÷\«±”p}öú©#ø1l7¾g×áêClm²Ý*l_«|Êñ$GlÆ·T'q $þÜ«J»¢m^þëonÞ½ÿf¹ýæÃˆòpX&B©ÿŸýŸ\ÜwØ9c›Žd˜{Á2E'Ôü¤¨*³¦»M¾Í¡F1—æD =c3—pE‰:û3G xë±:ðþ9ba‰Jg\ œT; Þƒ8 nùwìA·\¾¼Æ½t:å¤Ü”~-žm.¦I*Ïɘ›âUÛˆQhJR3ãm~ à¤ÖµÎ«ÓÌ9z'òfÑ|Æ™€St$r‚‚ ]áOá®a—“ It:ãN‚Hº=•dû}¾[¡â×Y»Ág@æÒc⼇ÅäþLc €¡zÞ{íŒkC–rbäÙ ›Žd,½¸Ï›ö…oãGÕØÖË#ÆÌ„^ÀI ‚àý÷iP¿uçòš™ÅŒ €“(’! ’¦»/KmÜ«ùŒqéœÄ%œIm—ËA¤¸›„ï\vcøk»øZ¤=×tԪΖ+Éð¶æx9ããr}øk∅¬&ÔθXéå› P¸;Ææ$”GE}¤¿I ›ó‡‹½|Sú ¯ÿ£dvÌq_”Ñ´"LëQv”oò :Oq&õȸœ–:ìÎd²TÎÌ×+¼gV( &¨³J -ÒòìóEšädÆŸYwÒMiïÆUIþ…µ™&£Ø?[Ÿõ?ä´4nendstream endobj 847 0 obj << /Type /Page /Contents 848 0 R /Resources 846 0 R /MediaBox [0 0 595.276 841.89] /Parent 837 0 R /Annots [ 851 0 R ] >> endobj 845 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./optics/sagnac.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 852 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 245 143] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 853 0 R >>>> /Length 854 0 R /Filter /FlateDecode >> stream xœ½SInÃ0 ¼ëz+.©è­É‚&-àÒúýR¶eI€^‚Â0 ‡Cr<ºÆS»æçñ®áe/ñürü _ýþ Ó×ý.˜fÀŠ1c…Zk¼ÄlPò‚ ᲂ•X#l¤@ªX';–t#EŒ ¥>”ê•+k«u[ù˜Õµ„¨Ùv.V`²‰Ï 1²‹XNÀɤį÷p )îþds6gd¶fXl¸zÍp§ò èô­¾ûÙ‰âþ’û› `û/ÈbÜKq¤LòÅ> endobj 853 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 854 0 obj 357 endobj 851 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[1 0 0] /Rect [396.295 453.116 413.647 465.072] /Subtype /Link /A << /S /GoTo /D (figure.D.4) >> >> endobj 849 0 obj << /D [847 0 R /XYZ 72 786.281 null] >> endobj 850 0 obj << /D [847 0 R /XYZ 252.788 568.014 null] >> endobj 246 0 obj << /D [847 0 R /XYZ 72 547.931 null] >> endobj 846 0 obj << /Font << /F21 372 0 R /F30 496 0 R /F8 384 0 R /F34 561 0 R /F26 402 0 R >> /XObject << /Im18 845 0 R >> /ProcSet [ /PDF /Text ] >> endobj 860 0 obj << /Length 2241 /Filter /FlateDecode >> stream xÚíZKsÛF¾ëW ¼°Ö˜`ÞWùEqvS[%RNIÊ‘à#¢ ,ëßo÷<€! 0ŽœÚå!å²1˜ntO?盡i’Úh–h£34™>\äÉf¿» žš9‹è—·_½c4)H¡xr;wŸÄ(“ÜÎ~IE>ɨ* ~³,·»ª™dÜðôê{^5}žÐôfÚ¬¶;œéÛÝjÚ:†î&™éïÕÔ¯'œ¥åÿ½Ÿ¥\T“ßn¿¿øö¶[£]‚$Æp\ᇋ_~Ë“XòýENxa’'ç„Eòp!rk•þ}}qsñc'§§áWCÎÓÖ~Ë“ÔYÝð§þ‹<É8¸N-,ùþÚ…%”ªš“BIS%ó½E9j'ä´ºLsËžii§¦‹Ï+V6bŠˆ\%£ö°jšºy_‘§I&™LߺǼ%•ýÓ=®ÍeN_çð CQšpõÙ^1…WÌŸñJ·¾Q§8ôÉ]U>r»­63´úºÜ-ñ‰>yí¼á¼†žCŸŒù…£tz~ŽqÜ™v¾qc’ÁNγ`äþáÂÓV;7Ø-}Oëuýظq=? b¼‡bG†Ÿ±súŽ:dzÄi½~¶Ù¼xû 8¥Áñ«¦š½:•Å9'’‰¿³ø…R#6 ,QCήífˆ/åz}µõn•­Ÿ­Ø* 6T†•ŸqŽ8ê!Ï‚š¯{ÛÕwMý¸ÅL²]çD }ƶ÷ <²Býæ'Ôñë!CeAÔçhþA“hã†z4t]¶U3h©0D³âŒ-í8n©çAK«z8¢\­ÏØÌn}ãV:–jîa¨÷Oƒ†3E eg\³ýÇM÷<¶aµƒfR8»È3FÑÇÍô6Cçhi)ôC„h£Nð,èg½Eº«ÅPñIÍHNÏD -¾Àã@Ѻzûj^Þ5ÏÙ¶jêÝûílIªmûj¤,¥4D…ïßw€Í%Ë!"¥Šð‚‹"En»Cò ‘Ì0Ë ­Ïz©vâ«?Ð"¹ªÁCÉÑ‹ï©$c”!.·0T0"8ú&×Ĉþ^Êô×R'° kÞAÖO(äÄ$ã\¤W0&âÍ$B¤ï&†§å’Ÿ³ë 3)úy:-'L§¶Ú!åÙM¯6îi¹k”¼™Á?Bð«FŽ>:YÙ¿,vGþÖÎïðƒ-9 ˆ€&)˜I"ÓŽìçœYh\7#cùÇb,‡¼ä|ðB¬£}™˜,3.ˆt©6(Í~›ƒ47òÜÂðB"¦÷/ƒª„ [Œs8"èDHÕÈ+Â0Úèmà61·$ò-·löö‘¥îHu ‘Q ¶×ýr#ð"…eÝ]ã˯-1ØÐöµ½¿,·Fv=DìÝß²sø‰z”˜4/ ¨$’u\˜žç¤ÂCA¨õòæÔÖŸ\|¢2Î8Z‰ÎÒ_1=ɘÉST%^ÚÀ+MÛíÚ¨½rFz»¬±ôž6ÈW¤eëøJ÷Š_CÕ"Ç'-€©ô¦~¨öDc™:ñ9Š_|³XÝ­#”ÿȶ†'ìµ›Øb3Yµ^1^8¡æhÚ^,bŒ³jæÈp†wýa:ˆ=ÊÛ^ õ.Ýæ^B«Éx.ÓuídÜã«Jí"ïmËÁ æâ|l®›yZ+¢tœÖ}›ÊQËu½Y¸aXòÌP|¹¨7åÚKYV7ú¸ ë}òêÁ(§`ÞÔ^¬ólíú)²Á1€Sš‚˜©×ë;°\xì Ë¿j]O¯A”¶€IÇëîêC}#9,uê;|½Ý­lZœ}s˜û “J’26˜úž%‹x†~* d\̲Z-–ø»ÆîÍq±)Â(;©1ð©ŒwAð…=:V{»¬œÑN?¸78aîž]ÀŸ.ol‘ákTd¯ý&¸kÝà =‡90³y…$çOüÎ:û¼?–~ÜÕ{ß‹´Kwü̯‹ŒLχ!Kˆžg0žìŠi±®b@ äIeçH[Œ“ÚSøS½+mÂÁF¦œzèAÚ(!Ìa B»ÜĦ²†ôÍÁÒ¦åÆ ºïPHSí±Um°¹ µ\w¸¤D¬òì¦kægnQŠÂšf§]5 Ë++—ü 5a×>z; Ä Ç-û}Õ"‹.ƒ6×òdt#ž¡è²Ä‹£ÐØÉ);©È³)Šk ‹c]]mÍëŒ  Ð¡Hüñ·âçÏ6žU¨¹ÊccØœhÆ=6±÷ôG$+ˆÐ̳DÝÏy?T™‡œQ}w  sq4Ì ·lcÑèy£áÉöÚr jHTäYŽEŽ(aRïéòÑÀ.Fñ'd(Œ{ÌMˆ‹Ýr£¸4B\$ÄÅåûà@XaÅ‹ÂGá Bƒ>…3@.»EoI ‹«»ƒ™1ÒH2ëÇ#G3–ÍÑԟ̆Á&ƒ³  šJ´<™žÀâNf—ÇÆWÑþXv‰Î¹â¥Å ŸüNu¼xˆsÀÐxï×q¼Xû¸vÇ(=rŒâR|Yc.6Ь9BÖlYG²Æ‘õ)…‡‚²þÇuŸ ­¹V‡›Nm>–Ö#m|E¤mŸî±[bp7±ä‡"×n{VÍKì’ë0 ›£‡#Z;ˆ³Bzî°’E·¯U-Ô±ÔÜf âNÿ±ÚÃ2‡UM;„²CBnË^ÁÞþÛÕÚŸì+ßGüÿðÒãÕ`Ù4|[åh]„rqØÿØ*fOçZ|Ï2Ôá=õ3Qí u¨=Ð7€i#¤Û¡ïñ“Î C®±4wNYM'Ngjµí±{à@¬Ô¸6Oß×;†I¢D¤±s‹U Fßoª6äÓ—y{›&ƒ}µ»ªˆ‰ÿÄnPyendstream endobj 859 0 obj << /Type /Page /Contents 860 0 R /Resources 858 0 R /MediaBox [0 0 595.276 841.89] /Parent 837 0 R >> endobj 856 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./optics/fabry-perot_pdh.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 863 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 322 32] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 864 0 R >>>> /Length 865 0 R /Filter /FlateDecode >> stream xœ­“=nÃ0 …wž‚'`IJ”äèÖx,:õÇ) i‡^¿ô,wh¼‚aø½§OE_‘IDZ¼_/p…‡cÄá @ðÑŸO˜ÝãJ6’NPãD¬P²éë =HŒJ²ºY,77[¤X]å©4WK)¤¶¸A²P–6ÐHe„{,c1¦PPK ˜ðë>€ñ°“é×—Ž$Xµ$úba¦ì%#1å⵸¬ç®Êyù•j,µŽT¶©ªlY·R½Ÿhuót±›+©ÁÀnXôdPf2›¶ªpšfEKÓšãõß‹všn醕åJ"ÎVíÆr%P§vv/Ò©öUíÄÿë•ñÅ€·©*;ùž|üc'¨+endstream endobj 863 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 864 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 865 0 obj 278 endobj 857 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./optics/BSBox.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 866 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 32 32] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 867 0 R >>>> /Length 868 0 R /Filter /FlateDecode >> stream xœ+T0Ð3T0A(œËUÈ¥d¢^Ìe¨Ä™\F @” ¢ ŒõLÌr¸  t>PIT=¦š4.S…r ‰^T31˜+ù& endstream endobj 866 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 867 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 868 0 obj 78 endobj 861 0 obj << /D [859 0 R /XYZ 72 786.281 null] >> endobj 855 0 obj << /D [859 0 R /XYZ 196.43 519.796 null] >> endobj 250 0 obj << /D [859 0 R /XYZ 72 499.896 null] >> endobj 254 0 obj << /D [859 0 R /XYZ 72 435.929 null] >> endobj 862 0 obj << /D [859 0 R /XYZ 270.541 193.737 null] >> endobj 258 0 obj << /D [859 0 R /XYZ 72 173.837 null] >> endobj 858 0 obj << /Font << /F21 372 0 R /F30 496 0 R /F8 384 0 R /F27 490 0 R /F28 493 0 R /F34 561 0 R /F26 402 0 R >> /XObject << /Im19 856 0 R /Im20 857 0 R >> /ProcSet [ /PDF /Text ] >> endobj 874 0 obj << /Length 1870 /Filter /FlateDecode >> stream xÚÝYKÛ6¾ûWèh5çDåÖt›¢A {JsPlù‘z-ÇÖv“ß>$Z¢¸IÚS ¦Èá|äÌpæ#—eþ±¬àY¡sÂ5ËÖ÷3ší ÷—s£K^ã/V³g/9ËJRæ"[míô’è\g«ÍÛùá‹¥ÐrþzÁæïË\Î?,–l^¯ÛëâÝêU&JF$Õ Å%ÃÎÙÏ«ÐèSDkpgoßÑlËz5£D”:{„6%¬,³û™¤€•û>ÎÞÌ~ïôôc8+¶3I ¢ež-ya6“É BY Pš¦'-à†qKÕiw¬Ÿ·Å(#¼(³@ÑÌËŒÐtÆ(¸"¿ü£i«öМK)s Oè³ùj_c§FGðb^£#ª{ì*æWü8ƒ“އ¶…3x±cëêdÝ}K uw±Tä*À}ÅM¬O)h¥qJq`q nÄrX¡–i;õ2QC¹á§ïh)°îŽ6DßÑBÀàŽ1íþ0±U W‘¾·2Ñ­ºá4)OyR>“òë;$åŒ+Ÿ8 ½LÔn8MÊS@ž”Ƥ<ÄúžI9£”äÑ—6l“šÌrr¸Zk¥•‘ ÛSœ\Œ99þUGéÇnH’Ô¾ivôIË‹8‰('׎“§óaÁÇï¾Ì4ãš="è¸eÖ¯(ÂÏs”H¿|3"htÓ݃ÃÁ{|ë]endstream endobj 873 0 obj << /Type /Page /Contents 874 0 R /Resources 872 0 R /MediaBox [0 0 595.276 841.89] /Parent 837 0 R >> endobj 869 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./optics/BSLine.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 879 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 28 28] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 880 0 R >>>> /Length 881 0 R /Filter /FlateDecode >> stream xœ­ÌÁ ÃP л§ÐŽm¾zk2B i¡9„²~UèEÃC耩þùýe—C†©a;űñ^â¥V Ý53»%äq ¼%²´[!‚bI!øÍÙqm½«$.îÝÿ´÷”YÌîæ&xendstream endobj 879 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 880 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 881 0 obj 108 endobj 870 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./optics/Detector.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 882 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 15 27] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 883 0 R >>>> /Length 884 0 R /Filter /FlateDecode >> stream xœEŒAƒ0 ïûŠ}k'i’~[á 9´Hä€8ð}R¨v­ñZZ¯T1êO¥bÅc ülxr‡qh3Ã)›ëÉ%ÅÌÙItj÷żŸíE5üsgÁµ%mŸxÐî‚/&¼›`mendstream endobj 882 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 883 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 884 0 obj 106 endobj 871 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./optics/FreeSpace.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 885 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 89 32] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 886 0 R >>>> /Length 887 0 R /Filter /FlateDecode >> stream xœ+T0Ð3T0A(œËUÈ¥d¢^Ìe¨Ä™\F @daj gl¡`da¬gb¦P”楮 êJá2U(ªõÂ¥6˜+ß<endstream endobj 885 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 886 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 887 0 obj 80 endobj 875 0 obj << /D [873 0 R /XYZ 72 786.281 null] >> endobj 876 0 obj << /D [873 0 R /XYZ 269.572 644.78 null] >> endobj 262 0 obj << /D [873 0 R /XYZ 72 624.779 null] >> endobj 877 0 obj << /D [873 0 R /XYZ 266.583 349.295 null] >> endobj 266 0 obj << /D [873 0 R /XYZ 72 329.295 null] >> endobj 878 0 obj << /D [873 0 R /XYZ 262.017 62.301 null] >> endobj 270 0 obj << /D [873 0 R /XYZ 72 42.3 null] >> endobj 872 0 obj << /Font << /F21 372 0 R /F8 384 0 R /F26 402 0 R /F34 561 0 R >> /XObject << /Im21 869 0 R /Im22 870 0 R /Im23 871 0 R >> /ProcSet [ /PDF /Text ] >> endobj 893 0 obj << /Length 1725 /Filter /FlateDecode >> stream xÚÝYKsÛ6¾ëWðHÍTâEßÒ¸I›ÉL’Æ=er eêQK¢#Ñqüﻋ ‘ GO™ÎDö#>àÛw]šdðMK”–„iš,÷³,YÃê«uÖ˜ý÷«Ù³—Œ&)dž\­ìãÑR'W7SÎæ *‹B¥/6å]Sç‹\çéå…ý|ÖôqNÓËãö®ÁEž¾½k¶Ë“¼½ž/$Oÿ­–Îønž³´\â¿·s°”ëjþéêõì«öŒæ‚hã ?Ï>~Ê’¸ÉëYFòB'ð=#´(’ýŒg Î*ÜïÝìÃì}»OgçbbxÄ‚)sÿQÁ„&9Õ­`9?Ì™Q°Kj0"HÿV4+HFeì5àò˜IÂþFÈúf.Š´Ü_Ï…NoÊù‚SPzW6FÛg/u÷ô"W–¯Ì¹yúj³w±‚§5¸Kt:¶±‹ÞxªpõåiSã§€Ÿ45ë'xœ)ü‰–åœétSÖÕÉ.lz°{• ¡éÖЕ;»æ6)÷ö©zˆß z2–®ê£ÅT_ËýÝ®rË¥]ÜÀ4]¹ÒÙ>ß—G06æ¨G”$_PJ !Œ@³Èóñøñ0‡3”xƒ/øOµ«ëf;öYMT–›gß:Ù¼&Øa¸Ý¶>Àê W/ú!!Ñ|P"²xô9È"ÀÄRÖ›ñ0›j»Þ`~5Äħl’Ñc”AQÐùíÕ¦²—¶ü ™Á kÔ3žîÀ¹€@OkA¥]¿ƒ¯¶dL*® IæVª•Ê™ñÌÛ›fQ)'š‰I2°…*ešèLž1:•8PÃU½§,n†)“Ô¸u|”ŠÄð=O&*’3ã‘!wUD$J˜š&ó˜Û™HnòŒðïº)MÞÀ™¥½*p®Ÿˆ‡½ª3#ój=¸§æ„S6Iä ¢à–ðFÍ1_®6_ ¦Uëc}ÅñÆ.-ëù}$PÊ9Oÿ1õ£òyäª:ÈÖÉÈ3¢X½_ÀóÇAégápa é*}cà ë9no‹|ä,ÖDÔ˜è˜1o z:ðLÌÞŒG¼ŽxCA@ÉI"BŒ0¡Î¸Ú¼¼Æb´Äâ ßÐ/X¿C¿ÍKü"À/î)WÛ"ná^–?â–Ð ?áÔTp"x´¤… Ra½—I>CäµÐÂ`Âï¦óº…gíO.kè»’÷gî¦JÁ¾ð‚ivX–™²¸ˆàˆ§<ÆCP¢—X9×÷G——¤¸°Yò ¦êÌwîât¾¨{z $—côäŠÌ.—G!ÐäòÐZ޵”\2R(1ÖRzsÐRÊÑ–2Øk¼¥œ"ìoÔµ”§êøD iÑÏý _æ%~¬lÉ:´ëú»ýÒl¶¶'Bô0âqSûF²Å¬ÍúÁ;Òzl¥ÝÀ°o¡Et=Xl\Ô"_m ‘¥ÖxBÓíU¶Óó[bo©Tº=øCw[­°87¦¸»ýŽ@HÈE· Ñpð ¹~ÁÁ—2 ×{"«:LÔÎ<=øNùÁ·O4|C®_yð5å”ñÁ—C*?9øÊaóË¡aÒbzð¥øwAŽƒ¯ÁF›_ q×üšÌèš_ê›ß°‰ §Ü*2ÞÂ}3I“Ž:ÒùJ™žnÁÈ£×kÿ¯KhüÓfäendstream endobj 892 0 obj << /Type /Page /Contents 893 0 R /Resources 891 0 R /MediaBox [0 0 595.276 841.89] /Parent 837 0 R >> endobj 888 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./optics/LambdaPlate.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 898 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 13 32] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 899 0 R >>>> /Length 900 0 R /Filter /FlateDecode >> stream xœ+T0Ð3T0A(œËUÈ¥d¢^Ìe¨Ä™\†† F ¹\F&z–fFF Nœcl`¬gb)Cá`W–ÆeªP4×‹Êæs!âÖ(‚endstream endobj 898 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 899 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 900 0 obj 86 endobj 889 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./optics/Laser.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 901 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 89 32] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 902 0 R >>>> /Length 903 0 R /Filter /FlateDecode >> stream xœ+T0Ð3T0A(œËUÈ¥d¢^Ìe¨Ä™\F @daj gl¡`da¬gb¦P”Ê•ÆeªPTà…KA0W òžâendstream endobj 901 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 902 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 903 0 obj 73 endobj 890 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./optics/Lens.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 904 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 15 32] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 905 0 R >>>> /Length 906 0 R /Filter /FlateDecode >> stream xœÅMKÂ@Ý¿Spd†¡ÌÜY0‰m»h\x}i"^Á<yä}.$'¾wì8p™-/Zb7T¡˜.<©)qvQJ^‹±›Ÿ"å6Ñ@Qeí-OôÊÞºýÄÉ3, 2ð€Ñ;º¯è^qÇ-ð¢Ô6–endstream endobj 904 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 905 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 906 0 obj 118 endobj 894 0 obj << /D [892 0 R /XYZ 72 786.281 null] >> endobj 895 0 obj << /D [892 0 R /XYZ 254.49 516.232 null] >> endobj 274 0 obj << /D [892 0 R /XYZ 72 495.592 null] >> endobj 896 0 obj << /D [892 0 R /XYZ 276.103 369.334 null] >> endobj 278 0 obj << /D [892 0 R /XYZ 72 348.694 null] >> endobj 897 0 obj << /D [892 0 R /XYZ 277.777 62.94 null] >> endobj 282 0 obj << /D [892 0 R /XYZ 72 42.3 null] >> endobj 891 0 obj << /Font << /F21 372 0 R /F34 561 0 R /F8 384 0 R /F26 402 0 R >> /XObject << /Im24 888 0 R /Im25 889 0 R /Im26 890 0 R >> /ProcSet [ /PDF /Text ] >> endobj 912 0 obj << /Length 2031 /Filter /FlateDecode >> stream xÚÝZMÛ6½ûW½Tj®HŠ•KÑ6MÑAÓf{JzPmÙV£µ6²œmþ}gø!ÑÅMÚœV¶f8gÞСQÿh”³(—a’FÛ»UàíO+j¤où÷·«›ŒF)2Ýîõð‚ÈLF·»7ñsÂÖ.Óø×5ÿZo²4þ{½¡qµíÏë?o‰xAIšH0Žê)Ç—«o@eO)9½_½ù3‰v0­_V á…ŒàsBhQDw«4a,Ì÷fõzõÛ`g”á(ßʬƆåj1‹«’p*‡ÕóôzõF¬W««dº*š$¡YäØšaY àÔ¢¾¬µëÖ¢ˆÛ‘o^ÈqĆçÚ,ˈ TøöˆŠøÃšÉ¸ê>êoçúî¾K~Í⻺C³`QK?Þ¡6l)ümQ¬7)—`‹åqJi|ßUç ·û„ºæå®Ucª³Ðøë^›<Âçò´ƒ¿M¥ßlQ¥Eõ©D+z’7V4¼ùG¦yþ_À /÷¡n­ƒ­Š¾ÜLI!„rñ½‡©åqµ¿à$tçq}ÒÏ^qf<÷ðùÒ£ZW‘ÁçÊÔ¯à! Ö•ÿ`þ½¶ÑÞ÷µZZý³i\d¸7<$I’ÔFeãèø¡ãdšêtè=ül‹<ˆiTf˜NXQð#†“‹{k½ÕX7àÊýÑøboüz4Qš°}¸mG–\# àa}A׌:^×1N±?ÖÛ5§ñ;œYu>ϽÃ’eAX£2ƒu½ÃÉÒkhã®ç!üîÐnðº¨vÛ©ó¶à¡ò_JÃu¼2bœfy:4•'h(ayÌêÌÐ\Ç@d±ì ð÷¶/Õ!U3 ¿¸TI^ê¨ã]ª#òÛ„ ¿óB’ÀÖ!Ê òj½‚$‚^Á¾ÆMn/xHv¸è,~KyŠ“7&4Tºø ¥òÑN ÀK§ƒ~ÕëXÊ CšÜb ~§%:’á„Ù*ãé/÷*«éÏ*K} 9]0U œ“4Ðu¤YF¤³²I×aÅN×Q,vŽ­å®#85¤ºŽŽ*ceÿ‰ÇOÕ©êÊ{žª¤ÀC1VÕÇž©¶#·E§AŽ_$ñù¢ªäÑX1ÖözŒUMBÁ¶½œûvƒ$|[6L—.,©—FÑØ˜µ Uc8|‡cÕáÀán¡}`m©òel™Ó}ëž0ýäº €6 ÕMõ+mæÐU¬ý£µåÍ=¾}À?íH¯ëSe¯iWªÚ²GˆdƒWï&Ý ûÝ —Ø„3µ£ãËÔV¬º°ª>‘„õÞV…QD´:3ÈI³B!“º°C Õø¦_]jS¦½TÅ8<³°g¬†×/JˆÓ{¨wýÑãN$«1Á¹¢¤’È$s°†úõ€Ìk7ëל>Øwz}‘Jè“ÂlÝÑñúÈoLB`Cc2E›7&.àg4&êpîOõãRGïR8L%C@–JNæTÒÅz‚T’ÓDExp7Fïnq˜J†€,•œÍ©¤‹õ”©$+ rBjòqI ,“ Ã%sÃ%!iKjTÆKLRΙ$f!ÂL2ÁËfx¦/u|DRk?ä–G^§Ç¡ïæ3‡Ni%œ›¨ò8 «”JåqVÉY%SYŽ.±J+vX%Äæ,å³.9Ææ)×视öÕ±ÄðJ©ˆ_ë}?2š¿L™@~©‰Í+uÕ1îÁV=£=EµðÑ£N­n#M¥ßímiy¯/«õkÍÁ ©dßj•k¥½çÆ×ê’¦ƒ<¦0wzÜå~Í $oy\"îÎÌÅ^€ ÎxÇ9“xýRµm{gÐNã•*4úvdr«}9W»ë‹lËaÏ×öÃRÍêã˜Ñ•êë}p/'KS G:=PZôå©l¾üÍ8^¤i8•;:¾TnÅŸÈ5CˆלBz¸¦ ûY\ó^Å¡®´ãd•gñwˆÞˆeæE|†Opt¼^3âǹhl`£S4u?ƒ‘ޱ:¶=êqßW‹4]J’ÈðÍߨâs‘>ÎKH-@ÍY©ƒö9·å¡â‘ßï]¹–†iÅÒ Êœ:@Oñf3!,üÖ á½ÕTÂGî4!†Í+Ï}æ€ò”)(Ô%o¨ÿ[Àþ ³t,endstream endobj 911 0 obj << /Type /Page /Contents 912 0 R /Resources 910 0 R /MediaBox [0 0 595.276 841.89] /Parent 916 0 R >> endobj 907 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./optics/Mirror.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 917 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 7 32] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 918 0 R >>>> /Length 919 0 R /Filter /FlateDecode >> stream xœ­ŒË Â@ Dï®b*0¶×ή[àFR)9Dh£PšÃŒž4o‡°B¾ùõu£N³ãþ"Å“4¹‡9LXÌÕ2ïŠ&}8VòÁ‘6Òâ ’CQïì1¹Qà]ÆóߌZèRùöž&œendstream endobj 917 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 918 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 919 0 obj 108 endobj 908 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./optics/Modulator.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 920 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 32 24] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 921 0 R >>>> /Length 922 0 R /Filter /FlateDecode >> stream xœ}ŒK €@ C÷=ENPÛùéÜéAT]¨ ¯ïø7J(…¼$3„rèþÍD3eµC¿’¢O7x),»uʹÅÒRG[ ”_x£¼SLdåä1¦~õ°äáÅoãéóHUÒæ,fendstream endobj 920 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 921 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 922 0 obj 111 endobj 913 0 obj << /D [911 0 R /XYZ 72 786.281 null] >> endobj 914 0 obj << /D [911 0 R /XYZ 273.543 514.201 null] >> endobj 286 0 obj << /D [911 0 R /XYZ 72 495.325 null] >> endobj 915 0 obj << /D [911 0 R /XYZ 264.854 253.616 null] >> endobj 290 0 obj << /D [911 0 R /XYZ 72 234.739 null] >> endobj 910 0 obj << /Font << /F21 372 0 R /F34 561 0 R /F8 384 0 R /F26 402 0 R >> /XObject << /Im27 907 0 R /Im28 908 0 R >> /ProcSet [ /PDF /Text ] >> endobj 925 0 obj << /Length 360 /Filter /FlateDecode >> stream xÚm‘ËNÃ0E÷þŠYÚ ¿’Ø,¡ÑM‹š]ÕEHÓ6@ÕWâïçYA)qæ^Ûwæ(ø(H4$.Ú)ÈD«ÏDµ*G™ßè)¹›j^øØ@ºm¶{ábéfE­e\ÅÞ'ôqŸªâ¸q†Nî›ïUúÃ]æ—òT…¢¥óSUæ×Æ0c<¶ô½È[qÁŒ¦YÞ •lW°u:#OiŸ±Ž çLHx&«µ„ v2#Rïà×R(ïá@¬Ô˜5jÿ?É’¼öç ZØ56ŒÎÁMd…ócå¥pÒ×N œA åTk–uÚnc[¸{9h“#æ‚!µð ª„WãÙ°á ^l^¡“ž–`užÎˆMËݹ8oƒ¤„²ËZýëÙ5 «EK—XØ—øÚ6dÑD`Q€_õ—±‰FÃM¨ÉuÕŽÍ™Q‹Ä®prtâ=¶[ñø¹™endstream endobj 924 0 obj << /Type /Page /Contents 925 0 R /Resources 923 0 R /MediaBox [0 0 595.276 841.89] /Parent 916 0 R >> endobj 909 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./optics/PhaseShifter.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 928 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 18 24] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 929 0 R >>>> /Length 930 0 R /Filter /FlateDecode >> stream xœ+T0Ð3T0A(œËUÈ¥d¢^Ìe¨Ä™\F @”Ëei gafª`dh¡gbd¤Ãehf¨gn ’ÌáJã2U(*÷"NyW0W ”'\endstream endobj 928 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 929 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 930 0 obj 87 endobj 926 0 obj << /D [924 0 R /XYZ 72 786.281 null] >> endobj 927 0 obj << /D [924 0 R /XYZ 258.807 393.082 null] >> endobj 923 0 obj << /Font << /F21 372 0 R /F8 384 0 R >> /XObject << /Im29 909 0 R >> /ProcSet [ /PDF /Text ] >> endobj 934 0 obj << /Length 1504 /Filter /FlateDecode >> stream xÚÍXKoÛ8¾ûWè¶°bŇ(1·l_h±H»¨÷Tô Ø²£Ö–RYA6ÿ~gHJ¢¬GЦÁ.(g8Ãùæ)S/‚?ê%ÌKRIXJ½Íqy{Ø}»¢–*"FRÃz‚¶Ô²˜P•"Ó÷Õç/‘·æ÷«ˆ(%½{XGDù¸êäé÷ÃêÓê¯N\rWñX ^#…*5‚ïC)!ÊX™êûü±^½xØGÂhì­w ‘KO2Nb!½õö³ÿú"9þÇ€úŸ6uR¿€õmƒûÜ}È7 ¼kBU"is2G>\Ešfû°ÄÏ6ß&ýlŸ_ÖïW¯×ÝÝàj2¢$y¢‰”±äq1 Ô Î'Åt´§‰ [bȉ9+MŸ@šYYî ïÅ G$½÷ðáèªÇ¨$)g^ÌI"n¼G(A¬5uYa•bì"Ï»2àÔï}‹üíݦ)*Ø+Ï]%A„L<ç.?o:……æØÓão Õ!”zŠ(ÉÑh Cj‘„ÅÚìõMqÊ” ff ÐoAlÂ3䀯òÉ,3ÃyÀ­ë:C¬ÌVµÃÿ)2ˆY ¤mVãÓÐOG”|„ð¬Vefÿßr<·52ŠÒìæSZʜژíMQoîŠÆð²žø¨î+µìõna©eŸŠ=në0Е„·èß´‘ÂoÐõœû—x¶.²Ò¼¾¯J„ ’ªÌ³æF4뙲M]Y† ªŽ†ø‰ë þåUO®jCmnr³(¶yfwöÀv™9d¢v)‰dêÿ˜õñÓ³^@BG±˜Éz8G@ 8Ne’ž=šô %ó¿jLu?Í%º£þ%ºzr•‡¥Ød_6ˆE Ix,eÀ’ X`;³eÒ5Ÿ–SGÖHW˳¨ð\j½¼z„zä>krã+§R…<6b™$1eúÄ«Z'ü}›&+NPq0[³Ú¦‰Œ ü»YÞ·=»¹1·øRZIù?M®eåÞ¬xF\Û"ÏT×—³­K gm k£ÚêÓ—„(λ؋cÿk˳±Õ£º…–ÓÕš‹s‡È„D⋃$hoSþ°,¡Ãc2†üß’ñ2÷Ŷ¹¹;² Å’²–g¤-u}Ÿ’4’ë¦{töuŠA‘ëÛrT#¤È*4%Œ'˨ô<“¨X2Þñ&/ö7út˜°([ÔØòŒTºÐ@#¢ŠÔ®Û&`ôC˜5gà8ÑØ‚c{å2 z~¼ LÏ2…‹¥âý²rÈ'¡„%‹šZ–sUƒP̤«­ =4™Î  x•Y›“ôÑqx&­¶d¼ÈmQþ™—û©< Ecº¨°åitç |¨µ †ƒŽ}, ûQ²8ñ0WÕðÜhƒ<Ãb9‹%|11.—±ìy&±´d´j·˜BŸ¥lQ‘e)r L4Q>ÐÕ!¸«ê|_Wwm›ê ßkHÿo]tó~3„t|_‡ ãv€x çëQçbŠ0ذô Ú L3ô6Ž ë¶ gqŒóYopEb©–½ÑóLzÃ’ñŠ×Þ€Ïa˜_–Y–‘"Ń4vuué|í|o@l‚_œ9Wû¥Ö;ø%¿äƒF<áA˜ú)·¸^x‚kS(â"eShÑÂÆGô$ ,Þwü™C ©4»Öƒa?èéïŽ<ò^U0zƒ‘R·ÖÁ M'ÅðcG¤Pƒ$4šNyªåiY¢7ÅŒ½«m:ÀWô…É’Kí©·8´™:t†å2€Ü-ñõã;J¦yB¸Æt;ô§„Hù켋å3Qéܼےy—ÍÎ»Ž¬ùywIá¹ ÔzõlïÕ2ñÂr7ønEÃPß3 ½‚C.1=ËTѳÔÇ'ÞMÝÀ{¦jbÞuÔ=˸+YžnZ†),4í§ÜYE݈;Ð41ßvÚ~ép›èßmü—é§dendstream endobj 933 0 obj << /Type /Page /Contents 934 0 R /Resources 932 0 R /MediaBox [0 0 595.276 841.89] /Parent 916 0 R >> endobj 931 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./electronics/AndGate.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 937 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 89 61] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 938 0 R >>>> /Length 939 0 R /Filter /FlateDecode >> stream xœµPKÂ@Ýs N€Ì™^ÁΚؘt ¯/53mդƅ!ÃLÈdg«±/0Ááìq¸ÁAý F E‡–±´<$¡ÎâÞ2ÝŠ/ð®ªãOªüV) ¬ ßp´‰$ &6 9vä{¨Øxíå«Tסšõú°¿¯X®ØÞ¬ù¸.ÿ`2hŽÉÚ´ù¨Z˜•ûüS…¤Óé ß U¿Ãgx=µ@ŠL.5> endobj 938 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 939 0 obj 185 endobj 935 0 obj << /D [933 0 R /XYZ 72 786.281 null] >> endobj 294 0 obj << /D [933 0 R /XYZ 72 768.281 null] >> endobj 298 0 obj << /D [933 0 R /XYZ 72 561.899 null] >> endobj 302 0 obj << /D [933 0 R /XYZ 72 486.77 null] >> endobj 306 0 obj << /D [933 0 R /XYZ 72 423.076 null] >> endobj 936 0 obj << /D [933 0 R /XYZ 265.11 180.173 null] >> endobj 310 0 obj << /D [933 0 R /XYZ 72 160.561 null] >> endobj 932 0 obj << /Font << /F22 378 0 R /F27 490 0 R /F28 493 0 R /F8 384 0 R /F34 561 0 R /F21 372 0 R /F26 402 0 R >> /XObject << /Im30 931 0 R >> /ProcSet [ /PDF /Text ] >> endobj 945 0 obj << /Length 1493 /Filter /FlateDecode >> stream xÚÝ™ßoÛ6ÇßýWèQ&–¿Iåqm¬ÒuõžŠ>(¶âxK¬TÑõ¿ß‘"eZ¢˜[ (P˺¿äy÷±B2 ÿH¦h¦´DT“l}³ÀÙîž-ˆ³`.ûϫś÷”d%*%ËV—ýã%ÒRg«Í—œËeA¸¦2»$ùUuÛÕí²`šå§'æ“ç¿}ÿ –5¸å-\ìÌÅ-\t½ùôº^wm³ß­ïúç>^, Éó?á¶`Éh^­Íÿ-ÁRmëå×Õ‡Åéj˜µ”@Z33ço‹/_q¶µ}X`ÄJÝÃ5F¤,³›Çf/Ü÷ëÅçŧaœƒÍ< Ç i.³‚*‘˜T“Â(4bDφљM«ýöº>/‹`‚¨*³` ‰˜÷™¨éƒÁOy$¸ºª!ºŒÛœ4]Õíš½¹Áò n˜Ù ñlܲSHˆ2½òƒOtåÎl&r»ÛÿZï·ÝÕtõT""HRÐûLÃÕ3‚;VuËgùumöãÖ Sèo5—ý'|'¹‹ÒíÎDå®ÿRÿÓÕûÙËö¹þæ%\¶ÍMÿ¥3gÁ=º­ºùX‰t:’Þ#Gk4ë¹ÜN§9â„&$œÃH"sV²@eˆÚeÓÖÛ¶ùÛeÓßZ7×ö{‹–ç<ÿãζö¡´G ƒ¼pŒe03ö[x¾í‚)ÐqXhïÒ@eÂWæ¦þÎ&± Ò¶s©jl¥½=—YJ„9Iæ ð‰eÁ›Í/"yPp>eRȹL„‚@”Q¡Ž´†#|k„úHÔGس/ü˜Cnó" /î)·½#iሖÏJK˜…ÿSÅã"-¢`[š ÅŒ+ã‘}ƒ‚Í%—¥u ¯m7ðOºo~¹a${×@ÝÏ>• 3>‰Šæ‰bX7d¡”!¬£‰ò>ÞÅDèýnk†; §ˆžô‡ä¼²™:ƒájÏ(–£È0(aë,ПNR ëSÀ:Xôäã¬`°¤œÍ+5¬ñ£ïÍfm§V@CÓæ’œãÍ«÷I Ž2ª‡a‹ëdwLô£BsÐe_ðßµÕ’êüÞm¾Êíή²…¼jÝi1ãšO3îOýå½É„)ÿ¾?Ìõ‚­«G è!Z8¢p.`æ‰ïîØvCmô £ÈœYX›ÉшpÚ/Ýmï³v‡«¹µ=œä¶ðžÌÔ;A8ÝsŸX½óf3™ûÝ&Ö¹1CšŠ¤˜÷™¨q‹FË#Å¡êÝ›4l&M;è¼Í$Rs]€CyU<Í4O,*ÞlæxUï¶W†W»HhÅM*zŸ‰dPU:”Ús¯Û¬›'šQ¥™Œ‚2ò@`—h\zëÛPw$5EÜ@íù„Ëȱ4>ÑU;óã7%8îX1B¸¡ê !\ΰE…d,>ÑX:sšsSBžtÇBSÖ µ^!ír€EÒ¿ZŸh6œ9M»)!O»c¡)í†Z¯™v™6±âÑ p”9Ü•îÂfp÷p=‡»4‚» êh7Þ¡)öLÀü%R"zl¼w‰Ò.s´ûÑ$Ƴn¬=Oq—ØÈ˜ÎRôÙ±¸«ž‡»´ÔG}v„»Þà.ŸÅÝ`¬yÜM Ž2ªçæÝ'Ñîù‹Æ]ò?à.¥ ‘4í\båÎYf݄Ҁº#©ér?t)`§i´ |¢qæG‚nJqݱdtCÙº~]J™ŽLà‹Œ7?̺)±vÇjSÚ Ÿ»DrTâ4¢>Ñ•;óãp7%8àîX1‚»¡ê Á]ƒ„§+ð‰ÆÒ™Ó¸›ò¸;šân¨õ q—P†˜æél|¢Ùpæ4<¦¸j½fÜ%#©uw)ReŽßî> wYôí®,Iúí.aöÝz!à7 åqÜí]œG”v¹·Û´g&wOÁ]à <;èG^îë’~¹K`Eiwøûfhü™o¨endstream endobj 944 0 obj << /Type /Page /Contents 945 0 R /Resources 943 0 R /MediaBox [0 0 595.276 841.89] /Parent 916 0 R >> endobj 940 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./electronics/NandGate.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 950 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 95 61] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 951 0 R >>>> /Length 952 0 R /Filter /FlateDecode >> stream xœÝQAnÄ0¼ó ^@ÁÆÆþBomžiW•6‡Uý~I×v¢tµU½T–e`ð™y=í¸ÂÓ«âùÏ~ß@²E ŒK·SÉT^@5‘Ô Ÿ ᇳžÅšž2;C;¶P('ÔÌÄÒQäHšq††E=—+6ª7nEÝš}°?o1Tì5»}Ùš‹LàOŠL!”Ý¢šce>Žñ-S®^}Ä»£ñÄ'°äšjÆ… gO2 .V†ÇJ¢¨£TIÛiŽPÌ žÐ sÑ¢Ø[tì gì2nûî¯ ÐØcÀƒ„õ·ÿ¥¬ C.PƒÛp¬?þsÎ/~>›|Å„endstream endobj 950 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 951 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 952 0 obj 259 endobj 941 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./electronics/OrGate.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 953 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 89 72] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 954 0 R >>>> /Length 955 0 R /Filter /FlateDecode >> stream xœÕO9Â@ ìý ¿ÀøX;Îè OˆD@"EDÁ÷YPÔÈZ­fÆcdä{­ÿ8Û}Áé‚S}'È$66T#ãœÁ¬'ç|2îLZ%Ø;M G £ÊŽÐt/B›¿c£Ŷ¡áÔ„ :e:6¬ÊµÕñ3Óp¼Ö¼Û?É{„”ÑûºJ³†”êìIœëEßõ‡_,(z}éXý_ôÞïž!;&ˆï~u °«uÕ¨p³endstream endobj 953 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 954 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 955 0 obj 188 endobj 942 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./electronics/NorGate.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 956 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 95 72] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 957 0 R >>>> /Length 958 0 R /Filter /FlateDecode >> stream xœÝRIN1 ¼û~ñgù7è'´Ä€DFø>nÔΠ> gPEUvÅe'Wdä}çºÁž ^>@ðû z'66T#ã.¸Ù ç>w&-¥;±;6íT­»BƽõZ0õª(f…Ä+¨ t®Ô»cbUŽTdz§^Àñ3ü>þ¿¯°€2úˆRÚäT¡f“xŽîÇ¿õb•êÐ[<‰C'¾@óJcT´}r¤Ö4&!“i1!+ŠÖ‰ø ç¨&QZ"!/0AÁYâÀ¡ˆ¡Zù‘q ?/8½Eâ4ê4xjaÿÿ²­N&7ÚˆÛ$öÿ=g§X_ÄŽendstream endobj 956 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 957 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 958 0 obj 261 endobj 946 0 obj << /D [944 0 R /XYZ 72 786.281 null] >> endobj 947 0 obj << /D [944 0 R /XYZ 262.619 635.036 null] >> endobj 314 0 obj << /D [944 0 R /XYZ 72 614.957 null] >> endobj 948 0 obj << /D [944 0 R /XYZ 268.555 348.707 null] >> endobj 318 0 obj << /D [944 0 R /XYZ 72 328.629 null] >> endobj 949 0 obj << /D [944 0 R /XYZ 266.203 62.379 null] >> endobj 322 0 obj << /D [944 0 R /XYZ 72 42.3 null] >> endobj 943 0 obj << /Font << /F21 372 0 R /F8 384 0 R /F26 402 0 R /F34 561 0 R >> /XObject << /Im31 940 0 R /Im32 941 0 R /Im33 942 0 R >> /ProcSet [ /PDF /Text ] >> endobj 964 0 obj << /Length 1474 /Filter /FlateDecode >> stream xÚÝ™]oÛ6†ïý+t)3#~IT.·&ÁŠ!A;Pô‰eÇ]b¥Žwÿ~çP¤DK•x0Pj[ç_ñœCò‰M£þÑ(cQ¦RÂîŸ&I´†«Wj¢3Ïœø¯óÉÙ%£QNò”GóU}{NTª¢ùòK|AØtÆoTÄߊûj:£ñËôëücÄsJD¢`dÔŠ /N.æ›L¥8z}Ÿ|ùšDKx¦“„ð\E{xŸšçÑÓD$ \¥ùü8ùsò©§á]¾iYÅŒez&ƒS—Špªš©sq8u®§>¥1#’tgE“Œ(ÞŠ}^V4ì„®·SžÄ7Ÿ§3Ae¼^TºŸ]ªö®—õÐ,%’R}ׇÝbÊT¼bq/ð…Ç/Õb»„I,vËúÂ-Šppü€ƒÿRë÷› dõõçÍvŠÖ‘âGUè16Ûu^íàSùT‡«øPÔï¡AX—𿊗ÿÖârU¿êá}uN!S3 åâ\Ï;LÊø[="±ÑôÏÕ¦4Dãón5ÒŒ$4RhZYñÃHfŽÆ×÷6Œ³ß,«‡ó~å9QLͬ¦ç¦ÜÂ+¢’ôÀqnó³ßÀ\Á}8ƒe/Sd(+YB•…³Òj¼Y1a|Ƈb³~˜rWžÔÀžBYÐÑjz–nj(… €ØšÔpãýUu’ã´¡MNq©ÎŒLˆ#ýÒj¼™1a|ÄÅvýXx’B ËÂfVÓs;èH\z`Ø´‹^ŽÕB¯Œ\À§œ9§Dæ#=Ñj¼37a|Ø.þ(¶kßj ŠJ4´šž£;{Q~èÚ´Ä£^¸=¬{KÆéŠg\TÛþ¦†÷ÕWðv×ìk¾ýÊ—KÊ—<œËVãÍ¥ ã¬Vë^• ‚² ‘‘ôŒœâ>ƒ‹Êñj2¸*wÅzWþƒ 2çÄ}ù¨?ïœCBÄé­·°i5gtd[#‘ŒqC¿Áý»ÞÁÅr"`µ¤]¦•Iyi-]ÐÊ)áÆ”­|†ØçCÕ9'°µ«áh|Õ°a|Ä;O52X«iÐÈHzFN"rF˜Ì¼šå|‡çõýNÒ¿±7¡.Ø£n]pÁëºH¨Kqp{Ê"Ë*‹[…ÿQÌiÆ7½ëŸ*F¨@–Z}טÇÓ\kÜ÷š!í­æÂÙïO€TJ Åè“ðe$ðÊ(ÉQNo$ƒ7Ì»ñZ•`Š.7k½6Ìr¸ ò¼^%·åî «W ÓÝäÀýÀ "rž ÿ˜)՚̄{“…ã ì°H½š’ªAêµa‡zÓAêuƦÞaw t½~+ö²·`ïõ;æ^Aa îyŽÆ·çÙð8÷†Ìîíºy¸×u< ÷Ÿ‰$—aÆq4¾¬Øð+¹7äØpo×Òý®í)¸—g9Éh˜{73&<ν!³†{»n}îu ç^ž&D¤#=Ñj¼37á×qoȰáÞ®£‡{]ן„{9œ¯ŒtQ«ñæÒ„ÃÜ2²ÜÛ5ês¯ëõ¹—#åd#Ýj¼Õ0á0÷†Œ,÷vúÜëz½gîå À­LýÜ K[*ýé‘Ü+=ÜËHã…¹7©× “@–ù÷Ö+ñroj¸÷úG‰µ¹zø¦DÀ¢Î#xÀWhÍ8øªAðe4%‰sàvÀ׆ðÍÁ×k|C†Ý4øÞÌOóU¯øwy¼ÇbàP5Èë?ŽG^¦·Éò.ðš…y×Ñøö:çÝYû]7ﺎ'á]Ê µXÎJ«ñfÅ„_É»!džw»–ÞumOÁ»X©Fú¥Õx3cÂã¼2kx·ëÖç]×ðxÞÕ¿-„[¢•øæm¢¯ƒÝ€[ú;ê:–? éâÏy¸}Z‰÷×Ô:ÆÜ€‹¥ÜŽKr£÷øÝ.þôFÜVâýf·ŽŽ|±;ìÒ|¯{èâùZ·5zÏt 'º·a›ßêÝà0Ê;endstream endobj 963 0 obj << /Type /Page /Contents 964 0 R /Resources 962 0 R /MediaBox [0 0 595.276 841.89] /Parent 916 0 R >> endobj 959 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./electronics/XorGate.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 968 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 98 72] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 969 0 R >>>> /Length 970 0 R /Filter /FlateDecode >> stream xœÕQKnC1Üs N@ùl_¡»æáI*å-¢,zý’êÙM²H7ÝTYÌ0¶ÏÈ$ÈרÏuƒ3¼ / xÌü)…ª*ª‘qÜ p"U&ÚI¥vb3lb­¡…Q \aç½Tj­âWÎ>QF½‚q§Ú#Ž£Våœàø¸Ò ïàø™ë¾þuh-)¶é²º‘p™.£.Cq{é¿pY@½3©¶4ª6SNyÎëÅ‚¢ë?€]ÿ„Ï·¸ÿ º;™ÀÕã÷žÞ2¾öa‹¶endstream endobj 968 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 969 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 970 0 obj 216 endobj 960 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./electronics/NxorGate.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 971 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 103 72] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 972 0 R >>>> /Length 973 0 R /Filter /FlateDecode >> stream xœÝRIN1 ¼û~ñ’Åù7è'´Ä‰>Œ8ð}<£vú0\¸€¢¨å²«RéÊ™ù²öïºÁž žÞAðû¤ꪨFÆ.¸Aá@ºL¤é m(}›¡‹QsGkF¥á {¿–Nî“Þ9æD1ÈzãA}T¬Ü‚Q1kUŽ*-­ð?Âîãß°»€{´Ø¦ÊZ„ËTÉ:U’ñõÒ¿¡²€2ÖÁ¤ê! M¨ÛÞâ”ûý+_¬Qzë'°óïôã_ Sm9·òÚ#“1ïLEd"u–™XÖ—Ä8Úɶã§þ^A…Øm"ß@*ßÄÒA ¤ÁîáüÇk-ðÝeÊ¢ANàø# <Åú¤þÞ5endstream endobj 971 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 972 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 973 0 obj 284 endobj 965 0 obj << /D [963 0 R /XYZ 72 786.281 null] >> endobj 966 0 obj << /D [963 0 R /XYZ 266.203 534.978 null] >> endobj 326 0 obj << /D [963 0 R /XYZ 72 515.788 null] >> endobj 967 0 obj << /D [963 0 R /XYZ 263.574 263.847 null] >> endobj 330 0 obj << /D [963 0 R /XYZ 72 244.657 null] >> endobj 334 0 obj << /D [963 0 R /XYZ 72 42.3 null] >> endobj 962 0 obj << /Font << /F21 372 0 R /F34 561 0 R /F8 384 0 R /F26 402 0 R >> /XObject << /Im34 959 0 R /Im35 960 0 R >> /ProcSet [ /PDF /Text ] >> endobj 978 0 obj << /Length 1472 /Filter /FlateDecode >> stream xÚÝXMÛ6½ûWè(5#~H"sl² m“¸§ ÅÖÚn¼–#+Øî¿ï ?$Ê¢¸i’E°€—Ö<ò g†œ'Ó$ƒ?š”,)eA˜¤Éæn‘%;xúrA­uæ•gÿy½xò‚ÑDUðd}k¦+" ™¬·ïR!—+*$+ÒgKšî«sW·Ë—<½yŠÿEúÇÃ[°l–¶08àà ƒÎ˜oŽõ¦k›Óas1ó~ÿ°\"ý Û–œ¥Õ??.ÁRíêåûõ«Åͺ÷Z;•)9úüiñî}–lao¯áJ&÷0ÎU*¹[ˆŒ÷¹ý~\¼]¼î×l8+‡XÑ JN8À˜$\ˆH>Áj¢…Ò¬]u3íƒ'¿Üñ"yÞ€SÉk––+£D…™ÁÄI†˜’J’ѲϞ’ç0‚|qØA6>·5D›CÚH ‰B¤¿5ÝK°T¶ˆ´Ää9&SØ]ç&¨}êbA²‚Mð " Ô–”³¥Y@iRÅúÍq1*MgÆÝð²E®=¥YI$À!.‡‰^/„¬o–¹Lë˸/]Ó"÷(+ž›…YArjæä‡•isüÉXîÝÞŒÎèÍÉ®^ÿÝÕzÝà >væá- ÛæÎ|Áå÷6évMø”)Nz0+6·æ·¯ƒnH˜BÓ£=f•–r®7û»-#°×8Is\òÜtI/õô:iE e¥’‚Bø„æÌBV&t}93:sØvû§ÓRfy”Ìa&lÒ¯IdVŒ×.²÷˜”­KQP/öÍ$Rd&*¹Êá^PѨx˜PTœ}<Ö§]‡Œûe 4ƒÊåQN ™pú±¡꟎xûØÝ–u‰Nb´7æñ¥4œT¼d‚·M[ïÚæ3Èö”MsÔß[bšþŸúö­‡Û]÷/¨È!G"#%ãà®ý æO›4q6ïˆÚ7¶gÔ¦™ )<Ø´5Z BÏfƒÂ1™B}6L0ÖŒ.~d£„³ZD‰,dBäB¡n+G\롵R”µÐ^?bmB^°Fý¼à×yÉ!/v–-õ@Zaê«ÒâgáR+ %Ï‹ 2ŠÔIã²—ÆRæ2·ÒxÏIãr*K8)cò N2EÃÊØ`Ä*c}4ze,­2~SëSrÐÏ\D^Ot1#Üey@gUÆ\€ˆ˜i F9åsÊØ™=e¬f•±·Ö¼2Ž^/¤k²:/s%øÎºxSí¢ÆŽ2´œSà ۘQ™®A¸¶²ÕcgïJÝmïF‡nªˆæûЕß_ s¸â¼ŠÆî@ºùq)#ë¥ð5[@ ûŒÿ‰æß,.öH0&ÆŠ^êó$ ŠBAËE\Óø]ºR>ÓzôUŸ«¶Âí÷J/T`>KSŒú5_¹@¸›:0GßõÕÙt¼Âð2oÚ¹`2UJã%æaBátæÇ¥sŒ¬—Î×lSéì~½tf%¬"ãÒÙÃwnÍ_&c„½t¾f HgŸõ"AAbâgÒÃciÍqé#rÒùšh*}®P:3-™?RÙ&˜ kŽKç‘“Î×DSéìsýÈÒ™ÑÂÒj—æjò«ò¿“Î2ð«rNJgq휜+Zäð ÃÂÚÙ`$¨•ÕÎÏÆbmÚØ§ú¹€“«Ï€~ÕÏTÀ-ZûKÿ»¿oüBÌ” endstream endobj 977 0 obj << /Type /Page /Contents 978 0 R /Resources 976 0 R /MediaBox [0 0 595.276 841.89] /Parent 916 0 R >> endobj 961 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./electronics/NotGate.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 983 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 78 61] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 984 0 R >>>> /Length 985 0 R /Filter /FlateDecode >> stream xœÝRAn! ¼û~c0ð…ÞÚ}R¢HÙC”C¾o %ÚCõX¡•a<3Øf¯È$ÈÛê±­p…ÃWÄÓ OþAL(TÆuìS1ªŠH¦d¬8P4&ùGHxw‹¿[,à!&Õò¤íÀvÅëü·>Y•:óèúùReª±`B…ÍIÆžæð‹˜TÒ1xIóüÓPƒhÉ.pB7М\q\1Î ’ï´>1úŒ†Ãnfm±×0 Fû.Úö8ÿ´³vu®ý]YãüÇŽopøôõFÜ›^endstream endobj 983 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 984 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 985 0 obj 220 endobj 974 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./electronics/Resistor.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 986 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 117 32] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 987 0 R >>>> /Length 988 0 R /Filter /FlateDecode >> stream xœ}ÌM‚P à}O1'(¾ÞÜ G0@Ld.¼¾Å(;MÓ4í—ÎSÂöúÌË*›tCÆòb‰¾ŠX «°Rûô^n2KÁ3üôÃG¡Ñ•ü"KÒ–ï:îQ`C+ó}Â|Ä7õ>Ä4µÀ¤¹†ÇÏ9êí®) endstream endobj 986 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 987 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 988 0 obj 120 endobj 975 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./electronics/Capacitor.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 989 0 R /Matrix [1 0 0 1 0 0] /BBox [0 0 39 32] /Resources << /ProcSet [ /PDF ] /ExtGState << /R4 990 0 R >>>> /Length 991 0 R /Filter /FlateDecode >> stream xœ+T0Ð3T0A(œËUÈ¥d¢^Ìe¨Ä™\F †f ¹\†f†zæÆ`NW—©B9PÞ ‡|0—‘±‘ž©¥)TÒØÜDÏØÈ®Ÿl0Ü( =#s„ÉÆ` ¤€$Û¡*`|$3* æ B¿9endstream endobj 989 0 obj << /Producer (ESP Ghostscript 7.07) >> endobj 990 0 obj << /Type /ExtGState /Name /R4 /TR /Identity /OPM 1 /SM 0.02 >> endobj 991 0 obj 119 endobj 979 0 obj << /D [977 0 R /XYZ 72 786.281 null] >> endobj 980 0 obj << /D [977 0 R /XYZ 266.217 729.972 null] >> endobj 981 0 obj << /D [977 0 R /XYZ 267.358 456.046 null] >> endobj 338 0 obj << /D [977 0 R /XYZ 72 436.177 null] >> endobj 982 0 obj << /D [977 0 R /XYZ 263.608 177.167 null] >> endobj 976 0 obj << /Font << /F21 372 0 R /F8 384 0 R /F34 561 0 R /F26 402 0 R >> /XObject << /Im36 961 0 R /Im37 974 0 R /Im38 975 0 R >> /ProcSet [ /PDF /Text ] >> endobj 994 0 obj << /Length 445 /Filter /FlateDecode >> stream xÚ¥TMo›@½ó+ö†ýÞÜš*©‡*Ü,8R°©ÁB¹ô·wÖØŽ]c«RÄÙùxoæ 2N2+˜u„CV6g¯ä½pU\€3šì‰`º¦Ö% ÊùÍæœU”ûqðÞ°lÊ;ÖD¸íù=zŠ~Ð8K¤×ç(’rGôþ%œOQRj#µÜ¢ H·y”ý‚¡šå/Lm=3ƃ§ì¼šÅw7I*QÅ· ÆoÏïoôZ½&)Æë¢]|$óü1ºËTd”´æk½ÒÄZ‚œ”6Œ¡½7’lÇpŒ:62 Aá}4ô?Ãù¿M: ;Â8ãØ¥\ãq–6eO¸~}Oú,ê4“*þ¾(Z:7ÅB¤¶ù¬÷¤µ„¡rÑ÷íM– ÃeWÃfÙ @•uµb“ýi˜PˬíÚuÝÕË>úJƒ#‚&6£­¯ñ²¨Ÿñ)QwÑ­¨â¢¨W8¢^æÙ‹zÄõ­Z='©°q=ŠúDº|t}¾Á¦}Kr–Á³Z“ÕR¾ÍbL¬ÈœØJ ¸ó%DZC¹jÎdF®Àðk2Ó}úÿÆ_útù6endstream endobj 993 0 obj << /Type /Page /Contents 994 0 R /Resources 992 0 R /MediaBox [0 0 595.276 841.89] /Parent 999 0 R /Annots [ 997 0 R 998 0 R ] >> endobj 997 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [178.091 591.389 425.91 603.344] /Subtype/Link/A<> >> endobj 998 0 obj << /Type /Annot /Border[0 0 1]/H/I/C[0 1 1] /Rect [219.768 571.464 326.368 583.419] /Subtype/Link/A<> >> endobj 995 0 obj << /D [993 0 R /XYZ 72 786.281 null] >> endobj 996 0 obj << /D [993 0 R /XYZ 72 608.325 null] >> endobj 342 0 obj << /D [993 0 R /XYZ 72 608.325 null] >> endobj 791 0 obj << /D [993 0 R /XYZ 72 606.831 null] >> endobj 790 0 obj << /D [993 0 R /XYZ 72 586.906 null] >> endobj 992 0 obj << /Font << /F22 378 0 R /F8 384 0 R /F26 402 0 R >> /ProcSet [ /PDF /Text ] >> endobj 1000 0 obj << /Type /Encoding /Differences [ 0 /Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/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/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/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/endash/emdash/hungarumlaut/tilde/dieresis/suppress 129/.notdef 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 171/.notdef 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis 197/.notdef] >> endobj 775 0 obj << /Length1 787 /Length2 1305 /Length3 532 /Length 1875 /Filter /FlateDecode >> stream xÚíRiTidÑ8,‚šýsa_’I[ÂÒ„Md,’ +)H*@ƒÝÈÖ‚\ÀFQ8Ь-"ÊâTQ‘½AAAElih'`;‹þœù5gªþÔ}ï~÷ݺßÓÝìîijÃÂaŒƒ›’ÍÈVÀÖ•î»ÍH]][. áƱƒpØ --ÉÀ† ¶“™jeNµ"ѺÀ r‘àØ®hÀ† s&Ä®³ÅLžq¡°AQà±r‚<`Ì€Yf2°&á`„C ®bp‚0@ûXfñÃ>µ"`.Ol ˆM±EÆA…€ˆn˜x,vòß0õ¹¸EÝ öŠüJH_´!6‚ ÿ$`ì0>s+Æ‚¹œÏ©>ðGot ýb ‡P„ià Fa@úXBxˆf¹#83A(^­ÃÖçÄ©­ îswöñq2þx›«=wáà^°¨®W1ùŸXœ ’‰DÅ璘ƒŸÍ²ç01¯… .Ä{!FM‡ ,&šq0\|ˆ‰A—°r™d2 9+µ?!±T@ÄWá—H§c‚hSŠ%0ÝNÜnN4 )æß‰Þ$œ3ì…D"ѨÔÕ*“ÏåÂ|u£Äé}ÂAˆ8kÀLB/ÆÜšYXkŸ×^"m$A¾&r»ÚÐucÃѾt ´ Õ9ÜèI…ïbi–²ü˜ô˜Nä’ïXý·{:L}.:Û³<qh,+ªFÃw:ËUø"lËüÑ× uÕݳo({:ŸÜ/>½?¿)ûÝÝ×¹îv^/e7¯iô¨l<O¥ù:d¡ÞI zæ›=φ'[$ E*ž>)5ôèhlhÒºëÆÅêùJ‹yërN-H7êdqçÜSIõÎs&)ÚM¿ÉjÏpbïW³Ú‘Í+ÁBJ> o‘œ)ó[£clÅ~[-ŸÝÉ®é<çwnj´ÀÇ,l0ú…‹õ_ÎG–Ž|çÛ«éµgƒÓ.4"ðI¿!zr7»6†UÜYåz\sÚ$_Ò_ÍQ(› ]èˆS j*!?MH«åuËÆ  .—ÆÛJ“¤]\UPM•ãßh X'š ;ÓºñE óT!èßË[Ƨîõ«×âV3š´ñ{zOËO÷ Rrè܃éŒX͹VíÀ7ÆÊt÷’Óê Ë WÓä°óF´@HeÛõÜÍåKµóQ}*ç){“«ë ´†ókc¦Û€n¿~ꤣ¯[Ú᧤›ôøZ­ß ªi7ãs ×Õµõò¸÷¦ìÂ5n]°øúx¶~1î­ÛŒÏõZ^+kÌl›lÇ:…[)“r5z[µÑ"Èï›xܰ_sV­õÜúAQ¤p|ÉkLæÒÃÜìwE7+¦ÝÛŠ²€ÿÖ¶šúSÖþ Ãc—f¥xpK»mÐzÛÔ¸·3ûæÓ‡Þ76gvÝ(¦¨wìܹ=~é–£qéjY¼Ú‹GÖ#Õ/v>+²6s `„î3Q¼:—K®Sëxaã’Ø´pÆC1ÂBš:"£ü\_¸¨2õØ^Ç“q`|jÚòù;³M–ûíÝ »hV³Ò/í×$ÇOnÈ18Ê“º<ÔW[°Ï-û¶l®S€Ý‡š®£7ÍE_¥Ôõ¶kE{œñ¬åÿ[‘e—Õ²þ„¨c×pÈá4ÃÿšTÝ̓e:·¹IœM£kIO¶DØ;-xw¦®Uÿ%ƒú8›D­Kî»'÷²¿¿Ð0ŠÌîª9oM±è[îz–#šÐ0S¡=ÕR»âåæ· š¶¢U¶1R5¤ªà5O'*­To«·Ìd—ÛJ¾Ì®ìI¶KˆÜ­³U¾ê›Ó;T”‘®QÕàâ*ð)œé¹P8¯ý!Ïå£åm¯wÅgƲ7]T ³ŽKU½«éA5v̇½ßö¹9±öÇ®<þÓ´|ºbͦ¼ÎkõåÀ«wúÌMŒ'ŸHõBlôd]bIÏo•'É4[ixfF6d²=~E¿¾ ÖšZÛðJkã 8H9r(­zšBëßX&ߊ¦ý¨¼·J×ûùò~ËX¿Ýå…ó œ7©c;]Í+2ׄ;ÜY’è°™~¶…l_™¤&U u]ý–Ì)ÜúÈaEDË ß³9åJ›û^é¡“UWÒõÈÙcT&hjÚm4ìA-ž=ç}cé!é?|ÿøŸ`¢0ÄÅ16Ä=Lø;áæí–endstream endobj 776 0 obj << /Type /Font /Subtype /Type1 /Encoding 1000 0 R /FirstChar 110 /LastChar 116 /Widths 1001 0 R /BaseFont /VPKWWJ+CMBX8 /FontDescriptor 774 0 R >> endobj 774 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 /FontName /VPKWWJ+CMBX8 /ItalicAngle 0 /StemV 122 /XHeight 444 /FontBBox [-59 -250 1235 750] /Flags 4 /CharSet (/n/o/t) /FontFile 775 0 R >> endobj 1001 0 obj [681 613 0 0 0 0 476 ] endobj 772 0 obj << /Length1 923 /Length2 2697 /Length3 532 /Length 3334 /Filter /FlateDecode >> stream xÚí’y<ÔýÇ¥B&2$?k$ÌXÆ–m¬Qb*dmÌü†aÆŒìe)ÑcË’"Q¶IvbÐÍ.BÈ£ä‘ì´QÜ©ç>Ïívÿ¼÷¯ûºóûgÞçœïç|^ç9)ÛSÊÆxªhN¥Ð•‘*H]ÀäF@ª  rr&4K'R)¦X:¨ ut€1ÃPCH”®ºŽ®«0¡úшž^t@ÁDñ[‘`LiD–œÀÒ½@2K‡%§¨8"HRŒI$óí…?€ýAZˆW"‘žˆ£ '‘Uýæç…@´þ㾦@š?Ë À2©°,â©R€ PU*«Èròß0õ³¸9ƒD²Á’¿É³fôoY,™H úGžJöeÐAp‚Ši”ŸKÀ?¬ñDùçì1:–DÄSJ´yÐò¬‘7j4 BºûÔÚïðËJÇÍ’ë0þY®YÉó_ÄýãBízÌ—#ü3†·gÎÍ^®w\»~"è¯ôǨwõÕC š“ƒ/»ŠRÏæ·ß\éx—k«`zú÷ÝRlªgE£´ͯ“ÎÄ\ª”W—ÂføÅjÄLžLMæœì‹ ÷Žá®Q_¥60„6ó¸o¥l»l¼4r¹1Œr¥ôx='“¼°Wâ-•4$ãó®fÕÖ}Ù,½¡jد^-Ÿ˜AÒ¿‘‚E™ÕÈ$? ­º®91t©+÷ü‘éz ZT©§3hY0ÏF,ŒZ(6Ìîe\~ÞŠvè|3RlP^÷, >ÐÜgEÆÄ/ÎCù·š5B'šT8FìÓ‚EªaãL÷ÛyH>ó;_9 %<¡Ž;KÌ]7ÌyWè—‘ñ¸ûÕ‘‚§º˜æwY;õ8ˆ‰Kãž±Ms›ß7©.0$ƒãWÅ$ŸìéÑ>§f8HÚ«Ç)û$N t ô‚š6ôeëÓ…«A?¾83èø·¡_¥ú•="Q¼y™ìÚ×Ö&!&z{|3[Â_yõï,Úúõ-+WK=F=ã=Èyëá#™uiŸÝã$jÊŸÙIA÷Ï´¶;fWÓR\yëKKmÂviÞtíeÃ%ô² —z0|¯ó¡Òb†õf)jù&@¿ÂÕ2cl…K·“¤mŽÌ î|B!ö5aÈŽÜþíùJ¾›I;kˆ\«ºÛgÞ±û¿ŒŽI©éVôI˜žè²ýêÐÅÏáþB-y1uÖ­Ó)*í6<µÑ_òKÂTr#Våuo›–‡·Ì'Ø̕㛃0‰îr/°\ã:Yz=Ødh$Úh|2DÂ|εY„Ôš¶µÓÆÃy#àò­ek ”?üü‘,àÀ±ª1ÍBùN êþ¨ê²üÌ÷lÃ|ÕŠñС×&ùoûŒopHiÇV:m¼J)î»ÛØyûâú8ÈÑ-zé£GÝÔ‘„OQ4BÃ28-4\Õ® ,Sø0PR3߬¼Ïn¬’Æhê%x† LÛÝ_acVÓµ¾‚+L‘(½®[ ¥§ða¥å*ùH3÷´ðœâ@wŽÌ-ݳ´þÅnù™ÏghÂóµ^¼äÑ)öˆEö_%ÂÇ”¦LÖj\ƒïaªô %‹›ð ɱ•UÚßÐŽ{ÖÞyä1iÀܼ«þ wKanÓ08ú!üƒQÂiIK¶%`¯£Ôß¿÷jÙöê¡§Ã=I£-ÑÙÆ p^5ÒZ% ߘµ;{+°EØ…4©ñ²â(dí9-ãDz¥ÇÅet±uf¸'ÒuCžCÖ«¡½ Ût)& Ô9óüh÷ï³â·å`¢tõÃòzKSxäòß{”º÷53ãßúíÃÊ{{ƒÊʰ O¯0Ï”ÞçªM.«¿€I­_Øh/ ¸¨|5Y´}XEž_é¹¹7"sj\+„ާD‚y1žŒ¾Ð¹¤Æ‰ñ1=o©õž½6jÿçΛã¤HÃjt¶Çì`p´)風=È}çs±¿”z´¿,“¼äêø"°Õ€öØ-‚â™|øÂVþ+¥k|NÈjÛéêÝŸCÕW›3O<Ù`ô /ÎF¹1î|$3ÙæeôÝ+öp>Žªò!9ç`!„󚯠ˆâÖð”ô¸oa äãIÉb5Vý…[j¢iÌÒLƒÛÛ'½u³Ú)·»hB5nWÇFò½ñâq¤ÆÞe}«õÈc”Ñý­¸s_–å¯mˆÅÍ.ëQöyJ~ë¿'ø‹jòvÇ#¾ìžÑ“æ. ¼-öo wuïütË7?¥7—QÛò,›«YëG›¯ˆ™`Á(T„Ö‚ ovBïUpÙ!è)cu‹å&4oÄ´ÞzöhcjQ×3Û#§ÐŸ7b‚„óÅ+Ñ¿íJ+†\/cƪõiu<ä¹Ó¾‰¥½»ªÓ1=E~"û¢Ý| †¶¹ŸþÒ÷›ú%E/_ÊÀG°$bW>ÒC¦SôƒuVu#“éYW„û-ÞÍåëvZ)}ó¥x—Œü÷v‹Ž}†Mù]Ç›ñ’aœkm^‡›‡rÎ)OsJæ2®&9•Hʬö°oÁ1ÅònAgÛ.>¢Û޼ð„k%óoà·tŠk õWŤÏð©{Ñ|/ùEצ«ê·‡¥¼qW±C­ON\¦ðϳã„D·îž¼–“]ùa}lØ¿ÓöU“l yn"ÖS¦0õ#âéÄ¢ äôüõCU<ݲœ¢Gá"…îÑ+cqÌLÄàqj%‘äåüu½§· ¬l Lö†^úÝL¬Ð¢ã”øx#åµä·8Ñ=n2æÐK(c MFéqWº—c@Teòñ¯ºW£¬„¬• {O÷ãÚsœ8i•°~±”O·œiÅŠ/­òS?^æ}'ÕÛ„¹X•™ß×õ$.Õ%_Òuî]5,—ãh±Ê`Ì m‘“ù‡©[vÅy4ïŒ6à±Ý±²õm}iÊ`ªéíKƒ}¥…‡,ª7Êz¿‚Cfô‘òTn«ƒšgayÖ5o|\5ar‰Â›7L>^ä+rè~Þ®_ððT¦ w xæÍ-[íû˜Ý;wøötì¹q(9+ÖjóÁ ÔdzÙ+%Sí“”*ù®þv³Ÿ­Ã¥’j]™Ûfœãe‰áÐb”ml“| É|FLÐN2°7™»¸>’.$~ˆO bþv¸/}!Ôs¯ú¼¸ZgãM„·¦¹ß®“SŽÃSnï¹µŒY˜¹ø.ˆíäÙýý›— 4eš¬ží0Õ«éFãšqŽ0ëàŠ>уfû·N…: …†›O»2—Çr…y¿(tÅ51æÒÏh=ì:uÌbƒ²€•íÐaªïS®¸3i}×Ír‘® ûÀ_r©ûŠÍ?úàj`_³ùc÷¨]a³‹97sœRÉÙöºl+¯ñ;$-±—»<0yŠ}›h$­È+\q×Òc#’mdò«©1ÊhüsS:÷Žœê¾¤"!'7®…5‰snS¤~%îpKݤûåo†n= ½®Ùç*¥$rœzb[‘ NuÊÿT‡sØ+s¶»bÚŠo3ÎcQYC \‘õ{|k8Ò‡ÐRvV³Ì7í *}DYe5*S·|Ê`™QÛt-§ód_Wcj]Û–)uÆèËŽÊÄÖŠŠaÄ Y²qÇóãÍÈà÷nãl‡ÌÉ×Ù9Àj`çŽòGÝÕ­oˆ÷í d×[ÿáúÿ  ÄÒèT2–æý;äå­endstream endobj 773 0 obj << /Type /Font /Subtype /Type1 /Encoding 1000 0 R /FirstChar 33 /LastChar 116 /Widths 1002 0 R /BaseFont /JCRIWL+CMR8 /FontDescriptor 771 0 R >> endobj 771 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /JCRIWL+CMR8 /ItalicAngle 0 /StemV 76 /XHeight 431 /FontBBox [-36 -250 1070 750] /Flags 4 /CharSet (/exclam/N/a/e/f/h/i/k/l/o/s/t) /FontFile 772 0 R >> endobj 1002 0 obj [295 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 796 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 531 0 0 0 472 325 0 590 295 0 561 295 0 0 531 0 0 0 419 413 ] endobj 768 0 obj << /Length1 757 /Length2 1052 /Length3 532 /Length 1612 /Filter /FlateDecode >> stream xÚíRiTWÅP«€K­O9„ !€hY‚¢‚KE˘LÈÀd†$ ‹Ô5ÂTpAA«Vq‹,R@©¦¥¸ '`Q4¥Ðk{Š?Û_=}óç}÷»ï¾;÷}ö3øK}„ÄZ$€ÀIgˆy¿ P6€è š½½Ÿ I”Àýañ‡EpeˆíÉäx2\iöÀˆUÊÐ(1 üHîÀG‚ÈPŒƒ ˜#JCc`)!@RI>BNÈA("GdqˆNƒ D$X‹D¡8ÍeÀO ."€û{X¨ˆýЊCdrÊp L:Ê¢À1%""š  îB('ÿ†©¡â ãÁ’y*£º°Å”ô I¬‚Dd ˆ"2|(u9òÞZ"D’¡Ý@ÆP…!€ñBåh"䣤@ D0&Gq5AÅ6hÁ%4|wA¸Óàk¶ø0Š“aÊØ?E¸ƒ5ôWMe#CÀ*Á€("õ}Ø­rB§ÆÅ°L+iÔ\P ¬‡Š ‘€$P~]è8ARGI2ÚÀcºq€ # íãðõ%Ö;SƒæìÊ¢T!¸³I'†ã¨TúƒÁp÷à ¢…L†àäàÐPù|¨E(•&‚$ ZK3!ðJV—m)Tqóê‹Ìæ˜øF•ïä¹ôý‹”{»L°Ã·KçüX²ÂxLcýi»Yûôø^ù×U‰!5†ÒYM}íq‘íšu6+^i‚”?ÇÚö¤tŒ=_ÖØý‚eÜð£®pÏÊüêœÎkùþaOF=˜1ìòª¸ÒËÙ©l÷,|ëæ’Y̡㲤…in[õñãöì6Õ×¥¨¢·šŸsºßET)¬Œyæ¹™}ÝϾX5QÛÄ^×6Ý7K01œ¾}¡“ÛôíyßdWTöOh]æ×3Ëfí̽µ™0›{ÎnwÓ­Ö)‰¥9*ú¦›u“¦ô¿ûÊwfª¶-âbù뉶¹SÝø ótoMk¾ëãÛǘݮ6\ºúV¥{i­¸Ã­Í´[zMO÷cN“?Í®’>¹˜v`m¦r¾áË›z÷Ý®×±—ÄîZè×Sù[×Ûžtõ[øÒT9Ÿ¼®Ìò®æE+­§5¸+"Øê—Þü¤–š¹ëžgL1I²³ž:úå¸%f ,t¸8ß8WàQ‰u-ñ~\ùê9Ë|¯9pm|ë´þȸ>á£W|!x lç}t'#µÞê˜Ì‡¥£4yòï<Ìõ…oBÞØÜîÙn¦ñ×§±”d™Ï5¬°vb!F^=´¼7Ö³nצÉõê‚7Ée#Û {N¼½¸«`tt²¤ŒwSÄ.LQ7Ì!3éånÑÚÅkž-ÕÍM.,îu(ÊÜ»ø‡Œ«wX!·ûœf§~›þš;¼£°¸1[i·^» 2ãW1žK?…W¬ŽÎoO3<Ê-:½ô «±è·Ñ–]È5z:æYÊÓÊÄ¢åùµÂ¿­ö¼áì©VNnöˆÂµ]+Ëí “*zxæNE+ ºn2u¬q¹º6,;‚k—QoÔÇìo`Gœ;[>?t¿~ûOæÓÃ-⦓^wVÖÛ<ìvžhis©`Òµ?5HnÑ{ižüjyŠU+°ú¬ä®2nZ†*§ãQüR›¦м ³{rªù×7MI¯ò:ðp[ŽªÈbO —ºøyõˆŽ5w±õ|ÇÖ~Söä+ûÔÓ$ÝOÉ®j¨mãv‚F7>Ÿò*¦Ok8÷öÞÆ©‰mï„ݹ{Û¹’äºc¼àŽ›ÖLñ¼8íE«cAš~µÇÓ׿1nr>:fX™úÐý”n_õY“¢{&×™Û¬ç;´J«{ž.â܉©sÜ’µ£Àþhgó‘á<Ó¦.ù¼¶BLue›Öê̽®}ÝËØº_c쌶NNÞ¢xö\^SZ¹cä‹øì½‘¥Q—o˜'~)yyš×"͵{Mw±‰,Ú¹ªxëL˧®g¸z/Ý“Æ< «ô9#+×ÕìmÍ)ž@BgŽÇøjÒR^œGd+/mA"‹9%Œ¸hÿ ü'ËHBËbh¿Ýÿxéendstream endobj 769 0 obj << /Type /Font /Subtype /Type1 /Encoding 1000 0 R /FirstChar 49 /LastChar 49 /Widths 1003 0 R /BaseFont /RUJEGU+CMR6 /FontDescriptor 767 0 R >> endobj 767 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /RUJEGU+CMR6 /ItalicAngle 0 /StemV 83 /XHeight 431 /FontBBox [-20 -250 1193 750] /Flags 4 /CharSet (/one) /FontFile 768 0 R >> endobj 1003 0 obj [611 ] endobj 1004 0 obj << /Type /Encoding /Differences [ 0 /minus/periodcentered/multiply/asteriskmath/divide/diamondmath/plusminus/minusplus/circleplus/circleminus/circlemultiply/circledivide/circledot/circlecopyrt/openbullet/bullet/equivasymptotic/equivalence/reflexsubset/reflexsuperset/lessequal/greaterequal/precedesequal/followsequal/similar/approxequal/propersubset/propersuperset/lessmuch/greatermuch/precedes/follows/arrowleft/arrowright/arrowup/arrowdown/arrowboth/arrownortheast/arrowsoutheast/similarequal/arrowdblleft/arrowdblright/arrowdblup/arrowdbldown/arrowdblboth/arrownorthwest/arrowsouthwest/proportional/prime/infinity/element/owner/triangle/triangleinv/negationslash/mapsto/universal/existential/logicalnot/emptyset/Rfractur/Ifractur/latticetop/perpendicular/aleph/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/union/intersection/unionmulti/logicaland/logicalor/turnstileleft/turnstileright/floorleft/floorright/ceilingleft/ceilingright/braceleft/braceright/angbracketleft/angbracketright/bar/bardbl/arrowbothv/arrowdblbothv/backslash/wreathproduct/radical/coproduct/nabla/integral/unionsq/intersectionsq/subsetsqequal/supersetsqequal/section/dagger/daggerdbl/paragraph/club/diamond/heart/spade/arrowleft 129/.notdef 161/minus/periodcentered/multiply/asteriskmath/divide/diamondmath/plusminus/minusplus/circleplus/circleminus 171/.notdef 173/circlemultiply/circledivide/circledot/circlecopyrt/openbullet/bullet/equivasymptotic/equivalence/reflexsubset/reflexsuperset/lessequal/greaterequal/precedesequal/followsequal/similar/approxequal/propersubset/propersuperset/lessmuch/greatermuch/precedes/follows/arrowleft/spade 197/.notdef] >> endobj 688 0 obj << /Length1 769 /Length2 581 /Length3 532 /Length 1123 /Filter /FlateDecode >> stream xÚSU ÖuLÉOJuËÏ+Ñ5Ô3´Rpö Ž4W0Ô3àRUu.JM,ÉÌÏsI,IµR0´´4Tp,MW04U00·22´25âRUpÎ/¨,ÊLÏ(QÐpÖ)2WpÌM-ÊLNÌSðM,ÉHÍš‘œ˜£œŸœ™ZR©§à˜“£ÒQ¬”ZœZT–š¢Çeh¨’™\¢”šž™Ç¥rg^Z¾‚9D8¥´&U–ZT t”‚Бš @'¦äçåT*¤¤¦qéûåíJº„ŽB7Ü­4'Ç/1d<(0¤s3s*¡ òs JKR‹|óSR‹òЕ†§BÜæ›š’Yš‹.ëY’˜“™ì˜—ž“ª kh¢g`l ‘È,vˬHM È,IÎPHKÌ)N‹§æ¥ ;z`‡è»z»99iCb,˜™WRYª`€P æ"øÀ0*ʬPˆ6Ð300*B+Í.×¼äü”̼t#S3…Ä¢¢ÄJ. QF¦¦ Õ† ™y)© ©@ëëåå—µ(C¦V!-¿ˆ ©(â\˜þprʯ¨Ö¦9]KSCC#S#s £ZT…¡y™…¥©ž. ¦†¯&—¥æ•€Ó0Œ`ü´L`¸¦¦V¤&sݼ–ŸlÝ’5}[ÛÊ:×ÅV±êsþ<±öåMö;êfg¦Ô›Î TL/Yòjᣭ}‡Å³/Jx%[O.Ú"Ùë×÷e‘ðš­] –ELh0ݯw#X¼²¹kï?mõWž‡ ÃfÌi}$mµ¿èñ¬Ne›_”ëOðÌKyáµxß÷{׸…´‚&i)I™ß\Á~—QL¼òîóKžrûSWöÌ´ñ|oQT†¤g¿×ÿg»—mTn;þY{qÀ5½EW7ù=:tˆßù¬õ_ÞÚÑ™ºÕêûŽkò½¿óSêÝ×÷¸¹™¿ÙñÄù™à>.Ç…?Ṉ>˜mªcâ¼:?-nMÏ¥¹oþD< Ouò™8GÝ®~‘þj½©RÛ;/ª'EïÙÎlÇðZOh㉧Ÿ×Ê»,— _«sÔvbõ_Nå0Fш¶wfßÍ«Zô~ΦãõCæ%Ì*”?|Hð™_¿šmÂÒºùÚî=¸§w­Onëz¥zË6DØ­ºìÒý†é—Zän¥•Keýú#cÇl]•/ÕsÓ¶•wdOXUQu#uë÷¾'&«Ü·oø¨âå$ª*çXÁ_Æ•JjŽ¥2qšq1<ú~…î´¹Íy§i_X§ñ¶¸ºý'gWÝ­l]ݧSƒý-§¾q³˜ýv¤mBŽdÕÕy™2*úyr©¢¥ÛZµÖ†„U²>ûêtg!g}î"ß“‚úûkžt[TWTkŸn‘(^wéþ cËËóD¾Üµ ŒpU_c59™WHNëÁ‰¹sìõ••;oTÏ~øÌƒE@€ÿªÀÇ®Q†…É9©‰E%ù¹‰EÙ\ªÅp¡endstream endobj 706 0 obj /EKGRBB+CMSY7 endobj 1005 0 obj << /Type /Encoding /Differences [ 0 /Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/exclam/quotedblright/numbersign/sterling/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/exclamdown/equal/questiondown/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/quotedblleft/bracketright/circumflex/dotaccent/quoteleft/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/endash/emdash/hungarumlaut/tilde/dieresis/suppress 129/.notdef 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 171/.notdef 173/Omega/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/suppress/dieresis 197/.notdef] >> endobj 560 0 obj << /Length1 1663 /Length2 12905 /Length3 532 /Length 13861 /Filter /FlateDecode >> stream xÚí–UX\Á¶ qwwwwwî®7î.ÁÝ îî’àÜ5¸—Ü †sν'™sgžæ›î—þ×^Uë¯U»êk*2u&1sGS iG7&6f6~€„¢¸Ž†,+€™ŠJÂÅèrtºYðØøøØbîV6^?'7?Ç{@ÂÑÉÛdeí • ûG@ÌÞÂdt(ݬ-ìßç0ÚÔÍ@nÞÌ1;;€Ú?F¸Ô,\-\<,Ì™ØØæ 37€©…ÈåN²–Žž…ÍÝþû‘‡…‹ë»€ö]’ð®hîè`ç 0·°D`Qr|¯eñnòCê?'—v·³SÚÿcúÿêÓÿÈÚƒì¼ÿ+ÇÑÞÉÝÍ èhnáâðŸ©ÚÿÒw´û…dÝ€v 31+; '3+ç¿â Wi—…¹ ÈÍÌ` ´sµøgÜÂÁü?=Þ»÷O Uu]1m†oì?«AnÞNÖ?ùÿd¶?üÞ&@Ÿ•™••í=ñýûß¿ ÿ£œ”ƒ™£9ÈÁ ÀÎÅ º¸½Þ_¡wâø²@æ^ ¯wgfG·÷!€÷Îø,]þ±¯ï[ÏbùÏØ¿óú7s²Xœ€.v–n¢lÿý×6ÿ;Ì`±öv²¶pøâ~Ï|ß{Gó?!^‹…‹ãŸ€ÅÑÁâßÌõ^ÓÍóÏs®÷jnÖ.e°¿[:º»ü p¼@e¼¯Ãõ½ƒÿæw5W ¿ÌÞ»Åbñ¿ésñX@‰p¿ûCïÄÿÐ{²Äz_“äz_Ô¿‰ç}9Òè}12èÝ[ö½WPøCïÿÐ{¥?ô^AùßÄû^Aå½7Gí½WPÿCïmÑøCïëÓüCïtþM|ïsêý¡wàzÏ4ýCï.f^ Ö÷æáûz-þÂìÜ_øngõ¾ëYÿ…ï~ ¿ð½=6ồí_ø.e÷¾[ÙÿÁ÷ÓÇâð¾[9þ…ïVNỆË_øwç/|×pû ß5ÜÿÂw ¿ð]Ãó²¿kxý…ïÞÿÄÿy…ˆ‹;zù2±ó˜Øß;'€‡‹ÓÿOÔt9»[ÈJ¾ŸVVžÝ fî.ïGÓíŸW÷ûõôßl z¿Ñ,,¼,ÌV—ÍBmÒ[Â+¤Š¿UAÓ¹e–‡Nv‡5e 0Ÿl `,¸´ÎhX\£‡¡Û€ªÑÒÎäkYÌ-¹¶ñ[ÄüF|ÕYÂVÐG±è ³Ôa/ÌN Œ Fó‡ûQís£~¬’î;µ2\¬QÜmytC×+üdã)Â?‹†ª\^z½ ° œÚ^EÌ0§8HC0ÌïTød¡u´•8ñt*ãXì¸Z:Šku‡ù{¿cÎö;r&_L¾"˜|ˆ=çQ,༙fY´µëwQâÏUËÄ©B$ó8<£­È%œ±ΆºÀv3,Ùˆ±¼½aÖŸ²×xruMëZÜ¥™ã•1Od¢Óã=ÕE½O¦ÖÅ0j  F¼¤ ÛÏ.ÏÙs\6sÃÝao³s ùSÛxe «ówY‡&½çè¨öV‚½ói`èÜKR/U…CØH:­º~å4Xo ¿¾Ê^rè4#^’±QI²*É)¥*g,E îûËÀÃÔ¬ +;¢Þ€ož$ÊÒO vÛpMZÞt)Æ XÓL‹Ë!ÙCUg#Rye2qûÌ=]2“œ¿Ï`%ŽÁ9 ™¥¨XYÿr÷]!Æ"’>ɾƒ=ïÏ4-€e°3Œ ‹¼YŠ Ÿ¢†Ù˜û=yaF©‘úSø£êE£vPrä0¦$ZZ"õ`æDZÁ£è ¯s?†Çc”ºÈbØÛ909UÐ䤚bÕVÿUUŽHÉ»SHˆé$Å1qJ¤ú¡!ÿáμÚà¶ÞFôôʧV‘ ‡#X–ÊÏ$Ø-±JˆkJT¯öì \@S*·œ{3ã’÷r$÷§õÒ}ê¨.‰;Ìåßñ ÅÖ?Tw2ÉÄ'E]W A^öʪ¸¹‰¤ ¸0•ŽJdÜÌ<,+˜Gç~ýœ,jA^éºÄ-€è¶U¹RˆeßFñKâ ‹¨Gà~„8•j–¾OßÙÝcøYzgÊ4‹œdÍF.@“ˆ›ÅêwgÀ˜`ÿÀn:ãõ$‰U;‡’Ú]¥$]£Dz§£Ý‚­*L‹jªpý×ÊÎó?#¥sŒ4÷»M3Ó ¯ú^0ûäÌ4xÊçÚÄná 0ƒíz$ÉŸÓäÒ—{ήgÊî'¢rÁð_³Ä­Ô±¦åJ~ëÌU¥VÍÈ­®dHuieU6Næà_;]&2ôfIøj`ÎÔ@M†="²ñÙ›’þ°—L1.­ Ë‹EËÙHÖ‘Ó}†y˜ê†:Ë‘›¬5±½³çK[õE±qí]#ãùBÉÌÀä˾ÌsSQèž K^ŒbÑÕÂ%»uËÅ'|[1“̼o[30þ]ÊÆRóÈ :ccµ(À‹pg”UH[r¹)(mÑȇšÍïË2æFh{ê“‘wRÊ!¤GUùO «Þ›q„ä$ŒMfì¼uˆ˜SM²Tž•ÆQ0È–VäqW'œ¦ÊêÎÖñ…ù…ÉÆXb0ƒDrø‘ª „ۆΟÙ%!Fz畲šuÏJ%’‰¼˜4'³XÐüã (Ô{(¿@ñþbä‘HqËJZ#³ þ:Ñ—md ò ÿQ×húFšT¯±gé8Ûüm§¸ <—dMœ‰Ë,³œ3øÅByMã¥öí‰+Þxó,¯4Þµ~]™Ñ)<•–¾1úc·Ê~ÂÇ;Lûûˆ±IÏúã Ê5hpÀl¨g©–:ß¶§gðÈåî2 9Šã°ƒsâÛ”BHo Xß B¥|Y)tÒ,Ö`Õ3„9ÀÆçÝÑGÀ–¨/5÷_:­GX ÂJÛÍà7¿Ž'¦­-Ö'8[;j¤´óýi®Iöùú"®M‘wœ•‹Ó¡É%Cr»éU@ä™À(ù4·bäÎuØÖ>åÒœ$«¼oÉü(÷)á ´°å&Hÿ«ï€k;˜ÚÅ„£:d…ž·Á”ön@¤_ã¾jø‰—"ZÂñg7aq.{_xÒ7³ŒU‘h %ù5õÛ' 0_‚ŠNTö=sxºzqÆHR™†Ç¬tÖ`뚦sl«JE .«Øþ°úr<–°kçr¹2a„@­Õá7Û2Þ¼Ìxaz¡þí~âËÌ.^L9o‰ÙhX†²·S5,¼••êÎ>VP šƒ¾CÕånR£ë`b•Ïçåš\Îޫɹp«M—qnw;|‘»|^A-(àÐ ]„w˜ö×®Þ,~ƒ‰âÝ™Uç·Qf&>Ú˜¸ añ¼GVw ØÖz×ËŸ6Òo6¿ùUtsgCíâ‘PúNlôk~It,X.ŠŠ¯ c“ZbšGk‰qÙ³˜´Ñï­ˆrb/Vp¥¢ÉZm3oðŸaƒ¶f!KÁjÉL¥²œ+äÀhlÀê¼­”·.Ø•.–9íœh²xOÓŠܲ„]Ê,ÞŒÀÚM]~?3ŽŽ{b¬…x<8<|\ã\kP£Dé«Ý›?·P}iÍr¦×„¨'ÆgÔÚ¦hJ¢xr²5Ï_Ô—é[‰èZu¯':S]ˆÈÍ\6‚p¤jCädJa þí*‡.”¤.w›o‚ICš¥5ŠU¿—Rý¾·ag`JÅŸ-æÏÄûÑ£‘ÌÉ2ix,6q[VÄ8 F$ow^Ô4¿ËLˆävÝœx7_0€ #ÎFe`'›DÏfÑ„g_^1Š%9¢%M…¥Þàå¦E+¨©“|¥¼×m±çˆÒTS©7ûájEÿ`Ûp*¢”`,–ÍJwë%UyÀ7RÄéO!ÓBö•sùºk°CŒã™±ÌæišøçUÜ\§j؇¦™ÍU8Þ ™UFhá«4¯»`ñx…m^/j ¹B–azêÖ0AZ7G•¿«n)d÷Z©«ÙÕùšgÅ)\©|q[uÔŽ;®ò= £vﶉlv,O)šeÐ ÊN —”òôi½8pj‰0¢?:îêamëªÒ'äµ\7«Ã¾Ûüw_~s‰ùž›]ûü0:22”ÇéP`‹¿ÃìåÚ­DâQo< Š NäÇHºGŒšx¤êun&ì8+Ñ$Údÿ5 á-æÄˆB¨3@®j­ÁçâMHc—…äuÀU:R>4çÉ“#ˆ„Ík:3¹)ÂR"fOØ«r·ï«’›ĸÙŠ ÁKˆuù€ÑúT~l¾ÆOÄäî BÆx'ð,+«,æÅ£ƒ¶/õ(Û¤ñ­Å½ ÔŽu²ßøÉÚ=\#ÈXá^¿a‰û¢‘XÌ¢Ìdãg‡¢û¨p=Á—£+ó•ÚÁ“`'yTpÛDy_·^Yin–`ÓîøF!'ËA° "3r¿W6]Òdªý]~dê¦[Þ÷bS›€Øì°3y©=m‘;̘t”R¯A¢œAHxnÆ£Æ1°‹^xJ9Ãc{5ÅχÑ,Áø;-ר/„ ǹÛï¢ûà$J!³KÌ^˜v–ã17¬|–†Yã¡hVÞ£. Q…ÏV„;b°{Ú­Lb+¹ùv€É¥ií À™¸CG¾Á]{”õ>æÒðsƒDè9­yW–[³ßÆ‹ŒÇQ´kG‹ƒt)`‹ú|™u%”™Gr¥¯>¬Õ(p¨°‹~ÙúÓ¹ÖÒEJA:„¤:Ï÷¨ß*?aÖo!ùÂR7Ç?9¸SÄ^f½ˆtô9ϸºRå´ÛÚ˜•ÍŠÕ!8³A—o–ia–U–IPã)Þ™2œÏcÚÀu•+î±ËØ=ɯY'úéìÖµO™¤7)ãê¶²HÙatŒÙòd{Lv+H핟Å:d(JçÁ'DµPî\œé~×ì9®´B*Uu<ù;ˆŠæåÇ)YF)zü&Pƒ:ëZ=/nLYÚùúŠF~¡ºÇf@ÿ‚„o¸¨ds=³†£häœå“‹ûoèÅÍ!/OVïÅ¢ˆ«ÙÛy…',šL¤†¸“œË¥”g دŒ=ì‚a: »Â;=:Ozxì>Ì ¯˜ =.¢“ºRúãø†G2­šE)OJ¤°q]œÈ°j_l/‹Åˆ§ÃWÜi7@›¯ðÁjͤãà3Ï )G£—‘jÆœG–üé@áæñQ—Ò•ÉW^[Übˆ|ZA“, ïú-.=él¥ó™Wì‡4û!È­ ¬„ß{OÁo¼%¤67DÏÙ‡hŒkÖ1ôÛf¢8‹ˆ¿ý}nq™%qÙI±Ö!/¯LGª(ï~>œÎâ§³y‚C*L•·_ÊäÍ9‚koÕ÷úAÞÌzBÑ›…ýÓÇOlZÖÑUYú'3ÌÍ LþlÊÖ!žFÑ>G€*D+OèCš™û]fnÈsº6‚])ä–¡;Ó¡ã ذ ·sx5œŸ›úEFƬfZ·vö27ƒ HÂ¹Ú ÷…úÌx²Ó¡³Çè)a÷ý¨AÞgdªDÛ=>œLÑ7Ò_ªé/hu¤eÜuG‰Êè0³$Cý{€@/#g+BRB>íÚ û» 4ñ-^ýÑTÚOP;œðeÉ“ KLº‡c-àÉÔƒn,€n@Bž0Él^ö ,kJÜõà\ep9†?™í’®ù™ã#þ‡ŠâøŸgC’f<^×àlK¿ÎªÎ«F}jÂPå‰È©ð¾û꟬ôJ ÌøÃCWà6;÷«Ûv°˜£Ë¶îMkC3ð£Æ÷ä¼{U¬-Hy)i¬*1o,¥ˆ¥à¢~÷e=98ÞJ·3ñS¨ øƒ™qz/(` ûwÑ®º€ÖÖƒ1õB ûÇG•«/½{Žú²á>I¸àë§áˆ1}ò_z„÷ð‘PX_€o”½¹fLVP<êT,w=«vJüùÛ5g0H‹ìrË1°ãšëÃûФ̟L†—düߊ‹ü›ÛŸoњ؎d÷÷íø¨ãj5½µ:Ãà_ÞÚŽ£´$z…íh‘îûÕÛÈ€kœ“Yµ5ºûI˜./¾•N*:k6~™ +dí,2*Eì tò½Hì©d^ÂôÀÓ èõ`BǨ‚öa{ÙîÂ4§Ò˜,ÈŸÏÐs?ÎÎùbHQî@çlÄ£âÑ7rw½”|Ó4Çw˜«@ÿ’ï9ågÚRjèj7w¸A4ªŽ&ŽKlÔìq ¤C³qeÝ„ŽÆÑ¿Â9tBX€ë¬µ·VÏŒwoÈ»SÜü '9ä‹%5¶å¸†|p[s%LŠ¿ðáËuciåavºýW³9¸žM”7í>/füòOCäý^4ìPÄ׾ܻ`¸Qd•O&.Ï’mdƒÕTÑ|Õ. 1„žG¹ªƒ”¢8ÊßQ°[%|ÔûÕ äFý6ÛîV Ä"Z:pò’–\¦mt<•óá¸àþê¼ÝF@ø SwÀóHÃ3žô=•+¾KVTõz僅½ƒ‘‚ÎÚÕ§“þmЈ”礣ª¢À ?fC Ao˜®Šåè¹ÄdÛ¯ÄФç}–8Ðݨ“(Ì$@I?f B~±Œ{ø\ÒÝ]‰ÊÉÿ‡z¦©°:å~Õ^<ÒØþ«½•©*<½³jª=¹XÕfRËÑ|5ãÆf²^c1ÿ»h»éŽÐQ] };ñ÷bÑj_ÒÈÎã!8 ãÁÉ“5Ù7u³WÄ|ŒY„öu(zªAUuuVWª„Þ6ÜÆ+Ç–ÌP‡ÉŠúþžb1ñ­¢\ßO0­r“°¡âr”öÅ#G‰¼­™ÃÌ ÊR“¨}!Ü­~Ÿ#^Îðf0ßÃÕÁ²)ßE \ÛsüÍž‘*·Ç;­H¾l?/ë·ô &—PGýŸH»«½ç’1@™"ÛnG´.ªŽÂ`-9ô“Çz·‚ÂMÈÜÏáèä95]o|Ù6©È(Ó͹r­Uô¯G†ò,—e&q¸ûŒ¶ñ“ ºrŒ xÈ?¦6°Ü¢Ö‡ëv{µëµê6ÁiMPë—>U3ól|l#Çkm‚Æë¼¥cÕàÅÅš©¶&m#I_[£'Æp+¨Ücvp õN¥g7òQTU-T<…~™ò¬Q†}øè¯Gˆ6d8+ÛŸ„–nH@¢3Ù‘U½h²1ob‡k”Ñô>äÆé€Ç`{Œ‰ø}¤6fàn ²yâÜí6OÄzž«­-¯}i»5êfúA‹î½áAéƒÓ™íµqß“ßá0fðɨI}.f°kJ\³£Ã°º;:13Iô zá6„I–lUÔÚW>‚<î¸EÑ©Å-9= ½çµ-å•× Ôºˆtà˜Ü¨Jkrc:X5 ûÅ^XÖ¸ ™ U,tX ¢Xì%»L$Àæxí.`àD½FñÑ”zBóbZ ?š¥»8Êzò²€ “/JµMIYP'ù eÜ9TÈ™ÒàPÕ™Δ'Þ(âÍ#¼¸àÇÃcfÉ^ÑÙ“oáKKYÊ/"Ì*ÅSÑq¦!§YšlÙe‘S40pו¸f*èoM1bd1Qt¯îžµÕr0]–pÕ)ûS>y0Û'ñvò8žÂëLkGfÿî büµaëåIãÓìûUêÒ9Mf¸LâÅV4A†n$÷p=déT… =ïúÉq7ðÉ}Y¥ÅÁ+TCµJ˜®¾ãFÓŒ´}¼³E IšËTÛÙ!³â>×l(Õ9“ž§%}bŶ‘¶™eCÛ‹ÔîJFP:Ò˜ ù\¸’¼™I³(ÖצŒšÝkÊ"I„4Îà-˜äBifr9²ÊWÔCÚÍG‡0ÊUî¹Ï]Òy+¾–y™‰·õKÉ4eàÞ²‘}_³­v_N<éòâã™×¬Œ'µ¯<¿ðŒI›çgŽ›‰]³ÝŒîüZ¶‹½lQRh}ýY&D+«››¤=&S:BÍd1´„íŠÜùà5½ÅpTW\Ô•±¸é–²´¤b†0Q¥!»§íÐ\¬&u!Ü7³îȸg³J”T5Ý×`‹+¤l¾6;®'ñ†¹zZÝ»&ošõIîMìG¥üi _Ǿ±L¾aŸÊ+Åöâó"óöÒ¾ò4QÎA ·w‘ÞZn›Ú&Ë\‚¥LŸ-<Ã\ë*³ÎÎÈBÑpé‡óOYdWôÓ Ckl¿ža0“Ѳ¿´´ÃWʦsqÅP#¾ìÁÄ]p­¤w¨H#ïxIíüNŠ™c=÷UóLîX‘«‚HÍ@P?â„1„ЦÅYºlE" ÷•)2ZÝX}(àÏž(+5ý‚ä\eìÑÚ¥  ç.Æ­cÄ0ÿâv0C÷#«sZW(¿Ÿ¸G¦P\Ga¹2F„³fÈL—`Šš#„„D4~½& ©é›®UŰ9:+³XH¡Ä`ëŽýÃ.ß–¼? {&‚ÝÊòküá%“îo˜ =¹kEêGÑO´GSâ³Z»g!+у\¼' o°)Cx2ĬÈöeÂŽÁvßéÍ’OLxÄ׬ûg|£ÍÆÜMÕ·¼BækR8=¾þÚ"Q€müñ™‰ ,Aç»s…™h›ºV펗ѵ‹Zÿ3 eRëKm Æ¢‡äa/z¢OóNåO…ëƒªŠ»çQ¼S1tžžòŸhŸy|}C‚wðí_ï@´U ÷¬S|ÐË¥>…÷<ê L<‹æ¨,„kÖ9_ûk™ëõ —]N$Ä‹{1ycröX á Â$}˜úY ·šx¨WyÀ?¸Â$“6ÎÕù/)c;`{»dOwň11s9 Ö¡È9F!‰®ÚLÛŽ.6|äØé'âCn¡æ<ÔÓG+›ÞAþ`ÐenÒP/àöÿÞäqN¼úê⾊QŸ³n“•ÃPÜ-‡Ü‡Fc£Ò—ôKXé“ÿ| øj`Î|g[2Ók 4ݬ#ðú@&×±gÔ6JóÖ3‰![»z¼¾EjéBÕæ~Ç&{áßß«zqn\!—‹ŽJt@®ÁgªÔ~½éxdS‹5f¢r¹£=84?"¶-×}[.ü!»„r¦ò«ÙÕ§Š*|OY9Esô0«5ó>+ &[ÄyI½ŽÆð!:ªÒ;­Íú#æOÐãc®A@5¸x+le(„ÖíEk*Ó -Áù3—f/¿û…¦Ž…ã¾*=J0kTŠ”áÀ>n C¸š^ëo~zžäéç»ÅÓ†b%ÿß¾o†ï,¾ÄÆKg~ÓSô„wwÝn—ÕÒÍÏÿA-›P~Ik'ÞŸb™ó Ó>réÄc]×WM¼ Ñ"6À@úKa5zÕa2Ksøí7Ph…|p|ÊŽõÉ×XïÿA% a5wVµ†JwowN¹NEv·#ñ•öÝZ›…Ÿ<Ð`mÀItSœ*4Äqšt!  ÏUžÐ“·b`·Ú˜Ûy¬:þJÙ¬¨ô&è·Ü?íä1nÎê{=‹ýL³ °®â¨ ¼×;fùü°Ÿâ+ÂMª¤Gü³éeÏ5,)¥¯ÛŽ_5|÷ ó^‡4&¶s~w³Ò[4ƒ˜ïn§$n‚·U±Çð­Ë‘?ª ŒåF­L¤Óa|àòÖÜ]C4ÒVoé—%Ò_ýòH,BÏQk…­ŠƒÆí6¾õì ƒí½;{ošÖ¦²”ÌqK¤.Yœñ ϯm€àC)®Å7›A»›µi4­XÁ*”|©š­N»=Çh…Ucmžæ–ã`JÆfÓó…­[¶òÀ¼`=,Ãä'Òíµ=£ ç| ¨„‹z‰“LV®²'PLD.SY+ÿڲñ~#Ö©eš"WŒÖSQŸ^ž>ÔøªÑ€0v¨0~Œç·DÖºœ€œòÝ¿UX¼´H'¥ghÿÈ´¢ßD3S…ÝNIC½ÿEBɬõ[W°h w¡Z‘ûÊ0).m¦VR•XRîÖÅ© Î~j¡¨æ2s?Œ¦Y“vޤ®aDxà‰—­˜¡½ôQr¥Ùû—aËÀ…ݬÒiÆ6 ·Õ%Y^T8?;uo3J²·ì7Ž[IApE\j7C)òiæ¾ ìØr5¸eò”°shkªÚÕj¼ÚÆï-;¡_[© <¶r‡Çc~šfwØëTÝL÷™¿íV©¢â";ïÉÆ•¦ §X !ÀÖ¡ÉÔ¡DXõºu^2¤œ¨¸—·…HÆÞ¬ÉÌÎÏ‘‡Ìí)ÏÖPÎ/2p¡Ç×NTk6ÚþüQkíT°Ç4ip4é¦x³tí6¯%Pè„"mEê~»ç}›š«Ýc ª¯“A[HÂëù¹Ôj µýÂkŸTb€Š§X6ã.è}í 'l÷ÒÁÙ…´h—ÚʦTb†ìÌ‘QOoÙÀ\`Pò}±%Ä?ƒÎIËqÀX1¹*àhöNÊû‹ ³cI êo.Þ-$Ã+ 5õϻգ(Φœœ£8!–ä¬Ã§Ô•‹Vìa „¾Ú3ŠõX ‚Ø ?{Êh[¡´ú*> pz#¶Nú) ê>Ô1*¹ láþV—grÛ°fd¬M—\êüîµ\[¥oI“8—ÒŸ3™¡q+4xAñp]¨¯œÏ”D%dŸÜ.¿äž¢¬úĦDó0&ëóPÏ>ü¹U)ªÕà7‡ÙÚuƒ¸ìàÓõ’\æ/䥟ß`–Læ¸x—q•„«àoC¾åg¶:Æ@Áú :óCáßU.Ú– ‹¡ÓÁ€g›!h?=ˆòåLÅþǼO@ïK%N*>Âöç\ÏPežŽepCQæÚhT²>RFQìtE˰ øìR½ˆµ àт߾~ÿ3uû£ž¢)AY­7$øº™ ·Ïù")Ý= ×««xºŽvT'~gú ¸LK?ìä¨ÓrB¢ùů‡§¸£5ãvgÓváòÅc/,Â|Óè©&²¸p~÷Å6¹Q"ô‰,iü6hôµ'$ÆAœQ@ŸÃ 7!…C±°qϸ;³à©EJ@¿ÉæW82(s»mTJVÕMþ-h7°ýŽªä;*Uòƒllh¯†MÆ^Š@8v$£³™=È…#pk´¬õ³uŠ.áOKR½¯¼.Ù\(O8Ê4*·cø ßJÂ[óõû]’’Ÿl&n§·Æ.ã|”·ÉrôLÞXL,æ0’ãS®øcEy‰‡¬ºË„Ü÷<[(†¼Éd£˜«Lžì n Rμ¯A{ ðaÁ˜mòE¸L@Ú t²ªÖÚQ3IË)ØR=ƒ ûab û¨á¡ðŒîçEëaßÙï¦i¹Jqð+d'¸¡€Üìa$ói|òæ­ÌTRg%ïVÛo±v\= ŒÁTUÄÃD®ªýÃnü–}« ú aNH0?GçnFOX*á×,L!µßìÎ@CY.â3öA''&$‘A$2|ÆÚÊ>WK± c^¨Ó“Ÿ}­D›¸‰ 9·ÚŒCPäØI>[ðŠ¤–|ºÌ—tŸD5\ê±t´Ù`Óx3µ‚2¼A¥~+^ø°Ë§ÉgÅc”¬õÉ‘Ä`ƒLÉMß6wȶ‘«jÔ#+lÍew¹Ý&G+ÊuÜLŠ»]1h½3&ß%gαzR¸ðê>¥#–»3 ñ® çmËÔ4£„Œï”ÞŒp\öUeÑ!ÿº™fk.g1‰”lºÎ,B²ávÃCÛ Ô÷9 n˜Ýfó¦÷K_¬Ke«ÙQ4û¥ü‹•ë 2tÌ•™¦Z¦—ÍqɃ MSs·±JÕ-™Í¶Q´ßšMäY7]ž—í¼BÃÇq‰qFë„§dá²í po+«á/7Ea #ŸXZæƒf¿Ddœ˜­HTò›_ª¢í½nÌ›ãùËcäÝÙå—Û@ãû%Ô¶IÓÂÏʵ±êkSõEÐܱ×ú=l”|§%G‰•zš¯³ˆ‹¤ž¿;[× –Û'òŠC¶ 0ýrU—Â߉ã]‚R<)?r'ù€Ö\SpU4 çÏbø)àÊmgF} É™VPT³c-àäųy׿[ñ«y}z<­¯qÌÎ%.Ü®Øp:O<,ùNÅUí1Ea,B'V,åá£t¶®>Ëð ¤)í+ ¸ ‚,2œ}˜âÇó³Yö, Õ-a™‘s»‰e¥ÄÞNçlÍÌòRWx6ªl{âùBhÖ™6Í_5ôÉd³'U7•HÜÅVÑZ~è–S:ýd$¦åœãŠïù¹«á!&v 9ZL°½3‚:‰Äv%¤\¹|ôú+ß’Ÿ¦äv YrÍBÇ,…ÙcRh»¼ñœ"ŠJÌá­Í#[:4JW|$ý'ÙG£ZØç"æ l0î–ŸR®x¦GìUÜÊy+V©‰>Þ©à *§õ´e“¼$PjÈ`]û›$|øÕ.äÔaØô¡à~µìÜ’@t?Ýö«v¥ ëÉÄzÇV"Ñš>ÍÓ슌h»¹"L‰¼¯ÆÛ‹3xqŸˆyìLË|¶¶;!Áiå"2Ø]uÃæžûín£ .—_4Cp 4¼†mÜSgzæ ï¤xk ®è ø9Gi’:]yw(ÊÇ %;£ˆm¶Š!¡î|a«öÀÆ_ãøNÉgÂ=¯ Ïš‰Ï¹7{Þÿúµ]»¹2í kþ¾ÕÎö©­N¤„‹è­³³ õS‡Ö¡ßbC*5Â^Ñýîn”Rf]ö(.~Þʸ4{\oˆTNPŸ:ífAhIff¬¢IW­…e›útˆ‚ÃH R8KýÒsµÇEÓy`ÝÆï Åa[]ÝVÊsËþ¨¦k0{)à6@ÚB¡EÕ§E‘„ ¶ëi »HÆœ egPÀ†Úœ7TÛóm=‚-;u§Z›PdQ£7‚<±éª”uïA â€}ËÉ6RHOÔ¯Ë7€¨£iŒûù[î¼Î`„é#µÿ\jJXHêÚšç`¶c æV ’sBPVæeš]°é3«Sí~ÀƦ¥*ˆÕê·xu2ÒnŠÍwV¿ó¹4zñ×E=@/º7"%(Oh¤¬¦3£³€M‡ ¦.ˆöäU#G?± "Þ™õøºnº`]ö÷'.Ò†jtJr2œjaÃÔ˜4%—»ô“qQö¢†’â´[û°_>™kåN Zœ¥¹¸%v{7}^„Q©ìWL4@>sµ!e(ºúBUD=ˆ·ZamÑ7{’š ]ÏàfH÷NPáÆâŠ«ë§-7æxäÒBj–˜ò`¨´Ÿ›´ø[£C¾ƒ×ÇÎzuQãWÓ—Ê)dt}lk´ÜÎÁ”ÅÔEÅí¼K“Ú‹ú¥|öeH¨ª¬œ}ût¾÷­Ã«–é¶EGÀ¸Ð$kà•ÁR‰‚ønJ¹¨Œ|ss„b®_Fbóï¬ï8Ûäªülܲ]ˆE Ú¼À#'[•W¤/C¦rgL ¥³x¬jÌËRù³qÖ8÷”Õ!è9¦ß/묊ž§¿%VÚ9—ÚÛMn\C{ü`Ml^±¿¢¸gÝÆ’$ûb§cUÿYCŠÇIÃ+ðkZUž–‹D [QBÌn R¥DÒýêÒË•­Ð(rxYÞ<6{7{“ÜI—ƒ@ðÇ”öÓÍÁa¸~E3n&nT±`xum¦×ªu:°e Yzý²’ú=a$<÷"Êy7K Û%TA¡M%N¿f‘§ ãÂr“±Y&³OøÃ±UØ5K^¨Œâ ·ûíñ½¡¢:ÄÚ78'ÑaS‡#Á)§ƒ —ÆÔEeKYi½.I’}>Ú ûÆ8s|«±_%”}/ÏÛà+ƒÅ=äÂ%5JPí\„)¿w…‘/ñÈŽS¥+cŒÙ&_jµh3á±™ÍZ$뉥֜ñãØ‚À>jêâ¼æÛ:AŒ—ˆ¶ñNåÂòGÞMx<ûæŠÂ²FëM»M™Õ2äs_™Mþ5Í},²ø»êM¤Ö!5åÞ Ý³‰Ë#”§|ÏöÂòïÃùqÃ.oÛ’ÐÆyP¡NîÏc.$In¤_Ñí0}}­›ÉßPº2­M>æê1po%E?E­EæCÌ4-_ÙõÒãh\,ÖP”¿üâþñM¾}ÑígöcCI-êí|Ÿ …?éÊ Øþ[r [½dÞëÿááÿOðÿÄfv@7G{ ‹-ÂÿÁîjáendstream endobj 561 0 obj << /Type /Font /Subtype /Type1 /Encoding 1005 0 R /FirstChar 11 /LastChar 121 /Widths 1006 0 R /BaseFont /QSYXAW+CMBXTI10 /FontDescriptor 559 0 R >> endobj 559 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 /FontName /QSYXAW+CMBXTI10 /ItalicAngle -14 /StemV 107 /XHeight 444 /FontBBox [-29 -250 1274 754] /Flags 4 /CharSet (/ff/ffi/parenleft/parenright/hyphen/period/zero/one/two/three/four/five/six/seven/eight/nine/A/B/C/D/E/F/G/I/L/M/N/O/P/R/S/T/U/X/Z/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/v/w/x/y) /FontFile 560 0 R >> endobj 1006 0 obj [756 0 0 1045 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 473 473 0 0 0 414 356 0 591 591 591 591 591 591 591 591 591 591 0 0 0 0 0 0 0 866 817 827 876 757 727 895 0 472 0 0 698 1073 896 855 787 0 859 650 796 881 0 0 866 0 709 0 0 0 0 0 0 591 532 532 591 532 400 532 591 356 356 532 297 944 650 591 591 0 502 487 385 621 532 768 561 562 ] endobj 526 0 obj << /Length1 769 /Length2 1216 /Length3 532 /Length 1783 /Filter /FlateDecode >> stream xÚí’kXWÇ¥‚Àx!.^*<á¶áž„Ä*.‘p‰@•‹HkÈL` ™@˜` U(T 5b-A\@¥Ê"7A º(¢¸„º*<ÈÅb± XwŸÒ»ŸöÙ™/ó¾ïÿüÏoþ瘼?±r‚E!K„áVTkªØåå@¥ª5…™˜ì#\a.\qT{{p—ÍШ4šÝ2»D‘21†ò.³8 1ÊãbÀ‹‹‡!B•+Ÿˆx(‚ˬ“@|VD_$Ç °5D¥åá  E1Èf‰ñE€ù¾ K"?Œbq´ (Í€Ša€>dé6CT(ÿ ª¥æ,‰@Àá ìsúÜ+D²ß"a¤GÄÀK#bl©Ôyç…À¨D¸tÊÆ¹”ç„… @yßB£Y¨½Qœø\A4²ØG0x)„*¹Eo7?Ÿ½Þ¿éâЛ‹bø^Yä¿lÔ‹5õßµ*1*AU¾T•Põ~ø ^²™+ÆÁ( hŒ­€+seêö¨*ˆ£ƒ)@¤*bkL„«–U(G_$†N”ò»>ôÇqvIã¬ht`E³ßªr¦3è€É¤ù½r†FI¶ `P(&“¾ØåIÄbÃo*¥5UeŠ R„=},âmK ?s=¹$Þµ ³TÃ\Í9ôÆ)NU}×ßV&öœVµ{D™÷UÌ^ÎÕ]£ÔPn9ô–}¼ö°Ï=Ö«£Q§äÝï”1•¹±ß&s½dƒ‘†oGtn]ôz”¡¶ça_GIvà·wηŒ\ô&»ìÒ|FZÖSÝp.i+3€•+Ø—òE¥©-É— *I¥§(²³ÔOŒOѪ±èÕJþ4[ uáËw~ªio)®»Öi3¸ö— óM„>M‘1U?»ópY“ÑÔÁÔƒ‹DEqVÂ-0yþêåçw3=þ2$O#uûŒj…Ž´»Ôûù?;íGQ/œ°CSÞպΤÝ}&¬/÷?µS£³ÛYë•r+}‚Ò`[dX÷(Ùþ›O­É!Âîg§v÷¿¶÷TrÊ®±ý±4uŽï˺À 6x½ð|ºÅe6Ÿ“£XoÇÆ´æ„å­z¼îáçê³e»ÇÚûeî%¨%ìv/.*.×®)‘n7ú´á%ÉÏ”x²Šz,ʵ„5Tõ\³5zÃ}ùºÑèÉÓ3b…‘¼ÅÛ©3ŒšÏ^«‘Óóêf`ªG5=¨Í/iòh ±þAå·æº SjÜe›jÊXW0·ZmƒÔL—”°Dï˽ñ17·?oþgYSFzíÉUd]Ew•SE._¬wÓÎýÌ ¹›ïms@ç‹Zå|âšxí«½òØÞ –ÝÛ|RazØî<½/ ý"Ÿ|­,[yè§’ìöÈ•ŸéLÌ$´8Î÷eŒ»ŸM›ä5ïçÇ4…¬Ó+-ȹ÷ b÷¯Ó· D&çœäì3gï·4ØÄ–zvAŽÇrR3çW@Š'7›÷Ýû%v÷¥L´Ç3ÏßtCCZàñÙêÕÃcœçùî}ËS´{ºo8ŽsÊ\ϾTýHáÚ·‰_Pc²yyòOFÀç Sí»k¾zp9ysV ž)ŸŽÒçë™æuo™"ÓY°ÃÌDÆýÐ k{m‚‹ã‡èëÍD+“Vf”Xn7å+¼4´µξü®kÐ%¦:×ü#™€¾Ê)M®¨{ukô˳Aá¥iͰp§ he4’«Ÿ!þ•ùê§ åmý“”uµûòÔªÞ¿èÞ0~;}G¥Õºl#[ý®a!ÓÜ2,Ý &l‹€[2˜ŸÒ¶AÁ:~ñG•­øE‘Ó„ó\íõs?ñ¿3·'Ä3(Dók1Äé›]=3cV®,œ!NPáC%Üꎮ!C3éÛ=Rh˜^Ï]5>m´½ßšM~¸j•éü¼ôø'>Ýxµfªóšy6!ý»nåó>§_ NåxÄüL 4;Nìf^K9QùóH‡sS†åT%èj4»híiíïeË }{Ròd„íÊÄ,½“=qmÁ³…éðCÜäãÁ¤+ƾ¥ˆ÷¶ÙÕØièØ‘ùÎ%ÉMóyQ0mïÒ§©Î¾½ª·í)eýG{§ŸZÊ䣌o*´vÄ®ï°4¯’T“òt;ÿ@ŠñtjÉ‚Ÿ3'ÈZ=¥5Þuõô¥°7†¥¦Íd}IA‹.=qÉ»hâÅmÇ(£ˆ©¸TÖ^‹Ë4>€2~0QŒè0Z7”ôß!ØÉ¢ü‡ôƒÿ žáŠq‘+Ž€~‘ü¸òendstream endobj 544 0 obj /PHVQTP+CMEX10 endobj 1008 0 obj << /Type /Encoding /Differences [ 0 /Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/alpha/beta/gamma/delta/epsilon1/zeta/eta/theta/iota/kappa/lambda/mu/nu/xi/pi/rho/sigma/tau/upsilon/phi/chi/psi/omega/epsilon/theta1/pi1/rho1/sigma1/phi1/arrowlefttophalf/arrowleftbothalf/arrowrighttophalf/arrowrightbothalf/arrowhookleft/arrowhookright/triangleright/triangleleft/zerooldstyle/oneoldstyle/twooldstyle/threeoldstyle/fouroldstyle/fiveoldstyle/sixoldstyle/sevenoldstyle/eightoldstyle/nineoldstyle/period/comma/less/slash/greater/star/partialdiff/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/flat/natural/sharp/slurbelow/slurabove/lscript/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/dotlessi/dotlessj/weierstrass/vector/tie/psi 129/.notdef 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 171/.notdef 173/Omega/alpha/beta/gamma/delta/epsilon1/zeta/eta/theta/iota/kappa/lambda/mu/nu/xi/pi/rho/sigma/tau/upsilon/phi/chi/psi/tie 197/.notdef] >> endobj 521 0 obj << /Length1 770 /Length2 2303 /Length3 532 /Length 2876 /Filter /FlateDecode >> stream xÚíRi<”k6ÖI3YRÒƒ¨I˜±†Ž²eÉ2Bö2Í<fÑšë)²jdß×l!Ñ&•-"[)C…$R ïTïùßé||ßOïï}îçÃý¿þ×}Ý×}Ý·‚,ÚNÙG>#“¨Ê(”.`dee® p§H$TAÁˆb¨x2ÉCu”ŽŽ`@ÔÔ¤¶®¦:÷‡*Fd?:ïåMö!¾“´"HÁc1$À Cõ‰\ ,†Ø‘±xJW àÄ÷þÀ Ф‚8( àðX*pô“ ªß-™“<É€öOà÷g+¤øsMûØD\“82‰@p 'TÕšÌÝ äzùoØúUüX`!~—ÿÔ?Ú"ž@ÿ7Lô  ‚ÀŠŒ)¤_©ŽàOoV @üµkNÅðX’”Q*HŸ8ÞÿžâÐx*ÖðÄüÁ8HÂýê„ßªŽÆ–ÆNJ?/öGÁ“¨öt?@þEþQ£þª¹Qð4À©‚D¢¸DîøsæþË^&$,‡'yjšZ†BÁСH®”š¦&„ð$H@×°ª ‰Lå.¸Á„žd ôû­"ÿ†CÿyCC2- («ireQÚ(@[òwš 6474‘‡´Õ©ý@± H¢þx>Ü„þ¬=ñÜPAb¡C,2V/Â'¥þbi¨IAo™Â_:­$¢«1òVšžÊ̈üåv=(³‹„ùàË·%ϯTÅyj¾‘ª7~d§ùöDD ‘—n'4‡q;ÅÛžÓÖ$JÌŠ™Ú3îw[iî•üÒh`£@•å4J;_j6–¿tÅY õ {öfH8'?‘ uϹoy <95šØùí£)¹€vîó}ˆV¸vÀ+*ªè“'gà•CÍ5Ø][ïv Äå¨óBÍ)~ùi<AY‡œÇz«MÑwt„ççÃr •èmmê½L†ó”óÄ—¯K^ü~—OK£¿$VµL'm7î^7Ú—Î9,œ´?¦àÄÂF8Au¥vÆ|Ó€­Ì©gÍj—˜3C°4i6BìþÔMõEaÉ ð6"øìÞ6 Q¾gO›IµdËñŠÜzzÖ|¤¡ÝàÜRwÔV¿œ¶Mýqº”Ms_ѵÄNfXg™ˆž>oÑ@æï3˜ˆ©½bá_¸‚´×¹¸Wl…9Pß¼¯äÓ>äȈxJu¦B‚€â®6eËœˆsÏl±Ç‹ÍÖü–;D>bÕ_êÕb‰ï]uƒ}Qÿ(ZEÞÏs]aaSz åbV\_Çì¾¥ò¤Žx®?9¥Oâ-çxì]ïáÉùœ&Vä&Mô8us+~º4þ î¾]„_•=ÙïSPˆ©t½,hœè s •ÎݶýÚ2­eÞ¿!@d‡ˆ£âÛJaä6^Þ‘×–ÚãYT*ß®²Y+@þuŸÓIÀC]o™¸e43ž,1âh±¶` 7R¸~³®§á|ß¾ËQëJ¹½o†UoøòÇ8å'«¼³WH[*ÔŒùžµ1A¸€TvÓîîYµy›¸fŒ#·¼™í¼ª«/1³úd{¤âBnº0SS­F6Ù­g¸{ýñØìpÇϬ ñå`»91 áÞ¬„÷—;#ÎÕÍþÞŸk]ÛæmònÓQf5{"µž¼Ëu Iƒ:Í›k¯d#j;lw5ÎÝÅ_Öâô=É ù×èéµ*Þï$‡²ïzçò¶ªRw=ˆOÚ"!{Zµ,¹bŠ‹Ù1.Ãpü”Ë}—g¯'ãÆ{¼!êÚþ+oÃ*eKìÖ” #;¨¡zÙjÅÍ=7¾)´ ?«y›àRøù~]°ÑFw^¸1tV4ͷصëßÃÓz4 ;átïgºMœ.ŸEüùJÛWÄqÁ¬%ú……Ç›x«Ø¶ôœ‡þrgsÒ2 C1‹:w¦O{Ý>ÊGsìJ˜t 8Z§Ø§%>ÿí€6½vŽ1›ìð;]A¢ó¶ c™¡Ÿuþr¶]܈¦'Á¹€ð½ê·Äœ>ÊT8Èõ6½xÚ™°ù–ýó<•qup2ecµ>æÒæ$É$º{ yŠ”¾™xÔÍ5d…t׿雇›ŽÁ¬g­nÆm°ôT£›÷]Mq$Å$D ûÛW5w¼_9¶Ï²6µ>ÁÂÅ.xú¹›¹M“ÿo5ñ^å ^d†9fO ÊÎ/‹$—ÌotrEò£ÈyUÛ> endobj 513 0 obj << /Length1 765 /Length2 1101 /Length3 532 /Length 1664 /Filter /FlateDecode >> stream xÚíRkXW«‹. èzA–ÃM…0 „²-p7/(Cr#“&‘ °bÐR °ÅBKA*Pµ*Ë¥Mв¨Ü\A.U»‚UöA)‚Š`\wŸÒŸ»¿öÙ9óã|ïû÷¼ç=ÇÊ,(Ä^(#£¡7IÐö\×xŠ%|Àå ˆËÊÊ“‚(‘„¥¡+ຸð€7Œf&ÌïÊç»"<–ð$ãÕ&¥'{¶I„ HaR”b”Ž… FCŠâ „”bVs€ÇdvE"ÀDH© ŒÃâr “Ò Ê1‚å0ëȈ!à5,SÆ¿¡TJdL›9›lÀ˜”‘®2Ãr$™Ý ãå¿ak¾¸·ÇQŬ<“ÓoXTáêò¤"^IC ˆI¤ˆù­áðµ51”aJÅ|ÖFqL*$ä8ÈkKôÆ’ ,£¥± Åá Ù|LpsÂ…>AïÌÝè„bªŽÿ—èlï\ÍýwÍdCaI`;„Ëe™ñf9o+/BJÊ0Bx|g€Rªf!ŒÏ{¹#d0 À$Ư‡ if `"I1$Åš½NäW8ë·Çðð “öÚ;:q=Ï(;"NÀÅ™ŸúëÎ0KPB?à#"ذa•*) ôÜÓa2zSÇ`L¢&A)«·›”n<°ûXMFEšWigåb[ymNàù†ß-ÕôäêàåWlÏE¼¨*4ÒZÿhfÇäÊ—Kµ¦Ž’{¶+$Ãïœ,Ë4Ð?ûêRË÷ã@B¡Å·—H®úiŠ2Î%¯õÚuýñªv¯,±jÔ®^a6må9XòüëW›^YÕ ‰u}JSN­¸ÓWúãÕü'ú–µ]·Bƒì2­57Ù“w2J‰OŽ÷—|aéÛäkØÔ÷›«†'W}Ùö;{­~jùÝtùS‚-_¯¹¼îIÃ[*ÿ#ɽ=§†÷úiž’÷®[[Tö\t޵›ª5614ÓÝ(êV$LšÔÙ6·¥oÍlë`W5µì|ÔÕŽKšïüusqOçåóʰàêÎ ÷áB'¡êÇõ1+jº®C\w¦gs¼¶áÏ^ÆôÖ¹:Ýë${ûŽÔ9<¿5=!°Ð4¨7yÅvªe‡J>¹Y³½Ü»#¿V–0¢9ˆ[Ÿ]µ×5–¸- ÉO¼kÑȹôÍ–/\¬{^ìSt«v‰ý™Lý½ÏgåÓ‰hùývž*ã„ï¶ZsÉŽ©)%zÆc„èûÀ?\[òé׋·wm9n‘2†M&sûÓõ”-î,ít{³È­óÁê„¶„JDV5˜e·I³³~ñ¾°ùÐ3ë)ýÃgö™w¸™ ª·è¬Yfd£Y~íùÙáë•–èªûŠ8õß}aãCïÚ®û ¼1ÕLÀnÖøÍ|ßäM WýqðO.?˜Êµ+s=Û¦'§ #Ò@yödòœ(÷öÒK;×Xg˜˜g¯®X(îEÝú—ää÷±ú]Ý–ý¥jkªŸÎ¡‡éÅ.ÀN›¼¿¸þ¼ÑÉçÑ“™Eÿ$Ç;ÃG%xLøœrتü&ÍiÑšåQŸœ-lm\¶¼Šï¶ëEï:Û³OŒ7¹¸=ÌjïÙSÙù¡> stream xÚí“g8\m×°Õ`ô½Œ^¢^"ZQ£Qb0ÆŒŒ%ÑE¯Ñ[”¢%D-"zÑ£½{çÎó<ï÷~~߯ïøöÞ?ö¹®µ×:u]›‡ÃÀHXÅa Ñ@ÀQ òRÒò iP áæ„::¡€üj%ÉU\!H¨Ô£œ ®Øv`Ða… ¼E€*0Ðð¯/܆wÒb/€öP;Ðâ…DÿrÒ‚; €2ÿ Û£Ýþ³äAºc¥€ü¿5€XI{æ ´‡8DõØn¬Ëÿ ­×@Ã`z`׿ÊÿžÔÿZ»BaÞÿÎ@¸º¡Q$PaAÂÿ™j ù—œ.ÄŠvýçª ƒÚ©Àa 0HRDLò_q¨»Ô boEÙ9À0wÈï8nÿOìü~{ˆššj«ßþ÷Öþ^4Cá(co7Pìïìß ú›±CBB½€bØ)ƒ°‰Øû?oVÿh¦·CØCáŽ@q)i ‰{°‡KR@ ·‡x!^XcQ8…ýˆŒÐüµ¯’R@Q'o7'ü¯øïv·DÁ“,PÔöo’ŠÚý7°J¢?P(êøJbkÿØVÐ?P(êüb»ºüض°?Û×õoÄSþb5 VãéˆÕ@þX ÷?«ú±è¿Q[Ùû7þï-VUExùƒ¤%€ÂâRbõ‘ÊIËùýÏL8ô)¢u(%&&&+.û;j‡F"!pÔï¿ {~þÃP쑃@¼ v€É1„B°ó«ÚÐ’çê¯Þ ¸³¤m ©NSÙ˜U¸9‚¬ë7†°íQ‡P;CK©R¶´ß‰Ú;HÍ1Öªøvù‰†LPw‘Ó ä¥íØmXZãuçt¶QºfEüœd_r«»½3ÅuøÃ£‰ð½ÎH&Ÿqë%AÉøØåþsÿ¾¹IÒT{®å€UNƒN2äÑê¸Þ³Íûˆ×ˆÉÂnzËôCš«Iƶ™!—ïäir‘9ºø£iŠ$b^ó}P† û¤Y¶œæuEõOJ‘1ƒ´ =r™ââ§íT¬ÎC΄42±›ÒjDÙ›s=¥ÆÕž"V_FʺD«ß¼n~ÀdÕ”yÙË„¿:¼*Æ×'K:âðfõ ÅSû~“*ñ³É@TôH^¯’r/»µ#ãí@ºÜ‰+±Ó]‹]ºÃš¯4m¢”íÆÉª¢õ&MkÍ“Yº©Ï0C2mÄg¡¤Ô"&ß|d_k·‰(.Ò›L¾ÿ•­E£öÑš~sÕÿÍ'Ú :î!}™öŒÓW¨•ÍûÁÈg-¤™䇧X8¡à瀩CcÎ=Á/Öº}º§ƒa…u笄bêºäc€g²èÎÞ“MOè¾ »’k ²~¶Ç3idGŠ_žO þ8s²t€‘4 Z2+æM0<0fi°7¬ÊÕ•p%eLˆÉ,å}´Ìé2 Î·—¥!T°jÀÓ ñÕä¨Ùëá1^£%]´nîK H鹈§œÍ&U÷u+«x´qJÉ­ÛRØ0b2o€X û *šýþöûyl€­Ï">å5ZW¬‰£nɤuÎEÔŒŽY³è ßV#ûÁ~ÆõõƒU²¥îDàæ"ø`B$‹ŸO•¯PŒx†ù1~ŠI¯ñ¨X'~ñô‡Ôf\áŽé±ñg¢žf4³ßmqõ¬4Yp¦b2JUºéÛ1Bï‚âËvò.lËhÑ1Ú]ÂNxש|÷ÊïÜTNaª@®¨ =åÄF¼$€d}žÛÇoUAaÉu/"$õÚV” âSLy®?Â2c3¶DC˜nvfß‹÷ªñ¥+¶ëïiÚäƒÞk\ç1ØÑcë›_WÛžN6¡9™é—+7dm› åCVXQ*¶>~ñØåýV{ZW2-û°W*|A@úüÜ®0G ’c(kI¬HôžF¡òsÓåä¾®5i@ØŽ Y‡îË:3ŠÅ-³ò ÈÞ8þä»fjÂb‡¿õax$;µd¬â#Î^«Ýß?VüT ŒQð£ÿaˆ3ö"¢‡ý£fæìêgÎ;ª/f¾<ñ{C:Ú6æL µÎ{B8'…cš>sb¨ÃßÈŒèb1 ¤6žà®¿þI~uÆN¡èâQ±$^3±+—ùƒ²à‚Зg¯Ï„ÒÞ–¢Œµ]0¢áXúº¯šˆ§wR&Ó‰ÑÝzY¬§+e4ÄœœÈª‘×ò“ —a}èÝëÞ¯ά1áÎêÒ,¹yÇ·b;þ¡ï ÓNJ9à¦$Ý%>]s-Ù›*§ðýî TkŒô×äãA´JâÁwïSZ·Cdñ¡|‚ÖE‚aàxB”žú!*±2½øù…;È¿4Jp]·@Ž-þq*ˆ¡åÑÖuW¤M˜tâêe#,ƒi©¥—ÿ o;LêºC‡+ÞßRí+n÷’Mlñy‚sšÖ‡¥®^׳a¬ÕyÓ=­tOamó°ì—QmºQB¤˜a–xôŽ}ÁïúbÄÂÙ%a_ç…/á±E6¡W¼b?[àà¬ã^2´cÖžš.éÈ„¹ÖóJþƒµÚÜ}‚Þ—‹†to v´lÛëzÅ>a=—î³Þ½<ä6>ÏsÖI!šY¢R:£R-­i=ï5iULÅ+sŒPàçŽïÍLûû· ƒ©™Š£ÓJÍJÇó¸\ü#.¾{„ž›]ÞÒ“.Æ Ñ¬Á ïN#?8"QÜ]à…=&nßcÇüU—^½BêÀ>Á¢‰-q˱–Ä/-8r|/´@Í6&^£èÛÂëQE”Ñ÷¦SŸlž^E Þˆ{wxviÌù빘9`8¾üt#ÁGDçkl™ð.……¸£ýëoöômܽˆˆK×€®Äf9:郧¹F)â=3RÍé;öâûI~È·r_¢ø†TrApæÄÜ•"¯u{Hìú(“êd„eÊÁYðªU±-Íãe6®rže€ô—ËPW@¹tqy:kït¥RFEÛÙ ?3xúÔ«B—ãE¹Ú_ë•Ä_¤æ}Ò~yÐÆPªkÁ†ZÄÕ)å8–x‹äâ͸ô–ÔɆ/n=ÛûLÖ1½: ¸3qš4ð sÐÕ‘Öða¥)¹h¹ñÉg½‹¯ÖÆg¤„«ØVÞž¾ÕÊÂôÙÿ"»W÷«2ÆöàÏoçWœý¬QoéU QeáéD¡º¸²¹?C”yChŸVç9ëé˜5Áq›ÍÔù¦ŸY.ÃnîÞÌ3í×àIs.ö¾ åã.ˆßœ6gä}´{Dzìâ¨ùiBâ§á8¥éz¤ñdÀEÞÚN›xå7´yV}ã¡ [½J8¿CSøÕ]ßU…À7i¸ûúÎÊ:±µÏXÒù;Ÿ/ØîÙŸ»}ÓL*G]Ž*;ë†s$;¸Ð«î»ÂDW?ûR½ñ<Ä%ÿEó4µ”Ä:žÂ9l׎žn SL¨s„ó ![q—Ñ÷úfK–5oÛ·Kšä±‘£Å Lúü\yœ>íq$’LŽJ:šÙ ”/ñúë@姨±_²áçŒ^‰Ù.#Ð+æ1ßÃy9ðgt6š;dQ¦žÞ)BBþ”Ûæ  óéŸ_„«3 QhVïf^WËø¸ý¡J†¬)É̲5i߸a™Ç'LhŠ{ob×l‹ø½¢ï&%VfÃî­¾ŧ«Ž']¡4Ö#Ffç¿6÷Cq&×îÎtDf m–>òÕ¯û&qNþJÞsÒ¨b¦k§}xEB@ŒõÎÿ¸ÂÑòÚêÀ ÿF]-g–¬/ÁI\.Æë+yà—i—êèWŒËÓ²kŠ Ï÷ÏÌ=£{[¨Ñâ¼9ÌßÛ/¥uXCœôÊ5«X•¤‡bäRCïó^³¯SàüZQb¾Š*²ÄëÒL_ úqËÇjì©Ö©à«ªFùFk<^jhëgÛu nq a¦˜¡©CõÑçð³¦Z+d åËÎÌ¢H5ƒTíÁž½ËyÛxý®üÌÎ1Î>ö¸ê+Ö6&b­¨žÎmâæ#Ë['–|ËÀwýQÆ~¼Ãaâ¦$*ºC‡+û4Æå§‚ÝVèõr«â„2p¹þå7-O¶Ë\+gm1N¿•wÌqw¬=s#BÃg‹YøNã-$ZåŠMC|_® 4í=M_Ý Þs¼n¹N`P³f Ñ‹"Qw™9Sgvºƒ(O'W¾CïæççìGç/€fuµ…Ëvò[Nùün ïª2¼ (©D€^¡ ¿tã½[Çé!.]’ (s9<¢ëŸw¶–öU8ÞæPËÓΠ´e ¢÷Å39øÛXŸJóúϬÝHÒ‡mv‚¾~êû„ï“OŸÿVêaŒæû¼~˱5tHá´ô†žnFðS6üPPѺj“–îÈ#\‹ö‹Ï7 „BnöŽ2ÑËߌ¾—Ó^à†AU‹î}Ïì1ÜXòlR"¦¥÷°QÒ¶q¼t”8öØqjÅaÌîŠ@õãôõÏÕ <«<2I“Ü#;CÔwyE4É—Õ &𭵿(–—Øg0UeÑ)Hwm[&W”â;¦ütô%„Æç-Qéùùm„CêÞµ ‰™µ`Rå‡ ß¨¿Ëªêv-hoÓj)¾Å<µŸNý)þÁbîAÏ/·þ+@žŽž¹ƒ+Ý5ß/Õ)1ôwÉÃT\Ë>·~÷ån§Òå>¥äBѤ€Zó~QØŒ|t»(N·Ž:KÒ¨%áÐÅ ÊÏP:”÷`édˆò=i¦‰S.mþu½kâÎׯFçÔÄÀ$r!ºWæækŠ'™=›•ÎÀ«v»x#GÏ#Eÿ‚?Τµj3ÅÄ©›÷yŸŠjxA™ ²-§ºÇQ, 0íû`1¿oo¾–‡_0\»ºÌ`âfÛ5ÏlbK;A¤¦x'QÅMï ZczÇ[ßðK߯Jóe—ãsÝ(,Ãø%´qÿò"‰›ˆ«Ëç6àþÞ²¸3­ô¶’ˆHÎôeM[—"¥0Àgyž¥ƒ‰ãVá.j7ÕÿƱ§ÿØï0˜Ý…T8—jÔÚ¹ó¥ÄµÛùÙ‡ókÁ×]ü*¨`»Yè‘ã5RZ<®ký±€Ï‡±^á…IªÏlj¸á­_{ßòÌàEžWDÃ+ÏIðôÞf Ýãзå&s# ªÃø—k¹ƒŒ¼»(Ľé¼×_PÏ-\¹ús\L(ž(—u!Èb ÑQª .?š#¿õ ™í+I¤àEøQBïóĸÑÛÚjü}ôˆüãJ·ÅZ‹‡×pÒ.ªƒXc5fkW Jú™Î×óµ›*6Az;ë\ÔÔD¬[Ý®Uýž[ J;ÕÑ?4ÃFYMÃE7%q`Ô9 ûÛîd™J¾xû“caÖµ¡Š‚‰Àž«š_Í#a J^½BE*·Íô4ö î mlæ='8o1[â@oEz@î¼Ð ¦…z*‚üâõf<㨂¦&¥Å2"Éââ_ð wÚË%å§^Q$ …\&ÏТœÇ ü`Dû¹°¡&w×"»'l÷ƒËnñÔr/âÿÀy“4iëtÓ"Ž£é²>GÖ}/c4ùá£Ø(®EŸñ…hIò±§¾;>—Oz eqI32êî‘£zƒÉÌ·Òa»îè7|îÙ¯’ÈŽÝ“~DVÆ<4[+uôãøxï´"{tÑN¥¾òQ=­ÙU‘A¸Ó ñ«‚âƒMÄ.ÈGÚÏ“joîb2úÈ1+r¥Ã#iL˜¸D©0 ÿeÝKÏvî/ÞUa´ˆ£Ùöâj†FÊcŒ˜Ò«;É—©hÓÕï‰ÀƒËëÕF\fåÚ£޲ük¸ýÁ§&Ú?!Ây™ÒÆ$hKѸ…bQy·Î{Û-Ïu¥ŒNÃ%äÉ®ƒècõÞäª^Ç9Ç3¥¬ Š=®óÜG—ÆŠS4±Ïgc]%³žSg$dâg³õ0Fæ±™Ig\t|’UȪ.LvšÚUÏt°eÓu –º,i4æìf(sÄÈÔòRd~¦óÊ+4B<œî¼sy¼Óà .ã´õ´îBLTéÏG¤^@®â¦ý94Zs˜Ju0R;aСHÄWq ýy¹Gr¦9¸ ïÊêi§àc½Ã°ÈJ¦‹èþ¡ÇŽ,«†yYùrcCÙÌ% éÓ4+Ø;(²8ÙFµ…·mù¡åô]»Üc§WÝ#=ݼÕqÛ‹ì4{6«c¡Õ»÷qŠ·)gé:’.¬7›Âò]ê*¡uç Q £ò¶þýÈØ6™áfË5Ù J4nãåÚ+» 9È6Ì›CL…Ùg|¶ˆpV_ÆU BÑ >“Pž~³žKjOäI“\âtF(±,P8Ë%L5°²Ã»f÷UdlOyær by>Biå‹®éd,¥ØÿáøÿþŸ(`ƒ€‘(„+éø/}¥µ]endstream endobj 510 0 obj << /Type /Font /Subtype /Type1 /Encoding 1005 0 R /FirstChar 45 /LastChar 121 /Widths 1010 0 R /BaseFont /YSRWKE+CMTI10 /FontDescriptor 508 0 R >> endobj 508 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /YSRWKE+CMTI10 /ItalicAngle -14 /StemV 68 /XHeight 431 /FontBBox [-163 -250 1146 969] /Flags 4 /CharSet (/hyphen/a/b/c/e/g/h/i/j/k/l/m/n/o/q/r/s/t/u/y) /FontFile 509 0 R >> endobj 1010 0 obj [358 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 511 460 460 0 460 0 460 511 307 307 460 256 818 562 511 0 460 422 409 332 537 0 0 0 486 ] endobj 501 0 obj << /Length1 805 /Length2 2973 /Length3 532 /Length 3574 /Filter /FlateDecode >> stream xÚíRi<”oÛF$cÙsO’-ÌØ-d7ö-!ÓÌ= cfCö’$I©Ù! E5)²$ŒlÉ.eO<“ÿóÿ=ïÛóñ}?=¿ç¾¾\Çq×y÷q]rPG ñ$hA$PTàªp`†DZÃasƒAääÌÈ Š‚#Ž¢( €ëéi6¡x@]€é ´4Z:9ÀŒHŠ ãü(€‚™âo‘` ’qh@¢(`0³…\ˆhH‰PLðxÀù÷‰À Éa F‡šœýqˆÚoOÖ,Ðù‹Æ„’þ.…ä¦)@aǦ"À4‰!ðÄBÔì‰Ìi ÓËÿ‡­?›[„âñö¨àßíw’ú·:*‡ø§‚L ¥€dIÄ€dŸRð/sHƒ þ³jMAáqh‚?Tàšª0Í¿x\ˆ.Ä8â(è‹Â‡€;w‰ý^_ﯱAgÚGéÜ71²_¨Ÿ¼z»tÐ}r$õÝÆ¬%ñ‘^ôFÔ;kyï]¼y¨;h7S/9¹ëc¦á&L1Ëh‡À³ƒdèž·ôl\{¤´{Üog,†ÐLO£ºZ[äüž±.E½1h&O·õ¹ª•‡µÛŠdi¾úž$ÞвHœ|ØìÕlDx‘8þÐéœPÐÃNuÃ48©&]ÎÙoý—Ü÷ƒ)ìK>?¯n'‹7- £ ,blÊºÙÆa Ê3Šm0qŽiÐc¨€_)&ÆVÃÜG’_¿7fD×­!O½g…{K.ÊÒÕ!SˆõàŒÛ‡‘^Ê•µ´ëÞæá,zÇ^ ߦ_6%g«ûZ˜ö{æÚ§ü¦¼úù£{ËÙ}hµwÖî!ö™ŠBöJ鋘x»Wè/ºÃSg¢…´6Ö¥Ëڹݛú_:¨n´š¹bméXŽ/ñ’AWTg]•¢tçw5Ú–ûEtê–WÑZ÷Ég`\£Uœ2‚ÊîÙÞ»±¨Ç•^ª÷ð|×íè†%“ÚWؽZ×IöŠëÀ>¡n ÑXä-|T » ëÒÖ¿TÜ®ÙÅïC“y컟åÃäšy“Úùx©Èd×½¬¯9çà+}tÂÂà“ùUº³çyaùÒäjh豚|±¦«[¢Ifœ%A­y/B¶"o=ªò|ð©,Y1`/S%ÊžÒ«4¬ú>¾ÓßÙ}Ö8¨ÿ¶ßP:ëÔÆþ‚‘õlRqû¾í¼"³ü<µíÍÈ-fà寃vyÞ§TÙ«¯è&ú¯Ûˆx¸' ^VyéÄ~ØUõNÑ\é¶[Mê¦@쨃Õ!¯ô@Nc"(‡\´?7ûMÕ@B¨5©³òcw¬Kal?B¬lÖ(íôD«s«×æ/ßʬ9?ÖÑcãb^æ ó«âÕ%N9Š%!ÖõÆÝWEccûW?\SËízT=ÈQÓÉÞò+T‡qxI$yØÐ—hkJåÎé"¹zóÄå;–lU8JFÒU]|i嘗u.V=©{´¼Xò°kÒÓ‰à̾Ý*mKëŸ;󨲤HÊÝŽ“‚J}¹V•ɶy…¾ê²‹Vu¼Ÿ®õ˜+,:)öy·d?¥ygs ²›cÝ:q‘„K2 Q ¼çn•-.iß(/ÒGbràtc©bsûÝFÖ›k &¥nGú6‹înœJc)¨lz3sOIwöųrÜËÔ±›Ž•qö¾N¯£ëb 67ïU—½æÒÁæ&ê?æLµ›®f¨eDúýÚ]=×wÈáþyc´ É$‹—îñÖæ[Ü|Â(NTx ?µeóhTæ\$Œñ\Óåwº@Ï+[ºiç“2êåéŰÌ(î.âœ0my%þàÆ"ŽˆÞÕÛŸ¢%gèjóÐðXz}ÃÄLĉø’$æî0øñºQ}þü­[$ïÙ !AÓW sÇyó¤Œù*Ø0QFf}ÎÎ^Ü#’Óø“ݹìÚÀ†Šœá]¢‚‚Öwx9£ñíÒÖOr§÷~ÂsìN…¶›P÷ ÷?_nÑNMMzný=ÇßøG‡m¾â+$qb0·Ÿ·X†bwœ¡¥”­õ¿‘°>-˦Jf…KÏ N/ßSOÿ #Û½O×´mi:NMTqÝœÔ1ò†%uvjwÊm*M:IÝa©Ï”ö ë§›aç|k²ŒŽO+Ÿà~a8üCéhâSh¼PÕ|Ø¥®‘gPÿ5’¯ï±1Öo&CEŠZˆê#«àåµ`õíÏŒ¨zÖç‚•…Jˆ^Mm„Ê?‚ ûw]Ñ–óóBêÞ´C‡®•Ý;—±ß6opÚxW Ö’«Ót¾Î©Î"pÀõ}úÓ Ã÷Z_Џæ âÓÓÎcÛùfU"¦äŒîço†#9½avë…{Þb]NIÚÓ,Ò"¡òÖ$„t¼0cHæIŸ›Z¥{ê©$Ýlö>‰G¦íS«X¯ù›mÿ :”òb)g’ââBô­4Î.»E»—ÅÏÎ4ÄE¾xt« ×{¹¤}r£æÍfg½„ïW§#¿ƒ÷†ï`÷´ÙçB•ö›T0%²R²åûÚÄpÆ‹-ž*S‡r›ûPî9g‚«Èa}rDAïMÞ>6!ÂûFù¾·W¢í^‰¦O–äëÚœû¬:7?–„¶Çä6'ê5œ›1î¸íµ1þ}&PùT;Qgª»û|\VA`¶øå,ZíBÞ…:tÝòÑìJ¿—Í„/¦ÿTš r¦þÐîœÈ¢SÒô výxÄKcyKÈK;…k:f³,{{ÞCðÝy+Q˜“'ç\ît4?ñA´‡vöVþ`ÕZ낽¦ëpÕÏï–l~ªFc^­<Á¹^mÒÃ<›´î‚Z<÷CŒÍ~ˆXàæ„«Í¬÷Þ,5SÄ gg©Ô]KX˜€–yuZ=o”Ž¿øjöªT”+W Év\|O·ù®Ú“På[¾Þš‡ÐlïÜ0{:s1k£±\cÊTu¡¶Ãßë¾4ذ‡É=ö¬Ø’_¾HÔL Çsq.ù(Øßµ!eNOŽÁý×*q·â—†õ÷”~®‹äUí=§Á–𦸷UjÏýg–Nõ¶7ÜózOñL¯ “T*•$<«Ç^ |8St£³ÊM;|È,À—¶å¾dœøcZ‰Ú`GÅ X!YÌ¢eCõ¾·Ào–qòiæ¯5Í$R•ÕÝý¹ÒÖO‡Dº^øAå‚VÝ `ëñtÖÁÊÃÊÊ’Cs»¹µ®k£#ÎÊ·Øà%L¹w8_b¤ŸÄ t,¯› =¯Váöcãðæ#È—E|D¹Ì-a"2££ ¡Ò -ŸÇϘÉN]z7`á7¥ZÚ„]—!BÍ÷,G]éÌHj¸¶q}mȳøñÌ‘Æ[~õùÉ+II¬«Ó¯ 8·¸á×Ù#ÆSîfóWo´ª$Š<tùG¸úÝ’^,õFj·Ú »f´©KlÕ°ÿãùoƒÿˆh<ˆ"SˆÁ(rä?'6Ûendstream endobj 545 0 obj /PTHPXF+CMMI10 endobj 502 0 obj << /Type /Font /Subtype /Type1 /Encoding 1008 0 R /FirstChar 58 /LastChar 121 /Widths 1011 0 R /BaseFont 545 0 R /FontDescriptor 500 0 R >> endobj 500 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName 545 0 R /ItalicAngle -14 /StemV 72 /XHeight 431 /FontBBox [-32 -250 1048 750] /Flags 4 /CharSet (/period/x/y) /FontFile 501 0 R >> endobj 1011 0 obj [278 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 572 490 ] endobj 498 0 obj << /Length1 772 /Length2 1016 /Length3 532 /Length 1576 /Filter /FlateDecode >> stream xÚíR}TLi&N©¶ôÁ›v*¥™{ceC¥aÒT#©äë6s§nÍÜ;ÝîdF*V””°òÕ¡õUj;Š E%b•!‰pÊ”|ì-góçî_{ö¾ÿÜßïyÞç}Þçý1­<ÄD8Ê#pÊ fÁnÀK CfA &Ó‹D #ð9…ºØÕŠsÄus†Ü8\xr‰EDRÀÞkr?‰ sAŽ_Þu @0œZ¨’£úƨáo5‰)AÄ‚ ˜&ÒëëßÒA‡yã"BŒáÀ™ã’DT z‚èŠâa€ábT P%í˜Í ŠÞèh€„ ýÏJ;œŽ¥úûŒï/âéI(ãœ]“« - Ã.€Ëå$ü„c1 ”?p šîüùf"I¢850AtH_k F‹¢JTÄhj$D3’£v”l8’è½ÿF¡.{ToͱgMzçBJs0qB 'WhA´ïm)Þ\e]gæ#š‘eDžŸá—¾¬kŸÑÑâ´üƒ![Öp*YwMUëÒÔc>:Úµó«beï^ßbáVI¶îÚh3¥©Ë&©ft®¸Ísñþ íƒFýq ¶9L2ç6Ökúƒ©ªùé͉oJ“vT»‹^þq×—`ËK³«“ÌÔïBÞ>f,•ÄÕÕ9 ŸxœohkYi&~oàŸ^¦ì°J”Â|}!ð ²;-Ñ"þö¹ži}êóŒ½Ý«ýG1*­µé™Hì9ˆDï>³ÝjNǪ˜CåîÚ ÓŒÖü’ìÐ΂ò*ýÆrØhVC“WfoÞ(¿«#ÒœŠâ·êÒÈÍÏÙ¦šÓ®6Þ˜[кF6dôø=«…KÏ02üÞÇç56]”CG5«ðåœ'…ùÇ”L·SÖ:î&Ÿ’‚ö_[+ô÷ã艧¤ )‚{q–UÌî[©rýÉóø[z9¶^ižeÅÇÖ'·s%7—‡e/„t”õÕ»aõ¥#s¤ûŠÝë§“I‹!«7pô‘É]èèЬ„ ô€ÂÚ—ñÁm{Î$?*(ÝuæÈ[ìmÆóW‡+zŸJ ~"†oš'ï¶©(¿™`ιtoÎé·6m:Nø)ãØ™ÉŽÉê½#CÞeŠWâ’•¯VïY˜‰,Ìõnç°îÜ>ÿc9ײŒ§¿wýü­ðÝ{wÖΰlîlÒŸxªÕdærŸ¸j ÄßYôsrÈ}ÎŽÏæmË;ÎivµÕ—Ù?²³7¾í¥|¸ÌQ²–_'< 6¯L˜RÖÝ ¬7DÜ*J>tÝÃŽxï„ݰ¬‰·©“›n[EêVFm×/¼X±oEßúEgó[Žë> ÊÉŽòìu¯pµÌ¬Ô-Øú`Ýǵ+t>m=´3u~LX¡Ÿu eçb׊Ûi¼a¦ùsËPþlïø]§m‡OQ©8½rxçœþ!vÔ;Mͬ×KÆõVÙ½™xóø€õ†`šé+>¤eO¨½®cx¥ñ©T‡Æþþ,ûcçÙ›¬b„ ”ÅÐà›o9xK~y‚Α<ßœž ü\®ªY¹A‹ä^­°cã’4–««03Ú“’=Έl/°Å{†·/»Pg‚\L}ôäiHç‹ù…×§~¸÷ Qm–Xt‚'ÏCäQ2{?½Þ²Öy%–Ë÷—hM´O©Ú÷¹†¶Òeòrƒ.Cƒ¸…CËzøï^I'ñÈÙÌ—“,Â^/aiŽe©yw^9€M>'m/…Bÿðcü/ðŸIQ„¤BF3þxDU®endstream endobj 546 0 obj /VAJGMU+CMSY10 endobj 499 0 obj << /Type /Font /Subtype /Type1 /Encoding 1004 0 R /FirstChar 15 /LastChar 15 /Widths 1012 0 R /BaseFont 546 0 R /FontDescriptor 497 0 R >> endobj 497 0 obj << /Ascent 750 /CapHeight 683 /Descent -194 /FontName 546 0 R /ItalicAngle -14 /StemV 85 /XHeight 431 /FontBBox [-29 -960 1116 775] /Flags 4 /CharSet (/bullet) /FontFile 498 0 R >> endobj 1012 0 obj [500 ] endobj 1013 0 obj << /Type /Encoding /Differences [ 0 /Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi/Omega/arrowup/arrowdown/quotesingle/exclamdown/questiondown/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/visiblespace/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/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/quoteleft/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/dieresis/visiblespace 129/.notdef 160/space/Gamma/Delta/Theta/Lambda/Xi/Pi/Sigma/Upsilon/Phi/Psi 171/.notdef 173/Omega/arrowup/arrowdown/quotesingle/exclamdown/questiondown/dotlessi/dotlessj/grave/acute/caron/breve/macron/ring/cedilla/germandbls/ae/oe/oslash/AE/OE/Oslash/visiblespace/dieresis 197/.notdef] >> endobj 495 0 obj << /Length1 2198 /Length2 13953 /Length3 532 /Length 15150 /Filter /FlateDecode >> stream xÚí·UT\ÝÖh‹»C!HáÜÝÝݽp'Hpww· š—àîînÁ9õý²ÉÞçñÞ§Û.¼ÐÇk޾æ˜Ò  QR¥6s0J8Ø»Ð330óDåUåÔÔ˜™Ì LH¢Î@c+{1c €™›› ìj`?çàacæacE¢ˆ:8z:[YXº¨EiþIâÛ­LíòÆ.–@;ð¦Æ¶US+ ‹'@ØÖ òÏ € tvš1 13̬L]&@ +{$Æœ¤íÍœÿ6suüßGn@gX @ –¤€Íìm=f@s$Fp- Øäÿ ©ÿ\ÂÕÖVÁØîŸáÿgžþ¯ c;+[ÏÿÉq°stu:äÌ€Îöÿ™ª üo=y ™•«Ý>•v1¶µ2¶·°è¹Ø8þ;l’°òš)Y¹˜Z\œ]ÿÚ›ý§xöþË‚QTQ[UF›î_ý¯ÇJÆVö.jžŽ@Ó[þ1óƒ§ÉÙÊ ËÄÀÄÄ Nÿþï_úÿQNÜÞÔÁÌʼ2Ø9ÆÎÎÆžHà%&v€73ÀÊÞ èz€•ì\À¯À3ã 0wpFú§¯¬¬Fðc[c»âÿb0:¹:¸ÍLlß‚ìF{W;“úoaÿæ0š9ØÚ;¿…8ŒŽ@gS ½Ë[Œû†üïuñ¿a6&pª±3ÐÞhþW”ù¢ÿ‘Ì`4ý3Èæ-Öw´u½Àò¦vvÆo°¹¥§£%ðÍÜÒ­ÌÞB`k­1Èò-Â`ô:;¼Àá`ü³ƒí]Üßž³ƒ½],e€•Í\ßæ†¬knåöWXîô¿, ºýå î*#ðß&‚¬joõ·×?ßlëðöXèäjüÖ?Ö:ýs¤¼ÁÕßæ~#pa‘7}#pE±7OŒø¿ˆ<-o6‘|#ð„H½ØIúÀÕeß\]îÀÕåß\]áÀÕÿE\àêJo®®üFàê*o®®úFà©P{#°‹ú]4Þì¢ùF`­7»hÿ‹¸Á.:ov1q66µºüÛrç[™€Ãÿ¾ú¸Yÿ•ýïÛ€ûŸžL­¬L­œM]ßv-7XÙ¼ÛA¦Îok|ø2¾ín°­ÉmMÿEÌL`]³¿ðŸ5ôþ³–ÿB°ŸÅ_¶²ü Á2V!x­ÿB°“Í_–²ý ÁVoŸÅ >7íÿB°•Ã_¶rü ÿYå!ØÊù/ügsý…`+—¿låú‚­ÜþB°•û‚¯aF¿låù‚­¼þÂÿé%ðßúÎÌÂöOãÿòcaÿŸ¼·ŽÿßW‹ˆˆƒ‡7=¸>= øìæ[spsøþ{žº½x¯K‹(&&.¦ÿ¾hL]ÁgªËÝèà[ëÙÜ |Í@S¤…YSÞ`ëÔ¦Ðr?ñÂñ Xê"صwçü_»#C`˜ïÐ A‹ƒ qT¢qUhlX¿Tâþ½¡°]Â’¥ ½Ybt·aù }8ª–•| Ri:`L$kñIÐ=lÐÀ«-øN(êDå ºaìÂxr—•z8i€Á+ú„§jë#“Ƭ‘g€Y²=…/óOvÄÇÀ¥…}×~/…øéƒG>x¼o·ñÓ %ŠìÄò³¬«s&™¨);XâÁù“U^ßÄÊÙ^asOœSë” ùh’ªÍ ‡ô©¨ëØV“šd"®„>N/ii &#E~ïMkIC¼Ä­,ûÿéü„Õ ±Ë¸ÕÒéÁð°±ÀúHχ¡>}ô{ÐEÎY$¢  ‚uõx r“ú§ÛØqkùyMZ«÷6¥e…~E’L|FðpF¶F { å™>è1ÁþüÌq>|Ri·=¸MߺEWMU¶É ¢¬Ýò_ë©Füçe Ì¿A]¿û|­ñùŽƒž #Xåpdóµçª²kË$úÛbѦðö³CŸ ½uïþ!DëÄkÓêâwNG¨ÖßÐHeä_|^Þ?í÷*æµ”ŠÒ”Œ½ë?b[Á eÌD?‡‰i¬ÛCó*¾øþ–Ÿ¯³Çkçú„7$N$f9þù5ª×SP’ª{­‘NŸœ‘yâÈsb+ƒPq‚ßÖ€V¤ZVž çÔ;oç=€A§Ñ/ßP~[þs•PD™ìM̽ÅcŸ´w»?¤lZ ËX¨þëù“ÿýîòAãåu¿4~ŸËµ}Œ›‘ø§õR¢}ˆU.ÚÎyU%hªØò­mV+LišvU½[=õÎõI‚1qÞ©ßS¦9Oìâî`°Òš ¼IYµŠq‰b‹Ö-=U¤ÙÖ)C=Ñ·ËŠð'ðÌï>~0@‚Zè¸w2D?(ïÌ“ë,ß¶.’cžMÊ«å÷i'îI‹µĆÆqRÂð„ç\/…œ-‡<¢¬†ú+ZêEÒÕi*n2Ô1R$çïcl>JÔoèž×ïioÿd‡”Ü:Œ]ûv„œýv(C0-—pÙé]›¢6F‹1 Á>B1ÿ6úzXºyßRâðs­î—@2y¹m˜mn"À(â¯Qk'óÌïµ9£šÛ¼D&‹ï–goÖæ²r!NC“,E,¿-Wéæ÷øN ŠÛveØ–ªØ®hUÌô€Ÿ+ê¬L †¹ =§Ý›O(Í å²‚èt“5 : ……StýÒÞ£²+ÅÞª Û§ q¶MéSižÎ—V¾hnÜô†Oc)ùÝ·å°¢Æ6mƒ¾p’IßÕf>«o¹|'Ç«DŽ )´8Y%¬Žjc”S^S`¯£ÙniÔrøP˜-g‰j•;Œ·ŒÆ†b«!°"™€’ >–­%%³Ïj’–$Ïð°(¡kìSô¥\;¢uCõB¡ï¹(ëBƒ:7•±4hv¾éËjþU{|X£¿ ¥þ VçZ,Úž ÞôL:I&DMQç0½ØœíÅaÿŒ}øá"ÌðÓ@ÔC©åÚ½>ÁyA¯.™è |Ë8^”¯­-ðŸ]¼Õ,^A2!³µÀ‚Ž+Ôµt i‚2ïnzæ‚jrzJqòãY¤Á¹ÑÉ´†D…4=ô¾a²yûâ´îRþí†íûÔúæM”$…3Ô¢Eõ±†›Ôû*„ü¶-ônh[€¸x›?Ùld‘NP†j {,lV3½Á1ŽàÇcÒ%ÆÌ\]2“ß@Àôú0|¤†˜N´ |Þhò„6¾Eõi~Ø7F¬ šI*Šceêwö)êáA>žÝªâ+ëGÛó:Ôp»Ó¡ÔPŒäó UŽ%íù䆈1ÜAÃjPî›’ \b|Æ-$Ú(wç­ =–«¶¯…—îÑGìX#{w5‡»ŽÇÁ³.„eìîy·Ç™Þ¬—ÅŒ‘㈯1xŽ‚§K8d´ºŒÕT¬jýB4ÿ"ŽŸEÐïc5z\Hû7íîpà™¾>.Ö;¢÷úG»&¹¬Ñïä|ªǃ5 ŒsñS¡$6§Á)Þ2n³Ö +¥´k¿£¯©øˆäX6×'Š­ôÁsÜp«úa2‰ ¨«1Wü-žgÅë!G¥©[]Pø+šLtIŦ»H bmóä=ÿàí„ËMܹNzã*vz=‚õÆ`O@Ó©_܋уD}"š¯’5U ËÈbà`¸2à;”Â}£ôåÉiÃsî,J»¥{¨SúÊÏ}©9ßI$QÉl3·Év¥(]nâWÔôsÒ{Ïhcú6 ›± b³uГ)Tæú_.<Ž[RD¹Šd>^c7ÂQÁqs˜{œH_š‰ðdã8´Å8"ñ¦ËÈ2eðº0§†ÒRæ(²¾Z'”›i}4 â¯Ó¢åIý¶>‘ñ¥M +jDÈq¥\Y”íç]½‚`Kr+E•ƒ…iš`ý™9(2mòä}}•æúù÷ œ¯ë½CAþÁöl”ÜT\Jï˜ã縲äæSg>4>éɺ÷Ä=AÛ|«©J¿f½,ë„è-òNâíkTû* 'féMf&,ˆgðnÁæ¤ îŒhO·åëÍnbv®¹›Åªå'ZzÍâÄó\+©£HÇÁÆ\7Œã¹3òf‹-Ì´¯°­˜¯õÈÙ‰%%‚O§¡¶üÒ£7"¡ÇÓä7.øMþÁ¢?Œ>(wÜr¡7˜d&lgªI)'wòˆ=—ú‰†‰ÉÏÞÚÀ¥êÐ^©ª[!N¸áï’i­ºh&ÁbÏ’9s›ÏZ"?vì4莪ñtTB³]=pʬ‡e¿Ì3SÊÍCØw­&ý#ùõx†bI»@£ŠçyìÚ°‰¹é¿_=T7‡.æ«gb‹@=iµ¹¶ƒ³½Nò…ÎÈÂñYð…¹†:Ži·Ãnà8©k¼PôVp3Suhç*¸¾D ç¹0ë`¡[­»垦rvV2D63Ö”À‡$ð§/ÃêvÏEÍHÎqxÑSé^îCJåáß:ÁèàýTÙ ,©2Aœ’6ue/95³{×T|-zÑ»ûSÕ‚u–Gûqšy8ý󨳴†F¤;Xìø‘¡…jT52œ4j5˺ãAÐ">º Ž9”i2þ q ÊÂ@­é†úÀêwOó˵›z-Ä÷P¦]£Z™Ûݸ«§Þ,û…¹uZíNû ƒM“f†Ová¹)Šå ņÖ<Ö’»C¤¾ö‚[e·4ª¢Ýö¢¾õB­Ùq1• K"wØß}&UØ1½Þå:ШۡÚ]ËâŸ`wSeh)oF¡}¬”f@80Õ–6´.'‰ÔåÀƾžj#, 9¦c{£Â¼¿[gržYe¦éù¹«&ˆŽ5àDF…¿MUíÒmˆÌÕ±xчÜbà0aOðë|KÔÞͭuG®Ñ¿"n¼*ø­…xÇJa‘ÄI Õ&á0H;È{­=ž4í/FCb^ÃèŸk™õuŠõíÃÓ'‘2|-`ruWAMDkQÝ_zW=tBeÖ*¤¸£×!Ìp“G³àqØ ¯ á2®¶,çÙŸ&hÚ! ý˜±ó[´ ¡A_æšñ"\n-5µ±èˆcòúe =I²“ò#k§Ù œ¼qº ¶5fewAè!D`s&샫§©EcZ’ûÐIq3©ûÎK\„®Ø& X3÷"žÚý®× ï+M²`Ž;Cþº‰¿„Åó§“yН'Ïî|Ñô¦BœLL³<”|âˆÑg½' ¡QÒ"ÆœÓ!Ig°Ýw£©ï–>¾JÌPÌ>‹!^dOõ5iÃ_¡Õˆ«¿þÙAž”w™:Xþ¾ÉÉJýXä/ùQý±,ÁSêbØÿýŒUÁ3+W›&^yñGHõ§ßtã³Y=4í|Sïœ?DPJ7Îq#ÌÌ!p(b#-IÐnýTh({îwù<î/{/EŒïÊw?L8ÏŽ)°D/ö¢Ïû»gM?5AŠf¾Fßž•Oü©Ç*c5ÍRåõ‰™õÙE«îþ£hµOXýÊ´ šäQD0/¦4T‹c»ÛªÑéî !ªâüÄ+¾ˆøÕgƒ°$–FgC“ªïš™Êþûª®nzcÁ¢Ùd¡ìWðòçÞÑGÝß•Ò|q¶ýY¨¤äÇìA3+wyiì†T7k!šIŽfÉÛ°µÓá¼þÝ6h&µ‡êµbîËf=ÉïPRÑë×®,š!ëûoíù極_l>5¥ã^ò-ÕN¸vñÈâ,»iöªeÞ‘3°9Õœ1íô«¥q»ÚW>ðÏ« yl»Ö$tPqÎgb¦[n±¤Ú< Î ¤ÊÇ*#’ð‚·¿5äÓìE»Á¢ÑÎ`(¼„aµèd˜9wüpì{xø`‡“WwÃø Aš¼™²-×Äð¿¸ýµý%¹G~ê.¢£àu BWÝi&geà¯çLp³‰p©>f­Ê© Y1I 3êzôù+!XÅw‡Ä×âhÓ–TmG¤Ü}R)ö¡áÿî”§÷8Ó6àÆ6¯–¯ól ͪ5ímLñk錞í¤ÊÖ¦QÉn„¡Ø­¤Oß&¬€Ù¯ßv;æð5ýS&3ÿ^;€g?&_Ž8³€Â6Çãóó¢`ùnÑÄ~@çŒÇö*5¡q"ôº{Y¾÷šç£&)ñùòä{ßÅ}z5UÛyó)ë©’kÅòÙ ÎÖ’–®ÿüw‡ :K‘4Ë “Œe,ƒŠ¸ÚªÖ–¬Òß´‹¡üj­a bóOáq[ë)zæ‹÷œVï%ùÇÕðc÷fhßY{^'ëmH¤"‡…Œ±&Žþœ]œøÆð‡oÆH˳øfº(úuªQ–6¶‚™S= –ëñ é\7„v-$º—|6Ô½…à×ÀjGk¥v(Âhc)…Lf*aP¶Ea,eÉAƒˆ>Nœ¿M'Ίë-›•àŽˆ²ØA—oôS;Ö)ÈÞãB¨¿ÁÏÖ·a]Ùv#£F×pŒGaµi-¬_1vGˆq ­ÓÙãÖ±˜fF'œùV^ e/]! ‚LÁŠ(ÛÝÞÿ¡üB s©Þ¯EýÎ)p|°Ò2',5¡»Sqq¹/ß›§`ãâ ¢¹J¸>Ýf'A·ek ¾ w59j¹9÷‰rQ ­f5/ÅÞ«ë£Ë¾ã×[ç§úÇ•1ƒejØÂ´Š¢yXÈaЕϊ­GFHßÄÜmI¢îŠ0ÖcŒÓŽüÎ&xøIæS¾ÍÕL”½¦ÈÚ¿.öñä#¬^»¼\7{+…¤²WlSÞÓ$ü$M>o攃t¨÷Áý ŸéwÎ 1 ;‡u3ó1œ}ábÌã¤!‡SiyP«?p‹ŽM*.ÉD åÊ6u£äæÕQÂôUV±uîùÓv"RF‡½Ð½¨ôíƒ?¯±HS§£tþ B1̵ǗèH2')!¬éëßÁ­Ú½êdcÆñ¦i1¯tkIGx¯bp€2 ¢ì9NBrAûÍéW9þ0ÅoXÞµ”Ö§³¨X±r¶’×Ò^„3Éû™éQ4¦Ã g)©È$(¥B…o¥I§q_Úü±K q ¿|jIFp- ¯Û:U™y!0r…àC‚ÍŒV’¶lšç?ë×)‰¼2é÷™ ‘:£ïíˆRDFo›ÿõ<êžV$oàA⸙Ògª”cHcþ<2~¹÷[3”Ål%ÇÖJb¼™D´ä¢BòiÛO§©Ž•¶{‹š?sqõ,þù­¾[8mûþWL¦-ÔM}‘®FÛô‰ üAMy‚¾³ê)ü?Bw2F³.ÀlØ?hN^Ž‚‰*Ùœ]µÔ¾)¿Î HJ蓞z‡Âݘ ;ó{Ïó*qnÙŸ¬Á620I–‰Wº"ìò>F ´%C\ wç/=P™ -K,çAù·ç¨J¬oþ(h/Ž0³8Éäv!‚×MæÏ¶«SK%è?ÍWú²wÚ¼UÒmNé¢ëïÅÂ;_øJ{ÒÁ&‘d+Ž/>S²PŽ”© ‘8b"ES‰~Ño&õüJûR®Š•âb|ûè­qÆ"Gœ_¢3æcΫ„×CŽ1ι}ÿ žw²Ù†ö(v¿/[üIª¯s¯ÿ]¯Ï¾_l*cÓ\Ó{rlФïÆø2ÏGÌa~ze\”œéû%¡H(ü"Y˜¶6 ¿oÍ „äûƼ·Í¯ì‚«É[»œÎ~ሺ\(ë– B.4Óã]D ¸ìq¸}m'‰Ëá|¿_Z?ÃÓc0À@"ß¼{yª@C^#è«ö ða©d²4iŸWë+zbðýEv+ŽM/Û”JggG%µæ:Φ^ìgæq…×ê:‹C™7‘5`“púZÍUT+£Ì(7öÓÜNãpç+swFªŸÓB‰-mS¼yt´aÆ=[{Mçc³Œä4÷84„–2,Åâ=¥“@‘^|g†ä—ñê »-5F½)¤œ Ï Y&7:òÁ]iæF "+dÓßí–[ƒçÄllÑË!e*p2ÔAv^æ“JâïÖBxíÉ’‡}d‚f¿åzÂ^T‘½¤àÀĵP'Þ_ŒãAñ[èm›2{ù1¶è,S¹ÑwWÆ,6Q—ÜX¦ÖñÃpÞÔtz@”´K¸Ùc‘t¹Sdÿ’vøè“q+AxÌüxÓÁ¯w,Ö23 Çm ÙŽÍ-¢tß°rã84ÒV“„AœH{ʆ¦¬Ñ—zX„Õ7›–Wù¦_lz½u+Q¿TõrìÔiF‹]’Å’ÖS\ô™ºò.ˆFF´È^M¾Ÿ ¥¿†úEÝÍSîî)¼-?ÓÈñ^và ‘üµÍ òœíF-=÷]ïŽR–A`=‰Ç»-ÈÆ8J"“îÆ—žË/³?b¥hd¿(;âxBÍ:]AÎ/¨P­e‚'×–-Òïm½ÔÉßm}¬AÈ„Á‘©Ffà鞟Ey^€û”£è ]»Aߘ„\ôü5÷GNwêÞ‚&˧ä×$•ºµSx™k­x¶“$KQ5”pZŸ“ß<É…A%hŠYð?›é#>ÔB|¼—C‘¸0]¹€±‡ù¤ ½pÕTIæo4Kmëx*éÚ±oÛwµ(ŒðÈч–qrÈÌ`[¦a³à9 ±ž£Ê±á9ñùÃßas”3ôΠøÝùˆ68ÅiŠt.§µ´â‹%Ë?22Ÿ£¿k=ò.&‘ŠÈ‡'dâfém?±u/nÜŸ€QiÙ;§, Ãã^±&q‚DjßžÎì:aÆm¥˜óšŸÚþS8MŽ;$²] S{ͺF‘h–Lý¼ßË!rXú©Mh6ƒ³¤Lxì\_Î"—ÃØ8Õ/4ŒÂPÈ¿Ìty?•êþôY¤ô°|Ï]¸ÏÌ£Î>^Ô”%ÑEä4}Ø¥ŠÕñ“•îGÔÑ”‡Y0`.s!YÏbÅ÷µ\%‰zc|ÜfÃŒ-!ŽK·Ñö¦²E"%+)ŸFÄ­!i`˜ð÷££?7Ú«ÙFV-V;}'oìdh‹$óÞwŒ&;Q¿1zmïb?¶Ì˜÷ j)„Ib¬%Bç×yn!E`u®×;²B¸g*.;ðCøp&žªLøJ^¾RMÈÙÍD nÖb xòꀢÄW„kZS'‘Q9‚Š?ë©ë&, mAr¾”û¨,ôyÉù±ê“«Ó×l4e‹¸˜še¤,“A/õºlŸ‰àÒÔ/®¥{½›'¤Óï]’æx抾1T³eÇhôÝdÞ‰ÒT£±æŽ#,#ñ0º-ýâ­F‡lº$Xé¤àkÇæ´Løz¨6ݲ““«o° Inø5D&ðF2x ½t6=5â⸉sH•*èE(Ú!Vmp;Ð[IæüýͼĥŠpˆœ¿| Rjd}X²ù£{sç”8ü”·aÞ¢œ™ YHœT.m†Þ>Eñɘy¸gÚDöXÅá7Ž«ý^-ŠX¾h¯GÞ²²›4çæ)\ˆ£q|™ŠçF.v©emè'˜™x6ÅÞü¼£Ï+6›¸Ø3Žñ(‰«h§uò-þ¤­ˆž,FV ‚¯XÒä\Š Ã€ XÿŒqoŽä¥dÀ¬íÔ6•âáMÒŒeR­VP}ß+ñèø£gP«Êƒôé¸ù+¢”œ7(ŠòÝŽ2¼ÛKÚóX_ñ–Ê®-å‘¿”b›§5Ûƒ.j<“v«1nŽ£z™f Í;…ªaqDÇrâ2÷UC³È>¹s.Uáëê4uÂ7÷Þ>Ö!ÂguÏO®$ŸÙS2®‚‡w ßM ©ÂV´üèx!XUlAà¯[Í„oøÎõS÷T F!à •˘7bŒîœ›c´â\çÔWkŠÕåÔ0¿V½ã(ÆNí’íÛpVÂÙÀ5‹îGb¯ìؘÏöÿ`hì9¢&öâ#™HܽõÛ¡jP-Íý Ðpîm» ß_y`Ü5^×ò@æ¹ôC†%ž‡ò|åž •W­‹—ÇŒYÚoÔó€ŠæAÿz*zÄ7„ã¸Ôó;"çí .Üûó ´»|zç5„ÜíµJ ãEp¾Œ»@7W'ßîÈ£Ÿ»3:ý¼³CÚ²êf®ìÈöº-˜VMC$±%:Û+X²Ð–в)@¯Y¡gƒÜÀ掵)ïWö²ŒÌÙµ`jž ï¾(4GÇT!¸ƒœEŽ©ÙŠsŽÍo2/\¶˜­fßú¨L’¥öMëc+#É^÷ÁïIÝ•èñýÇJÄ-Z­©~ ™ûª'dÜÛPf© Êïi“üjx™=×*•NrÓÝ&GÒtëq鎢T Rl¦Û‹ÆIͯ9ij½â–åÓÿ‚[ý‘{Tr¥…Ÿ&嵑Õ^‘¦=VZù~Ï{ã†ø €?‡ýbÚÝ$,V;ƒ^ª°»y²´êÝÒÃÒ³K{8Â(õL !¨§?ÏEfŒTõ¿âœdAˆÏÜ ÊzŒŒ’uÜæ¿ —–ñríï›ÃŸxÚ¢s|Ο£—§×™GÍ¿Sð†k²ÀçÀ'ý!pUŠQ¯wñ+¨‰;E‹xß\ÊÜÓ+›–Æ|YÕÓmmQ¢TNPD.Ø’¹4–BpÎ’8;Â|àW^0©ÌŠŸH¯Á‡…y8ÈïRÈ&'ÎH¼òDûl§õ+'TÅá]($ÜÜ1Gx8¹%Šøæðã¡„>~ñÀ &íâ­ó¼>úƒ‘¶×ãGûîwãÁ}Ýl4ՌޑX¿æÿ ‹‰Äך¥,ýù*¢5¸Ä# ~¬®ØÑáéðD:×JÚ¿8*¶·dS £©y©ÔÏïxfå«J Ä1{˜.zM™VÊ/j• ×v$9$•ç‰Ñ0˜døÃc¶»ÑºaÔ‘™Rê1Æ£>Z->¬‰bÙd_x“ØÝ|À+çU܃]ú„÷“Õ;äAM¹$­Ô¯Ò_”]-‹BšN™P`,a-VAµ›ŒyèçÞ’)ü÷iˆ{·‚̽ íqáÉÖ‡!³—×lÿêÍé’ »ƒM~ƇÜX“¨{ƒ9‚ʃÀëzèö×ã‰]±ÉuÙ?€Šã׳Jœ8ð¡|òèæÞ+«ð ‡^½¢Ô*Ž„ŠÖÊä™+Žpmû¿ä¾h:H}õ› À2Kõ„}„på\›ZùÒÊ|#YƒBšžc¢ÿ‰Õ€X´k%ÜØ·½vdBŠR£H†K`vrZ,»=Ýà·%µrX¨¼è™G×y¤zAþDÂÓ‡IPèërËY²2¢4!©´™ÕNž×ò}ST솒ò®w^†ccÞOüœño§e©À¹n œ±S´[q:!¾[q …•A 'õƒL· HçAØékA˜™ÝZêж@<»O°*\h´mÂÞÃ4‚ëÆMΗä6ý@†Ópx;îCì[kЃŽSó}yèâY¯Ýßv°¯ÕG[h«OK+I}*ˆNäásü1¦½ážÒ­µM÷,ËìRùïWcAwß>¨o §®Å.”nS5Cg‹++CzÖ‡ÁÉ|îj͸×ÿøÜó‚ò ùmmÃU 4†¦KýÄ]Ì^¾š±“½ÄØ¥^{Ùâ#˜ŸJdŸj‚:,+\æÖâ~ù>=­Pã?’GTÊ#zmUœ¤†ó¤œÔ?ULf}€›ý=@µÿ=¢9]dteÿä\°lâû‰@ß’’0¡½þ4¥1álUß¼éÝg\´§²B!ü­$Q67×5°I¢>÷»J³S õ¸Åít…ÆÔàQ`š.ËÚíEÔVÌxþQc}lJß}i‡ãQ¦†qH”~ðš.²¯È­T*ìzm BADDÈû ®ewóSØq¸?ãRÁ ÅV­¸ÃÇaþ0ùÜզƎü÷~;©Bß·…$¬U~A,ô—ùoóoU6§ë;¯µ¹Vß÷uh CòhHùcôC›5ÈÕvÐÜ<ª1iŠK^EàÊÊd‘G[+ÐeȤÜ]úr@NÐ¥¸°ˆ¾»¤ ìñü1»µÌת}§FRôë9[`¯2›~B)ü§qO<ì.r\~Ñ]ð|^zÕ܇c.‹û,”g>T5U/¾F=hg!&BŒïÝ»A+mlTIÓåA$vvõ‹[EæÛÞý4ʤûx'L‡ég ¼uÐ:q/°ÚòC…½kþ²ø«î™WÉ=¿—ê9jôsbžÒ—&1"6Á}Mo(’©ýn?ŸÑ¹×·‰7 êÚS.ÎL5ŤÉDßmÕäþëC“ûxÅF;ïbh¹ùnUçÆ<¾RÀʆ¡51DUD+æ´Gé§½J¼yÙá’aØ‹–M‡¥0ÚÙ4af²¬=ØÞ ǯCÎVlµÑûæ£6ïÙYÜX2ý†äΜ9“š¿¢B}çI>ó&¥ŠÍi!;(u?˜{¸‰§4€®ÁW L „^Ç-¦ySÄüð³|ÐDõ¾‡ŸQGýIS3USÝ[çŠØ¹ç”¤Ã‘ ¡#+AWú Ezpd²$0”÷K9(&³£4÷x-—îòÃ˹ >Ç… ’Ý+Žñ¬VW³µ›TŒ×§ÖöÚ½cîe*aÅÂëýÒÙvî‡8É3†‘XîŸÈWÅç¢yû^×1kÛ=ÃŽe.št,šIÓõ1…,Œg ©ƒ«Yü°”~ã=ÉÈAã¸ïáÃÅ"t%é¨aqP=–9 g]Ü2J¦öòêéé+Åæ×çGϘ¤¥$æþ°ËW×1d/“_†/Ìá_ÿˆÜ “|Húý%ä}À!+‘tèÁ/NÆÚ¸"ܪuÐç4üv¨–ÇħL›Ä­º{Þ ù—ü숰tDýÍsBƒè{›ódÏ_²LJg[î> ?ˆY°yÎá_p0(ˆ,•†¼^ØehÇ@3U5Þ3ÄÀ±:nÜåå8dñŸÊ„•.Ã5ªiî×ûêè"ßj^ãC >2ƒìA(UÄeE•Žö•]^gºÇc¥^ŽVQkÙ—3Y 9~j/mÁ)•l²‚’%Àÿ³Š2ö™9šhö#y â’é'mŸ©ÖÚ·×^Ö~ÁsLVîLŒ«ËŸ +#Švà]! è²Ü0rpPädmÆ…Ðû®v먓˜5ËáÜv–rTÜù²aØÐViãfùÑQ¨ i6_òœ%®1`‚‚MuåÞ·™¯­FjmHºa=Ò©ÀÔ•¸šN0^tPHJ-!ˆZs:!ØÑ”¸û[øó×kZJÄs)J÷/?Ú1fò·-BÑá»Åmò9¤=QX0›|jV|H¦?fªl*¹­À(¤´$ë L]%°rg­ý>t¾,…J?‰{(¡f§Î¾Ìîªûè¹d¡Ô؆e4Ÿš»ËÌU0 oàT@Â¥.Äš›ê´StÝ3ÛLö‚¥€¡«ù!¸ªF 10°.[|¸NBäÞCœ£ÚIe´?¢LSíô@wÆŸIØv(U²„daØSNCúú™òNñÙ§u„¶k¼·eúSì… TE]B¹‡IŒŒ|äcvH×k†¸~Gg2£xB•£ç‡²”€¡IžM^ÍBÄF›ÎŸ… ¤GœFì6âäXQykF~Í¡I㞌éÌ ‡ÛRÀ0ÔîŸñ­)¹ÅáΊLŧ¿üt —7Ýž*# ômyiâ–õ™¥¨MÕáaN4Ãhó£!£v`·/Néìs—íï2µ^{ÀòDýŽ!ÊkO;ÜDëÃð4ûÌMÇð™J‰Xx~ëúÅ÷×½¯î/¼›†n»Ý¦2&cøºDwƒ‘a±Úï°¬ãο‰G¯}³v)GkMÏ%¿–iy¢wÁ¿Ã7¼ŒÃΔ×ú~þ¶0ªøÂD]:LH[ó„C–­=¦ûÅ7}4T`¹ÏœwnPŸëÝn§CªRzjp®œÈ1Q©¾‹Ò‹äŸU6¿âI–Üú¥Ëóì~`½¡iŒu(Än«6W½Eië¾üÌs‹:×ó›Õ ~0†™³n9| ù9ï>Y†µÛë$··Ãv&ÞÈww@ ve1¼‹SBêkÿ"`lÍì ®iö¹À)Dhoée…2ýW|+åMç ,†ˆ9’ø6j‚Ë»©¡œ4L„!E¯¤ —NoyTC%dÿÐtplñRÒ†/Õ<à3Ę7Ÿ{¤î؇3ˆOë²ð’ßK¼˜[æ#±ò夈X>zÀJ6Ð+áþRŠÛË#Ö˜©·¯þÖh=­¦Š ‡êy©„Ðᬃ 8˜gYÙ.QÑT!Q!·2É7ÿýû˜,²†â&Á\è ¶OèF¯´iRnƒØ©¿%$)nf/ö®õû5‚>˜ÓþrdÌ Ò‘@v]®•¸¤>Wå 6ÑAÓ–?áé;¶ y_Öp5D¢3H“É!UÎ'Vß×2.JVê»Ýój‰ëa¯µ£×´ +J*£}]"¿…A¤ýäó7<ºÎ©=îñ^!MÒæ‹&Û{uÍcÊ<±Å‰PÊD”QQÇlèE|¨‚Úî¸DÑ4‹Õ>%BdºH2ä?e/¹#Ñu¹1öVŸvˆ_°)ΖìÂ…mºŠc_.i*Tê´sÑ0½-BA¤ºtA„B_æLÇ+ %<ñhi÷Ó„G²þæQ„KoWqssª…*Ûç ïLQ\‚m‚ø÷UA¨ ™u3'ZuN¬L)Ã^ÁÇñR‚ ¬”ý_r+ý+ÒwTô1pySp{¿¶Øò5åŽU‘Âfw*Œ¤¬% †+Ù hXà´y¥QÙê+SÑŽeØÊEð®>7ì¡·òÂaK&OÞíõñ…óUAGŸÓÿô_ƒÃgQ¾Ú<´ëCP§‰ýÍMþsîdŸ¦³=â-‡5¯„#ýÑø(ƒèÙÀ ±N:6luÒÅê@¯Ù3–Í‹ !, ͆úòT’#\µæ‰+E»¿¨&È$êzLÄ8ßJOñ@¯‘MÄÅ'Õ™2â5"êCG{Â)]î¢ vfHTÒöê黋;’*&£·§ø@{B|Ï2®žûóû ëºk²¦ïl$ üýƒ» æŽ*¾ž-¯¯ºI(?*®`£ß}¿V‰pI_$VÉ^l<ÿøváUP^ÙÑx¤pǧp*Û¶ÚÙ{. JП[ ÷€ÇLÛ#'1…óÜe†Ö-×ì ÀX…«´˜9zIdìÎö2ê ¹ÐÀÆjt1hwBÃæˆì¨vvóöWçÎéw‹Ç¨…¢Ÿ‡l9D®Z+íÆzϦß8 ÃJ‡Ž&FLž½>d@J³¼tÿnHÚ¾ßÝî¹},_®i-LÏÑ»áHa~œ‚Ÿ˜FjØÎ•§×+OøNÏ.¾ ‘m®¦xŠø°ˆÔ ‚œ1H)^¦EjtÇX'‘Ÿ0K¡ÇI$f[V…6wç~E`¶Äæ ¡¸¢È¶“*Ýk·o@y}0‰¼ácÇ«x!èHuåG–Oò,ÁƒEƒí8-c[v\߯ ×ù«CWîXý7û¶`UöÚ%‹‰UÔ5†sÄí>v¨XL^溹]@Šå¡ñí¢0Îï–¶’ž~éÒd…Z ß(”T5'´ Ï‘©uZ^TÇû\ó=mú·r ?%]¹:ÃirìyÙŽg\–©ú›=Âlj ì:RViY¶v&"£še,‡kÙM¢›§TF½à»AÓ>n "³õâÕÁ¬<¸É{,C|`”Hf,¦6bùÕŽäIå·Ôç}DTæÝ™-ù*>9á]*¾|ƒK!^ E—‘}…àOD$ÉAK9ü:Žð>JTãë=¼¦uMáç ÓÍ*¹Ý3};:¯§‰åùE|v¢ºÒéÙ†þmŸÕï~¥JØTÂ"§8n Á,Óõœ“}ŽÃ¨5¿BßÅPø‚KÍ—!•IèXc)—ÛýÁé'ê@æS)Í.•Ü//þźxƒ™£ i’«”ù=xr…çr{Ά†£k«R&»ùºÜ›¸Ü*.‡Â8ýù f|Ÿ´T^ÿ(M–wši ã}5ˆêQ1!y¥þŽi?ŽÜÕ/¢z6åjƒêÕÚÝŠ:A4l³¹âaû‰3†wª055nØ!OóÇÒž@˜¬f[“Ä)£¸ÆrZ¨WtôQŠøêÏ4]yó‡œ`¬AnMœØûœ¾4Æ/á¯CŒa¡MlØ–Û‰5øGö¾MÊM]tÂöUŠÞhxÞÙ è>è9bïóô÷Ûn†<î}0¿*ò²¯ÝÞV >ŽÊón–¯1Þœn¥U!úŸÂuKµ,´ÍÌAƒ ñ-­"ìùÜî:íâ)¯8(‹‹ƒîQÞ€Ÿ£tn÷C™;wVí2”tÀTü)oFóÐÏ–'«XcÂB¹‡Z¯Üòó(¦eÙ­m½R„'v!a-7­íýâö¡ ¿9Ù¤² t ½ ¬O³«êûáœ^LH¹ê°-ÓG’œà"skèîzŸó†kˆçô¼½ÏVEŸ38¬1Ëõ,÷Y¬³>Sòsú¦°@—ßãÆÀ`[mKSËuÂíJ1u7—k¨|.ޝ„Z8&/ðÂcÙX:ª£½qÖï  8]MÍI*o‹"é/˜}1P¯$Ä4juw¦¨ñŽÁË6¬ye.-Û„]F¡û ø+….×x*Sl¬ã7…ïdН Pp3¨ØŒCÇœ+ÚøFûin:ÈÐWpù¢w©Fg"åçB“‘í÷³O ­ê¥¢ëO:ȃVš2¦Mµ ßÁ0Ø'V—:Sgä 3Lˆ¨imܸϑ–|PÙ,F·ì×÷ ¸CàîÜQÇg“ô ù'Wbs¨!)Æ–…ðß'ì~E®ƒ0SÎÐû>û#üè~& …Ê@/8C9m×þ&Dmçyá³}½`¢^l[æZ02u4øðqVï‡:×]Jj×y#Ôë]ã9häJž 7+¼àc1‡[Aw’^NãðDâÜB (#ÙoѳµÝBÝBrú˜_ŽoU’:ÈÑ«½r§ËB÷êßG·°7 j•)p(pï(®OT¨ª0ý?üAúÿøÿĦ¶@cg;cg¤ÿ®H†endstream endobj 496 0 obj << /Type /Font /Subtype /Type1 /Encoding 1013 0 R /FirstChar 33 /LastChar 125 /Widths 1014 0 R /BaseFont /COYSJY+CMSLTT10 /FontDescriptor 494 0 R >> endobj 494 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 /FontName /COYSJY+CMSLTT10 /ItalicAngle -9 /StemV 69 /XHeight 431 /FontBBox [-20 -233 617 696] /Flags 4 /CharSet (/exclam/quotedbl/numbersign/dollar/percent/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/equal/question/at/A/B/C/D/E/F/G/H/I/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore/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) /FontFile 495 0 R >> endobj 1014 0 obj [525 525 525 525 525 0 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 0 0 525 0 525 525 525 525 525 525 525 525 525 525 525 0 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 0 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 525 ] endobj 492 0 obj << /Length1 1269 /Length2 6338 /Length3 532 /Length 7116 /Filter /FlateDecode >> stream xÚí”e\”]÷¨ é.‘bh†n¥Aº††:EABº¤CDB@Rº”PBBBºi8ó<ïÿ}ô¼ïÇs>ß™ûË\{¯µöõ[÷º7YGŸOÎÖÕ¦ìê‚äóƒ% šò&`A˜_Tð€ApWE& KH€r^öAXTRHXRDPpuóó€Û; œ \‰äœap(Ä  A:ÀœQ5 @ß ‡!ýør@ï¯ O€Ìæá ³åǃ¶p(`³‡»àƒþ2Rs±sˆýkÙÖËíß[Þ0O”€%É@)Úºº ü¶0;|–+ê,Êäÿ†ÔWöB ´ Εÿ»Kÿµq†#üþ'ÂÕÙÍ óhºÚÂ<\þ3Ôö/9yWÄ£†„ àP9{ ð¯%¸§2Üf«GBv„'ìïu˜‹í* Úö·HOKMMC™çÞçß›:¸ ÒÀÏퟲEÿÍàߌêŽÜ`.À/ F¢žÿ³üÔ\ ®¶pÔ@ˆˆ ?|Ôd HÀ]la¾˜/ÊÄïâŠD¥P- عzàÿõ:EE ¹¿–þE¢üo€~“8¤ø›$ ¥H ©ü&!Hí7¡ªhþ&Tžö?$.éü&Tžþo€ ~ÊÌèBMò›Pf6¿ uô  Ž°ýQ¦°?P²ûQö JÁáDõ þ¢”ÿ@”“Óˆ’Bü(+çßFY¹ü(+×?eåö¢4<þ@”†çˆÒ@þ( ¯?¥áý¢4|~#êùþÿ=Áòò®¾|"B>A0*SH &"ô¿ºÀݽ`jŠ1ÔPüµ õòð€¹ ÿ¾2P_ǿَú–`0_zÒ*õÜ1­>âm°Ráh7º¼}Ã+­ÚޱV‚gS 舒uwîù“Ëw™ÄkXkL>×tžÑ-º_”÷Ÿº¿JŸ¸]ó¶^Ëôo¢39ÊÔô[uc9{¶Mò±~üdG]ûÛüàÛdÓ¢Þ샾í|NEƒuœÌhæÞ:³ž‹Š™(g" #ÃkØ…˜õHÓÝß¾Žœó!MN¼77ò,Ø1·‘göеŋü²7/éö ¦í#ë3õ½T?¢e³ËWCgäÕ¡–¥ÑË^yš¦q×6æ?˜^ƒÍG1YãǼH‹ŒÊ6·™Êñœ"³ m\á2•¨ÇbDðèæÖ"fC´êWUì!# s-ÖfZ¿‡ 'éÔUîê^øKí.~#Žkn¤²‚ÙlWqfq±Ý=RŸŽŸ Wº©ø’ÁèùªšxÃQ¹¸ê…])‹ÛÄjŸÚ|ÝÔÎ`Ê´ü³^|Q‡¢WîŠF¤ÒËÖxJdÑNµeJI¤Z¨Û¡/æ±Ê9Þ÷`£Ñ§¿êËÕâ”Dé.™ª 9N—‡üˆžÛ«Ë²s¹Êb ÒYZ²™GG­óí {¿?ª}WÍ1"Ov¾0Ž”ÉÓ8˜¾AÍókóYjÅ(`Œ„ÓÒÍʲût&{kU˜ô†Ÿäâ*Übä.L£ÅÚ­d}/(õÈhçØ}JJ×d´Œ­Ÿ•ô95˜vÅ=W€àÖÄî`rƪ׊š–m¬g¿8¢"f»™õ¹š4ö©ÅQyÅ%Bº!ni/½Ýÿ$,7¤€ýñA€lVà2ñXÃ6‘€H/eléô¥°ª0åMéò„JŽì^&YžAH?î“"(í××›¢‹¦qà4@È›.†#û•|™©^lôh&—¿”ÈÓ2è,ÑÝÃXb1)®íj -~åse=ÑÒíòM.â&² Xú8Δ±Ÿëûõ$‘ÃAû¾ÑdúLŠä $ì´Öö—•òoâÂ]òe ”Mûé+m³ÞÛsø1[Ùºc˜øØoÖ"ž6mîò†+Õ7t DÊWrѾevM'…&Ç7ûn•@×;Á¯S؆‚d”‹Ê*ºë|&q°(¹_?ŒŠ0C [íÅeÒT<Ä R%ÃUXŠÄéž’úOá´' Œ}l-¨|‹º15©rïµ·oA×üâT•ù"-EÀÍ…H¼ŽðáI±]Ãã‘Ð1oë'ª‘âçï9îùêx¼$¸HÁÔPìô,ì²ìÛ`Þ[¡°BŸœ(¡€åêÏozÕº/¹§mó¤Ÿ3j]_pøÃ°ÈÌ;¦eS×ËÅ?Èe¤ÉøïÆÇÒžè{2tû7ñè[ƒÀ/äºpºÝ¢o¦p¨hSBLf‡C³ºŽ5ç[rtL›°;Z‹¶ô:ìêµáíR?à²ÇyÎÈ=Š\=vyrÃbìw†78°?c¨Çk«O2<¹•Æt¸ÙˆoB•*KõÔŽrÙöš9ÛþÚ1fîÜîsÔ%Ľ!lX3E-Þ I)W»/Çzç(ŸR|¦Ù¿&¿»ðkµcð—/~ \WTômdšûi¹Î‡‘ÏFú%è˲"æ/ç?´J䳆,:»ÃJ¨Î'¯uǾ©|q•p¡ƒ×òb<*´¦f‰ ×eÅ3×v¸Û”¥eÏx¢÷#BÊÌ–ým.º±iÅ•Qr6ãðÒÔʲԧÖ覆Þ‡5ô N9‰*©¸ §©*V`×ÄĬ¾(8ÇïÛ_ÂÔÜg‘ô~Á¡®ö§ 4ù©1¹Ü~ÙbA²í¿6¶uš“Ô…ÝÜvmœà‚üU¬7IwR«¸Ø›Ÿ˜ø-m&µÇT£~ô§<æÏqŽzXÇîLD4òUÞ1]¦m^ƒá—^úðhËÐó2~§[F÷ ƒ}¾ ¥êþK®7û“§ ½¸‚A«‘‡ñRÚ{VÎäž©eÇQw)Uƒ›J]9ˆmUÙ#Wg¦óXœ‘ ˜ÝËeƒ8Ê„„]?ô~Æþ˜ãaz2Í€E[ tûåaØÅ ëa×ΊŠ0ÙÒ“‘¾š¥}¸ˆL ç2 ïóávŽ'éü«ã ·õF»¦f—¦“e´¤XMàyhßcdž㰌ÂÄ|]ì.RLà"u«UÄH­/wŸ½¹ú$Sªi¾©„õ@œÝ`æW|J?Š_-›³˜|4­ïÏjHóÑ0C‹~EúAHºë¡®Ý2 d ŠSYÚù}´>#½udÁ“Ä· ˆ[½nUS5"™äð³6E…wqgíØ¥÷ü誽‹%½99Q9’Ö¡·R¢Ÿr=³}jŽRmÙ5¢šX÷° >Ÿ…ŸrÜ•xŽFÜðctƶ‰IòOðFf,gãFc ¬µ_MSûòºƒ/EËÇo+lÔdŽUCùé¨#k:KeJwxÞ%Qè22~œŸKªü˜~‹˜Ò6ç("so„±Îq¢a>•öaRÁ eÍs¯çÚ¢½ùŸŠ;su»]C¯@BåúТ›Òä*¦ØH"¯ñë_uQ&µ{ÏÍÄo/ÚÎÅ*ó­(˜­+äòŸÆÌ†È-Zd®PÍ¿'tÓÕ;,Ì9{P߸–ܱ\O=TÔÈòìò±‰iøü†n@2=} öUæÝ c.&ÅËèdãÆýqQÊ Û¸¡Õ“ª‚= ÷䃆ï›ÂË{XX+ÂÚã)q¨K‚&ÈŸÐëE Û¬í<®k_–IØVH,´¯ <å['€Ÿ+Ghªàҥˮ[Xá”}ÎŒËwdý<Ý‘spÿ#Ç(¼úÙd¢(ÉöI÷jUøÝ×b½•Ðj™„]hD¸õ0À{$Ès¿$kûIÕ×fåt°…CŽôZùÑ-±¥'Ö,–õÍY±m(ŽÜµ{k»rm-I.øÑÜU‰¦±²Gñ÷­æŠ#S8ž¶£jÐt˜Q¼Gk¯+‰\wÂJƒ¾s z~ü²²u.to†„÷K$Þ€—²æçô¶‹tj‚áVŒdNžÏE8 RªÙ®„¾öË®¼ÄÊ!ÑÍýi£‚¶m®’ª„£Zt1;%>ˆŸŒÁÍg˜DªÁ8Ž« Èå¹DÖLƒ•T}3þðzƒŒhH‡Vh§bzw>±¬2Ì?ræ9'¹õ°¶üiqsu¯«KxQlÎtnË9Lî^Mw~í9ºê>U ?Óí*°Œü¬£·È²S{®*¶ÍØÛŠéÁ"N"s·™Š$ôÕ¨•Ø£¢‘Θªùô•6]d¾°–h}`R+­àÚ‘g|¸¢s4.(àäá„yI!v…nÕÕ!fÆ%I§m}a—ª’bctcAz:UÆBÑð¤ãsR²v‰ÕzBêåRRRl›eêØojpÜ»ÉÍ;.Áµß\üÕ fhIS ²¸eØIÞ4Âô€A0ÌqT¡ö”ÆI;0ŒáÕèφ–Ãûµ?µht%á?¾)Ôäo9“;²R¶Åð¤ÇŸÎ¾ #6ÿ”L¿¸Ë¨÷’š­¡Í`‡ë°ÆTdÜ­8*é"«ÊT¨¯¸øÒý~5l©Â¸Ð´gîLx³™‘*3‚õ[Ï>™•<\¥l 8‚Ç·¤šNh#+ô–Ívkéù†ÿB”PÏÎiĹũRÐAªÝ]ªJ¬€ ëP¶×䨵¹±]°ûSy«³<4!íòSœ~âüÓ¶€ôÍ‚š ô”JöìÏ*è㹌óå6×t7‰*`±îï{ `zȇ-?7xî[„ïÏѺ‰”bÇÃyŠ?‘F•'è Táak=·ØYNÄEëÊù±¢tbìSös±çì¨+ q®¼½]ÒÔ ¼ØñT­Ì»=j29: ‰9%’†/80z/½QMk a°v² -àÚ‚PTãe\ö8N´HÝe!F~‘\:MÈ&ËâÐQF4(¾†-÷Ñ7ü(?3 >@º˜¨TÜ EB¼üú<)yëêχ<ƒVæ6ˆ¤½ÆóyÜ?€…åá«)$À÷ü£nŽêYBý2µ¡“¶³½ÑF®EI§°¥#)‡¾ƒÍ<ÍNQþÚãåÅ7¯5)vJh+¹#ÄãÒv«À#\Ï ‹ÜÇ2eʰ`2ev¢V8 äÇŽ}f}Vo…ŸbÜÊ\.ÝfFã:¸óÊ)?à|냈 (ª‘ü#e‚—6NxÎEõMÔ´Oæ`WÀâã+h‚ÿÖàœ uŸÔÃ= Œ/½t¾;ºÎ±ÞÃád¼K½*VÎbãKðŽFo÷†:§©›°³ËÊ €µÿJ“3al!+ë¬îõŒ1Çw¯NÙ7?#yÕŠÃï‚YðžÝ­:OÆ÷ø$)МæQp´›¡¯Ðñ u¦kÑäËsÄvųÌ8«¤S)¬q†’ûoÌ¢x1†B*uŽWðï‹Y6OÍ-w»%:vzßg Å ,Ì ëdÒÓIÐ@@ŠÛkKÊëa£Jl·ma­Ð²¹a!ç§”Í2UhUï@FÁ„µzekw1k,Ý5}´8M[vº//©hZ˜¡ý‹Û£ÍÙ/æb+îïôGr’™¤O?é¾¹$ËÙ~±ó¤s„¾¿kf<×b\[<€†XØÆn2h%®& (Y%ê]Dï;é …ØH–>fKtãÉ^’LÛbÙõå÷Ì®Œ—Ò­·ÉK[3gw„öÍOúºM´>Ùb{­5Ù[ñzk3dá?„Ÿ‹ýâd•e—=¾Ù#Ðtº+jº)fTù€­™2¡þ®Áö#6sÛ¼Û‘+½G¹Ýa8£–й+!ÓÎpW(Fñý(Åw„×0âfðüaý%–ì€3a@Çb©)³!¾ ÃkË ^¢"v]Íš¢‰šDáxÕ'ÞdOåÓöSM‚]Þ¹ó?°Ä}Þ5n¥|ôy­¤÷~Må—ž|\ƃeR™Õj…G«vm¸>Xáì/œpOpë™ðºŠy¸£K´t9 %%¦š¾äøí0–™g5XáÚ7]À›ÏÑ6Æßˆ« ÓéòÜeZ¤}Ö¬¸?È•\z{“Í-õ¡}ŽY¯Œ•W6†šŽÚ¼û¹=u6‰ËËöŸfm§è˜ÏµË« cWD7fy²Ã lHy3@ ì…†tb‹¾um6ÊR»wýJ§üÙgA¡G';ìAúúBnÉðnX_ÁWÆúA(áÌîL5[w¿ßmF”滤*ø“Io Y|¥0qC{bóóIeÉFÓ£ØȺ'³Õ·Buwae.•\,v,Íï_ó'Ú~òˬwªHN­~û2nº3äÂ3u¹×·xDOœÐúa-ŠÐÌÏýÁ¾ôÛn‰›ê°XȽŠdOq°´õ`úväxãþÌÓŽ8M”…þ|F¾_47R­Š‡émÛ\â«ÏÚÍ  ï°o~;oê`åüñû‰µØÌ–¹|•,,BÖ}c1™3ÍWM/3 …FLÄÑ5ÃÙÊRÞå쬥÷Ù£…êçØÉƒÑ·+Áf®Šš¬éÓV'Zj©D/»áž“žˆ)¿cÆ€L‘ƒ9—GÇäóè§!š¶ty›Aµ1™üMKn¶QkϽ‚ŸN·/’ýÎe°ËÕ# T8ø­›§%UÄëOºáŽñW‡ x»'µhè4!¯€ÆÁ:ܦî8cÜö­ v¬º´¡Ã@_Ã¥Q¥)‹vø§ÃÆ’=¦Ý€?x;SGJÔÐëÉYòðPOApûÉD/ä1Fâ‹pŸÂúU¥H­ˆâJÎÀ:u»2¶uuSD&2Òn;uªÏ'ýLo[ꃿ<º2£©0R'YÏž–ÄkËyjVÁ4_(%²Š+£§â36ñÞ™Ø.$¯•  7U=‚U+DËjÌÚÅ4R?ÒU|R©æaå^¤SÞÈlRÆÁ;ÕÂÏfáäéÕdÅïÍ?Jº!ÝáØjƒ·ÐË#]žXé•O1;©Ëz•´¦@Uv¿ŠÃè±/{0KÀ<6U„Á5Q3»oæ“£*›˜uœDÐùcâÅ’ %ÔM? Pƒ`ðÁÄ´Ù0ªî_›úÔu>µnꈔx˜\¡å»póÎýÈWó"á3õKz¦†T±EÁìü‰Œí­/8•Ì‚E­RÍC}ß /ü›Ûkç<Öws•{-°ÐÔ­Ù¹Å/æÿ¹­Ò}ÀÞkh¤x•÷2ï뾸*'×ìa¦yi]`WÓ¼ÎFìœ4bûó#QŸ,L7¹|ÓýĽ´Ð¼÷JUp½V:Äè­nTðV¬þ¹ ýÒ¶–Ô#E.¹ã¡#5¬|*˜ú•çüBáúä½­„¼Þž"ªTnZ õþÄÍ™›˜áRƒ¸hàÂÚ ›½~? ô”t×\ö‰í¯iD¾$˜?'scã’?¡Ù—<ÿ 5öf!Íû[Ð_SÜÁPûÍR¢ Þv"FsšÄìÇzà#æî°Zª—¿ˆ<(\müÔÜ e|ŠNoeZkZ'WHË ÂX¼¸™Äœì½úׯIéët%°joÜÑÝcit)_‰¨*è¶/jG‰ÜÉPÚß[÷‚y.Z{O6Š4ŸLÖJ¬o\raêÉa_S.ªH·„³ ¶ßøÔõÓ¾àë#z†$Q®»&¯¶#¶~‡ÕNè.ôâ í“\@”L¶êr½:_¯Äæ©S<]>§K( +™yø60!àØì½Ì}ä0!iÂ÷ìÏû}Q›¬£p³ï ×òg'ê¡ê[ã¹YçUeψ¾ǤX.§LÞw{?-‹•bPÙv[RÓË ±ä6fÇ ­`´·¢žÑ¾¿M;ފ°}Fšu”ºÆ¥-:ú¼‹;ìaÁ—$*!ÉÆ9™û”Ž£ƒùK_ Þò E½ÎÛm&¥c7_¾ìk®„{EŽ)\Sâ^ͨøQ½ñ¤î8¾:…9óòC&^ns É‹«óqµÙSÊX7îÎYI9?è¿ßK»r#18¢>!¯>{[yÊzÁz¦¬É}Fa\—7}¤‹Ã.zyöj¤”$õQ¥ªEÂØNÚÎ;Âe¥Ó‡7U×tdãL´¶ewšœ`} ÍÚté®ÞwÏÔ×M‰1'êo/p+#|ÑÎD"ÛSÓæZÌÌyHëIìŒó(D&u oôqŽ9b.™1£7,½ããÝIlc> endobj 491 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 /FontName /RNIILF+CMBX12 /ItalicAngle 0 /StemV 109 /XHeight 444 /FontBBox [-53 -251 1139 750] /Flags 4 /CharSet (/A/B/C/D/E/G/I/M/O/P/S/T/V/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/v/w/x) /FontFile 492 0 R >> endobj 1015 0 obj [850 800 813 862 738 0 884 0 419 0 0 0 1067 0 845 769 0 0 625 782 0 850 0 0 0 0 0 0 0 0 0 0 547 625 500 625 513 344 563 625 313 344 594 313 938 625 563 625 0 459 444 438 625 594 813 594 ] endobj 489 0 obj << /Length1 918 /Length2 2602 /Length3 532 /Length 3249 /Filter /FlateDecode >> stream xÚíRy<Ô땱d9´ØqHYfÆØ%Æ®2&"¢3ƒaÌ0‹¬S’-B¶Æ’B…±/£“Ž"ûÒ!KÖu4Ž#îT÷œÎíüyï_÷sï?¿çù>ïó>ï÷û*FÚ«Á1D¬‘@QƒªCõS;¨U‡ð+*š’°( ŽH0CQ°úTO À©^€€jëÃtõ!ZüŠ€)Ñ?˜„óò¦Ê¦G?‹t¸–„C£€ Šâõãx QxÀžˆÆa)Áêì>ï vX2–ˆÅ¨óC¡‡¦X/ü95Á“è|¥1Tÿ?JX™ Pæ„< p"bˆ|0€ÁzòƒDÎYXN’ÿF¨ïÍ-¨x<å÷Ùþs“þVFùáðÁÿýü©, °!b°$Â÷ÒsدÙl°Õïûª5…Ç¡á/<€|¥pd \ƒÄQÐÞ€' OÆ~á±Ì÷!8}ûl·5³¶Sù:Ï/5$ G œ öÿÓõ³ø †~ÜîpA€ Dr„œõÇß…ïÎ2' ‰ó ´´‰„ æç¼ ÒB¡Ž€ÁØ N`°:Hál8= <‰$þÏãÔÔÀþœ™1Ÿù¯”&°b-¦\"~ÃPö&aÿ¢ÐÀžD*éã¸À¿(40™s£?°¶†Cœ&ß.6û†8iÌ¿ ¿÷ØÄ„ªÓÔ48¡ôtu-Hø¿ë¸*ÖÚŒs DGOó ‹¦’HXåË£æŒïì‰ã ‹ ¢ùG†‰hƒk>·ê¢‹i潌=ǸL¼ê“5Í"½É…Ðq*àØDµÓfI–˜Ðüžy¹K[RäëMagº,ÞG$Ó‡¶çÝç³B¤œXY6ÁsþòìÈ·Â̺ÁËZ\¶ýÅiÎ÷Únÿã—·yHe³³oxÇïzêXû4ûš¶Ž“EÞ!&ªZ vØN„P«3~I$-e÷xO$Í'ôHåÕ*±‰úÃfènê¶ë‡Å~c—9CÚÝC/½‡ýðÞ¨ø+M¹„‚Äì†Æ­Í²°Q/¬N)™N4ÌIEi›?RHꘒ «½MS¿:6Õy÷ô% õêùÂÛä1 „óS ”™ÍVWe9Ž"–"¸JF`à îöù*ŸyimKæó[7ódnd<Œ™Ì0…†»¡G@Itëˆ ã¯!ìêKã™{\ãEsÊs2÷_oBvm©z®¤¼­}ÁwŒÁ›0åa™;? 1ZŒìçI/Ô= Û!-HºÄÐnæ­ÍÞe´/½$žˆÊ°›£;|áÎ;™¨¾ôb«™_àWeSÒïûŽqÓ“Bä9ù#[Ú¥¦L–ÃpµNwë¬[8/W8*ÈíC²wZ΋`ÖFù¹!vvC[ÏÅ• ôs áÙ]=ä¡a7öùM¦'ÙøPã4Æ™<»ÓGV <™ÊÝTûVèèÁ„˜¤aÞwùãUå±m´ž÷§fÅù5ÓeÆ´¼‹N?W(Œã–Ñ—ÔôG~z°ÌN6òê“ ³<™lMȉ¿ˆÓhŒ)ÔŽ^ªäJÛ°ÙOçk¥Ë†@VÒÔ«E+÷=Yoj>L¶À²¡uKÌÊ S!>¦N8•/ Û“ñȶ܄K3_*òlIäžt^_‚èó„‚´šk*wm÷{þz@¶(g°ÏæUºQüM­ë—yÀúÅ-%ã²²<Ç=Iêu(aÚBÌI¥Î7]ûÍp Vc}ê‚w&f×µgƒBïÅSßk(UÙ/L$3NìßÞ³Ìøí]ׇê¤H ¢NLè(0ÙµW èf¦[³^¯Ò£øÛ ä+pÒˆQ›`OVÂï¶ÓA£s‘—¯vVñøtÖÝÒ¯(* SÅ ÇèÀ§XŸ\>]ûm¡ôãTý‹ýß\)†Fc°5ûBCýS™òW¡.ÏÚשŠ¥¹@yÕ;»\[^ù°+Úkõ/NìÝ®Šés°úéYt:*NëdÏ¢Yï]±B^†Õ݉˜£"¿‹ )ð“‡PLü¤4¥5,ו”ý,B,gåR·&‡Ï×=NŒ…v½Ÿšï].Ër옥§JÕŽ‘µ±ç©Òy‚á-q-Q[›‹Î ïw•¬nk©¾" õáN²¡±åBtüÀGfP¯Êr.m>hôøÅÙwF\T)Sj»0íþý@*†‡FV=ç˜#Gïn¨óqÖ·“ƒõ)¡çÐÅ×Ⓠ“™/øŒ/‹õ<í}r“ßÅSÑßÔ ÷‰·Ï׿OeÒ'S³n1T"ÖgиRBçQ¦‘~ŒÔLwÓ*ÂÁRÀºJïjg\žB qÿ@´—Ì+ú×eÜPÍÝ½š ªž¡ØDb Í(83_¢RÜbÏ\Ñ3FH)ÌÛÒöÊ•®ñK!oûéO߯žž]ž ÍÖ¡öø]„µ™AmâzYµ¼ü<¦Ú¯Sæø®ùÞh<Ø»0^¦qÐ?yá„Læ„ã?ºä”•¯×iEKƒä ­Rû"%Ê‘×cD Cß7í“dr<=±£­{9v‡ñf*Íà ÚçÖ«lÎ{$÷^ò.!\PûjØ¡ÝÙóçÙ‚"Ìc ¾[GªJ—¤ë+‰ÐO®ÌHTÖ’¼š°5r§CðÄBiãŒø´oÎ3žßÒMCšgÞÏv$£ãÖà…‘Us%O‡Ë:F Ò¡6<ަM“(¹7ùä†IØtâ//ׂêÌé>Òsi}Ü¢µGÄA dw„åss9V÷åŸS›§ª÷R0ÎEÓF‡°P€R-Ë+g`»gOo!wnÜ7-ßÝý¾åõ©7Ó‹¨Õ1ÙìÒÇyÂËÊïËñí¥²›ì鎇Œ`Ö¶ Ö7n¬&‹Ô:¢½¬`Nô¾ú£ðð–ú*Qµõ­;Ë5ñ9LÅ9hÄ2ød¨´­á‘™KI‹úî)u—ÏVñ<Jj‰›ëÍmZ;±=;ìq³ÆÛg[ù†1 »²±EÿxQ5DžõÑ(/)®.xGDchòÁub»Wnñ´%¹Fî˜V¬ôF¼,8§:%Õ.Iú(\’ðbñý«¨®ÊŒ‰Cµ 剡±o1°nÛÓ7‘/qÀÞ¨Ýjã\à'=™’÷¯L‹vô>¬€Ý ŸãžžU€iÙ!@»ÌÐfÉ]O/<ÿÔpQð÷@îëiyOƒ«ö¾TnÅœßi&ʾ/ 0[ vBùúNMZF˜ÁRÅìmjÜmaÁ]×v×I¶:0_ ÎÜ‘È3,7Þûë4Usß&ëáþH±êÎû«2ÕÌÕ´Œ Ù^—:<~%ú»k%®N¬_ègÓùpßÊúy#Ëù|SÃøŒ“pORòÕ”C²¼'~h¾ìÚ0¼nËâ)C”{ǯë¿z×â€÷ÅDŠ”p)•ˆDßßµÔá.Â[¿ÈqZ˜éàú¹haÂ(‚Ï£Ã; ÔbuÜàF¢ÜÊu{6{¿ÿîTv܆ò~ƒ» ÊÛ'Ü´^¥º'X”Õî~c>ò¶É¡Ö+‘¾Éß×þ^2‰&ÑéZÑ]¾óðÖcÏ7Mƒ…ÙöUºÝƒº¡G¬ŠáŒDf\çeO·'³Ù5Õ܈é{j‹Î-Y=ØF«¥{Ö|m–Áaý¼Ç—×Kà4g‹n@TŽÜhbzu³Ï®ç¸“!\}_¬¨$Ínª62¿ôŠýk³1ÑŠSõa~U˜ ¨±ß"ÞЬj/,Ý;b`3æñVý˜–¢¼týÍáu!Ó'-¹Çã [Ëó·×½åŒÍz°6muP9ĈÞ€GSfÌÅÅFªÓ$AcÍg¤gn4›ÕGÕ´OèôªìÛ½Mç.XWyµ Ô’%sÇ®½Ý˜:â(!εr#>óۉ%}ÁPíu{õp<­­@•Ò"6É‹4kì`ÞüqzÕE_ä¶}6ŸO¢ÔÑK×Ãbo‘+„*†Ru×}gä|ážÌŠ×éݘÚæ§8mwÄc“„¢Ÿ@÷â„ùpºŽý¤9óNG=îIø[?wFe¯??_«œ¼™ã[wãù 9AÁŸT…i«Ü9î,X£êËÈY“1YQE.Ö·½ÀŸdüÀ˜ØØ:ÓÅÚ¨ßÝŽÕ³`·Ú}ªÞ×Z1¡c|1qiŸå¯Ì Æfæõ°”Jœ‚wéÅ)Ö%Ž4ž ðœ;0*ù?þÿüO ñX‰BôC‘|ùÿ >Ž­Eendstream endobj 490 0 obj << /Type /Font /Subtype /Type1 /Encoding 1000 0 R /FirstChar 46 /LastChar 69 /Widths 1016 0 R /BaseFont /SAODIR+CMR12 /FontDescriptor 488 0 R >> endobj 488 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /SAODIR+CMR12 /ItalicAngle 0 /StemV 65 /XHeight 431 /FontBBox [-34 -251 988 750] /Flags 4 /CharSet (/period/one/two/three/four/five/six/A/B/D/E) /FontFile 489 0 R >> endobj 1016 0 obj [272 0 0 490 490 490 490 490 490 0 0 0 0 0 0 0 0 0 0 734 693 0 748 666 ] endobj 401 0 obj << /Length1 1341 /Length2 6933 /Length3 532 /Length 7756 /Filter /FlateDecode >> stream xÚí”UX\ÛÖ¦@°àÁ­pw‡ÁÝ!¸T…Rh°àÁ݃HðÜÝ  ¸%¸{×Þçœôù/»¯úéUë¢Þ1ÇüÆ÷Œ9æb ÑÔáA-ÁòP''(@FMW—‡ÀÃÉÍ-ÁÀ ã  P'Y , àáH9»x<Ü¢ü¼ðƒ uöv…ØØÂÌ2,% ¤Á®+ @ ³;Â5¬€¨ óæH98´ÿÚáл]=À N bX‚m N\yRr²†„þ¹;ÿgÉìê7`þÛ& nurð€ÀÖ\êPx50ÜËÿ [ÿ-.ïîà tüKþïNýu #ÄÁûßPGgwØ ]þ;Uü/sj`ÄÝñ¿W•`@ˆ•”“Àý¯ÄMâiB`V¶˜«;øï0Ø ôßàûÛ—¢¬‘²º4Û¿õïEM Ä ¦ëíüê_Ù3Ïo†·Çâ0æ†÷—žÿýçŸé“s²‚‚ N6^AÐÕè8 ^ó N °ì7ÌÅé…Á·à=ñXC]1þ:Q~n—3Ðì䶆ýµô¯(Ï¿£ÿ:¿‚ð0ü¡ ß!!—›ÐÍöŸˆ\æ ýÍÂ.+¨|\þ„ËHÿ&¸‚Ìo‚gËþCBp-ùßß§ú›àûÔþ!ax¦æoâpéü&~—î?C.ào‚׳üM"p¯ÿ7\ô»þy\Ö ¼Ší(à‚üðªö ¼¬Ã¯ëøá³ÂåôÂëBÿ@x]ç?^×õ„×uûá=ƒýpî ܆Ç·áùyá6¼þ@¸ ï?® t³‚@`пÚò?¯´4Ôë5?€ƒ—O ÄÇ?'n¿ÿ=MÏ ââV’…7·0ïßQ+wWøôÁþþðÀ/ØØ¿`°Ø c~j%b—VVâ/W0^ŠÂŠ(mÓ¯^Ó>Õ‚<—€èðaPÅ…u¹Úà¦,“{ e‹ÚóŽÜ-ò«¯Öˆüá—øô™‡-‹­LŸ&rƒ“L5ïMgÚËàŸ8_ê§Ï~ jL.•$ö¼;êý™¯É,«»ºHƒÐaìQÛ‘"(d Ÿé ZÍÈG£›îRÁ¾ä‰›œˆ¼4ìoŽÖÈöýúÕÿ¦-/éÁáÚêiT¯tÎ\Øxx&©ð’‰¬ÍõR´)¡æCƒeVeGFeÔt³Óü—Ë…¶ñUæÏÞÓwkè–¬#¤Û}ªÌ¨ã"núû¨eòXÚÈ?EåÊÕpíÝžT+†ró~”;#N–ÌÒØ³¦1×âùDþ åëfI› ¥ü^êqêÒÝñ8YUÈþ+ÄOSêGÆÇ'"‚›5b ‡W2%¶“¼\{g?ã옋)ÃÝ[BL;þµgüð&/aé0‚¨”èÚ“#ÁîU_’¯ 7©!ßYÄõmÓú°Ì4x‹ØÏä>+`¾UZϞʊîùö’ú&ÙÐÁ ½ Iz!Ùêçþá\¤î&Ü…"Å5ØI³Ô%ÂÅÛ š2k¿j¹•<—©²"9™F­îª> پ»_¨Þ¹e0FÍ$Á¼!¨sÝ8iP -Z äåØZ¾WªMœr›g“ê3EWåœ èN¯ð‹xžÐ1’M0&\‰{Ê¡E;[«=Â*ËRPQû!tÌòq/`¯¢¼Bu,$u*ž¶Œ&²’ ÿ¥msaÐôð΃ìø¯ÕÝÍbW£hTåŸ4¥î܆]˰¾)Ó ÙŒëcº“ðæípÈñ»KŠƒÊ1ƒÎ0 @ÔF+o/6éôþômlÑy ,í%f\T Qã­!¶C'÷…ýý›XëÆ¢Õ¡1¼MÔ´vâ6uú &5Y2í˳ه»«t¼ùù¦œd^ËÀ¾ZgäÊËú`b³ö‰{®“Ÿ‹’es.¾Lb¤qÏe"5åú7d?T¼ãÌ_¼¤á@ žŽ‘«ÑøiíX£¨˜«u°TrSÉtfüŒ œÿY׊OmÚkRjÝbØèßd¡Î$›þ%³|D÷Ê }Þ«¦n² 7'”;²ÑÅ¡ ˆ%’CX¸˜3´WôŒÑŠÑšBl#3f'«í#Þ>Eö㮵‘Œ‚¬–>ªÉÑRH®! 6oó}}Š©äó´FðâÎCë­ÿ PwêJf5à É%¾½ñ€¡9Ý•™Á‡L~ÚÛÝ*U\s¼V ïä@ÆSöA„o´ŠkÒÛÒ|þ ôPB-VV“ãYùV6c^ ½E¾ë¥žÌ£`*z͹º·7ØY©U}×5=ÁPBvÔaßS¶ ƒ[Ÿ‹ŸXˆ¥ô ݶá¨h p0Z$ßMžúÉy<ìÐ+¥±É IÀlf-Í·íRFu.ÉØ{T l‘LºGlÜvQí»ûFýl¾Ž^k9m}¾VÀ;Ô".èoô6Òy¹€RQ2O·Øl» ÀßÃ?ö5,˜Ô¥FE3oâ×›ò#eb¡WŽ ^3zjR÷Æ"WŸïá%›ßÂÛ^½Þ $¦¥_‘®äàAâ™…Ê>0*Ké}³ƒ·Ó½juÒÛÞ‘,ag·~iÖ/úQ#ÎÈ¥ d b–žî”¸ìÖ½ëO06õ7€PÇ`Vi*ý†CeŸNE3-^¨Éêw ºÕ\ê«‚$¾Ç…ÑÃyw£z1'^ÂçËìô±Í£{—3è;Üi ûFg¤èã¢Ïì6_hoXIš][w íH‹Ó—¢ ϹfrPk¢Jä,Äœ4`ü` ã±®?ÞꦱÜP=IþByòñwô¼e÷a‹P íÐäÓΆ¢4¦m£®ºr„§O_Y\ß kƨ…ó²m¸Dk;aÔkfÕ|.P“š‡li 󂘫“%ên⽡WÀÄ‚¬qâÂèA•”?ÆiΩi ¼DE¹Îcû?ƒØêã3Œ"‡_–rÝÛ]ÓÉ Ùê)·¶,=Ž`¡`W†~`k% 䪬øŠÝ Öeäå*àœ5ÇdŸ}ˆº²RÚzýA¾gb(§ $@ u${X z³''Ò?Ý0°qòå…l{Vz©{Ô8Òt_ïÄPvÂ1ö¾~ ÐÊ}‡)ž8í,Ë ,{E€¶sœ¨m¬lVR˜ë‡áFqp{ekEKË¿ Ѱ“JŠ\ Á.ê@¥,"×ÖÙZb‹NDÌ‚:Äw%¾Dt—uzq>ŽîË,Hw.|9TãTQíÑ^ïæÑ°_SQÓçüj­GÑJöoLàS<0!ƒ„H¿d'Œì¢ ú±21;9‚r9CHÄÀ¾¥=QìéüŒ6 èÜ©¶Î!^“²aXØXÚ°ð5Ò§\܉¶¹1ÖçD½ò_¯¦2/ ~»³ðÁgª`îFö}n O}:x1µþ‘=è$O íõÏ^y-GûÀÄ“¤‡§6b[î•EýÍK߇nú³"¶ýnåAº¡F”îeb¡Ò1„å$¿Þô°­è›™“ô‰’د7—vHRŸÓðGôW]h+÷zÇŒ¡µa¼ë3+òmï[G!‹›ß’ž-ÝP©î+:>žô 3Ø0Ö«±ªq³ß`P°~sÍàIÛÅ<ö¡'w¯p ™|{ÒmîÆTð½7•=œVWŸNyÍã)§Ó› ægí¸Oh8½/ºCÂÈ-3L­*”ù'й¿­ø’Ž(Ÿl[à1|»š=™'¿çÚÆöZæ£{qHm¶QÒ˜«ß±®yU&Úðã®™PÓ)›½öH+^‚f-ó~yÍ¥X_¤Õ:wºc 0^‰óQ¶=7dôÂ\vV„NªpqÛþ ešPMnuny¬çŒ'~8‰r¾îˆJ¤<±”9$åÈ‹ä5Ä5 ÑŽ—@aÔ1QaŸú3ý-4ïÊryú*ÊJ m€Õ}§Êç.ŸÓ!i~çäÍ[­);ÎÝoâÁ`/—õBôÑ£‹‡E‡ ´¼MLy|%²c8Hy•° ‰ˆ7ÞšÛsª ÔSo£ªu¼Ÿ°Ï5ÊÕqw¹ M¬}õ²ÀTî Z(¼­j‹Ï¡ýô=#­j÷q—Ž;FF ªÓu‡4ù¦€å²ÁŽ]ºPÒ1Í -w»34.Yêù MúªsõôT]ûi—ÐøÐ‚úÐ@5ÓpœT~9ï@ü«ø_bëÙsA ;¦âÎ1{mÌAÖÁŒIå¯lÀŒ}ç!I¿ŽÂíÑ%¼#Áê[©½±tüçõÑŽèŒ(åDov¾™¢ùù)ÇØƒnÉJšwXàóy&`‘‰Fy ¼~Ícèë÷˜þ§¬ç‘•ïízn5F‡8‹8:%+R·²«mxÖÕ|kÛ¨B·~¦” Þ¥ ŽFIë]Ä6ò‚Îx+Q⊾<ÏÊšõ©V'ÒMçy­{ýÆ"Ç"ºÓëïË«¯õ†© ØJU$–…zJ|˜jNêJÚ/÷:KŸU¸¬&Ç÷ ¾ÏRFÄH¤RÏ™RITIΔ—ÛJ£Æ¶tèZ«§9Ñü–‡Ø7Èý˜ÑIæF_Rï• bИ Ëm¶ZŒ¥¿@À‘;}Zºr^§bdR›Wƒ+|š‰{°Ôÿ"¼Ê©ò•šÉøêÇ0TR3~ÄÂjV­}Ë#6¯­ÀàlÅo>Ti¤ôÕSøµ/VMúPrØ ©0€5{lÆŽÏ…dÙÕø|ùôÛŸS¬¤ø|fI<ÊKW‡"Ò¿…K´!) ’XjÔB+¢9‹Ï—ðâý˜mô¥赫Þ>Oˆ‰:ߢҌ3B{ÿ–WbùZëCg×@KØéGfÎ9¿ÅTÊîj›óÒÍÉñb÷†V@FW£€lé:S8»šK®¿m r Èv¿¨oGusåù{RŽ€m*Ó!ОqYOªï!ûÀƒuÍu·ærŽEñr¦Ÿ_ôrð… eâžzLowçLaà³ÕÉ–,±úÒ³äQ8_=ät™zú¨Ã“²¡6gÏTJS=Â/Dœ¹Æ5–ª—ÒÖ¬ uòŽòÕš¨ûG‰gfùˆ×Mí ·g{™¥úõ§’îI¿Ësn±á+ÅìeΙñ‘rÂÙ‘3OÒhVßè:$•¸| :§ŠßR5O |‰wlƒ“A!+Ó‹À1ŸÅT°>L6W¢gÔ%«RE!Yì˾‡÷±ãýÄ6Å÷jª{WŸ¶Ôw¼z6ݾö£àe ¿ÕöTƺÇä b6ä|ùnÒ®F¬]ÿ•›R§ÚŸfžM]XbæÇlüÕ,}¼mÑÃЦ'êåÃÐðÂ×ZŠô0˜/]Z\ëä>±hDœ¸Îvûä¡›%ã&˜`-7‹îëNÇksTmU[#úMA£R^)½m¿θëÑ3eºz}ö¸XX*QrÔJïs7wY"zM¤DàæEǶ—›âÛì"Ô‹er©„UÛcœÍDS<³%~Êú ËžSWŒx­Š•ÔÁŠÄ¾òÒëLèøyνi8F‚ûá6nP¦'¡ícþ#oß—š:Mp¨¾Ofö5Õ cž·ùÓSã‹Ý¹"C¬i<ëR¦FÙsp?¥w¸Îç\†>ÆKÜW ªŒï ‰Iu²wÙóƒ[l²ZVUñ ü“çzç™âK÷Þ0~;/C1È:†á3Uƒ„à ZáâÚ¶AgŒç¿¬âÅ_üüø´é²”¼˜½ªäáÇÐúpP\'¯WØ+¶‹5ï  .~’&È`W匷wG“‰¸a8.Œú{·Pa³7™ŒÚæ·Yxþ ó§Õ»—ŽhR‡½ìYP䙸{ZŽ'‚.uÆN1òF*!Hp… 5cä¢zýêíЧ/ÔfGíÌLÃ$®kýÐx]ñÛ…ÃbgVsAæ©NRZ@•èAæ.ÜýÉe”Pæ$K<»™†÷e¹T%9O°Ù—k>X¼¶fyÎ@EfvªóšÔgHãu ¾Ò÷-rIúü60õî»ç`l• ÔIXM+hÙ£A9ñX‹|t­ {$ùdMEÂ¥YÉ,Šˆgg KŸŠ‘>[6—¼IŠ2=ŽñԴ뉞îùK×w/å=úF)dz#ØÍo\’0ª¥(ȳKµ|Úðéó¯ÌYß;d•#'’ê-y‡hASœ²¯o'w$~p7 dðbß#½©¾õ’$HRƒdi &HÒýlô›IÂ^ÏGÌ(Çl™øÒ{¸ m¢Òœ« §´uÕáŒ;hŒ¥&ˆÚ(úÌ^âK¸R´¾[ÈCõ¼FÑ» â¥ÆˆFDç?ë¼Gz]"GEò=‡ý;ùI±nµ$BS4˜Áðöö%Wüxôšº@‹yúÔ´ÏáWå{~¤´Ñ/ˆü\»ÎÎb0šÔŒS¬Œ`óù ¹}7¯bÈŒÕMÑE:¨÷§5ѽzr¡ ¢â½X¶wG¡öAR@­‹‚"sôô¹Ç§ó3ÕªvAĨyÓL=ý ÁvÚ¡qîosk_s6ýÂFÀØ!ôŽ#tá~Ú¨/NÔÒ;ÃZ³ô§\ËJÏfŒf?uŠ\Æ–3XÿIÎEò†›-mÑðÎÃMhá'»{ùÔðI0”òKkÈç9…ùé#0ÏWèœ-OŠèЕ}†=—ÄOÖË4La(ŸªÂ8¬‘P1@AKbÀ;âóÙfþdÁµú3kùĸàã#f›ÒuG“½É¯·?š¬?‹ëÜõ}:>Ÿ>!‚î¤P£aðE²û$šÉE¢T¶E5|†ÑèEç,åÊ4¤yv¾ªôÌcO ëIÀ’Y,ƒÄô2_o‡m»èì Éù'9¡·-Ý®1ìHîžžýŒ'¥hEµäOŽwÈÚûÞ›V­ Ô|ç ÄÖ™¿R¢;·–-œX×ÅîŽ÷¿¡{žÈÎk@xU¾ %8EéS†-æ“Pa;D=q²höèëø^nˆZ2SÿS6Y]ÏÕý­PH§º~]x$†?¯û2Ž£¶Ô#Ìf+œÓÞ‰UÜOÅ]N»•XyèTůóhTò…‚ž!ZŽ>Ç8K_Þ] Ó€2¹™Ï¢ˆîø-“ú 9ÀäiE$€‘%Ÿ8â;ÛƒÔæÜöYþñïÚš±i2F>/ÌÓÃ>o½ó79‚`—%A ëÛ~æç;Èe±Ôp Œ¼$ÿÜ B‡ð¿ÄÒ™Ÿš—ˈeéñÌìŒgYö2ù zðy©Œò—ÍkÅúå}P€^lâð ì@¼f–»†úý¹œUï’Q}~SŽÝbüî Õ Ý ÿC–Ï«§åTx΃ÅYf¥ ½½,cñ—êì¥ˆŽ‰B °wyG¿BÞ?ROuB¸Rw¯G{ƒ|–åEUýìž7kŸbª:|gyº³Sí,S¼ôX'µª³ØÌwa»•ìu—UËkΓpŒfìZ&>Êk©%j—Ý.Ú–´K刅%Ä"u•ŒæW¥bGŽ„uDŠ©]Z@’¤ôñ'\nBŠe ¨´«ÆAÍ„ªïP­ø¸M¸¿½õUñ¡5[Vëàð‘¨JÕ9P Þ ¾ÊH‘Ì|MÉÖ¾N¯uÄÖïõ1†ü<,þ™=ÁÝÝlɧHOX>h—<\ZˆÌwÉßÈe´( µãÂNKغÀ‹ƒÀ´.NX\œ3–ìڲ㠎‚w7ŽKOž,ìLA‰U„<×:!ì×öK´“úE~Ã< )¯Gykþ@q#z á²6Òü©»>õ$ëžÈQ6=N×üÀ~a£T@š@jîÍ‘:÷Ç—†ÖtÜÿ‡ÆÿøBÀÊ t…A®öÿ ®æneendstream endobj 402 0 obj << /Type /Font /Subtype /Type1 /Encoding 1013 0 R /FirstChar 40 /LastChar 126 /Widths 1017 0 R /BaseFont /HDZJNB+CMTT10 /FontDescriptor 400 0 R >> endobj 400 0 obj << /Ascent 611 /CapHeight 611 /Descent -222 /FontName /HDZJNB+CMTT10 /ItalicAngle 0 /StemV 69 /XHeight 431 /FontBBox [-4 -235 731 800] /Flags 4 /CharSet (/parenleft/parenright/period/slash/two/colon/B/C/D/F/L/M/P/S/T/a/b/c/d/e/f/h/i/k/l/m/n/o/p/r/s/t/u/v/w/x/y/asciitilde) /FontFile 401 0 R >> endobj 1017 0 obj [525 525 0 0 0 0 525 525 0 0 525 0 0 0 0 0 0 0 525 0 0 0 0 0 0 0 525 525 525 0 525 0 0 0 0 0 525 525 0 0 525 0 0 525 525 0 0 0 0 0 0 0 0 0 0 0 0 525 525 525 525 525 525 0 525 525 0 525 525 525 525 525 525 0 525 525 525 525 525 525 525 525 0 0 0 0 525 ] endobj 396 0 obj << /Length1 771 /Length2 1573 /Length3 532 /Length 2146 /Filter /FlateDecode >> stream xÚíRk8”ënÊ©IƒtX¥ø3cŽÉi4Ù4N¡cæÃ7fæc|ƒ!2Ž•š”šUKi.åØ6cWD‹•S„(…6åj±•¤Ekh·÷µ[?÷þµ¯ý¾Þûyž÷~î÷~]š÷6&R`.² g†³œÜ½ÈÎ ‹60pât‚¹Ît´pVV8À౎dmaeÇ¡ '8RÀƒÂÂÀÈÉx¡ˆ 8p@Ä sw:rä :ð†ˆÌ6ðZ¸ xÑ /dš¡q8€ 1  ƒ¸hó=Tn( ¿†™üÈo©-ÉEr‰L˜ËL0mîË{r%ÿ Qß“Søl¶³@/÷èOY:b þ‘‡9‘|äî0äq¿/õ¿Js™Ÿó}–ŠÐÙÃÆì×Mâ@& Bá@( .ÆA.ó{rÛ%˜P|(~[s1E£C\ÄGùOÒ…ÚEŒû–{Ãâ€}X3,'/”ïo§ýßµrá2`&Ä•‘Ðy<º-Ÿ 9" 8â2Á8Œ“ë57ãˆü ·$…yè…Ï$Xæ0\.b0wXD~‘£#—° O¶á‰ò8< ±‰ÿ^èË…¢ø Õ b±X²Õ×G2ø<ÈEGHîÖ7 ɽÁ8î} 3lÒXçnd&¹\yP¤h‚r »™í!«}X³"µç$Š]Ðâe2 õŸ-kbFGub׊>Z}гòF•Û=?<*ޝÔòŸ» ^Dê}LS»}ãÑûq"jw×@káéIÃÅ·c—iFÎ>/•ÿ®»¤n_LEÝi$²?EÌöÍL—n±ÐõRÏ*µ¨nÖ‡¡:+ õàæ%+ívÑ´qÍwÛÆ,°ý5žV¤7·ä’–„rŒÏ>³!±ó:Ÿ>øÉR§é-fž8È8/ºŒÏº—¶Ñ¯y9¥ë—ß…„jsü³J~»2Ô~•˜×¢];q÷¶áĬK÷Î5ÊÅ„°v§6æ½¶öÞ¬iG2ÇŠŽßOîW¥’ÛT ŸJbÅ»[óã™)Úü|áõ¾±w:4§d©Êª|޼1 ³_Äö²šíÂä¼FcBæU—²[‚®ŠÊé­å›-ÏnqÕk XͶk*YHùV©XÓçú:*^W•»~ÞßMku- >ÒZžž¶?aû%Oʼnú0t¨#5ð‡Òä«ï*Š Çó7N÷rïZÖ”úuÛx} ¨•ä=wauâP)ŽiH‰j±Ä&d¬ÏJ°¯Œ=n5­hpòÌáL«©°àŒB¡v xWÒŠw»·ì9‚-Q[Ñ_bÃØõ¨ŠÀÃHS¤5A±$ŠMPËõ<+õ'õ¼‡ë2²‚ìHqÏ¢ŠbM'?öë™FL^½í¸ynìD?Ô¯‹Ñ¤*“ƒ€Ž¶Ðø¿žjjÕÔYß!¾”h+˜<¨º › ѧ'ËÜíÛ{,\ b«Ú\M¨…v?CÞ†£¦Ë21ÉŒOÈõCe½õ±ÛîÉüûíunlq¢úÇŸ.ÏU$ͳ³Ï³„Ol*ó ;Æ_jÔ+ +3v¥dr¶Ô´ÍÄTµ ØmèÙ]¢¸K mš6ˆ>¦Ðª+j*ß¹ºá:oó\ðþ]úc)^B¬±/€mšdï ¯©‰µS7LÖå8(´bÖ_ÚeDzÓ¥(KÆH2÷rL̽‚÷÷f$Ù•gä5ë&:Ï6/ Ü1kY.Î)èz5˜ÿ6^Yl‹€ñ3²S:U¼àŽwk,ýœP U>ëÜv1ÈÓ1üBR]³‚«&ï¤ÁPÂů0Ëi>þI#‚¹²Á0Èrú2ªv]Fw’ô®o/Ó °^ûе&v$ý8o}ðÄ€H– ØÂ·YÈÔÆØÄüDßëÿøeã³7Lãa‰ K戱/Aùºõöur ¯ûAä~Z㸺«âYÓû¨Ž­™ÜÌŒ/¤Ò¡oê¹Kú{yŸ.œïõkq±0EÔg¾Ü|6\aºÖïîÁ­*£»4¯áÆ­‡y–ùŸûr7þÚêüfÓNHhWîÓZÈêrò˜2&Õfj<¡¾[w¦ÈØE4´Ç¾Íù¹ÃR†Y¥ÀM?tYC‚«þ©jµ9ɈikRâ6Özù⹋׎¤¥Ž‡Du¿¬óL;DRʳŠªOÄß¶›ã·(ìÜ—miB “¤{E»£ÃÖt¼&©êë´à¬o:!+±ÊJOÜ1›µêÙ é uìÈÓôrjÑ{ÃeÎê†ûû®)Òü=¤àñ<ý$uõâ–W lÔèOGÔÜãë¿X_ÃXvÝËxay³"õ#¦Ãž.m³eÖŠöœÔ̪{-dblül°—èæ˜í UÄèu~xVM.(]z<±])¼!”nvÂDn?±³LT(®ì»µÆi{Ÿ$Þþ[m¦ôh·è´·YyÏšºûa¦ó¾( ±zb¾á·ÜÁ9tÐgßը׺,›çYeú7á{R±ÿáBÿŸà‚€Áé<æÐyè?ý‰eÊendstream endobj 542 0 obj /YFTFWA+CMR7 endobj 397 0 obj << /Type /Font /Subtype /Type1 /Encoding 1000 0 R /FirstChar 49 /LastChar 65 /Widths 1018 0 R /BaseFont 542 0 R /FontDescriptor 395 0 R >> endobj 395 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName 542 0 R /ItalicAngle 0 /StemV 79 /XHeight 431 /FontBBox [-27 -250 1122 750] /Flags 4 /CharSet (/one/A) /FontFile 396 0 R >> endobj 1018 0 obj [569 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 843 ] endobj 383 0 obj << /Length1 2133 /Length2 16020 /Length3 532 /Length 17186 /Filter /FlateDecode >> stream xÚ¬µeT\Ͷp;ÁÝÝÝàîîÖ¸»»»[€à„Á]‚ÜÝ]ƒ»~ýœsïIÎ}ÿ~ƒŒž«Ö®š½ªjm %U†Ïf& {WF^bQyfbFff8 Qg€±«•ƒ½˜±+€—˜…‡‡•X`üüðr°ór°ÂQ‹:8z9[YXºS‹Òü“ÄEüÙàlejlO,oìj °ÎajlK¬ê`jpõb$þlkK¬òÏ.Ä*€³;ÀŒŽ……ØÌÊÔ•Ø`aeÇô’´½¹1׿ÃfnŽÿ;äpvJSÿK“†(iæ`oëEl0‡cRp®ºüÿ¡õ'—p³µU0¶ûgú õÿ ÛYÙzýO‚ƒ£›+À™XÞÁ àlÿS5ÿv“˜Y¹ÙýßQiWc[+ÓÏö¶b懬\$¬<fJV®¦–ÄæÆ¶.€ÅöfÿWX¹)0)K+É*KÒý{Oÿ5¦dleïªæåøŸYÿIþ³üa`uœ­<‰u™åe&ÿþ÷›þÿYKÜÞÔÁÌÊÞ‚˜•ƒ“ØØÙÙØ xz€ÄAìÃBleoð$x…™í\kâGlîà ÷φ÷œÉü_±#+­þ mÿ û?ɆـÃÀ¹míþ„€)Nn®3ÛïýF¸ˆ™Φû¿b<ÿ“ýß©ìÌÀTcg€½-Àü¯(ËÿDÿO2pES;;ã?b&K/GK€ýŸç¿·r0ûú¸Ø»Xþ‰p3yœþ€zö€ÿ0ÐËÕãÏ8ÐÈÕÒðWÆ?õspsþø§‚Vîeu]€{ûʺÜÿrî#à¿~"PÕÞêoî~³­Ã_ñü3ÕG9‚'7ã?[ÈÉöOÅ.ÿô”?A Ãç?\_ä×ýCÀ…ÅþpQñÿ°:¸´äÖEê%¤ÿ°"2è"û‡€.rè"ÿ‡€. è¢øâº(ý! ‹òº¨ü! ‹êº¨ý! ‹úºhü! ‹æºhý! ‹öˆè¢ó‡€.&ÎÆ¦6×ÿ:ÝÀÆþŸ‹óßlÿyà¿>çÿ<ñßé@¯?Wèeò‡€^¦n33PÌì/üç°ü…ÿ忨añ eù+õWÛ`ªYÿ…@'›¿(õWSaZýi ,ÀFÉdÿ­þB •ã_øÏqþ VÎá?wë/Z¹þ…@+·¿håþ­<þê‹@+Ï¿håõ­¼ÿB ÀÎì{Ëÿûrqðôa`öà?æv‚¸<~ÿ©no¼ªÒbÀ¾ÃÌÌ<ÿDMÝœ-Ðõ_odà›çÙÜ øž<¦pË ¦|¡ÖMáåþâESß!iAE,šê»g;áC–’@mKGdh7ê´ž+²Ñ>@y¼â¹Dwø*K\9%fο¸d{·âi]gË{í;’>„œ"µ7ÍÝžq€*ÎlŒ–§jä^ž(Q‹©B¯‘€ôèº7ô| åäҒȶU«£d#QAÎt*dX÷@NM†XŸ ñ·Ž€i¡[½rèpC}.‚ÉOy×{ÀH@1í bSÙ¡EW9:ûVŒTûÑÿ«Zø ±…ª3ñä ŒÊˆtHZxu®7®¸áô%Ö„x¤¼û}k‡É§þFéž!¡e±ÌR óer‘CeÕŒ÷û qú#Oa‡lJùVà…/RŠkAœ†$ b«5–Î@ö—)to–O·9긟ýáH…R?|Ü„³õ?û•ºÀYí"?[‹Ð¼ú+šÀ#õò+çaå5ÊÉö«`93Æ _m‹Ä{1Voéé(ÍÆª È¿ÎÈ«ùþ¤@]Gq€0ÝV)«Rmú\è´”ê:ÁaŽ'!TGŽàc¬îÄ,pðêÛ'ñOXPîîí ´Ùä•‚5#>Þ|ïßóŒ½Ø©éÖuôç`f˜AW䦪ÛÎ]Â_h~±iZã­… ¦væŒçq]‡á¬N0•èÁr#gâ#¡—]s*(“ËNý ’RòмÝrC–¬^$Î<+mùa‰‚”É•¾t….­¼©ëÁZÈüVÔè¦ÃÝx˜A[ÑC•›õúˆëÔ²z›¦Ôv’sÕêûsh,]:~,% ¹ÉàwLVª½¡‰îƒ'åB}¸ûÔç‡Yš( *ްÕq~²;nyóÊw±´Üª @bRµ× ¬ý€³Zd*±3Õcî¶ù-JåâH³ß¦ÅÜz-LÞÇj=s£(Ù(ÉÓIQežõ0u"'s&&üÓî;HÖÆ« Gºž©™Ip̵ÕÙ/o:üØ*[Ϧ}ãèŒ.º¡ÖUa·{i¼cíé{ A'‹<•EqYÚÇ÷›¥A>¦˜¬w$—6±úIŒR4I¢¡‚qOÁ"™‰}b·/Örbæ;KŸ†Âmª ö7!Øg¡_ƒ‡Oç–÷àܱú~TŽúN€°äBy|·kÞ¢€WNLH·ò范~ë¼ÒSðóKòŒ;Éòí‚Od´À‘õ)‡¿U{-…Ï&´i¤œ™!ê´óÜÁMq`DåG²¿Å-¤´½ÃSü)=·L Ç '•X?£NxZd×CZ+JkSþ­Ôu„ÁP`ûGGT]WuµU³jb¹0V•þqÐwÔ»Mi‘sÙgÏëjŠƒÍ§ý®W*%¾¦j~™¡ zãÎ}Ì·E¸s§_èNçUÌk•ùqAsò鱉=ü øéâpã&ÅkpÅÂùâ›#?\µáf>©¶‹Ë×NOÀ\¬V.qøpÏ{ÏhÔQáC$},ãQ¤-˜†É<¤¬N¿*þ~J]dÕ`‚ÍyZ3W=k@Äs*gèšþÕt ¡\§|· B½Çšž¯–`2LŽ[n úÐPA,Ðlü6ÀùÖqVÇtWcºsVUÍcµgå•VQÑê¤'MGŒw‡ng e¸ãYáûl³±oH@Ä æ¾õ1žØÎ’ Mì=àBCh¯Ù j«ÄÒ·µY>„B©Ðö®ðÒ‚9‘Wrì«3{›ºŸ‡C`Aù¥ä­Á›×žó̰·ÚéûhÐ’Ö°A¬ùÊÿ¶ŸZÏ Åyé p=YÚÞ9ÀjN\í=ºuùȃ”Ó»õ2ÜP+÷X§7_Ù=ÓôqÚÎ.Åæ…ŸõÞ\h%&ÒwŠŠ²G4ÎÎüäpŠ8Ÿ×È g˜F\¾ä (2€Ê>³ú0Å7æTÑÜML)_n=‰$5ZKY¬D®ÙyÈ)¾AÍÅYVÓ i­ÔÖ‚ê§!P*ެõáÚâݼ•¿`+—O^›O‹Xàó׃|>•ÑÙ¬ùÑ/«ÊMƒ–=þ-ä rGçÚ+økœd­Ãx÷çïOiJ•Ï5àÁ»{ÊÌ"eBöš.ƒê‚ß2æ¯gÚMØvPj’ü+¨ÂŸCzBUIxZ¯t.Çù'¥Œj/‹¼=4gÒþð±ÛÕ"—£WѯդÍõó=ô_ÆrÊ{´MáòTÿú€¿å§Z–Ìsät;‹ÿK—[ð”m;ͶÍfŠ;±O=W!X9âJ‰ E®1ÉQÇZ=»¨n>Ümêñã&à ^BäÍ‘·‰ËTÓq’>¹ËM,vw¹^‘dzQŽ,¡3ryÐÅžP®ƒð“½á?\߸/Q¿¿¡é*V¼ç¡µt I­sàSw¶H¨}Ü »ÜO ¿ë#õ]ß“‘È—;˜¬2Å™ê7jn¢É*.XùORà ,ÂsØ ï.Hä¸×ûób'+jÆ£1Š\¢•Xæ1ýÔš„#!Ôõùü8l¢²í׉f²[û´Ý‰ç³ÝFœÊ÷ü<`7ºjfjé_ û®(ÎlÍÖ|ƒHÍyZ'ræ°¸‰¿‰LR(ã â·™)Ý}µ©»#J®^–~í«qS¥'NZ§à[ÎsÅT™þ¾×ÙSO¾R~¼Ó*âd† "}‰âvÝA].ó²8*Ñ /Ÿ/ôb^y~~[3 ÝÍ€]^# ‡Ð oÕ0097b½Ìæ]舋,<ü!ŽNÔ|:P[ß­ã‚'°zÍò­­³©ÛžTã‹ÀCuhÙ}¿r½£ðdAV-2옖(áѯ¼cú›:ñ3Eiº›fýZ÷¡Ú¤Œ*³t•XG+¿ 0Þ†@—ÏXˆ]‰ü…U3õw¦þWñ›Oý¯(ù-8‘nn¼\·ÁK,¦:7ÕLzUøÚ«H1°íø”IŠz°÷k æ”Q JÈeÎHÇz žÐÔ*3lò ÕÂÞ9‚–X‘xœ–{Í)Ð:ú=ÊmV[˜mÅñ7i °ð^t!x­4c»ßn¬âŒ/й]LTätKS8ô8Ec]%û„ñ›éEôj:…\v¾Wà,ZÏíÂÞ8(êí쎎1Ï1.‹ð6Fý¢œ‡íDRAÝc=¿Nz[ð—¾-N/qV)¬ fýfw1¥MEDÇÀ}´F;1X!º¼T]*U€È|ç’L÷ü¡„ù+îHøµKYFžˆ—1uOW;AÝq®B: S?"~zÜÊÚ‚éí¶ö+½Æ–\žš?xÏùö]b¥Úd»¾ç3§Î›ÚéX¶ƒÿÙw®uÉ­½]ðù]þ§­<ð¤»ûL›Y3P­e Fp­Iþfì%ô™5¹#¾·ŸHÔ³< %å×½„ĉ4ÊŽ±˜Þî²Í‹ä Q<&RŽº*Žf¬×û½ù7áÓTMÖdÑÒKZ3Ûô·-&³Ø=?w«ïïŠ9M›ÑE…pgl9õ•²[x‡bç›s,Ί R›‰ø¡²gK[jèfœäôÁ§DèǪ:Íiæ®[kŒ‰øþöÀaC‚"1·Ã`'N›é"ü®2áÆ{±dà™Ã¨7CZÀ,Â]°çTJÖóʇEq.&›ŒNoBhõJ¡ãã6}@Å) Áù•lí¨¶‡aØà«½_ûR&?tø,ÍÈ®¨gµËf­.K£Îv£ î!®Ò[Êôÿœ²æÛ)¥ly1bjåWˆ;`#¦2é¾­Š/RñÔ¦býê1¦0îôRRM‘oî쨸3l…HŽ~Æ0kwFœ §÷ÆC“{ß$)HDEAzËÞ™p66NÄ —S'DäËgâ.#ëI #¶Ó—Ù3bT2½Ï¯J ²4‚ÇÉû{’:Z›÷"ÛHÇÖ_‡E޵W‘¹&©Ø`õT¾'TÇúÑ=‘êÚ—¡5‚ÜròÐJ¡øÌ‡ã–ö.‘^‹ê|B-¶«4¯â*Ö–ÀÔVá÷T *ËêN6lµ‘º÷ƒ¦Fó´òZ5>dD¸nЯâOþ-ãV;Ö£x§ù÷Œ”‹Ý.Ü7ÁÁd"'¬¼ ÌË%„³ÛÝ›ÔÀá±£ëaäŸÒS"”WBêð6çTÜ•gáã7ñƒ(þ… ²%—Ñù»\bhNf½9<Øènq“”y !ê»…nå¹döÈbèÍ^_ð¶št£²ŠF`Í„¶W«E›Œù(Ù jïêźï,·ï=¯²Rq)&,+}›ïwñA>±Bi,Óëö‘[Je™EvÐ0óLðTf„Œ—µÕH¹ yx£%˜ÝUµËÆpÓŠG‚‹.Šn~²5j…I»¦8Öaǰ21Š£qqí*pç†W32 }bÇÎQ_µ[ö4ýQºÁH7T~2Ñ)Z83 r ˆQÞTŸn<½wÅ¿¾Ï*®”‰—…åÜP‹Æ•Ëvjý4ßK—§Z:…ÈBÓpêŸÍ;4~ BÔ¯8CdŠ0Œ<­Ž¶óÐ'-aÜ.ÀR,™•ß{ÐŒUÊÌékÔ†–zøÚØøå\¸¡¡€ ½†Ê#ß±-Ø6 Aµ˜›Î5¶Ë´À‚U(áŒÊÇ¡‘,¡c9gñØ>&W,ÿ ýž::´«„úùgÈïÛ9è!¨™Ž»P,dEoŽpüµMI\‰CtY¶eU¾Šc§ÚÌC’4 ^¢W¢g)“†A(yõE˜ŒÆWAl_B¼¢&¦ÎÆ*álñÕÓU2‹95ùŒYÉ­Ÿo"x®—8n),â_ü‹7!o‘[É_1Úd†GºÑ\0°oÕ ³X­Ÿe½#É}%ç« á“l‰/qÙßwæ‰cNPÆruÐ1ÖY)˧´)v)½Ñƒu¾âÓÛ!ƒìP^¯hQ˜&‹zð¸¸yO|oïId2†åó½•<:ï":8 \Æ;ºÇ­SE$A1Ê0Aùa PÐqÙ*b\`(.)U›Ï]b±qÞ/«¯Ó£'ƒfŽ|ª^½‹Íû1¯wfEâÊßx•9x`“Î¥$*r;~æåÙ"d©¿²Ê¾ÀÐ5ãXeÛN^\«Jß+ãb%ðs÷L­«x=[™á OçP·D d˜aθáÙó+ 2U5I¸ÆÈ„&mhDEöѱrF}è§sï“É,+¥•âä×~¶G–Þ¤¶¬B]vBL»›qsÃF‰Å¢¥‰ %Ì ç_[ÆÅûóŽÂË>¹ç’wéÞ&rAþ†NB³¬Ž·{n¨|¬ÓÌ` PÊ\ñá¡›y Æôâ{¤†’ð‹ºþ)›Oih2•cŸ!ÕWDd#ºžq›ÐyM' êΊ)’£ËÈÂ7¦Ùe0y:v”á›nS ³V{Ï 5 1K±Ç} »7+ö|ï1{Lje)õÙë0 &,u»“ÿ(ð«ôFÜUf3ËVâ6Žïš0FÉLÃ^C2…`©$Z@+üäzJ<¥Ð…/ýCrÀ-Ö»üƒÏߥ¾ðU-‡eæ„—6,Ü ]¬RHïÎp6ìn6µ&-»³’Þ] ¢M{JÛ}Œ…ÊQ-ª}]+6ŽøÅö²‚óöäÕÑš”P °tpÔªý"±½LbüSÕZaœÆó%·sù½™Á|ƒ7Ü÷1gw¨iùJ%šÅo3#öa¾–•)n…´W” ¤üx)”s$»˜¿Ê×mFéòï’‰¾˜–±–ðÍvÍV-tÇS$Ë T'" ÷kçõGŸ¸¦B µr`ÁœMï5 <1\ˆ|™]×Y™Y»YoÏj뤚kHEƒ`À€õïM=KÆIwá¦H”†_7H¾=wÊ,ÝGÑ+(MWè  ‚®—).ÿ̘úV¦cA´çgü6RŽ5°äÐúcj ÉNDébÂó„ºs·’‡ït¿sº·è2B›1Ù&…µ¸È‘ãýC0YÝñs¹ IWvŒpg÷}nú#*!Žh á»;´À.Çfçp`G°PÛ‹£û›mAOûòþû ÷³úð¯KþdöU¦zÒ„ÑÖº®^ú Nj«É«­É¥ŒS¸'XaÙ+MV'°·[ÑfæÓåé²eó—©âüp*—E¿½R¹¿ƒ¸þBZªÅ‹ó˜Ú%Û3P>@S¬N7-Œ;¢µ"¿o;uöÆBanvZIçFÚ¬$Q@LôéJ07].oŒ­ˆ ¶RÕÄG?¥d£6'C×lH'“IÁR‘v2i/Â-`dö¦»g9âec/`'”²5Vùîý!‰1OtÚïzöE ÃÇ+¾Îä‚@OÕ<ÿÕW<6Nz€ÏàG±ºó}'šãÜ ¤px2ùõËÙ­7Ýü²àÄQ¹<–¹4¤Î”Îaš@“£¢¹¬Ìò‰¢ÚüÊ(*¾lžN ÍW„*ƒ´¼ÏiÙ ¼3ÔNl‘")±^!&µ½$\“Ÿ çJRèÐÞgj |¶ï]Ú¸£eÎýi& 3fÝ@ݘ¹[¦ÚBà›ÒÕ鱞½TUñU¸ŒsB ¢“â/³\hE¬¼"À S 骧ˆ9úÉæ"uMóøn§¯áºàß$A¿|*ô tØò}5Ösë OÞ d5Òµ‡ =í®‰[ŸÊå8ȶŒ@üôK޼ʛQW×8 öƒêŒÎ¯¥He·±(SöÄ×(1_„] ;œñbiô—A|G”Cogö/ôL—°^g']ú%7š¨Ø‰ipÁ½²œ).G@º~”â'V©zç±êY9Ãò|i^6…‹¿Æ›¤ÖÞbwY¸l/6záÑÜÄ0€¿ˆÂÛMfüH—j ÕÝ]wLžªÄ-Ñå5u|›„ 2{z'hh ·ÙúÃFO?!ÊùîsD/;Û°æ~wP×-O°æ{þmJ—#(;cc{)|À¶u›Û…ýü#$Ñ¡ìOdHŸWÞ)ÄÏzîú1~œzŸ¤žúÇÒ`ÂÍE™[À(4ê‘* ÔÖ†‘e`:…/H±§c—áŸøó¨]fw~2Æé1&ô`½g–|Êà{Ë“À¿ïøœF_Ú„£pz ._z¿¾øKc²Â$±O÷È4Å2=®AÕmA‡:´¶þ:à¼ñK#߽ܞ¨1®|7A%h^¯yã']×Î`t’¶4“ùØ\Ï™òLäXÃúˆ,#¶ÚCuÕ²4âŠÕ£‰jœã¦htŠWµXƒTûD>ø-ìSF¦ßK8C©÷ÌëY‘+“¨ Ô½LËö‚DôßDf¢ëÄj¬§ñ^4E …#QãÛ.Žà¼©2ÇT&œº&tž>ï?¦W&z“h*Q¨ôŸu%RµùÔ5Ã쌪hLãDfŸ!)òÄk­Àlws¢Ü¢6˜"êωî].eNåt;¿†uOcúšÎX‚y‡]R3Cx€D»'¹g/Uk'fzÅM}wÌEÁÍÀ%+hçå߈FKsMQ¤€íî:²„ÞŒÛ{±Z‹kðØA–¦D¤5ñDëÖ“†SÊŸ³–Húâ0„2õËg·#ñ‡Ï×v[üþ’1"ÙA¤¢gtr»ìµ…m0UÊ^¤¹A|S$bÝùºHù°g»Ë(ž£ßt.¶Dɨ+Ò]D]Ø0ªSâë”×Ê–)¶~«\üZ•»ÿÖjšÿq’ǵ¿æ]ž¡·úÌÎqÐò¶&·“áE¬˜kI^t_½Èhì¢Ý–Áµ¾Zd*ªÛÉ„µÐ`bF~½&вðM.à‹e’%òlž–Q•ã2ÿ~ôNa¶|áóù.U^OÝc»Of¾¬Ôî0 ”’ŸîdóDÁ²kN”¹Áb8¯³?ãÝ„vé…xÇŒ§E”UT¼@÷ä÷#£Tœ3w¾×áp?üªuâÝ0½Ôº»c[=a2tBR#ÿ¿j¬ Ã}¹IX ª¸Xôä£ÚáöøCÔ;ÏZvËOk˜![ƒÁ•„îþ˘¦óTÓj qÏ Þy¥¨;PpÅÌ´i>oΙì¾æûð!(lÆŠh&ÇÔAäL ŽS 9ºßÐÃvüµøž –Èßv—T1‘”W®*zÌÎøEaz¯] Æc yk.ÇF FûXö6Ov¿ûÜûzƒåªKúŸüú=#'ù«<ʦC\-æ?A(t Fð%x¹aÐ=ÎCÝ8]•ï꙳ª V&Àǽ#Ò„%ó_ùÖ³å ¾f·<>„¾¬;tkÛ ;vHEèöô0›‚|ù*º|f„ÙÍ:ŒŽzes¡Î Â6Mßÿ)Ûèó´íJSoÑ“ÄD®0×§·NT]ÔšaeÌ•yþ1\Sƒb7Ö‚V3ã ½lß8¹ïå6HÔÐéñ滳JOŠQÔ¢Æy–šúj^Š2 ?‘6LÓ$) £„y×°·Ž=^ÄÌa}@˜CN¦ YÑÓ…ñá„+vhw’Š_òH øî¨¾}ž4?’–‡ƒu+ŸJÍÔaü©×–BßÒBô@+!öúÉâ±êëÓN*°eó^ú)øËJ²3‡03ƼØ9Êp(ñ^gõ½]¾=ö—Æ`° îNõ7–ªNML]1±ò“¡¯“ËŸj^`¡»¨Aë[^óh¡D ô£t³¶.%Ö˜.J‡6k§=7Žmª»2º42aø<‰!¥ªSõ³ƒ¨n*°“7â§Sj®P]˜J‘KùtsíR÷ Ë„Xñ]`Ÿy] …òŒ™S>e—¯c·G]ëÅŽÌÒ¼ Äü(˰ŸA?‚ÖË£&1Íîà‘Ä®ƒôÁNj.PÏú6sÔ¤SݨáP®§»îóʃð:¯³ßòWóÇoIBoÂ8dÑÇé­ÐÁMЊ¨èruëŸèv–2í’k¢KQœT&슢¤ulK¾ü‡@°ŒÈ­êUŠ)""Ð~ ¬‚§ž¬Ž “Ì@GÛ¢fë—ÑÄI„þº¥é¨Ý<6Ùæï¹{Ðöðƒq;Â-­œ!”t?³ÄG+Õm¤ðtIø\õò»ÕFįi¹!¯4R ÒX’x°#Z°¨ÅsWýüŠê­ÄÏ¡ú.»º«½EÕRï|ja/‹a“c°”n‡Øè3®âÞ>îhô?O¾:ä¥e+aD«Ýù Æ¡jzäô¦îNO+s´`†üI  .•:/wPKð¾K}؈ÂÌ¡±¿žHÐí_ÏT»æés¿¡ñŒ=ºô‘øžrÏ1~`î £àšat“ýU>[|åÖÕýè˜Õ;”üWXÅÏØ‡ôŸW@GßèÁp”­¼)¿ ‹¡€¹œ'?ÕìñýÇdS*]j\þ=ªˆ  +ñeQþQÍ;‹•×f¦jàÐçxºPu%*ÞŸåÜ1Õ´øQÊÜ‘ ì£Ç•³kË“qVŠ¡´µ_-4¦p‘ô1çbá•sÂdkWu¥S+Bó”è×vR,ĸQUxƒ®Öi/z{2õ·Ñ«ÍvXN¸(°:×n¢ÐyíkÀÇ¿Aþ”Ý'ê!¢#Ê«g&~¼Œñ¥ñŒ65ºµ³Ë—äYÄ­ÕVhâWÊ¥m]Pg†€|ù TJTø&É(uþ לä”Nü¸b_Eh ×T˜ÑBp>lîX™Iå,³I¹áYŽ  å½-§õã©‘h'ê_Ç?÷¼Øx×Úe86”“ªÙþ›T²Ì:R»Æ­a"5ÚjÊB†s!ÙçKˆ9Í’\¢˜“øvVÌOÓ£–TcÞ^0ÁÞ‚D‘|vÌ(}.>PÄ(uu£0£%®Ü\KYPÍKW«ŠôÏp`%î {u w=.±ñ0;#+ÕÚTSº ºÜ{p¦ØEƒöß¹KR¨Æ3.º@âyÑï3êÖS4*IxПÒWJHE^šÌlR{êëW3LdòÃ×Ë*Z=0öÓÎpÕ¸(¬‰>S„_ƒeT¶Y6ŠË˜­¹.¹U'ûž¾ßÏ0¶p©µ"T×Þº…C½V§òY°yë©þÖ—»'Ù: ® [Ë9Ùu໯¤ö/”×I¢ô±^Û)Þ*r÷³F> üÈ @p®KW=íº‘ÉBHæC›¨Ž•Ðë—5e³Ìíñ¹Rö†Ñ‡¥ß&údØw¦†ù}MôÙ·5V{Ùjî'«Å/µYÕ¦eXó—ÏÈÃÀüó%úÿJ}Ö‚>´Çʵþ¯¯Çu[ºÄíhÅþ!¬áf)œ5ÇÇ>$e=ˆMR&=[h\éIG‘¾)¡9öäÚ GnÕ|Ϋú«±!ÃДúÖ.ßßÖ°?ÅÑä¾ê2à‹°~ïÝV8!%4TMÝmšyí/¹€-+SÍw`]¥:…o,õy\À %/ŒÅŸLʾv6šµw¤ôÔˆVš'pyOžfÆû5zŸu¾ãùc‚ó -&7þœ}£ÙÃ/éT7ÁÂ75ê®ëQâa»½¢g1ú šþ˜(é®}Q@H…VãÑæóW1ÆW”§Æx–6ÇÌ4è&'Áúg! øòš³É»ɬÜoY¶ÛO1¼;yFLN7T¦ÕÖ—iZ ¤‚`6¼Hk |_›¾Eóבñc!´nâTž’Ø¿0ôÈù[Þ ôuñ­õ‰5WFøýÐÁpjÊd¼¿ó1΃Ԯ—Y±Œ¡Ô8säúô;è{`È…íöMf8%wì36òá dÑ}{ÐæòÅ0<«dâÛ[¿ &48UÂìµ’ã€Ï*@äl‰ù6ŒC­öÑŒLKcY<Å“y…$ˆ2ͼ.r`še㇉]§.ëEl§•NÅ„ø«ÔŒÀüjÂu=ìªªß ®Žsó͈Ä"„³¥¥y§ŽÑc)´ù®ŠýJø—gLåÈæ%e6ÜÖµ(Dç<$¡É²£c¶€´^'ÛJ¨VÒdíl²ʳÉÕýZ~‚ð]èï_søµ~>÷—p? ßÛ¦N–N2n»ƒ~õ°{t‹pg_çÌ!æ@VM§d{N š/*7'w­J\£å5j»¯Vª>°?eÞN¡²üŒÙ^[•0ûˆãÓÜrø¢ü‘FŒ¦Çž7¼:—öåsm0Ì"y) vÓ0Ÿ‹,ÿšå¦I8.ÔXã<%ºÇ<½”šn¼hs‘™ÃͨØ÷˜RhVºÈÛ@7 „KÝzC ¬ßd¹©§ÇÛum5ƒK¿ð»9Õ˜²¸Tm[)nu·œýÖÙ_¡ˆÆLCfA¾á8œY²Ó%“ÀÀ”ÔËHÎÀª¡ñpóÔ …DÌòÅ,è± ;¼ PPy\¯Ë6é€1®Q†‘Q‘uág áÕ1ôK?Ô¯÷L(³b`Î §–ì ¯Eا>Ålžœê÷]æ9((=hŠÆ>MÿV|¡Ç7Í]‚]ÿ5©_]E£tüÞðÑŽÎC šÂ5§åIÀvRŽ<ÏÛY+Ar$+‘JHp»çji$“ãk:„û äŸhS¿Ä¶*¨žXü@’»öÆë–K‹q=ž:µ·ÄœñjÚ!ÝÄ µv)y‡ß¶8noÄžN8ª~žxnqXN9/f$ð :Ã;’¤¶Ošò‘:?îÊRôÅgo`íZKõwÇÎ[wlÌ ³Ÿil´]A‡ªäÜ·êUR¦KïÄÍè:ZNòŠb;á}(¢¶Þ3ÌzQ0a (þ1ÌIÐYÒ[ÿÔz…ɯJ†”ò¥°±?U9âÂEÕ¥o…›Ù@zFè¯!ÞªÌæòö¥ÌÉ <Ä/‰ˆí£æù°~LS>T‹õž™cô'~[щ#wøØ~WÁbûþE´¿G"&ÛÚY0‰Þ6Ó×í4Ö®mfg÷žïY”!NZh¢©w³ŽrÒ¥I÷qbvºrÜè:Í´Nû ×\Ö7í:Ò‹ÝüNŽ)ù™…>£àz߇ÔGÝס5ôY*â0Ð5°­”6ö»D@ y˜ÔÉNä‘õ#žÑº8[M¡ôpÙ7Uµô™rF’ ƒ"8CôL ªýEcíVj^NF¹”¼tÌÛ`ù±µ’[ƒýb{‰œ.ðÉEMF¦Q:™(Ó^t "®Ó¹J…—>ÁñU®»L¬ $k…ùš‰sd"Æ32½›kçíGÎx|ô¼|šÂîðŸÍóäœç ·.ÊpDÍLç×^T¡õè)¾§fÈ} OyiÛ¢“Š ³¥ >™ŸÈu¾1þ´4ÂÁJx)‚9D—ùvêníº{ºë<,^”Ã1ñÈýq¸kýÔö…%jU-Óë‘çŸJ¨GÏŽ®J Ï¥‡%ÂoåÃ;Bü»+“ÙÈÅš'|ŽøeP4=Ó˜®p)eiM/Í­¿xå?]7e¹ Sôg1 RõZ:ÑZå (}Í*Åê‹^ß{­¸<¼•.œv¥H†¹˜î1¿©y´†êÒÞövd:ªN>¦’µ»…èM)ÖQé5ùÙu[CFm±©Kvë€0ࡾ«¿eȬœ5¡›Òÿö%ÞeÛÖW.¥pt?ÌT5NØá[ˆ’vë†{Ÿ½t=¯¾ÀÑàn?…¬˜7£r8V ê ”yiš„spƺºtõ^j½þSó÷kõ³vO!åÌp¶e,×öÞH5ç¡£Œ°ßvtB÷ƳKÒ“õ`ÔÇÆ¿›¦À·}…’^Ÿ‹Á’yF¾1&˜™ëñ²’y{š5€Ja¢å—ˇzB9YñAæ ›â°¦¼³ÍZ¨2ë¾ñѻδ_!›U¸î0ËÆî4È¢m‹=ÍDã94ŽÁ?eõ\j'%ÚatPau½@‚iL­ ~•7V¤ˆËÔ„ÏìèªZ}½kÀí…5B}ëÕØß&•(ä÷jëy§ Ä»‰Í|Áz¥J^Ç–ªÉª•Eèk§‡SYÒƒH¤Ì粈[–¥¶¡Ý~\sR/®I*>i†E`ýÚ¶'_ˆà¶‡Ó_h’ͪ-Vª:h I(° YJrI{ºÉXc÷…Íe9Nè(zYUÖ5ÄëiÌ?Ÿ0é§àéZi‹0gËf?-hÊçNœô2þ!ª•þ©ÏÅ}ì³æô9G#»·+pêçá?sïîqHB½•d1e}8‘/ú2©Ž¼¾¥œ#²#öN:²•óX±É1Òófâ_;¶ï}b(ˆ\ÃüMòk{[¿«%x|'¹]ÛŽ/†aÕÔ7EÏ·5×:kˆð l¡ÕªR“Ž@IŸíTxh¾GêŠñ–FD·¨7Ö,yLÓ¡ì¾¥¼‘üÞÁ‚¯kkä†U,ŠÔ`£PZ"«CÖq"ÄÄ´[´±¯Š2%aå¦Ùia«ŸÀvKkXA)L¥È¢NY¾sö:"…­Ò|POOžMü™‚&q,>óæ,ò³ $Â=«?A¦OšáÍwìì ‹kôD+NcÈ×›‰ -xü¯j-#ˆ<ööjÓ]`y½ µÁ²Í|?¿È²d]NÉ•}W›S¡Ë,‘˜‹œjb±Îÿ4ôEœ9KÁ„˜4’9÷M–(Éü^Q%J\‹Cc¼$.EÀf¼wÜ0í·”Ñ˜Dž±ú!ïÉÇpÈeâ(óäÆà¿`Ý17áŸÃì@'[¦Ê<Í#ØQÆ‹1?ó4ø´k„µáèËQÍeh?C†•Ó¤Î9@Е€¤eâñ1îNô¥ò÷fÚVXNÚ‰eäTÝxá …I•£éÕ~áÞ$íŸý®W© ¬qXpÓ¡Nî³Ä ¡”)8G”ízþcb9¼»±DÒ+¾_@ª !ÂhLJîóK ‚…ZF¬ü³øö©géw†W²ë¢âJŠ­L¼ˆf‚Û.¬»èÕÊQ£«¶èÛ*p $Ìh…íØŽ6°ãÝx½Ü"щÇñ)+†ÎÔœ3vgÑÃrØÈ,dOÇ×¥(ØüeLÔlj*)ÃêqžuÚž´Ú†‘Šºåaœ)ˆâÓß]KµlŒDe˳o‹Rð¶5ŽX™èèŠ"gc®Hõ/ÂŒ >nkk{ÌHšð˜¤°§½ÛÙèC,ñŠÁ3…¶šH•f!ˆ¸l8 öðg)h1…|ÄD›2I ‘åä €¹TŒü•c…SýjÀ ŒÈÌ«"îK¿ozu&Q§<5°·§ïÀòVβÏ1ü¦–xk÷%ÙhÁ·?ÉÉ ï•Ž'Ÿytòùò2C”‹ÓÛÂÛ½ëÉDrëÒWöVç)ˆ¥ ÝÕ6|%ÿ¡kLûZ¿Ê íÖІ¯PF{™¸!ÑKnÔ„¸ñvŸÞ·bˆ÷üé7ËO*QÆ÷¨ý~‹°¤:b“C?¥œG5ÜpÛµtØâøs'Ž—y0ÒM[Ž×j«E_õ¨†—î·lI)m eí5ÚH„ïEµ‚9n›[Mÿ)® œw¼èŽ„¿‰‚ivƒÙ†§fEÍ–õõÔ5޵ÈËBŠç15¤Íí€êµ1V0ø75«Ä¨9»Ø$t±&YÂdsxqózúC4&QK¦Ëek+öWua°¯Èß¾ÍÇo¼ÖG.'e©ã ÃSørÚ?£ ÷Ç;ùV÷B+㯥Ò#®œ¹b4ÏõNÀŒ¬^©•~™žô ¡þ!sµH ¯A´~:DõÖÿÛl¡Gõ~ý鳉óù¨ZqSØKŸêÛèZ`7ã#º§•ºêµèÙåGÒ»ô¹Óó฼Úwã 9„ÏdÄ1˜¦g+T2ݾL_°C t[ÅÕ:#øXºbA78@Ç¿µ}µ*\ÁÁËÝ@ΤwÌ ŠÈÃe¹2†AcÀkꈒTIŽ~5Y\é. Á‚„°d.§ž1X=v ‡#‡¢„?¹{ªa} õ·'ìØñT|v–±r*º/°îññžjØÛ’›Ïß:¶u’\)*Ù· zÑIÅ1VEÊ2Wý={ò jˆùçuRñ‚#ŸtaC&«Þ¼L§ÀÐLpZš~‚ìÓ騾¨Çú*#ãàûÔ›¯”Úð=ŸáOÁ8*"~§[ºk­` ™@~TÉÉVF]c¡¡¿3£hÆbÿž¨è’¥d¡J-չу†Á±U$ø4k{¯Ôä/NIùSy‡EAVùT §”ÙÍ4ŠÇ6sUâUÈWuýËà\)d°Âb/‚Ëwë†Rp¥@€Ø4RœE5]dp‚&™Z'ªŸ’˜Ð 8×ÁGŽ`ܶ[™ Ö†ÃæÇ g>YßpËÉ"îk»(}Ö ¯a Ѻ 7ãX3k´¢2+L¯4žÕzo)2GyjR_:ýå•~ª7†àZ΋]¸éFö!&XS~¬Ú]-VåÑ~Ÿ-‡ZÁO·çxÀ§g-¤)òIwÆÞRH–ò—_šqÈ(uvmâ/ç˜ùRÈíg.ÎÔj'd,g‚%to°$6#ï*_øÕ”[ÁFЖz>ùÞ»²•¸Gx_†Ñ»w£{Ò…>„À žÿZEBòݳBÝ3Â'0¿™„7ßR+˜¡eMéI;:ø–m–öŠººŽ×á²€w{uÉ.$p“RfAÖ˜ý)ƒ¢Á;€´VuÏúÁåÉßCFL²! iúDzeq~ŽöP/Vñ\!Q—œ\˜4u/[Q_QÇ‚Æm_ÖJyB̾ßDFgQAaïñ 2Féƒõæ¤ù¢y^`Œ+xßÄÃN­Ü·÷òñËùõvRæüy6ãM{Ý胳lÖÆóœf5/yœÍ\òв'⚢ÿYÖ‹/ª6ÙÔþÁ<ù¼ÀHf|îÓÝ–®‡Ñ²B 9ÀT•›Ï16{Ìv²~µP ¦’QTè\7rde;t`Õ3:zš÷âönÉo›•Âô4G…\Îôíeªà¿èü Ý)ý¶[ý«‰’í«Óó\ì¹$Ó‘@䡤ãÙ'ǯb«C–ñ ª¶I›¨,éY߬»l•Ð/|¼¢˜î’wäQä-óüu“‘ üÎÚ6Ä/ð¡kèæ]iû¡«åäÝ~lR~ZVIÆb°Ž„}žî>ÿÑg¤P(†]·Hà7| í.Æ©aX{ûÁ *cÀ¢Œe3úˆd¡û1”#Gèºñî²H -B”šZAÐ] ü6Î > P Õ­ÚFlÈÀPLF"š©ÝÇd_+CmýÂ͉c<ÓÜ´¥ålHh,9AõæÜ¦I!úž?Ë5»ÕŒQnPø+&ÌVº`d¼~R½]t*’U%U’^|©Ôpù}ntÌ’x@ ûÑwMiÿ·Ð±z‡ÆBVMRÖS:/M}9/£à ßKÉßµo ìàÑ*½C84*B·Üz(ƒ<ñœ’¸‰U‡ü¦4¿± ‡{ï…–¬&®uê&§E¸Àް˜ X ùlºR`vCþÀ™ÃáJ%5yŸÐ›ÃÞçÓ”Z×÷¼öY¦E¨]:ʬ0ë¬2´à5¼‹à ޱc9ÞÙ`ïíë}?üâ "­ºC)›ÛѧNW»ñÛ÷µƒb­f™4“ëĬg©| Zómsi #¯¿Ê«âûõ$½wÁbvÀ \„ÀÓ'£ªµ–'|.ÿeÃýM‚Ê»µ{\ÎÖ:³Nˆ¾VšþÒÑ•…OéFZˆ¿1!§áš‡ˆ{IdaDJ“…mA[o ±®ßLá[Á‚·H„Ñ^„pßq%ù,‡3Ï_fÉüد¹¼œ¼Â–ÀYÙ€cJŠëË‹QꩪQÎÙÏUp…ÂoHêÛjœ Ç66L@™fä•u…E!\‘é†çËæ2ÿ>>£V}+kö{n+‰ŸMíÉOõ>ß&KA)“b$w[ì§{ÖXqdAp½½kZ/?—À7JÎè)ðkÛ«oô&-¹íkÆÁ÷sØÓó7yZNàœAE'[Px°_Q¦ Ä«zkýNà3zT)±|ŽÑç]MY; ÆëWl Ç4hmyÒdR(’ Y>†´\ÍÁרV=|‹½Uu(Ûzçg¼;LP’Ð]ƒíÒ¯ZžÏ‘°/ºœ4³§æœÖ íÆƒáºù:hãQ„ŒVª¬’„#…CÕÃå„Ä\Í£ígiÒFHLp(œ90K[< 2¦c?rµ…/æC ?j5VÅÃ/ šU¶á8­þÌ“ée€ûjbâÌÛ¿LVÄØVˆ$é}P(Hy[Ü%^ðaÇÂÞo&xà.j#Xq׸íüté¹ðÐ+1ü½oÏ©æ.T„éè°* YKe«ä¯ëÒâcdÔ¨âÿx€Z·qlËy¸?*Ô‰ê!‹ýÉ—Od¹4“½ãDêv RÍuÏ“ûËëB_#tÊ™W^#TeMÝ+Î]«ß7ƒµÆ¯;Û]¸uÕ©1Ð$p/&5ß9¾;j!eí|ô!kB4™P¿º‡æ ’&ú]À‹!>3®|F sÏ‚2 tœåÆÍ4¿fBùÔ'Dkõòã=Þ‚²6‹'H†×ZyàŠ©ñâÜïB“?{´wæwQâ¹C”“ˆ›NV6ø…ù! H¾o'g¾×ñZKL%‹ ¬QÛÝÑG€x†Bi&ÿ“åg/‰m¦#ÑÀÄl¹¹|S;‹%C±Fq™<=CWÚÙcœÎÁr`ö*-4Øä¾±C¸½— Ì-•Ÿ*¾ÓNû —‹ôé Aª ƒâÏ¢²Q¶‹üonøÖ¼ÔÅ©w˜mFïwLJ*gïrjÝ¢QR 08LóüÀœ·r?p°QÁ~Mp× ákÔøâÝùÕÆÈÝf<¥‡4Lãpøþa©­,]OÎ(vòlW¡*âøŸ‚+úë¬M°4ÅÐ]¹þì8×âX4’•6ù“mñÑ&•TøŸàS¶Xxå ûêRÏÂn©mVö‹ °jåÛ§‰hd =ŽQž™.¼ÛfûºZP0ÀJÕáI‰'þؼ°àþB‡pĶÆ5AaËÙü6»n@Ò©=z²`\'ÃÎ7q:®xé/a»bvÞè[ž‰ùº§½RáÕ°Ø«˜`Á$yQfIpµn¦zî%z'}û ¹Ö.¡À߯,×ù,b¶¾âNŽ>”x »Êrñû‘±¬†PòÛ—P©•O‹”ñv§,–l'Î ðfKÍ^ ÕЋ5÷Þ·PZIv©¼¦²Yœø ,‹†åºÜÖa¦p·} cÈPªD¯Fñ[mÂÓÖ¯°ÔŠfˬfØ‹ù4Fa[Ñ¡S­‹ÞwÕ‚çöÊy(ONˆƒïu‡ÆD×§eîÚ v®’eû´‚„œ¨Æ‹‹ùä¿5Êø™Öo¤{âÔºêL§5ªX)#4Wy~¥zóA!Ôã¢mhµ&G¡G+Mr{q ¯ZàÂ3jv,ûï©Q o퇔"Þö9crF $-Þ4ÛcûtSCtr!ú•àÉÔEÛ7pˆ?“TÇh“ßÍárà YS¾O6<ò£ðá¤OlF_—9³Ä—ÍÙ™a³úŒØŒÍo‚Ó—®Yo.Ñã¶î—WúìóaM¥¢aÂw̳MbÚÚžÍyû~¯Â®lžõøçK›Jñg”j]Ês=T½ØàÅ·Ÿúl&þß˺UöG¼Ëßç“ÿosýU²i÷¶™j/VkÖ,>`rÿ«k¶ÈÅýì_gjÌi~ÿ´ZéÕ)e»–ª²™lSÝEK3eXßšt^`ÛwXsÆÿY®XšÍY•3e‘…á¤U¢5zo:£·ÿ« 9wÿpJƺñ>wïã¨Û|DkÍC³ˆg}޹û¶­Šíª?°ú‚ÓëCÉÞË.ž¬á`—[õ3ðv-#wn£ٳ–Ø}£wv@ÂÜ”swS¿}1 p0, HÎIM,*ÉÏM,Êæ{*%endstream endobj 547 0 obj /QIPKQG+CMR10 endobj 384 0 obj << /Type /Font /Subtype /Type1 /Encoding 1000 0 R /FirstChar 11 /LastChar 124 /Widths 1019 0 R /BaseFont 547 0 R /FontDescriptor 382 0 R >> endobj 382 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName 547 0 R /ItalicAngle 0 /StemV 69 /XHeight 431 /FontBBox [-251 -250 1009 969] /Flags 4 /CharSet (/ff/fi/fl/ffi/exclam/quotedblright/percent/quoteright/parenleft/parenright/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/equal/question/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/quotedblleft/bracketright/quoteleft/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/emdash) /FontFile 383 0 R >> endobj 1019 0 obj [583 556 556 833 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 278 500 0 0 833 0 278 389 389 0 0 278 333 278 500 500 500 500 500 500 500 500 500 500 500 278 278 0 778 0 472 0 750 708 722 764 681 653 785 750 361 514 778 625 917 750 778 681 778 736 556 722 750 750 1028 750 750 611 278 500 278 0 0 278 500 556 444 556 444 306 500 556 278 306 528 278 833 556 500 556 528 392 394 389 556 528 722 528 528 444 0 1000 ] endobj 377 0 obj << /Length1 1412 /Length2 5644 /Length3 532 /Length 6482 /Filter /FlateDecode >> stream xÚí”g\S{“€©Ò;Rˆ„Ð{ï½J‘ž„z“ÞA¥ HSz)Ò{¤ŠtTé l¼ï¾öîÇÝOûÛäKžùÏ™yΜ9ááÔ7âW€ í¡ªH†$’(éÄ AR%4ÔC"”í0PIHBPðt€ 1I!!I R€勆99cw”îþI(¸AÑ0;@Çã uÃÖp°ƒŒ0(ÆW ‡ ÿ\á0„z@Ñ^Pˆ)€À0{¨ A üc¤pDÄþ†x¢þ}äE{`¥w°’wXE÷@ Ž¤@]$¶kò¿!õÏ⪞p¸®ÛŸòMé¿Û¹Áà¾ÿ™tCyb h€E#þ™zú/9(æéöÏS Œæ €p‚C‚ÿ ÁPˆ> ãà p´ƒ{@ÿŠCJ`÷—ÐÔ@][Cï?Ÿè_‡úv0ÆØõwÙ?Ù1è’±óAÃ|–‚‚‚ l"öûï_Vÿh¦‚p@B`ìJˆˆìÐh;_Rìn`IàÀ¨êƒ5 ì%ìPŽH4éŸ*, ¢°O ùÿWHôƒ¢‘— ‰€þÍ"‚ Æûò\„eg4ôJtDz¢/ØšH8veþÝ=¡–û2(*\ÖMñ’Ä@¥KÂT¾$¬¡Êß$†í®~IØF—„­©}IØëôþ&qì}é_ö® . [Åè’„@ã¿ »Ù@»KšÙ_¶ƒÃßĶ€\Alèü3¶+ˆíét±M¯ vV°+ˆ½1—+ˆur½‚X)øÄZ¹]"k…¸‚X+äÄZ¡® V}±W«¹‚X Ï+ˆÕðº‚X ïKcûúþ…ÿý}RTDúøóc׈Œ]? ! €˜ˆxàÍ3AÀ°¥¡Œ]PAAqì|þD<Ñh(ó×?öUý7;°/6êu žD:H…»<«‰, RÉ.&äÅUtªMÔ}×:ÖL6•„ /èÕrçkvR’NG¹J¸Êá}ÆâÛ`0 º➘6q¾êe»šîWÏb¶›®ã»‚â: Û¢j¬ßû&‚«7:ßWôÔüUgÆÏ[9úw”׈f9q>XzU}x.*f¦š7‰Šx{KˆÓ:ͽ(Z8jΛú邹¡° —(â:¾™d“'íIqvò¹ ‘uv)}ˆ›‹Ã<²é¼ü‡\*\B»fõ•ê˜7ãPìq.Za*Sö_CžKÔgRýz·õàQS+×*.ëëä³[ Z ÔÀõ©ê­ÈÌC6Lé1†ç^rlj>ˆ>B„L µH D¹çu#MŸ¨cç¯d×ü2 ðÖãt[ÙnêBÃG ]c9f„w’]îÒŒJç{ ‡E²ãöÞ²w%˜Üª2öA5øá/¿,“!/lú¿ÓþúÅÓ½:­ÆÙŒÏù Êᦛ?bÖÔ£ F¸m„nM9_!¿ i ’9u_Nf0Ư¶$hÚAš|¹õ1BÝÝÙߎÿÃòü°a¸Þ’RÓFÃl2Ni*v—|6•>YÙëû{ ¿ÈëÇ©[P‹k”r —.¼µ÷,U©¶œ¡ð9ް:ŽÍö=ì´úˆã©Frë^ú»ÜLQ­0w¹Â‚Tñ‰líR'}\jª¼{ûq­·!a¤D»¤5¹hŸkUþ'׿×6™ÆúZD 'òžhÞñNãu{ÙŸ¯jž_ÛbM»ÏÂfΊsáê|X¸Ø$¨Îo¯3Ñe?ÙÒÂëaË$ë\˜È¥·?$‚ÚÑ‘R™·ìô ã좲ƒm| ”Ü_mÜ5dîªïvú¬Êí·ILü[ò º°ŠÍàD)±V#5d ‰'°‰û$HjѽËÛ)I×ðhüô¤Í$Lù¿ßb4DÅäEúŒ­IJr⪉ë?%iKö¸ ¢Ë¨öú´%T&ð·„š—|» z0å¹6øÂfî©CBÁÕ×wïvEÉÏô{†æ>'5}.Œ»WK‡ÐÁý° ¢a(6j´¥?™)»Ÿåk-Ÿ Þš{Çï¨>ø0Ù͚Ⱥ™²Â®?¥ç"-5tuÆJª—˜ÍË/œ{9™Sž!Õ[…^ ’ú/?ŠqÖ.wõãÖê_„g”“[²Æ~e‹žñÿ©¦_S„(QØ€œj|²="л]xÒ«ê~Yó GG¼×IW Æ}@nÜÇ£;@z +!:cø,½ã‚ë`™›EµÐ÷ßÚr†M.Ì’•וvè«ÛÊ<<Ÿ–g ìK"’6RØÉnÄWèRñ Å}à¤-¹Ê¾êMwõ_½•ÃI\£0,èh,_:€pù,*ùê½u¹¯&®B¡wðÿrþP/·Wx‹ ÿÚ­É©ó¡T™O™†.ܱKÅ–€Üë1O"§5™_Q?Ë> ¡,žº¹÷ê÷x°zFÇ+¿$©àQ]ËMkñG‚cŒRO3­T-ºåY8ÕD¾ ì<ú!0Ãé{ß~#;æ%µõü[æãé„÷‡íÚæ†Þ_·ï·œFúYö9ùî0gŒÈ·.XnDóâ-Lo†âH’¿ŽÃÓ<¶ñK'éÂ!/w¢ 0­Ö^wêîa A¤½>ݦ ™×“Ý‹° "$: ˜,;¥áoz¤ƒ©l#Mm¢§g½À‰jg?ãõÄ¡¸gûÙsQ+ i­uWñÚÑW³C.3ùÑô=òÅš^×Ñ»ÅÁ‹ˆÖ£)d-C¢ÖíNè>³˜#<¼Äaû‰»~õØwÛ݇åé‡j#ñyÉÐÝ©cƒOIŽ\ûÊßæsŒ­ÆPoáÒ‹Ükb%èl¶sÎX3²ÞLŠÓø$ç@¸õ–¼êtuÌì‘p–ÍnGª‰ö‡ Fæ™p@óPŽ\B>ŸŸ‹\ö±ùÞÑ3•¼R­£•N€& ûzT KÆ'£ô3XGò«b¢B-/ÄžK†QÉ *2UúQ­AÕÊ\Fé‘ò5ENj¹ûñâñƒßÈ:Iîž%©¼Ny6Ü(í°‰*c¦5ȦœóÚ§É^èà’îè6\^V‘”ŽSúS0sç¬äEô;zÄûü«Ï›ˆÑR¡ú…24ú¼{êä´Æ¼³òÊ·öšëÌšyµ¤—ô i@ŽJ¼ )é®c‡¾Á¾>›¯nZ[p*ÜîÿáhÚ¿ä´Ëµ^[Nœ(¸nJÛYD„±„Kä¦i^@ ,׎œmÜðпƒŒÕ,@''…ÖÄLó¶›>"†Á”lµ s(üQ=‰œÄOP~Y¶ñû౬ÊéâkŒx.Ó‘>S&Åú[­LD3Èñ÷6˜!ïqc•”‘ÇØlU”&ä–V“ƒÕ‹³÷[+·ìÉ0… Ž2E>± sE[¨ÖR=ï‹A‡ÆÝFʺç|ö€•šª>¶—Æ‘@yן¨‡¼w»$"~¶GÞBrü:ê:–wU¥¡èvÛ&ÃH\°‡öø}aΦú÷µB²öÅói‹ëðïÍüT»í½ž¤¼6×ýa@mMÀÈõ<¾ÊéeÇ,˜Zšrb©Ý}|º?v}ÇN·XEê,Þ?Yéú¼HPÓújŸZ¸Øïná©?cXó½ï1-ÌÜ¥6NMhí‰ZîȤ¦XIF¨»’´£> ª26׉¾ïRÎig Yîl9ÌÕ^ÙÃq-¡¤Õ v/•&´‘~w–K¨7?ãG¹£]âWý³¢þjÝtVp§Ð88ãy.O†â¥(q`ЈrðÎ íK ¥íwBÍÚòÖ·1,Ä^,@Ü×59d;¿7‹ü`Ôd‹,eÞM *•ªp8?P%˜ªn§§J„ävÑ3np”*,ß’Pyk:Ûy¶/Ú2½õ¥…žû½h¤e#IúÄΦEƒg‘âÁtÛ‡‹•Þ{m†÷Ï,|¦¼¿MµÛÝEDžƒßÈï®*}Å;\ >÷ y£FI\ßÂi6+ŽûšøzràE–Æ^3ݲ›ÒRqD­íJ¥1ìFÓ#XßÌ÷!A{O¶< 3•¨ºT1" ÷‡RŠ,ø¿1˜ø!¯mŸ˜8Ê9¯vçiØ>©Ìíª‚¹ëüo’kEo•1®XV´è ³¢×µXÕPìºkŒoéjÔhïÇC&µw·OB áà¡Ñþ9Â/°m©Ýž¼¾Ó}G(ïó½É8EöŽƒ«¹ñȧý&T9ŸˆŸlS˜ô äÛLN ”›éý mÎ_ûÄOô£ ­ÃÍ_!žwÞKÌ6/öðã“éÏ4´e›GÜ?û˜ô÷²DwÓðU+oíÌQ½5u^aÔ§ÖËæúB‡ŸNgqK¤^â4MzøÖž{6‹‚þšä{šÌã†öÊa¾‹5vBn¦–ÛWbЦåÐÝ£}¼_œ,ˆ}ЉU9+ƒì#¸4aèéÍŽkƒPÙgkNw Z(QƬ¼C,¦±·»:Ðcásr>f'¸UðË0ÎtJJãoäà¯l¿¯þ²ç1SØûcà[CN*0ž EŸ.&Üì;t°âØ•Ky Lì¨)¬B•µÛ•=’úLÌ=«¡¦ÇV“À°©ýÛ;EÅuòOj=|*Nª\vÚ°ˆ×¹äõÜõ̧úÈÍG²+mŒËÒý¿@Ë ©:-bÆ w3Ô¢!htΆ)†/ÁåЊÁrãšiÁ›ö¾V¡ÜI€å’zE .sØp²æ+Ùã„îm©Ï¥q\=6u» ‰7B§Ðô<®Ãg†&u¾ËâÁÃ<®ÉFÈvj»– ðÆ-Ïœ;0œà‡uHéÇÊ«*A9]2pe÷ª='G  Sû‡Š½Ò³¦ÉÇ nîßëNôç Ö”¯H Ô–1/È—jµcû=žqõµØrÂÍ}’ßŧIVr5ÌT ÍÇÔ7m—â¤1L{¦ÍPK¢¬ŽÜüå‰ïðºß¾Sœ*ßäb•‹ç‚”©ÍZï”NKÍkÅ—˜}îSXÖaû•t3¿ü½'íf‰÷ÌΗ›_3μãW‹n“H§Õ{÷/s>»S“}äRe´ŸoµœüÅ`5zÃOÀ ’±A|4 //È$Ú«@rîYÙ± þTU÷ÐzZŽÓC*äp”æà¼I{ÄäÕi²2é¥3蘢ç‚véë.ëiŸE,EÅ&2aø—J÷Ãò ™'ã5ÏSX÷ùz2Ö›µè=r,k§Îß™8&kIϬOjß•ºèl¯ïÒ-P$±Ž]zYf¬úÙ³Õ1´%‰ÛË9Ù»Ëäõ"IrÑgœ±³´Üìˆn9«ûÝxìv¤ež¿ÿé£-ã·\>jK)ªºÄÇÜDaV*Œ×=T&+Kb[¹Bt¸ðâÛߥ1|cx?Ì 3NΟ;Œ–87ˆ.AÈ$DOé*UqtFŸNÎŽ³)ë[ÕÎW¿¾ A¤Ð‹öþŠß° +j:¢höJĤ€·ýš‘~+kHj~oÁV÷_›~W'ï+£ïáò»Qùàõ.}¦'ˆM¤:é¸V}ÓŽZ@§ oìùJaØ!˜l_ÊV‹ »…w-÷™AP½¬úVR+3BÈÇÎ£Ý¥í°‘€h’ÞI¦µ§zŒùédŸ—ëÌH%k«;ªäá9ÏT»‹ßô6ŸÊ‰HjJú,n. q,}ˆµ m»µÌzeL³K™Ô4]Œ±³-X6ä{©o3ÔÜô%y–¼4øÖ8ò9PxÃ'ìU\²`+þ;ÿòYK¦œ„Õ'™Ê^ôèÇà—å’…ir>)d‡÷šþB¸ÞWúãŸeßN¬® F/—_Îo#TÉê’x˜¦³ì¨£Ž“¡²Çå«xzÖK?Èœ³·Nsô²ÍžzÝqüµùæ8“ ªÂº­¬ÎQ„Ç9Ut‹/i¬9ßb‡Kot5àPTd9#ªæÙ‹Q}å2¢–—‘RÝMh6UµKØvâ{kàëJ_WíüÏœdëQ¹cpŠId4CX<•­vgÌÿˆg²VÖÿVb¢ß Ê4a?·¨` îÞÈwënF©Ë·n·>:>ð†Kø<­ƒŽP©ÓõÐÒ 6)?)±—´¾‰ºXJ)þªùëð³P`œž,Bï¦W Ä$pÅü›þ¤"‚lª“ÏAŠÂR %?Ô5¬†È‚vÂ9§8á€Ú‰J.¶_çg&¥Çy)þ¬Bø÷vmNx_Áþ0å\žù½> Aþž¡ OªÍÒRæ\Öo§©81™4ž1Æ¢N8¡ w9¯7¸¿kÿ:Óëý>¡‘X»#4ÜÒ”/·ÌÒs¬ÛÂF82H‚Ÿ2/¼VZûØÍÿí87¯kRÍh°Äžw¥€|Ÿ­³|­N€2€JÙQàsû×v 퉒‹ˆZYº¸d•ú?j 23-ЧkÉOŸ¼¤D—HËØÚãls­:4‡"LðŸŽ0rÈN)½ù’;óY@‡%ŽŽ‚Žqbww[eÎ$?õqS«œY²ó^ÿð Ê’eNìæŸMC.J¦ö4Bd3ûÎaÕøè[n*§2-0)iªw––YÜ$´ ¬Ï¶Ð^+ÿ%›Poe´h7Zd3ê´öfù™öO,»ê§mš†“‡³£+RçÙ((¤~$®Ø?mK.ùl® «‹ÒGʾw›4àþåt¡r\๡º¼QÈ0PRžPÞ0½Sê¾”ð(†]jÅ“ZC_NÈî¬í%ªa)…jó/c«4ä˜ì sI¦ÚŠóª¿ß`Ñ\—‹¶åyÏ$àù„ë(eãQŒ *$ÛqÊ®ƒâ—€ŸUi`¿ZŠmóƒ Ú—ò›¾aÂw«èX–6ÄIâÕot¢x^QÜÿvẽàw[2Ʀ:™6²ó^‹æ"I.zZ}#í£LÔÌÎNÙÕä‹»eÄ·£ PIŽÑ9k>UQ žó{ û'%m”|4¢ÑO;Ždgï/ˆ#ä\§zk¹ž\¥™)iêõ¢ïêÉ7$öŠÎ®Ôß“G­öíß7'5°sü~Hÿ¿Àÿ‰p¨ƒt³C»’þÜsøÍendstream endobj 378 0 obj << /Type /Font /Subtype /Type1 /Encoding 1000 0 R /FirstChar 46 /LastChar 121 /Widths 1020 0 R /BaseFont /VQHLIO+CMSS17 /FontDescriptor 376 0 R >> endobj 376 0 obj << /Ascent 694 /CapHeight 694 /Descent -195 /FontName /VQHLIO+CMSS17 /ItalicAngle 0 /StemV 76 /XHeight 431 /FontBBox [-58 -250 939 758] /Flags 4 /CharSet (/period/zero/one/two/three/four/colon/question/A/B/C/D/E/H/I/L/O/P/Q/S/T/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/v/w/y) /FontFile 377 0 R >> endobj 1020 0 obj [261 0 470 470 470 470 470 0 0 0 0 0 261 0 0 0 0 444 0 625 626 601 678 561 0 0 663 259 0 0 509 0 0 693 600 693 0 522 641 0 0 0 0 0 0 0 0 0 0 0 0 451 484 418 484 418 287 470 484 223 249 458 223 745 484 470 484 0 320 360 340 484 432 641 0 432 ] endobj 371 0 obj << /Length1 1560 /Length2 10430 /Length3 532 /Length 11349 /Filter /FlateDecode >> stream xÚí´U\\Í·þ‰»»Ów‡àNpלơ‘Æ-wîÜ‚÷à®Á=¸†àL¿ïùŸ_2ç\Î\Ígz÷Åþ®Zµž§VUmZ*5MV PäfådãH)Kêqr8Ù88$Qhi¥\€¦`£´)(ààÈÍ /¿ /  -@ ääåbce 0H1þ“ÄpºØ˜›:”MÁÖ@H sS{€&ÈÜöbHØÛ4þ™á к]Ül(œœ s0À heãˆÂþ'yGK€ÿ¿ÂnNÿ=ätq…˜0ük“1ir´÷X-QØU@5 ÄËÿ¶þgqY7{{S‡ÊÿÛ©ÿ5nê`cïõ2@Nn`  @dtqüŸ©ºÀÿ2' ²ÿ_2ò`S{s G+{ €ã¿B6®²6ž@ 5°¹5ÀÒÔÞøoèhñ?-@÷¯ví÷Ò²êòÌÿgOÿT3µqky9ý§ì?Ùÿ2ç†tÇÅÆ`Ài/'$òü÷›áÿ“q4YØ8Z¸xù¦..¦^(Ó!^€'ÀÆÑè zB³³9‚À)HKü– ”6”“ÀniÿOì_äá°;A¶dñ'ôÀî tý ØAŽÀÿ0/€ìñgœ—ÂÖ.À¿2¸ " 7—?TmÜÿÊà°»BVüæ…0Ðèø'qö_ûõŸ?€ÝÑæo#§æ {ПI|g7 ë?7èOR[âAêJþ!HM©?)(ý‡ ë–ùñCVùîAV(÷‡ ²ò¢ ô‡ 5Uþ¤¦êè-¤“j¢ þ‡ 55ÿ¤_Zÿ!ÈÅb7ýC³?Q0ÿqr@$,þBˆð/üg£þBˆ¦Õ_µþ !}´ù !Ë´ý !žìþBˆ)û¿âÊáB.»ã_qú !®œþBˆ —¿ðŸ£òBl€ÿBˆ ·¿bÃý/„Øðøƒ\ž!Ć׿ø¿ï·¤$ÈÓ‡•Ò?V.È€Èòxøüþï™ÚŽ6ã'/ ¹#üãôOÔÜÍÅèþ÷› ùxü7[Ú@>5@ 'Ðeyd.l›ÚZæ/S8UÏ-iÕ¯Rß=Û´”mÿeDÑ™iý«ÞCE.Æ>ü>¥Ç©kd»¯ú¸ìy s|Úü˾»É~†÷7R½« e¯=§7¿ƒŽ1ÛšænNx¡UgÖGË’ô‹²/óÕ¤µW© z Üz2ƒùøõd3ìµÃB¾ÒqSi`¥9—…ó„­y`%}†[› ò· Cja^¹µ»á<"å%¾CÝ›#DE¹’„/‚QÑœ’Š}òû¶ÑÀÏ*ÀÛº“sP™ÛTÖ8¡Ì^MÚ½÷~“ùIVÊÓãÛíêÖЇéµá RáÑnÓOñK"ßuîç;_F‰XkwÒS¯,æ:AÀb ÿ¤á¡˜àŒ¯‡øÉB‚Êñ„W …*³:XõŒÖ©¸†qí™›ÛŸ|C,ú[{ßÅÖÅ Gf\}í»¤š@»-V~5gùŸÃ%c_ên HË­½«Vv¹œU¼²ä—òó®Ù¢àiÚ?J\î«Lˆkö碜Ød¸µÐC±å&r¨¿•⎠ùˆ ËH¡rŸ´üÂ&xç0¶^+¼?¶¡Ú¤žŽ‰: F¾¤ò±öØ€ ÙøjSØíýÅޏãz@¤€3*?¥^…¡uð'ë ™Ô@pxã³r›d÷ïØÁeT³ìCƒØØØooÔÒ³´ ýUô«™røšxr º3ë~ÝH‰ªœ7Kã8F2òuÒYV¾ˆf½b@`šÌÑÑ@ÁòUH?á_rжʴL¾¯„º¢1$>ñ …wÜÎ3¯*D}b—Òô³rŸ­¬V~÷Ã#\(Ç =é€ÐqY(]ß+g»®¼Áë÷C¡†WUƒõšNºyú®_§›Vú±¤QžÉ6;Sóʱ›×§Ûf^¶­ø<’û|Ž0NŸ:A›µ’òEÁhØ÷Æ‘ë¯.„¢ÆL_oY$ý V¡1ˆ,(*ãm.îÛ©¨xJ.‘u¨²ôÞu/±c„šã,›oâl /¥'P ,!ƒ>6dJ+]2ªvUènTO‘É^·²‹ápŒÞ‰ê2^vƒç.-µà‡ËV¢v)Î¤Ê RYÐÆB„•¯d*žeaû˵VQôËsõ’®g‚N·µà5QÖJϹ×[ð¤9Aõ÷¢÷ÒË`ƒÊÝà ´Îæw{AXm…Y;D>zÎIåôœ_r¿¹»àS÷•2£½Á1Zðñ¦FWa¶/Á}¶.V<ÖB—…› âmÀÓˆ÷Ç󇾈rq“Mðå‹ÁÿƦ»ýˆè]uR5ê ï˪}ì"¢w.Xt¸YŸm«Ag5fÀ¥ûã¡’L84 ?% @ùdîs1+oÇkdÐ.ÜÛúzm÷|æªÖ:ù¹d®Ü¶ék=ÿ†.;_ä+¯•oûB{ãî~pÛsÄZC¸•òu?•XFÎ_vzwÀ÷å†õü=ÈzÆŸâdÞªêç$í;{îO¶ ­ªszoMV€„`ìÂŽtP³üü±’š°oÁ”.tSѨ 6&SëÇg¥ÄGv‹•…ÆÊìF>\º¹Ó\Âfœ–š ±[!ì”lAÆmT;¨Š˜åÁ€–C6î‰øù[¶¯ídŽo«S‚cТïoŽüT}ò’òÈÀ‰PyΈúMÓlÝ‚$>Û±‡Xˆ^8;àªxÞu<¥.G–'6_6ü‘ýßÍ8z7¿çÞŽ*K¢ÎÚ9zXþ@öD‰“ö„+I™“Ÿ¶?t$ްŠþëâEüšÅ3v1‘ iŽBS7]eÆ_ á!J†gÊjN× ÎçfGÓ6:ô$ÏŸîéVåŽ3ÑŸQ^ª µx»p…»˜Œx”•ɦOÀ}Øz÷+¢ï^¡¥þB£®/Èñ†¤¿¶!&œþh—”!ÔhSŒâ4wýñ°Ö*ŽÌ­';¸á„Jښ·ù'4köÇ(ÅÙaT¥jõÊróÈÍ»²§Ú˜eÀgD˜ú4^!˜õ,¢Ò=*jÏW^ºd ž²âcæ^•ãýtuv–>{Ï£'rÂOÙ²deµ«‰ØA ?óššØ´@X]G(½uxÁÚ¼_l) 1EŒ”XhcºP~Ft_5YŠŽ—I:mD¢!ÃóËé ÌÉÅ­F‡Š“ºÓØ´°¡Yêß©ýâ&;ÿèBÂDFP,%8§òcE© såÔ”ÊBm Bp´Î6 ”yuy«gfNŒ"Ü#Íá69È kpß'Ö¦v.†Fa˜ÿ.(¡¶2Ý•ZZ³Â*a‡§ã»hš”½K™¸ª²ØOö>ûÕãD4†½· ‘ w`´„„ƒ®=juÕ¸7ÔZö úów7IáÚëï#7»gÏ’U›xkØ|1Ñû!f¶ÜM÷v`ÐD'¥ˆ´ßîÇ'ÑVš¥Qàž”Avù+¥ üö†ñ‚e¯Gí£ï¨9)• ÿE&Afêèl°fÚ^FIÞþëä÷¥WM1\Tö#ý¡b2°œß·³úŠ´ˆƒ“¯õmÕ€B[´uwOMìÆ`<Ò‰„ ®Ò/]|e^¤£¿™½¼ÏC´óQ†RRåEèLxr‡|NÅ17‘‹óú­šŸ%¥TÎV] (dnKüB%?.¯”×E›.:Äu¡”¬ð›®×‡q¨ŸßýÚXoìÈ–43|”ÔÍÐX)ŽûÛ{ØïuÜÏ_§¸Icb«¢óÞ Ô¿MÔ„3f}r«e§ši¤ö¾ÎÓ07ÙôëãcY¸ò±YJç%SE£O·ñË®^} ñèUÏ£Iþê´{³Š,kaõmʉâ¬ïƒúé$Q¬–÷ñ«›,kÉ^ŠP”(዆–¸\þg7fC×—2·k#åÌçuNû›Û”Ú·³ÓÇò*m)²™¨ A6´¹ÖËF#–QQêTÞI'Mjµœ¯Šu[àùþ&Ò¡Tþ <=3ÿÚC"±a~g¼I± ÷ó•û:EâYw´i.E—¦n1©\å'a¼™ÄÀ>Ë’÷¤©ò¸ðÏ<+–b¿öŒŒxäHȳìfн ³V¤Ù–,&É€ÄU³#x(Ê3MM¨žÕ¸³Mð¼H[ñ„K kŽ&Œ–K§8>gÛóˆ~A“ÍòfË^5•R&%-$:§,]¼<ŸE•˜]Šß pÅ4h‡Á’!ŒÊÐ{Ò¸ƒfú`³,ŠÕ:~€tPh$NüˆPÛœoìÝh²Í¬ŒïŽ,·Å–¼;@*=OnsÄX4kùhbÍã£ç>6Z«Ç[‚݃ÜiùéÊPî¯t;h±ŸŠÏ._½â~É¢›m¯X­—¾M×õ)‹0‡î ü.7°i3":JCƒ…¾/Äã„•RÉ™|2¢À¬ë§ÀlðÓŸ²_ƒÀ,CW4gºŽåw?û[¶ôÇO°(¹²bCÔ«pùµn¬U=#ªZÕ·¢à€£U½J¨× Y¿#9ÏÅ»y•ÒÌŽKt²ë¹Úöµï:¤`0ÐD#c:\6MsÎÚ|e‹;ãñe??`™\‹ô"^N[{êñ2Žk"v+þTÆsЖÙ^I›Pꇙ¤’ÐyÊ騷²QàmK…ëú!söþQPFL{cd $¬¦^Ñ%3žÞ¢µ¬UFÚ?]Ýúb¹¹É-±H. >÷íêŠ3·1hJ9þ’÷áªÀG¤(¾ôÐtèv%×çúólÑ ŽN-ï&A±¼&N2kwÄÀ:ãh&z±}Ê×{×efJd)n®iT%ž“²i(›ù$Ù¤vwu ò AH¬ í]v\°ÜÆ ÖÝ¿#˜ ÷ÑàM˜mh%N…·°Úˆm 0§«+E¼q—ÞMM¼·EÎÒV΢LûÑÁÞôÞþ Þ–‡ Q„ný›M8ré}ÎÞfQiHjOYn¯ß#­rÞ0 ÷Ř£Ç#•šÜzyݹƒ‹…,gªôU$)eEoÊÄÞ"<éelD{ªò %æÒéû\§gáÑdµ>»ª+HÆ‘,Š^}C=‡Nkž\ìàÒÚEI4=“×P|/´ÊÁ%÷€±…QΓƒ;^e©«â½âsÖ‡>¢eüΙ8`”Þ{îw?:à<Y”&«áˆôé‹ š¦Szû¥ší‹Åò‰»¿ÝÝd =#°ÆÒœjê¸wÎë.¸FÍ\9Îw:¼PþÔ‚Šª1O½#×qP‹G_E‡å"é.D¶”éÞÁœZ/%/)Y¾K*ñ1ɰÁ¶}¨¨ÈRBeuúÂÏú§«úþ¾ ËxÞ‡¸GàöÙ•É‘Æì#ÊG¯«ƒÄ€ÕVðj2IŽ;‰‹¾QzÖÛå$ÊÆ;K3­ð¬sYD}1Tå¦xaŒ0Yã…Õj™ùˆ~ 0/h+ù3%ªÑj¤×9´L= O°B±|úäbR Rù°APï :qR“Ø·²IÈ ²ywÚ¸ÓåÛÌÊÚ€fÏjˆ½ uS¢7¯•ÅPZå9OXÎóðÀÓe3l Hie°CCX‹0èæIª¬Ý‘/ªH–`Qo–¤äï›mÆ^‚éìÿJþ%.éõöëgF™«8ßvJ-€Ð²‘ :ƒOаtæÄÁ™ àggø¯*|`7ÿ)QzúÒÆr¥#Þ[Ëå‰3¤œì.)ÑC?g.Žvh]¹_H¨ƒÝ"K9 .K¼1‘Ú¤ñ‚ióhC ˜8$®`3ØsÅjRú$^;6UT[ `¨„د Ÿ’æectÚ]ßÁɆöD«fÊaÜmnï¶>ò8±ëæ}_I¼aYÈ¿„3.i FjÎè&vÞ6TÌ ¸ôLú¶}±0жl} ö‰n·ühLZÖž K£Ÿ‹!E»UÆ}Kư^Ì%ûÍJó-Ó…T4TOÉû`—C×<õÖê$iÊj?s{çÅïë +ž}0ÞËÉÚÎïî Þ`i ý|C{YÊzæbÔ½€ýÇN˜h¦‡i‰ ¬ïCeHO@¶#åD¯‡š>—1ÐÄï"Ô³¡‚†Yo8^ã’ªb›UÁÞ±8¡ÌZ¾|\©¦qúbqkÙ{Ùˆ$/K“è·­HFĬ?ÞL¢cöЦ&Û¯àçבÕÁ’‘Ü ßÍ:©åY¦8™Ú(êWöâB N̞ز¦ØÉ²``?¥ÅªMÙt šàŽôN9†`|¢xØ!Á6'sþàz4]æf™EO˜Âø£]§º·F=}e&XHÃofÞ÷´I±™í»J6ÑQ Æuæ‘XY<ïÜòàYXö±Ôû0ïµ<›½X¯›ˆ ZDcß¾›„ß÷“,gIHºCD¤^ï+¿xÛ8ðËêÙͦ•aìî“S6ö :46;Ó øÜÃvQ }«‰‰ÅXz*GŽÆ”5pÀ,—*¨ˆï˜‘˜U݆'*éÿš¦Bóì7ZzI•­QiR@³m%ò3ÍÚßÏ`‘Ô—l¬ Nï΋7ÚKT¥°x¦Üq¤Íƒ5òx£±È¥èE)’÷ôf/)à¥\ÑŸò”¨Y¦n‰‘j¾g‚ÛÓi\j±Õ¥¿ÈàY™áÖxFzüêÙI¦¦qˆ Q^ZbdN’M,Sƒç\ïtCëfÒ¬áÞB£§ü%êÞm¥2z)žÊ6z<†6æA N3xn†åSÚÍÅkÕº¨À{´³Äj}ïc䇵®\ŸkUÖ5ùlžönVa‰ÊÞ´sQÄœ5l>ßhÛ`šv Ë)?ÃX}STèvÂðÓËt·­_[À—'sñâõ‡c‘ÎD,W£Y¡*«Të ŸâíïÏÊͯºIæÆ3Û¥b-sý¦¡ÊÛîÃ>Og{a|ä »e^Ü¥U—RžhnüŠ™/ÚÀ#ÞÅypið\U4ü5-; Ò‚‰õö|èTczÐyc¡òã=ã¹ã23æ Øž¬Ô…xHÀ}±cîrŽ…€Š’î{¸(›Ï‹—w& ÷E3À±øŠx‰©Sd“.6Ò³àbS³Ua}f047µ.˜.`4cÅ'ö#-õ¬+ãJþÅåÞO*Ïpnk|BΞ¢@Í­A2¿/äfÚ1p­Œ=w=…¶|+Ë¥è¹+Ò¹J£Ýí cŘ+¥ki¨SÓ^Mdfíjïœ'a’eæ9ïÖÏW>V¥’îsxÆw1™ô¢ÓüR"3õVD.k¤<oP¤S²?mˆGµ~.ˆÕÅá”ÕbU¶èRoÑZ &hÃ4Û‰¬­Ä͆ÿŸ3{ÈÞóeVÝÍaÂM¯¬åÛ‘${gòo`Ô—^ReM:ÏR…« 4¾;#_6l|¯q8'TÌMÝ?4š› ýQ~ùª"AoéP½Ó{ŠÌóšS“¤*r(Бþù—Ÿisp˜nNÊ•ÊêvÌ–[WöãrÅòûâÁg-[ÇÚ4˜êÓdì5—hVÜû9kýϽ9@âÐÐeô1#ÃwsFD£<[›$ü–Ø[/Š„:¦f>š~VíGOƒÅËWo€+!‘ŒîÃ˵! ,ý‘ßV?–°Ä+0­Önµ@¿_´Ì2@,ôa¢^B¨âçVc£ä õóõÞ·u”§¹‰×•s*)‘{"tÉ;hË}MçY|Uê5*Ò˜yæu—´JáI4íþQ ×TwXhÛêŒëŠ qžE=ØÎ_pѧL3’”³.ÓºBx4Zkç%ç¨cæ€`Vnj*~Œ H4ÐרW*=0 ÓÏ·)Úê¦>ÜÑeÀªÙõý¸vðmÉ*¬™TYé9ÅٌЛme«»_Ô*ŽV­ô cÒȉÀ¯`ý8F*¾Uƒíø»#á<¤í5ºg^Ùéþl¿†âÓ,ÞTëÁ÷¬¤TA7ëZÊà–«Ï %–‘ †ZU™LZ¬¬fGÆ7ŸŸrt:ØŽÛÜ J?ÈñäŠá\›cP{I*jsÞÑÅlÆâáùˆ’HÏœAí Hnä9®?˜W\€YLå¾èkŸ0«ÚejŸŠýJc;19†[®{§Ô=éR¯;?/±ÑSa—PE2aLp7«úžXDùÇÛŒŽ¼«™ºÇeîúZz,ª,–²bbE1žÔ|ù+Vÿy$Ã÷dEð™î=ë“ù'lÙÙCCl«Y±žS’OQŠéQ˜|ë`Z÷R»½Ó«O³±©£ws<}»_®Ø ¡o¹¢"ôÂ…ˆz)²YKpÙüïÃÁ1Ò¾‹*ö®¶DYßUÁ ÄSES–7ªã+¿?KŒ¥Šlv…QuRÆþ¾ÈkÃü  ýÚè/,!f–ŠJKFv~X§ïy›Zú>ƒ³v¯¶×bÈûG2&ir[Jaµ<·Jˆ·@¨õP&:”¸##!Dc8“ŸêºìéIʯ=ªùeô£5‹V“ª_ºô‡ê(*ÒYN,èæ;þw=ÃBÃÏ[Z߇¨90NÆ%†¦Î7°uÑ>42ÑVÃÔÝn»eïçÛWIlæ¡Ú§DÉkoní§òöBX´m3V"$Š"ÕĽ]ŸÇÙ¢ “=ÆF¼øð?+Ñ˳îOb$ËÇÅŸPfv ý.ZåÊ­ñMçŠÓù[WŠb "Õe~Ÿ’Ev»ójJ»b>>*M¤>üæ¢ôÉ#½¾Ÿi·ÃÝì?²§*7 YHOeˆ]’aà¸%xþ>"©’h^ÊC¾0Ë¥ƒ±8ðòåÞvÉs_0ưøô¸[}· ?ß°Ã& ¿ªpçÆ² £Ó±P¬DH5xÊlÅζ<›KP UY/ë"nlJ^JJtÂñðL‡•Òô…<¸m¹ág‹˜3DýBnXÀ›|W›Ã'›mdz ¡t<•[A ¥äX·P霢ÒðêeþßLúóšA´)'M¦L WŒxÈx®"_LêP†Òör¨ 5^jõA™œb3¶&J„ãj"±ïz÷É@P¸„ø\©Âð—S]ööêcÝ3ÌÑ©ÜƒÈ ´Ñ£€žõΩ˜_8¹ÛŠ~¸ðGà Ïl’¹¦¬¨ºR™]p'Ï_Î3M^¼ÑšöþÙpbz&fûM{ìHïâÎdз@åÐÝ"Qi@$›·(G9Þ9,›)w¶ÖÈ—$>ŒÌþúÉÅGͺ ¾SðÝÑY6!ÒsžÛ ma¿\TÔÒ61­ªêÅ'2 ³+ŵŸœÅ%nÕü­nßm©¿¾])ô@‹š¾Ÿ“Â×FF‘âZ0{a‹Š¸¾ƒkÈŒJÄ&¨Ò¸§ˆ«#’ù E ¿MùèÍ£Z^Ÿ96?1Œ“á3Gš´mßuÛëâJWR à*™s¡_I©‚[Ƴ~–;å/¿GÖ( 8ÛêÃt>èŸn£èTÏ qg®­Öt.ÊF6ÐYX„ø ÷Á‘™l¥q{I} ÀR$ËÒ+îØVEcã5M'”üîJìƒVÖã}Kñsµ“ÖÌXÖ³ƒ,!š¯õ=2ýxW'ö{Mü>qÒØ4è¥ØÆ_‡`?çHžV’¶QͼŠôŒGÓ@š:eŽùôlÍʪ֘{’¢-ñöó”°â‡ *S:óÄ×™ôÎyŒO?ißabÊ,st7÷sÓÂXˆ„ —6̉æVF7ª—õô?çx<`¾¶›Þ¡b}þÒn wºOoCÏñ·Ý.íÿ_eYã³ðX(ž•8}‰wZ(ÿc ŠGcÈ¥ŸdÇn·×V3Šü‚&ûþ½ŒžëÂèʱà{+”Cß½G?´Ûî·ÍW­¦¢[E°Ê/Iöhž°ì§\Ðw/'̪éÇrA%VÔi;k}„ég9ûÎðx‚v›Gj™Wï´W§,—ˆð7 ô%`æwĸl÷Zô ic¡962ÌàüO›x˜9@°‡4FæÁŒô\—€¶^¤Š­âáúÙ âÚîµ­GùQ ™îoŸQtÐÑÊdŸd+’‡oÞ ÈD7ª Ë{Fט²ø_’ü—zć>ÞÝ»Õ9x[“žm Õõ÷¤ÖUÚ¾}2n\©ðJVA{;o"§ì&jѺ/8ôcw73”u¨ÀTÙ•ô3²´´¤¸Ø)øyÙ}Ÿ=(YŽ|„H)6žóm€'¦ /*Ü&Vô ¹ŠÑCÈ+HW°‘îWv‘ܼ·¿œ"÷¹æ¹{Büñô6í«G̳=4Â^̧êòµeèøìë)99yQÒÍoö‰«cÆpû?zt±à$âmÀ¿ÂèÂzWús ö^Dõ½£õÍ”íiÍ“5·þrC×kMònG‡"íÃ@yXœ…¦×Ù7Û×(öóy7Õ”fc×‰ŽŠ÷Æ: ·ÏÇ͈vEˆ&,N~ŸÜ f_Åó‚þèás@åGS]#%·ä¨51Ф Ü+÷¨ØdÓ¡ÅV¼ßß¡÷áj%nßf¦õËÌÐSÅè\®zîÐ)"Åôhó¬À¼Y5”Š÷,\ÿv-*H¡+Q4m¹µÄ=Æ*M¸w¾"Íãu\9]ºœ®'KCG[²DˆÐ;à÷½üL™Fë’HÍ…Ç$UgMkN!9ºŽ#€µ•—PŽ™—éÍNÖ|lì²\‰'‚Am »#¡ÿ††'1ˆg¼¥[i¼ÑÍd+Mö>`‹4~LùJ;€ñ,p‡̰ÂJ@L` Û°pOR:D?±*Ì¢ê'Îá§šÓ¸ið,òæ8äû8À2Xí“Ëñs¤õ ˜š0š}cHwÝ©qèE£yià}„üá/Aà[„¡]çX²´9lg¥Ü‚>µi›qNþçQ¦ýge§Ûð^ר4W]ZYmJFþ÷T XßNNâ$v/Ç5ÖŽï·ªV½aFâ¶[¶ŸQVkP% À&Èãˆ{‹,O Â}[ ¨6°R<Äh4ó‘Bú_NTFs(b£ì¾H'¿ti©è–6Vç0`‘™¥¦i¶M’rê Ç•ON 9Æul fB†U jÙ`yâXI> endobj 370 0 obj << /Ascent 694 /CapHeight 686 /Descent -194 /FontName /UZDFQI+CMBX10 /ItalicAngle 0 /StemV 114 /XHeight 444 /FontBBox [-301 -250 1164 946] /Flags 4 /CharSet (/fl/period/zero/one/two/three/four/five/six/seven/eight/nine/colon/question/A/B/C/D/E/G/H/I/L/N/O/P/Q/S/T/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/r/s/t/u/v/w/x/y) /FontFile 371 0 R >> endobj 1021 0 obj [639 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 319 0 575 575 575 575 575 575 575 575 575 575 319 0 0 0 0 543 0 869 818 831 882 756 0 904 900 436 0 0 692 0 900 864 786 864 0 639 800 0 0 0 0 0 0 0 0 0 0 0 0 559 639 511 639 527 351 575 639 319 351 607 319 958 639 575 639 0 474 454 447 639 607 831 607 607 ] endobj 356 0 obj << /Length1 1059 /Length2 4084 /Length3 532 /Length 4795 /Filter /FlateDecode >> stream xÚí–gXk”Çi Dªô¢ E0B Mªt)R¤HHB!t1 RDšH‘"邆¦tA”*½HTš€n¼wï½îÝ»ŸöÙ™/ó;ïyÿç?ç¼ó<#!jeÖEâÜP†8,¬ § è›[+À9y„„>' qØspJPPSSt<¨<  ¢®¨ªUIú8ß<ÚÓHëŸþ•t}Px4ŽÌáO”UÇ68E‘t1Àú×Àå¢r ‰F7” ‚ü2d‚uǰ?ÃÈß¿–Qxª)@šjò4@µˆÄa1!å‚XਵPT'ÿ¦þ-n€ÁXÀ}~ÉÿjÒ[†û 1!ÿ™€óñ  ð€9‰Âcÿz õ§7sàóïUƒFèb=0(@þÏÚߌBZ¡ OÀŽñGýGa‘ÿ6AíÛ ìì¬-eÿœçkVp4–`âû·ê¯ä?Xá¦vååä娉Ôû¯'çÕ2À"pH4–z ”U8QO•”0E¢‚T0Õ0D‹#P·Ôž„î8<è×8•Tˆ/u&8䝸Ÿ!UŠÂãþ(+ª¿XE€èþC0¢ÿ7ÁˆÑߤ*@¬þ&êü!ðH € þ&êÛAP¿!µ¦çoH-‰þ ©1ÿ µ ö7¤Já~Cªþ7¤Jùÿ†Ô~CªÇ€ßZ(ð¤~t?ûðß®§‡ +*`¨²< ¦¤ À”ÔÂÿkží€29(ËËËÃÔ”ÿˆ"ðx–ðÇF=K±;šzòP¨`42ŒCh\÷Ê|B"_3(xxD†Vσ’bQÛúöé±è·h1%/Ìüd&Ù/Ëæb[8² t äß|õBŸáçH¿”¬¡ ® Ù¡ Bö_²ÍCæ}Åv¢WØ›ž¼û¶ªLk98ù’œæPÜ•»ñ|¥ÀJúœí"ã¸(M›c`]ÛÝë*0{ÃlŒ]lÌ#IEQkŽ,?rœRìDGZ*ÃDô5¯X¦zÙ±M\sÀñïEL÷nÿ¸Âèr¯ÄS½vdˆ>·XZƒM/z)Q|ºÖ±"}üš¤.½‡{1 ÜÏš1 p¹FÜ¥}ZÍv÷.“÷ØÂZÿuA­ªç[Ò–kš˜F‹©/:lFÆ]€±MØžf±õº¶ß퇵#“2É]×Ù*çÇo‹-øé"Áº¢Š=^œß»¿W×îþúúYTpAuîƒåJËÆ*ñµ­¢©p5Ugk£Ž‡eI”#&ØÆ¤oU¦&WɧÊ_2À%¹¦’æå¸i!—ž•¾ÓkiÂ…¿øÌÐTœt}H*UÜýiºäCÅ·iUJ~ ÂóÄÓ^}ªºþò†|ŽÀëg0q©.½¤5/-ÈÇëícÅÕöËóK¿­ÿsnßž“Ýa‚i@ƒßÐ  ÃäÞ½“èH'~ète œ2è‚‹b7œUùðúܱ¡è‚v9U¸ Ü|!ïÝ«’ç·ßDç6½×³Ÿa½ ™Êÿž%öÓŽþò„a&{ôúà[¶²š¯ôÌ'›9ïÃîoÒÖqñÜ×"à k…ó¶ˆU?rØ\«™ÚBäñt8_øÉ>wÒÆÌ¬ïbÂ)ŸzÅ,YÕ¾EÉ„“궈[Ó5»áÐaœù€ø›MV™ ²ëŽL«ˆ¿:'*´Ïsß-î~fþN¤¨y2¹µc'‚†KôZߎôaÞüÕá·RëcWã´j¬¬<%OtÒÜ —6P<}„ Ê¢ÛjÄOµÊø‘RÉ4ù9ÆÙKz§à|1RQ Äóôjïïò’À·óÕa;I¢„¹ýM¨MŹó“´]´2—T]ðaku¸¾“W㣭ñòùpø è‡ÇÖÅA6—öŠKbïL?¬ ôµ‹šç×öÞ´{ùøqïÈ6M¶óFÚ9m)\z‹qæ–ľUö;ÕÞÃÖxr‰%mÛ$]ýQj&H’È›ßRo¼‹®ÌÕÓêýùªÒâbŽéëå’ç*"LU‡Ïl~O¼T^ÙsL¹8Ƶƒžï/Àʰ&4Bð‚ûn÷îóÇ*¯G~u}Æ>û^wÚ®ïÈH`sRi‘©Ÿ"(лâ¶÷3hÝ%áPã©‘‹{œMîæV/:œðK†µÏ:®´Ç_¯#ÓÄÜ>­3Æü­sùæ’?ò-£]ÖÎe©'ò™pÆÜâ/9IÙ²ž-¬ˆ6šà²}É~Œ›äÙØ¾‘׌¬J#¢ÚîÏŠ‹;e>pѾu•Áé©QÛ7Üú’jM†k¶›E‡‰IÇÂݦ0†9™mk´lÆrD×wmWÈg´ö•w¸å©Y­úÈ¡éÑÉ™ïR{"ŸU†=„<±³bï)K÷iŽò@²–[~˦§4qVŇîú3u=v},b]^·ò—‰¯Èƒ¥jÆ…®è8 c"ÿŠÎ(Ú5˜&ôµ8Û¹,zõƒ¬Ò¯R ŸÑPvý>CµáŽ„¼š¥Üè?_.G–€Ä<4~\=úväÍñOÁ(ù{åe‘¦àrºŽfq ’ܰ»äîz5ñn)݉”Æ^ â`9ª(yMÿÑ99‡Š˜µ-šz5æ®ÙÍëqt*ò“ñH6â¾ñå7„$Ê(ìE»‹Ñ3m¬xиÆûÇÛ†.vAŒL?FŒdè%=aAv©Ÿóã[½ê9n«Àýýú÷¼ÔO:‹ÜaS„ªÐänbŒÉ²Év› â—µØ9 zÀ¾“ÊTÛS›aõè^HåA$üñO³Z%µ‘Ú~/w?¯I³l÷Ó:#gr§uP}CÆÞ%ºsŸt|$‚›YgµÆìšŸÅ“’8¹·ã2â• Nׯž =ÿ²,¸H(QžÔo¸—ÜÈlÖ!5±ù½ƒì3sJ†á ÂqãæãÄ »Y ¡d3]´$õŠkûÞ·¬;uÓ×ø¼<ý'Ðàü{7§œ%ãÚ™9ú¶ æ&°ÏôFí•”KXß.ÆY&ÛÜnX+µh^!u_—Ñ©JÏ;Þìí29Ù]æA.b´~ sz¨ lýš'ÞÒ ì‹ÿ‘eÒÙèÃy\´»›ÞXiá¡Ú\¡kÞë6÷WüShα–‰Çm)‘«Å“ÛÒ’®¹[yÆŒZWú›¼¦c8Œ'¾•jVŽ]Ô©4uzƒÈÊ’üjeAÖËh´êRÁ|ç“_…€{7ß͹qÍ}\G*,ZïßÌ'ÞÜXõ…Ï…w÷g¡åä•5y¼[ìÓ wôQÔºÖ¦Ï>Íò<‡šß¤ {Æ+œ‚sµ+&ëUû3"ùžIF=ñ- X1"KC=!çÚ¢¶|Å™ëµóó¾÷N'¼lîߨž]&%U‰ÍíB1ßj©³ææ*·¶ð»Ý—mÒŸ|ß>n<„X‰ñ¤´¼Ê8ôF÷©nï_±VbQÏø©„œ/JD.½½#*Ír²œàÞ[ÅÖn±cc¡~ÇÒ/†Ÿî}¿w ¿ÃáÛùì§š.’IæÀU³X£LבÞÛöd‚çî1ÎÍrý =+ÉŠÍJq4- ïìí³¹9MD˲•3*ŒÊÄ•]T/ÏèäHvÃñ€œâÅÔ7@ç,¤ƒˆÙ™‰‹–ãÌûÈP£Æìz3åãÖÓCZFäÕ®¼-/†ì?¿zêÚDFõù£—ýü„÷[äW«‡‘'Ÿ71R`jüÛ­¤R+òþWCPý=Ta‰n2øŽóæî!¯ÿóìø½6%ž:SUÞ:q„k¿»k¯Ìº4]¦‰óÆ‹ù`ã¨ã`CA°²[«dñ­™îö1Ÿ¶¼£Z‘Ù ŸeËŠ{?;™9O>;/”ð­(0“}pÑE®¦‰K Øñx”!jª çÉ!ªÎ|@pÁe÷"|ÏAJ.Šïƒ8|n ‘“§5À¥Ù•¿q[nÔÃ8µgñçuv.kÙ”·êwì%–y#Ä <½} ÿBR¼Ü;£`†÷ö¼p•|¦jÌ¥ p?[ÉÜÓ†³= ÏKC£Vn‰ð:ç5¯Ið.-ŒV±,F2=œT¹¶Q]0yƒrÎXÌ,Ó^†G™nˆ%¶Ü¦(¨¸6GXüÞïŸÏÆbXΑ i€>$µœ ëJ¶{{^î¼ßórÏŠîeÂ5Mb—{„fÿÉÓIÌÎ~¹¿Ýèb&RL'†[.äë8`‰R='Ÿ.¬÷4+«8;¢eúÇd¯(ßLoN³v3È’…;š›Ò”RSq,¶ R*h4JbÛ®t<<×6v•[ãD;ïѤbÅp¨û¹äS-áäÅPVöeÁËSJKÐâŠ~Dáûji1«ŒÒ:_r_®Õù7r£[-]6еéò ú†õÈ+¢&Ï™qÛÇÛfÓ¸]t±-?•¿÷ ¬ö‘ ¥"Œ.M›Ö3­kÃ:Bc_Ыö¢dy£“ïYØ›,[63uQ`Öçì sçŒSƒ~Nøci¤ïUL©(~³²ÞýÑÑaïJÖ¶÷rÍlêZ^ó¥MmÈ&—5.³aù$½eZ8W8^¬j9$¾f_Ze{·œ²I¡XGè³Ú™,ü¢«uÅÙe›겪^Õµ`HšMlâ³ dð#~üYÏ£KË [.m|Ɇ<¾À’`Sn÷qº4 ó9V°¨Ì£>ñ˜«ÑêŠ=ªrâ‬¦Èëˆï/ÖÜJ]èt:QuKÆ´ã½q.4ˑġŸ-——R™SÚS•·ë>rŒ £Èƒy_øB½ÒØì3™÷Ÿjírê‹®Ù{î0°…:­Çš† q>aWWdý&Ï”娞üGæ²G.®ð¬Kë•4fð$2aUs´óËz¸ªÌ÷™H{xŸÖjõ/n= Ý#Æš:õ_ž¡;õ'ÇÍÔÂJƒ·¦iyè/âÊ.]~\P{ù!ʾ§!|£=¥±d°0,ÄøÙ:Ô º:¬ÂHíažO3Í|½“è`zÃÀ‰ðÌ~æ9áPÃw²<7wï ”Í§>™‡î=ð9+õ¶••ïüìèÁ6Òö×V¤p!véàcEƒuà1á¨Á×ü‚£Ÿ|5UÝ5õoÏ2/™—VM©œÕkÐŽ4âf¨lš};Ý;oX‹€.*\MÓ°èk†‘Ø2µ³§„,)’ù¥¨o”‡æXχR²ÕŠÔ•Ûe㹪úEN<àŸÐ訪ÓV8¤ä ñÄí£á'/-q@Ù+`bÝ8{-SEG°µ…¬…Ó¸M^¯áˆn·=n© ^£Ï"Žž d÷~’ØKŠ¿¤{N¡üM¾âÞRã}’{àåÝŠüZA—êÁh ’›µ-úÑdšüÀ¾‡g·šî¹<5±SŒáWÎêמàÓ4LÖÞ?Ó™íè}‚ØšpvÔq‡áŠRWϰæ=gò(Ã´Š§ŒC¯>Å ðCÒ¿¸üà}j3XP.w|_ÑÙôUD‰³l¥o i7ä£s#^Û¼›ð®Ì¥&?#OH° êÅîÇD z§¿íUÇ„µUÒ,ËÀ¤òwyG¾ßêágXêizGjhiçѯ2Ož 듟wˆU™h-p¯«6 ù.3Eêo¦å…®§TïH —V8àŒ[Zí•R’ýžÞqgxÇ¡xßÉ ô½ÊoÛyïöÝâÎfNº·.æ.²ÑàU {•Øé^÷‚ãŽQxÔä…k“Ú% ¾ÛõhL•~ Ÿ·°c HvÇj™v",¬Nþxþ_àÿ„ƒ‚ã 88Þô²À 1endstream endobj 357 0 obj << /Type /Font /Subtype /Type1 /Encoding 1000 0 R /FirstChar 46 /LastChar 120 /Widths 1022 0 R /BaseFont /VYUURO+CMR17 /FontDescriptor 355 0 R >> endobj 355 0 obj << /Ascent 694 /CapHeight 683 /Descent -195 /FontName /VYUURO+CMR17 /ItalicAngle 0 /StemV 53 /XHeight 431 /FontBBox [-33 -250 945 749] /Flags 4 /CharSet (/period/zero/six/A/C/G/P/a/c/e/h/i/l/n/o/r/s/t/u/v/x) /FontFile 356 0 R >> endobj 1022 0 obj [250 0 459 0 0 0 0 0 459 0 0 0 0 0 0 0 0 0 0 693 0 668 0 0 0 726 0 0 0 0 0 0 0 0 628 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 459 0 406 0 406 0 0 511 250 0 0 250 0 511 459 0 0 354 359 354 511 485 0 485 ] endobj 353 0 obj << /Length1 972 /Length2 3755 /Length3 532 /Length 4424 /Filter /FlateDecode >> stream xÚí“i<”}ÛÇeͲ„È)Ù 3ƒ± Ù÷5dmÌœÍÂ2ÖBÂUÙw‘²d‹’’µdÙ·l!•}íQ×}ÝWÏu¿|žWÏç9ÿoÎïqÿßñûÇy šYJj ð. G”„IÁ”Mc+}˜4“‚2 k@Çi!ˆ ST„>nL†)Aå”à2 €&Þ“D@»¹1MñŸEò€$ ‘`Œ ºƒØ# $Xâ‘hH’40Àâç oÀô ¾ JŠPh$pÝÐ8ÈOGú8W< ÿgåãùWÊ$x™ÄŽLŠGQx† @Wˆ þ¨xääÃÔ?Åu|0ö§ü¯)ýGEcHÿªÀc=}ˆ 0Æ£@6àŸæŒAÚûϬ>A#5pn„ÉJAeÿŒ£½uÐ~ Ê MDº®Œ7ø+âPÿtr4½_> :Ö†Ö&þµÖ_I3G´"y‚ôïê_ û›†D@ûöP)(vTxtþzsüG3mBãÜi¸€ $è‘”4À4ú ß‘cˆO<ºM&pÅ~nU@t†~‘€˜ýM2Äòßt´DâoR ÈìhF÷ß@Ð#ìH÷õÄÿ†ÒÄó7<’"ü†GRÞ¿¡!þ†G6®ÿÒGʤ_øŸ¹t ï )#HJÃa?=ÉòphÐ/¼ŒC{ù€úZ …*H+þŠ"}Güõ'mû/vE} è"†Èx¤òMÕ·Šƒµs?<¢÷æK)¼Ùõ"¢*EYji\ùd?¡¦Û <ó-‚Í]š´bø‚r…OòTk¶XB">²µ2sˆg§ZÒ­"—œ(Û2ß6³`Ó£æ‡>yÖ\XÚ˜ð}AóÄh&ŸÃ³M]X ¾ònrˆ1%4›Äà˜ùÜ(´^˜ˆïÜ]ÖÅçâ‡òÛN9¤n°ñ4õ^eNQ¼“iLE.új¯û$qU¬¸12šü&pÃÂŒjmdö%]ÅÂEך ±ÀÉ/5v~÷D_ÂÓ).xŒD·øËö¯RòzF”O×ÉŒ_…°lq¸-#Ì(<ÏÙês/Å wÕ†xkZ#î5º³ëŸ½í«v£Rf®)œ»QVwC¨/-¤,4 Ö-«5Ҧ̙TdJ-WêA¢¨qk욤eÐc£P!ty ª…H2¸ú,*õòZW½‹ÝrZQ]hʾ³´U×ó‚`¦GÀˆBÎ<Ø'`ªÝÛ¼ W†y6›'צDYóâß SÂÇcnqÖˆŸovð2Äìq¬žøv¦Jÿ¢ÞTÖÎQ›"RÒ\?8Â.žÑ ØSÑpLºº/³ÖçiüX© ÑçžÔ3Üä£î÷Â:@Dl’|Q÷>â.7†&ªâpTšÝ«9öúøcÐqãGÆÊ±C¯ {Ñ‘Îø‚îO½M7BbC&“VzrëÝn\0Ðg=áƒP΂cÓ;ëû‡+[2<óõl*Ì å¨ní›6*Þ×]ÜH@ZM²¼º¯åñƒ‘NkcX´ëz`ÒãÊÈžøXç”О¹/©®f£çM77gœFyòj4™´Ó[£--,º¨g÷h¸bÒ!Q|ïpÈþŠƒàìKæÂsýtˆNù€q纘tNI s{Œzø"ˆ|ùFû¾‹Cr•k:ˆ¼û¡’ÛB¨¼|=S±•î>·©„2AàC6–V¹ßÚϱ¬Ð`»Õ*¼†¤å23O R;PŠ~Ù‹å4µ¼7³ÖS¾¤¯˜Û®Ú71ùÌñiQÃ1øäA²ãr„–\ÆÓì»îéb×h„òp=Òþ‹šCâÆÅq¯óuÓ}:ÿÙå,mAx¶YÓâP:]áùì˜[Ç61âV`U|EÌ»ö†r1s~k€»r»Dˆ(KÐøÃÛbçlRîøZqkìãUñ©˜1`}´%­Éâ·³Š.íÖ7¬L¤ ¾ç°ÞÙkn[ÛNhß}”Åÿr…&íiÌ$2!{ü“¯êÌÜ#œ@ÛGÌŽÅÔûs‘Â|s²òêVa¼C厌‰ç_¬ r§GE¸¶hÛ¦]æÅ, ?‹.€Œåä¾ÔÅÊú”w5˜Ê(;ѽYêòÝs#ïóî8N8¹Œ¤inf¸ãèO½ííçï¼ ^¹,©›VO+ÔÑ‹Ôp2˜´à±¶Í?ï^bO¾Ã°´ðqxÖ“§Ä}²(£lÆ=µ#ý M̼W¥øG¶]@€«Ö#Æ Ô™ÖÏjnûnJrfÈ0 Ýâ3Ax3¹9V<º½2JVë|ÁkVÝßûB^AÎjfkÁ7ãŒp¡ûõWx¶™2eg)´3m•ì…­^ƒQÕ"²)6ËÛ V².WÁ·3ùÀM»1k}Ÿ¡lñ}¡Ê‹{ÝŸ?ξźH¬Vg,IlçÜw’?¼jô/ýÔüí5V:°ÖÍÍ­žAÊȃý5=&ÒyãXÞ×XkšÚ få 7ùa*om Zóä)£}g¿ÕÓº êyµ1J|Q eïüÀ¯®8¾Ô0ç´PLy;«r8몚âŸDêè½FbTܲÁê½Tï2š5Œï‰±¯ x#mÔTÈh)ýTâáÛ¨ïÝ5¡y²mÏžøg•Þ¥ú\¹©-~2x¼ñ¤Ÿk…›-·"Òì˜VU ˆð\R”ß•–µ,¡†~¬$åLTô»–cã^/ìÛԪ؇Ø©4gQGݳ/ '¾~GéxêË—Uî+ì^”÷Jxe|šË£¸ÚY*ÌÃ/öµS¿° 2å¼­«¿FêKïÕËöóR©7u™c—†qû'òeWrD”¨:Éá Q»È…Ë¡ï¬"ª@QGÖ€“åÛÒ½ÑüÂûøØ Ùín9pâ›Öºì¶OHû1nÆõhî×±æe#ê)ËœNêÕêl*˜¿×9' ¤®éÄ¢”~¿ÁVÎø~6¬¾%øø«Ÿ—‚¶õ“·uVWvGÛ] 8ÍÒúÍ:xWø>;Ö"9¤Ãµð¶½Å½ŒãoL]¯;â»\…7X͉¾IqþtâÖj¤4jöÇ¢†ÕšoÒUiÓ„Úš¾(+wh~âÌkZ#øl‰®¾Â«o8\ر›oøƒ>—{1.‚é`yéfü”?í Ÿ²ÂÒ룱³i#yç_W|þñˆãûÎ5ÜéH1¾SA¼ésóÞO=o‡öË™¯ETÍßS–D²6|Ä!÷OÊgÝRhj?_ø¨³F<ü’%÷å©þÙ÷eí¼òá´Z—¼= ³«ã­×ìVî^…-õBu·¢ê-®,>Þ>æêøD2)3§*™3¤±,C€zprï"¡Z»ªu’+%Ÿ&úJh^ÆSÆápšß7NëÈN]JãÁÒpÓiÌ„t,¸–Ríœ 6¨bÈvY²³²ÇžñÈY91Ú ^»€$Ødž´ôÓoÉùV0Ù¯¡9mÔÎÙb»öܧuf®et5µ~£‰,A›øjÈ,vE†<Ïœa˜j„3‹£®q·DG×eí8Xt¼4Æw—Y¼eä«õäŽør{…ïòw7á¡ùÎŒÞI#oäÙÕTá3Ÿ_Ó6Îrô.Kú·ÃŸ,ǯݖ‘³Np«‚­2+ÙòØ´ÞÆÔoWóJzýüt´J¤´½…by~™’ž¾g‚ û¢ÖúŸpDà[©ÞòfŒ‡ÂcJ*£ÔîãÝÜÏWïê uz.¯F±.1V˜Ê[QÜjjà ÔÏEJb„è¤8¢Ÿ£W,4úüÈóëRF ¬q{ OÝ ·¤Bü!%1S&iÊwéYÕd]½J3DG ‡Tp4¥ÉÝ]‰62Ñ>b^゙•Ün:QóàÚô¼Ét =¯ We°áÎÛšÿjŸSLœÇÚ8z„ä cU­áÅžãÕµh¿]µaÊz' <£™[z9´€¸X²]»@yó8£Ž8{|Òl†XhÙ]­ÈU{9`3WšŠ§·mâ§Ëûpe­üx'Ï2ôî´CÕÄõs’dtõCyô,áa~±ùUæzêñìά9[c³>79„m,?c¼b-™8Kq-*k½õ:S¾[S–øŽ‡íÞ­¥XÊÃÂm®Üî|Úo0˶®pØæX­ Ï/(Æ›­Ï/1ú²V ²¢ý/~ˆ˜ÅºšÖ2&úOéªÝ¾múåT5­#°~öüåλög“%HÙÆ5ãJñ×ÚoÖ3U@ 7+ùŸô~˜ƒl¤¬³ÓµW&ßpü>!ÆÇþ¹yTb1ÏÖ&ê ‹Õ@¬kVÑ”nU•àäHyPÂÌn¹¥ÄÔ)Dø›B’„ó 8Çi˜µh¨ÜB)ÓÚ®ÙÂýR­p8›¹Je‘LÁÍÁòx9š–»>ðEÄIVR¦¶ÑÝ}xtýG„Ê'~ÿõ«’QWJÚô]ŽëÛ¯VßóD÷g–æ¶L›½˜Îf°éÎé"AFyX2b[4ÆpâfUj¦C¨Î@:L¾/‡?6Y»ª}Ìd&oÊýAò´Ú'>ó¼O:ÓI$iS…ÌÊ‘»B!ÔgF¡hÐÇhZi¦¤ ¹ŠÊ  ;¹†–’®Ä«-/+GL9ý5ôÅN©·Ø`)/åSPr²mÆ4œ‚\/×ue%[` M¿£Qd.!Ä\ÝÚöG;…º²çSÙMž¤ÞWä_ б\§§ÆéIïnq†ý˜Î=®'ƒ\ßÑÆCœ¬‰zêQ|•Ë[‰ä:&§bÒÓÏ$u6Zl¶~ïÉYRLNeú}k¶tÉì7³÷c Õ@ï­ÆeJð™ÈÙ¤/ÄöIJÑã3U²uQêMc58¼Äë† CT×p˜´æŠŠ ÒÐ]™*Ÿ+ÑFœóÈF?‘a‰v¬Ëã{ݹãA[+]W!?ãáúnÁAãBepo3iD›eiWμ׮;Ö bÿ½ãÂ-F¢SëʦxÈÃÌ$v;‚AŠºOÏ_ÿŠ–>eJo+ )(´WðuXë‚LI…xÕÈ}æòS%úËO$?Žƒf;¢"ÝŪW<ÿPk¼·þÆ:0øŒçÏ·h±pWzE›Z®LO:VìÄõ-’³úmËœF^Çîµ6»-¶9ÿ&:¡¡ü‘ÏèCo|Õá#2k}ò“ ßÏù®ÑêM“åH¾Í¯ˆÜí5oSÃO9Jw†°Ýõü&K{“¦œõà aš$ÁÅ¥C0nDÒɸ¯Eüé屦 ëÚyhà°g“Ÿ&YAÚgÝW·IzWö*Sç“À Ã~~îôÀñoÌs‡Pªã‘”ªNýõÃÛ–ãªï[}<úŒwØ—ñ™!UJ£LJA‘1O7tdfîœqѧð:]îmxЃº•Ï: gc<ƒaaÿÔÑr'4¦xب¨1 ‚ç?Ÿ9pÎwŽû¯yë¾Ñq™Ó¡aí”ÈÐ1náÇëüÃSŠ5X~¬T¡Âe¡}°;%¶Û ãtÒwKB‘ =¹vk ÚFmÑ–Y ÝtÓY×ÄJ»wÙ͹§‚ÖoÍ_>Pèüz“ž7.£07Ýõ\‰¦lu¢wZGЮ`ª¹°ùº·8­gššôBt?)¹TˆS(1Ž2¬îoóïû²F#jrƒ*y»k~ˆaHø4•å´Ô˜[aøçrÄ©¤»¸ènö=¡Ð­Èé$~ÑDèÿðaøÿH ˆ ñXáÃ\éÇendstream endobj 354 0 obj << /Type /Font /Subtype /Type1 /Encoding 1005 0 R /FirstChar 71 /LastChar 121 /Widths 1023 0 R /BaseFont /FVKVNA+CMTI12 /FontDescriptor 352 0 R >> endobj 352 0 obj << /Ascent 694 /CapHeight 683 /Descent -194 /FontName /FVKVNA+CMTI12 /ItalicAngle -14 /StemV 63 /XHeight 431 /FontBBox [-36 -251 1103 750] /Flags 4 /CharSet (/G/P/S/a/c/h/i/n/o/p/r/s/t/w/y) /FontFile 353 0 R >> endobj 1023 0 obj [757 0 0 0 0 0 0 0 0 663 0 0 550 0 0 0 0 0 0 0 0 0 0 0 0 0 500 0 450 0 0 0 0 500 300 0 0 0 0 550 500 500 0 413 400 325 0 0 650 0 475 ] endobj 358 0 obj << /Type /Pages /Count 6 /Parent 1024 0 R /Kids [346 0 R 367 0 R 374 0 R 420 0 R 461 0 R 482 0 R] >> endobj 503 0 obj << /Type /Pages /Count 6 /Parent 1024 0 R /Kids [486 0 R 506 0 R 549 0 R 552 0 R 556 0 R 564 0 R] >> endobj 585 0 obj << /Type /Pages /Count 6 /Parent 1024 0 R /Kids [574 0 R 587 0 R 591 0 R 599 0 R 604 0 R 625 0 R] >> endobj 643 0 obj << /Type /Pages /Count 6 /Parent 1024 0 R /Kids [640 0 R 649 0 R 660 0 R 668 0 R 680 0 R 709 0 R] >> endobj 718 0 obj << /Type /Pages /Count 6 /Parent 1024 0 R /Kids [715 0 R 727 0 R 732 0 R 736 0 R 749 0 R 753 0 R] >> endobj 761 0 obj << /Type /Pages /Count 6 /Parent 1024 0 R /Kids [757 0 R 763 0 R 778 0 R 783 0 R 793 0 R 798 0 R] >> endobj 805 0 obj << /Type /Pages /Count 6 /Parent 1025 0 R /Kids [802 0 R 807 0 R 811 0 R 815 0 R 819 0 R 824 0 R] >> endobj 837 0 obj << /Type /Pages /Count 6 /Parent 1025 0 R /Kids [833 0 R 842 0 R 847 0 R 859 0 R 873 0 R 892 0 R] >> endobj 916 0 obj << /Type /Pages /Count 6 /Parent 1025 0 R /Kids [911 0 R 924 0 R 933 0 R 944 0 R 963 0 R 977 0 R] >> endobj 999 0 obj << /Type /Pages /Count 1 /Parent 1025 0 R /Kids [993 0 R] >> endobj 1024 0 obj << /Type /Pages /Count 36 /Parent 1026 0 R /Kids [358 0 R 503 0 R 585 0 R 643 0 R 718 0 R 761 0 R] >> endobj 1025 0 obj << /Type /Pages /Count 19 /Parent 1026 0 R /Kids [805 0 R 837 0 R 916 0 R 999 0 R] >> endobj 1026 0 obj << /Type /Pages /Count 55 /Kids [1024 0 R 1025 0 R] >> endobj 1027 0 obj << /Type /Outlines /First 7 0 R /Last 343 0 R /Count 10 >> endobj 343 0 obj << /Title 344 0 R /A 341 0 R /Parent 1027 0 R /Prev 295 0 R >> endobj 339 0 obj << /Title 340 0 R /A 337 0 R /Parent 303 0 R /Prev 335 0 R >> endobj 335 0 obj << /Title 336 0 R /A 333 0 R /Parent 303 0 R /Prev 331 0 R /Next 339 0 R >> endobj 331 0 obj << /Title 332 0 R /A 329 0 R /Parent 303 0 R /Prev 327 0 R /Next 335 0 R >> endobj 327 0 obj << /Title 328 0 R /A 325 0 R /Parent 303 0 R /Prev 323 0 R /Next 331 0 R >> endobj 323 0 obj << /Title 324 0 R /A 321 0 R /Parent 303 0 R /Prev 319 0 R /Next 327 0 R >> endobj 319 0 obj << /Title 320 0 R /A 317 0 R /Parent 303 0 R /Prev 315 0 R /Next 323 0 R >> endobj 315 0 obj << /Title 316 0 R /A 313 0 R /Parent 303 0 R /Prev 311 0 R /Next 319 0 R >> endobj 311 0 obj << /Title 312 0 R /A 309 0 R /Parent 303 0 R /Prev 307 0 R /Next 315 0 R >> endobj 307 0 obj << /Title 308 0 R /A 305 0 R /Parent 303 0 R /Next 311 0 R >> endobj 303 0 obj << /Title 304 0 R /A 301 0 R /Parent 295 0 R /Prev 299 0 R /First 307 0 R /Last 339 0 R /Count -9 >> endobj 299 0 obj << /Title 300 0 R /A 297 0 R /Parent 295 0 R /Next 303 0 R >> endobj 295 0 obj << /Title 296 0 R /A 293 0 R /Parent 1027 0 R /Prev 227 0 R /Next 343 0 R /First 299 0 R /Last 303 0 R /Count -2 >> endobj 291 0 obj << /Title 292 0 R /A 289 0 R /Parent 251 0 R /Prev 287 0 R >> endobj 287 0 obj << /Title 288 0 R /A 285 0 R /Parent 251 0 R /Prev 283 0 R /Next 291 0 R >> endobj 283 0 obj << /Title 284 0 R /A 281 0 R /Parent 251 0 R /Prev 279 0 R /Next 287 0 R >> endobj 279 0 obj << /Title 280 0 R /A 277 0 R /Parent 251 0 R /Prev 275 0 R /Next 283 0 R >> endobj 275 0 obj << /Title 276 0 R /A 273 0 R /Parent 251 0 R /Prev 271 0 R /Next 279 0 R >> endobj 271 0 obj << /Title 272 0 R /A 269 0 R /Parent 251 0 R /Prev 267 0 R /Next 275 0 R >> endobj 267 0 obj << /Title 268 0 R /A 265 0 R /Parent 251 0 R /Prev 263 0 R /Next 271 0 R >> endobj 263 0 obj << /Title 264 0 R /A 261 0 R /Parent 251 0 R /Prev 259 0 R /Next 267 0 R >> endobj 259 0 obj << /Title 260 0 R /A 257 0 R /Parent 251 0 R /Prev 255 0 R /Next 263 0 R >> endobj 255 0 obj << /Title 256 0 R /A 253 0 R /Parent 251 0 R /Next 259 0 R >> endobj 251 0 obj << /Title 252 0 R /A 249 0 R /Parent 227 0 R /Prev 231 0 R /First 255 0 R /Last 291 0 R /Count -10 >> endobj 247 0 obj << /Title 248 0 R /A 245 0 R /Parent 231 0 R /Prev 243 0 R >> endobj 243 0 obj << /Title 244 0 R /A 241 0 R /Parent 231 0 R /Prev 239 0 R /Next 247 0 R >> endobj 239 0 obj << /Title 240 0 R /A 237 0 R /Parent 231 0 R /Prev 235 0 R /Next 243 0 R >> endobj 235 0 obj << /Title 236 0 R /A 233 0 R /Parent 231 0 R /Next 239 0 R >> endobj 231 0 obj << /Title 232 0 R /A 229 0 R /Parent 227 0 R /Next 251 0 R /First 235 0 R /Last 247 0 R /Count -4 >> endobj 227 0 obj << /Title 228 0 R /A 225 0 R /Parent 1027 0 R /Prev 223 0 R /Next 295 0 R /First 231 0 R /Last 251 0 R /Count -2 >> endobj 223 0 obj << /Title 224 0 R /A 221 0 R /Parent 1027 0 R /Prev 179 0 R /Next 227 0 R >> endobj 219 0 obj << /Title 220 0 R /A 217 0 R /Parent 211 0 R /Prev 215 0 R >> endobj 215 0 obj << /Title 216 0 R /A 213 0 R /Parent 211 0 R /Next 219 0 R >> endobj 211 0 obj << /Title 212 0 R /A 209 0 R /Parent 179 0 R /Prev 195 0 R /First 215 0 R /Last 219 0 R /Count -2 >> endobj 207 0 obj << /Title 208 0 R /A 205 0 R /Parent 195 0 R /Prev 203 0 R >> endobj 203 0 obj << /Title 204 0 R /A 201 0 R /Parent 195 0 R /Prev 199 0 R /Next 207 0 R >> endobj 199 0 obj << /Title 200 0 R /A 197 0 R /Parent 195 0 R /Next 203 0 R >> endobj 195 0 obj << /Title 196 0 R /A 193 0 R /Parent 179 0 R /Prev 183 0 R /Next 211 0 R /First 199 0 R /Last 207 0 R /Count -3 >> endobj 191 0 obj << /Title 192 0 R /A 189 0 R /Parent 183 0 R /Prev 187 0 R >> endobj 187 0 obj << /Title 188 0 R /A 185 0 R /Parent 183 0 R /Next 191 0 R >> endobj 183 0 obj << /Title 184 0 R /A 181 0 R /Parent 179 0 R /Next 195 0 R /First 187 0 R /Last 191 0 R /Count -2 >> endobj 179 0 obj << /Title 180 0 R /A 177 0 R /Parent 1027 0 R /Prev 155 0 R /Next 223 0 R /First 183 0 R /Last 211 0 R /Count -3 >> endobj 175 0 obj << /Title 176 0 R /A 173 0 R /Parent 155 0 R /Prev 171 0 R >> endobj 171 0 obj << /Title 172 0 R /A 169 0 R /Parent 155 0 R /Prev 159 0 R /Next 175 0 R >> endobj 167 0 obj << /Title 168 0 R /A 165 0 R /Parent 159 0 R /Prev 163 0 R >> endobj 163 0 obj << /Title 164 0 R /A 161 0 R /Parent 159 0 R /Next 167 0 R >> endobj 159 0 obj << /Title 160 0 R /A 157 0 R /Parent 155 0 R /Next 171 0 R /First 163 0 R /Last 167 0 R /Count -2 >> endobj 155 0 obj << /Title 156 0 R /A 153 0 R /Parent 1027 0 R /Prev 147 0 R /Next 179 0 R /First 159 0 R /Last 175 0 R /Count -3 >> endobj 151 0 obj << /Title 152 0 R /A 149 0 R /Parent 147 0 R >> endobj 147 0 obj << /Title 148 0 R /A 145 0 R /Parent 1027 0 R /Prev 59 0 R /Next 155 0 R /First 151 0 R /Last 151 0 R /Count -1 >> endobj 143 0 obj << /Title 144 0 R /A 141 0 R /Parent 131 0 R /Prev 139 0 R >> endobj 139 0 obj << /Title 140 0 R /A 137 0 R /Parent 131 0 R /Prev 135 0 R /Next 143 0 R >> endobj 135 0 obj << /Title 136 0 R /A 133 0 R /Parent 131 0 R /Next 139 0 R >> endobj 131 0 obj << /Title 132 0 R /A 129 0 R /Parent 59 0 R /Prev 127 0 R /First 135 0 R /Last 143 0 R /Count -3 >> endobj 127 0 obj << /Title 128 0 R /A 125 0 R /Parent 59 0 R /Prev 119 0 R /Next 131 0 R >> endobj 123 0 obj << /Title 124 0 R /A 121 0 R /Parent 119 0 R >> endobj 119 0 obj << /Title 120 0 R /A 117 0 R /Parent 59 0 R /Prev 107 0 R /Next 127 0 R /First 123 0 R /Last 123 0 R /Count -1 >> endobj 115 0 obj << /Title 116 0 R /A 113 0 R /Parent 107 0 R /Prev 111 0 R >> endobj 111 0 obj << /Title 112 0 R /A 109 0 R /Parent 107 0 R /Next 115 0 R >> endobj 107 0 obj << /Title 108 0 R /A 105 0 R /Parent 59 0 R /Prev 79 0 R /Next 119 0 R /First 111 0 R /Last 115 0 R /Count -2 >> endobj 103 0 obj << /Title 104 0 R /A 101 0 R /Parent 79 0 R /Prev 99 0 R >> endobj 99 0 obj << /Title 100 0 R /A 97 0 R /Parent 79 0 R /Prev 95 0 R /Next 103 0 R >> endobj 95 0 obj << /Title 96 0 R /A 93 0 R /Parent 79 0 R /Prev 91 0 R /Next 99 0 R >> endobj 91 0 obj << /Title 92 0 R /A 89 0 R /Parent 79 0 R /Prev 87 0 R /Next 95 0 R >> endobj 87 0 obj << /Title 88 0 R /A 85 0 R /Parent 79 0 R /Prev 83 0 R /Next 91 0 R >> endobj 83 0 obj << /Title 84 0 R /A 81 0 R /Parent 79 0 R /Next 87 0 R >> endobj 79 0 obj << /Title 80 0 R /A 77 0 R /Parent 59 0 R /Prev 63 0 R /Next 107 0 R /First 83 0 R /Last 103 0 R /Count -6 >> endobj 75 0 obj << /Title 76 0 R /A 73 0 R /Parent 63 0 R /Prev 71 0 R >> endobj 71 0 obj << /Title 72 0 R /A 69 0 R /Parent 63 0 R /Prev 67 0 R /Next 75 0 R >> endobj 67 0 obj << /Title 68 0 R /A 65 0 R /Parent 63 0 R /Next 71 0 R >> endobj 63 0 obj << /Title 64 0 R /A 61 0 R /Parent 59 0 R /Next 79 0 R /First 67 0 R /Last 75 0 R /Count -3 >> endobj 59 0 obj << /Title 60 0 R /A 57 0 R /Parent 1027 0 R /Prev 23 0 R /Next 147 0 R /First 63 0 R /Last 131 0 R /Count -6 >> endobj 55 0 obj << /Title 56 0 R /A 53 0 R /Parent 23 0 R /Prev 47 0 R >> endobj 51 0 obj << /Title 52 0 R /A 49 0 R /Parent 47 0 R >> endobj 47 0 obj << /Title 48 0 R /A 45 0 R /Parent 23 0 R /Prev 27 0 R /Next 55 0 R /First 51 0 R /Last 51 0 R /Count -1 >> endobj 43 0 obj << /Title 44 0 R /A 41 0 R /Parent 27 0 R /Prev 39 0 R >> endobj 39 0 obj << /Title 40 0 R /A 37 0 R /Parent 27 0 R /Prev 35 0 R /Next 43 0 R >> endobj 35 0 obj << /Title 36 0 R /A 33 0 R /Parent 27 0 R /Prev 31 0 R /Next 39 0 R >> endobj 31 0 obj << /Title 32 0 R /A 29 0 R /Parent 27 0 R /Next 35 0 R >> endobj 27 0 obj << /Title 28 0 R /A 25 0 R /Parent 23 0 R /Next 47 0 R /First 31 0 R /Last 43 0 R /Count -4 >> endobj 23 0 obj << /Title 24 0 R /A 21 0 R /Parent 1027 0 R /Prev 7 0 R /Next 59 0 R /First 27 0 R /Last 55 0 R /Count -3 >> endobj 19 0 obj << /Title 20 0 R /A 17 0 R /Parent 7 0 R /Prev 15 0 R >> endobj 15 0 obj << /Title 16 0 R /A 13 0 R /Parent 7 0 R /Prev 11 0 R /Next 19 0 R >> endobj 11 0 obj << /Title 12 0 R /A 9 0 R /Parent 7 0 R /Next 15 0 R >> endobj 7 0 obj << /Title 8 0 R /A 5 0 R /Parent 1027 0 R /Next 23 0 R /First 11 0 R /Last 19 0 R /Count -3 >> endobj 1028 0 obj << /Names [(Doc-Start) 351 0 R (Hfootnote.1) 770 0 R (Item.1) 577 0 R (Item.2) 578 0 R (Item.3) 579 0 R (Item.4) 580 0 R (Item.5) 581 0 R (Item.6) 582 0 R (Item.7) 583 0 R (Item.8) 584 0 R (appendix*.2) 996 0 R (appendix.A) 154 0 R (appendix.B) 178 0 R (appendix.C) 222 0 R (appendix.D) 226 0 R (appendix.E) 294 0 R (chapter*.1) 379 0 R (chapter.1) 6 0 R (chapter.2) 22 0 R (chapter.3) 58 0 R (chapter.4) 146 0 R (cite.acroread) 790 0 R (cite.pspresent) 791 0 R (figure.3.1) 713 0 R (figure.4.1) 596 0 R (figure.D.1) 827 0 R (figure.D.10) 896 0 R (figure.D.11) 897 0 R (figure.D.12) 914 0 R (figure.D.13) 915 0 R (figure.D.14) 927 0 R (figure.D.2) 836 0 R (figure.D.3) 850 0 R (figure.D.4) 855 0 R (figure.D.5) 862 0 R (figure.D.6) 876 0 R (figure.D.7) 877 0 R (figure.D.8) 878 0 R (figure.D.9) 895 0 R (figure.E.1) 936 0 R (figure.E.2) 947 0 R (figure.E.3) 948 0 R (figure.E.4) 949 0 R (figure.E.5) 966 0 R (figure.E.6) 967 0 R (figure.E.7) 980 0 R (figure.E.8) 981 0 R (figure.E.9) 982 0 R (page.1) 350 0 R (page.10) 601 0 R (page.11) 606 0 R (page.12) 627 0 R (page.13) 642 0 R (page.14) 651 0 R (page.15) 662 0 R (page.16) 670 0 R (page.17) 682 0 R (page.18) 711 0 R (page.19) 717 0 R (page.2) 369 0 R (page.20) 729 0 R (page.21) 734 0 R (page.22) 738 0 R (page.23) 751 0 R (page.24) 755 0 R (page.25) 759 0 R (page.26) 765 0 R (page.27) 780 0 R (page.28) 785 0 R (page.29) 795 0 R (page.3) 463 0 R (page.30) 800 0 R (page.31) 804 0 R (page.32) 809 0 R (page.33) 813 0 R (page.34) 817 0 R (page.35) 821 0 R (page.36) 826 0 R (page.37) 835 0 R (page.38) 844 0 R (page.39) 849 0 R (page.4) 484 0 R (page.40) 861 0 R (page.41) 875 0 R (page.42) 894 0 R (page.43) 913 0 R (page.44) 926 0 R (page.45) 935 0 R (page.46) 946 0 R (page.47) 965 0 R (page.48) 979 0 R (page.49) 995 0 R (page.5) 558 0 R (page.6) 566 0 R (page.7) 576 0 R (page.8) 589 0 R (page.9) 593 0 R (section*.3) 342 0 R (section.1.1) 10 0 R (section.1.2) 14 0 R (section.1.3) 18 0 R (section.2.1) 26 0 R (section.2.2) 46 0 R (section.2.3) 54 0 R (section.3.1) 62 0 R (section.3.2) 78 0 R (section.3.3) 106 0 R (section.3.4) 118 0 R (section.3.5) 126 0 R (section.3.6) 130 0 R (section.4.1) 150 0 R (section.A.1) 158 0 R (section.A.2) 170 0 R (section.A.3) 174 0 R (section.B.1) 182 0 R (section.B.2) 194 0 R (section.B.3) 210 0 R (section.D.1) 230 0 R (section.D.2) 250 0 R (section.E.1) 298 0 R (section.E.2) 302 0 R (subsection.2.1.1) 30 0 R (subsection.2.1.2) 34 0 R (subsection.2.1.3) 38 0 R (subsection.2.1.4) 42 0 R (subsection.2.2.1) 50 0 R (subsection.3.1.1) 66 0 R (subsection.3.1.2) 70 0 R (subsection.3.1.3) 74 0 R (subsection.3.2.1) 82 0 R (subsection.3.2.2) 86 0 R (subsection.3.2.3) 90 0 R (subsection.3.2.4) 94 0 R (subsection.3.2.5) 98 0 R (subsection.3.2.6) 102 0 R (subsection.3.3.1) 110 0 R (subsection.3.3.2) 114 0 R (subsection.3.4.1) 122 0 R (subsection.3.6.1) 134 0 R (subsection.3.6.2) 138 0 R (subsection.3.6.3) 142 0 R (subsection.A.1.1) 162 0 R (subsection.A.1.2) 166 0 R (subsection.B.1.1) 186 0 R (subsection.B.1.2) 190 0 R (subsection.B.2.1) 198 0 R (subsection.B.2.2) 202 0 R (subsection.B.2.3) 206 0 R (subsection.B.3.1) 214 0 R (subsection.B.3.2) 218 0 R (subsection.D.1.1) 234 0 R (subsection.D.1.2) 238 0 R (subsection.D.1.3) 242 0 R (subsection.D.1.4) 246 0 R (subsection.D.2.1) 254 0 R (subsection.D.2.10) 290 0 R (subsection.D.2.2) 258 0 R (subsection.D.2.3) 262 0 R (subsection.D.2.4) 266 0 R (subsection.D.2.5) 270 0 R (subsection.D.2.6) 274 0 R (subsection.D.2.7) 278 0 R (subsection.D.2.8) 282 0 R (subsection.D.2.9) 286 0 R (subsection.E.2.1) 306 0 R (subsection.E.2.2) 310 0 R (subsection.E.2.3) 314 0 R (subsection.E.2.4) 318 0 R (subsection.E.2.5) 322 0 R (subsection.E.2.6) 326 0 R (subsection.E.2.7) 330 0 R (subsection.E.2.8) 334 0 R (subsection.E.2.9) 338 0 R] /Limits [(Doc-Start) (subsection.E.2.9)] >> endobj 1029 0 obj << /Kids [1028 0 R] >> endobj 1030 0 obj << /Dests 1029 0 R >> endobj 1031 0 obj << /Type /Catalog /Pages 1026 0 R /Outlines 1027 0 R /Names 1030 0 R /PageMode /UseOutlines /URI<> /ViewerPreferences<<>> /OpenAction 345 0 R /PTEX.Fullbanner (This is pdfTeX, Version 3.14159-1.10b) >> endobj 1032 0 obj << /Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.10b)/Keywords() /CreationDate (D:20060606133700) >> endobj xref 0 1033 0000000001 65535 f 0000000002 00000 f 0000000003 00000 f 0000000004 00000 f 0000000514 00000 f 0000000009 00000 n 0000036211 00000 n 0000381893 00000 n 0000000054 00000 n 0000000084 00000 n 0000036266 00000 n 0000381821 00000 n 0000000131 00000 n 0000000158 00000 n 0000036322 00000 n 0000381735 00000 n 0000000206 00000 n 0000000249 00000 n 0000046291 00000 n 0000381662 00000 n 0000000297 00000 n 0000000324 00000 n 0000054243 00000 n 0000381537 00000 n 0000000370 00000 n 0000000402 00000 n 0000054299 00000 n 0000381426 00000 n 0000000450 00000 n 0000000484 00000 n 0000054355 00000 n 0000381352 00000 n 0000000537 00000 n 0000000572 00000 n 0000058320 00000 n 0000381265 00000 n 0000000625 00000 n 0000000671 00000 n 0000058376 00000 n 0000381178 00000 n 0000000724 00000 n 0000000758 00000 n 0000063390 00000 n 0000381104 00000 n 0000000811 00000 n 0000000850 00000 n 0000063446 00000 n 0000380980 00000 n 0000000898 00000 n 0000000933 00000 n 0000063502 00000 n 0000380919 00000 n 0000000986 00000 n 0000001015 00000 n 0000064014 00000 n 0000380845 00000 n 0000001063 00000 n 0000001108 00000 n 0000067680 00000 n 0000380717 00000 n 0000001154 00000 n 0000001189 00000 n 0000067736 00000 n 0000380606 00000 n 0000001237 00000 n 0000001268 00000 n 0000067792 00000 n 0000380532 00000 n 0000001321 00000 n 0000001349 00000 n 0000067848 00000 n 0000380445 00000 n 0000001402 00000 n 0000001434 00000 n 0000070500 00000 n 0000380371 00000 n 0000001487 00000 n 0000001514 00000 n 0000082531 00000 n 0000380245 00000 n 0000001562 00000 n 0000001596 00000 n 0000082587 00000 n 0000380171 00000 n 0000001649 00000 n 0000001685 00000 n 0000082643 00000 n 0000380084 00000 n 0000001738 00000 n 0000001770 00000 n 0000082698 00000 n 0000379997 00000 n 0000001823 00000 n 0000001852 00000 n 0000093861 00000 n 0000379910 00000 n 0000001905 00000 n 0000001931 00000 n 0000093917 00000 n 0000379821 00000 n 0000001984 00000 n 0000002012 00000 n 0000105943 00000 n 0000379744 00000 n 0000002066 00000 n 0000002099 00000 n 0000106000 00000 n 0000379614 00000 n 0000002148 00000 n 0000002180 00000 n 0000113568 00000 n 0000379535 00000 n 0000002234 00000 n 0000002262 00000 n 0000113625 00000 n 0000379456 00000 n 0000002316 00000 n 0000002343 00000 n 0000122630 00000 n 0000379325 00000 n 0000002392 00000 n 0000002418 00000 n 0000122687 00000 n 0000379260 00000 n 0000002472 00000 n 0000002501 00000 n 0000126704 00000 n 0000379168 00000 n 0000002550 00000 n 0000002590 00000 n 0000126761 00000 n 0000379051 00000 n 0000002639 00000 n 0000002664 00000 n 0000126818 00000 n 0000378972 00000 n 0000002718 00000 n 0000002747 00000 n 0000126875 00000 n 0000378879 00000 n 0000002801 00000 n 0000002830 00000 n 0000126932 00000 n 0000378800 00000 n 0000002884 00000 n 0000002912 00000 n 0000139667 00000 n 0000378668 00000 n 0000002959 00000 n 0000002990 00000 n 0000139724 00000 n 0000378603 00000 n 0000003039 00000 n 0000003077 00000 n 0000147754 00000 n 0000378470 00000 n 0000003125 00000 n 0000003165 00000 n 0000147811 00000 n 0000378352 00000 n 0000003214 00000 n 0000003248 00000 n 0000147868 00000 n 0000378273 00000 n 0000003302 00000 n 0000003329 00000 n 0000147925 00000 n 0000378194 00000 n 0000003383 00000 n 0000003414 00000 n 0000147982 00000 n 0000378101 00000 n 0000003463 00000 n 0000003490 00000 n 0000149588 00000 n 0000378022 00000 n 0000003539 00000 n 0000003564 00000 n 0000152463 00000 n 0000377889 00000 n 0000003612 00000 n 0000003660 00000 n 0000152520 00000 n 0000377771 00000 n 0000003709 00000 n 0000003743 00000 n 0000152577 00000 n 0000377692 00000 n 0000003797 00000 n 0000003827 00000 n 0000152633 00000 n 0000377613 00000 n 0000003881 00000 n 0000003913 00000 n 0000152690 00000 n 0000377481 00000 n 0000003962 00000 n 0000004008 00000 n 0000152746 00000 n 0000377402 00000 n 0000004062 00000 n 0000004101 00000 n 0000157970 00000 n 0000377309 00000 n 0000004155 00000 n 0000004195 00000 n 0000167441 00000 n 0000377230 00000 n 0000004249 00000 n 0000004298 00000 n 0000171744 00000 n 0000377112 00000 n 0000004347 00000 n 0000004384 00000 n 0000176050 00000 n 0000377033 00000 n 0000004438 00000 n 0000004479 00000 n 0000180956 00000 n 0000376954 00000 n 0000004533 00000 n 0000004571 00000 n 0000182778 00000 n 0000376860 00000 n 0000004619 00000 n 0000004666 00000 n 0000185881 00000 n 0000376727 00000 n 0000004714 00000 n 0000004764 00000 n 0000185938 00000 n 0000376609 00000 n 0000004813 00000 n 0000004841 00000 n 0000185994 00000 n 0000376530 00000 n 0000004895 00000 n 0000004946 00000 n 0000189380 00000 n 0000376437 00000 n 0000005000 00000 n 0000005047 00000 n 0000192330 00000 n 0000376344 00000 n 0000005101 00000 n 0000005142 00000 n 0000198918 00000 n 0000376265 00000 n 0000005196 00000 n 0000005236 00000 n 0000202967 00000 n 0000376146 00000 n 0000005285 00000 n 0000005312 00000 n 0000203024 00000 n 0000376067 00000 n 0000005366 00000 n 0000005391 00000 n 0000203143 00000 n 0000375974 00000 n 0000005445 00000 n 0000005471 00000 n 0000207254 00000 n 0000375881 00000 n 0000005525 00000 n 0000005553 00000 n 0000207373 00000 n 0000375788 00000 n 0000005607 00000 n 0000005637 00000 n 0000207491 00000 n 0000375695 00000 n 0000005691 00000 n 0000005723 00000 n 0000211408 00000 n 0000375602 00000 n 0000005777 00000 n 0000005802 00000 n 0000211527 00000 n 0000375509 00000 n 0000005856 00000 n 0000005880 00000 n 0000211644 00000 n 0000375416 00000 n 0000005934 00000 n 0000005960 00000 n 0000215353 00000 n 0000375323 00000 n 0000006014 00000 n 0000006043 00000 n 0000215472 00000 n 0000375244 00000 n 0000006098 00000 n 0000006131 00000 n 0000219434 00000 n 0000375111 00000 n 0000006179 00000 n 0000006234 00000 n 0000219491 00000 n 0000375032 00000 n 0000006283 00000 n 0000006315 00000 n 0000219548 00000 n 0000374914 00000 n 0000006364 00000 n 0000006391 00000 n 0000219604 00000 n 0000374835 00000 n 0000006445 00000 n 0000006473 00000 n 0000219722 00000 n 0000374742 00000 n 0000006527 00000 n 0000006556 00000 n 0000223871 00000 n 0000374649 00000 n 0000006610 00000 n 0000006637 00000 n 0000223990 00000 n 0000374556 00000 n 0000006691 00000 n 0000006719 00000 n 0000224108 00000 n 0000374463 00000 n 0000006773 00000 n 0000006801 00000 n 0000227553 00000 n 0000374370 00000 n 0000006855 00000 n 0000006884 00000 n 0000227672 00000 n 0000374277 00000 n 0000006938 00000 n 0000006966 00000 n 0000227729 00000 n 0000374184 00000 n 0000007020 00000 n 0000007048 00000 n 0000231646 00000 n 0000374105 00000 n 0000007102 00000 n 0000007131 00000 n 0000233080 00000 n 0000374025 00000 n 0000007179 00000 n 0000007211 00000 n 0000007660 00000 n 0000007779 00000 n 0000012024 00000 n 0000007263 00000 n 0000011910 00000 n 0000011967 00000 n 0000372130 00000 n 0000367422 00000 n 0000371966 00000 n 0000366963 00000 n 0000361884 00000 n 0000366800 00000 n 0000372511 00000 n 0000009107 00000 n 0000009163 00000 n 0000009243 00000 n 0000010288 00000 n 0000010309 00000 n 0000010580 00000 n 0000011888 00000 n 0000012541 00000 n 0000012365 00000 n 0000012137 00000 n 0000012484 00000 n 0000361188 00000 n 0000349553 00000 n 0000361024 00000 n 0000019565 00000 n 0000014463 00000 n 0000012613 00000 n 0000348979 00000 n 0000342212 00000 n 0000348815 00000 n 0000019508 00000 n 0000014834 00000 n 0000014985 00000 n 0000341261 00000 n 0000323765 00000 n 0000341104 00000 n 0000015138 00000 n 0000015291 00000 n 0000015444 00000 n 0000015594 00000 n 0000015747 00000 n 0000015906 00000 n 0000016065 00000 n 0000016223 00000 n 0000016381 00000 n 0000016534 00000 n 0000323511 00000 n 0000321059 00000 n 0000323355 00000 n 0000016693 00000 n 0000016846 00000 n 0000320477 00000 n 0000312436 00000 n 0000320313 00000 n 0000016997 00000 n 0000017150 00000 n 0000017309 00000 n 0000017468 00000 n 0000017627 00000 n 0000017780 00000 n 0000017939 00000 n 0000018097 00000 n 0000018256 00000 n 0000018414 00000 n 0000018573 00000 n 0000018732 00000 n 0000018885 00000 n 0000019043 00000 n 0000019200 00000 n 0000019351 00000 n 0000028296 00000 n 0000021937 00000 n 0000019687 00000 n 0000022372 00000 n 0000022525 00000 n 0000022678 00000 n 0000022837 00000 n 0000022995 00000 n 0000023154 00000 n 0000023304 00000 n 0000023457 00000 n 0000023609 00000 n 0000023762 00000 n 0000023921 00000 n 0000024080 00000 n 0000024233 00000 n 0000024386 00000 n 0000024537 00000 n 0000024689 00000 n 0000024848 00000 n 0000025007 00000 n 0000025159 00000 n 0000025318 00000 n 0000025477 00000 n 0000025636 00000 n 0000025789 00000 n 0000025948 00000 n 0000026107 00000 n 0000026259 00000 n 0000026411 00000 n 0000026563 00000 n 0000026721 00000 n 0000026878 00000 n 0000027037 00000 n 0000027196 00000 n 0000027349 00000 n 0000027508 00000 n 0000027667 00000 n 0000027825 00000 n 0000027982 00000 n 0000028139 00000 n 0000032466 00000 n 0000029472 00000 n 0000028380 00000 n 0000032409 00000 n 0000029739 00000 n 0000029898 00000 n 0000030056 00000 n 0000030215 00000 n 0000030375 00000 n 0000030526 00000 n 0000030677 00000 n 0000030830 00000 n 0000030989 00000 n 0000031147 00000 n 0000031306 00000 n 0000031465 00000 n 0000031622 00000 n 0000031780 00000 n 0000031939 00000 n 0000032098 00000 n 0000032257 00000 n 0000032976 00000 n 0000032800 00000 n 0000032550 00000 n 0000032919 00000 n 0000036378 00000 n 0000036092 00000 n 0000033048 00000 n 0000312108 00000 n 0000308577 00000 n 0000311946 00000 n 0000308102 00000 n 0000300701 00000 n 0000307938 00000 n 0000299749 00000 n 0000284311 00000 n 0000299583 00000 n 0000283069 00000 n 0000281185 00000 n 0000282913 00000 n 0000280828 00000 n 0000276945 00000 n 0000280671 00000 n 0000372629 00000 n 0000039897 00000 n 0000046347 00000 n 0000039778 00000 n 0000036552 00000 n 0000276486 00000 n 0000270418 00000 n 0000276322 00000 n 0000041177 00000 n 0000041233 00000 n 0000268604 00000 n 0000000522 00000 f 0000041313 00000 n 0000046207 00000 n 0000041510 00000 n 0000041674 00000 n 0000046104 00000 n 0000041875 00000 n 0000264567 00000 n 0000000527 00000 f 0000042047 00000 n 0000045936 00000 n 0000042249 00000 n 0000261636 00000 n 0000000689 00000 f 0000043094 00000 n 0000045827 00000 n 0000043296 00000 n 0000043466 00000 n 0000045681 00000 n 0000043670 00000 n 0000043930 00000 n 0000045563 00000 n 0000044114 00000 n 0000044363 00000 n 0000045403 00000 n 0000044565 00000 n 0000045382 00000 n 0000270388 00000 n 0000323325 00000 n 0000267563 00000 n 0000263539 00000 n 0000280639 00000 n 0000282881 00000 n 0000341073 00000 n 0000049755 00000 n 0000049636 00000 n 0000046549 00000 n 0000051631 00000 n 0000051512 00000 n 0000049852 00000 n 0000056623 00000 n 0000054411 00000 n 0000054067 00000 n 0000051740 00000 n 0000054186 00000 n 0000260894 00000 n 0000246745 00000 n 0000260728 00000 n 0000057443 00000 n 0000058431 00000 n 0000056504 00000 n 0000054560 00000 n 0000058263 00000 n 0000057286 00000 n 0000057342 00000 n 0000057422 00000 n 0000058106 00000 n 0000058162 00000 n 0000058242 00000 n 0000064070 00000 n 0000063214 00000 n 0000058595 00000 n 0000063333 00000 n 0000063558 00000 n 0000063615 00000 n 0000063672 00000 n 0000063729 00000 n 0000063786 00000 n 0000063843 00000 n 0000063900 00000 n 0000063957 00000 n 0000372747 00000 n 0000064693 00000 n 0000064517 00000 n 0000064244 00000 n 0000064636 00000 n 0000067903 00000 n 0000067173 00000 n 0000064765 00000 n 0000067623 00000 n 0000067320 00000 n 0000067471 00000 n 0000145166 00000 n 0000073368 00000 n 0000070556 00000 n 0000070324 00000 n 0000068039 00000 n 0000070443 00000 n 0000077918 00000 n 0000082754 00000 n 0000073249 00000 n 0000070679 00000 n 0000082474 00000 n 0000074499 00000 n 0000074555 00000 n 0000074635 00000 n 0000075675 00000 n 0000075696 00000 n 0000075996 00000 n 0000077896 00000 n 0000079054 00000 n 0000079110 00000 n 0000079190 00000 n 0000080230 00000 n 0000080251 00000 n 0000080551 00000 n 0000082452 00000 n 0000085358 00000 n 0000089479 00000 n 0000093114 00000 n 0000090788 00000 n 0000085239 00000 n 0000082944 00000 n 0000090731 00000 n 0000086577 00000 n 0000086633 00000 n 0000086713 00000 n 0000087753 00000 n 0000087774 00000 n 0000088066 00000 n 0000089457 00000 n 0000090574 00000 n 0000090630 00000 n 0000090710 00000 n 0000097609 00000 n 0000093972 00000 n 0000092995 00000 n 0000090939 00000 n 0000093804 00000 n 0000372865 00000 n 0000093647 00000 n 0000093703 00000 n 0000093783 00000 n 0000103867 00000 n 0000101127 00000 n 0000097490 00000 n 0000094110 00000 n 0000101070 00000 n 0000098540 00000 n 0000098596 00000 n 0000098676 00000 n 0000099716 00000 n 0000099737 00000 n 0000100008 00000 n 0000101049 00000 n 0000106056 00000 n 0000103748 00000 n 0000101279 00000 n 0000105886 00000 n 0000105728 00000 n 0000105784 00000 n 0000105864 00000 n 0000110301 00000 n 0000113682 00000 n 0000110182 00000 n 0000106208 00000 n 0000113511 00000 n 0000110772 00000 n 0000110828 00000 n 0000110908 00000 n 0000111948 00000 n 0000111969 00000 n 0000112237 00000 n 0000113489 00000 n 0000116521 00000 n 0000122744 00000 n 0000116402 00000 n 0000113885 00000 n 0000122573 00000 n 0000117665 00000 n 0000117721 00000 n 0000117801 00000 n 0000122444 00000 n 0000118002 00000 n 0000244523 00000 n 0000001007 00000 f 0000118819 00000 n 0000122348 00000 n 0000119044 00000 n 0000119532 00000 n 0000122262 00000 n 0000119730 00000 n 0000119894 00000 n 0000122122 00000 n 0000120098 00000 n 0000120483 00000 n 0000121980 00000 n 0000120686 00000 n 0000121503 00000 n 0000121878 00000 n 0000121687 00000 n 0000121857 00000 n 0000245765 00000 n 0000129033 00000 n 0000126987 00000 n 0000126355 00000 n 0000122909 00000 n 0000126647 00000 n 0000126494 00000 n 0000138060 00000 n 0000138120 00000 n 0000128914 00000 n 0000127162 00000 n 0000138003 00000 n 0000372983 00000 n 0000133322 00000 n 0000133378 00000 n 0000133458 00000 n 0000134498 00000 n 0000134520 00000 n 0000134818 00000 n 0000137981 00000 n 0000138734 00000 n 0000138558 00000 n 0000138259 00000 n 0000138677 00000 n 0000140470 00000 n 0000139781 00000 n 0000139491 00000 n 0000138819 00000 n 0000139610 00000 n 0000145228 00000 n 0000140351 00000 n 0000139904 00000 n 0000145109 00000 n 0000144152 00000 n 0000144208 00000 n 0000144288 00000 n 0000144393 00000 n 0000144492 00000 n 0000144599 00000 n 0000144621 00000 n 0000144778 00000 n 0000144979 00000 n 0000148039 00000 n 0000147578 00000 n 0000145354 00000 n 0000147697 00000 n 0000149645 00000 n 0000149412 00000 n 0000148187 00000 n 0000149531 00000 n 0000152803 00000 n 0000152110 00000 n 0000149756 00000 n 0000152406 00000 n 0000152249 00000 n 0000373101 00000 n 0000158087 00000 n 0000157622 00000 n 0000152951 00000 n 0000157913 00000 n 0000157761 00000 n 0000242642 00000 n 0000240749 00000 n 0000242481 00000 n 0000158027 00000 n 0000240313 00000 n 0000236697 00000 n 0000240151 00000 n 0000236454 00000 n 0000234295 00000 n 0000236290 00000 n 0000162502 00000 n 0000162147 00000 n 0000158261 00000 n 0000162445 00000 n 0000162286 00000 n 0000167498 00000 n 0000166579 00000 n 0000162599 00000 n 0000167384 00000 n 0000166742 00000 n 0000166911 00000 n 0000167067 00000 n 0000167224 00000 n 0000233194 00000 n 0000233137 00000 n 0000171800 00000 n 0000171379 00000 n 0000167633 00000 n 0000171687 00000 n 0000171518 00000 n 0000176107 00000 n 0000175874 00000 n 0000171922 00000 n 0000175993 00000 n 0000181013 00000 n 0000180780 00000 n 0000176243 00000 n 0000180899 00000 n 0000373219 00000 n 0000182175 00000 n 0000181999 00000 n 0000181135 00000 n 0000182118 00000 n 0000182835 00000 n 0000182602 00000 n 0000182285 00000 n 0000182721 00000 n 0000183378 00000 n 0000183202 00000 n 0000182907 00000 n 0000183321 00000 n 0000186051 00000 n 0000185705 00000 n 0000183450 00000 n 0000185824 00000 n 0000188500 00000 n 0000189436 00000 n 0000188381 00000 n 0000186200 00000 n 0000189263 00000 n 0000189320 00000 n 0000189106 00000 n 0000189162 00000 n 0000189242 00000 n 0000191325 00000 n 0000192384 00000 n 0000191206 00000 n 0000189575 00000 n 0000192212 00000 n 0000192269 00000 n 0000373337 00000 n 0000192055 00000 n 0000192111 00000 n 0000192191 00000 n 0000195308 00000 n 0000195132 00000 n 0000192510 00000 n 0000195251 00000 n 0000197828 00000 n 0000198975 00000 n 0000197689 00000 n 0000195418 00000 n 0000198799 00000 n 0000198856 00000 n 0000198646 00000 n 0000198489 00000 n 0000198545 00000 n 0000198625 00000 n 0000202906 00000 n 0000201567 00000 n 0000202314 00000 n 0000203200 00000 n 0000201448 00000 n 0000199127 00000 n 0000202849 00000 n 0000203081 00000 n 0000202157 00000 n 0000202213 00000 n 0000202293 00000 n 0000202693 00000 n 0000202749 00000 n 0000202829 00000 n 0000205461 00000 n 0000206028 00000 n 0000206595 00000 n 0000207545 00000 n 0000205342 00000 n 0000203392 00000 n 0000207136 00000 n 0000207193 00000 n 0000207311 00000 n 0000207430 00000 n 0000205871 00000 n 0000205927 00000 n 0000206007 00000 n 0000206438 00000 n 0000206494 00000 n 0000206574 00000 n 0000206980 00000 n 0000207036 00000 n 0000207116 00000 n 0000209636 00000 n 0000210185 00000 n 0000210715 00000 n 0000211698 00000 n 0000209517 00000 n 0000207712 00000 n 0000211290 00000 n 0000211347 00000 n 0000211465 00000 n 0000211584 00000 n 0000210029 00000 n 0000210085 00000 n 0000210165 00000 n 0000210559 00000 n 0000210615 00000 n 0000210695 00000 n 0000211133 00000 n 0000211189 00000 n 0000211269 00000 n 0000214095 00000 n 0000214661 00000 n 0000216241 00000 n 0000215529 00000 n 0000213976 00000 n 0000211865 00000 n 0000215234 00000 n 0000215291 00000 n 0000215410 00000 n 0000373455 00000 n 0000214504 00000 n 0000214560 00000 n 0000214640 00000 n 0000215077 00000 n 0000215133 00000 n 0000215213 00000 n 0000216911 00000 n 0000216122 00000 n 0000215682 00000 n 0000216792 00000 n 0000216849 00000 n 0000216636 00000 n 0000216692 00000 n 0000216772 00000 n 0000218727 00000 n 0000219779 00000 n 0000218608 00000 n 0000217024 00000 n 0000219377 00000 n 0000219661 00000 n 0000219220 00000 n 0000219276 00000 n 0000219356 00000 n 0000221649 00000 n 0000222374 00000 n 0000223026 00000 n 0000224162 00000 n 0000221530 00000 n 0000219957 00000 n 0000223752 00000 n 0000223809 00000 n 0000223928 00000 n 0000224047 00000 n 0000222217 00000 n 0000222273 00000 n 0000222353 00000 n 0000222869 00000 n 0000222925 00000 n 0000223005 00000 n 0000223595 00000 n 0000223651 00000 n 0000223731 00000 n 0000226002 00000 n 0000226683 00000 n 0000229607 00000 n 0000227783 00000 n 0000225883 00000 n 0000224329 00000 n 0000227434 00000 n 0000227491 00000 n 0000227610 00000 n 0000226526 00000 n 0000226582 00000 n 0000226662 00000 n 0000227277 00000 n 0000227333 00000 n 0000227413 00000 n 0000230292 00000 n 0000230879 00000 n 0000231765 00000 n 0000229488 00000 n 0000227936 00000 n 0000231465 00000 n 0000231522 00000 n 0000231584 00000 n 0000231703 00000 n 0000230135 00000 n 0000230191 00000 n 0000230271 00000 n 0000230722 00000 n 0000230778 00000 n 0000230858 00000 n 0000231308 00000 n 0000231364 00000 n 0000231444 00000 n 0000233251 00000 n 0000232457 00000 n 0000231932 00000 n 0000232966 00000 n 0000233023 00000 n 0000232604 00000 n 0000232798 00000 n 0000373573 00000 n 0000233348 00000 n 0000236656 00000 n 0000240536 00000 n 0000242840 00000 n 0000242865 00000 n 0000245796 00000 n 0000261273 00000 n 0000000000 00000 f 0000263571 00000 n 0000267594 00000 n 0000276730 00000 n 0000281030 00000 n 0000283267 00000 n 0000283292 00000 n 0000300320 00000 n 0000308371 00000 n 0000312345 00000 n 0000320788 00000 n 0000323706 00000 n 0000341791 00000 n 0000349292 00000 n 0000361539 00000 n 0000367209 00000 n 0000372358 00000 n 0000373651 00000 n 0000373771 00000 n 0000373875 00000 n 0000373948 00000 n 0000382003 00000 n 0000385842 00000 n 0000385883 00000 n 0000385923 00000 n 0000386154 00000 n trailer << /Size 1033 /Root 1031 0 R /Info 1032 0 R >> startxref 386310 %%EOF pyscript-0.6.1/doc/manual/pyscript.tex0000644000175000001440000012203110441263767017526 0ustar cochraneusers% Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane % % This program is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License % as published by the Free Software Foundation; either version 2 % of the License, or (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program; if not, write to the Free Software % Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. % $Id: pyscript.tex,v 1.28 2006/06/06 11:33:11 paultcochrane Exp $ \documentclass[a4paper]{book} \include{pyscript_defs} \bibliographystyle{plain} % this code hacked from that of R Chandrasekhar from UWA \newif\ifpdf \ifx\pdfoutput\undefined \pdffalse % we are not running pdfLaTeX \else \pdfoutput=1 % we are running pdfLaTeX \pdftrue \fi \ifpdf \DeclareGraphicsExtensions{.pdf} % this command defined in graphicx \pdfcompresslevel=9 % 0: no compression, 9: highest compression % or, set compress_level 9 in file pdftex.cfg \else \DeclareGraphicsExtensions{.eps} \fi \begin{document} \begin{titlepage} \begin{center} \vspace*{3cm} \LARGE \includegraphics{figs/logo}\\[4cm] {\Huge \emph{PyScript}}\\[1cm] \emph{Postscript Graphics with Python}\\[2cm] version 0.6\\[2cm] Alexei Gilchrist\\ Paul Cochrane \end{center} \end{titlepage} \frontmatter \tableofcontents \mainmatter %========================================================================== \chapter{Introduction} \label{cha:introduction} \section{Overview} \pyscript is a python package for creating high-quality postscript drawings. It began from the frustration of trying to create some good figures for publication that contained some abritrary \LaTeX{} expressions, and has been largely inspired by \Verb|mpost|. What began as some quick-n-dirty hacks has evolved into a really useful tool (after several rewrites). Essentially a figure is scripted using python and some pre-defined objects such as rectangles, lines, text etc. This approach allows for a precise placement of all the components of a figure. Some of the key features are \begin{itemize} \item All scripting is done in python, which is a high-level, easy to learn, well developed scripting language. \item All the objects can be translated, scaled, rotated, \ldots in fact any affine transformation. \item The plain text object is automatically kerned. \item You can place abritrary \LaTeX{} expressions on your figures. \item You can create your own objects, and develop a library of figure primitives. \item Output is publication quality. \end{itemize} \section{Conventions and Pitfalls} \label{sec:conventions} Just to be clear from the outset, some conventions follow, and some common pitfalls to be aware of \ldots \begin{itemize} \item The co-ordinate system is as you learned at school in maths \ldots the $x$-axis extends to the right, the $y$-axis extends upwards. I know, this is obvious, but a suprising number of graphics libraries invert the $y$-axis. \item Angles are in degrees and proceed clockwise from the top \ldots just like your clock. Often, key points are labeled by the compass points: n, ne, e, se, s, sw, w, nw. \item The default units are postscript points, $1\mathrm{cm}=28.346\mathrm{pp}$. For a figure, the default can easily be changed with the command \Verb|defaults.units=UNITS['cm']|. All of the examples in this manual are in \texttt{cm}. \item In python, an integer divided by an integer is truncated to an integer, To avoid this use floating point numbers, e.g. \Verb|2/3 = 0| but \Verb|2/3. = 0.6666|. \item Backslashes in strings have special significance, such as denoting newlines (\Verb|"\n"|). This can be frustrating for entering \LaTeX{} expresions. You can turn off this interpretation by using raw strings: just prepend an ``r'' to the string e.g. \Verb|g=r"$\alpha$"| \end{itemize} \section{Tutorial} \label{sec:tutotial} As a tutorial, we'll take a detailed look at the script that created the following figure: \begin{center} \includegraphics{figs/tutorial} \end{center} In the following script, we've interdispersed comments explaining what we're doing, the full script is available with the other examples and is called \texttt{tutorial.py}. First import the \pyscript libraries, and we'll grab some objects from \Verb|pyscript.lib.quantumcircuits| too. Most scripts would have something like this at the beginning. \begin{python} from pyscript import * from pyscript.lib.quantumcircuits import * \end{python} The default units are in postscript points. I prefer to use \texttt{cm} so switch the units here. The default units are stored in \Verb|defaults.units| which is just a number giving giving the multiplying factor compared to postscript points. \Verb|UNITS| is a dictionary of factors for some common units. \begin{python} defaults.units=UNITS['cm'] \end{python} There's a bunch of \LaTeX{} macros I use often. Rather than defining them each time they're needed, well define them in the \Verb|tex_head| variable in \Verb|defaults|, which defines the start of the environment where \emph{all} the \LaTeX{} is processed. \begin{python} defaults.tex_head=r""" \documentclass{article} \pagestyle{empty} \usepackage{amsmath} \newcommand{\ket}[1]{\mbox{$|#1\rangle$}} \newcommand{\bra}[1]{\mbox{$\langle #1|$}} \newcommand{\braket}[2]{\mbox{$\langle #1|#2\rangle$}} \newcommand{\ketbra}[2]{\mbox{|#1$\rangle\langle #2|$}} \newcommand{\op}[1]{\mbox{\boldmath $\hat{#1}$}} \newcommand{\R}[3]{% \renewcommand{\arraystretch}{.5} $\begin{array}{@{}c@{}}{#1}\\{#2}\end{array}{#3}$ \renewcommand{\arraystretch}{1} } \begin{document} """ \end{python} Now, define the colors of some objects here to make it easy to change them everywhere in the figure later if we need to. There are a whole variety of ways to specify a color, we'll use RGB values here. \begin{python} blue=Color(.65,.65,1) green=Color(.65,1,.65) \end{python} There's a component of the figure we'll use several times, so for convenience, define it here as a function which returns the object. A separate class would also be possible, but would involve more work. We could also have created the object and used the \Verb|copy()| method to make duplicates, but that would be clumsy. \begin{python} def BellDet(c=P(0,0)): H=P(0,.8) W=P(.5,0) \end{python} \Verb|D| is a D-shaped path filled in with the blue color we defined earlier. \begin{python} D=Path(c+H, C(c+H+W), c+W, C(c-H+W), c-H,bg=blue, ) \end{python} Now return everything as a \Verb|Group|, which will then get treated as a unit in the rest of the figure. \begin{python} return Group( Path(c-H,c+H,linewidth=2), D, TeX(r'$\mathcal{B}$',c=D.c) ) \end{python} To create the big gray box, we've tweaked the parameters after examining the results so that it looks nice. The dash specification is straight from postscript. \begin{python} offline=Rectangle(height=4,width=5.5,e=P(3.5,1.5), dash='[3 ] 0',bg=Color(.85)) \end{python} Now render the figure! What about all the other bits of the figure? Well, we'll render them on the fly since we don't need to refer to the objects again. \Verb|render| is a function that can take a variable number of arguments, we'll create some of the objects in the actual function call. Objects are rendered in the order that they appear in the \Verb|render()| call. So, we'll put on the big gray box first, this way it'll appear to be behind everything else. \begin{python} render( offline, TeX('offline',nw=offline.nw+P(.1,-.1)), \end{python} Now draw the lines, and some dots. A rough sketch on a piece of paper beforehand will really help in figuring out what the co-ordinates are for what you want to draw. You can always tweak them later. \begin{python} Path(P(5,0),P(-.3,0),P(-.6,.5),P(-.3,1),P(2,1)), Path(P(2,2),P(-.3,2),P(-.6,2.5),P(-.3,3),P(3.7,3)), Path(P(-1,4),P(3.7,4)), Dot(P(-.6,.5)), Dot(P(-.6,2.5)), \end{python} Now add a double line, notice how the central region of the line in the figure is unbroken? Can you guess how it was done? \begin{python} classicalpath(Path(P(2.1,1.5),P(4.5,1.5),P(4.5,0)), Path(P(3,1.5),P(3,0)), Path(P(3.8,3.5),P(4.5,3.5),P(4.5,1.5)), ), \end{python} Use the function we defined earlier to add those large detectors to the figure. \begin{python} BellDet(P(2,1.5)), BellDet(P(3.7,3.5)), \end{python} Add some boxed equations to the figure. This object is from the \Verb|quantumcircuits| library, and will add a box around an abritrary object. \begin{python} Boxed(TeX(r'$D\left(\frac{i\theta}{2\alpha^2}\right)$'),c=P(1,2),bg=green), Boxed(TeX('$X$'),c=P(3,0),bg=green), Boxed(TeX('$Z$'),c=P(4.5,0),bg=green), \end{python} Finally, add some \LaTeX{} expressions (notice some of the macros we defined earlier), and give the filename to write the postscript to. N.B. keywords, such as \Verb|file=|, have to go after parameters in a function call. \begin{python} TeX(r'$\ket{B_{00}}$',e=P(-.7,.5)), TeX(r'$\ket{B_{00}}$',e=P(-.7,2.5)), TeX(r'$\ket{Q}$',e=P(-1.1,4)), file="tutorial.eps", ) \end{python} We're done. Sit back and admire the figure. %========================================================================== \chapter{How Do I ...?} \label{cha:howto} %-------------------------------------------------------------------------- \section{Aligning things} \pyscript has a rich structure for aligning objects. This ranges from objects which have attributes which specify a particular point such as the nw corner of the object to functions such as \Verb|Align()| and \Verb|Distribute()| which will align and distribute a group of objects. %-------------------------------------------------------------------------- \subsection{Using attributes} Certain objects (mostly those subclassed from \Verb|Area|) have named points on the object that can be read or set. \Verb|Area| defines the following compass points located on a rectangle: ``n'', ``ne'', ``e'', ``se'', ``s'', ``sw'', ``w'', ``nw''. Also the center of the area is given by ``c''. Reading one of these attributes will return the value of that point, and setting one of these attributes will move the object so that the named point lies on the supplied one. For example, \Verb|obj1.c=obj2.c| will align the centres of the two objects. The points returned are vectors from the origin and can be manipulated in the usual ways. \begin{example} This will align the centre of \Verb|obj3| so that it lies half way between the centres of \Verb|obj1| and \Verb|obj2|: \Verb|obj3.c=(obj1.c+obj1.c)/2.|. \end{example} The main thing to keep in mind is that the named point is for the \emph{objects} coordinate system. If a transformation is applied to the object, it will also be applied to all the named points. \begin{example} As the following example shows, the named point always stays the same in the objects coordinate system (watch the dot). \begin{python} r=Rectangle(width=2,height=2) g=Group() for a in [0,20,40]: p=P(a/7.,0) r2=r.copy(c=p).rotate(a,p) g.append(r2,Dot(r2.nw)) render(g,file=...) \end{python} produces \begin{center} \includegraphics[width=.25\textwidth]{figs/fig_position_eg1} \end{center} \end{example} %-------------------------------------------------------------------------- \subsection{Understanding boundingboxes} An objects boundingbox is a rectangle in the \emph{current} coordinate system that completely contains the object. The bounding box for an object can be obtained with the \Verb|bbox()| method. The bounding box is calculated after all the co-ordinate transformations are applied to the objects. Bounding boxes have the same named point as rectangles, but these are read-only, and you can't apply transformations to bounding boxes. \begin{example} A variation of the previous example, where we'll put a dot at the nw corner of the bounding box \begin{python} r=Rectangle(width=2,height=2) g=Group() for a in [0,20,40]: p=P(a/7.,0) r2=r.copy(c=p).rotate(a,p) g.append(r2,Dot(r2.bbox().nw)) render(g,file=...) \end{python} produces \begin{center} \includegraphics[width=.25\textwidth]{figs/fig_position_eg2} \end{center} \end{example} %-------------------------------------------------------------------------- \subsection{Using Align()} %-------------------------------------------------------------------------- \subsection{Using Distribute()} %-------------------------------------------------------------------------- \section{Trouble Shooting} \subsection{\LaTeX Stuff} One of the useful features of \pyscript is the ability to use \LaTeX. The process is kind of complicated though so things can break. It helps to know how it all works if you're going to find some of the subtle bugs, so here's a synopsis: \begin{enumerate} \item You create some \LaTeX{} with the \Verb|TeX()| object (you are using raw strings arent you?). \item \pyscript writes the text to a temporary file sandwiched between \Verb|defaults.tex_head| and \Verb|defaults.tex_tail|. \item \Verb|defaults.tex_command| is excecuted on the file \item \Verb|dvips| is executed on the resulting DVI file. \item \pyscript reads the BoundingBox comment and throws the rest away! \item Finally, within \Verb|render| \emph{all} the \Verb|TeX()| objects are collected together. A temporary file with all the \LaTeX{} is generated with the individual objects delimited by postscript tags (inserted via specials) and pagebreaks. \item As before, \Verb|defaults.tex_command| is executed (twice this time) on the file, followed by \Verb|dvips|. \item The resulting code is parsed and divided up into sections on fonts and procedures, and the individual postscript code for each object. These are then used within the final document. \end{enumerate} The reason it's so complicated is for efficiency --- you don't want all the header and font info for every single piece of \TeX{} you put on the page. This is \emph{not} the way \LaTeX{} was designed to be used and it shows --- you have to jump through a number of hoops to get it all to work. The \Verb|defaults.tex_command| should have a \Verb|-interaction=batchmode| flag or errors won't get picked up. For the same reason, \emph{any} output from \Verb|dvips| is treated as an error, so it needs a \emph{-q} flag. There are a number of tweaks that have to be made to the postscript code so that it is viable and the boundingboxes work \ldots Despite all this it works suprisingly well. You can even include figures in the \LaTeX{} code and input other files etc. Take care though, use \Verb|\input| rather than \Verb|\include| as the latter seems to invoke some weird things in \Verb|dvips| that result in the postscript tags not getting placed in the file. Also, don't use a figure or table environment --- they're floats \ldots think about it. Right, that enough of a rant. The useful stuff: \begin{itemize} \item output from the commands goes to the log file --- you did look at it right? \item For each \Verb|TeX| object the temporary file thats created is called \Verb|temp1.tex|. \Verb|defaults.tex_command| and \Verb|dvips -E| execute on it to produce \Verb|temp1.eps|. All these should be valid files which you can examine. You can also run the commands by hand to see whats going on. \item The final temp file with all the objects is \Verb|temp.tex| which ends up producing \Verb|temp.ps| which will have one object per page. Again you can examine these files by hand. \end{itemize} %-------------------------------------------------------------------------- \section{Transformations and Things} %========================================================================== \chapter{\pyscript Objects} \label{cha:base-objects} These are the basic \pyscript objects and functions. At the begining of each class there is a brief description of the structure of the class showing the relevant methods and members. See also figure~\ref{fig:classes} on page~\pageref{fig:classes} for an indication of how the classes fit together. %-------------------------------------------------------------------------- \section{Base Objects} These are classes which add layers of functionality to \pyscript objects. Normally you wouldn't use these classes directly unless you're creating new \pyscript objects. We'll decribe them here because they summarise what you can do with \pyscript objects. %-------------------------------------------------------------------------- \subsection{PsObj()} \label{sec:psobj} \begin{python} class PsObj(object): def __call__(self,**dict): Set a whole lot of attributes in one go def copy(self,**dict): return a copy of this object with listed attributes modified def __str__(self): return actual postscript string to generate object def body(self): subclasses should overide this for generating postscipt code def bbox(self): return objects bounding box \end{python} Base class of which most (all?) \pyscript classes are subclass. A list of parameters can be set when an object is created with calls like \Verb|t=Text('Hello',font='Helvetica')| or by calling the object like a function as in \Verb|t(sw=P(0,2))|. The parameters are also available singly as attributes: \Verb|t.sw| etc. Printing an object produces the actual postscript code. Objects may be copied with the \Verb|copy()| function and new parameters can be passed in as arguments eg \Verb|s = t.copy(sw=P(0,0))|. %-------------------------------------------------------------------------- \subsection{AffineObj()} \label{sec:affineobj} \begin{python} class AffineObj(PsObj): o=P(0,0) T=Matrix(1,0,0,1) def concat(self,t,p=None): concat matrix t to tranformation matrix t: a 2x2 Matrix dectribing Affine transformation p: the origin for the transformation return: reference to self def move(self,*args): translate object by a certain amount param args: amount to move by, can be given as - dx,dy - P return: reference to self def rotate(self,angle,p=None): rotate object, the rotation is around p when supplied otherwise it's the objects origin angle: angle in degrees, clockwise p: point to rotate around (external co-ords) return: reference to self def scale(self,sx,sy,p=None): scale object size (towards objects origin or p) sx sy: scale factors for each axis p: point around which to scale return: reference to self def itoe(self,p_i): convert internal to external co-ords p_i: intrnal co-ordinate return: external co-ordinate def etoi(self,p_e): convert external to internal co-ords p_e: external co-ordinate return: internal co-ordinate \end{python} A base class for objects that should implement affine transformations (such as scaling, rotating etc), this should apply to any object that draws on the page. %-------------------------------------------------------------------------- \subsection{Area()} \label{sec:area} \begin{python} class Area(AffineObj): o=P(0,0) width=0 height=0 n, ne, e, se, s, sw, w, nw, c ... see description below \end{python} A Rectangular area defined by the south-west corner and the width and height. This object mainly adds the ability to align to named compass points on the circumference see figure below. \begin{center} \includegraphics[width=.25\textwidth]{figs/fig_area} \end{center} These points are always returned in external co-ordinates. %-------------------------------------------------------------------------- \section{Drawing Objects} %-------------------------------------------------------------------------- \subsection{Common Attributes} \label{sec:draw-attr} Most of the objects that actually draw something on the page share a common set of attributes to set things like the line thickness etc. \begin{itemize} \item \textbf{fg}: A \Verb|Color()|, the colour for the ink in the foreground. Some objects allow switching this off with the value \Verb|None| in which case only the fill (if it's used) will be drawn. \item \textbf{bg}: A \Verb|Color()|, the fill color if the object supports this. A value of \Verb|None| means no fill (transparent). \item \textbf{linewidth}: The linewidth in pp. \item \textbf{linecap}: How to finish the ends of lines. 0=butt, 1=round, 2=square. \item \textbf{linejoin}: How to treat corners. 0=miter, 1=round, 2=bevel. \item \textbf{miterlimit}: Where to cut off the mitres (if you're using mitres in linejoins). 1.414 cuts off miters at angles less than 90 degrees, 2.0 cuts off miters at angles less than 60 degrees, 10.0 cuts off miters at angles less than 11 degrees, 1.0 cuts off miters at all angles, so that bevels are always produced. \item \textbf{dash:} The dash pattern to use for the forground lines. Currently this follows the postscript syntax. e.g. \Verb|"[]"| is a solid line, \Verb|"[2 3] 0 "| is a dashed line with ink for 2 pp gap for 3 pp and an initial offset for the ink of 0 pp. At some time in the future there may be a convenience class to set this. \end{itemize} %-------------------------------------------------------------------------- \subsection{Rectangle()} \label{sec:rectangle} %\begin{python} %\end{python} \begin{center} \includegraphics[width=.25\textwidth]{figs/fig_rectangle} \end{center} %-------------------------------------------------------------------------- \subsection{Circle()} \label{sec:circle} \begin{python} bg=None fg=Color(0) r=1.0 start=0 end=360 linewidth=defaults.linewidth dash=defaults.dash n, ne, e, se, s, sw, w, nw, c ... see description below def locus(self,angle,target=None): Set or get a point on the locus @param angle: locus point in degrees (Degrees clockwise from north) @param target: target point @return: target is None: point on circumference at that angle else: set point to the target, and return reference to object \end{python} Draw a circle. The circle is specified by its position and its radius. You can also specify part of a circle with the attributes \Verb|start| and \Verb|end| which are in degrees clockwise from the top. As with the \Verb|Rectangle| there are named points on the enclosing square that corresponds to the compass points which can be read or set. \begin{center} \includegraphics[width=.25\textwidth]{figs/fig_circle} \end{center} In addition an abtritrary point on the circumference can be read or set by using the \Verb|locus()| method --- with one parameter (the angle on the locus) the locus point is returned; with an additional target point supplied, the locus point is set to the target point. \begin{example} \begin{python} c=Circle(r=.5,bg=Color('dandelion')) g=Group() for ii in range(0,360,30): g.append( Circle(r=.2,bg=Color('white')).locus(180+ii,c.locus(ii)) ) render(c,g,file=...) \end{python} \begin{center} \includegraphics{figs/fig_circle_eg1} \end{center} \end{example} \begin{example} \begin{python} g=Group(Rectangle(sw=P(0,0),width=2,height=2), Circle(r=1,sw=P(0,0)), Circle(r=sqrt(2)).locus(-135,P(0,0)), ) g.scale(1.5,.5) render(g,file=...) \end{python} \begin{center} \includegraphics{figs/fig_circle_eg2} \end{center} \end{example} %-------------------------------------------------------------------------- \subsection{Dot()} \label{sec:dot} \begin{python} class Dot(Circle): r=.1 bg=Color(0) fg=None \end{python} A simple convenience function to draw a dot at the given location %-------------------------------------------------------------------------- \subsection{Path()} \label{sec:path} \begin{python} class Path(AffineObj): fg=Color(0) bg=None linewidth=None linecap=None linejoin=None miterlimit=None dash=None closed=0 heads=[] length start end def P(self,t): point at fraction t of length def tangent(self,t): unit vector tangent to point at fraction t of length \end{python} An abritrary path (line curve etc). This is one of the more powerful objects in \pyscript. \Verb|Path| takes a list of points (either \Verb|P| or \Verb|R|) in its contruction with a specifier for a curve (\Verb|C|) interdispersed if necessary. For example \Verb|Path(p0,p1,C(c1,c2),p2,p3)| would yield something like \begin{center} \includegraphics{figs/fig_path} \end{center} The syntax is easy, between each pair of points, without a \Verb|C| inbetween, a straight line segment is drawn. If there is a \Verb|C| inbetween then a curve segment is drawn between the points. The curve is controlled by the arguments to \Verb|C|. At the moment only bezier curves can be specified by \Verb|C| which takes two arguments --- they can be either a point or an angle. Points specify the control points of the bezier, and angles specify the direction the curve leaves the end points, the strength is calculated automatically. The points to both the \Verb|Path| and \Verb|C| can be specified with either \Verb|P| or \Verb|R|. \Verb|P| are absolute points from the origin of the co-ordinate system, whereas \Verb|R| are `relative' points and their meaning depends on where they appear. As arguments to \Verb|Path| then they are relative to the previous point (unless it is the first point in which case it the same as \Verb|P|). As arguments to \Verb|C| then for the first control point it's relative to the start of the curve segment and for the second control point it's relative to the end of the segment. \begin{example} The following two specify the same curve:\\ \Verb|Path(P(1,1),P(2,2),C(P(2,3),P(3,2)),P(3,3))|\\ \Verb|Path(R(1,1),R(1,1),C(R(0,1),R(0,-1)),R(1,1))| \end{example} As you would expect, you can set the linewidth, dash pattern, color etc in the usual way. If you set a \Verb|bg| that is not \Verb|None| then the `interior' of the path will be filled in that color. The \Verb|heads| attribute is a list of \Verb|Arrowhead| \emph{instances} to place on the path. \Verb|Path| also has some additional methods and attributes. The \Verb|start| and \Verb|end| atributtes give, well, the start and end of the path. The \Verb|length| attribute give the length of the path in it's default co-ordinate system. You can also get the a point a fraction \Verb|f| along the path with \Verb|path.P(f)|, and a unit vector tangent to the point at that fraction with \Verb|path.tangent(f)|. \begin{example} \begin{python} path=Path(p0,p1,C(c1,c2),p2,p3,fg=Color('red'),linewidth=.8) g=Group() delta=1/20. for p in range(21): g.append(Dot(path.P(p*delta))) render(path,g,...) \end{python} \begin{center} \includegraphics{figs/fig_path_eg} \end{center} \end{example} %-------------------------------------------------------------------------- \subsection{Arrowhead()} \label{sec:arrowhead} \begin{python} class Arrowhead(AffineObj): fg=Color(0) bg=Color(0) reverse=0 pos=1 tip=P(0,0) angle=0 start=(0,0) shape=[...] closed=1 scalew=1 scaleh=1 linewidth=.2 linejoin=2 miterlimit = 2 \end{python} A class to efficiently draw an arrow head. There are two ways of using the arrow head: \begin{itemize} \item Within the \Verb|Path| object: add arrowheads to the path by adding them to the \Verb|heads| attribute of \Verb|Path| which is a list. In this case, the arrow head takes one argument which is the fraction along the path at which to place the tip of the arrowhead. The arrow head can be reversed using its \Verb|reverse=1| attribute. eg \Verb|Path(...,heads=[Arrowhead(.5,reverse=1)])| will place an arrowhead halfway along the path pointing backward. \item Place the arrow head manually. You can set the tip position with \Verb|tip| and set the direction it points to with \Verb|angle|. \end{itemize} There are several styles of arrow heads defined \Verb|Arrowhead1| \ldots \Verb|Arrowhead5|, and new styles can be easily defined. %-------------------------------------------------------------------------- \section{Text Objects} %-------------------------------------------------------------------------- \subsection{Text()} \label{sec:text} \begin{python} class Text(Area): A single line text object within an Area object text='' font="Times-Roman" size=12 fg=Color(0) bg=None kerning=1 \end{python} The \Verb|Text| object allows typesetting a simple string in a single font. The usual postscript fonts are defined, these are (case insensitive): \Verb|courier|, \Verb|courier_bold|, \Verb|courier_boldoblique|, \Verb|courier_oblique|, \Verb|helvetica|, \Verb|helvetica_bold|, \Verb|helvetica_boldoblique|, \Verb|helvetica_oblique|, \Verb|symbol|, \Verb|times_bold|, \Verb|times_bolditalic|, \Verb|times_italic|, \Verb|times_roman| and \Verb|zapfdingbats|. The text will use \emph{kerning} automatically, that is, the letter spacing will be adjusted depending on the pair of letters so that it looks nicer. The kerning can be turned of if necessary, see example below. \begin{example} \begin{python} t1=Text('SWEPT AWAY',kerning=0,size=20) t2=Text('SWEPT AWAY',kerning=1,size=20,nw=t1.sw) render(t1,t2,file=...) \end{python} \begin{center} \includegraphics{figs/fig_text_kerning} \end{center} \end{example} Since \Verb|Text| is a subclass of \Verb|Area| then the usual compass points (\Verb|n|, \Verb|ne|, etc) are defined and can be read or set. %-------------------------------------------------------------------------- \subsection{TeX()} \label{sec:tex} \begin{python} class TeX(Area): an TeX expression text="" fg=Color(0) \end{python} A \LaTeX{} object --- any \LaTeX expression, can be typeset and positioned on the diagram. The \LaTeX{} expression is passed to the \Verb|latex| program followed by \Verb|dvips|, the resulting postscript is parsed and forms the basis of the object. Obviously this requires working \Verb|latex| and \Verb|dvips| distributions on your system. We recommend setting up your \Verb|latex| distribution to use postscript fonts, that way they can be scaled to any size. One common pitfall is that the backslash ('\Verb|\|') is used in python strings as an escape character and so gets interpreted by python before the string gets passed to the \Verb|latex| program. The easiest work around to this problem is to use python raw-strings --- just prepend an ``r'' to the string e.g. \Verb|r"$\alpha$"|. The object inherits from the \Verb|Area| object, and can also be scaled, rotated, etc. as will any of the other objects. \begin{example} \begin{python} tex=TeX(r'$|\psi_t\rangle=e^{itH}|\psi_0\rangle$',w=P(.5,0)) g=Group() for ii in range(0,360,60): g.append(tex.copy().rotate(ii,P(0,0))) render(g,file=...) \end{python} \begin{center} \includegraphics{figs/fig_tex_eg} \end{center} \end{example} %-------------------------------------------------------------------------- \section{Groups} \subsection{Group()} \label{sec:group} \begin{python} class Group(Area): def __init__(self,*objects,**dict): def append(self,*objs): append object(s) to group def apply(self,**dict): apply attributes to all objects def recalc_size(self): recalculate internal container size based on objects within def __getitem__(self,i): def __setitem__(self,i,other): def __getslice__(self,i,j): def __setslice__(self,i,j,wert): \end{python} This is one of the key classes in \pyscript. \Verb|Group()| acts like a python list and groups together \pyscript objects. Objects can be added to the group when you create it, e.g. \Verb|g=Group(det,b)|, or appended afterwards, e.g. \Verb|g.append(head,tail)|. You can access the items in the group as you would a normal python list, e.g. \Verb|head=g[2]|. When an item is added to the group, the groups bounding box is recalculated and this allows the whole group to be positioned using \Verb|n|, \Verb|ne| etc. If you modify an object after it's been added to the group you will have to call the \Verb|.recalc_size()|| if you want the groups bounding box to reflect it's contents, you may not want this under certain applications. \Verb|Groups()|'s can be nested without problem. All the items will be rendered in the order they where added. The properties of the groups contents can be set \emph{en-masse} by using the \Verb|.apply()| method. Objects that don't understand a particular property will be skipped. e.g. \Verb|g.apply(linewidth=2)|. %-------------------------------------------------------------------------- \section{Vectors and Matrices} %-------------------------------------------------------------------------- \section{Other} %-------------------------------------------------------------------------- \subsection{Color()} \label{sec:color} \begin{python} class Color(PsObj) def __mul__(self,other) \end{python} This class represents a postscript color. There are four ways to specify the color distinguished by the number and type of paprameters that are passed when you create the object. \begin{itemize} \item \Verb|Color(C,M,Y,K)| - a postscript CMYKColor (Cyan, Magenta, Yellow, blacK) \item \Verb|Color(R,G,B)| - RGBColor (Red, Green, Blue) \item \Verb|Color(G)| - Gray \item \Verb|Color('Yellow')| etc \end{itemize} All the numbers above range from 0 to 1. Some of the named colors that are defined are Red, Green, Blue, Cyan, Magenta, Yellow, Black, White. Color objects can be multiplied by a numeric factor. The effect is mostly to darken colors if the factor is less than 1 and to lighten colors if it's greater, but this depends on how the colors where specified. eg \Verb|Color(.2,.6,.6)*.5 = Color(.1,.3,.3)| The colours in the named colour model are shown in figure \ref{fig:colourchart}. As a historical note, the color names originated from unixes X11 color names, and were at one point considered as cadidate named colours for HTML documents, but in the end where never adopted. They have however, aquired an unofficial permanence. \begin{figure}[h] \centerline{ \includegraphics[height=0.8\textwidth]{figs/fig_colorchart} } \caption{Named colors} \label{fig:colourchart} \end{figure} A final note on the colors --- what you get on paper may not reflect what you see on the screen. The actual color that turns up on the paper is a complicated function of how it was produced, and depends on the hardware. The fastest and most accurate way to match colors in a printed document is to print out a color chart on the intended hardware. %-------------------------------------------------------------------------- \subsection{Paper()} \label{sec:paper} \begin{python} class Paper(Area): PAPERSIZES={"a0", ...''letter'', ...} \end{python} This is a convenience class, just an \Verb|Area()| with predefined size given by the usual paper sizes such as ``a4'', ``letter'' and ``legal'' etc. The origin is at the sw corner. It's useful if you want an object that will help align things on a printed page. e.g. \Verb|page=Paper("a4")|. %-------------------------------------------------------------------------- \subsection{Epsf()} \label{sec:epsf} \begin{python} class Epsf(Area): \end{python} Include an encapsulated postscript file (eps) in the figure. An eps file is a single page postcript file describing a diagram. There are many programs, such as graphing programs, that will generate eps files as output. It has to obey certain rules, such as having no page brakes, and a bounding box. \pyscript will parse the file and extract the bounding box and use that as the basis of the size and placement of the figure (so if it's wrong don't blame \pyscript). \Verb|Epsf()| takes a single argument --- the path of the eps file. The resulting object can then be positioned using \Verb|n|,\Verb|c|,\Verb|ne| etc, and of course can be scaled and rotated as desired. The Eps file can also be scaled to a particular width or height by specifing either the \Verb|width| or the \Verb|height| attributes when you create the object. The aspect ratio will be preserved when you do this. If you give \emph{both} width and height attributes the object will be scaled to those dimensions without preserving its aspect ratio. %========================================================================== \chapter{Development} The aim of this section is to document some of the internals of \pyscript to enable developers to modify and extend it. It should also help in solving some of the trickier problems. \begin{figure}[h] \begin{center} \begin{sideways} \includegraphics[height=.9\textwidth]{class_structure} \end{sideways} \end{center} \caption{Class structure of \pyscript} \label{fig:classes} \end{figure} \section{Submitting patches} %-------------------------------------------------------------------------- %\section{Object Attributes} %\label{sec:attributes} % % %\subsection{Native vs Dynamic} %\label{sec:native-vs-dynamic} % %Initialisation and setting of the attributes is somewhat complicated. We %want to be able to set attributes \`{a} la %\Verb|Text('font'='Helvetica',sw=P(0,-1))|, but to give full functionality %some attributes may need to be set on the fly, depending and affecting %others. This is done with two types of attributes, \emph{native} which are %just dict entries and don't depend on anything else; and \emph{dynamic} %which are actually functions which return or set the native attibutes. % %All classes that inherit from \Verb|PsDict| are dictionaries. %The following functions are special and implement the dynamic attributes: %\begin{itemize} %\item \Verb|_get_name(self)|: the returned value of this function is what is %returned from the call \Verb|obj['name']| %\item \Verb|_set_name(self,value)|: This function is executed by % \Verb|obj['name']='bob'| % %\end{itemize} %So, to provide some dynamical attribute, it is only neccessary to define %the appropriately named functions. All classes in \Verb|pyscript| %should use this mechanism to provide a consistent feel to the user. % %\subsection{Initialisation} %\label{sec:initialisation} % %The class initialisation mechanism is motivated by the following %requirements: % %\begin{itemize} %\item Each class should set all its defaults for its native attributes %\item Dynamic attributes can only be calculated/set after \emph{all} native % attributes have been set, including base classes! %\item Supplied attributes override the defaults \ldots duh. %\end{itemize} % %To initialise the attributes correctly, classes should first call %\Verb|native(defaults,param)| to initialise all default native values, then %call the initialisation of the parent class e.g.: %\begin{python} %def __init__(self,**dict): % % ...code to calculate native attributes... % % self.natives({"width":0,"height":0},dict) % apply(PsObject.__init__,(self,),dict) % % ...further initialisation... %\end{python} % % % %%-------------------------------------------------------------------------- %\section{Co-ordinates and Affine Transformations} %\label{sec:co-ordinates-affine} % %Abritrary affine transformations (e.g. rotations, scaling, shearing, %reflection) can be applied to any object that is a subclass of %\Verb|PsObject|. The way it is implemented in postscript is that the %transformation is applied to the co-ordinate system \emph{before} %the object is drawn. Hence the placement of the object on the page %is actually a displacement of the \emph{internal} origin. % %There are two co-ordinate systems for each object. An \emph{internal} %co-ordinate system in which the object is drawn. Usualy the origin (0,0) is %somewhere convenient on the object. There is also an \emph{external} %co-ordinate system which takes into account the placement, scaling etc. of %the object. Co-ordinates can be converted from \emph{internal} to %\emph{external} using the member function \Verb|itoe(point)| and vice-versa %with \Verb|etoi(point)|. % %Points that are returned from an object (e.g. \Verb|area.nw|) should %always be in the \emph{external} co-ordinates. In particular the origin, %\Verb|obj.o| is always in \emph{external} co-ordinates [internally it %just the point (0,0)] % %%-------------------------------------------------------------------------- %\section{Bounding Box} %\label{sec:bounding-box} % %All objects subclassing \Verb|PsObject| must provide a \Verb|boundingbox()| %function which returns the SW and NE points of a tight bounding box for the %object (in \emph{external} co-ordinates). The bounding box will be used %to calculate the bounding box for the entire drawing as way to allow %the precise placement of objects. % % %%-------------------------------------------------------------------------- %\section{Postscript Objects} %\label{sec:postscript-objects} % %The basic class for implementing an object drawn directly in postscript %is \Verb|PsObject|. \appendix \include{libpresent} \include{libpresentation} \include{libqi} \include{pyscriptOptics} % should I call this liboptics??? \include{pyscriptElectronics} % should I call this libelectronics??? %\include{pyscriptPlot} \backmatter \bibliography{pyscript} \end{document} pyscript-0.6.1/doc/manual/pyscriptElectronics.tex0000644000175000001440000001555210441263767021732 0ustar cochraneusers% Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane % % This program is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License % as published by the Free Software Foundation; either version 2 % of the License, or (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program; if not, write to the Free Software % Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. % $Id: pyscriptElectronics.tex,v 1.7 2006/06/06 11:33:11 paultcochrane Exp $ \chapter{PyScript Electronics Object Package} \section{Introduction} This package is a library of standard symbols as used in electronic circuit layout and design. Thanks to Adrian Jonstone's lcircuit macros from CTAN for the ideas and names. \section{Objects} \subsection{AND gate} %%% AND gate Draws a standard AND gate, with pins extending from the body of the gate. Object options: \begin{description} \item[width:] The width of the object. \item[height:] The height of the object. \item[angle:] The rotation angle. \item[pinLength:] The length of the pins extending from the gate. \item[fg:] The foreground colour. Use the \obj{Color} object to set this option. \item[bg:] The background colour. Use the \obj{Color} object to set this option. \end{description} \begin{figure}[h] \centerline{\includegraphics[height=1cm]{electronics/AndGate}} \caption{AndGate object} \label{fig:and_gate} \end{figure} \subsection{NAND gate} %%% NAND gate Draws a standard NAND gate, with pins extending from the body of the gate. Object options: \begin{description} \item[width:] The width of the object. \item[height:] The height of the object. \item[angle:] The rotation angle. \item[pinLength:] The length of the pins extending from the gate. \item[fg:] The foreground colour. Use the \obj{Color} object to set this option. \item[bg:] The background colour. Use the \obj{Color} object to set this option. \end{description} \begin{figure}[h] \centerline{\includegraphics[height=1cm]{electronics/NandGate}} \caption{NandGate object} \label{fig:nand_gate} \end{figure} \subsection{OR gate} %%% OR gate Draws a standard OR gate, with pins extending from the body of the gate. Object options: \begin{description} \item[width:] The width of the object. \item[height:] The height of the object. \item[angle:] The rotation angle. \item[pinLength:] The length of the pins extending from the gate. \item[fg:] The foreground colour. Use the \obj{Color} object to set this option. \item[bg:] The background colour. Use the \obj{Color} object to set this option. \end{description} \begin{figure}[h] \centerline{\includegraphics[height=1cm]{electronics/OrGate}} \caption{OrGate object} \label{fig:or_gate} \end{figure} \subsection{NOR gate} %%% NOR gate Draws a standard NOR gate, with pins extending from the body of the gate. Object options: \begin{description} \item[width:] The width of the object. \item[height:] The height of the object. \item[angle:] The rotation angle. \item[pinLength:] The length of the pins extending from the gate. \item[fg:] The foreground colour. Use the \obj{Color} object to set this option. \item[bg:] The background colour. Use the \obj{Color} object to set this option. \end{description} \begin{figure}[h] \centerline{\includegraphics[height=1cm]{electronics/NorGate}} \caption{NorGate object} \label{fig:nor_gate} \end{figure} \subsection{XOR gate} %%% XOR gate Draws a standard XOR gate, with pins extending from the body of the gate. Object options: \begin{description} \item[width:] The width of the object. \item[height:] The height of the object. \item[angle:] The rotation angle. \item[pinLength:] The length of the pins extending from the gate. \item[fg:] The foreground colour. Use the \obj{Color} object to set this option. \item[bg:] The background colour. Use the \obj{Color} object to set this option. \end{description} \begin{figure}[h] \centerline{\includegraphics[height=1cm]{electronics/XorGate}} \caption{XorGate object} \label{fig:Xor_gate} \end{figure} \subsection{NXOR gate} %%% NXOR gate Draws a standard NXOR gate, with pins extending from the body of the gate. Object options: \begin{description} \item[width:] The width of the object. \item[height:] The height of the object. \item[angle:] The rotation angle. \item[pinLength:] The length of the pins extending from the gate. \item[fg:] The foreground colour. Use the \obj{Color} object to set this option. \item[bg:] The background colour. Use the \obj{Color} object to set this option. \end{description} \begin{figure}[h] \centerline{\includegraphics[height=1cm]{electronics/NxorGate}} \caption{NxorGate object} \label{fig:Nxor_gate} \end{figure} \subsection{NOT gate} %%% NOT gate Draws a standard NOT gate, with pins extending from the body of the gate. Object options: \begin{description} \item[width:] The width of the object. \item[height:] The height of the object. \item[angle:] The rotation angle. \item[pinLength:] The length of the pins extending from the gate. \item[fg:] The foreground colour. Use the \obj{Color} object to set this option. \item[bg:] The background colour. Use the \obj{Color} object to set this option. \end{description} \begin{figure}[h] \centerline{\includegraphics[height=1cm]{electronics/NotGate}} \caption{NotGate object} \label{fig:not_gate} \end{figure} \subsection{Resistor} %%% Resistor Draws a standard resistor symbol, with pins extending from the body of the symbol. Object options: \begin{description} \item[width:] The width of the object. \item[length:] The length of the object. \item[angle:] The rotation angle. \item[pinLength:] The length of the pins extending from the gate. \item[fg:] The foreground colour. Use the \obj{Color} object to set this option. \item[bg:] The background colour. Use the \obj{Color} object to set this option. \end{description} \begin{figure}[h] \centerline{\includegraphics[height=1cm]{electronics/Resistor}} \caption{Resistor object} \label{fig:resistor} \end{figure} \subsection{Capacitor} %%% Capacitor Draws a standard capacitor symbol, with pins extending from the body of the symbol. Object options: \begin{description} \item[width:] The width of the object. \item[sep:] The separation of the two plates of the capacitor. \item[angle:] The rotation angle. \item[pinLength:] The length of the pins extending from the gate. \item[fg:] The foreground colour. Use the \obj{Color} object to set this option. \item[bg:] The background colour. Use the \obj{Color} object to set this option. \end{description} \begin{figure}[h] \centerline{\includegraphics[height=1cm]{electronics/Capacitor}} \caption{Capacitor object} \label{fig:capacitor} \end{figure} pyscript-0.6.1/doc/manual/pyscriptOptics.tex0000644000175000001440000003674710441263767020732 0ustar cochraneusers% Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane % % This program is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License % as published by the Free Software Foundation; either version 2 % of the License, or (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program; if not, write to the Free Software % Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. % $Id: pyscriptOptics.tex,v 1.7 2006/06/06 11:33:11 paultcochrane Exp $ \chapter{PyScript Optics Object Package} This package is a library of functions and objects for use in constructing optical circuits such as those used in interferometers and optical setups useful in scientific applications. \section{Examples} \subsection{Michelson-Morely Interferometer} This example shows how to construct one of the simplest interferometers with \pyscript. A laser is incident onto a 50:50 beam splitter, the light beam then being split equally into the two ``arms'' of the interferometer. At the end of each arm is a mirror which reflects the light directly back to the beam splitter which recombines the light, and the output of the interferometer is measured at the detector (below the beam splitter in the diagram). As the length of one of the arms changes the voltage measured at the detector will vary sinusoidally. In this example we are using the \obj{Laser}, \obj{Mirror}, \obj{BSBox} and \obj{Detector} objects of the \lib{optics} library. \begin{python} # Michelson-Morely interferometer # import the pyscript objects from pyscript import * # import the optics library from pyscript.lib.optics import * # set up some handy defaults defaults.units=UNITS['cm'] # initialise a laser beam beam = Group() # the laser laser = Laser(c=P(0,0)) # the beam splitter bs = BSBox(height=0.7) bs.w = laser.e + P(1,0) beam.append(Path(laser.e, bs.w)) # the "north" mirror mirror_n = Mirror(angle=90) mirror_n.s = bs.n + P(0,3) beam.append(Path(bs.n, mirror_n.s)) # the "east" mirror mirror_e = Mirror() mirror_e.w = bs.e + P(3,0) beam.append(Path(bs.e, mirror_e.w)) # the detector det = Detector(angle=90) det.n = bs.s + P(0,-1) beam.append(Path(bs.s, det.n)) # make the beam red beam.apply(fg=Color("red")) # collect all the objects together fig = Group( laser, bs, mirror_n, mirror_e, det, beam, ) # render the figure render(fig, file="michelson-morely.eps") \end{python} \begin{figure}[ht] \centerline{\includegraphics[width=\figwidth]{optics/michelson-morely}} \caption{Michelson-Morely interferometer} \label{fig:michelson-morely} \end{figure} \subsection{Mach-Zehnder Interferometer} Another commonly used interferometer is the Mach-Zehnder interferometer. In this design there are two beam splitters. The light is split on the first beam splitter, and travels down each arm of the interferometer to two mirrors which recombine the light on the second beam splitter, the output being detected by two detectors at the two output ports of the second beam splitter. This interferometer is commonly used for explaining such concepts as Quantum Non-Demolition experiments, and other ``quantum weirdness'' associated with light. \begin{python} # Mach-Zehnder interferometer # import the pyscript objects from pyscript import * # import the optics library from pyscript.lib.optics import * # set up some handy defaults defaults.units=UNITS['cm'] # initialise a laser beam beam = Group() # the laser laser = Laser(c=P(0,0)) # the "west" beam splitter bs_w = BSBox(height=0.7) bs_w.w = laser.e + P(1,0) beam.append(Path(laser.e, bs_w.w)) # the "north" mirror mirror_n = Mirror(angle=45) mirror_n.s = bs_w.n + P(0,3) beam.append(Path(bs_w.n, mirror_n.c)) # the "east" mirror mirror_e = Mirror(angle=45) mirror_e.w = bs_w.e + P(3,0) beam.append(Path(bs_w.e, mirror_e.c)) # the "east" beam splitter bs_e = BSBox(height=0.7) bs_e.c = P(mirror_e.c.x, mirror_n.c.y) beam.append(Path(mirror_e.c, bs_e.s)) beam.append(Path(mirror_n.c, bs_e.w)) # the "north" detector det_n = Detector(angle=-90) det_n.s = bs_e.n + P(0,1) beam.append(Path(bs_e.n, det_n.s)) # the "east" detector det_e = Detector() det_e.w = bs_e.e + P(1,0) beam.append(Path(bs_e.e, det_e.w)) # set the colour of the beam beam.apply(fg=Color("red")) # collect all the objects together fig = Group( laser, bs_w, mirror_n, mirror_e, bs_e, det_n, det_e, beam, ) # render the figure render(fig, file="mach-zehnder.eps") \end{python} \begin{figure}[ht] \centerline{\includegraphics[width=\figwidth]{optics/mach-zehnder}} \caption{Mach-Zehnder interferometer} \label{fig:mach-zehnder} \end{figure} \subsection{Sagnac Interferometer} The Sagnac interferometer is another of the major interferometer configurations. The light is split on the beam splitter and procedes around the interferometer in opposite directions then being recombined on the same beam splitter and the output interference is read at the output port (where the detector is in the diagram This interferometer can be used in optical gyroscopes because a rotation in the plane of the interferometer can be measured since the light traveling in one direction travels a different distance to the light traveling in the other direction, hence giving a path difference and interference fringes. An interesting point about the script below is that the ``north-east'' mirror has its location set by the y position of the centre of the ``north'' mirror and its x position set by the centre of the ``east'' mirror. This means that if one changes the location of either of these two mirrors then the position of the ``north-east'' mirror changes appropriately. \begin{python} # Sagnac interferometer # import the pyscript objects from pyscript import * # import the optics library from pyscript.lib.optics import * # set up some handy defaults defaults.units=UNITS['cm'] # initialise a laser beam beam = Group() # the laser laser = Laser(c=P(0,0)) # the beam splitter bs = BSBox(height=0.7) bs.w = laser.e + P(1,0) beam.append(Path(laser.e, bs.w)) # the "north" mirror mirror_n = Mirror(angle=45) mirror_n.s = bs.n + P(0,2) beam.append(Path(bs.n, mirror_n.c)) # the "east" mirror mirror_e = Mirror(angle=45) mirror_e.w = bs.e + P(3,0) beam.append(Path(bs.e, mirror_e.c)) # the "north-east" mirror mirror_ne = Mirror(angle=135) mirror_ne.c = P(mirror_e.c.x, mirror_n.c.y) beam.append(Path(mirror_n.c, mirror_ne.c)) beam.append(Path(mirror_e.c, mirror_ne.c)) # the detector det = Detector(angle=90) det.n = bs.s + P(0,-1) beam.append(Path(bs.s, det.n)) # set the colour of the beam beam.apply(fg=Color("red")) # collect all the objects together fig = Group( beam, laser, bs, mirror_n, mirror_e, mirror_ne, det, ) # render the figure render(fig, file="sagnac.eps") \end{python} \begin{figure}[ht] \centerline{\includegraphics[width=\figwidth]{optics/sagnac}} \caption{Sagnac interferometer} \label{fig:sagnac} \end{figure} \subsection{A Fabry-Perot Cavity} A Fabry-Perot cavity is basically just two parallel mirrors facing one another and a laser field injected into the cavity via one of the mirrors (which might be 95\% reflective, say). In the setup shown here we have a Pound-Drever-Hall setup which can allow for stabilisation of the cavity via the electro-optical modulator (EOM). The diagram in \fig{fig:fabry-perot-pdh} shows such a cavity with a \obj{FreeSpace()} object used as well. This is something important for gravitational wave detectors as they have a lot of free space in the arms of the interferometers! Also introduced in this example is the \obj{Modulator()} object. \begin{python} # a Fabry-Perot cavity in a Pound-Drever-Hall setup # import the pyscript objects from pyscript import * # import the optics library from pyscript.lib.optics import * # set up some handy defaults defaults.units=UNITS['cm'] # initialise a laser beam beam = Group() # the laser laser = Laser(c=P(0,0)) # the EOM eom = Modulator() eom.w = laser.e + P(1,0) beam.append(Path(laser.e, eom.w)) # the "west" mirror mirror_w = Mirror() mirror_w.w = eom.e + P(1,0) beam.append(Path(eom.e, mirror_w.w)) # some free space fs = FreeSpace() fs.w = mirror_w.e + P(1,0) beam.append(Path(mirror_w.e, fs.w)) # the "east" mirror mirror_e = Mirror() mirror_e.w = fs.e + P(1,0) beam.append(Path(fs.e, mirror_e.w)) # set the colour of the beam beam.apply(fg=Color("red")) # collect all the objects together fig = Group( beam, laser, eom, mirror_e, mirror_w, fs, ) # render the figure render(fig, file="fabry-perot_pdh.eps") \end{python} \begin{figure}[ht] \centerline{\includegraphics[width=\figwidth]{optics/fabry-perot_pdh}} \caption{Fabry-Perot cavity in Pound-Drever-Hall setup.} \label{fig:fabry-perot-pdh} \end{figure} \section{Objects} \subsection{BSBox} A beam splitter shown as a box. Some beam splitters are two prisms of glass bonded together and look like a box with a line along the diagonal when viewed from above, hence the look of this object. Object options: \begin{description} \item[height:] The height of the beam splitter, its width is equal to its height. \item[angle:] Rotation angle. The beam splitter can be returned already turned to the desired angle (in degrees). \item[fg:] The foreground colour. Use the \obj{Color} object to set this option. \item[bg:] The background colour. Use the \obj{Color} object to set this option. \end{description} \begin{figure}[!ht] \centerline{\includegraphics[height=1cm]{optics/BSBox}} \caption{BSBox object} \label{fig:bsbox} \end{figure} \subsection{BSLine} A beam splitter shown as a thin box at a default angle of 45 degrees. Some beam splitters are partially silvered mirrors, hence the look of this object. Object options: \begin{description} \item[height:] The height of the beam splitter. \item[thickness:] The thickness of the beam splitter. \item[angle:] Rotation angle. The beam splitter can be returned already turned to the desired angle (in degrees). The default angle is 45 degrees. \item[fg:] The foreground colour. Use the \obj{Color} object to set this option. \item[bg:] The background colour. Use the \obj{Color} object to set this option. \end{description} \begin{figure}[!ht] \centerline{\includegraphics[height=1cm]{optics/BSLine}} \caption{BSLine object} \label{fig:bsline} \end{figure} \subsection{Detector} A simple D-shaped detector symbol. Object options: \begin{description} \item[height:] The height of the detector \item[width:] The width of the detector. \item[angle:] Rotation angle. The detector can be returned already turned to the desired angle (in degrees). \item[pad:] Space padding around the object. \item[fg:] The foreground colour. Use the \obj{Color} object to set this option. \item[bg:] The background colour. Use the \obj{Color} object to set this option. \end{description} \begin{figure}[!ht] \centerline{\includegraphics[height=1cm]{optics/Detector}} \caption{Detector object} \label{fig:detector} \end{figure} \subsection{Free Space} This object generates a dashed box where the free space is. This can be useful if one wants to highlight that the free space in one arm of an interferometer has a particular refractive index, or some other property. Object options: \begin{description} \item[height:] The height of the free space region. \item[width:] The width of the free space region. \item[angle:] Rotation angle. \item[fg:] The foreground colour. Use the \obj{Color} object to set this option. \item[bg:] The background colour. Use the \obj{Color} object to set this option. \end{description} \begin{figure}[!ht] \centerline{\includegraphics[height=1cm]{optics/FreeSpace}} \caption{Free Space object} \label{fig:free_space} \end{figure} \subsection{Lambda Plate} This object is used to describe changes in an optical beam of, for example, a half or a quarter of a wavelength. Object options: \begin{description} \item[height:] The height of the lambda plate. \item[width:] The width of the lambda plate. \item[angle:] Rotation angle. \item[fg:] The foreground colour. Use the \obj{Color} object to set this option. \item[bg:] The background colour. Use the \obj{Color} object to set this option. \end{description} \begin{figure}[!ht] \centerline{\includegraphics[height=1cm]{optics/LambdaPlate}} \caption{Lambda Plate object} \label{fig:lambda_plate} \end{figure} \subsection{Laser} At present all this object does is generate a simple box. However, in the future we hope to make this somewhat better looking. \begin{figure}[!ht] \centerline{\includegraphics[height=1cm]{optics/Laser}} \caption{Laser object} \label{fig:laser} \end{figure} \subsection{Lens} Generate a convex or concave lens. Object options: \begin{description} \item[height:] The height of the lens. \item[thickness:] The thickness of the lens. \item[angle:] Rotation angle. \item[type:] A string specifying if the lens is convex or concave. Default is \ttt{concave}. \item[fg:] The foreground colour. Use the \obj{Color} object to set this option. \item[bg:] The background colour. Use the \obj{Color} object to set this option. \end{description} \begin{figure}[!ht] \centerline{\includegraphics[height=1cm]{optics/Lens}} \caption{Lens object} \label{fig:lens} \end{figure} \subsection{Mirror} A very simple mirror symbol. At present doesn't handle concave/convex mirrors, but will do hopefully in the future. Object options: \begin{description} \item[length:] The length of the mirror. \item[thickness:] The thickness of the mirror. \item[angle:] Rotation angle. \item[flicks:] Should ``flicks'' indicating the back of the mirror be put on? This is a boolean value, and by default this is \ttt{False}. \item[fg:] The foreground colour. Use the \obj{Color} object to set this option. \item[bg:] The background colour. Use the \obj{Color} object to set this option. \end{description} \begin{figure}[!ht] \centerline{\includegraphics[height=1cm]{optics/Mirror}} \caption{Mirror object} \label{fig:mirror} \end{figure} \subsection{Modulator} Generates a modulator symbol, such as for an acousto-optical modulator, or electro-optical modulator. This is simply a box with two lines on either side. Object options: \begin{description} \item[height:] The height of the modulator. \item[width:] The width of the modulator. \item[angle:] Rotation angle. \item[fg:] The foreground colour. Use the \obj{Color} object to set this option. \item[bg:] The background colour. Use the \obj{Color} object to set this option. \end{description} \begin{figure}[!ht] \centerline{\includegraphics[height=1cm]{optics/Modulator}} \caption{Modulator object} \label{fig:modulator} \end{figure} \subsection{Phase Shifter} Produces a triangle shape with the point directed upwards by default. This component is used in optics to vary the phase of an optical signal. Object options: \begin{description} \item[height:] The height of the phaser shifter. \item[width:] The width of the phaser shifter. \item[angle:] Rotation angle. \item[fg:] The foreground colour. Use the \obj{Color} object to set this option. \item[bg:] The background colour. Use the \obj{Color} object to set this option. \end{description} \begin{figure}[!ht] \centerline{\includegraphics[height=1cm]{optics/PhaseShifter}} \caption{Phase Shifter object} \label{fig:phase_shifter} \end{figure} pyscript-0.6.1/doc/manual/pyscript_defs.tex0000644000175000001440000001677510441263767020550 0ustar cochraneusers% Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane % % This program is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License % as published by the Free Software Foundation; either version 2 % of the License, or (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program; if not, write to the Free Software % Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. % $Id: pyscript_defs.tex,v 1.11 2006/06/06 11:33:11 paultcochrane Exp $ \usepackage{graphicx,color} \usepackage{amsmath} \usepackage{makeidx} \usepackage{alltt} %\usepackage{verbatim} %\usepackage{shortvrb} %\usepackage{verbatimfiles} \usepackage{rotating} \usepackage{html} \usepackage{xspace} \usepackage{colortbl} \usepackage{hyperref} % -------------------------------------------------------------- % Make the sectioning a bit more fancy % -------------------------------------------------------------- \usepackage{titlesec} \usepackage{fancyhdr} \usepackage{fancyvrb} \titleformat{\chapter}[display] {\normalfont\LARGE\filcenter\sffamily} {}{1pc} {\titlerule[1pt]% \vspace{1pt}% \titlerule \vspace{2ex}\thechapter: } [\vspace{2ex}\titlerule] %\titleformat{\section} %{\titlerule %\vspace{.8ex}% %\normalfont\itshape} %{\thesection.}{.5em}{} %\titleformat{\section}[frame] %{\normalfont} %{\filright %\footnotesize %\enspace\thesection\enspace} %{8pt}{\Large\bfseries\filcenter} \titleformat{\section}[frame] {\normalfont} {}{1ex}{\Large\thesection.\bfseries\filcenter} \titleformat{\subsection} {\normalfont\itshape\bfseries} {\thesubsection.}{.5em}{} % -------------------------------------------------------------- % Some formating stuff % -------------------------------------------------------------- % I think it looks nicer if new paragraphs aren't indented % as we have lots of whitespace anyway. just increase the % inter-paragraph space \setlength{\parindent}{0pt} \addtolength{\parskip}{.5\baselineskip} \newcommand{\pyscript}{\textsl{\texttt{PyScript}}\xspace} % -------------------------------------------------------------- % sundry shite % -------------------------------------------------------------- \newcommand {\tbf}[1] {\textbf{#1}} \newcommand {\tit}[1] {\textit{#1}} \newcommand {\tmd}[1] {\textmd{#1}} \newcommand {\trm}[1] {\textrm{#1}} \newcommand {\tsc}[1] {\textsc{#1}} \newcommand {\tsf}[1] {\textsf{#1}} \newcommand {\tsl}[1] {\textsl{#1}} \newcommand {\ttt}[1] {\texttt{#1}} \newcommand {\tup}[1] {\textup{#1}} \newcommand {\mbf}[1] {\mathbf{#1}} \newcommand {\mmd}[1] {\mathmd{#1}} \newcommand {\mrm}[1] {\mathrm{#1}} \newcommand {\msc}[1] {\mathsc{#1}} \newcommand {\msf}[1] {\mathsf{#1}} \newcommand {\msl}[1] {\mathsl{#1}} \newcommand {\mtt}[1] {\mathtt{#1}} \newcommand {\mup}[1] {\mathup{#1}} % spell things correctly (like shite?) \newenvironment{centre}{\begin{center}}{\end{center}} \newenvironment{itemise}{\begin{itemize}}{\end{itemize}} % define commands for describing functions, arguments and stuff \newenvironment{funcDesc}{\vspace*{2mm}\begin{description}}{\end{description}\vspace*{2mm}} \newenvironment{funcOpts}{\begin{description}}{\end{description}} \newenvironment{funcExCode}{The code:\begin{alltt}\MakeShortVerb{\|}}{\DeleteShortVerb{\|}\end{alltt}} \newenvironment{funcExOut}{Gives the output:\\}{} \newcommand {\funcName}[1] {\ttt{#1}} % function name \newcommand {\funcArg}[1] {\tit{#1}} % function argument \newcommand {\reqArg}[1] {\tit{#1}} % required function argument \newcommand {\optArg}[1] {\tit{#1}} % optional function argument \newcommand {\defVal}[1] {\ttt{#1}} % default value of argument \newcommand {\class} {\tbf{class\xspace}} \newcommand {\obj}[1] {\ttt{#1}} \newcommand {\lib}[1] {\ttt{#1}} % option: first argument is option name, second argument is default % value if any \newcommand {\option}[1] {\item[\optArg{#1}: ]} \newcommand {\progName}[1] {\ttt{#1}} % external program name \newcommand {\fileName}[1] {\tbf{\tit{#1}}} % file name \newcommand {\figwidth} {60mm} \newcommand {\fig}[1] {Figure~\ref{#1}} \newcommand {\Sec}[1] {Section~\ref{#1}} \usepackage{natbib} \usepackage[nottoc]{tocbibind} % allows the table of contents, bibliography % and index to be added to the table of % contents if desired, the option used % here specifies that the table of % contents is not to be added. % tocbibind needs to be after natbib % otherwise bits of it get trampled. % -------------------------------------------------------------- % Code format within \Verb % -------------------------------------------------------------- \definecolor{pycolor}{rgb}{0,0.4,0} \DefineVerbatimEnvironment{python}{Verbatim} {frame=leftline,framerule=.5mm,rulecolor=\color{pycolor}, formatcom=\color{pycolor}\small,fontshape=sl} %\DefineShortVerb[formatcom=\color{dgreen}\small,fontshape=sl]{\|} \RecustomVerbatimCommand{\Verb}{Verb}{formatcom=\color{pycolor}\small,fontshape=sl} \newcommand {\vrb}[1] {\Verb|#1|} % -------------------------------------------------------------- % example environment % -------------------------------------------------------------- %\newenvironment{example}{\begin{description}}{\end{description}} %\newenvironment{example}{\begin{center}\begin{tabular}{|>{\columncolor[gray]{.9}}c|}\hline\\\begin{minipage}{.75\textwidth}}% %{\end{minipage}\\\hline\end{tabular}\end{center}} %\newenvironment{example}{\setlength{unitlength}{.8\textwidth}% %\begin{center}% %\begin{picture}(0,0)(-1,0)% %\put(0,0){\line(1,0){.4\textwidth}\line(0,-1){1ex}}% %\put(0,0){\line(-1,0){.4\textwidth}\line(0,-1){1ex}}% %\end{picture}\\\begin{minipage}{.75\textwidth}}% %{\end{minipage}\\x\end{center}} \newenvironment{example}{% \begin{center}% %\makebox{\rule{.4\textwidth}{1pt}Hello\rule{.4\textwidth}{1pt}}\\[5mm] \makebox[.8\textwidth]{\rule[-.92ex]{1pt}{1ex}\hrulefill\ \raisebox{-.85ex}{Example}\ \hrulefill\rule[-.92ex]{1pt}{1ex}}\\[5mm] \begin{minipage}{.75\textwidth}}% {\end{minipage}\\[5mm] \makebox[.8\textwidth]{\rule{1pt}{1ex}\hrulefill\rule{1pt}{1ex}}\end{center}} %\newenvironment{example}{% %\begin{center}% %\makebox[.8\textwidth]{\rule[-1ex]{1pt}{1ex}\hrulefill\ \raisebox{-1ex}{Example}\ \hrulefill\rule[-1ex]{1pt}{1ex}}\\[5mm] %\begin{minipage}{.75\textwidth}}% %{\end{minipage}\\[5mm] %\makebox[.8\textwidth]{\rule{1pt}{1ex}\hrulefill\rule{1pt}{1ex}}\end{center}} % -------------------------------------------------------------- % Page layout % -------------------------------------------------------------- % Page layout ... set for A4 \setlength{\topmargin}{-1.0 cm} \setlength{\oddsidemargin}{0 cm} \setlength{\evensidemargin}{0 cm} \setlength{\textwidth}{18.5 cm} \addtolength{\textwidth}{-\marginparsep} \addtolength{\textwidth}{-\marginparwidth} \setlength{\textheight}{26.5 cm} \addtolength{\textheight}{-\footskip} \pagestyle{fancyplain} \renewcommand{\chaptermark}[1]{\markboth{Chapter \thechapter: #1}{}} \renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}} \lhead[\fancyplain{}{\bfseries\thepage}]{\fancyplain{}{\bfseries\rightmark}} \rhead[\fancyplain{}{\bfseries\leftmark}]{\fancyplain{}{\bfseries\thepage}} \rfoot{} \cfoot{} pyscript-0.6.1/pyscript/0000755000175000001440000000000010441274723014755 5ustar cochraneuserspyscript-0.6.1/pyscript/fonts/0000755000175000001440000000000010441274723016106 5ustar cochraneuserspyscript-0.6.1/pyscript/fonts/__init__.py0000644000175000001440000000010510423157534020213 0ustar cochraneusers""" Fonts module for PyScript """ __revision__ = '$Revision: 1.3 $' pyscript-0.6.1/pyscript/fonts/courier.py0000644000175000001440000001270410423157534020134 0ustar cochraneusers""" PyScript font module for Courier """ __revision__ = '$Revision: 1.3 $' attrs = { 'FontName' : 'Courier', 'CharacterSet' : 'ExtendedRoman', 'FontBBox' : (-23, -250, 715, 805), 'Weight' : 'Medium', 'CapHeight' : 562, 'FamilyName' : 'Courier', 'IsFixedPitch' : 'true', 'Notice' : 'Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.', 'StdVW' : 51, 'EncodingScheme' : 'AdobeStandardEncoding', 'StdHW' : 51, 'Version' : '003.000', 'UnderlinePosition' : -100, 'XHeight' : 426, 'UnderlineThickness' : 50, 'Descender' : -157, 'ItalicAngle' : 0, 'Ascender' : 629, 'FullName' : 'Courier', } chars = { 32 : (600, 0, 0, 0, 0), 33 : (600, 236, -15, 364, 572), 34 : (600, 187, 328, 413, 562), 35 : (600, 93, -32, 507, 639), 36 : (600, 105, -126, 496, 662), 37 : (600, 81, -15, 518, 622), 38 : (600, 63, -15, 538, 543), 39 : (600, 213, 328, 376, 562), 40 : (600, 269, -108, 440, 622), 41 : (600, 160, -108, 331, 622), 42 : (600, 116, 257, 484, 607), 43 : (600, 80, 44, 520, 470), 44 : (600, 181, -112, 344, 122), 45 : (600, 103, 231, 497, 285), 46 : (600, 229, -15, 371, 109), 47 : (600, 125, -80, 475, 629), 48 : (600, 106, -15, 494, 622), 49 : (600, 96, 0, 505, 622), 50 : (600, 70, 0, 471, 622), 51 : (600, 75, -15, 466, 622), 52 : (600, 78, 0, 500, 622), 53 : (600, 92, -15, 497, 607), 54 : (600, 111, -15, 497, 622), 55 : (600, 82, 0, 483, 607), 56 : (600, 102, -15, 498, 622), 57 : (600, 96, -15, 489, 622), 58 : (600, 229, -15, 371, 385), 59 : (600, 181, -112, 371, 385), 60 : (600, 41, 42, 519, 472), 61 : (600, 80, 138, 520, 376), 62 : (600, 66, 42, 544, 472), 63 : (600, 129, -15, 492, 572), 64 : (600, 77, -15, 533, 622), 65 : (600, 3, 0, 597, 562), 66 : (600, 43, 0, 559, 562), 67 : (600, 41, -18, 540, 580), 68 : (600, 43, 0, 574, 562), 69 : (600, 53, 0, 550, 562), 70 : (600, 53, 0, 545, 562), 71 : (600, 31, -18, 575, 580), 72 : (600, 32, 0, 568, 562), 73 : (600, 96, 0, 504, 562), 74 : (600, 34, -18, 566, 562), 75 : (600, 38, 0, 582, 562), 76 : (600, 47, 0, 554, 562), 77 : (600, 4, 0, 596, 562), 78 : (600, 7, -13, 593, 562), 79 : (600, 43, -18, 557, 580), 80 : (600, 79, 0, 558, 562), 81 : (600, 43, -138, 557, 580), 82 : (600, 38, 0, 588, 562), 83 : (600, 72, -20, 529, 580), 84 : (600, 38, 0, 563, 562), 85 : (600, 17, -18, 583, 562), 86 : (600, -4, -13, 604, 562), 87 : (600, -3, -13, 603, 562), 88 : (600, 23, 0, 577, 562), 89 : (600, 24, 0, 576, 562), 90 : (600, 86, 0, 514, 562), 91 : (600, 269, -108, 442, 622), 92 : (600, 118, -80, 482, 629), 93 : (600, 158, -108, 331, 622), 94 : (600, 94, 354, 506, 622), 95 : (600, 0, -125, 600, -75), 96 : (600, 224, 328, 387, 562), 97 : (600, 53, -15, 559, 441), 98 : (600, 14, -15, 575, 629), 99 : (600, 66, -15, 529, 441), 100 : (600, 45, -15, 591, 629), 101 : (600, 66, -15, 548, 441), 102 : (600, 114, 0, 531, 629), 103 : (600, 45, -157, 566, 441), 104 : (600, 18, 0, 582, 629), 105 : (600, 95, 0, 505, 657), 106 : (600, 82, -157, 410, 657), 107 : (600, 43, 0, 580, 629), 108 : (600, 95, 0, 505, 629), 109 : (600, -5, 0, 605, 441), 110 : (600, 26, 0, 575, 441), 111 : (600, 62, -15, 538, 441), 112 : (600, 9, -157, 555, 441), 113 : (600, 45, -157, 591, 441), 114 : (600, 60, 0, 559, 441), 115 : (600, 80, -15, 513, 441), 116 : (600, 87, -15, 530, 561), 117 : (600, 21, -15, 562, 426), 118 : (600, 10, -10, 590, 426), 119 : (600, -4, -10, 604, 426), 120 : (600, 20, 0, 580, 426), 121 : (600, 7, -157, 592, 426), 122 : (600, 99, 0, 502, 426), 123 : (600, 182, -108, 437, 622), 124 : (600, 275, -250, 326, 750), 125 : (600, 163, -108, 418, 622), 126 : (600, 63, 197, 540, 320), 161 : (600, 236, -157, 364, 430), 162 : (600, 96, -49, 500, 614), 163 : (600, 84, -21, 521, 611), 164 : (600, 92, -57, 509, 665), 165 : (600, 26, 0, 574, 562), 166 : (600, 4, -143, 539, 622), 167 : (600, 113, -78, 488, 580), 168 : (600, 73, 58, 527, 506), 169 : (600, 259, 328, 341, 562), 170 : (600, 143, 328, 471, 562), 171 : (600, 37, 70, 563, 446), 172 : (600, 149, 70, 451, 446), 173 : (600, 149, 70, 451, 446), 174 : (600, 3, 0, 597, 629), 175 : (600, 3, 0, 597, 629), 177 : (600, 75, 231, 525, 285), 178 : (600, 141, -78, 459, 580), 179 : (600, 141, -78, 459, 580), 180 : (600, 222, 189, 378, 327), 182 : (600, 50, -78, 511, 562), 183 : (600, 172, 130, 428, 383), 184 : (600, 213, -134, 376, 100), 185 : (600, 143, -134, 457, 100), 186 : (600, 143, 328, 457, 562), 187 : (600, 37, 70, 563, 446), 188 : (600, 37, -15, 563, 111), 189 : (600, 3, -15, 600, 622), 191 : (600, 108, -157, 471, 430), 193 : (600, 151, 497, 378, 672), 194 : (600, 242, 497, 469, 672), 195 : (600, 124, 477, 476, 654), 196 : (600, 105, 489, 503, 606), 197 : (600, 120, 525, 480, 565), 198 : (600, 153, 501, 447, 609), 199 : (600, 249, 537, 352, 640), 200 : (600, 148, 537, 453, 640), 202 : (600, 218, 463, 382, 627), 203 : (600, 224, -151, 362, 10), 205 : (600, 133, 497, 540, 672), 206 : (600, 211, -172, 407, 4), 207 : (600, 124, 492, 476, 669), 208 : (600, 0, 231, 600, 285), 225 : (600, 3, 0, 550, 562), 227 : (600, 156, 249, 442, 580), 232 : (600, 47, 0, 554, 562), 233 : (600, 43, -80, 557, 629), 234 : (600, 7, 0, 567, 562), 235 : (600, 157, 249, 443, 580), 241 : (600, 19, -15, 570, 441), 245 : (600, 95, 0, 505, 426), 248 : (600, 95, 0, 505, 629), 249 : (600, 62, -80, 538, 506), 250 : (600, 19, -15, 559, 441), 251 : (600, 48, -15, 588, 629), -1 : (600, 0, 0, 0, 0), } kerning = { } comments = [ 'Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.', 'Creation Date: Thu May 1 17:27:09 1997', 'UniqueID 43050', 'VMusage 39754 50779', ] composites = { } pyscript-0.6.1/pyscript/fonts/courier_bold.py0000644000175000001440000001267410423157534021142 0ustar cochraneusers""" PyScript font module for Courier Bold """ __revision__ = '$Revision: 1.3 $' attrs = { 'FontName' : 'Courier-Bold', 'CharacterSet' : 'ExtendedRoman', 'FontBBox' : (-113, -250, 749, 801), 'Weight' : 'Bold', 'CapHeight' : 562, 'FamilyName' : 'Courier', 'IsFixedPitch' : 'true', 'Notice' : 'Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.', 'StdVW' : 106, 'EncodingScheme' : 'AdobeStandardEncoding', 'StdHW' : 84, 'Version' : '003.000', 'UnderlinePosition' : -100, 'XHeight' : 439, 'UnderlineThickness' : 50, 'Descender' : -157, 'ItalicAngle' : 0, 'Ascender' : 629, 'FullName' : 'Courier Bold', } chars = { 32 : (600, 0, 0, 0, 0), 33 : (600, 202, -15, 398, 572), 34 : (600, 135, 277, 465, 562), 35 : (600, 56, -45, 544, 651), 36 : (600, 82, -126, 519, 666), 37 : (600, 5, -15, 595, 616), 38 : (600, 36, -15, 546, 543), 39 : (600, 171, 277, 423, 562), 40 : (600, 219, -102, 461, 616), 41 : (600, 139, -102, 381, 616), 42 : (600, 91, 219, 509, 601), 43 : (600, 71, 39, 529, 478), 44 : (600, 123, -111, 393, 174), 45 : (600, 100, 203, 500, 313), 46 : (600, 192, -15, 408, 171), 47 : (600, 98, -77, 502, 626), 48 : (600, 87, -15, 513, 616), 49 : (600, 81, 0, 539, 616), 50 : (600, 61, 0, 499, 616), 51 : (600, 63, -15, 501, 616), 52 : (600, 53, 0, 507, 616), 53 : (600, 70, -15, 521, 601), 54 : (600, 90, -15, 521, 616), 55 : (600, 55, 0, 494, 601), 56 : (600, 83, -15, 517, 616), 57 : (600, 79, -15, 510, 616), 58 : (600, 191, -15, 407, 425), 59 : (600, 123, -111, 408, 425), 60 : (600, 66, 15, 523, 501), 61 : (600, 71, 118, 529, 398), 62 : (600, 77, 15, 534, 501), 63 : (600, 98, -14, 501, 580), 64 : (600, 16, -15, 584, 616), 65 : (600, -9, 0, 609, 562), 66 : (600, 30, 0, 573, 562), 67 : (600, 22, -18, 560, 580), 68 : (600, 30, 0, 594, 562), 69 : (600, 25, 0, 560, 562), 70 : (600, 39, 0, 570, 562), 71 : (600, 22, -18, 594, 580), 72 : (600, 20, 0, 580, 562), 73 : (600, 77, 0, 523, 562), 74 : (600, 37, -18, 601, 562), 75 : (600, 21, 0, 599, 562), 76 : (600, 39, 0, 578, 562), 77 : (600, -2, 0, 602, 562), 78 : (600, 8, -12, 610, 562), 79 : (600, 22, -18, 578, 580), 80 : (600, 48, 0, 559, 562), 81 : (600, 32, -138, 578, 580), 82 : (600, 24, 0, 599, 562), 83 : (600, 47, -22, 553, 582), 84 : (600, 21, 0, 579, 562), 85 : (600, 4, -18, 596, 562), 86 : (600, -13, 0, 613, 562), 87 : (600, -18, 0, 618, 562), 88 : (600, 12, 0, 588, 562), 89 : (600, 12, 0, 589, 562), 90 : (600, 62, 0, 539, 562), 91 : (600, 245, -102, 475, 616), 92 : (600, 99, -77, 503, 626), 93 : (600, 125, -102, 355, 616), 94 : (600, 108, 250, 492, 616), 95 : (600, 0, -125, 600, -75), 96 : (600, 178, 277, 428, 562), 97 : (600, 35, -15, 570, 454), 98 : (600, 0, -15, 584, 626), 99 : (600, 40, -15, 545, 459), 100 : (600, 20, -15, 591, 626), 101 : (600, 40, -15, 563, 454), 102 : (600, 83, 0, 547, 626), 103 : (600, 30, -146, 580, 454), 104 : (600, 5, 0, 592, 626), 105 : (600, 77, 0, 523, 658), 106 : (600, 63, -146, 440, 658), 107 : (600, 20, 0, 585, 626), 108 : (600, 77, 0, 523, 626), 109 : (600, -22, 0, 626, 454), 110 : (600, 18, 0, 592, 454), 111 : (600, 30, -15, 570, 454), 112 : (600, -1, -142, 570, 454), 113 : (600, 20, -142, 591, 454), 114 : (600, 47, 0, 580, 454), 115 : (600, 68, -17, 535, 459), 116 : (600, 47, -15, 532, 562), 117 : (600, -1, -15, 569, 439), 118 : (600, -1, 0, 601, 439), 119 : (600, -18, 0, 618, 439), 120 : (600, 6, 0, 594, 439), 121 : (600, -4, -142, 601, 439), 122 : (600, 81, 0, 520, 439), 123 : (600, 160, -102, 464, 616), 124 : (600, 255, -250, 345, 750), 125 : (600, 136, -102, 440, 616), 126 : (600, 71, 153, 530, 356), 161 : (600, 202, -146, 398, 449), 162 : (600, 66, -49, 518, 614), 163 : (600, 72, -28, 558, 611), 164 : (600, 25, -60, 576, 661), 165 : (600, 10, 0, 590, 562), 166 : (600, -30, -131, 572, 616), 167 : (600, 83, -70, 517, 580), 168 : (600, 54, 49, 546, 517), 169 : (600, 227, 277, 373, 562), 170 : (600, 71, 277, 535, 562), 171 : (600, 8, 70, 553, 446), 172 : (600, 141, 70, 459, 446), 173 : (600, 141, 70, 459, 446), 174 : (600, 12, 0, 593, 626), 175 : (600, 12, 0, 593, 626), 177 : (600, 65, 203, 535, 313), 178 : (600, 106, -70, 494, 580), 179 : (600, 106, -70, 494, 580), 180 : (600, 196, 165, 404, 351), 182 : (600, 6, -70, 576, 580), 183 : (600, 140, 132, 460, 430), 184 : (600, 175, -142, 427, 143), 185 : (600, 65, -142, 529, 143), 186 : (600, 61, 277, 525, 562), 187 : (600, 47, 70, 592, 446), 188 : (600, 26, -15, 574, 116), 189 : (600, -113, -15, 713, 616), 191 : (600, 99, -146, 502, 449), 193 : (600, 132, 508, 395, 661), 194 : (600, 205, 508, 468, 661), 195 : (600, 103, 483, 497, 657), 196 : (600, 89, 493, 512, 636), 197 : (600, 88, 505, 512, 585), 198 : (600, 83, 468, 517, 631), 199 : (600, 230, 498, 370, 638), 200 : (600, 128, 498, 472, 638), 202 : (600, 198, 481, 402, 678), 203 : (600, 205, -206, 387, 0), 205 : (600, 68, 488, 588, 661), 206 : (600, 169, -199, 400, 0), 207 : (600, 103, 493, 497, 667), 208 : (600, -10, 203, 610, 313), 225 : (600, -29, 0, 602, 562), 227 : (600, 147, 196, 453, 580), 232 : (600, 39, 0, 578, 562), 233 : (600, 22, -22, 578, 584), 234 : (600, -25, 0, 595, 562), 235 : (600, 147, 196, 453, 580), 241 : (600, -4, -15, 601, 454), 245 : (600, 77, 0, 523, 439), 248 : (600, 77, 0, 523, 626), 249 : (600, 30, -24, 570, 463), 250 : (600, -18, -15, 611, 454), 251 : (600, 22, -15, 596, 626), -1 : (600, 0, 0, 0, 0), } kerning = { } comments = [ 'Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.', 'Creation Date: Mon Jun 23 16:28:00 1997', 'UniqueID 43048', 'VMusage 41139 52164', ] composites = { } pyscript-0.6.1/pyscript/fonts/courier_boldoblique.py0000644000175000001440000001275510423157534022523 0ustar cochraneusers""" PyScript font module for Courier Bold Oblique """ __revision__ = '$Revision: 1.3 $' attrs = { 'FontName' : 'Courier-BoldOblique', 'CharacterSet' : 'ExtendedRoman', 'FontBBox' : (-57, -250, 869, 801), 'Weight' : 'Bold', 'CapHeight' : 562, 'FamilyName' : 'Courier', 'IsFixedPitch' : 'true', 'Notice' : 'Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.', 'StdVW' : 106, 'EncodingScheme' : 'AdobeStandardEncoding', 'StdHW' : 84, 'Version' : '003.000', 'UnderlinePosition' : -100, 'XHeight' : 439, 'UnderlineThickness' : 50, 'Descender' : -157, 'ItalicAngle' : -12, 'Ascender' : 629, 'FullName' : 'Courier Bold Oblique', } chars = { 32 : (600, 0, 0, 0, 0), 33 : (600, 215, -15, 495, 572), 34 : (600, 211, 277, 585, 562), 35 : (600, 88, -45, 641, 651), 36 : (600, 87, -126, 630, 666), 37 : (600, 101, -15, 625, 616), 38 : (600, 61, -15, 595, 543), 39 : (600, 229, 277, 543, 562), 40 : (600, 265, -102, 592, 616), 41 : (600, 117, -102, 444, 616), 42 : (600, 179, 219, 598, 601), 43 : (600, 114, 39, 596, 478), 44 : (600, 99, -111, 430, 174), 45 : (600, 143, 203, 567, 313), 46 : (600, 206, -15, 427, 171), 47 : (600, 90, -77, 626, 626), 48 : (600, 135, -15, 593, 616), 49 : (600, 93, 0, 562, 616), 50 : (600, 61, 0, 594, 616), 51 : (600, 71, -15, 571, 616), 52 : (600, 81, 0, 559, 616), 53 : (600, 77, -15, 621, 601), 54 : (600, 135, -15, 652, 616), 55 : (600, 147, 0, 622, 601), 56 : (600, 115, -15, 604, 616), 57 : (600, 75, -15, 592, 616), 58 : (600, 205, -15, 480, 425), 59 : (600, 99, -111, 481, 425), 60 : (600, 120, 15, 613, 501), 61 : (600, 96, 118, 614, 398), 62 : (600, 97, 15, 589, 501), 63 : (600, 183, -14, 592, 580), 64 : (600, 65, -15, 642, 616), 65 : (600, -9, 0, 632, 562), 66 : (600, 30, 0, 630, 562), 67 : (600, 74, -18, 675, 580), 68 : (600, 30, 0, 664, 562), 69 : (600, 25, 0, 670, 562), 70 : (600, 39, 0, 684, 562), 71 : (600, 74, -18, 675, 580), 72 : (600, 20, 0, 700, 562), 73 : (600, 77, 0, 643, 562), 74 : (600, 58, -18, 721, 562), 75 : (600, 21, 0, 692, 562), 76 : (600, 39, 0, 636, 562), 77 : (600, -2, 0, 722, 562), 78 : (600, 8, -12, 730, 562), 79 : (600, 74, -18, 645, 580), 80 : (600, 48, 0, 643, 562), 81 : (600, 83, -138, 636, 580), 82 : (600, 24, 0, 617, 562), 83 : (600, 54, -22, 673, 582), 84 : (600, 86, 0, 679, 562), 85 : (600, 101, -18, 716, 562), 86 : (600, 84, 0, 733, 562), 87 : (600, 79, 0, 738, 562), 88 : (600, 12, 0, 690, 562), 89 : (600, 109, 0, 709, 562), 90 : (600, 62, 0, 637, 562), 91 : (600, 223, -102, 606, 616), 92 : (600, 222, -77, 496, 626), 93 : (600, 103, -102, 486, 616), 94 : (600, 171, 250, 556, 616), 95 : (600, -27, -125, 585, -75), 96 : (600, 297, 277, 487, 562), 97 : (600, 61, -15, 593, 454), 98 : (600, 13, -15, 636, 626), 99 : (600, 81, -15, 631, 459), 100 : (600, 60, -15, 645, 626), 101 : (600, 81, -15, 605, 454), 102 : (600, 83, 0, 677, 626), 103 : (600, 40, -146, 674, 454), 104 : (600, 18, 0, 615, 626), 105 : (600, 77, 0, 546, 658), 106 : (600, 36, -146, 580, 658), 107 : (600, 33, 0, 643, 626), 108 : (600, 77, 0, 546, 626), 109 : (600, -22, 0, 649, 454), 110 : (600, 18, 0, 615, 454), 111 : (600, 71, -15, 622, 454), 112 : (600, -32, -142, 622, 454), 113 : (600, 60, -142, 685, 454), 114 : (600, 47, 0, 655, 454), 115 : (600, 66, -17, 608, 459), 116 : (600, 118, -15, 567, 562), 117 : (600, 70, -15, 592, 439), 118 : (600, 70, 0, 695, 439), 119 : (600, 53, 0, 712, 439), 120 : (600, 6, 0, 671, 439), 121 : (600, -21, -142, 695, 439), 122 : (600, 81, 0, 614, 439), 123 : (600, 203, -102, 595, 616), 124 : (600, 201, -250, 505, 750), 125 : (600, 114, -102, 506, 616), 126 : (600, 120, 153, 590, 356), 161 : (600, 196, -146, 477, 449), 162 : (600, 121, -49, 605, 614), 163 : (600, 106, -28, 650, 611), 164 : (600, 22, -60, 708, 661), 165 : (600, 98, 0, 710, 562), 166 : (600, -57, -131, 702, 616), 167 : (600, 74, -70, 620, 580), 168 : (600, 77, 49, 644, 517), 169 : (600, 303, 277, 493, 562), 170 : (600, 190, 277, 594, 562), 171 : (600, 62, 70, 639, 446), 172 : (600, 195, 70, 545, 446), 173 : (600, 165, 70, 514, 446), 174 : (600, 12, 0, 644, 626), 175 : (600, 12, 0, 644, 626), 177 : (600, 108, 203, 602, 313), 178 : (600, 175, -70, 586, 580), 179 : (600, 121, -70, 587, 580), 180 : (600, 248, 165, 461, 351), 182 : (600, 61, -70, 700, 580), 183 : (600, 196, 132, 523, 430), 184 : (600, 144, -142, 458, 143), 185 : (600, 34, -142, 560, 143), 186 : (600, 119, 277, 645, 562), 187 : (600, 71, 70, 647, 446), 188 : (600, 35, -15, 587, 116), 189 : (600, -45, -15, 743, 616), 191 : (600, 100, -146, 509, 449), 193 : (600, 272, 508, 503, 661), 194 : (600, 312, 508, 609, 661), 195 : (600, 212, 483, 607, 657), 196 : (600, 199, 493, 643, 636), 197 : (600, 195, 505, 637, 585), 198 : (600, 217, 468, 652, 631), 199 : (600, 348, 498, 493, 638), 200 : (600, 246, 498, 595, 638), 202 : (600, 319, 481, 528, 678), 203 : (600, 168, -206, 368, 0), 205 : (600, 171, 488, 729, 661), 206 : (600, 143, -199, 367, 0), 207 : (600, 238, 493, 633, 667), 208 : (600, 33, 203, 677, 313), 225 : (600, -29, 0, 708, 562), 227 : (600, 188, 196, 526, 580), 232 : (600, 39, 0, 636, 562), 233 : (600, 48, -22, 673, 584), 234 : (600, 26, 0, 701, 562), 235 : (600, 188, 196, 543, 580), 241 : (600, 21, -15, 652, 454), 245 : (600, 77, 0, 546, 439), 248 : (600, 77, 0, 587, 626), 249 : (600, 54, -24, 638, 463), 250 : (600, 18, -15, 662, 454), 251 : (600, 22, -15, 629, 626), -1 : (600, 0, 0, 0, 0), } kerning = { } comments = [ 'Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.', 'Creation Date: Mon Jun 23 16:28:46 1997', 'UniqueID 43049', 'VMusage 17529 79244', ] composites = { } pyscript-0.6.1/pyscript/fonts/courier_oblique.py0000644000175000001440000001300110423157534021643 0ustar cochraneusers""" PyScript font module for Courier Oblique """ __revision__ = '$Revision: 1.3 $' attrs = { 'FontName' : 'Courier-Oblique', 'CharacterSet' : 'ExtendedRoman', 'FontBBox' : (-27, -250, 849, 805), 'Weight' : 'Medium', 'CapHeight' : 562, 'FamilyName' : 'Courier', 'IsFixedPitch' : 'true', 'Notice' : 'Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.', 'StdVW' : 51, 'EncodingScheme' : 'AdobeStandardEncoding', 'StdHW' : 51, 'Version' : '003.000', 'UnderlinePosition' : -100, 'XHeight' : 426, 'UnderlineThickness' : 50, 'Descender' : -157, 'ItalicAngle' : -12, 'Ascender' : 629, 'FullName' : 'Courier Oblique', } chars = { 32 : (600, 0, 0, 0, 0), 33 : (600, 243, -15, 464, 572), 34 : (600, 273, 328, 532, 562), 35 : (600, 133, -32, 596, 639), 36 : (600, 108, -126, 596, 662), 37 : (600, 134, -15, 599, 622), 38 : (600, 87, -15, 580, 543), 39 : (600, 283, 328, 495, 562), 40 : (600, 313, -108, 572, 622), 41 : (600, 137, -108, 396, 622), 42 : (600, 212, 257, 580, 607), 43 : (600, 129, 44, 580, 470), 44 : (600, 157, -112, 370, 122), 45 : (600, 152, 231, 558, 285), 46 : (600, 238, -15, 382, 109), 47 : (600, 112, -80, 604, 629), 48 : (600, 154, -15, 575, 622), 49 : (600, 98, 0, 515, 622), 50 : (600, 70, 0, 568, 622), 51 : (600, 82, -15, 538, 622), 52 : (600, 108, 0, 541, 622), 53 : (600, 99, -15, 589, 607), 54 : (600, 155, -15, 629, 622), 55 : (600, 182, 0, 612, 607), 56 : (600, 132, -15, 588, 622), 57 : (600, 93, -15, 574, 622), 58 : (600, 238, -15, 441, 385), 59 : (600, 157, -112, 441, 385), 60 : (600, 96, 42, 610, 472), 61 : (600, 109, 138, 600, 376), 62 : (600, 85, 42, 599, 472), 63 : (600, 222, -15, 583, 572), 64 : (600, 127, -15, 582, 622), 65 : (600, 3, 0, 607, 562), 66 : (600, 43, 0, 616, 562), 67 : (600, 93, -18, 655, 580), 68 : (600, 43, 0, 645, 562), 69 : (600, 53, 0, 660, 562), 70 : (600, 53, 0, 660, 562), 71 : (600, 83, -18, 645, 580), 72 : (600, 32, 0, 687, 562), 73 : (600, 96, 0, 623, 562), 74 : (600, 52, -18, 685, 562), 75 : (600, 38, 0, 671, 562), 76 : (600, 47, 0, 607, 562), 77 : (600, 4, 0, 715, 562), 78 : (600, 7, -13, 712, 562), 79 : (600, 94, -18, 625, 580), 80 : (600, 79, 0, 644, 562), 81 : (600, 95, -138, 625, 580), 82 : (600, 38, 0, 598, 562), 83 : (600, 76, -20, 650, 580), 84 : (600, 108, 0, 665, 562), 85 : (600, 125, -18, 702, 562), 86 : (600, 105, -13, 723, 562), 87 : (600, 106, -13, 722, 562), 88 : (600, 23, 0, 675, 562), 89 : (600, 133, 0, 695, 562), 90 : (600, 86, 0, 610, 562), 91 : (600, 246, -108, 574, 622), 92 : (600, 249, -80, 468, 629), 93 : (600, 135, -108, 463, 622), 94 : (600, 175, 354, 587, 622), 95 : (600, -27, -125, 584, -75), 96 : (600, 343, 328, 457, 562), 97 : (600, 76, -15, 569, 441), 98 : (600, 29, -15, 625, 629), 99 : (600, 106, -15, 608, 441), 100 : (600, 85, -15, 640, 629), 101 : (600, 106, -15, 598, 441), 102 : (600, 114, 0, 662, 629), 103 : (600, 61, -157, 657, 441), 104 : (600, 33, 0, 592, 629), 105 : (600, 95, 0, 515, 657), 106 : (600, 52, -157, 550, 657), 107 : (600, 58, 0, 633, 629), 108 : (600, 95, 0, 515, 629), 109 : (600, -5, 0, 615, 441), 110 : (600, 26, 0, 585, 441), 111 : (600, 102, -15, 588, 441), 112 : (600, -24, -157, 605, 441), 113 : (600, 85, -157, 682, 441), 114 : (600, 60, 0, 636, 441), 115 : (600, 78, -15, 584, 441), 116 : (600, 167, -15, 561, 561), 117 : (600, 101, -15, 572, 426), 118 : (600, 90, -10, 681, 426), 119 : (600, 76, -10, 695, 426), 120 : (600, 20, 0, 655, 426), 121 : (600, -4, -157, 683, 426), 122 : (600, 99, 0, 593, 426), 123 : (600, 233, -108, 569, 622), 124 : (600, 222, -250, 485, 750), 125 : (600, 140, -108, 477, 622), 126 : (600, 116, 197, 600, 320), 161 : (600, 225, -157, 445, 430), 162 : (600, 151, -49, 588, 614), 163 : (600, 124, -21, 621, 611), 164 : (600, 84, -57, 646, 665), 165 : (600, 120, 0, 693, 562), 166 : (600, -26, -143, 671, 622), 167 : (600, 104, -78, 590, 580), 168 : (600, 94, 58, 628, 506), 169 : (600, 345, 328, 460, 562), 170 : (600, 262, 328, 541, 562), 171 : (600, 92, 70, 652, 446), 172 : (600, 204, 70, 540, 446), 173 : (600, 170, 70, 506, 446), 174 : (600, 3, 0, 619, 629), 175 : (600, 3, 0, 619, 629), 177 : (600, 124, 231, 586, 285), 178 : (600, 217, -78, 546, 580), 179 : (600, 163, -78, 546, 580), 180 : (600, 275, 189, 434, 327), 182 : (600, 100, -78, 630, 562), 183 : (600, 224, 130, 485, 383), 184 : (600, 185, -134, 397, 100), 185 : (600, 115, -134, 478, 100), 186 : (600, 213, 328, 576, 562), 187 : (600, 58, 70, 618, 446), 188 : (600, 46, -15, 575, 111), 189 : (600, 59, -15, 627, 622), 191 : (600, 105, -157, 466, 430), 193 : (600, 294, 497, 484, 672), 194 : (600, 348, 497, 612, 672), 195 : (600, 229, 477, 581, 654), 196 : (600, 212, 489, 629, 606), 197 : (600, 232, 525, 600, 565), 198 : (600, 279, 501, 576, 609), 199 : (600, 373, 537, 478, 640), 200 : (600, 272, 537, 579, 640), 202 : (600, 332, 463, 500, 627), 203 : (600, 197, -151, 344, 10), 205 : (600, 239, 497, 683, 672), 206 : (600, 189, -172, 377, 4), 207 : (600, 262, 492, 614, 669), 208 : (600, 49, 231, 661, 285), 225 : (600, 3, 0, 655, 562), 227 : (600, 209, 249, 512, 580), 232 : (600, 47, 0, 607, 562), 233 : (600, 94, -80, 625, 629), 234 : (600, 59, 0, 672, 562), 235 : (600, 210, 249, 535, 580), 241 : (600, 41, -15, 626, 441), 245 : (600, 95, 0, 515, 426), 248 : (600, 95, 0, 587, 629), 249 : (600, 102, -80, 588, 506), 250 : (600, 54, -15, 615, 441), 251 : (600, 48, -15, 617, 629), -1 : (600, 0, 0, 0, 0), } kerning = { } comments = [ 'Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.', 'Creation Date: Thu May 1 17:37:52 1997', 'UniqueID 43051', 'VMusage 16248 75829', ] composites = { } pyscript-0.6.1/pyscript/fonts/helvetica.py0000644000175000001440000001740510423157534020433 0ustar cochraneusers""" PyScript font module for Helvetica """ __revision__ = '$Revision: 1.3 $' attrs = { 'FontName' : 'Helvetica', 'CharacterSet' : 'ExtendedRoman', 'FontBBox' : (-166, -225, 1000, 931), 'Weight' : 'Medium', 'CapHeight' : 718, 'FamilyName' : 'Helvetica', 'IsFixedPitch' : 'false', 'Notice' : 'Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries.', 'StdVW' : 88, 'EncodingScheme' : 'AdobeStandardEncoding', 'StdHW' : 76, 'Version' : '002.000', 'UnderlinePosition' : -100, 'XHeight' : 523, 'UnderlineThickness' : 50, 'Descender' : -207, 'ItalicAngle' : 0, 'Ascender' : 718, 'FullName' : 'Helvetica', } chars = { 32 : (278, 0, 0, 0, 0), 33 : (278, 90, 0, 187, 718), 34 : (355, 70, 463, 285, 718), 35 : (556, 28, 0, 529, 688), 36 : (556, 32, -115, 520, 775), 37 : (889, 39, -19, 850, 703), 38 : (667, 44, -15, 645, 718), 39 : (222, 53, 463, 157, 718), 40 : (333, 68, -207, 299, 733), 41 : (333, 34, -207, 265, 733), 42 : (389, 39, 431, 349, 718), 43 : (584, 39, 0, 545, 505), 44 : (278, 87, -147, 191, 106), 45 : (333, 44, 232, 289, 322), 46 : (278, 87, 0, 191, 106), 47 : (278, -17, -19, 295, 737), 48 : (556, 37, -19, 519, 703), 49 : (556, 101, 0, 359, 703), 50 : (556, 26, 0, 507, 703), 51 : (556, 34, -19, 522, 703), 52 : (556, 25, 0, 523, 703), 53 : (556, 32, -19, 514, 688), 54 : (556, 38, -19, 518, 703), 55 : (556, 37, 0, 523, 688), 56 : (556, 38, -19, 517, 703), 57 : (556, 42, -19, 514, 703), 58 : (278, 87, 0, 191, 516), 59 : (278, 87, -147, 191, 516), 60 : (584, 48, 11, 536, 495), 61 : (584, 39, 115, 545, 390), 62 : (584, 48, 11, 536, 495), 63 : (556, 56, 0, 492, 727), 64 : (1015, 147, -19, 868, 737), 65 : (667, 14, 0, 654, 718), 66 : (667, 74, 0, 627, 718), 67 : (722, 44, -19, 681, 737), 68 : (722, 81, 0, 674, 718), 69 : (667, 86, 0, 616, 718), 70 : (611, 86, 0, 583, 718), 71 : (778, 48, -19, 704, 737), 72 : (722, 77, 0, 646, 718), 73 : (278, 91, 0, 188, 718), 74 : (500, 17, -19, 428, 718), 75 : (667, 76, 0, 663, 718), 76 : (556, 76, 0, 537, 718), 77 : (833, 73, 0, 761, 718), 78 : (722, 76, 0, 646, 718), 79 : (778, 39, -19, 739, 737), 80 : (667, 86, 0, 622, 718), 81 : (778, 39, -56, 739, 737), 82 : (722, 88, 0, 684, 718), 83 : (667, 49, -19, 620, 737), 84 : (611, 14, 0, 597, 718), 85 : (722, 79, -19, 644, 718), 86 : (667, 20, 0, 647, 718), 87 : (944, 16, 0, 928, 718), 88 : (667, 19, 0, 648, 718), 89 : (667, 14, 0, 653, 718), 90 : (611, 23, 0, 588, 718), 91 : (278, 63, -196, 250, 722), 92 : (278, -17, -19, 295, 737), 93 : (278, 28, -196, 215, 722), 94 : (469, -14, 264, 483, 688), 95 : (556, 0, -125, 556, -75), 96 : (222, 65, 470, 169, 725), 97 : (556, 36, -15, 530, 538), 98 : (556, 58, -15, 517, 718), 99 : (500, 30, -15, 477, 538), 100 : (556, 35, -15, 499, 718), 101 : (556, 40, -15, 516, 538), 102 : (278, 14, 0, 262, 728), 103 : (556, 40, -220, 499, 538), 104 : (556, 65, 0, 491, 718), 105 : (222, 67, 0, 155, 718), 106 : (222, -16, -210, 155, 718), 107 : (500, 67, 0, 501, 718), 108 : (222, 67, 0, 155, 718), 109 : (833, 65, 0, 769, 538), 110 : (556, 65, 0, 491, 538), 111 : (556, 35, -14, 521, 538), 112 : (556, 58, -207, 517, 538), 113 : (556, 35, -207, 494, 538), 114 : (333, 77, 0, 332, 538), 115 : (500, 32, -15, 464, 538), 116 : (278, 14, -7, 257, 669), 117 : (556, 68, -15, 489, 523), 118 : (500, 8, 0, 492, 523), 119 : (722, 14, 0, 709, 523), 120 : (500, 11, 0, 490, 523), 121 : (500, 11, -214, 489, 523), 122 : (500, 31, 0, 469, 523), 123 : (334, 42, -196, 292, 722), 124 : (260, 94, -225, 167, 775), 125 : (334, 42, -196, 292, 722), 126 : (584, 61, 180, 523, 326), 161 : (333, 118, -195, 215, 523), 162 : (556, 51, -115, 513, 623), 163 : (556, 33, -16, 539, 718), 164 : (167, -166, -19, 333, 703), 165 : (556, 3, 0, 553, 688), 166 : (556, -11, -207, 501, 737), 167 : (556, 43, -191, 512, 737), 168 : (556, 28, 99, 528, 603), 169 : (191, 59, 463, 132, 718), 170 : (333, 38, 470, 307, 725), 171 : (556, 97, 108, 459, 446), 172 : (333, 88, 108, 245, 446), 173 : (333, 88, 108, 245, 446), 174 : (500, 14, 0, 434, 728), 175 : (500, 14, 0, 432, 728), 177 : (556, 0, 240, 556, 313), 178 : (556, 43, -159, 514, 718), 179 : (556, 43, -159, 514, 718), 180 : (278, 77, 190, 202, 315), 182 : (537, 18, -173, 497, 718), 183 : (350, 18, 202, 333, 517), 184 : (222, 53, -149, 157, 106), 185 : (333, 26, -149, 295, 106), 186 : (333, 26, 463, 295, 718), 187 : (556, 97, 108, 459, 446), 188 : (1000, 115, 0, 885, 106), 189 : (1000, 7, -19, 994, 703), 191 : (611, 91, -201, 527, 525), 193 : (333, 14, 593, 211, 734), 194 : (333, 122, 593, 319, 734), 195 : (333, 21, 593, 312, 734), 196 : (333, -4, 606, 337, 722), 197 : (333, 10, 627, 323, 684), 198 : (333, 13, 595, 321, 731), 199 : (333, 121, 604, 212, 706), 200 : (333, 40, 604, 293, 706), 202 : (333, 75, 572, 259, 756), 203 : (333, 45, -225, 259, 0), 205 : (333, 31, 593, 409, 734), 206 : (333, 73, -225, 287, 0), 207 : (333, 21, 593, 312, 734), 208 : (1000, 0, 240, 1000, 313), 225 : (1000, 8, 0, 951, 718), 227 : (370, 24, 405, 346, 737), 232 : (556, -20, 0, 537, 718), 233 : (778, 39, -19, 740, 737), 234 : (1000, 36, -19, 965, 737), 235 : (365, 25, 405, 341, 737), 241 : (889, 36, -15, 847, 538), 245 : (278, 95, 0, 183, 523), 248 : (222, -20, 0, 242, 718), 249 : (611, 28, -22, 537, 545), 250 : (944, 35, -15, 902, 538), 251 : (611, 67, -15, 571, 728), -1 : (556, 0, 0, 0, 0), } kerning = { (120, 101) : -30, (101, 119) : -20, (101, 118) : -30, (76, 121) : -30, (101, 121) : -20, (101, 120) : -30, (109, 121) : -15, (76, 89) : -140, (76, 86) : -110, (76, 87) : -70, (76, 84) : -110, (75, 111) : -40, (75, 101) : -40, (114, 116) : 40, (75, 121) : -50, (115, 119) : -30, (75, 117) : -30, (121, 97) : -20, (82, 79) : -20, (75, 79) : -50, (114, 112) : 30, (82, 89) : -50, (82, 84) : -30, (82, 85) : -40, (82, 86) : -50, (82, 87) : -30, (103, 114) : -10, (111, 119) : -15, (111, 118) : -15, (102, 111) : -30, (111, 121) : -30, (111, 120) : -30, (85, 65) : -40, (121, 111) : -20, (118, 111) : -25, (118, 97) : -25, (118, 101) : -25, (84, 119) : -120, (84, 117) : -120, (84, 114) : -120, (68, 65) : -40, (102, 97) : -30, (102, 101) : -30, (84, 121) : -120, (68, 86) : -70, (68, 87) : -40, (84, 101) : -120, (84, 97) : -120, (84, 111) : -120, (80, 101) : -50, (119, 101) : -10, (68, 89) : -90, (110, 117) : -10, (110, 118) : -20, (110, 121) : -15, (84, 65) : -120, (84, 79) : -40, (87, 121) : -20, (87, 117) : -30, (87, 111) : -30, (121, 101) : -20, (87, 101) : -30, (87, 97) : -40, (97, 121) : -30, (97, 119) : -20, (97, 118) : -20, (87, 79) : -20, (112, 121) : -30, (87, 65) : -50, (70, 65) : -80, (86, 117) : -70, (109, 117) : -10, (86, 111) : -80, (86, 97) : -70, (86, 101) : -80, (79, 87) : -30, (79, 86) : -50, (79, 84) : -40, (70, 111) : -30, (70, 97) : -50, (70, 101) : -30, (79, 89) : -70, (79, 88) : -60, (119, 111) : -10, (79, 65) : -20, (86, 79) : -40, (86, 65) : -80, (70, 114) : -45, (104, 121) : -30, (119, 97) : -15, (86, 71) : -40, (74, 97) : -20, (99, 107) : -20, (89, 65) : -110, (74, 117) : -20, (89, 79) : -85, (114, 108) : 15, (114, 109) : 25, (114, 110) : 25, (89, 117) : -110, (74, 65) : -20, (114, 107) : 15, (66, 85) : -10, (114, 97) : -10, (107, 101) : -20, (89, 97) : -140, (89, 101) : -140, (114, 121) : 30, (89, 105) : -20, (114, 117) : 15, (114, 118) : 30, (81, 85) : -10, (89, 111) : -140, (65, 121) : -40, (80, 111) : -50, (80, 97) : -40, (65, 117) : -30, (65, 119) : -40, (65, 118) : -40, (122, 101) : -15, (107, 111) : -20, (122, 111) : -15, (114, 105) : 15, (65, 89) : -100, (98, 121) : -20, (65, 81) : -30, (98, 117) : -20, (98, 118) : -20, (80, 65) : -120, (65, 85) : -50, (65, 84) : -120, (65, 87) : -50, (65, 86) : -70, (98, 108) : -20, (98, 98) : -10, (65, 79) : -30, (65, 67) : -30, (65, 71) : -30, } comments = [ 'Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.', 'Creation Date: Thu May 1 12:38:23 1997', 'UniqueID 43054', 'VMusage 37069 48094', ] composites = { } pyscript-0.6.1/pyscript/fonts/helvetica_bold.py0000644000175000001440000001734510423157534021436 0ustar cochraneusers""" PyScript font module for Helvetica Bold """ __revision__ = '$Revision: 1.3 $' attrs = { 'FontName' : 'Helvetica-Bold', 'CharacterSet' : 'ExtendedRoman', 'FontBBox' : (-170, -228, 1003, 962), 'Weight' : 'Bold', 'CapHeight' : 718, 'FamilyName' : 'Helvetica', 'IsFixedPitch' : 'false', 'Notice' : 'Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries.', 'StdVW' : 140, 'EncodingScheme' : 'AdobeStandardEncoding', 'StdHW' : 118, 'Version' : '002.000', 'UnderlinePosition' : -100, 'XHeight' : 532, 'UnderlineThickness' : 50, 'Descender' : -207, 'ItalicAngle' : 0, 'Ascender' : 718, 'FullName' : 'Helvetica Bold', } chars = { 32 : (278, 0, 0, 0, 0), 33 : (333, 90, 0, 244, 718), 34 : (474, 98, 447, 376, 718), 35 : (556, 18, 0, 538, 698), 36 : (556, 30, -115, 523, 775), 37 : (889, 28, -19, 861, 710), 38 : (722, 54, -19, 701, 718), 39 : (278, 69, 445, 209, 718), 40 : (333, 35, -208, 314, 734), 41 : (333, 19, -208, 298, 734), 42 : (389, 27, 387, 362, 718), 43 : (584, 40, 0, 544, 506), 44 : (278, 64, -168, 214, 146), 45 : (333, 27, 215, 306, 345), 46 : (278, 64, 0, 214, 146), 47 : (278, -33, -19, 311, 737), 48 : (556, 32, -19, 524, 710), 49 : (556, 69, 0, 378, 710), 50 : (556, 26, 0, 511, 710), 51 : (556, 27, -19, 516, 710), 52 : (556, 27, 0, 526, 710), 53 : (556, 27, -19, 516, 698), 54 : (556, 31, -19, 520, 710), 55 : (556, 25, 0, 528, 698), 56 : (556, 32, -19, 524, 710), 57 : (556, 30, -19, 522, 710), 58 : (333, 92, 0, 242, 512), 59 : (333, 92, -168, 242, 512), 60 : (584, 38, -8, 546, 514), 61 : (584, 40, 87, 544, 419), 62 : (584, 38, -8, 546, 514), 63 : (611, 60, 0, 556, 727), 64 : (975, 118, -19, 856, 737), 65 : (722, 20, 0, 702, 718), 66 : (722, 76, 0, 669, 718), 67 : (722, 44, -19, 684, 737), 68 : (722, 76, 0, 685, 718), 69 : (667, 76, 0, 621, 718), 70 : (611, 76, 0, 587, 718), 71 : (778, 44, -19, 713, 737), 72 : (722, 71, 0, 651, 718), 73 : (278, 64, 0, 214, 718), 74 : (556, 22, -18, 484, 718), 75 : (722, 87, 0, 722, 718), 76 : (611, 76, 0, 583, 718), 77 : (833, 69, 0, 765, 718), 78 : (722, 69, 0, 654, 718), 79 : (778, 44, -19, 734, 737), 80 : (667, 76, 0, 627, 718), 81 : (778, 44, -52, 737, 737), 82 : (722, 76, 0, 677, 718), 83 : (667, 39, -19, 629, 737), 84 : (611, 14, 0, 598, 718), 85 : (722, 72, -19, 651, 718), 86 : (667, 19, 0, 648, 718), 87 : (944, 16, 0, 929, 718), 88 : (667, 14, 0, 653, 718), 89 : (667, 15, 0, 653, 718), 90 : (611, 25, 0, 586, 718), 91 : (333, 63, -196, 309, 722), 92 : (278, -33, -19, 311, 737), 93 : (333, 24, -196, 270, 722), 94 : (584, 62, 323, 522, 698), 95 : (556, 0, -125, 556, -75), 96 : (278, 69, 454, 209, 727), 97 : (556, 29, -14, 527, 546), 98 : (611, 61, -14, 578, 718), 99 : (556, 34, -14, 524, 546), 100 : (611, 34, -14, 551, 718), 101 : (556, 23, -14, 528, 546), 102 : (333, 10, 0, 318, 727), 103 : (611, 40, -217, 553, 546), 104 : (611, 65, 0, 546, 718), 105 : (278, 69, 0, 209, 725), 106 : (278, 3, -214, 209, 725), 107 : (556, 69, 0, 562, 718), 108 : (278, 69, 0, 209, 718), 109 : (889, 64, 0, 826, 546), 110 : (611, 65, 0, 546, 546), 111 : (611, 34, -14, 578, 546), 112 : (611, 62, -207, 578, 546), 113 : (611, 34, -207, 552, 546), 114 : (389, 64, 0, 373, 546), 115 : (556, 30, -14, 519, 546), 116 : (333, 10, -6, 309, 676), 117 : (611, 66, -14, 545, 532), 118 : (556, 13, 0, 543, 532), 119 : (778, 10, 0, 769, 532), 120 : (556, 15, 0, 541, 532), 121 : (556, 10, -214, 539, 532), 122 : (500, 20, 0, 480, 532), 123 : (389, 48, -196, 365, 722), 124 : (280, 84, -225, 196, 775), 125 : (389, 24, -196, 341, 722), 126 : (584, 61, 163, 523, 343), 161 : (333, 90, -186, 244, 532), 162 : (556, 34, -118, 524, 628), 163 : (556, 28, -16, 541, 718), 164 : (167, -170, -19, 336, 710), 165 : (556, -9, 0, 565, 698), 166 : (556, -10, -210, 516, 737), 167 : (556, 34, -184, 522, 727), 168 : (556, -3, 76, 559, 636), 169 : (238, 70, 447, 168, 718), 170 : (500, 64, 454, 436, 727), 171 : (556, 88, 76, 468, 484), 172 : (333, 83, 76, 250, 484), 173 : (333, 83, 76, 250, 484), 174 : (611, 10, 0, 542, 727), 175 : (611, 10, 0, 542, 727), 177 : (556, 0, 227, 556, 333), 178 : (556, 36, -171, 520, 718), 179 : (556, 36, -171, 520, 718), 180 : (278, 58, 172, 220, 334), 182 : (556, -8, -191, 539, 700), 183 : (350, 10, 194, 340, 524), 184 : (278, 69, -146, 209, 127), 185 : (500, 64, -146, 436, 127), 186 : (500, 64, 445, 436, 718), 187 : (556, 88, 76, 468, 484), 188 : (1000, 92, 0, 908, 146), 189 : (1000, -3, -19, 1003, 710), 191 : (611, 55, -195, 551, 532), 193 : (333, -23, 604, 225, 750), 194 : (333, 108, 604, 356, 750), 195 : (333, -10, 604, 343, 750), 196 : (333, -17, 610, 350, 737), 197 : (333, -6, 604, 339, 678), 198 : (333, -2, 604, 335, 750), 199 : (333, 104, 614, 230, 729), 200 : (333, 6, 614, 327, 729), 202 : (333, 59, 568, 275, 776), 203 : (333, 6, -228, 245, 0), 205 : (333, 9, 604, 486, 750), 206 : (333, 71, -228, 304, 0), 207 : (333, -10, 604, 343, 750), 208 : (1000, 0, 227, 1000, 333), 225 : (1000, 5, 0, 954, 718), 227 : (370, 22, 401, 347, 737), 232 : (611, -20, 0, 583, 718), 233 : (778, 33, -27, 744, 745), 234 : (1000, 37, -19, 961, 737), 235 : (365, 6, 401, 360, 737), 241 : (889, 29, -14, 858, 546), 245 : (278, 69, 0, 209, 532), 248 : (278, -18, 0, 296, 718), 249 : (611, 22, -29, 589, 560), 250 : (944, 34, -14, 912, 546), 251 : (611, 69, -14, 579, 731), -1 : (556, 0, 0, 0, 0), } kerning = { (120, 101) : -10, (101, 119) : -15, (101, 118) : -15, (76, 121) : -30, (101, 121) : -15, (101, 120) : -15, (109, 121) : -30, (76, 89) : -120, (76, 86) : -110, (76, 87) : -80, (76, 84) : -90, (100, 100) : -10, (75, 111) : -35, (75, 101) : -15, (100, 118) : -15, (100, 119) : -15, (75, 121) : -40, (115, 119) : -15, (75, 117) : -30, (100, 121) : -15, (121, 97) : -30, (82, 79) : -20, (75, 79) : -30, (114, 113) : -20, (82, 89) : -50, (108, 121) : -15, (82, 84) : -20, (82, 85) : -20, (82, 86) : -50, (82, 87) : -40, (103, 103) : -10, (103, 101) : 10, (111, 119) : -15, (111, 118) : -20, (102, 111) : -20, (111, 121) : -20, (111, 120) : -30, (85, 65) : -50, (121, 111) : -25, (118, 111) : -30, (118, 97) : -20, (84, 119) : -60, (84, 117) : -90, (84, 114) : -80, (68, 65) : -40, (102, 101) : -10, (84, 121) : -60, (68, 86) : -40, (68, 87) : -40, (84, 101) : -60, (84, 97) : -80, (84, 111) : -80, (80, 101) : -30, (68, 89) : -70, (110, 117) : -10, (110, 118) : -40, (110, 121) : -20, (84, 65) : -90, (84, 79) : -40, (87, 121) : -20, (87, 117) : -45, (87, 111) : -60, (121, 101) : -10, (87, 101) : -35, (87, 97) : -40, (97, 121) : -20, (97, 119) : -15, (97, 118) : -15, (87, 79) : -20, (112, 121) : -15, (97, 103) : -10, (70, 65) : -80, (86, 117) : -60, (109, 117) : -20, (86, 111) : -90, (86, 97) : -60, (86, 101) : -50, (79, 87) : -50, (79, 86) : -50, (79, 84) : -40, (70, 97) : -20, (79, 89) : -70, (79, 88) : -50, (119, 111) : -20, (108, 119) : -15, (87, 65) : -60, (79, 65) : -50, (86, 79) : -50, (86, 65) : -80, (104, 121) : -20, (86, 71) : -50, (99, 107) : -20, (99, 104) : -10, (99, 108) : -20, (89, 65) : -110, (74, 117) : -20, (99, 121) : -10, (89, 79) : -70, (114, 111) : -20, (89, 117) : -100, (74, 65) : -20, (114, 100) : -20, (66, 85) : -10, (114, 103) : -15, (114, 99) : -20, (89, 97) : -90, (89, 101) : -80, (114, 121) : 10, (114, 116) : 20, (114, 118) : 10, (81, 85) : -10, (66, 65) : -30, (89, 111) : -100, (114, 115) : -15, (65, 121) : -30, (80, 111) : -40, (80, 97) : -30, (65, 117) : -30, (65, 119) : -30, (65, 118) : -40, (122, 101) : 10, (107, 111) : -15, (65, 89) : -110, (98, 121) : -20, (65, 81) : -40, (98, 117) : -20, (98, 118) : -20, (80, 65) : -100, (65, 85) : -50, (65, 84) : -90, (65, 87) : -60, (65, 86) : -80, (98, 108) : -10, (65, 79) : -40, (65, 67) : -40, (65, 71) : -50, } comments = [ 'Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.', 'Creation Date: Thu May 1 12:43:52 1997', 'UniqueID 43052', 'VMusage 37169 48194', ] composites = { } pyscript-0.6.1/pyscript/fonts/helvetica_boldoblique.py0000644000175000001440000001746210423157534023017 0ustar cochraneusers""" PyScript font module for Helvetica Bold Oblique """ __revision__ = '$Revision: 1.3 $' attrs = { 'FontName' : 'Helvetica-BoldOblique', 'CharacterSet' : 'ExtendedRoman', 'FontBBox' : (-174, -228, 1114, 962), 'Weight' : 'Bold', 'CapHeight' : 718, 'FamilyName' : 'Helvetica', 'IsFixedPitch' : 'false', 'Notice' : 'Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries.', 'StdVW' : 140, 'EncodingScheme' : 'AdobeStandardEncoding', 'StdHW' : 118, 'Version' : '002.000', 'UnderlinePosition' : -100, 'XHeight' : 532, 'UnderlineThickness' : 50, 'Descender' : -207, 'ItalicAngle' : -12, 'Ascender' : 718, 'FullName' : 'Helvetica Bold Oblique', } chars = { 32 : (278, 0, 0, 0, 0), 33 : (333, 94, 0, 397, 718), 34 : (474, 193, 447, 529, 718), 35 : (556, 60, 0, 644, 698), 36 : (556, 67, -115, 622, 775), 37 : (889, 136, -19, 901, 710), 38 : (722, 89, -19, 732, 718), 39 : (278, 167, 445, 362, 718), 40 : (333, 76, -208, 470, 734), 41 : (333, -25, -208, 369, 734), 42 : (389, 146, 387, 481, 718), 43 : (584, 82, 0, 610, 506), 44 : (278, 28, -168, 245, 146), 45 : (333, 73, 215, 379, 345), 46 : (278, 64, 0, 245, 146), 47 : (278, -37, -19, 468, 737), 48 : (556, 86, -19, 617, 710), 49 : (556, 173, 0, 529, 710), 50 : (556, 26, 0, 619, 710), 51 : (556, 65, -19, 608, 710), 52 : (556, 60, 0, 598, 710), 53 : (556, 64, -19, 636, 698), 54 : (556, 85, -19, 619, 710), 55 : (556, 125, 0, 676, 698), 56 : (556, 69, -19, 616, 710), 57 : (556, 78, -19, 615, 710), 58 : (333, 92, 0, 351, 512), 59 : (333, 56, -168, 351, 512), 60 : (584, 82, -8, 655, 514), 61 : (584, 58, 87, 633, 419), 62 : (584, 36, -8, 609, 514), 63 : (611, 165, 0, 671, 727), 64 : (975, 186, -19, 954, 737), 65 : (722, 20, 0, 702, 718), 66 : (722, 76, 0, 764, 718), 67 : (722, 107, -19, 789, 737), 68 : (722, 76, 0, 777, 718), 69 : (667, 76, 0, 757, 718), 70 : (611, 76, 0, 740, 718), 71 : (778, 108, -19, 817, 737), 72 : (722, 71, 0, 804, 718), 73 : (278, 64, 0, 367, 718), 74 : (556, 60, -18, 637, 718), 75 : (722, 87, 0, 858, 718), 76 : (611, 76, 0, 611, 718), 77 : (833, 69, 0, 918, 718), 78 : (722, 69, 0, 807, 718), 79 : (778, 107, -19, 823, 737), 80 : (667, 76, 0, 738, 718), 81 : (778, 107, -52, 823, 737), 82 : (722, 76, 0, 778, 718), 83 : (667, 81, -19, 718, 737), 84 : (611, 140, 0, 751, 718), 85 : (722, 116, -19, 804, 718), 86 : (667, 172, 0, 801, 718), 87 : (944, 169, 0, 1082, 718), 88 : (667, 14, 0, 791, 718), 89 : (667, 168, 0, 806, 718), 90 : (611, 25, 0, 737, 718), 91 : (333, 21, -196, 462, 722), 92 : (278, 124, -19, 307, 737), 93 : (333, -18, -196, 423, 722), 94 : (584, 131, 323, 591, 698), 95 : (556, -27, -125, 540, -75), 96 : (278, 165, 454, 361, 727), 97 : (556, 55, -14, 583, 546), 98 : (611, 61, -14, 645, 718), 99 : (556, 79, -14, 599, 546), 100 : (611, 82, -14, 704, 718), 101 : (556, 70, -14, 593, 546), 102 : (333, 87, 0, 469, 727), 103 : (611, 38, -217, 666, 546), 104 : (611, 65, 0, 629, 718), 105 : (278, 69, 0, 363, 725), 106 : (278, -42, -214, 363, 725), 107 : (556, 69, 0, 670, 718), 108 : (278, 69, 0, 362, 718), 109 : (889, 64, 0, 909, 546), 110 : (611, 65, 0, 629, 546), 111 : (611, 82, -14, 643, 546), 112 : (611, 18, -207, 645, 546), 113 : (611, 80, -207, 665, 546), 114 : (389, 64, 0, 489, 546), 115 : (556, 63, -14, 584, 546), 116 : (333, 100, -6, 422, 676), 117 : (611, 98, -14, 658, 532), 118 : (556, 126, 0, 656, 532), 119 : (778, 123, 0, 882, 532), 120 : (556, 15, 0, 648, 532), 121 : (556, 42, -214, 652, 532), 122 : (500, 20, 0, 583, 532), 123 : (389, 94, -196, 518, 722), 124 : (280, 36, -225, 361, 775), 125 : (389, -18, -196, 407, 722), 126 : (584, 115, 163, 577, 343), 161 : (333, 50, -186, 353, 532), 162 : (556, 79, -118, 599, 628), 163 : (556, 50, -16, 635, 718), 164 : (167, -174, -19, 487, 710), 165 : (556, 60, 0, 713, 698), 166 : (556, -50, -210, 669, 737), 167 : (556, 61, -184, 598, 727), 168 : (556, 27, 76, 680, 636), 169 : (238, 165, 447, 321, 718), 170 : (500, 160, 454, 588, 727), 171 : (556, 135, 76, 571, 484), 172 : (333, 130, 76, 353, 484), 173 : (333, 99, 76, 322, 484), 174 : (611, 87, 0, 696, 727), 175 : (611, 87, 0, 695, 727), 177 : (556, 48, 227, 627, 333), 178 : (556, 118, -171, 626, 718), 179 : (556, 46, -171, 628, 718), 180 : (278, 110, 172, 276, 334), 182 : (556, 98, -191, 688, 700), 183 : (350, 83, 194, 420, 524), 184 : (278, 41, -146, 236, 127), 185 : (500, 36, -146, 463, 127), 186 : (500, 162, 445, 589, 718), 187 : (556, 104, 76, 540, 484), 188 : (1000, 92, 0, 939, 146), 189 : (1000, 76, -19, 1038, 710), 191 : (611, 53, -195, 559, 532), 193 : (333, 136, 604, 353, 750), 194 : (333, 236, 604, 515, 750), 195 : (333, 118, 604, 471, 750), 196 : (333, 113, 610, 507, 737), 197 : (333, 122, 604, 483, 678), 198 : (333, 156, 604, 494, 750), 199 : (333, 235, 614, 385, 729), 200 : (333, 137, 614, 482, 729), 202 : (333, 200, 568, 420, 776), 203 : (333, -37, -228, 220, 0), 205 : (333, 137, 604, 645, 750), 206 : (333, 41, -228, 264, 0), 207 : (333, 149, 604, 502, 750), 208 : (1000, 48, 227, 1071, 333), 225 : (1000, 5, 0, 1100, 718), 227 : (370, 125, 401, 465, 737), 232 : (611, 34, 0, 611, 718), 233 : (778, 35, -27, 894, 745), 234 : (1000, 99, -19, 1114, 737), 235 : (365, 123, 401, 485, 737), 241 : (889, 56, -14, 923, 546), 245 : (278, 69, 0, 322, 532), 248 : (278, 40, 0, 407, 718), 249 : (611, 22, -29, 701, 560), 250 : (944, 82, -14, 977, 546), 251 : (611, 69, -14, 657, 731), -1 : (556, 0, 0, 0, 0), } kerning = { (120, 101) : -10, (101, 119) : -15, (101, 118) : -15, (76, 121) : -30, (101, 121) : -15, (101, 120) : -15, (109, 121) : -30, (76, 89) : -120, (76, 86) : -110, (76, 87) : -80, (76, 84) : -90, (100, 100) : -10, (75, 111) : -35, (75, 101) : -15, (100, 118) : -15, (100, 119) : -15, (75, 121) : -40, (115, 119) : -15, (75, 117) : -30, (100, 121) : -15, (121, 97) : -30, (82, 79) : -20, (75, 79) : -30, (114, 113) : -20, (82, 89) : -50, (108, 121) : -15, (82, 84) : -20, (82, 85) : -20, (82, 86) : -50, (82, 87) : -40, (103, 103) : -10, (103, 101) : 10, (111, 119) : -15, (111, 118) : -20, (102, 111) : -20, (111, 121) : -20, (111, 120) : -30, (85, 65) : -50, (121, 111) : -25, (118, 111) : -30, (118, 97) : -20, (84, 119) : -60, (84, 117) : -90, (84, 114) : -80, (68, 65) : -40, (102, 101) : -10, (84, 121) : -60, (68, 86) : -40, (68, 87) : -40, (84, 101) : -60, (84, 97) : -80, (84, 111) : -80, (80, 101) : -30, (68, 89) : -70, (110, 117) : -10, (110, 118) : -40, (110, 121) : -20, (84, 65) : -90, (84, 79) : -40, (87, 121) : -20, (87, 117) : -45, (87, 111) : -60, (121, 101) : -10, (87, 101) : -35, (87, 97) : -40, (97, 121) : -20, (97, 119) : -15, (97, 118) : -15, (87, 79) : -20, (112, 121) : -15, (97, 103) : -10, (70, 65) : -80, (86, 117) : -60, (109, 117) : -20, (86, 111) : -90, (86, 97) : -60, (86, 101) : -50, (79, 87) : -50, (79, 86) : -50, (79, 84) : -40, (70, 97) : -20, (79, 89) : -70, (79, 88) : -50, (119, 111) : -20, (108, 119) : -15, (87, 65) : -60, (79, 65) : -50, (86, 79) : -50, (86, 65) : -80, (104, 121) : -20, (86, 71) : -50, (99, 107) : -20, (99, 104) : -10, (99, 108) : -20, (89, 65) : -110, (74, 117) : -20, (99, 121) : -10, (89, 79) : -70, (114, 111) : -20, (89, 117) : -100, (74, 65) : -20, (114, 100) : -20, (66, 85) : -10, (114, 103) : -15, (114, 99) : -20, (89, 97) : -90, (89, 101) : -80, (114, 121) : 10, (114, 116) : 20, (114, 118) : 10, (81, 85) : -10, (66, 65) : -30, (89, 111) : -100, (114, 115) : -15, (65, 121) : -30, (80, 111) : -40, (80, 97) : -30, (65, 117) : -30, (65, 119) : -30, (65, 118) : -40, (122, 101) : 10, (107, 111) : -15, (65, 89) : -110, (98, 121) : -20, (65, 81) : -40, (98, 117) : -20, (98, 118) : -20, (80, 65) : -100, (65, 85) : -50, (65, 84) : -90, (65, 87) : -60, (65, 86) : -80, (98, 108) : -10, (65, 79) : -40, (65, 67) : -40, (65, 71) : -50, } comments = [ 'Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.', 'Creation Date: Thu May 1 12:45:12 1997', 'UniqueID 43053', 'VMusage 14482 68586', ] composites = { } pyscript-0.6.1/pyscript/fonts/helvetica_oblique.py0000644000175000001440000001751710423157534022157 0ustar cochraneusers""" PyScript font module for Helvetica Oblique """ __revision__ = '$Revision: 1.3 $' attrs = { 'FontName' : 'Helvetica-Oblique', 'CharacterSet' : 'ExtendedRoman', 'FontBBox' : (-170, -225, 1116, 931), 'Weight' : 'Medium', 'CapHeight' : 718, 'FamilyName' : 'Helvetica', 'IsFixedPitch' : 'false', 'Notice' : 'Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries.', 'StdVW' : 88, 'EncodingScheme' : 'AdobeStandardEncoding', 'StdHW' : 76, 'Version' : '002.000', 'UnderlinePosition' : -100, 'XHeight' : 523, 'UnderlineThickness' : 50, 'Descender' : -207, 'ItalicAngle' : -12, 'Ascender' : 718, 'FullName' : 'Helvetica Oblique', } chars = { 32 : (278, 0, 0, 0, 0), 33 : (278, 90, 0, 340, 718), 34 : (355, 168, 463, 438, 718), 35 : (556, 73, 0, 631, 688), 36 : (556, 69, -115, 617, 775), 37 : (889, 147, -19, 889, 703), 38 : (667, 77, -15, 647, 718), 39 : (222, 151, 463, 310, 718), 40 : (333, 108, -207, 454, 733), 41 : (333, -9, -207, 337, 733), 42 : (389, 165, 431, 475, 718), 43 : (584, 85, 0, 606, 505), 44 : (278, 56, -147, 214, 106), 45 : (333, 93, 232, 357, 322), 46 : (278, 87, 0, 214, 106), 47 : (278, -21, -19, 452, 737), 48 : (556, 93, -19, 608, 703), 49 : (556, 207, 0, 508, 703), 50 : (556, 26, 0, 617, 703), 51 : (556, 75, -19, 610, 703), 52 : (556, 61, 0, 576, 703), 53 : (556, 68, -19, 621, 688), 54 : (556, 91, -19, 615, 703), 55 : (556, 137, 0, 669, 688), 56 : (556, 74, -19, 607, 703), 57 : (556, 82, -19, 609, 703), 58 : (278, 87, 0, 301, 516), 59 : (278, 56, -147, 301, 516), 60 : (584, 94, 11, 641, 495), 61 : (584, 63, 115, 628, 390), 62 : (584, 50, 11, 597, 495), 63 : (556, 161, 0, 610, 727), 64 : (1015, 215, -19, 965, 737), 65 : (667, 14, 0, 654, 718), 66 : (667, 74, 0, 712, 718), 67 : (722, 108, -19, 782, 737), 68 : (722, 81, 0, 764, 718), 69 : (667, 86, 0, 762, 718), 70 : (611, 86, 0, 736, 718), 71 : (778, 111, -19, 799, 737), 72 : (722, 77, 0, 799, 718), 73 : (278, 91, 0, 341, 718), 74 : (500, 47, -19, 581, 718), 75 : (667, 76, 0, 808, 718), 76 : (556, 76, 0, 555, 718), 77 : (833, 73, 0, 914, 718), 78 : (722, 76, 0, 799, 718), 79 : (778, 105, -19, 826, 737), 80 : (667, 86, 0, 737, 718), 81 : (778, 105, -56, 826, 737), 82 : (722, 88, 0, 773, 718), 83 : (667, 90, -19, 713, 737), 84 : (611, 148, 0, 750, 718), 85 : (722, 123, -19, 797, 718), 86 : (667, 173, 0, 800, 718), 87 : (944, 169, 0, 1081, 718), 88 : (667, 19, 0, 790, 718), 89 : (667, 167, 0, 806, 718), 90 : (611, 23, 0, 741, 718), 91 : (278, 21, -196, 403, 722), 92 : (278, 140, -19, 291, 737), 93 : (278, -14, -196, 368, 722), 94 : (469, 42, 264, 539, 688), 95 : (556, -27, -125, 540, -75), 96 : (222, 165, 470, 323, 725), 97 : (556, 61, -15, 559, 538), 98 : (556, 58, -15, 584, 718), 99 : (500, 74, -15, 553, 538), 100 : (556, 84, -15, 652, 718), 101 : (556, 84, -15, 578, 538), 102 : (278, 86, 0, 416, 728), 103 : (556, 42, -220, 610, 538), 104 : (556, 65, 0, 573, 718), 105 : (222, 67, 0, 308, 718), 106 : (222, -60, -210, 308, 718), 107 : (500, 67, 0, 600, 718), 108 : (222, 67, 0, 308, 718), 109 : (833, 65, 0, 852, 538), 110 : (556, 65, 0, 573, 538), 111 : (556, 83, -14, 585, 538), 112 : (556, 14, -207, 584, 538), 113 : (556, 84, -207, 605, 538), 114 : (333, 77, 0, 446, 538), 115 : (500, 63, -15, 529, 538), 116 : (278, 102, -7, 368, 669), 117 : (556, 94, -15, 600, 523), 118 : (500, 119, 0, 603, 523), 119 : (722, 125, 0, 820, 523), 120 : (500, 11, 0, 594, 523), 121 : (500, 15, -214, 600, 523), 122 : (500, 31, 0, 571, 523), 123 : (334, 92, -196, 445, 722), 124 : (260, 46, -225, 332, 775), 125 : (334, 0, -196, 354, 722), 126 : (584, 111, 180, 580, 326), 161 : (333, 77, -195, 326, 523), 162 : (556, 95, -115, 584, 623), 163 : (556, 49, -16, 634, 718), 164 : (167, -170, -19, 482, 703), 165 : (556, 81, 0, 699, 688), 166 : (556, -52, -207, 654, 737), 167 : (556, 76, -191, 584, 737), 168 : (556, 60, 99, 646, 603), 169 : (191, 157, 463, 285, 718), 170 : (333, 138, 470, 461, 725), 171 : (556, 146, 108, 554, 446), 172 : (333, 137, 108, 340, 446), 173 : (333, 111, 108, 314, 446), 174 : (500, 86, 0, 587, 728), 175 : (500, 86, 0, 585, 728), 177 : (556, 51, 240, 623, 313), 178 : (556, 135, -159, 622, 718), 179 : (556, 52, -159, 623, 718), 180 : (278, 129, 190, 257, 315), 182 : (537, 126, -173, 650, 718), 183 : (350, 91, 202, 413, 517), 184 : (222, 21, -149, 180, 106), 185 : (333, -6, -149, 318, 106), 186 : (333, 124, 463, 448, 718), 187 : (556, 120, 108, 528, 446), 188 : (1000, 115, 0, 908, 106), 189 : (1000, 88, -19, 1029, 703), 191 : (611, 85, -201, 534, 525), 193 : (333, 170, 593, 337, 734), 194 : (333, 248, 593, 475, 734), 195 : (333, 147, 593, 438, 734), 196 : (333, 125, 606, 490, 722), 197 : (333, 143, 627, 468, 684), 198 : (333, 167, 595, 476, 731), 199 : (333, 249, 604, 362, 706), 200 : (333, 168, 604, 443, 706), 202 : (333, 214, 572, 402, 756), 203 : (333, 2, -225, 232, 0), 205 : (333, 157, 593, 565, 734), 206 : (333, 43, -225, 249, 0), 207 : (333, 177, 593, 468, 734), 208 : (1000, 51, 240, 1067, 313), 225 : (1000, 8, 0, 1097, 718), 227 : (370, 127, 405, 449, 737), 232 : (556, 41, 0, 555, 718), 233 : (778, 43, -19, 890, 737), 234 : (1000, 98, -19, 1116, 737), 235 : (365, 141, 405, 468, 737), 241 : (889, 61, -15, 909, 538), 245 : (278, 95, 0, 294, 523), 248 : (222, 41, 0, 347, 718), 249 : (611, 29, -22, 647, 545), 250 : (944, 83, -15, 964, 538), 251 : (611, 67, -15, 658, 728), -1 : (556, 0, 0, 0, 0), } kerning = { (120, 101) : -30, (101, 119) : -20, (101, 118) : -30, (76, 121) : -30, (101, 121) : -20, (101, 120) : -30, (109, 121) : -15, (76, 89) : -140, (76, 86) : -110, (76, 87) : -70, (76, 84) : -110, (75, 111) : -40, (75, 101) : -40, (114, 116) : 40, (75, 121) : -50, (115, 119) : -30, (75, 117) : -30, (121, 97) : -20, (82, 79) : -20, (75, 79) : -50, (114, 112) : 30, (82, 89) : -50, (82, 84) : -30, (82, 85) : -40, (82, 86) : -50, (82, 87) : -30, (103, 114) : -10, (111, 119) : -15, (111, 118) : -15, (102, 111) : -30, (111, 121) : -30, (111, 120) : -30, (85, 65) : -40, (121, 111) : -20, (118, 111) : -25, (118, 97) : -25, (118, 101) : -25, (84, 119) : -120, (84, 117) : -120, (84, 114) : -120, (68, 65) : -40, (102, 97) : -30, (102, 101) : -30, (84, 121) : -120, (68, 86) : -70, (68, 87) : -40, (84, 101) : -120, (84, 97) : -120, (84, 111) : -120, (80, 101) : -50, (119, 101) : -10, (68, 89) : -90, (110, 117) : -10, (110, 118) : -20, (110, 121) : -15, (84, 65) : -120, (84, 79) : -40, (87, 121) : -20, (87, 117) : -30, (87, 111) : -30, (121, 101) : -20, (87, 101) : -30, (87, 97) : -40, (97, 121) : -30, (97, 119) : -20, (97, 118) : -20, (87, 79) : -20, (112, 121) : -30, (87, 65) : -50, (70, 65) : -80, (86, 117) : -70, (109, 117) : -10, (86, 111) : -80, (86, 97) : -70, (86, 101) : -80, (79, 87) : -30, (79, 86) : -50, (79, 84) : -40, (70, 111) : -30, (70, 97) : -50, (70, 101) : -30, (79, 89) : -70, (79, 88) : -60, (119, 111) : -10, (79, 65) : -20, (86, 79) : -40, (86, 65) : -80, (70, 114) : -45, (104, 121) : -30, (119, 97) : -15, (86, 71) : -40, (74, 97) : -20, (99, 107) : -20, (89, 65) : -110, (74, 117) : -20, (89, 79) : -85, (114, 108) : 15, (114, 109) : 25, (114, 110) : 25, (89, 117) : -110, (74, 65) : -20, (114, 107) : 15, (66, 85) : -10, (114, 97) : -10, (107, 101) : -20, (89, 97) : -140, (89, 101) : -140, (114, 121) : 30, (89, 105) : -20, (114, 117) : 15, (114, 118) : 30, (81, 85) : -10, (89, 111) : -140, (65, 121) : -40, (80, 111) : -50, (80, 97) : -40, (65, 117) : -30, (65, 119) : -40, (65, 118) : -40, (122, 101) : -15, (107, 111) : -20, (122, 111) : -15, (114, 105) : 15, (65, 89) : -100, (98, 121) : -20, (65, 81) : -30, (98, 117) : -20, (98, 118) : -20, (80, 65) : -120, (65, 85) : -50, (65, 84) : -120, (65, 87) : -50, (65, 86) : -70, (98, 108) : -20, (98, 98) : -10, (65, 79) : -30, (65, 67) : -30, (65, 71) : -30, } comments = [ 'Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All Rights Reserved.', 'Creation Date: Thu May 1 12:44:31 1997', 'UniqueID 43055', 'VMusage 14960 69346', ] composites = { } pyscript-0.6.1/pyscript/fonts/symbol.py0000644000175000001440000001510510423157534017767 0ustar cochraneusers""" PyScript font module for Symbol """ __revision__ = '$Revision: 1.3 $' attrs = { 'FontName' : 'Symbol', 'CharacterSet' : 'Special', 'FontBBox' : (-180, -293, 1090, 1010), 'Weight' : 'Medium', 'FamilyName' : 'Symbol', 'IsFixedPitch' : 'false', 'Notice' : 'Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All rights reserved.', 'StdVW' : 85, 'EncodingScheme' : 'FontSpecific', 'StdHW' : 92, 'Version' : '001.008', 'UnderlinePosition' : -100, 'UnderlineThickness' : 50, 'ItalicAngle' : 0, 'FullName' : 'Symbol', } chars = { 32 : (250, 0, 0, 0, 0), 33 : (333, 128, -17, 240, 672), 34 : (713, 31, 0, 681, 705), 35 : (500, 20, -16, 481, 673), 36 : (549, 25, 0, 478, 707), 37 : (833, 63, -36, 771, 655), 38 : (778, 41, -18, 750, 661), 39 : (439, 48, -17, 414, 500), 40 : (333, 53, -191, 300, 673), 41 : (333, 30, -191, 277, 673), 42 : (500, 65, 134, 427, 551), 43 : (549, 10, 0, 539, 533), 44 : (250, 56, -152, 194, 104), 45 : (549, 11, 233, 535, 288), 46 : (250, 69, -17, 181, 95), 47 : (278, 0, -18, 254, 646), 48 : (500, 24, -14, 476, 685), 49 : (500, 117, 0, 390, 673), 50 : (500, 25, 0, 475, 685), 51 : (500, 43, -14, 435, 685), 52 : (500, 15, 0, 469, 685), 53 : (500, 32, -14, 445, 690), 54 : (500, 34, -14, 468, 685), 55 : (500, 24, -16, 448, 673), 56 : (500, 56, -14, 445, 685), 57 : (500, 30, -18, 459, 685), 58 : (278, 81, -17, 193, 460), 59 : (278, 83, -152, 221, 460), 60 : (549, 26, 0, 523, 522), 61 : (549, 11, 141, 537, 390), 62 : (549, 26, 0, 523, 522), 63 : (444, 70, -17, 412, 686), 64 : (549, 11, 0, 537, 475), 65 : (722, 4, 0, 684, 673), 66 : (667, 29, 0, 592, 673), 67 : (722, -9, 0, 704, 673), 68 : (612, 6, 0, 608, 688), 69 : (611, 32, 0, 617, 673), 70 : (763, 26, 0, 741, 673), 71 : (603, 24, 0, 609, 673), 72 : (722, 39, 0, 729, 673), 73 : (333, 32, 0, 316, 673), 74 : (631, 18, -18, 623, 689), 75 : (722, 35, 0, 722, 673), 76 : (686, 6, 0, 680, 688), 77 : (889, 28, 0, 887, 673), 78 : (722, 29, -8, 720, 673), 79 : (722, 41, -17, 715, 685), 80 : (768, 25, 0, 745, 673), 81 : (741, 41, -17, 715, 685), 82 : (556, 28, 0, 563, 673), 83 : (592, 5, 0, 589, 673), 84 : (611, 33, 0, 607, 673), 85 : (690, -8, 0, 694, 673), 86 : (439, 40, -233, 436, 500), 87 : (768, 34, 0, 736, 688), 88 : (645, 40, 0, 599, 673), 89 : (795, 15, 0, 781, 684), 90 : (611, 44, 0, 636, 673), 91 : (333, 86, -155, 299, 674), 92 : (863, 163, 0, 701, 487), 93 : (333, 33, -155, 246, 674), 94 : (658, 15, 0, 652, 674), 95 : (500, -2, -125, 502, -75), 96 : (500, 480, 881, 1090, 917), 97 : (631, 41, -18, 622, 500), 98 : (549, 61, -223, 515, 741), 99 : (549, 12, -231, 522, 499), 100 : (494, 40, -19, 481, 740), 101 : (439, 22, -19, 427, 502), 102 : (521, 28, -224, 492, 673), 103 : (411, 5, -225, 484, 499), 104 : (603, 0, -202, 527, 514), 105 : (329, 0, -17, 301, 503), 106 : (603, 36, -224, 587, 499), 107 : (549, 33, 0, 558, 501), 108 : (549, 24, -17, 548, 739), 109 : (576, 33, -223, 567, 500), 110 : (521, -9, -16, 475, 507), 111 : (549, 35, -19, 501, 499), 112 : (549, 10, -19, 530, 487), 113 : (521, 43, -17, 485, 690), 114 : (549, 50, -230, 490, 499), 115 : (603, 30, -21, 588, 500), 116 : (439, 10, -19, 418, 500), 117 : (576, 7, -18, 535, 507), 118 : (713, 12, -18, 671, 583), 119 : (686, 42, -17, 684, 500), 120 : (493, 27, -224, 469, 766), 121 : (686, 12, -228, 701, 500), 122 : (494, 60, -225, 467, 756), 123 : (480, 58, -183, 397, 673), 124 : (200, 65, -293, 135, 707), 125 : (480, 79, -183, 418, 673), 126 : (549, 17, 203, 529, 307), 160 : (750, 20, -12, 714, 685), 161 : (620, -2, 0, 610, 685), 162 : (247, 27, 459, 228, 735), 163 : (549, 29, 0, 526, 639), 164 : (167, -180, -12, 340, 677), 165 : (713, 26, 124, 688, 404), 166 : (500, 2, -193, 494, 686), 167 : (753, 86, -26, 660, 533), 168 : (753, 142, -36, 600, 550), 169 : (753, 117, -33, 631, 532), 170 : (753, 113, -36, 629, 548), 171 : (1042, 24, -15, 1024, 511), 172 : (987, 32, -15, 942, 511), 173 : (603, 45, 0, 571, 910), 174 : (987, 49, -15, 959, 511), 175 : (603, 45, -22, 571, 888), 176 : (400, 50, 385, 350, 685), 177 : (549, 10, 0, 539, 645), 178 : (411, 20, 459, 413, 737), 179 : (549, 29, 0, 526, 639), 180 : (549, 17, 8, 533, 524), 181 : (713, 27, 123, 639, 404), 182 : (494, 26, -20, 462, 746), 183 : (460, 50, 113, 410, 473), 184 : (549, 10, 71, 536, 456), 185 : (549, 15, -25, 540, 549), 186 : (549, 14, 82, 538, 443), 187 : (549, 14, 135, 527, 394), 188 : (1000, 111, -17, 889, 95), 189 : (603, 280, -120, 336, 1010), 190 : (1000, -60, 220, 1050, 276), 191 : (658, 15, -16, 602, 629), 192 : (823, 175, -18, 661, 658), 193 : (686, 10, -53, 578, 740), 194 : (795, 26, -15, 759, 734), 195 : (987, 159, -211, 870, 573), 196 : (768, 43, -17, 733, 673), 197 : (768, 43, -15, 733, 675), 198 : (823, 39, -24, 781, 719), 199 : (768, 40, 0, 732, 509), 200 : (768, 40, -17, 732, 492), 201 : (713, 20, 0, 673, 470), 202 : (713, 20, -125, 673, 470), 203 : (713, 36, -70, 690, 540), 204 : (713, 37, 0, 690, 470), 205 : (713, 37, -125, 690, 470), 206 : (713, 45, 0, 505, 468), 207 : (713, 45, -58, 505, 555), 208 : (768, 26, 0, 738, 673), 209 : (713, 36, -19, 681, 718), 210 : (790, 50, -17, 740, 673), 211 : (790, 51, -15, 741, 675), 212 : (890, 18, 293, 855, 673), 213 : (823, 25, -101, 803, 751), 214 : (549, 10, -38, 515, 917), 215 : (250, 69, 210, 169, 310), 216 : (713, 15, 0, 680, 288), 217 : (603, 23, 0, 583, 454), 218 : (603, 30, 0, 578, 477), 219 : (1042, 27, -20, 1023, 510), 220 : (987, 30, -15, 939, 513), 221 : (603, 39, 2, 567, 911), 222 : (987, 45, -20, 954, 508), 223 : (603, 44, -19, 572, 890), 224 : (494, 18, 0, 466, 745), 225 : (329, 25, -198, 306, 746), 226 : (790, 50, -20, 740, 670), 227 : (790, 49, -15, 739, 675), 228 : (786, 5, 293, 725, 673), 229 : (713, 14, -108, 695, 752), 230 : (384, 24, -293, 436, 926), 231 : (384, 24, -85, 108, 925), 232 : (384, 24, -293, 436, 926), 233 : (384, 0, -80, 349, 926), 234 : (384, 0, -79, 77, 925), 235 : (384, 0, -80, 349, 926), 236 : (494, 209, -85, 445, 925), 237 : (494, 20, -85, 284, 935), 238 : (494, 209, -75, 445, 935), 239 : (494, 209, -85, 284, 935), 241 : (329, 21, -198, 302, 746), 242 : (274, 2, -107, 291, 916), 243 : (686, 308, -88, 675, 920), 244 : (686, 308, -88, 378, 975), 245 : (686, 11, -87, 378, 921), 246 : (384, 54, -293, 466, 926), 247 : (384, 382, -85, 466, 925), 248 : (384, 54, -293, 466, 926), 249 : (384, 22, -80, 371, 926), 250 : (384, 294, -79, 371, 925), 251 : (384, 22, -80, 371, 926), 252 : (494, 48, -85, 284, 925), 253 : (494, 209, -85, 473, 935), 254 : (494, 48, -75, 284, 935), -1 : (790, 56, -3, 733, 808), } kerning = { } comments = [ 'Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All rights reserved.', 'Creation Date: Thu May 1 15:12:25 1997', 'UniqueID 43064', 'VMusage 30820 39997', ] composites = { } pyscript-0.6.1/pyscript/fonts/times_bold.py0000644000175000001440000001674410423157534020615 0ustar cochraneusers""" PyScript font module for Times Bold """ __revision__ = '$Revision: 1.3 $' attrs = { 'FontName' : 'Times-Bold', 'CharacterSet' : 'ExtendedRoman', 'FontBBox' : (-168, -218, 1000, 935), 'Weight' : 'Bold', 'CapHeight' : 676, 'FamilyName' : 'Times', 'IsFixedPitch' : 'false', 'Notice' : 'Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries.', 'StdVW' : 139, 'EncodingScheme' : 'AdobeStandardEncoding', 'StdHW' : 44, 'Version' : '002.000', 'UnderlinePosition' : -100, 'XHeight' : 461, 'UnderlineThickness' : 50, 'Descender' : -217, 'ItalicAngle' : 0, 'Ascender' : 683, 'FullName' : 'Times Bold', } chars = { 32 : (250, 0, 0, 0, 0), 33 : (333, 81, -13, 251, 691), 34 : (555, 83, 404, 472, 691), 35 : (500, 4, 0, 496, 700), 36 : (500, 29, -99, 472, 750), 37 : (1000, 124, -14, 877, 692), 38 : (833, 62, -16, 787, 691), 39 : (333, 79, 356, 263, 691), 40 : (333, 46, -168, 306, 694), 41 : (333, 27, -168, 287, 694), 42 : (500, 56, 255, 447, 691), 43 : (570, 33, 0, 537, 506), 44 : (250, 39, -180, 223, 155), 45 : (333, 44, 171, 287, 287), 46 : (250, 41, -13, 210, 156), 47 : (278, -24, -19, 302, 691), 48 : (500, 24, -13, 476, 688), 49 : (500, 65, 0, 442, 688), 50 : (500, 17, 0, 478, 688), 51 : (500, 16, -14, 468, 688), 52 : (500, 19, 0, 475, 688), 53 : (500, 22, -8, 470, 676), 54 : (500, 28, -13, 475, 688), 55 : (500, 17, 0, 477, 676), 56 : (500, 28, -13, 472, 688), 57 : (500, 26, -13, 473, 688), 58 : (333, 82, -13, 251, 472), 59 : (333, 82, -180, 266, 472), 60 : (570, 31, -8, 539, 514), 61 : (570, 33, 107, 537, 399), 62 : (570, 31, -8, 539, 514), 63 : (500, 57, -13, 445, 689), 64 : (930, 108, -19, 822, 691), 65 : (722, 9, 0, 689, 690), 66 : (667, 16, 0, 619, 676), 67 : (722, 49, -19, 687, 691), 68 : (722, 14, 0, 690, 676), 69 : (667, 16, 0, 641, 676), 70 : (611, 16, 0, 583, 676), 71 : (778, 37, -19, 755, 691), 72 : (778, 21, 0, 759, 676), 73 : (389, 20, 0, 370, 676), 74 : (500, 3, -96, 479, 676), 75 : (778, 30, 0, 769, 676), 76 : (667, 19, 0, 638, 676), 77 : (944, 14, 0, 921, 676), 78 : (722, 16, -18, 701, 676), 79 : (778, 35, -19, 743, 691), 80 : (611, 16, 0, 600, 676), 81 : (778, 35, -176, 743, 691), 82 : (722, 26, 0, 715, 676), 83 : (556, 35, -19, 513, 692), 84 : (667, 31, 0, 636, 676), 85 : (722, 16, -19, 701, 676), 86 : (722, 16, -18, 701, 676), 87 : (1000, 19, -15, 981, 676), 88 : (722, 16, 0, 699, 676), 89 : (722, 15, 0, 699, 676), 90 : (667, 28, 0, 634, 676), 91 : (333, 67, -149, 301, 678), 92 : (278, -25, -19, 303, 691), 93 : (333, 32, -149, 266, 678), 94 : (581, 73, 311, 509, 676), 95 : (500, 0, -125, 500, -75), 96 : (333, 70, 356, 254, 691), 97 : (500, 25, -14, 488, 473), 98 : (556, 17, -14, 521, 676), 99 : (444, 25, -14, 430, 473), 100 : (556, 25, -14, 534, 676), 101 : (444, 25, -14, 426, 473), 102 : (333, 14, 0, 389, 691), 103 : (500, 28, -206, 483, 473), 104 : (556, 16, 0, 534, 676), 105 : (278, 16, 0, 255, 691), 106 : (333, -57, -203, 263, 691), 107 : (556, 22, 0, 543, 676), 108 : (278, 16, 0, 255, 676), 109 : (833, 16, 0, 814, 473), 110 : (556, 21, 0, 539, 473), 111 : (500, 25, -14, 476, 473), 112 : (556, 19, -205, 524, 473), 113 : (556, 34, -205, 536, 473), 114 : (444, 29, 0, 434, 473), 115 : (389, 25, -14, 361, 473), 116 : (333, 20, -12, 332, 630), 117 : (556, 16, -14, 537, 461), 118 : (500, 21, -14, 485, 461), 119 : (722, 23, -14, 707, 461), 120 : (500, 12, 0, 484, 461), 121 : (500, 16, -205, 480, 461), 122 : (444, 21, 0, 420, 461), 123 : (394, 22, -175, 340, 698), 124 : (220, 66, -218, 154, 782), 125 : (394, 54, -175, 372, 698), 126 : (520, 29, 173, 491, 333), 161 : (333, 82, -203, 252, 501), 162 : (500, 53, -140, 458, 588), 163 : (500, 21, -14, 477, 684), 164 : (167, -168, -12, 329, 688), 165 : (500, -64, 0, 547, 676), 166 : (500, 0, -155, 498, 706), 167 : (500, 57, -132, 443, 691), 168 : (500, -26, 61, 526, 613), 169 : (278, 75, 404, 204, 691), 170 : (500, 32, 356, 486, 691), 171 : (500, 23, 36, 473, 415), 172 : (333, 51, 36, 305, 415), 173 : (333, 28, 36, 282, 415), 174 : (556, 14, 0, 536, 691), 175 : (556, 14, 0, 536, 691), 177 : (500, 0, 181, 500, 271), 178 : (500, 47, -134, 453, 691), 179 : (500, 45, -132, 456, 691), 180 : (250, 41, 248, 210, 417), 182 : (540, 0, -186, 519, 676), 183 : (350, 35, 198, 315, 478), 184 : (333, 79, -180, 263, 155), 185 : (500, 14, -180, 468, 155), 186 : (500, 14, 356, 468, 691), 187 : (500, 27, 36, 477, 415), 188 : (1000, 82, -13, 917, 156), 189 : (1000, 7, -29, 995, 706), 191 : (500, 55, -201, 443, 501), 193 : (333, 8, 528, 246, 713), 194 : (333, 86, 528, 324, 713), 195 : (333, -2, 528, 335, 704), 196 : (333, -16, 547, 349, 674), 197 : (333, 1, 565, 331, 637), 198 : (333, 15, 528, 318, 691), 199 : (333, 103, 536, 258, 691), 200 : (333, -2, 537, 335, 667), 202 : (333, 60, 527, 273, 740), 203 : (333, 68, -218, 294, 0), 205 : (333, -13, 528, 425, 713), 206 : (333, 90, -193, 319, 24), 207 : (333, -2, 528, 335, 704), 208 : (1000, 0, 181, 1000, 271), 225 : (1000, 4, 0, 951, 676), 227 : (300, -1, 397, 301, 688), 232 : (667, 19, 0, 638, 676), 233 : (778, 35, -74, 743, 737), 234 : (1000, 22, -5, 981, 684), 235 : (330, 18, 397, 312, 688), 241 : (722, 33, -14, 693, 473), 245 : (278, 16, 0, 255, 461), 248 : (278, -22, 0, 303, 676), 249 : (500, 25, -92, 476, 549), 250 : (722, 22, -14, 696, 473), 251 : (556, 19, -12, 517, 691), -1 : (500, 0, 0, 0, 0), } kerning = { (101, 118) : -15, (76, 121) : -55, (76, 89) : -92, (76, 86) : -92, (76, 87) : -92, (76, 84) : -92, (75, 111) : -25, (75, 101) : -25, (100, 119) : -15, (75, 121) : -45, (75, 117) : -15, (82, 79) : -30, (75, 79) : -30, (114, 112) : -10, (114, 113) : -18, (82, 89) : -35, (82, 84) : -40, (82, 85) : -30, (82, 86) : -55, (82, 87) : -35, (102, 105) : -25, (111, 119) : -10, (111, 118) : -10, (102, 111) : -25, (78, 65) : -20, (85, 65) : -60, (121, 111) : -25, (118, 111) : -10, (118, 97) : -10, (118, 101) : -10, (84, 119) : -74, (84, 117) : -92, (84, 114) : -74, (68, 65) : -35, (84, 121) : -34, (68, 86) : -40, (68, 87) : -40, (84, 101) : -92, (84, 97) : -92, (84, 111) : -92, (80, 101) : -20, (84, 105) : -18, (110, 118) : -40, (84, 65) : -90, (84, 79) : -18, (87, 121) : -60, (87, 117) : -50, (87, 111) : -75, (121, 101) : -10, (87, 105) : -18, (87, 101) : -65, (87, 97) : -65, (97, 118) : -25, (87, 79) : -10, (105, 118) : -10, (68, 89) : -40, (87, 65) : -120, (70, 65) : -90, (86, 117) : -92, (86, 105) : -37, (86, 111) : -100, (86, 97) : -92, (86, 101) : -100, (79, 87) : -50, (79, 86) : -50, (79, 84) : -40, (70, 111) : -25, (70, 97) : -25, (70, 101) : -25, (79, 89) : -50, (79, 88) : -40, (119, 111) : -10, (79, 65) : -40, (86, 79) : -45, (86, 65) : -135, (104, 121) : -15, (86, 71) : -30, (74, 101) : -15, (74, 97) : -15, (74, 111) : -15, (89, 65) : -110, (74, 117) : -15, (89, 79) : -35, (114, 110) : -15, (114, 111) : -18, (89, 117) : -92, (74, 65) : -30, (66, 85) : -10, (114, 103) : -10, (107, 101) : -10, (114, 99) : -18, (89, 97) : -85, (107, 121) : -15, (89, 101) : -111, (89, 105) : -37, (114, 118) : -10, (81, 85) : -10, (66, 65) : -30, (89, 111) : -111, (65, 121) : -74, (80, 111) : -20, (65, 112) : -25, (80, 97) : -10, (65, 117) : -50, (65, 119) : -90, (65, 118) : -100, (107, 111) : -15, (65, 89) : -100, (65, 81) : -45, (98, 117) : -20, (98, 118) : -15, (80, 65) : -74, (65, 85) : -50, (65, 84) : -95, (65, 87) : -130, (65, 86) : -145, (98, 98) : -10, (65, 79) : -45, (114, 101) : -18, (65, 67) : -55, (65, 71) : -55, } comments = [ 'Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.', 'Creation Date: Thu May 1 12:52:56 1997', 'UniqueID 43065', 'VMusage 41636 52661', ] composites = { } pyscript-0.6.1/pyscript/fonts/times_bolditalic.py0000644000175000001440000001666410423157534022004 0ustar cochraneusers""" PyScript font module for Times Bold Italic """ __revision__ = '$Revision: 1.3 $' attrs = { 'FontName' : 'Times-BoldItalic', 'CharacterSet' : 'ExtendedRoman', 'FontBBox' : (-200, -218, 996, 921), 'Weight' : 'Bold', 'CapHeight' : 669, 'FamilyName' : 'Times', 'IsFixedPitch' : 'false', 'Notice' : 'Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries.', 'StdVW' : 121, 'EncodingScheme' : 'AdobeStandardEncoding', 'StdHW' : 42, 'Version' : '002.000', 'UnderlinePosition' : -100, 'XHeight' : 462, 'UnderlineThickness' : 50, 'Descender' : -217, 'ItalicAngle' : -15, 'Ascender' : 683, 'FullName' : 'Times Bold Italic', } chars = { 32 : (250, 0, 0, 0, 0), 33 : (389, 67, -13, 370, 684), 34 : (555, 136, 398, 536, 685), 35 : (500, -33, 0, 533, 700), 36 : (500, -20, -100, 497, 733), 37 : (833, 39, -10, 793, 692), 38 : (778, 5, -19, 699, 682), 39 : (333, 98, 369, 302, 685), 40 : (333, 28, -179, 344, 685), 41 : (333, -44, -179, 271, 685), 42 : (500, 65, 249, 456, 685), 43 : (570, 33, 0, 537, 506), 44 : (250, -60, -182, 144, 134), 45 : (333, 2, 166, 271, 282), 46 : (250, -9, -13, 139, 135), 47 : (278, -64, -18, 342, 685), 48 : (500, 17, -14, 477, 683), 49 : (500, 5, 0, 419, 683), 50 : (500, -27, 0, 446, 683), 51 : (500, -15, -13, 450, 683), 52 : (500, -15, 0, 503, 683), 53 : (500, -11, -13, 487, 669), 54 : (500, 23, -15, 509, 679), 55 : (500, 52, 0, 525, 669), 56 : (500, 3, -13, 476, 683), 57 : (500, -12, -10, 475, 683), 58 : (333, 23, -13, 264, 459), 59 : (333, -25, -183, 264, 459), 60 : (570, 31, -8, 539, 514), 61 : (570, 33, 107, 537, 399), 62 : (570, 31, -8, 539, 514), 63 : (500, 79, -13, 470, 684), 64 : (832, 63, -18, 770, 685), 65 : (667, -67, 0, 593, 683), 66 : (667, -24, 0, 624, 669), 67 : (667, 32, -18, 677, 685), 68 : (722, -46, 0, 685, 669), 69 : (667, -27, 0, 653, 669), 70 : (667, -13, 0, 660, 669), 71 : (722, 21, -18, 706, 685), 72 : (778, -24, 0, 799, 669), 73 : (389, -32, 0, 406, 669), 74 : (500, -46, -99, 524, 669), 75 : (667, -21, 0, 702, 669), 76 : (611, -22, 0, 590, 669), 77 : (889, -29, -12, 917, 669), 78 : (722, -27, -15, 748, 669), 79 : (722, 27, -18, 691, 685), 80 : (611, -27, 0, 613, 669), 81 : (722, 27, -208, 691, 685), 82 : (667, -29, 0, 623, 669), 83 : (556, 2, -18, 526, 685), 84 : (611, 50, 0, 650, 669), 85 : (722, 67, -18, 744, 669), 86 : (667, 65, -18, 715, 669), 87 : (889, 65, -18, 940, 669), 88 : (667, -24, 0, 694, 669), 89 : (611, 73, 0, 659, 669), 90 : (611, -11, 0, 590, 669), 91 : (333, -37, -159, 362, 674), 92 : (278, -1, -18, 279, 685), 93 : (333, -56, -157, 343, 674), 94 : (570, 67, 304, 503, 669), 95 : (500, 0, -125, 500, -75), 96 : (333, 128, 369, 332, 685), 97 : (500, -21, -14, 455, 462), 98 : (500, -14, -13, 444, 699), 99 : (444, -5, -13, 392, 462), 100 : (500, -21, -13, 517, 699), 101 : (444, 5, -13, 398, 462), 102 : (333, -169, -205, 446, 698), 103 : (500, -52, -203, 478, 462), 104 : (556, -13, -9, 498, 699), 105 : (278, 2, -9, 263, 684), 106 : (278, -189, -207, 279, 684), 107 : (500, -23, -8, 483, 699), 108 : (278, 2, -9, 290, 699), 109 : (778, -14, -9, 722, 462), 110 : (556, -6, -9, 493, 462), 111 : (500, -3, -13, 441, 462), 112 : (500, -120, -205, 446, 462), 113 : (500, 1, -205, 471, 462), 114 : (389, -21, 0, 389, 462), 115 : (389, -19, -13, 333, 462), 116 : (278, -11, -9, 281, 594), 117 : (556, 15, -9, 492, 462), 118 : (444, 16, -13, 401, 462), 119 : (667, 16, -13, 614, 462), 120 : (500, -46, -13, 469, 462), 121 : (444, -94, -205, 392, 462), 122 : (389, -43, -78, 368, 449), 123 : (348, 5, -187, 436, 686), 124 : (220, 66, -218, 154, 782), 125 : (348, -129, -187, 302, 686), 126 : (570, 54, 173, 516, 333), 161 : (389, 19, -205, 322, 492), 162 : (500, 42, -143, 439, 576), 163 : (500, -32, -12, 510, 683), 164 : (167, -169, -14, 324, 683), 165 : (500, 33, 0, 628, 669), 166 : (500, -87, -156, 537, 707), 167 : (500, 36, -143, 459, 685), 168 : (500, -26, 34, 526, 586), 169 : (278, 128, 398, 268, 685), 170 : (500, 53, 369, 513, 685), 171 : (500, 12, 32, 468, 415), 172 : (333, 32, 32, 303, 415), 173 : (333, 10, 32, 281, 415), 174 : (556, -188, -205, 514, 703), 175 : (556, -186, -205, 553, 704), 177 : (500, -40, 178, 477, 269), 178 : (500, 91, -145, 494, 685), 179 : (500, 10, -139, 493, 685), 180 : (250, 51, 257, 199, 405), 182 : (500, -57, -193, 562, 669), 183 : (350, 0, 175, 350, 525), 184 : (333, -5, -182, 199, 134), 185 : (500, -57, -182, 403, 134), 186 : (500, 53, 369, 513, 685), 187 : (500, 12, 32, 468, 415), 188 : (1000, 40, -13, 852, 135), 189 : (1000, 7, -29, 996, 706), 191 : (500, 30, -205, 421, 492), 193 : (333, 85, 516, 297, 697), 194 : (333, 139, 516, 379, 697), 195 : (333, 40, 516, 367, 690), 196 : (333, 48, 536, 407, 655), 197 : (333, 51, 553, 393, 623), 198 : (333, 71, 516, 387, 678), 199 : (333, 163, 550, 298, 684), 200 : (333, 55, 550, 402, 684), 202 : (333, 127, 516, 340, 729), 203 : (333, -80, -218, 156, 5), 205 : (333, 69, 516, 498, 697), 206 : (333, 15, -183, 244, 34), 207 : (333, 79, 516, 411, 690), 208 : (1000, -40, 178, 977, 269), 225 : (944, -64, 0, 918, 669), 227 : (266, 16, 399, 330, 685), 232 : (611, -22, 0, 590, 669), 233 : (722, 27, -125, 691, 764), 234 : (944, 23, -8, 946, 677), 235 : (300, 56, 400, 347, 685), 241 : (722, -5, -13, 673, 462), 245 : (278, 2, -9, 238, 462), 248 : (278, -7, -9, 307, 699), 249 : (500, -3, -119, 441, 560), 250 : (722, 6, -13, 674, 462), 251 : (500, -200, -200, 473, 705), -1 : (500, 0, 0, 0, 0), } kerning = { (101, 98) : -10, (120, 101) : -10, (76, 121) : -37, (76, 89) : -37, (76, 86) : -37, (76, 87) : -37, (76, 84) : -18, (75, 111) : -25, (70, 105) : -40, (75, 101) : -25, (75, 121) : -20, (75, 117) : -20, (82, 79) : -40, (75, 79) : -30, (82, 89) : -18, (82, 84) : -30, (82, 85) : -40, (82, 86) : -18, (82, 87) : -18, (111, 119) : -25, (111, 118) : -15, (102, 111) : -10, (111, 121) : -10, (111, 120) : -10, (78, 65) : -30, (85, 65) : -45, (118, 111) : -15, (118, 101) : -15, (84, 119) : -37, (84, 117) : -37, (84, 114) : -37, (68, 65) : -25, (102, 101) : -10, (102, 102) : -18, (84, 121) : -37, (68, 86) : -50, (68, 87) : -40, (84, 101) : -92, (84, 97) : -92, (84, 111) : -95, (80, 101) : -50, (119, 101) : -10, (84, 105) : -37, (110, 118) : -40, (84, 65) : -55, (84, 79) : -18, (87, 121) : -55, (87, 117) : -55, (87, 111) : -80, (87, 105) : -37, (87, 101) : -90, (87, 97) : -85, (87, 79) : -15, (68, 89) : -50, (87, 65) : -74, (99, 104) : -10, (70, 65) : -100, (86, 117) : -55, (86, 105) : -55, (86, 111) : -111, (86, 97) : -111, (86, 101) : -111, (79, 87) : -50, (79, 86) : -50, (79, 84) : -40, (70, 111) : -70, (70, 97) : -95, (70, 101) : -100, (79, 89) : -50, (79, 88) : -40, (119, 111) : -15, (79, 65) : -40, (86, 79) : -30, (86, 65) : -85, (70, 114) : -50, (119, 97) : -10, (86, 71) : -10, (74, 101) : -40, (74, 97) : -40, (99, 107) : -10, (74, 111) : -40, (89, 65) : -74, (74, 117) : -40, (89, 79) : -25, (89, 117) : -92, (74, 65) : -25, (66, 85) : -10, (107, 101) : -30, (89, 97) : -92, (89, 101) : -111, (89, 105) : -55, (81, 85) : -10, (66, 65) : -25, (89, 111) : -111, (65, 121) : -74, (80, 111) : -55, (80, 97) : -40, (65, 117) : -30, (65, 119) : -74, (65, 118) : -74, (107, 111) : -10, (65, 89) : -70, (65, 81) : -55, (98, 117) : -20, (80, 65) : -85, (65, 85) : -50, (65, 84) : -55, (65, 87) : -100, (65, 86) : -95, (98, 98) : -10, (65, 79) : -50, (65, 67) : -65, (65, 71) : -60, } comments = [ 'Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.', 'Creation Date: Thu May 1 13:04:06 1997', 'UniqueID 43066', 'VMusage 45874 56899', ] composites = { } pyscript-0.6.1/pyscript/fonts/times_italic.py0000644000175000001440000001673710423157534021144 0ustar cochraneusers""" PyScript font module for Times Italic """ __revision__ = '$Revision: 1.3 $' attrs = { 'FontName' : 'Times-Italic', 'CharacterSet' : 'ExtendedRoman', 'FontBBox' : (-169, -217, 1010, 883), 'Weight' : 'Medium', 'CapHeight' : 653, 'FamilyName' : 'Times', 'IsFixedPitch' : 'false', 'Notice' : 'Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries.', 'StdVW' : 76, 'EncodingScheme' : 'AdobeStandardEncoding', 'StdHW' : 32, 'Version' : '002.000', 'UnderlinePosition' : -100, 'XHeight' : 441, 'UnderlineThickness' : 50, 'Descender' : -217, 'ItalicAngle' : '-15.5', 'Ascender' : 683, 'FullName' : 'Times Italic', } chars = { 32 : (250, 0, 0, 0, 0), 33 : (333, 39, -11, 302, 667), 34 : (420, 144, 421, 432, 666), 35 : (500, 2, 0, 540, 676), 36 : (500, 31, -89, 497, 731), 37 : (833, 79, -13, 790, 676), 38 : (778, 76, -18, 723, 666), 39 : (333, 151, 436, 290, 666), 40 : (333, 42, -181, 315, 669), 41 : (333, 16, -180, 289, 669), 42 : (500, 128, 255, 492, 666), 43 : (675, 86, 0, 590, 506), 44 : (250, -4, -129, 135, 101), 45 : (333, 49, 192, 282, 255), 46 : (250, 27, -11, 138, 100), 47 : (278, -65, -18, 386, 666), 48 : (500, 32, -7, 497, 676), 49 : (500, 49, 0, 409, 676), 50 : (500, 12, 0, 452, 676), 51 : (500, 15, -7, 465, 676), 52 : (500, 1, 0, 479, 676), 53 : (500, 15, -7, 491, 666), 54 : (500, 30, -7, 521, 686), 55 : (500, 75, -8, 537, 666), 56 : (500, 30, -7, 493, 676), 57 : (500, 23, -17, 492, 676), 58 : (333, 50, -11, 261, 441), 59 : (333, 27, -129, 261, 441), 60 : (675, 84, -8, 592, 514), 61 : (675, 86, 120, 590, 386), 62 : (675, 84, -8, 592, 514), 63 : (500, 132, -12, 472, 664), 64 : (920, 118, -18, 806, 666), 65 : (611, -51, 0, 564, 668), 66 : (611, -8, 0, 588, 653), 67 : (667, 66, -18, 689, 666), 68 : (722, -8, 0, 700, 653), 69 : (611, -1, 0, 634, 653), 70 : (611, 8, 0, 645, 653), 71 : (722, 52, -18, 722, 666), 72 : (722, -8, 0, 767, 653), 73 : (333, -8, 0, 384, 653), 74 : (444, -6, -18, 491, 653), 75 : (667, 7, 0, 722, 653), 76 : (556, -8, 0, 559, 653), 77 : (833, -18, 0, 873, 653), 78 : (667, -20, -15, 727, 653), 79 : (722, 60, -18, 699, 666), 80 : (611, 0, 0, 605, 653), 81 : (722, 59, -182, 699, 666), 82 : (611, -13, 0, 588, 653), 83 : (500, 17, -18, 508, 667), 84 : (556, 59, 0, 633, 653), 85 : (722, 102, -18, 765, 653), 86 : (611, 76, -18, 688, 653), 87 : (833, 71, -18, 906, 653), 88 : (611, -29, 0, 655, 653), 89 : (556, 78, 0, 633, 653), 90 : (556, -6, 0, 606, 653), 91 : (389, 21, -153, 391, 663), 92 : (278, -41, -18, 319, 666), 93 : (389, 12, -153, 382, 663), 94 : (422, 0, 301, 422, 666), 95 : (500, 0, -125, 500, -75), 96 : (333, 171, 436, 310, 666), 97 : (500, 17, -11, 476, 441), 98 : (500, 23, -11, 473, 683), 99 : (444, 30, -11, 425, 441), 100 : (500, 15, -13, 527, 683), 101 : (444, 31, -11, 412, 441), 102 : (278, -147, -207, 424, 678), 103 : (500, 8, -206, 472, 441), 104 : (500, 19, -9, 478, 683), 105 : (278, 49, -11, 264, 654), 106 : (278, -124, -207, 276, 654), 107 : (444, 14, -11, 461, 683), 108 : (278, 41, -11, 279, 683), 109 : (722, 12, -9, 704, 441), 110 : (500, 14, -9, 474, 441), 111 : (500, 27, -11, 468, 441), 112 : (500, -75, -205, 469, 441), 113 : (500, 25, -209, 483, 441), 114 : (389, 45, 0, 412, 441), 115 : (389, 16, -13, 366, 442), 116 : (278, 37, -11, 296, 546), 117 : (500, 42, -11, 475, 441), 118 : (444, 21, -18, 426, 441), 119 : (667, 16, -18, 648, 441), 120 : (444, -27, -11, 447, 441), 121 : (444, -24, -206, 426, 441), 122 : (389, -2, -81, 380, 428), 123 : (400, 51, -177, 407, 687), 124 : (275, 105, -217, 171, 783), 125 : (400, -7, -177, 349, 687), 126 : (541, 40, 183, 502, 323), 161 : (389, 59, -205, 322, 473), 162 : (500, 77, -143, 472, 560), 163 : (500, 10, -6, 517, 670), 164 : (167, -169, -10, 337, 676), 165 : (500, 27, 0, 603, 653), 166 : (500, 25, -182, 507, 682), 167 : (500, 53, -162, 461, 666), 168 : (500, -22, 53, 522, 597), 169 : (214, 132, 421, 241, 666), 170 : (556, 166, 436, 514, 666), 171 : (500, 53, 37, 445, 403), 172 : (333, 51, 37, 281, 403), 173 : (333, 52, 37, 282, 403), 174 : (500, -141, -207, 481, 681), 175 : (500, -141, -204, 518, 682), 177 : (500, -6, 197, 505, 243), 178 : (500, 101, -159, 488, 666), 179 : (500, 22, -143, 491, 666), 180 : (250, 70, 199, 181, 310), 182 : (523, 55, -123, 616, 653), 183 : (350, 40, 191, 310, 461), 184 : (333, 44, -129, 183, 101), 185 : (556, 57, -129, 405, 101), 186 : (556, 151, 436, 499, 666), 187 : (500, 55, 37, 447, 403), 188 : (889, 57, -11, 762, 100), 189 : (1000, 25, -19, 1010, 706), 191 : (500, 28, -205, 368, 471), 193 : (333, 121, 492, 311, 664), 194 : (333, 180, 494, 403, 664), 195 : (333, 91, 492, 385, 661), 196 : (333, 100, 517, 427, 624), 197 : (333, 99, 532, 411, 583), 198 : (333, 117, 492, 418, 650), 199 : (333, 207, 548, 305, 646), 200 : (333, 107, 548, 405, 646), 202 : (333, 155, 492, 355, 691), 203 : (333, -30, -217, 182, 0), 205 : (333, 93, 494, 486, 664), 206 : (333, 20, -169, 203, 40), 207 : (333, 121, 492, 426, 661), 208 : (889, -6, 197, 894, 243), 225 : (889, -27, 0, 911, 653), 227 : (276, 42, 406, 352, 676), 232 : (556, -8, 0, 559, 653), 233 : (722, 60, -105, 699, 722), 234 : (944, 49, -8, 964, 666), 235 : (310, 67, 406, 362, 676), 241 : (667, 23, -11, 640, 441), 245 : (278, 49, -11, 235, 441), 248 : (278, 41, -11, 312, 683), 249 : (500, 28, -135, 469, 554), 250 : (667, 20, -12, 646, 441), 251 : (500, -168, -207, 493, 679), -1 : (500, 0, 0, 0, 0), } kerning = { (101, 103) : -40, (101, 119) : -15, (101, 118) : -15, (76, 121) : -30, (101, 121) : -30, (101, 120) : -20, (76, 89) : -20, (76, 86) : -55, (76, 87) : -55, (76, 84) : -20, (75, 111) : -40, (70, 105) : -45, (75, 101) : -35, (75, 121) : -40, (75, 117) : -40, (82, 79) : -40, (75, 79) : -50, (114, 113) : -37, (82, 89) : -18, (82, 85) : -40, (82, 86) : -18, (82, 87) : -18, (102, 105) : -20, (103, 103) : -10, (103, 101) : -10, (111, 118) : -10, (111, 103) : -10, (78, 65) : -27, (85, 65) : -40, (84, 119) : -74, (84, 117) : -55, (84, 114) : -55, (68, 65) : -35, (102, 102) : -18, (84, 121) : -74, (68, 86) : -40, (68, 87) : -40, (84, 101) : -92, (84, 97) : -92, (84, 111) : -92, (80, 101) : -80, (84, 105) : -55, (110, 118) : -40, (84, 65) : -50, (84, 79) : -18, (87, 121) : -70, (87, 117) : -55, (87, 111) : -92, (87, 105) : -55, (87, 101) : -92, (87, 97) : -92, (87, 79) : -25, (68, 89) : -40, (87, 65) : -60, (99, 104) : -15, (70, 65) : -115, (86, 117) : -74, (86, 105) : -74, (86, 111) : -111, (86, 97) : -111, (86, 101) : -111, (79, 87) : -50, (79, 86) : -50, (79, 84) : -40, (70, 111) : -105, (70, 97) : -75, (70, 101) : -75, (79, 89) : -50, (79, 88) : -40, (97, 103) : -10, (79, 65) : -55, (86, 79) : -30, (86, 65) : -60, (70, 114) : -55, (74, 101) : -25, (74, 97) : -35, (99, 107) : -20, (74, 111) : -25, (89, 65) : -50, (74, 117) : -35, (89, 79) : -15, (114, 111) : -45, (89, 117) : -92, (74, 65) : -40, (114, 100) : -37, (66, 85) : -10, (114, 103) : -37, (114, 97) : -15, (107, 101) : -10, (114, 99) : -37, (89, 97) : -92, (107, 121) : -10, (89, 101) : -92, (89, 105) : -74, (81, 85) : -10, (66, 65) : -25, (89, 111) : -92, (114, 115) : -10, (65, 121) : -55, (80, 111) : -80, (80, 97) : -80, (65, 117) : -20, (65, 119) : -55, (65, 118) : -55, (107, 111) : -10, (65, 89) : -55, (65, 81) : -40, (98, 117) : -20, (80, 65) : -90, (65, 85) : -50, (65, 84) : -37, (65, 87) : -95, (65, 86) : -105, (65, 79) : -40, (114, 101) : -37, (65, 67) : -30, (65, 71) : -35, } comments = [ 'Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.', 'Creation Date: Thu May 1 12:56:55 1997', 'UniqueID 43067', 'VMusage 47727 58752', ] composites = { } pyscript-0.6.1/pyscript/fonts/times_roman.py0000644000175000001440000001657210423157534021010 0ustar cochraneusers""" PyScript font module for Times Roman """ __revision__ = '$Revision: 1.3 $' attrs = { 'FontName' : 'Times-Roman', 'CharacterSet' : 'ExtendedRoman', 'FontBBox' : (-168, -218, 1000, 898), 'Weight' : 'Roman', 'CapHeight' : 662, 'FamilyName' : 'Times', 'IsFixedPitch' : 'false', 'Notice' : 'Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries.', 'StdVW' : 84, 'EncodingScheme' : 'AdobeStandardEncoding', 'StdHW' : 28, 'Version' : '002.000', 'UnderlinePosition' : -100, 'XHeight' : 450, 'UnderlineThickness' : 50, 'Descender' : -217, 'ItalicAngle' : 0, 'Ascender' : 683, 'FullName' : 'Times Roman', } chars = { 32 : (250, 0, 0, 0, 0), 33 : (333, 130, -9, 238, 676), 34 : (408, 77, 431, 331, 676), 35 : (500, 5, 0, 496, 662), 36 : (500, 44, -87, 457, 727), 37 : (833, 61, -13, 772, 676), 38 : (778, 42, -13, 750, 676), 39 : (333, 79, 433, 218, 676), 40 : (333, 48, -177, 304, 676), 41 : (333, 29, -177, 285, 676), 42 : (500, 69, 265, 432, 676), 43 : (564, 30, 0, 534, 506), 44 : (250, 56, -141, 195, 102), 45 : (333, 39, 194, 285, 257), 46 : (250, 70, -11, 181, 100), 47 : (278, -9, -14, 287, 676), 48 : (500, 24, -14, 476, 676), 49 : (500, 111, 0, 394, 676), 50 : (500, 30, 0, 475, 676), 51 : (500, 43, -14, 431, 676), 52 : (500, 12, 0, 472, 676), 53 : (500, 32, -14, 438, 688), 54 : (500, 34, -14, 468, 684), 55 : (500, 20, -8, 449, 662), 56 : (500, 56, -14, 445, 676), 57 : (500, 30, -22, 459, 676), 58 : (278, 81, -11, 192, 459), 59 : (278, 80, -141, 219, 459), 60 : (564, 28, -8, 536, 514), 61 : (564, 30, 120, 534, 386), 62 : (564, 28, -8, 536, 514), 63 : (444, 68, -8, 414, 676), 64 : (921, 116, -14, 809, 676), 65 : (722, 15, 0, 706, 674), 66 : (667, 17, 0, 593, 662), 67 : (667, 28, -14, 633, 676), 68 : (722, 16, 0, 685, 662), 69 : (611, 12, 0, 597, 662), 70 : (556, 12, 0, 546, 662), 71 : (722, 32, -14, 709, 676), 72 : (722, 19, 0, 702, 662), 73 : (333, 18, 0, 315, 662), 74 : (389, 10, -14, 370, 662), 75 : (722, 34, 0, 723, 662), 76 : (611, 12, 0, 598, 662), 77 : (889, 12, 0, 863, 662), 78 : (722, 12, -11, 707, 662), 79 : (722, 34, -14, 688, 676), 80 : (556, 16, 0, 542, 662), 81 : (722, 34, -178, 701, 676), 82 : (667, 17, 0, 659, 662), 83 : (556, 42, -14, 491, 676), 84 : (611, 17, 0, 593, 662), 85 : (722, 14, -14, 705, 662), 86 : (722, 16, -11, 697, 662), 87 : (944, 5, -11, 932, 662), 88 : (722, 10, 0, 704, 662), 89 : (722, 22, 0, 703, 662), 90 : (611, 9, 0, 597, 662), 91 : (333, 88, -156, 299, 662), 92 : (278, -9, -14, 287, 676), 93 : (333, 34, -156, 245, 662), 94 : (469, 24, 297, 446, 662), 95 : (500, 0, -125, 500, -75), 96 : (333, 115, 433, 254, 676), 97 : (444, 37, -10, 442, 460), 98 : (500, 3, -10, 468, 683), 99 : (444, 25, -10, 412, 460), 100 : (500, 27, -10, 491, 683), 101 : (444, 25, -10, 424, 460), 102 : (333, 20, 0, 383, 683), 103 : (500, 28, -218, 470, 460), 104 : (500, 9, 0, 487, 683), 105 : (278, 16, 0, 253, 683), 106 : (278, -70, -218, 194, 683), 107 : (500, 7, 0, 505, 683), 108 : (278, 19, 0, 257, 683), 109 : (778, 16, 0, 775, 460), 110 : (500, 16, 0, 485, 460), 111 : (500, 29, -10, 470, 460), 112 : (500, 5, -217, 470, 460), 113 : (500, 24, -217, 488, 460), 114 : (333, 5, 0, 335, 460), 115 : (389, 51, -10, 348, 460), 116 : (278, 13, -10, 279, 579), 117 : (500, 9, -10, 479, 450), 118 : (500, 19, -14, 477, 450), 119 : (722, 21, -14, 694, 450), 120 : (500, 17, 0, 479, 450), 121 : (500, 14, -218, 475, 450), 122 : (444, 27, 0, 418, 450), 123 : (480, 100, -181, 350, 680), 124 : (200, 67, -218, 133, 782), 125 : (480, 130, -181, 380, 680), 126 : (541, 40, 183, 502, 323), 161 : (333, 97, -218, 205, 467), 162 : (500, 53, -138, 448, 579), 163 : (500, 12, -8, 490, 676), 164 : (167, -168, -14, 331, 676), 165 : (500, -53, 0, 512, 662), 166 : (500, 7, -189, 490, 676), 167 : (500, 70, -148, 426, 676), 168 : (500, -22, 58, 522, 602), 169 : (180, 48, 431, 133, 676), 170 : (444, 43, 433, 414, 676), 171 : (500, 42, 33, 456, 416), 172 : (333, 63, 33, 285, 416), 173 : (333, 48, 33, 270, 416), 174 : (556, 31, 0, 521, 683), 175 : (556, 32, 0, 521, 683), 177 : (500, 0, 201, 500, 250), 178 : (500, 59, -149, 442, 676), 179 : (500, 58, -153, 442, 676), 180 : (250, 70, 199, 181, 310), 182 : (453, -22, -154, 450, 662), 183 : (350, 40, 196, 310, 466), 184 : (333, 79, -141, 218, 102), 185 : (444, 45, -141, 416, 102), 186 : (444, 30, 433, 401, 676), 187 : (500, 44, 33, 458, 416), 188 : (1000, 111, -11, 888, 100), 189 : (1000, 7, -19, 994, 706), 191 : (444, 30, -218, 376, 466), 193 : (333, 19, 507, 242, 678), 194 : (333, 93, 507, 317, 678), 195 : (333, 11, 507, 322, 674), 196 : (333, 1, 532, 331, 638), 197 : (333, 11, 547, 322, 601), 198 : (333, 26, 507, 307, 664), 199 : (333, 118, 581, 216, 681), 200 : (333, 18, 581, 315, 681), 202 : (333, 67, 512, 266, 711), 203 : (333, 52, -215, 261, 0), 205 : (333, -3, 507, 377, 678), 206 : (333, 62, -165, 243, 0), 207 : (333, 11, 507, 322, 674), 208 : (1000, 0, 201, 1000, 250), 225 : (889, 0, 0, 863, 662), 227 : (276, 4, 394, 270, 676), 232 : (611, 12, 0, 598, 662), 233 : (722, 34, -80, 688, 734), 234 : (889, 30, -6, 885, 668), 235 : (310, 6, 394, 304, 676), 241 : (667, 38, -10, 632, 460), 245 : (278, 16, 0, 253, 460), 248 : (278, 19, 0, 259, 683), 249 : (500, 29, -112, 470, 551), 250 : (722, 30, -10, 690, 460), 251 : (500, 12, -9, 468, 683), -1 : (500, 0, 0, 0, 0), } kerning = { (101, 103) : -15, (120, 101) : -15, (101, 119) : -25, (101, 118) : -25, (76, 121) : -55, (101, 121) : -15, (101, 120) : -15, (76, 89) : -100, (76, 86) : -100, (76, 87) : -74, (76, 84) : -92, (75, 111) : -35, (75, 101) : -25, (75, 121) : -25, (75, 117) : -15, (82, 79) : -40, (75, 79) : -30, (82, 89) : -65, (82, 84) : -60, (82, 85) : -40, (82, 86) : -80, (82, 87) : -55, (102, 105) : -20, (103, 97) : -5, (111, 119) : -25, (111, 118) : -15, (111, 121) : -10, (78, 65) : -35, (85, 65) : -40, (118, 111) : -20, (118, 97) : -25, (118, 101) : -15, (84, 119) : -80, (84, 117) : -45, (84, 114) : -35, (68, 65) : -40, (102, 97) : -10, (102, 102) : -25, (84, 121) : -80, (68, 86) : -40, (68, 87) : -30, (84, 101) : -70, (84, 97) : -80, (84, 111) : -80, (84, 105) : -35, (110, 118) : -40, (110, 121) : -15, (84, 65) : -93, (84, 79) : -18, (87, 121) : -73, (87, 117) : -50, (87, 111) : -80, (87, 105) : -40, (87, 101) : -80, (87, 97) : -80, (97, 119) : -15, (97, 118) : -20, (87, 79) : -10, (112, 121) : -10, (105, 118) : -25, (68, 89) : -55, (87, 65) : -120, (70, 65) : -74, (86, 117) : -75, (86, 105) : -60, (86, 111) : -129, (86, 97) : -111, (86, 101) : -111, (79, 87) : -35, (79, 86) : -50, (79, 84) : -40, (70, 111) : -15, (70, 97) : -15, (79, 89) : -50, (79, 88) : -40, (119, 111) : -10, (108, 119) : -10, (79, 65) : -35, (86, 79) : -40, (86, 65) : -135, (104, 121) : -5, (119, 97) : -10, (86, 71) : -15, (89, 65) : -120, (99, 121) : -15, (89, 79) : -30, (89, 117) : -111, (74, 65) : -60, (66, 85) : -10, (114, 103) : -18, (107, 101) : -10, (89, 97) : -100, (107, 121) : -15, (89, 101) : -100, (89, 105) : -55, (81, 85) : -10, (66, 65) : -35, (89, 111) : -110, (65, 121) : -92, (80, 97) : -15, (65, 119) : -92, (65, 118) : -74, (107, 111) : -10, (65, 89) : -105, (65, 81) : -55, (98, 117) : -20, (98, 118) : -15, (80, 65) : -92, (65, 85) : -55, (65, 84) : -111, (65, 87) : -90, (65, 86) : -135, (65, 79) : -55, (65, 67) : -40, (65, 71) : -40, } comments = [ 'Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. All Rights Reserved.', 'Creation Date: Thu May 1 12:49:17 1997', 'UniqueID 43068', 'VMusage 43909 54934', ] composites = { } pyscript-0.6.1/pyscript/fonts/zapfdingbats.py0000644000175000001440000001577710423157534021155 0ustar cochraneusers""" PyScript font module for ITC Zapf Dingbats """ __revision__ = '$Revision: 1.3 $' attrs = { 'FontName' : 'ZapfDingbats', 'CharacterSet' : 'Special', 'FontBBox' : (-1, -143, 981, 820), 'Weight' : 'Medium', 'FamilyName' : 'ZapfDingbats', 'IsFixedPitch' : 'false', 'Notice' : 'Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved.ITC Zapf Dingbats is a registered trademark of International Typeface Corporation.', 'StdVW' : 90, 'EncodingScheme' : 'FontSpecific', 'StdHW' : 28, 'Version' : '002.000', 'UnderlinePosition' : -100, 'UnderlineThickness' : 50, 'ItalicAngle' : 0, 'FullName' : 'ITC Zapf Dingbats', } chars = { 32 : (278, 0, 0, 0, 0), 33 : (974, 35, 72, 939, 621), 34 : (961, 35, 81, 927, 611), 35 : (974, 35, 72, 939, 621), 36 : (980, 35, 0, 945, 692), 37 : (719, 34, 139, 685, 566), 38 : (789, 35, -14, 755, 705), 39 : (790, 35, -14, 755, 705), 40 : (791, 35, -13, 761, 705), 41 : (690, 34, 138, 655, 553), 42 : (960, 35, 123, 925, 568), 43 : (939, 35, 134, 904, 559), 44 : (549, 29, -11, 516, 705), 45 : (855, 34, 59, 820, 632), 46 : (911, 35, 50, 876, 642), 47 : (933, 35, 139, 899, 550), 48 : (911, 35, 50, 876, 642), 49 : (945, 35, 139, 909, 553), 50 : (974, 35, 104, 938, 587), 51 : (755, 34, -13, 721, 705), 52 : (846, 36, -14, 811, 705), 53 : (762, 35, 0, 727, 692), 54 : (761, 35, 0, 727, 692), 55 : (571, -1, -68, 571, 661), 56 : (677, 36, -13, 642, 705), 57 : (763, 35, 0, 728, 692), 58 : (760, 35, 0, 726, 692), 59 : (759, 35, 0, 725, 692), 60 : (754, 35, 0, 720, 692), 61 : (494, 35, 0, 460, 692), 62 : (552, 35, 0, 517, 692), 63 : (537, 35, 0, 503, 692), 64 : (577, 35, 96, 542, 596), 65 : (692, 35, -14, 657, 705), 66 : (786, 35, -14, 751, 705), 67 : (788, 35, -14, 752, 705), 68 : (788, 35, -14, 753, 705), 69 : (790, 35, -14, 756, 705), 70 : (793, 35, -13, 759, 705), 71 : (794, 35, -13, 759, 705), 72 : (816, 35, -14, 782, 705), 73 : (823, 35, -14, 787, 705), 74 : (789, 35, -14, 754, 705), 75 : (841, 35, -14, 807, 705), 76 : (823, 35, -14, 789, 705), 77 : (833, 35, -14, 798, 705), 78 : (816, 35, -13, 782, 705), 79 : (831, 35, -14, 796, 705), 80 : (923, 35, -14, 888, 705), 81 : (744, 35, 0, 710, 692), 82 : (723, 35, 0, 688, 692), 83 : (749, 35, 0, 714, 692), 84 : (790, 34, -14, 756, 705), 85 : (792, 35, -14, 758, 705), 86 : (695, 35, -14, 661, 706), 87 : (776, 35, -6, 741, 699), 88 : (768, 35, -7, 734, 699), 89 : (792, 35, -14, 757, 705), 90 : (759, 35, 0, 725, 692), 91 : (707, 35, -13, 672, 704), 92 : (708, 35, -14, 672, 705), 93 : (682, 35, -14, 647, 705), 94 : (701, 35, -14, 666, 705), 95 : (826, 35, -14, 791, 705), 96 : (815, 35, -14, 780, 705), 97 : (789, 35, -14, 754, 705), 98 : (789, 35, -14, 754, 705), 99 : (707, 34, -14, 673, 705), 100 : (687, 36, 0, 651, 692), 101 : (696, 35, 0, 661, 691), 102 : (689, 35, 0, 655, 692), 103 : (786, 34, -14, 751, 705), 104 : (787, 35, -14, 752, 705), 105 : (713, 35, -14, 678, 705), 106 : (791, 35, -14, 756, 705), 107 : (785, 36, -14, 751, 705), 108 : (791, 35, -14, 757, 705), 109 : (873, 35, -14, 838, 705), 110 : (761, 35, 0, 726, 692), 111 : (762, 35, 0, 727, 692), 112 : (762, 35, 0, 727, 692), 113 : (759, 35, 0, 725, 692), 114 : (759, 35, 0, 725, 692), 115 : (892, 35, 0, 858, 705), 116 : (892, 35, -14, 858, 692), 117 : (788, 35, -14, 754, 705), 118 : (784, 35, -14, 749, 705), 119 : (438, 35, -14, 403, 705), 120 : (138, 35, 0, 104, 692), 121 : (277, 35, 0, 242, 692), 122 : (415, 35, 0, 380, 692), 123 : (392, 35, 263, 357, 705), 124 : (392, 34, 263, 357, 705), 125 : (668, 35, 263, 633, 705), 126 : (668, 36, 263, 634, 705), 128 : (390, 35, -14, 356, 705), 129 : (390, 35, -14, 355, 705), 130 : (317, 35, 0, 283, 692), 131 : (317, 35, 0, 283, 692), 132 : (276, 35, 0, 242, 692), 133 : (276, 35, 0, 242, 692), 134 : (509, 35, 0, 475, 692), 135 : (509, 35, 0, 475, 692), 136 : (410, 35, 0, 375, 692), 137 : (410, 35, 0, 375, 692), 138 : (234, 35, -14, 199, 705), 139 : (234, 35, -14, 199, 705), 140 : (334, 35, 0, 299, 692), 141 : (334, 35, 0, 299, 692), 161 : (732, 35, -143, 697, 806), 162 : (544, 56, -14, 488, 706), 163 : (544, 34, -14, 508, 705), 164 : (910, 35, 40, 875, 651), 165 : (667, 35, -14, 633, 705), 166 : (760, 35, -14, 726, 705), 167 : (760, 0, 121, 758, 569), 168 : (776, 35, 0, 741, 705), 169 : (595, 34, -14, 560, 705), 170 : (694, 35, -14, 659, 705), 171 : (626, 34, 0, 591, 705), 172 : (788, 35, -14, 754, 705), 173 : (788, 35, -14, 754, 705), 174 : (788, 35, -14, 754, 705), 175 : (788, 35, -14, 754, 705), 176 : (788, 35, -14, 754, 705), 177 : (788, 35, -14, 754, 705), 178 : (788, 35, -14, 754, 705), 179 : (788, 35, -14, 754, 705), 180 : (788, 35, -14, 754, 705), 181 : (788, 35, -14, 754, 705), 182 : (788, 35, -14, 754, 705), 183 : (788, 35, -14, 754, 705), 184 : (788, 35, -14, 754, 705), 185 : (788, 35, -14, 754, 705), 186 : (788, 35, -14, 754, 705), 187 : (788, 35, -14, 754, 705), 188 : (788, 35, -14, 754, 705), 189 : (788, 35, -14, 754, 705), 190 : (788, 35, -14, 754, 705), 191 : (788, 35, -14, 754, 705), 192 : (788, 35, -14, 754, 705), 193 : (788, 35, -14, 754, 705), 194 : (788, 35, -14, 754, 705), 195 : (788, 35, -14, 754, 705), 196 : (788, 35, -14, 754, 705), 197 : (788, 35, -14, 754, 705), 198 : (788, 35, -14, 754, 705), 199 : (788, 35, -14, 754, 705), 200 : (788, 35, -14, 754, 705), 201 : (788, 35, -14, 754, 705), 202 : (788, 35, -14, 754, 705), 203 : (788, 35, -14, 754, 705), 204 : (788, 35, -14, 754, 705), 205 : (788, 35, -14, 754, 705), 206 : (788, 35, -14, 754, 705), 207 : (788, 35, -14, 754, 705), 208 : (788, 35, -14, 754, 705), 209 : (788, 35, -14, 754, 705), 210 : (788, 35, -14, 754, 705), 211 : (788, 35, -14, 754, 705), 212 : (894, 35, 58, 860, 634), 213 : (838, 35, 152, 803, 540), 214 : (1016, 34, 152, 981, 540), 215 : (458, 35, -127, 422, 820), 216 : (748, 35, 94, 698, 597), 217 : (924, 35, 140, 890, 552), 218 : (748, 35, 94, 698, 597), 219 : (918, 35, 166, 884, 526), 220 : (927, 35, 32, 892, 660), 221 : (928, 35, 129, 891, 562), 222 : (928, 35, 128, 893, 563), 223 : (834, 35, 155, 799, 537), 224 : (873, 35, 93, 838, 599), 225 : (828, 35, 104, 791, 588), 226 : (924, 35, 98, 889, 594), 227 : (924, 35, 98, 889, 594), 228 : (917, 35, 0, 882, 692), 229 : (930, 35, 84, 896, 608), 230 : (931, 35, 84, 896, 608), 231 : (463, 35, -99, 429, 791), 232 : (883, 35, 71, 848, 623), 233 : (836, 35, 44, 802, 648), 234 : (836, 35, 44, 802, 648), 235 : (867, 35, 101, 832, 591), 236 : (867, 35, 101, 832, 591), 237 : (696, 35, 44, 661, 648), 238 : (696, 35, 44, 661, 648), 239 : (874, 35, 77, 840, 619), 241 : (874, 35, 73, 840, 615), 242 : (760, 35, 0, 725, 692), 243 : (946, 35, 160, 911, 533), 244 : (771, 34, 37, 736, 655), 245 : (865, 35, 207, 830, 481), 246 : (771, 34, 37, 736, 655), 247 : (888, 34, -19, 853, 712), 248 : (967, 35, 124, 932, 568), 249 : (888, 34, -19, 853, 712), 250 : (831, 35, 113, 796, 579), 251 : (873, 36, 118, 838, 578), 252 : (927, 35, 150, 891, 542), 253 : (970, 35, 76, 931, 616), 254 : (918, 34, 99, 884, 593), } kerning = { } comments = [ 'Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved.', 'Creation Date: Thu May 1 15:14:13 1997', 'UniqueID 43082', 'VMusage 45775 55535', ] composites = { } pyscript-0.6.1/pyscript/lib/0000755000175000001440000000000010441274723015523 5ustar cochraneuserspyscript-0.6.1/pyscript/lib/__init__.py0000644000175000001440000000164410401101573017625 0ustar cochraneusers# Copyright (C) 2003-2006 Alexei Gilchrist and Paul Cochrane # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # $Id: __init__.py,v 1.3 2006/02/28 17:08:11 paultcochrane Exp $ """ The PyScript libraries """ __revision__ = '$Revision: 1.3 $' # vim: expandtab shiftwidth=4: pyscript-0.6.1/pyscript/lib/electronics.py0000644000175000001440000005143510423157603020414 0ustar cochraneusers# Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # $Id: electronics.py,v 1.14 2006/04/24 14:24:03 paultcochrane Exp $ """ PyScript electronics objects library Thanks to Adrian Jonstone's lcircuit macros from CTAN for the ideas and names """ __revision__ = '$Revision: 1.14 $' from pyscript import P, Group, Path, Circle, C, Rectangle, Color class Gate(Group): """ Generic gate class """ def __init__(self, **options): # initialise the base class Group.__init__(self, **options) self.height = 2.0 self.width = 3.0 self.angle = 0.0 self.pinLength = 0.5 self.fg = Color(0) self.bg = Color(1) # AND gate class AndGate(Gate): """ Generates an AND gate @ivar height: gate height @type height: float @ivar width: gate width @type width: float @ivar angle: gate angle @type angle: float @ivar pinLength: length of pins into and out of gate @type pinLength: float @ivar fg: foreground colour @type fg: L{Color} object @ivar bg: background colour @type bg: L{Color} object """ def __init__(self, **options): # initialise the base class Gate.__init__(self, **options) # process the options if any self.height = options.get("height", self.height) self.width = options.get("width", self.width) self.angle = options.get("angle", self.angle) self.pinLength = options.get("pinLength", self.pinLength) self.fg = options.get("fg", self.fg) self.bg = options.get("bg", self.bg) # now draw the gate buff = 0.0 pinEdgeDist = 0.1*self.height bodyHeight = self.height pl = self.pinLength bodyWidth = self.width - 2.0*pl gateBody = Group( Path( P(pl, buff+0), P(pl, buff+bodyHeight), P(pl+bodyWidth/2.0, buff+bodyHeight)), Circle(c=P(pl+bodyWidth/2.0, buff+bodyHeight/2.0), r=bodyHeight/2.0, start=0, end=180), Path( P(pl+bodyWidth/2.0, buff+0), P(pl, buff+0))) gatePinIn1 = Path( P(0, bodyHeight-pinEdgeDist), P(pl, bodyHeight-pinEdgeDist)) gatePinIn2 = Path( P(0, pinEdgeDist), P(pl, pinEdgeDist)) gatePinOut = Path( P(bodyWidth+pl, bodyHeight/2.0), P(bodyWidth+2.0*pl, bodyHeight/2.0)) # collect the objects together obj = Group(gateBody, gatePinIn1, gatePinIn2, gatePinOut) # apply the colours obj.apply(fg=self.fg, bg=self.bg) # rotate if necessary if self.angle != 0.0: obj.rotate(self.angle, p=obj.bbox().c) # now set the object to myself self.append(obj) # NAND gate class NandGate(Gate): """ Generates a NAND gate @ivar height: gate height @type height: float @ivar width: gate width @type width: float @ivar angle: gate angle @type angle: float @ivar pinLength: length of pins into and out of gate @type pinLength: float @ivar fg: foreground colour @type fg: L{Color} object @ivar bg: background colour @type bg: L{Color} object """ def __init__(self, **options): # initialise the base class Gate.__init__(self, **options) # process the options if any self.height = options.get("height", self.height) self.width = options.get("width", self.width) self.angle = options.get("angle", self.angle) self.pinLength = options.get("pinLength", self.pinLength) self.fg = options.get("fg", self.fg) self.bg = options.get("bg", self.bg) # now draw the gate buff = 0.0 pinEdgeDist = 0.1*self.height pl = self.pinLength bodyHeight = self.height bodyWidth = self.width - 2.0*pl rad = 0.1 gateBody = Group( Path( P(pl, buff+0), P(pl, buff+bodyHeight), P(pl+bodyWidth/2., buff+bodyHeight)), Circle(c=P(pl+bodyWidth/2., buff+bodyHeight/2.), r=bodyHeight/2., start=0, end=180), Path( P(pl+bodyWidth/2., buff+0), P(pl, buff+0))) gatePinIn1 = Path( P(0, bodyHeight-pinEdgeDist), P(pl, bodyHeight-pinEdgeDist)) gatePinIn2 = Path( P(0, pinEdgeDist), P(pl, pinEdgeDist)) gatePinOut = Group( Circle(c=P(bodyWidth+pl+rad, bodyHeight/2.), r=rad), Path( P(bodyWidth+pl+2.*rad, bodyHeight/2.), P(bodyWidth+2.*rad+2.*pl, bodyHeight/2.))) # collect the objects together obj = Group(gateBody, gatePinIn1, gatePinIn2, gatePinOut) # apply the colours obj.apply(fg=self.fg, bg=self.bg) # rotate if necessary if self.angle != 0.0: obj.rotate(self.angle, p=obj.c) # now set the object to myself self.append(obj) # OR gate class OrGate(Gate): """ Generates an OR gate @ivar height: gate height @type height: float @ivar width: gate width @type width: float @ivar angle: gate angle @type angle: float @ivar pinLength: length of pins into and out of gate @type pinLength: float @ivar fg: foreground colour @type fg: L{Color} object @ivar bg: background colour @type bg: L{Color} object """ def __init__(self, **options): # initialise the base class Gate.__init__(self, **options) # process the options if any self.height = options.get("height", self.height) self.width = options.get("width", self.width) self.angle = options.get("angle", self.angle) self.pinLength = options.get("pinLength", self.pinLength) self.fg = options.get("fg", self.fg) self.bg = options.get("bg", self.bg) # now draw the gate pinEdgeDist = 0.1*self.height pl = self.pinLength pinBackDist = -0.08*self.width bodyHeight = self.height bodyWidth = self.width - 2.0*pl gateBody = Group( Path( P(-pinBackDist, -pinEdgeDist), C(90, 225), P(1.25*bodyWidth, bodyHeight/2.0), C(-45, 90), P(-pinBackDist, bodyHeight+pinEdgeDist), C(140, 40), closed=1, ) ) gatePinIn1 = Path( P(0, bodyHeight-pinEdgeDist), P(pl, bodyHeight-pinEdgeDist)) gatePinIn2 = Path( P(0, pinEdgeDist), P(pl, pinEdgeDist)) gatePinOut = Path( gateBody.e, gateBody.e+P(pl, 0)) # collect the objects together obj = Group(gateBody, gatePinIn1, gatePinIn2, gatePinOut) # apply the colours obj.apply(fg=self.fg, bg=self.bg) # rotate if necessary if self.angle != 0.0: obj.rotate(self.angle, p=obj.c) # now set the object to myself self.append(obj) # NOR gate class NorGate(Gate): """ Generates a NOR gate @ivar height: gate height @type height: float @ivar width: gate width @type width: float @ivar angle: gate angle @type angle: float @ivar pinLength: length of pins into and out of gate @type pinLength: float @ivar fg: foreground colour @type fg: L{Color} object @ivar bg: background colour @type bg: L{Color} object """ def __init__(self, **options): # initialise the base class Gate.__init__(self, **options) # process the options if any self.height = options.get("height", self.height) self.width = options.get("width", self.width) self.angle = options.get("angle", self.angle) self.pinLength = options.get("pinLength", self.pinLength) self.fg = options.get("fg", self.fg) self.bg = options.get("bg", self.bg) # now draw the gate pl = self.pinLength pinEdgeDist = 0.1*self.height pinBackDist = -0.08*self.width bodyHeight = self.height bodyWidth = self.width - 2.0*pl rad = 0.1 gateBody = Group( Path( P(-pinBackDist, -pinEdgeDist), C(90, 225), P(1.25*bodyWidth, bodyHeight/2.0), C(-45, 90), P(-pinBackDist, bodyHeight+pinEdgeDist), C(140, 40), closed=1, ) ) gatePinIn1 = Path( P(0, bodyHeight-pinEdgeDist), P(pl, bodyHeight-pinEdgeDist)) gatePinIn2 = Path( P(0, pinEdgeDist), P(pl, pinEdgeDist)) gatePinOut = Group( Circle(w=gateBody.e, r=rad), Path( gateBody.e+P(0.2, 0), gateBody.e+P(pl+0.2, 0)), ) # collect the objects together obj = Group(gateBody, gatePinIn1, gatePinIn2, gatePinOut) # apply the colours obj.apply(fg=self.fg, bg=self.bg) # rotate if necessary if self.angle != 0.0: obj.rotate(self.angle, p=obj.c) # nwo set the object to myself self.append(obj) # XOR gate class XorGate(Gate): """ Generates an XOR gate @ivar height: gate height @type height: float @ivar width: gate width @type width: float @ivar angle: gate angle @type angle: float @ivar pinLength: length of pins into and out of gate @type pinLength: float @ivar fg: foreground colour @type fg: L{Color} object @ivar bg: background colour @type bg: L{Color} object """ def __init__(self, **options): # initialise the base class Gate.__init__(self, **options) # process the options if any self.height = options.get("height", self.height) self.width = options.get("width", self.width) self.angle = options.get("angle", self.angle) self.pinLength = options.get("pinLength", self.pinLength) self.fg = options.get("fg", self.fg) self.bg = options.get("bg", self.bg) # now draw the gate pinEdgeDist = 0.1*self.height pinBackDist = -0.08*self.width xBit = 0.2 pl = self.pinLength bodyHeight = self.height bodyWidth = self.width - 2.0*pl gateBody = Group( Path( P(-pinBackDist+xBit, -pinEdgeDist), C(90, 225), P(1.4*bodyWidth, bodyHeight/2.), C(-45, 90), P(-pinBackDist+xBit, bodyHeight+pinEdgeDist), C(140, 40), P(-pinBackDist+xBit, -pinEdgeDist), ), Path( P(-pinBackDist, bodyHeight+pinEdgeDist), C(140, 40), P(-pinBackDist, -pinEdgeDist) ), ) gatePinIn1 = Path( P(0, bodyHeight-pinEdgeDist), P(pl, bodyHeight-pinEdgeDist)) gatePinIn2 = Path( P(0, pinEdgeDist), P(pl, pinEdgeDist)) gatePinOut = Path( gateBody.e, gateBody.e+P(pl, 0)) # collect the objects together obj = Group(gateBody, gatePinIn1, gatePinIn2, gatePinOut) # apply the colours obj.apply(fg=self.fg, bg=self.bg) # rotate if necessary if self.angle != 0.0: obj.rotate(self.angle, p=obj.c) # now set the object to myself self.append(obj) # NXOR gate class NxorGate(Gate): """ Generates a NXOR gate @ivar height: gate height @type height: float @ivar width: gate width @type width: float @ivar angle: gate angle @type angle: float @ivar pinLength: length of pins into and out of gate @type pinLength: float @ivar fg: foreground colour @type fg: L{Color} object @ivar bg: background colour @type bg: L{Color} object """ def __init__(self, **options): # initialise the base class Gate.__init__(self, **options) # process the options if any self.height = options.get("height", self.height) self.width = options.get("width", self.width) self.angle = options.get("angle", self.angle) self.pinLength = options.get("pinLength", self.pinLength) self.fg = options.get("fg", self.fg) self.bg = options.get("bg", self.bg) # now draw the gate pinEdgeDist = 0.1*self.height pinBackDist = -0.08*self.width xBit = 0.2 rad = 0.1 pl = self.pinLength bodyHeight = self.height bodyWidth = self.width - 2.0*pl gateBody = Group( Path( P(-pinBackDist+xBit, -pinEdgeDist), C(90, 225), P(1.4*bodyWidth, bodyHeight/2.), C(-45, 90), P(-pinBackDist+xBit, bodyHeight+pinEdgeDist), C(140, 40), P(-pinBackDist+xBit, -pinEdgeDist), ), Path( P(-pinBackDist, bodyHeight+pinEdgeDist), C(140, 40), P(-pinBackDist, -pinEdgeDist) ), ) gatePinIn1 = Path( P(0, bodyHeight-pinEdgeDist), P(pl, bodyHeight-pinEdgeDist)) gatePinIn2 = Path( P(0, pinEdgeDist), P(pl, pinEdgeDist)) gatePinOut = Group( Circle(w=gateBody.e, r=rad), Path( gateBody.e+P(0.2, 0), gateBody.e+P(pl+0.2, 0)), ) # collect the objects together obj = Group(gateBody, gatePinIn1, gatePinIn2, gatePinOut) # apply the colours obj.apply(fg=self.fg, bg=self.bg) # rotate if necessary if self.angle != 0.0: obj.rotate(self.angle, p=obj.c) # now set the object to myself self.append(obj) # NOT gate class NotGate(Gate): """ Generates a NOT gate @ivar height: gate height @type height: float @ivar width: gate width @type width: float @ivar angle: gate angle @type angle: float @ivar pinLength: length of pins into and out of gate @type pinLength: float @ivar fg: foreground colour @type fg: L{Color} object @ivar bg: background colour @type bg: L{Color} object """ def __init__(self, **options): # initialise the base class Gate.__init__(self, **options) # process the options if any self.height = options.get("height", self.height) self.width = options.get("width", self.width) self.angle = options.get("angle", self.angle) self.pinLength = options.get("pinLength", self.pinLength) self.fg = options.get("fg", self.fg) self.bg = options.get("bg", self.bg) # now draw the gate buff = 0 pl = self.pinLength pinEdgeDist = 0.1*self.height bodyHeight = self.height bodyWidth = self.width - 2.0*pl rad = 0.1 gateBody = Group( Path( P(pl, buff+0), P(pl, buff+bodyHeight), P(pl+0.707106781*bodyWidth, buff+bodyHeight/2.), P(pl, buff+0) ) ) gatePinIn1 = Path( P(0, bodyHeight-pinEdgeDist), P(pl, bodyHeight-pinEdgeDist)) gatePinIn2 = Path( P(0, pinEdgeDist), P(pl, pinEdgeDist)) gatePinOut = Group( Circle(w=gateBody.e, r=rad), Path( gateBody.e+P(2.*rad, 0), gateBody.e+P(2.*rad+pl, 0)) ) # collect the objects together obj = Group(gateBody, gatePinIn1, gatePinIn2, gatePinOut) # apply the colours obj.apply(fg=self.fg, bg=self.bg) # rotate if necessary if self.angle != 0.0: obj.rotate(self.angle, p=obj.c) # now set the object to myself self.append(obj) # resistor class Resistor(Group): """ Generates a box resistor @ivar length: length of resistor @type length: float @ivar width: width of resistor @type width: float @ivar angle: gate angle @type angle: float @ivar pinLength: length of pins into and out of resistor @type pinLength: float @ivar fg: foreground colour @type fg: L{Color} object @ivar bg: background colour @type bg: L{Color} object """ def __init__(self, **options): # intitialise base class Group.__init__(self, **options) self.length = 3.0 self.width = 1.0 self.angle = 0.0 self.pinLength = 0.5 self.fg = Color(0) self.bg = Color(1) # process the options if any self.length = options.get("length", self.length) self.width = options.get("width", self.width) self.angle = options.get("angle", self.angle) self.pinLength = options.get("pinLength", self.pinLength) self.fg = options.get("fg", self.fg) self.bg = options.get("bg", self.bg) pinIn = Group( Path( P(0, 0), P(self.pinLength, 0) ) ) resistor = Rectangle(w=pinIn.e, width=self.length, height=self.width) pinOut = Path( resistor.e, resistor.e+P(self.pinLength, 0)) # collect the objects together obj = Group(pinIn, pinOut, resistor) # apply the colours obj.apply(fg=self.fg, bg=self.bg) # rotate if necessary if self.angle != 0.0: obj.rotate(self.angle, p=obj.c) # return object to myself self.append(obj) # capacitor class Capacitor(Group): """ Generates a capacitor @ivar width: width of capacitor @type width: float @ivar sep: separation of the plates of the capacitor @type sep: float @ivar angle: gate angle @type angle: float @ivar pinLength: length of pins into and out of capacitor @type pinLength: float @ivar fg: foreground colour @type fg: L{Color} object @ivar bg: background colour @type bg: L{Color} object """ def __init__(self, **options): # intitialise base class Group.__init__(self, **options) self.sep = 0.25 self.width = 1.0 self.angle = 0.0 self.pinLength = 0.5 self.fg = Color(0) self.bg = Color(1) # process the options if any self.sep = options.get("sep", self.sep) self.width = options.get("width", self.width) self.angle = options.get("angle", self.angle) self.pinLength = options.get("pinLength", self.pinLength) self.fg = options.get("fg", self.fg) self.bg = options.get("bg", self.bg) pinIn = Group( Path( P(0, 0), P(self.pinLength, 0), ) ) cap = Group( Path(pinIn.e+P(0, -self.width/2.0), pinIn.e+P(0, self.width/2.0)), Path(pinIn.e+P(self.sep, -self.width/2.0), pinIn.e+P(self.sep, self.width/2.0)), ) pinOut = Path( cap.e, cap.e+P(self.pinLength, 0)) # group the objects together obj = Group(pinIn, pinOut, cap) # apply the colours obj.apply(fg=self.fg, bg=self.bg) # rotate if necessary if self.angle != 0.0: obj.rotate(self.angle, p=obj.c) # set the object to myself self.append(obj) # vim: expandtab shiftwidth=4: pyscript-0.6.1/pyscript/lib/optics.py0000644000175000001440000004267310423157632017411 0ustar cochraneusers# Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # $Id: optics.py,v 1.16 2006/04/24 14:24:26 paultcochrane Exp $ ''' PyScript optics objects library ''' __revision__ = '$Revision: 1.16 $' from pyscript import Group, Path, Color, P, C, Dash # beam splitter def BS(sw=P(0, 0), label=None, h=1.0): """ Beam splitter; displayed as a line possibly more useful in linear optics quantum computation diagrams @param sw: location of the south-west corner of the object @type sw: L{P} object @param label: beam splitter label @type label: string @param h: beam splitter height @type h: float """ buff = P(0, 0.1) b = Path( sw-buff, sw+P(0, h)+buff, sw+P(h, h)+buff, sw+P(h, 0)-buff, sw-buff, fg=None, bg=Color("white") ) p1 = Path( sw, sw+P(h, h) ) p2 = Path( sw+P(0, h), sw+P(h, 0) ) p3 = Path( sw+P(h/4, h/2), sw+P(h, 0)+P(-h/4, h/2), linewidth=1 ) if label is not None: label['w'] = sw + P(h, 0) + P(-h/4, h/2) return Group(b, p1, p2, p3, label) else: return Group(b, p1, p2, p3) # box beam splitter (aka polarising beam splitter) class BSBox(Group): """ Beam splitter as a box as opposed to a line @ivar height: height of the beam splitter (equal to its width) @type height: C{float} @ivar angle: rotation angle @type angle: C{float} @ivar fg: foreground colour @type fg: L{Color} object @ivar bg: background colour @type bg: L{Color} object """ height = 1.0 angle = 0.0 # not going to be used much (maybe for a Ralph-splitter ;-)) fg = Color(0) bg = Color(1) def __init__(self, **options): # inherit from the base class Group.__init__(self, **options) # process the options if any self.fg = options.get("fg", self.fg) self.bg = options.get("bg", self.bg) self.height = options.get("height", self.height) self.angle = options.get("angle", self.angle) # make the beam splitter bs = Group() bs.append(Path(P(0, 0), P(0, self.height), P(self.height, self.height), P(self.height, 0), P(0, 0), P(self.height, self.height), fg=self.fg, bg=self.bg) ) # rotate if necessary bs.rotate(self.angle, p=bs.bbox().c) self.append(bs) # polarising beam splitter PBS = BSBox # line beam splitter class BSLine(Group): """ Beam splitter as a line (i.e. a half-slivered mirror) @ivar height: height of the beam splitter @type height: float @ivar thickness: thickness of the beam splitter @type thickness: float @ivar angle: rotation angle @type angle: float @ivar fg: foreground colour @type fg: L{Color} object @ivar bg: background colour @type bg: L{Color} object """ height = 1.0 thickness = 0.2 angle = 45.0 fg = Color(0) bg = Color(1) def __init__(self, **options): # inherit from the base class Group.__init__(self, **options) # process the options if any self.fg = options.get("fg", self.fg) self.bg = options.get("bg", self.bg) self.height = options.get("height", self.height) self.thickness = options.get("thickness", self.thickness) self.angle = options.get("angle", self.angle) # make the beam splitter bs = Group() bs.append(Path(P(0, 0), P(0, self.height), P(self.thickness, self.height), P(self.thickness, 0), closed=1, fg=self.fg, bg=self.bg) ) # rotate if necessary bs.rotate(self.angle, p=bs.bbox().c) self.append(bs) # phase shifter class PhaseShifter(Group): """ Phase shifter @ivar width: phase shifter width @type width: float @ivar height: phase shifter height @type height: float @ivar angle: angle through which to rotate the phase shifter @type angle: float @ivar fg: foreground colour @type fg: L{Color} object @ivar bg: background colour @type bg: L{Color} object """ width = 0.5 height = 0.7 angle = 0 fg = Color(0) bg = Color(1) def __init__(self, **options): # inherit from base class Group.__init__(self, **options) # process the options if any self.width = options.get("width", self.width) self.height = options.get("height", self.height) self.angle = options.get("angle", self.angle) self.fg = options.get("fg", self.fg) self.bg = options.get("bg", self.bg) # now make the phase shifter ps = Path( P(0, 0), P(self.width/2.0, self.height), P(self.width, 0), closed=1, fg=self.fg, bg=self.bg, ) # rotate if necessary if self.angle != 0: ps.rotate(self.angle, p=ps.bbox().c) self.append(ps) # mirror class Mirror(Group): """ Mirror @ivar length: mirror length @type length: float @ivar thickness: mirror thickness @type thickness: float @ivar angle: rotation angle @type angle: float @ivar flicks: put the mirror flicks on? (shows where back of mirror is) @type flicks: boolean @ivar fg: foreground colour @type fg: L{Color} object @ivar bg: background colour @type bg: L{Color} object """ length = 1.0 thickness = 0.1 angle = 0.0 fg = Color(0) bg = Color(0) flicks = False def __init__(self, **options): # inherit from the base class Group.__init__(self, **options) # process the options if any self.fg = options.get("fg", self.fg) self.bg = options.get("bg", self.bg) self.length = options.get("length", self.length) self.thickness = options.get("thickness", self.thickness) self.angle = options.get("angle", self.thickness) self.flicks = options.get("flicks", self.flicks) # make the mirror itself mirror = Group() mirror.append( Path(P(0, 0), P(0, self.length), P(self.thickness, self.length), P(self.thickness, 0), closed=1, fg=self.fg, bg=self.bg) ) if self.flicks: # make the flicks on the back of the mirror flickLen = 0.15 flicksObj = Group() for i in range(10): flicksObj.append( Path( P((i+1.0)*self.length/10.0, self.thickness), P(i*self.length/10.0, self.thickness+flickLen), fg=self.fg, bg=self.bg )) mirror.append(flicksObj) # rotate the mirror if necessary if self.angle != 0.0: mirror.rotate(self.angle, p=mirror.bbox().c) # make the mirror the current object self.append(mirror) # detector class Detector(Group): """ A D-shaped detector @cvar height: detector height @type height: float @cvar width: detector width @type width: float @ivar fg: foreground colour @type fg: L{Color} object @ivar bg: background colour @type bg: L{Color} object @cvar pad: space padding around object @type pad: float @ivar angle: rotation angle @type angle: float """ height = 0.8 width = height/2.0 bg = Color(1) fg = Color(0) pad = 0.1 angle = 0.0 def __init__(self, **options): Group.__init__(self, **options) p = Group() self.fg = options.get("fg", self.fg) self.bg = options.get("bg", self.bg) if self.width > self.height: p.append(Path( P(0, 0), P(0, self.height), P(self.width-self.height/2.0, self.height), C(90, 0), P(self.width, self.height/2.0), C(180, 90), P(self.width-self.height/2.0, 0), fg=self.fg, bg=self.bg, closed=1) ) else: p.append(Path( P(0, 0), P(0, self.height), C(90, 0), P(self.width, self.height/2.0), C(180, 90), closed=1) ) # rotate if necessary self.angle = options.get("angle", self.angle) p.rotate(self.angle, p=p.bbox().c) self.append(p) # laser (this is just a container, in case we want to make this fancier later) class Laser(Group): """ Laser @ivar height: laser box height @type height: float @ivar width: laser box width (some might say "length") @type width: float @ivar angle: rotation angle @type angle: float @ivar fg: foreground colour @type fg: L{Color} object @ivar bg: background colour @type bg: L{Color} object """ height = 1.0 width = 3.0 angle = 0.0 fg = Color(0) bg = Color(1) def __init__(self, **options): # inherit from the base class Group.__init__(self, **options) # process the options if any self.fg = options.get("fg", self.fg) self.bg = options.get("bg", self.bg) self.height = options.get("height", self.height) self.width = options.get("width", self.width) self.angle = options.get("angle", self.angle) # make the laser laser = Group() laser.append( Path(P(0, 0), P(0, self.height), P(self.width, self.height), P(self.width, 0), closed=1, fg=self.fg, bg=self.bg) ) # rotate if necessary laser.rotate(self.angle, p=laser.bbox().c) self.append(laser) # modulator class Modulator(Group): """ Modulator (EOM, AOM etc.) @ivar height: modulator box height @type height: float @ivar width: modulator box width @type width: float @ivar angle: rotation angle @type angle: float @ivar fg: foreground colour @type fg: L{Color} object @ivar bg: background colour @type bg: L{Color} object """ height = 0.5 width = 1.0 angle = 0.0 fg = Color(0) bg = Color(1) buf = height*0.2 def __init__(self, **options): # inherit from the base class Group.__init__(self, **options) # process the options if any self.fg = options.get("fg", self.fg) self.bg = options.get("bg", self.bg) self.height = options.get("height", self.height) self.width = options.get("width", self.width) self.angle = options.get("angle", self.angle) # make the modulator modulator = Group() modulator.append( Path( P(0, 0), P(0, self.height), P(self.width, self.height), P(self.width, 0), closed=1, fg=self.fg, bg=self.bg, )) modulator.append( Path( P(0, -self.buf), P(self.width, -self.buf), fg=self.fg, bg=self.bg, )) modulator.append( Path( P(0, self.height+self.buf), P(self.width, self.height+self.buf), fg=self.fg, bg=self.bg, )) # rotate if necessary modulator.rotate(self.angle, p=modulator.bbox().c) self.append(modulator) # free space class FreeSpace(Group): """ A patch of free space (for example, in an interferometer) @ivar height: height of free space box @type height: float @ivar width: width of free space box (some might say "length") @type width: float @ivar angle: rotation angle @type angle: float @ivar fg: foreground colour @type fg: L{Color} object @ivar bg: background colour @type bg: L{Color} object """ height = 1.0 width = 3.0 angle = 0.0 fg = Color(0) bg = Color(1) def __init__(self, **options): # inherit from the base class Group.__init__(self, **options) # process the options if any self.fg = options.get("fg", self.fg) self.bg = options.get("bg", self.bg) self.height = options.get("height", self.height) self.width = options.get("width", self.width) self.angle = options.get("angle", self.angle) # make the free space fs = Group() fs.append( Path( P(0, 0), P(0, self.height), P(self.width, self.height), P(self.width, 0), closed=1, fg=self.fg, bg=self.bg, dash=Dash()) ) # rotate if necessary fs.rotate(self.angle, p=fs.bbox().c) self.append(fs) # lens class Lens(Group): """ A lens @ivar height: lens height @type height: float @ivar thickness: lens thickness @type thickness: float @ivar angle: rotation angle @type angle: float @ivar type: the type of lens: convex/concave @type type: string @ivar fg: foreground colour @type fg: L{Color} object @ivar bg: background colour @type bg: L{Color} object """ height = 1.0 thickness = 0.4 angle = 0.0 fg = Color(0) bg = Color(1) type = "concave" def __init__(self, **options): # inherit from the base class Group.__init__(self, **options) # process the options if any self.fg = options.get("fg", self.fg) self.bg = options.get("bg", self.bg) self.height = options.get("height", self.height) self.thickness = options.get("thickness", self.thickness) self.angle = options.get("angle", self.angle) self.type = options.get("type", self.type) # determine what type of lens to make if self.type == "convex": leftCurveAngle = -30 rightCurveAngle = -30 elif self.type == "concave": leftCurveAngle = 30 rightCurveAngle = 30 else: print "Unknown lens type, defaulting to concave" leftCurveAngle = 30 rightCurveAngle = 30 # make the lens lens = Group() lens.append( Path( P(0, 0), C(leftCurveAngle, 180-leftCurveAngle), P(0, self.height), P(self.thickness, self.height), C(-180+rightCurveAngle, -rightCurveAngle), P(self.thickness, 0), closed=1, fg=self.fg, bg=self.bg, ) ) # rotate if necessary lens.rotate(self.angle, p=lens.bbox().c) self.append(lens) # lambda plate; shifts signal by a half or quarter wavelength class LambdaPlate(Group): """ Lambda plate; shifts optical signal by a half or quarter wavelength @ivar height: height of the lambda plate @type height: float @ivar width: width of the lambda plate @type width: float @ivar angle: rotation angle @type angle: float @ivar fg: foreground colour @type fg: L{Color} object @ivar bg: background colour @type bg: L{Color} object """ height = 1.0 width = 0.3 angle = 0.0 fg = Color(0) bg = Color(1) def __init__(self, **options): # inherit from the base class Group.__init__(self, **options) # process the options if any self.fg = options.get("fg", self.fg) self.bg = options.get("bg", self.bg) self.height = options.get("height", self.height) self.width = options.get("width", self.width) self.angle = options.get("angle", self.angle) # make the beam splitter lp = Group() lp.append( Path( P(0, 0), P(-self.width, 0), P(-self.width, self.height), P(0, self.height), P(0, 0), P(-self.width, self.height), fg=self.fg, bg=self.bg) ) # rotate if necessary lp.rotate(self.angle, p=lp.bbox().c) self.append(lp) # vim: expandtab shiftwidth=4: pyscript-0.6.1/pyscript/lib/present.py0000644000175000001440000002504010423157756017564 0ustar cochraneusers# Copyright (C) 2003-2006 Alexei Gilchrist and Paul Cochrane # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ''' PyScript presentation library (posters and talks) ''' from pyscript.defaults import defaults from pyscript import Group, Rectangle, Color, TeX, Area, Align, Page, \ VAlign, Page, Text, P, Bbox, Pages __revision__ = '$Revision: 1.8 $' # ---------------------------------------------------------------------- # First some useful components # ---------------------------------------------------------------------- class Box(Group, Rectangle): ''' Draws a box around an object, the box can be placed acording to standard Area tags @cvar pad: padding around object @cvar width: overide the width of the box @cvar height: override the height of the box ''' # set these preferences different from Rectangle: fg = Color(0) bg = Color(1) pad = .2 width = None height = None def __init__(self, obj, **options): Rectangle.__init__(self, **options) Group.__init__(self, **options) bbox = obj.bbox() self.object = obj w = bbox.width+2*self.pad h = bbox.height+2*self.pad # overide the width and height if supplied if self.width is None: self.width = options.get('width', w) if self.height is None: self.height = options.get('height', h) self.append( Rectangle(width=self.width, height=self.height, bg=self.bg, fg=self.fg, c=obj.c, r=self.r, linewidth=self.linewidth, dash=self.dash), obj, ) # ---------------------------------------------------------------------- class TeXArea(Group): ''' Typeset some LaTeX within a fixed width minipage environment. @cvar width: the width of the environment @type width: float @cvar iscale: initial scale of the tex @type iscale: float @cvar align: alignment of the LaTeX to box if it iss smaller than the full width @type align: string (anchor point) @cvar fg: color of TeX @type fg: L{Color} object ''' # has to be different from groups width attribute width = 9.4 iscale = 1 fg = Color(0) align = "w" def __init__(self, text, **options): Group.__init__(self, **options) # set up tex width ... this relies on latex notion of # a point being accurate ... adjust for tex_scale too width_pp = int(self.width/float(self.iscale)*defaults.units) t = TeX(r'\begin{minipage}{%dpt}%s\end{minipage}'%(width_pp, text), fg=self.fg, iscale=self.iscale) # use this for alignment as the latex bounding box may be smaller # than the full width a = Area(width=self.width, height=0) Align(t, a, a1=self.align, a2=self.align, space=0) self.append(a, t) #apply(self, (), options) # ---------------------------------------------------------------------- # Poster class # ---------------------------------------------------------------------- class Poster(Page, VAlign): ''' A poster class @cvar size: the size of the poster eg A0 @cvar orientation: portrait or landscape @cvar space: space between vertically aligned objects appended to poster @cvar topspace: initial space at top of poster @cvar bg: background color of poster (unless background() method is overiden) ''' size = "A0" orientation = "portrait" bg = Color('DarkSlateBlue') space = 1 topspace = 2 def __init__(self, *objects, **options): Page.__init__(self, **options) VAlign.__init__(self, **options) back = self.background() # use Page's append so background doesn't get aligned Page.append(self, back) # add invisible area at top to start alignment a = Area(width=0, height=self.topspace-self.space, n=self.area().n) self.append(a) def background(self): ''' Return background for poster ''' area = self.area() signature = Text( 'Created with PyScript. http://pyscript.sourceforge.net', size=14, fg=Color(1)) signature.se = area.se+P(-.5, .5) return Group( Rectangle(width=area.width, height=area.height, fg=None, bg=self.bg), signature, ) # ---------------------------------------------------------------------- # Talk Class # ---------------------------------------------------------------------- class Pause(object): ''' A marker object to split slides to simulate a pause can appear anywhere in the talk ''' def bbox(self): """ Return the bounding box """ return Bbox() # ---------------------------------------------------------------------- class Talk(Pages): """ A Talk class for seminar presentations """ def append(self, *slides_raw): """ Append slides to the Talk @param slides_raw: list of slides to append to the talk @type slides_raw: list """ slides = [] pg = 1 for slide in slides_raw: slide(label = str(pg)) pg += 1 # find any Pauses present pauses = [] f = slide.flatten() for ii in range(len(f)): if isinstance(f[ii][0], Pause): pauses.append(ii) for pause in pauses: # create a copy and remove everything from Pause onwards print "Found Pause(): splitting slide in two" s = slide.copy() fs = s.flatten() for obj, group in fs[pause:]: group.objects.remove(obj) slides.append(s) slides.append(slide) for slide in slides: Pages.append(self, slide) def write(self, fp, title="PyScriptPS"): """ Write the talk out to file @param fp: the file handle of the file to write to @type fp: filehandle @param title: the title to use in the output postscript @type title: string """ tot = len(self) for pp in range(tot): self[pp].make(page=pp, total=tot) Pages.write(self, fp, title) # ---------------------------------------------------------------------- class EmptySlide(Page): """ An empty slide class """ title = None orientation = "Landscape" size = "screen" def flatten(self, thegroup=None, objects=[]): ''' Return a flattened list of objects ''' if thegroup is None: objects = [] objects = self.flatten(self.objects, objects) else: for obj in thegroup: objects.append((obj, thegroup)) if isinstance(obj, Group): objects = self.flatten(obj, objects) return objects def append(self, *items, **options): """ Append items to the slide @param items: list of PyScript objects to append @type items: list @param options: dictionary of options (where to append object etc) @type options: dict """ a1 = options.get('a1', None) a2 = options.get('a2', None) if (a1 is not None) and (a2 is not None) and len(items)>0: assert a1 in ["n", "ne", "e", "se", "s", "sw", "w", "nw", "c"] assert a2 in ["n", "ne", "e", "se", "s", "sw", "w", "nw", "c"] area = self.main() setattr(items[0], a1, getattr(area, a2)) return Page.append(self, *items) def append_n(self, *items): """ Append items using the "north" attribute of the objects @param items: list of objects to append @type items: list """ return apply(self.append, items, {'a1':'n', 'a2':'n'}) def append_s(self, *items): """ Append items using the "south" attribute of the objects @param items: list of objects to append @type items: list """ return apply(self.append, items, {'a1':'s', 'a2':'s'}) def append_e(self, *items): """ Append items using the "east" attribute of the objects @param items: list of objects to append @type items: list """ return apply(self.append, items, {'a1':'e', 'a2':'e'}) def append_w(self, *items): """ Append items using the "west" attribute of the objects @param items: list of objects to append @type items: list """ return apply(self.append, items, {'a1':'w', 'a2':'w'}) def append_c(self, *items): """ Append items using the "centre" attribute of the objects @param items: list of objects to append @type items: list """ return apply(self.append, items, {'a1':'c', 'a2':'c'}) def main(self): """ Return the bounding box of the slide """ bbox = self.bbox() return bbox def make_back(self): """ Make the background of the slide """ return None def make_title(self): """ Make the title of the slide """ return None def clear(self): """ Clear the slide of objects """ Page.clear(self) def make(self, page=1, total=1): """ Make the slide @param page: the page in the sequence of slides to make (default=1) @type page: int @param total: the total number of slides in the talk (default=1) @type total: int """ self.page = page self.total = total b = self.make_back() if b is not None: self.insert(0, b) t = self.make_title() if t is not None: self.append(t) # vim: expandtab shiftwidth=4: pyscript-0.6.1/pyscript/lib/presentation.py0000644000175000001440000016327710423155616020627 0ustar cochraneusers# Copyright (C) 2003-2006 Alexei Gilchrist and Paul Cochrane # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # $Id: presentation.py,v 1.39 2006/04/24 14:07:10 paultcochrane Exp $ ''' PyScript presentation library (posters and talks) There are some common useful component classes such as TeXBox and Box_1, followed by Poster and Talk classes ''' __revision__ = '$Revision: 1.39 $' from pyscript.defaults import defaults from pyscript import Color, Group, Epsf, Area, P, Align, Rectangle, TeX, \ Page, Distribute, Text, Pages, VAlign, Path from pyscript.render import render import os, types class TeXBox(Group): ''' Typeset some LaTeX within a fixed width box. @ivar fixed_width: the width of the box @type fixed_width: float @ivar tex_scale: The amount by which to scale the TeX @type tex_scale: float @ivar align: alignment of the LaTeX to box if it is smaller @type align: anchor string ''' def __init__(self, text, fixed_width=9.4, tex_scale=0.7, align="w", fg = Color(0), text_style="", **options): Group.__init__(self, **options) self.text = text self.fixed_width = fixed_width self.tex_scale = tex_scale self.fg = fg self.align = align self.text_style = text_style def set_fg(self, fg): """ Set the foreground colour """ self.fg = fg def set_fixed_width(self, fixed_width): """ Set the fixed width attribute """ self.fixed_width = fixed_width def set_tex_scale(self, tex_scale): """ Set the scale of TeX objects """ self.tex_scale = tex_scale def set_align(self, align): """ Set the anchor point where to align objects """ self.align = align def set_text_style(self, text_style): """ Set the text style (in LaTeX) """ self.text_style = text_style def make(self): """ Make the TeXBox """ width_pp = int(self.fixed_width/float(self.tex_scale)*defaults.units) al = Align(a1=self.align, a2=self.align, space=0) t = TeX(r'\begin{minipage}{%dpt}%s %s\end{minipage}' \ % (width_pp, self.text_style, self.text), fg=self.fg) t.scale(self.tex_scale, self.tex_scale) al.append(t) a = Area(width=self.fixed_width, height=0) al.append(a) self.append(al) return self #apply(self, (), options) # why do we do this??? class Box_1(Group): ''' A box of fixed width. Items added to it are aligned vertically and separated by a specified padding @cvar border: width of the border (in pts) @type border: int @cvar fg: color of border @type fg: L{Color} object @cvar bg: color of box background @type bg: L{Color} object @cvar fixed_width: width of box @type fixed_width: float @cvar pad: vertical padding between items @type pad: float @cvar r: corner radius @type r: float ''' bg = Color('Lavender') fg = Color(0) border = 1 fixed_width = 9.6 pad = 0.2 r = 0 def __init__(self, *items, **options): Group.__init__(self, **options) apply(self.append, items) Align(self, a1="s", a2="n", angle=180, space=self.pad) gb = self.bbox() r = Rectangle(n=gb.n+P(0, self.pad), width=self.fixed_width, height=gb.height+2*self.pad, bg=self.bg, fg=self.fg, linewidth=self.border, r=self.r, ) self.insert(0, r) class CodeBox(Group): """ A box with a 'dog-ear' to contain code fragments """ def __init__(self, text, **options): Group.__init__(self, **options) obj = TeXBox(text) obj.make() bg = Color('Orange')*1.3 fg = Color('black')*0.4 border = 0.75 #fixed_width = 2.5 pad = 0.2 dogear = 0.25 gb = obj.bbox() h = gb.height w = gb.width self.append(Path( P(-pad, -pad), P(-pad, h+pad), P(w+pad, h+pad), P(w+pad, -pad+dogear), P(w+pad-dogear, -pad), P(w+pad-dogear, -pad+dogear), P(w+pad, -pad+dogear), P(w+pad-dogear, -pad), P(-pad, -pad), bg=bg, fg=fg, linewidth=border, miterlimit=1.0) ) obj.c = self.bbox().c self.append(obj) class Poster(Page): """ A poster class. More docs forthcoming... """ def __init__(self, size, style=None): Page.__init__(self) # set stuff up self.size = size self.orientation = "Portrait" self.num_columns = 2 # set the default style settings self.title = "" self.title_fg = Color(0) self.title_scale = 1.4 self.title_width = 0.8 # as a fraction of the total poster width self.title_text_style = "\large" self.authors = "" self.authors_fg = Color(0) self.authors_scale = 1 self.authors_width = 0.8 # as a fraction of the total poster width self.authors_text_style = "" self.address = "" self.address_fg = Color(0) self.address_scale = 0.9 self.address_width = 0.8 # as a fraction of the total poster width self.address_text_style = "" self.abstract = "" self.abstract_fg = Color(0) self.abstract_scale = 0.8 self.abstract_width = 0.92 # relative to total width of poster self.abstract_text_style = "" self.gutter = 0.2 self.pad = 0 # should get set by add_column() self.item_sep = 0.3 self.bg = Color(1) self.signature_fg = Color(0) self.logo_height = 1.2 # styles for columns self.column_item_sep = 0.3 # styles for column boxes # the title's style... self.column_box_title_align = "c" self.column_box_title_tex_scale = 1.4 self.column_box_title_fixed_width = 9.4 self.column_box_title_text_style = r"" self.column_box_title_fg = Color(0) # the text styles of the column box self.column_box_text_align = "w" self.column_box_tex_scale = 0.7 self.column_box_text_width = 9.4 self.column_box_text_style = r"" self.column_box_text_fg = Color(0) # the column box styles self.column_box_item_sep = 0.1 self.column_box_width = 9.9 self.column_box_bg = Color(1) self.column_box_border = 1 # process the style option if style is not None: # make sure the file exists in either the .pyscript/styles # directory, or the current directory styleFname = style + ".py" HOME = os.path.expandvars("$HOME") if os.path.exists(HOME + "/.pyscript/styles/" + styleFname): print "Found %s in .pyscript/styles dir" % style self._read_style(HOME + "/.pyscript/styles/" + styleFname) elif os.path.exists(styleFname): print "Found %s in current dir" % style self._read_style(styleFname) else: # barf raise ValueError, "Style %s not found!" % style self.logos = [] self.columns = [] self.area = self.area() # subtract the gutter to get the printing area self.printing_area = Area( sw=self.area.sw + P(1, 1)*self.gutter, width=self.area.width - 2*self.gutter, height=self.area.height - 2*self.gutter ) def _read_style(self, styleFname): """ Read the talk style file @param styleFname: The name of the style file to process @type styleFname: string """ # slurp in the text fp = open(styleFname, "r") lines = fp.readlines() fp.close() # make one big string... styleText = "" for line in lines: styleText += line # exec the text exec(styleText) def set_title(self, title): """ Set the title to use for the poster @param title: the text of the poster title @type title: string """ self.title = title pass def set_authors(self, authors): """ Set the authors of the poster @param authors: the text of the poster authors @type authors: string """ self.authors = authors pass def set_address(self, address): """ Set the address of the institution of those presenting the poster @param address: the text of the address @type address: string """ self.address = address pass def set_abstract(self, abstract): """ Set the abstract of the poster @param abstract: the text of the poster abstract @type abstract: string """ self.abstract = abstract pass def set_size(self, size): """ Set the size of the poster. These are standard page sizes. It is a good idea to develop a poster at a size of "a4" and then for the final poster use "a0". It is also handy when at a poster session at a conference to have a4 size versions of the a0 poster to give out to people, so the a4 setting is also handy for that. @param size: the size of the poster @type size: string """ self.size = size pass def set_style(self, style): """ Set the style of the poster. This is the name of a set of predefined fonts, sizes, colours etc for the text, the columns of the poster and the poster background. @param style: the text of the name of the poster style to use @type style: string """ self.style = style pass def set_orientation(self, orientation): """ Set the orientation of the poster. Options are "portrait" or "landscape". @param orientation: the page orientation of the poster @type orientation: string """ self.orientation = orientation pass def set_num_columns(self, num_columns): """ Set the number of columns to use for the poster. Typically one would use two columns for portrait, and three for landscape. @param num_columns: the number of columns to use @type num_columns: int """ self.num_columns = num_columns pass def add_logo(self, logo, height=None): """ Add a logo to the poster. If only one logo is added to the poster, it is by default located at the top left-hand corner. The second logo is then positioned in the top right-hand corner. The third is positioned in the top middle. If you add more than that, the logos are distributed evenly across the top of the poster. @param logo: the file name of the eps file of the logo to add @type logo: text @param height: the height of the logo @type height: float """ if height is None: height = self.logo_height obj = Epsf(logo, height=height) self.logos.append(obj) def add_logos(self, *logos, **options): """ Add several logos to the poster at one time. If only one logo is added to the poster, it is by default located at the top left-hand corner. The second logo is then positioned in the top right-hand corner. The third is positioned in the top middle. If you add more than that, the logos are distributed evenly across the top of the poster. @param logos: list of file names of the eps files of the logos to add @type logos: list of strings @keyword height: the height of the logo @type height: float """ # process the options, if any if options.has_key('height'): height = options['height'] else: height = self.logo_height for logo in logos: obj = Epsf(logo, height=height) self.logos.append(obj) def add_column(self, column, side): """ Add a column of the poster. @param column: the Column object to add as the poster column @type column: Column object @param side: the side on which the column is to be on the poster. Valid values are "left", "middle" (useful for landscape only) and "right". @type side: string """ # there must be a better way to write this if statement, # something like if side is not in [left, middle, right] ??? if side != 'left' and side != 'middle' and side != 'right': errMsg = "You must specify either 'left', 'middle', or 'right'\n" errMsg += "I got: '%s'" % side raise ValueError, errMsg self.columns.append(column._make()) def _make_title(self): """ Make the title """ titlebox = TeXBox(text=self.title) titlebox.set_fg(self.title_fg) titlebox.set_fixed_width(self.printing_area.width*self.title_width) titlebox.set_tex_scale(self.title_scale) titlebox.set_align("c") titlebox.set_text_style(self.title_text_style) titlebox.make() return titlebox def _make_authors(self): """ Make the authors """ authorbox = TeXBox(self.authors) authorbox.set_fg(self.authors_fg) authorbox.set_tex_scale(self.authors_scale) authorbox.set_fixed_width(self.printing_area.width*self.authors_width) authorbox.set_align("c") authorbox.set_text_style(self.authors_text_style) authorbox.make() return authorbox def _make_address(self): """ Make the address """ addressbox = TeXBox(self.address) addressbox.set_fg(self.address_fg) addressbox.set_tex_scale(self.address_scale) addressbox.set_fixed_width(self.printing_area.width*self.address_width) addressbox.set_align("c") addressbox.set_text_style(self.address_text_style) addressbox.make() return addressbox def _make_abstract(self): """ Make the abstract """ abstractbox = TeXBox(self.abstract) abstractbox.set_fg(self.abstract_fg) abstractbox.set_tex_scale(self.abstract_scale) abstractbox.set_fixed_width( self.printing_area.width*self.abstract_width) abstractbox.set_align("c") abstractbox.set_text_style(self.abstract_text_style) abstractbox.make() return abstractbox def _make_logos(self): """ Make the logos """ logos = Align(a1="e", a2="w", angle=90, space=None) for logo in self.logos: logos.append(logo) Distribute(logos, a1="e", a2="w", p1=self.printing_area.nw, p2=self.printing_area.ne, ) return logos def _make_columns(self): """ Make the columns """ #print "Number of columns is: %d" % len(self.columns) # vertically align the columns items, but with no spacing yet #for col in self.columns: #VAlign(col, space=None) # distribute the columns horizontally if self.num_columns == 2: Distribute(Area(width=0, height=0), self.columns[0], self.columns[1], Area(width=0, height=0), p1=self.printing_area.w, p2=self.printing_area.e, a1="e", a2="w") elif self.num_columns == 3: Distribute(Area(width=0, height=0), self.columns[0], self.columns[1], self.columns[2], Area(width=0, height=0), p1=self.printing_area.w, p2=self.printing_area.e, a1="e", a2="w") else: raise ValueError, \ "Incorrect number of columns. Should be 2 or 3. I got %d" % \ self.num_columns # find the distance between two of the columns self.pad = (self.columns[1].bbox().w - self.columns[0].bbox().e)[0] # vertically align the column items #print self.pad #for col in self.columns: #VAlign(col, space=self.pad) # now align the columns themselves all_cols = Align(angle=90, space=None, a1="ne", a2="nw") for col in self.columns: #col.set_space(self.pad) col.set_space(0) #print col.get_space() all_cols.append(col._make()) return all_cols def _make_background(self): """ Make the background of the poster """ area = self.area() return Rectangle(width=area.width, height=area.height, fg=None, bg=self.bg ) def make(self, file): """ Make the poster. @param file: the file name of the poster output eps file @type file: string """ all = Align(a1="s", a2="n", angle=180, space=self.item_sep) all.append(self._make_logos()) all.append(self._make_title()) all.append(self._make_authors()) all.append(self._make_address()) all.append(self._make_abstract()) all.append(self._make_columns()) all.n = self.printing_area.n - P(0, 0.1) back = self._make_background() p = self.printing_area.se+P(0, 1.2) signature = Text( "Created with PyScript. http://pyscript.sourceforge.net", size=6, sw=p, fg=self.signature_fg).rotate(-90, p) self.append(back) self.append(all) self.append(signature) # actually generate the postscript render(self, file=file) class Column(VAlign): # I *think* this should inherit from VAlign... """ A column of a poster. Basically just a container for various boxes. More docs forthcoming... """ def __init__(self, poster): VAlign.__init__(self) #Group.__init__(self) self.boxes = [] self.space = poster.column_item_sep def add_box(self, box): """ Add a box to the column @param box: the box to add to the column @type box: ColumnBox object """ self.append(box._make()) def set_space(self, space): """ Set the spacing of the column items @param space: the space between the items @type space: float """ #print "Column.set_space()" self.space = space def get_space(self): """ Get the spacing of the column items """ return self.space def _make(self): """ Make the column """ #print "Column._make()" for box in self.boxes: self.append(box._make()) return self class ColumnBox(Group): """ A box, containing various objects, with a fixed width, but variable height Should add more docs here too... """ def __init__(self, poster): Group.__init__(self) self.title_align = poster.column_box_title_align self.title_tex_scale = poster.column_box_title_tex_scale self.title_fixed_width = poster.column_box_title_fixed_width self.title_text_style = poster.column_box_title_text_style self.title_fg = poster.column_box_title_fg self.align = poster.column_box_text_align self.tex_scale = poster.column_box_tex_scale self.fixed_width = poster.column_box_text_width self.text_style = poster.column_box_text_style self.fg = poster.column_box_text_fg self.item_sep = poster.column_box_item_sep self.box_width = poster.column_box_width self.box_bg = poster.column_box_bg self.box_border = poster.column_box_border self.title = "" self.items = [] def set_title(self, title): """ Set the title of the box within the column @param title: the title of the column box @type title: string """ self.title = title def add_TeXBox(self, text): """ Adds a TeXBox object to the column @param text: the text of the TeXBox object to add @type text: string """ texbox = TeXBox(text) texbox.make() # other settings here... self.items.append(texbox) def add_fig(self, fig, height=None, width=None, bg=Color(1)): """ Add an arbitrary figure to the column box, with a background. This could be a previously defined pyscript diagram (for instance). If only one of the height or width is given then the figure is scaled appropriately, maintaining the original aspect ratio. @param fig: the figure to add @type fig: PyScript object @param width: the width of the figure @type width: float @param height: the height of the figure @type height: float @param bg: the colour of the figure background @type bg: Color object """ # get the figure's current height and width oldHeight = fig.bbox().height oldWidth = fig.bbox().width # scale the figure appropriately if height is not None and width is None: scale = height/oldHeight fig = fig.scale(scale, scale) elif height is None and width is not None: scale = width/oldWidth fig = fig.scale(scale, scale) elif height is not None and width is not None: xscale = width/oldWidth yscale = height/oldHeight fig = fig.scale(xscale, yscale) else: # leave well alone... pass # put a white background on it gutter = 0.1 rect = Rectangle(width=fig.bbox().width+gutter, height=fig.bbox().height+gutter, c=fig.bbox().c, bg=bg, fg=None) # group everything together all = Group() all.append(rect, fig) # append it to the list of items in the ColumnBox self.items.append(all) def add_epsf(self, file, height=None, width=None): """ Add an eps file to the column box. If only one of the height or width is given then the figure is scaled appropriately, maintaining the original aspect ratio. @param file: the file name of the eps file to add @type file: string @param width: the width of the figure @type width: float @param height: the height of the figure @type height: float """ # load the eps with the appropriate dimensions if height is not None and width is None: eps = Epsf(file=file, height=height) elif height is None and width is not None: eps = Epsf(file=file, width=width) elif height is not None and width is not None: eps = Epsf(file=file, width=width, height=height) else: # use the file's own size eps = Epsf(file=file) # append it to the list of items in the ColumnBox self.items.append(eps) def add_object(self, obj): """ Add a pre-defined object to the box, this could be an Align or Group object for example @param obj: the object to be added @type obj: pyscript object """ self.items.append(obj) def add_text(self, text): """ Add arbitrarily placed text to the box @param text: the text to be added @type text: string """ tex = TeX(text) self.items.append(tex) def _make_title(self): """ Make the title """ titlebox = TeXBox(self.title) titlebox.set_align(self.title_align) titlebox.set_tex_scale(self.title_tex_scale) titlebox.set_fixed_width(self.title_fixed_width) titlebox.set_text_style(self.title_text_style) titlebox.set_fg(self.title_fg) titlebox.make() return titlebox def _make(self): """ Make the column box object """ valign = VAlign(space=self.item_sep) valign.append(self._make_title()) #print "Number of items in the column box is: %d" % len(self.items) for item in self.items: valign.append(item) # the reason for the BasicBox class is to let the overall poster # style handle the width, foreground, etc. etc. box = BasicBox() box.set_height(valign.bbox().height + 2*box.pad) box.set_width(self.box_width) box.set_anchor("n", valign.bbox().n+P(0, 0.2)) #box.n = valign.bbox().n+P(0, 0.2) # absorb into style ??? box.set_bg(self.box_bg) box.set_border(self.box_border) # append the objects to the group self.append(box) self.append(valign) return self class BasicBox(Rectangle): """ A basic box, with border, and background to use in behind textual and other objects """ def __init__(self): Rectangle.__init__(self) self.bg = Color("lavender") self.fg = Color(0) self.border = 1 self.fixed_width = 9.6 self.pad = 0.2 self.radius = 0 self.width = 9.9 self.height = 1 self.anchor = "n" def set_height(self, height): """ Set the height of the box """ self.height = height def set_width(self, width): """ Set the width of the box """ self.width = width def set_bg(self, bg): """ Set the background colour """ self.bg = bg def set_fg(self, fg): """ Set the foreground colour """ self.fg = fg def set_border(self, border): """ Set the width of the border around the box """ self.linewidth = border def set_radius(self, radius): """ Set the radius of the corners of the box, if they are rounded """ self.r = radius def set_pad(self, pad): """ Set the padding around the box """ self.pad = pad def set_anchor(self, anchor, location): """ Set the anchor location (c, n, ne, e, se, s, sw, w, nw) """ exec("self.%s = location" % anchor) class Poster_1(Page): ''' A poster style, portrait orientation very similar to a journal article's front page. Title, authors and abstract across top. two columns for boxes with details. It is set up for A4 paper which can then be scaled for A0 etc. @cvar bg: poster background @cvar gutter: nonprintable margin around entire poster @cvar title: TeX of title @cvar title_fg: fg color of title @cvar title_scale: scale of title TeX @cvar title_width: proportion of total width for title @cvar authors: TeX of authors @cvar authors_fg: fg color of authors @cvar authors_scale: scale of authors TeX @cvar authors_width: proportion of total width for authors @cvar address: TeX of address @cvar address_fg: fg color of address @cvar address_scale: scale of address TeX @cvar address_width: proportion of total width for address @cvar abstract: TeX of abstract @cvar abstract_fg: fg color of abstract @cvar abstract_scale: scale of abstract TeX @cvar abstract_width: proportion of total width for abstract @cvar logos: a list of filenames for the logos @cvar logo_height: the height to which to scale the logos @cvar printing_area: an Area the size of the page minus the gutter @cvar col1: a Group() containing left column objects @cvar col2: a Group() containing right column objects ''' col1 = Group() col2 = Group() logos = () def __init__(self): Page.__init__(self) self.size = "A4" self.gutter = 0.2 # paper margin for A4 in cm self.bg = Color('DarkSlateBlue') self.title = "" self.title_fg = Color('Yellow') self.title_scale = 1.4 self.title_width = 0.8 self.address = "" self.address_fg = Color(0) self.address_scale = 1 self.address_width = 0.8 self.authors = "" self.authors_fg = Color(0) self.authors_scale = 1 self.authors_width = 0.8 self.abstract = "" self.abstract_fg = Color(0) self.abstract_scale = 0.8 self.abstract_width = 0.8 self.logo_height = 0.8 #self.logos = () #self.col1 = Group() #self.col2 = Group() self.signature_fg = self.bg*0.8 area = self.area() # subtract the gutter to get printing area self.printing_area = Area( sw=area.sw+P(1, 1)*self.gutter, width=area.width-2*self.gutter, height=area.height-2*self.gutter ) def add_fig(self, file, width=5.0): """ This method needs to be fixed up. It's not to put a figure on the page, but an eps file... """ fig = Epsf(file) rect1 = Rectangle(c=fig.c, width=fig.bbox().width+0.1, height=fig.bbox().height+0.1, fg=Color('black'), bg=Color('white'), linewidth=0.5, ) out_fig = Group(rect1,fig) out_fig.scale(width/out_fig.bbox().width,width/out_fig.bbox().width) return out_fig def add_epsf(self): """ Add and EPS file to the poster """ pass def _make_logos(self): """ Make and return a Group object of the logos """ #thelogos = Group() thelogos = Align(a1="e", a2="w", angle=90, space=None) for logo in self.logos: thelogos.append(Epsf(logo, height=self.logo_height)) Distribute(thelogos, a1="e", a2="w", p1=self.printing_area.nw, p2=self.printing_area.ne) #Align(thelogos, a1="e", a2="w", angle=90, space=None) return thelogos def _make_title(self): ''' Return a title object ''' return TeXBox(self.title, fg=self.title_fg, fixed_width=self.printing_area.width*self.title_width, tex_scale=self.title_scale, align="c").make() def _make_address(self): """ Return an address object """ return TeXBox(self.address, fg=self.address_fg, fixed_width=self.printing_area.width*self.address_width, tex_scale=self.address_scale, align="c").make() def _make_abstract(self): ''' Return the abstract object ''' return TeXBox(self.abstract, fixed_width=self.printing_area.width*self.abstract_width, tex_scale=self.abstract_scale, fg=self.abstract_fg, align="c").make() def _make_authors(self): ''' Return authorlist object ''' return TeXBox(self.authors, fg=self.authors_fg, tex_scale=self.authors_scale, fixed_width=self.printing_area.width*self.authors_width, align="c").make() def _make_background(self): ''' Return background (block color) ''' area = self.area() return Rectangle(width=area.width, height=area.height, fg=None, bg=self.bg ) def make(self): ''' Create the actual poster aligning everything up. calls make_title(), make_authors() etc ''' # NB: A0 = 4x A4 # vertically align the column items ... no spacing yet! Align(self.col1, a1="s", a2="n", angle=180, space=None) Align(self.col2, a1="s", a2="n", angle=180, space=None) # Distribute the cols horizontally Distribute(Area(width=0, height=0), self.col1, self.col2, Area(width=0, height=0), p1=self.printing_area.w, p2=self.printing_area.e, a1="e", a2="w") # find the distance between the cols pad = (self.col2.bbox().w-self.col1.bbox().e)[0] # vertically align the column items Align(self.col1, a1="s", a2="n", angle=180, space=pad) Align(self.col2, a1="s", a2="n", angle=180, space=pad) # align the two columns themselves cols = Align(self.col1, self.col2, angle=90, space=None, a1="ne", a2="nw") all = Align( self._make_logos(), self._make_title(), self._make_authors(), self._make_address(), self._make_abstract(), cols, a1="s", a2="n", angle=180, space=pad ) all.n = self.printing_area.n-P(0, 0.1) back = self._make_background() p = self.printing_area.se+P(0, 1.2) signature = Text( 'Created with PyScript. http://pyscript.sourceforge.net', size=6, sw=p, fg=self.signature_fg ).rotate(-90, p) self.append(back, all, signature) # return a reference for convenience return self class Talk(Pages): """ A talk class """ def __init__(self, style=None): Pages.__init__(self) self.slides = [] self.bg = Color('RoyalBlue')*0.9 self.fg = self.bg self.logos = [] self.logo_height = 0.8 self.title = "" self.title_fg = Color('white') self.title_scale = 5 self.title_textstyle = "" self.slide_title = "" self.slide_title_fg = Color('white') self.slide_title_scale = 5 self.slide_title_textstyle = "" self.footerScale = 1 self.waitbar_fg = Color('orangered') self.waitbar_bg = Color('black') self.authors = "" self.authors_fg = Color('white') self.authors_scale = 3 self.authors_textstyle = "" self.speaker = "" # i.e. who's actually giving the talk self.speaker_fg = Color(0) self.speaker_textstyle = "" self.address = "" self.address_fg = Color('white') self.address_scale = 2 self.address_textstyle = "" self.box_bg = Color('lavender') self.box_fg = Color(0) self.box_border = 2 self.text_scale = 3 self.text_fg = Color(0) self.text_textstyle = "" self.headings_fgs = { 1 : Color('white'), 2 : Color('white'), 3 : Color('white'), "equation" : Color('white'), "default" : Color('white'), "space" : self.fg, } self.headings_scales = { 1 : 3, 2 : 2.5, 3 : 2.2, "equation" : 2.5, "default" : 1.5, "space" : 3, } self.headings_bullets = { 1 : TeX(r"$\bullet$"), 2 : TeX(r"--"), 3 : TeX(r"$\gg$"), "equation" : Rectangle(height=1, fg=self.bg, bg=self.bg), "default" : TeX(r"$\cdot$"), "space" : Rectangle(height=1, fg=self.bg, bg=self.bg), } self.headings_indent = { 1 : 0, 2 : 0.5, 3 : 1, "equation" : 2, "default" : 2, "space" : 0, } self.headings_textstyle = { 1 : "", 2 : "", 3 : "", "equation" : "", "default" : "", "space" : "", } # process the style option if style is not None: # make sure the file exists in either the .pyscript/styles # directory, or the current directory styleFname = style + ".py" HOME = os.path.expandvars("$HOME") if os.path.exists(HOME + "/.pyscript/styles/" + styleFname): print "Found %s in .pyscript/styles dir" % style self._read_style(HOME + "/.pyscript/styles/" + styleFname) elif os.path.exists(styleFname): print "Found %s in current dir" % style self._read_style(styleFname) else: # barf raise ValueError, "Style %s not found!" % style def _read_style(self, styleFname): """ Read the talk style file @param styleFname: The name of the style file to process @type styleFname: string """ # slurp in the text fp = open(styleFname, "r") lines = fp.readlines() fp.close() # make one big string... styleText = "" for line in lines: styleText += line # exec the text exec(styleText) def set_title(self, title): """ Set the title of the talk as a whole @param title: the title of the talk @type title: string """ self.title = title return def set_authors(self, authors): """ Set the authors of the talk @param authors: the author list for the talk @type authors: string """ self.authors = authors return def set_speaker(self, speaker): """ Set the name of the person actually giving the talk/presentation @param speaker: the name of the person giving the talk @type speaker: string """ self.speaker = speaker return def set_address(self, address): """ Set the address for the institution (or equivalent) of the speaker @param address: the address to use @type address: string """ self.address = address return def add_logo(self, logo, height=None): """ Add a logo to the talk @param logo: eps file name of logo @type logo: string """ if height is None: height = self.logo_height self.logos.append(Epsf(file=logo, height=height)) def _make_authors(self): """ Generate the authors text on the titlepage """ ttext = "%s %s" % (self.authors_textstyle, self.authors) return TeX(ttext, fg=self.authors_fg ).scale(self.authors_scale, self.authors_scale) def _make_address(self): """ Generate the address text on the titlepage """ if isinstance(self.address, types.StringType): ttext = "%s %s" % (self.address_textstyle, self.address) return TeX(ttext, fg=self.address_fg ).scale(self.address_scale, self.address_scale) else: #raise ValueError, "Can't handle non-string arguments yet" return self.address def make(self, *slides, **options): """ Routine to collect all of slides together and render them all as the one document """ # create the titlepage automatically titlepage = Slide(self) titlepage.set_titlepage() self.slides.append(titlepage) # create the list of slides for slide in slides: self.slides.append(slide) # add all the slides to the talk i = 1 temp = Pages() for slide in self.slides: slide.pageNumber = i print 'Adding slide', str(i), '...' temp.append(slide._make(self)) i += 1 # determine the file name to use if not options.has_key('file'): raise ValueError, "No filename given" file = options['file'] # render it! render(temp, file=file) class Slide(Page): """ A slide class. Use this class to generate the individual slides in a talk """ def __init__(self, talk): Page.__init__(self) self.size = "a4" self.orientation = "Landscape" self.pageNumber = None self.pages = 0 # need to set up an initial value self.titlepage = False self.authors = None self.headings = [] self.epsf = [] self.figs = [] self.area = self.area() self.title = None self.logos = talk.logos self.text_scale = talk.text_scale self.text_textstyle = talk.text_textstyle self.text_fg = talk.text_fg self.textObjs = [] def _make_logos(self): """ Put the logos on the page """ if len(self.logos) == 0: return Area(width=0, height=0) elif len(self.logos) == 1: return Group( Area(width=self.area.width-0.4, height=0), self.logos[0] ) width = self.area.width -\ self.logos[0].bbox().width -\ self.logos[-1].bbox().width -\ 0.4 for logo in self.logos[1:-1]: width -= logo.bbox().width space = width/(len(self.logos)-1) a = Align(a1="e", a2="w", angle=90, space=space) for logo in self.logos: a.append(logo) return a def add_fig(self, obj, **options): """ Put an arbitrary figure onto the page, with a white background @param obj: the PyScript object to use for the figure @type obj: PyScript object """ if options.has_key('bg'): backColor = options['bg'] else: backColor = Color('white') if options.has_key('fg'): frontColor = options['fg'] else: frontColor = None if options.has_key('height'): figHeight = options['height'] else: figHeight = None if options.has_key('width'): figWidth = options['width'] else: figWidth = None gutter = 0.1 back = Rectangle(width=obj.bbox().width+gutter, height=obj.bbox().height+gutter, bg=backColor, fg=frontColor) back.sw = obj.bbox().sw-P(gutter/2.0, gutter/2.0) fig = Group(back, obj) # now scale the height/width appropriately if figWidth and/or # figHeight are set if figHeight is not None and figWidth is None: if fig.bbox().height == 0.0: raise ValueError, "Initial figure height is zero!!" else: scale = figHeight/fig.bbox().height fig.scale(scale, scale) elif figHeight is None and figWidth is not None: if fig.bbox().width == 0.0: raise ValueError, "Initial figure width is zero!!" else: scale = figWidth/fig.bbox().width fig.scale(scale, scale) elif figHeight is not None and figWidth is not None: if fig.bbox().height == 0.0: raise ValueError, "Initial figure height is zero!!" elif fig.bbox().width == 0.0: raise ValueError, "Initial figure width is zero!!" else: scalex = figWidth/fig.bbox().width scaley = figHeight/fig.bbox().height fig.scale(scalex, scaley) # there must be a better way to do this!!! if options.has_key('e'): fig.e = options['e'] elif options.has_key('se'): fig.se = options['se'] elif options.has_key('s'): fig.s = options['s'] elif options.has_key('sw'): fig.sw = options['sw'] elif options.has_key('w'): fig.w = options['w'] elif options.has_key('nw'): fig.nw = options['nw'] elif options.has_key('n'): fig.n = options['n'] elif options.has_key('ne'): fig.ne = options['ne'] elif options.has_key('c'): fig.c = options['c'] else: fig.sw = P(0.0, 0.0) # add the figure to the list of figures self.figs.append(fig) def set_titlepage(self): """ Set the current slide to be the titlepage """ self.titlepage = True return def set_title(self, title=None): """ Set the title of the slide """ self.title = title return def _make_title(self, talk): """ Make the title of the slide (note that this is *not* the title of the talk) """ if self.title is None or self.title == "": return Area(width=0, height=0) # if we just get a string, put it in a TeX object in the current style if isinstance(self.title, types.StringType): ttext = "%s %s" % (talk.title_textstyle, self.title) return TeX(ttext, fg=talk.title_fg).scale(talk.title_scale*0.8, talk.title_scale) else: # just return the object itself return self.title def add_heading(self, level, text): """ Add a heading to the slide @param level: the heading level as a number starting from 1 (the most significant level) @type level: int (1,2,3) or string ("space", "equation") @param text: the text to be used for the heading @type text: string """ temp = [ level, text ] self.headings.append(temp) def add_text(self, text, **options): """ Add, and arbitrarily place, text on the slide @param text: the text to place @type text: string, TeX object or Text object """ # process options if options.has_key('fg'): frontColor = options['fg'] else: frontColor = self.text_fg if options.has_key('scale'): scale = options['scale'] else: scale = self.text_scale # check for what kind of object we have... if isinstance(text, types.StringType): # prepend the style if it is just a string text = self.text_textstyle + " " + text obj = TeX(text, fg=frontColor).scale(scale, scale) else: raise ValueError, \ "Cannot yet handle non-string objects in Slide.add_text()" # there must be a better way to do this!!! if options.has_key('e'): obj.e = options['e'] elif options.has_key('se'): obj.se = options['se'] elif options.has_key('s'): obj.s = options['s'] elif options.has_key('sw'): obj.sw = options['sw'] elif options.has_key('w'): obj.w = options['w'] elif options.has_key('nw'): obj.nw = options['nw'] elif options.has_key('n'): obj.n = options['n'] elif options.has_key('ne'): obj.ne = options['ne'] elif options.has_key('c'): obj.c = options['c'] else: obj.sw = P(0.0, 0.0) #obj = TeX(r"test", fg=frontColor) #obj.c = self.area.c self.textObjs.append(obj) def _make_headings(self, talk): """ Make the headings """ heading_block = Align(a1="sw", a2="nw", angle=180, space=0.5) for heading in self.headings: heading_level = heading[0] if not talk.headings_bullets.has_key(heading_level): heading_level = "default" heading_text = "%s %s" % (talk.headings_textstyle[heading_level] , heading[1]) heading_bullet = talk.headings_bullets[heading_level] heading_fg = talk.headings_fgs[heading_level] heading_scale = talk.headings_scales[heading_level] heading_indent = talk.headings_indent[heading_level] tex = Align(a1='ne', a2='nw', angle=90, space=0.2) tex.append(heading_bullet) tex.append(TeXBox(text=heading_text, fixed_width=self.area.width-5, fg=heading_fg, tex_scale=heading_scale)) padding = Area(sw=tex.sw, width=heading_indent, height=0) heading_proper = Align(a1="e", a2="w", angle=90, space=0) heading_proper.append(padding, tex) heading_block.append(heading_proper) return heading_block def _make_waitbar(self, talk): """ Make a waitbar """ waitBarBack = Rectangle(se=self.area.se+P(-0.8, 0.4), width=2.5, height=0.5, r=0.2, fg=talk.waitbar_bg, bg=talk.waitbar_bg) offset = 0.05 waitBarFront = Rectangle(w=waitBarBack.w+P(offset, 0), width=(waitBarBack.width-2*offset)*\ self.pageNumber/self.pages, height=waitBarBack.height-2*offset, r=0.2, fg=talk.waitbar_fg, bg=talk.waitbar_fg) waitBar = Group(waitBarBack, waitBarFront) return waitBar def _make_footer(self, talk): """ Make the footer. A text block giving the title and the name of the person giving the talk """ pageOf = False if pageOf: footerText = " - %s; page %i of %i" % \ (talk.speaker, self.pageNumber, self.pages) else: footerText = " - %s" % (talk.speaker, ) footer = Align(a1="e", a2="w", angle=90, space=0.1) footer.append(TeX(text="%s %s"%(talk.title_textstyle, talk.title), fg=talk.title_fg, ).scale(talk.footerScale, talk.footerScale)) footer.append(TeX(text="%s %s"%(talk.speaker_textstyle, footerText), fg=talk.title_fg ).scale(talk.footerScale, talk.footerScale)) footer.sw = self.area.sw+P(0.4, 0.4) return footer def add_epsf(self, file="", **options): """ Add an eps file to the slide @param file: the filename of the eps file @type file: string @keyword width: the width of the image in the current default units. If only this variable is given, then the aspect ratio of the image is maintained. @type width: float @keyword height: the height of the image in the current default units. If only this variable is given, then the aspect ratio of the image is maintainted. @type height: float @keyword c, n, ne, e, se, s, sw, w, nw: the location of the anchor point """ if options.has_key('width'): picture = Epsf(file, width=options['width']) elif options.has_key('height'): picture = Epsf(file, height=options['height']) elif options.has_key('width') and options.has_key('height'): picture = Epsf(file, width=options['width'], height=options['height']) else: picture = Epsf(file) # there must be a better way to do this!!! if options.has_key('e'): picture.e = options['e'] elif options.has_key('se'): picture.se = options['se'] elif options.has_key('s'): picture.s = options['s'] elif options.has_key('sw'): picture.sw = options['sw'] elif options.has_key('w'): picture.w = options['w'] elif options.has_key('nw'): picture.nw = options['nw'] elif options.has_key('n'): picture.n = options['n'] elif options.has_key('ne'): picture.ne = options['ne'] elif options.has_key('c'): picture.c = options['c'] else: picture.sw = P(0.0, 0.0) offset = 0.2 background = Rectangle(width=picture.bbox().width+offset, height=picture.bbox().height+offset, bg=Color('white'), fg=Color('white'), ) background.sw = picture.sw-P(offset/2.0, offset/2.0) figure = Group(background, picture) self.epsf.append(figure) def _make_epsf(self): """ Collects all of the eps images together """ pictures = Group() for file in self.epsf: pictures.append(file) return pictures def _make_figs(self): """ Collects all of the figures together """ figs = Group() for fig in self.figs: figs.append(fig) return figs def _make_textObjs(self): """ Collects all the text objects together """ textObjs = Group() for text in self.textObjs: textObjs.append(text) return textObjs def _make_titlepage(self, talk): """ Makes the titlepage of the talk """ titlepage = Align(a1="s", a2="n", angle=180, space=0.4) if isinstance(talk.title, types.StringType): ttext = "%s %s" % (talk.title_textstyle, talk.title) titlepage.append(TeX(ttext, fg=talk.title_fg)\ .scale(talk.title_scale, talk.title_scale)) else: #raise ValueError, "Can't yet handle non-string arguments") titlepage.append(Text(ttext)) if talk.authors is not None: titlepage.append(talk._make_authors()) if talk.address is not None: titlepage.append(talk._make_address()) return titlepage def _make_background(self, talk): """ Makes the background of the slide """ back = Group() back.append(Rectangle(sw=self.area.sw, width=self.area.width, height=self.area.height, fg=None, bg=talk.bg, ) ) back.append(Rectangle(sw=self.area.sw, width=2.5, height=self.area.height, fg=None, bg=talk.bg*0.5, ) ) back.append(Rectangle(sw=self.area.sw, width=self.area.width, height=1.5, fg=None, bg=talk.bg*0.5, ) ) back.append(Rectangle(nw=self.area.nw, width=self.area.width, height=2.5, fg=None, bg=talk.bg*0.5, ) ) back.append(Rectangle(nw=self.area.nw, width=2.5, height=2.5, fg=None, bg=Color('firebrick'), ) ) return back def _make(self, talk, scale=1): """ Make the slide. Collect all of the objects together into one Page() object ready for rendering. """ if self.titlepage: all = self._make_titlepage(talk) all.c = self.area.c + P(0.0, 0.8) else: all = Align(a1="s", a2="n", angle=180, space=0.4) all.append(self._make_title(talk)) all.nw = self.area.nw + P(2.5, -0.2) # I'm aware that this isn't a good way to do this, but # it's late at night, and I want to get *something* going headings = self._make_headings(talk) headings.nw = self.area.nw + P(3.0, -3.0) back = self._make_background(talk) p = self.area.se + P(-0.1, 0.1) signature = Text( 'Created with PyScript. http://pyscript.sourceforge.net', size=15, sw=p, fg=talk.bg*0.8 ).rotate(-90, p) logos = self._make_logos() logos.nw = self.area.nw + P(0.2, -0.2) self.pages = len(talk.slides) All = Group( back, all, headings, self._make_epsf(), self._make_figs(), self._make_textObjs(), signature, self._make_footer(talk), logos, self._make_waitbar(talk) ).scale(scale, scale) return Page(All, orientation=self.orientation) # vim: expandtab shiftwidth=4: pyscript-0.6.1/pyscript/lib/qi.py0000644000175000001440000003563610402020540016502 0ustar cochraneusers# Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, # USA. # $Id: qi.py,v 1.12 2006/03/03 10:58:40 paultcochrane Exp $ ### = we have the equivalent # = not yet implemented # zero - replaces qubit with |0> state # discard - discard qubit (put "|" vertical bar on qubit wire) # slash - put slash on qubit wire # Utwo - two-qubit operation U # SS - two-qubit gate, symmetric; open squares # ----------------------------------------------------------------------------- ''' Package for drawing quantum circuit diagrams ''' __revision__ = '$Revision: 1.12 $' from pyscript import Rectangle, Color, Circle, Dot, P, Path, TeX, \ Distribute, C, U from pyscript.groups import Group from types import IntType, FloatType, ListType, TupleType, StringType # ------------------------------------------------------------------------- class Boxed(Group, Rectangle): ''' Draws a box around an object, the box can be placed acording to standard Area tags @cvar pad: padding around object @type pad: float @cvar width: overide the width of the box @type width: float @cvar height: override the height of the box @type height: float ''' fg = Color(0) bg = Color(1) pad = 0.2 def __init__(self, obj, **options): Rectangle.__init__(self, **options) Group.__init__(self, **options) bbox = obj.bbox() w = bbox.width+2*self.pad h = bbox.height+2*self.pad self.width = options.get('width', w) self.height = options.get('height', h) self.append( Rectangle(width=self.width, height=self.height, bg=self.bg, fg=self.fg, c=obj.c, r=self.r, linewidth=self.linewidth, dash=self.dash), obj, ) # ------------------------------------------------------------------------- class Circled(Group, Circle): ''' Draws a circle around an object, @cvar pad: padding around object @cvar r: overide the radius of the circle ''' fg = Color(0) bg = Color(1) pad = 0.1 def __init__(self, obj, **options): Circle.__init__(self, **options) Group.__init__(self, **options) bbox = obj.bbox() w = bbox.width+2*self.pad h = bbox.height+2*self.pad self.r = options.get('r', max(w, h)/2.) self.append( Circle(r=self.r, bg=self.bg, fg=self.fg, c=obj.c, linewidth=self.linewidth, dash=self.dash), obj, ) # ------------------------------------------------------------------------- class Gate(Group): """ Gate class """ control = None target = None dot_r = .1 # target object get set in __init__ targetobj = None controlobj = None def __init__(self, tobj, **options): Group.__init__(self, **options) # XXX should we take a copy??? self.targetobj = tobj.copy() if self.controlobj is None: self.controlobj = Dot(r=self.dot_r) # fix up target and control points if type(self.target) in (type(()), type([])): pass elif isinstance(self.target, P): self.target = [self.target] elif self.target is None: self.target = [P(0, 0)] else: raise ValueError, "don't understand target structure for Gate" if type(self.control) in (type(()), type([])): pass elif isinstance(self.control, P): self.control = [self.control] elif self.control is None: self.control = [] else: raise ValueError, "don't understand control structure for Gate" self._make() def settarget(self, *p): """ Sets the target qubit """ self.target = p self._make() def setcontrol(self, *p): """ Sets the control qubit """ self.control = p self._make() def _make(self): """ Makes the gate """ self.clear() # calc average target point tp = self.target[0] if len(self.target)>1: for tt in self.target[1:]: tp = tp+tt tp = tp/float(len(self.target)) self.targetobj.c = tp #XXX should target adjust height here # add controls for cc in self.control: self.append(Path(tp, cc)) self.controlobj.c = cc self.append(self.controlobj.copy()) self.append(self.targetobj) # ------------------------------------------------------------------------- class GateBoxedTeX(Gate): """ Gate with TeX object enclosed in a Box """ def __init__(self, tex, **options): Gate.__init__(self, Boxed(TeX(tex)) , **options) GBT = GateBoxedTeX # ------------------------------------------------------------------------- class GateCircledTeX(Gate): """ Gate with TeX object enclosed in a Circle """ def __init__(self, tex, **options): Gate.__init__(self, Circled(TeX(tex)) , **options) GCT = GateCircledTeX # ------------------------------------------------------------------------- def H(**options): """ Hadamard gate """ return GBT('$H$', **options) def X(**options): """ X gate """ return GBT('$X$', **options) def Y(**options): """ Y gate """ return GBT('$Y$', **options) def Z(**options): """ Z gate """ return GBT('$Z$', **options) def S(**options): """ @todo: ask Alexei what this gate is """ return GBT('$S$', **options) def T(**options): """ @todo: ask Alexei what this gate is """ return GBT('$T$', **options) def RX(arg, **options): """ @todo: ask Alexei what this gate is """ return GCT('$R_x(%s)$'%arg, **options) def RY(arg, **options): """ @todo: ask Alexei what this gate is """ return GCT('$R_y(%s)$'%arg, **options) def RZ(arg, **options): """ @todo: ask Alexei what this gate is """ return GCT('$R_z(%s)$'%arg, **options) # ------------------------------------------------------------------------- def NOT(**options): """ NOT gate """ r = .2 return Gate( Group(Circle(r=r), Path(P(0, r), P(0, -r)), Path(P(-r, 0), P(r, 0))), **options) # ------------------------------------------------------------------------- def CSIGN(**options): """ Controlled sign gate """ return Gate(Dot(r=Gate.dot_r), **options) ZZ = CSIGN # ------------------------------------------------------------------------- def SWAP(**options): """ Swap gate """ x = Group(Path(P(-.1, .1), P(.1, -.1)), Path(P(-.1, -.1), P(.1, .1))) options['controlobj'] = options.get('controlobj', x) return Gate(x, **options) #return Gate(x, **options) # ------------------------------------------------------------------------- # XXX make this a class! class ClassicalPath: """ A classical path """ pass def classicalpath(*paths): ''' @return: classical path @param paths: 1 or more Path() objects ''' g = Group() for path in paths: g.append(path.copy(linewidth=2, fg=Color(0))) # reuse these paths for path in paths: g.append(path(linewidth=1, fg=Color(1))) return g # ------------------------------------------------------------------------- class NoWire(Group): """ Class representing no wire in diagram """ def __init__(self, **options): Group.__init__(self, **options) def set(self, y, e, w): """ Set the east, west and y postions of the NoWire """ return self class QWire(NoWire): """ Class representing a quantum wire """ fg = Color(0) linewidth = None dash = None def set(self, y, e, w): """ Set the east, west and y postions of the QWire """ path = Path(P(w, y), P(e, y), fg=self.fg, linewidth=self.linewidth, dash=self.dash) self.append(path) return self class CWire(QWire): """ Class representing a classical wire """ def set(self, y, e, w): """ Set the east, west and y postions of the CWire """ path = Path(P(w, y), P(e, y), fg=self.fg, linewidth=self.linewidth, dash=self.dash) self.append(classicalpath(path)) return self class Assemble(Group): """ Class representing the assembled objects in diagram/circuit """ wirespacing = 1 gatespacing = .1 wires = [] hang = .2 starthang = hang endhang = hang def __init__(self, *gates, **options): self.starthang = options.get('hang', self.hang) self.endhang = options.get('hang', self.hang) Group.__init__(self, **options) sequence = list(gates) # parse the list ... wires = [] named = {} basetime = 0 while len(sequence) > 0: # the gate ... gate = sequence.pop(0) # the target ... t = sequence.pop(0) wires.append(t) # optional controls ... if len(sequence) > 0 and \ isinstance(sequence[0], (IntType, FloatType)): c = sequence.pop(0) wires.append(c) elif len(sequence) > 0 and \ isinstance(sequence[0], (TupleType, ListType)): c = sequence.pop(0) wires.extend(c) else: c = None g = self.setgate(gate, t, c) # optional time label ... if len(sequence)>0 and isinstance(sequence[0], StringType): l = sequence.pop(0) if named.has_key(l): # group already exists named[l].append(g) else: # create new named group G = named[l] = Group(g) self.append(G) else: self.append(g) L = 0 for ii in self: L += ii.width+self.gatespacing L -= self.gatespacing # XXX add distribute's options Distribute(self, p1=P(0, 0), p2=P(L, 0)) self.recalc_size() # XXX should check wires are ints # add wires ... x0 = self.w.x-self.starthang x1 = self.e.x+self.endhang if len(self.wires) == 0: for w in range(-min(wires), -max(wires)-1, -1): wire = QWire().set(w*self.wirespacing, x0, x1) self.insert(0, wire) self.wires.append(wire) print self.wires else: #w=-int(min(wires)) w = -1 wirestmp = [] for wire in self.wires: # if it already an instance this will have no effect # otherwise create an instance wire = apply(wire, ()) wire.set(w*self.wirespacing, x0, x1) self.insert(0, wire) wirestmp.append(wire) w -= 1 self.wires = wirestmp def setgate(self, gate, target, control=None): """ Set the gate in the assembly """ # if it already an instance this will have no effect # otherwise create an instance gate = apply(gate) # XXX multi target qubits gate.settarget(P(0, -target)) if isinstance(control, (IntType, FloatType)): gate.setcontrol(P(0, -control)) elif isinstance(control, (TupleType, ListType)): tmp = [] for cc in control: tmp.append(P(0, -cc)) apply(gate.setcontrol, tmp) return gate # ------------------------------------------------------------------------- # misc other items # ------------------------------------------------------------------------- class Meter(Group): """ A meter object as in Mike'n'Ike """ height = .7 width = 1.8*height angle = 45 bg = Color(1) mcolor = Color(.8) def __init__(self, **args): Group.__init__(self, **args) h = self.height w = self.width self.append(Rectangle(width=1.8*h, height=h, bg=self.bg)) p = Path( P(.1, .1), C(0, 0), P(w-.1, .1), P(w-.2, .1), C(0, 0), P(.2, .1), closed=1, bg=self.mcolor, fg=None) self.append(p, Path(P(w/2., .1), U(self.angle, h*.9)), ) # ------------------------------------------------------------------------- class Detector(Group): ''' A D shaped detector, can be given an object to surround ''' height = .8 width = height/2. bg = Color(1) fg = Color(0) pad = .1 def __init__(self, object=None, **options): if object is not None: # use the object's boundingbox when width and height not supplied bb = object.bbox() w = bb.width+2*self.pad h = bb.height+2*self.pad self.width = options.get("width", max(w, self.width)) self.height = options.get("height", max(h, self.height)) Group.__init__(self, **options) if self.width>self.height: p = Path( P(0, 0), P(0, self.height), P(self.width-self.height/2., self.height), C(90, 0), P(self.width, self.height/2.), C(180, 90), P(self.width-self.height/2., 0), closed=1) else: p = Path( P(0, 0), P(0, self.height), C(90, 0), P(self.width, self.height/2.), C(180, 90), closed=1) p(bg=options.get("bg", self.bg), fg=options.get("fg", self.fg)) self.append(p) if object is not None: # object looks better if it's slightly off centre # since one side is curved. pad/3 is about right object.c = P(self.width/2.-self.pad/3., self.height/2.) self.append(object) # vim: expandtab shiftwidth=4: pyscript-0.6.1/pyscript/lib/quantumcircuits.py0000644000175000001440000002526310401270147021335 0ustar cochraneusers# Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # $Id: quantumcircuits.py,v 1.12 2006/03/01 09:59:03 paultcochrane Exp $ ''' Quantum circuits objects library ''' __revision__ = '$Revision: 1.12 $' from pyscript import Color, Group, Area, Rectangle, P, Circle, \ Dot, Path, C, TeX class Boxed(Group, Area): ''' Draws a box around an object, the box can be placed according to standard Area tags ''' def __init__(self, obj, **options): bbox = obj.bbox() pad = .1 w = bbox.width + 2*pad h = bbox.height + 2*pad self.width = w self.height = h self.bg = options.get('bg', Color(1)) if options.has_key('bg'): del options['bg'] apply(Group.__init__, (self,), options) apply(Area.__init__, (self,), options) obj.c = P(w/2., h/2.) self.append( Rectangle(width=w, height=h, bg=self.bg), obj, ) class Circled(Group, Area): """ Draws a circle around an object """ def __init__(self, obj, **options): bbox = obj.bbox() pad = .1 r = max( bbox.width+2*pad, bbox.height+2*pad )/2.0 self.width = 2.0*r self.height = 2.0*r self.bg = options.get('bg', Color(1)) if options.has_key('bg'): del options['bg'] apply(Group.__init__, (self,), options) apply(Area.__init__, (self,), options) obj.c = P(r, r) self.append( Circle(r=r, bg=self.bg, c=P(r, r)), obj, ) def cbox(obj, x, yt, yc): ''' @param obj: the object to put a box around @type obj: object @param x: x position of line and centre of box @type x: float @param yt: y position of target @type yt: float @param yc: y position of control @type yc: float @return: a controlled box ''' g = Group( Path(P(x, yt), P(x, yc)), Boxed(obj, c=P(x, yt), bg=Color(1)), Dot(P(x, yc)), ) return g def detector(**options): ''' @return: a D shaped detector ''' r = 0.3 c = 0.65*r path = [ P(0, -r), P(0, r), C(P(c, r), P(r, c)), P(r, 0), C(P(r, -c), P(c, -r)), P(0, -r) ] options['bg'] = options.get('bg', Color(.8)) options['closed'] = 1 p = apply(Path, path, options) a = Area(width=r, height=2*r, e=P(0, 0)) return Group(a, p) def classicalpath(*paths): ''' @param paths: 1 or more Path() objects @return: classical path ''' g = Group() for path in paths: g.append(path.copy(linewidth=2, fg=Color(0))) # reuse these paths for path in paths: g.append(path(linewidth=1, fg=Color(1))) return g # Rail def Rail(w=P(0, 0), length=1.0, labelIn=None, labelOut=None, buff=0.05): """ A Rail of a quantum circuit diagram @param length: length of the rail @type length: float @param labelIn: input label @type labelIn: string @param labelOut: output label @type labelOut: string @param buff: buffer of space between the end of the rail and the label @type buff: float """ if labelIn is not None and labelOut is not None: return Group( Path(w+P(0, 0), w+P(length, 0)), TeX(labelIn, e=w-P(buff, 0)), TeX(labelOut, w=w+P(buff+length, 0)) ) elif labelIn is not None and labelOut is None: return Group( Path(w+P(0, 0), w+P(length, 0)), TeX(labelIn, e=w-P(buff, 0)) ) elif labelIn is None and labelOut is not None: return Group( Path(w+P(0, 0), w+P(length, 0)), TeX(labelOut, w=w+P(buff+length, 0)) ) else: return Group( Path(w+P(0, 0), w+P(length, 0)) ) # CNOT (controlled not) def Cnot(c=P(0, 0), targetDist=1.0, direction="up"): """ Controlled NOT gate @param targetDist: distance to the target rail @type targetDist: float @param direction: in which direction is the target rail? up/down @type direction: string """ if direction is "up": return Group( Circle(r=0.06, bg=Color("black"), c=c), Circle(r=0.2, c=c+P(0, targetDist)), Path(c, c+P(0, targetDist+0.2)) ) elif direction is "down": return Group( Circle(r=0.06, bg=Color("black"), c=c), Circle(r=0.2, c=c+P(0, -targetDist)), Path(c, c+P(0, -targetDist-0.2)) ) # Hadamard gate def HGate(c=P(0, 0), side=0.5): """ Hadamard get @param side: length of the box side @type side: float """ return Group( Rectangle(width=side, height=side, c=c, bg=Color("white")), TeX(r'H', c=c) ) # Phase gate def PGate(c=P(0, 0), side=0.5): """ Phase gate @param side: length of the box side @type side: float """ return Group( Rectangle(width=side, height=side, c=c, bg=Color("white")), TeX(r'P', c=c) ) # Controlled phase gate def CPGate(c=P(0, 0), controlDist=1.0, direction="up", side=0.5): """ Controlled phase gate @param controlDist: distance to the control @type controlDist: float @param direction: in which direction is the control? up/down @type direction: string @param side: length of the box side @type side: float """ if direction is "up": return Group( Circle(c=c+P(0, controlDist), r=0.065, bg=Color("black")), Path(c+P(0, side/2.), c+P(0, controlDist)), Rectangle(width=side, height=side, c=c, bg=Color("white")), TeX(r'P', c=c) ) elif direction is "down": return Group( Circle(c=c-P(0,controlDist), r=0.65, bg=Color("black")), Path(c-P(0, side/2.), c-P(0, controlDist)), Rectangle(width=side, height=side, c=c, bg=Color("white")), TeX(r'P', c=c) ) def Detector(e=P(0, 0), height=1.0, label=None): """ Detector @param height: height of detector @type height: float @param label: detector label @type label: string """ if label is not None: return Group(Path(e-P(0, height/2.0), e+P(0, height/2.0)), Circle(c=e, r=height/2.0, start=0, end=180), label) else: return Group(Path(e-P(0, height/2.0), e+P(0, height/2.0)), Circle(c=e, r=height/2.0, start=0, end=180)) # X gate def XGate(c=P(0, 0), side=0.5): """ X gate @param side: length of the box side @type side: float """ return Group( Rectangle(width=side, height=side, c=c, bg=Color("white")), TeX(r'X', c=c) ) # Y gate def YGate(c=P(0, 0), side=0.5): """ Y gate @param side: length of the box side @type side: float """ return Group( Rectangle(width=side, height=side, c=c, bg=Color("white")), TeX(r'Y', c=c) ) # Z gate def ZGate(c=P(0, 0), side=0.5): """ Z gate @param side: length of the box side @type side: float """ return Group( Rectangle(width=side, height=side, c=c, bg=Color("white")), TeX(r'Z', c=c) ) # Controlled X gate def CXGate(c=P(0, 0), controlDist=1.0, direction="up", side=0.5): """ Controlled X gate @param controlDist: distance to the control @type controlDist: float @param direction: in which direction is the control? up/down @type direction: string @param side: length of the box side @type side: float """ if direction is "up": return Group( Circle(c=c+P(0, controlDist), r=0.065, bg=Color("black")), Path(c+P(0, side/2.), c+P(0, controlDist)), Rectangle(width=side, height=side, c=c, bg=Color("white")), TeX(r'X', c=c) ) elif direction is "down": return Group( Circle(c=c-P(0, controlDist), r=0.65, bg=Color("black")), Path(c-P(0, side/2.), c-P(0, controlDist)), Rectangle(width=side, height=side, c=c, bg=Color("white")), TeX(r'X', c=c) ) # Controlled Y gate def CYGate(c=P(0, 0), controlDist=1.0, direction="up", side=0.5): """ Controlled Y gate @param controlDist: distance to the control @type controlDist: float @param direction: in which direction is the control? up/down @type direction: string @param side: length of the box side @type side: float """ if direction is "up": return Group( Circle(c=c+P(0, controlDist), r=0.065, bg=Color("black")), Path(c+P(0, side/2.), c+P(0, controlDist)), Rectangle(width=side, height=side, c=c, bg=Color("white")), TeX(r'Y', c=c) ) elif direction is "down": return Group( Circle(c=c-P(0, controlDist), r=0.65, bg=Color("black")), Path(c-P(0, side/2.), c-P(0, controlDist)), Rectangle(width=side, height=side, c=c, bg=Color("white")), TeX(r'Y', c=c) ) # Controlled Z gate def CZGate(c=P(0, 0), controlDist=1.0, direction="up", side=0.5): """ Controlled Z gate @param controlDist: distance to the control @type controlDist: float @param direction: in which direction is the control? up/down @type direction: string @param side: length of the box side @type side: float """ if direction is "up": return Group( Circle(c=c+P(0, controlDist), r=0.065, bg=Color("black")), Path(c+P(0, side/2.), c+P(0, controlDist)), Rectangle(width=side, height=side, c=c, bg=Color("white")), TeX(r'Z', c=c) ) elif direction is "down": return Group( Circle(c=c-P(0, controlDist), r=0.65, bg=Color("black")), Path(c-P(0, side/2.), c-P(0,controlDist)), Rectangle(width=side, height=side, c=c, bg=Color("white")), TeX(r'Z', c=c) ) # vim: expandtab shiftwidth=4: pyscript-0.6.1/pyscript/__init__.py0000644000175000001440000000307410401635145017065 0ustar cochraneusers# Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # $Id: __init__.py,v 1.19 2006/03/01 09:59:03 paultcochrane Exp $ """ PyScript - Postscript graphics from python """ from pyscript.defaults import defaults from pyscript.groups \ import Group, Align, VAlign, HAlign, Distribute, \ PSMacros, collecttex, TeXstuff, Eps, Page, Pages from pyscript.objects \ import AffineObj, Area, TeX, Text, Rectangle, Circle, \ Dot, Paper, Epsf from pyscript.render import render from pyscript.path import C, Path, Arrow, DoubleArrow from pyscript.arrowheads import ArrowHead, ArrowHead1, ArrowHead2, \ ArrowHead3, ArrowHead4 from pyscript.base \ import PsObj, Dash, UNITS, Color, PyScriptError, FontError, Dash from pyscript.vectors import P, Matrix, R, U, Cusp, Identity, Bbox __revision__ = '$Revision: 1.19 $' # vim: expandtab shiftwidth=4: pyscript-0.6.1/pyscript/afm.py0000644000175000001440000003645310423157244016103 0ustar cochraneusers# Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # $Id: afm.py,v 1.14 2006/04/24 14:20:20 paultcochrane Exp $ """ Module for reading and writing AFM files. """ __revision__ = '$Revision: 1.14 $' # It does not implement the full spec (Adobe Technote 5004, Adobe Font Metrics # File Format Specification). Still, it should read most "common" AFM files. # Taken and adapted from afmLib.py in fonttools by Just van Rossum import re, os, types, cPickle, sys from pyscript.base import FontError import pyscript FONTDIR = os.path.join(pyscript.__path__[0], "fonts") # every single line starts with a "word" identifierRE = re.compile("^([A-Za-z]+).*") # regular expression to parse char lines charRE = re.compile( "(-?\d+)" # charnum "\s*;\s*WX\s+" # ; WX "(\d+)" # width "\s*;\s*N\s+" # ; N "([.A-Za-z0-9_]+)" # charname "\s*;\s*B\s+" # ; B "(-?\d+)" # left "\s+" # "(-?\d+)" # bottom "\s+" # "(-?\d+)" # right "\s+" # "(-?\d+)" # top "\s*;\s*" # ; ) # regular expression to parse kerning lines kernRE = re.compile( "([.A-Za-z0-9_]+)" # leftchar "\s+" # "([.A-Za-z0-9_]+)" # rightchar "\s+" # "(-?\d+)" # value "\s*" # ) # regular expressions to parse composite info lines of the form: # Aacute 2 ; PCC A 0 0 ; PCC acute 182 211 ; compositeRE = re.compile( "([.A-Za-z0-9_]+)" # char name "\s+" # "(\d+)" # number of parts "\s*;\s*" # ) componentRE = re.compile( "PCC\s+" # PPC "([.A-Za-z0-9_]+)" # base char name "\s+" # "(-?\d+)" # x offset "\s+" # "(-?\d+)" # y offset "\s*;\s*" # ) class AFMError(Exception): """ Class for handling errors """ pass class ConvertAFM: """ Convert Adobe Font Metrics """ _keywords = ['StartFontMetrics', 'EndFontMetrics', 'StartCharMetrics', 'EndCharMetrics', 'StartKernData', 'StartKernPairs', 'EndKernPairs', 'EndKernData', 'StartComposites', 'EndComposites', ] def __init__(self, filename): """ Initialisation of object @param filename: the name of the font file name @type filename: string """ self._attrs = {} self._chars = {} self._kerning = {} self._comments = [] self._composites = {} self.parse(filename) def parse(self, path): """ Parse the afm file @param path: path to the afm file @type path: string """ f = open(path, 'rb') data = f.read() f.close() # read any text file, regardless whether it's # formatted for Mac, Unix or Dos sep = "" if '\r' in data: sep = sep + '\r' # mac or dos if '\n' in data: sep = sep + '\n' # unix or dos #lines = string.split(data, sep) lines = data.split(sep) for line in lines: if not line.strip(): continue m = identifierRE.match(line) if m is None: raise AFMError, "syntax error in AFM file: " + `line` pos = m.regs[1][1] word = line[:pos] rest = line[pos:].strip() if word in self._keywords: continue if word == "C": self.parsechar(rest) elif word == "KPX": self.parsekernpair(rest) elif word == "CC": self.parsecomposite(rest) else: self.parseattr(word, rest) def write(self, filename): """ Write the font file @param filename: the name of the font file to write @type filename: string """ out = open(filename, "w") # the new ugly way, that produces nice files # docstring out.write('"""\n') out.write("PyScript font module for %s\n" % self._attrs['FullName']) out.write('"""\n') # this is the revision attribute useful for python # with extra code due to cvs keyword expansion issues out.write("__revision__ = '$") out.write("Revision$'\n") # write out the attributes out.write("attrs = {\n") for key in self._attrs.keys(): value = self._attrs[key] if str(value.__class__) == "": out.write("'%s' : '%s',\n" % \ (key, value)) else: out.write("'%s' : %s,\n" % \ (key, value)) out.write("}\n") # write out the characters out.write("chars = {\n") for key in self._chars.keys(): value = self._chars[key] out.write("%s : %s,\n" % \ (key, value)) out.write("}\n"); # write out the kerning out.write("kerning = {\n") for key in self._kerning.keys(): value = self._kerning[key] out.write("%s : %s,\n" % \ (key, value)) out.write("}\n") # write out the comments out.write("comments = [\n") for elem in self._comments: out.write("'%s',\n" % elem) out.write("]\n") # write out the composites out.write("composites = {\n") for key in self._composites.keys(): value = self._composites[key] out.write("%s : %s,\n" % \ (key, value)) out.write("}\n") # the old, simple way, that produces ugly files # out.write("attrs = %s"%repr(self._attrs)) # out.write("\n") # out.write("chars = %s"%repr(self._chars)) # out.write("\n") # out.write("kerning = %s"%repr(self._kerning)) # out.write("\n") # out.write("comments = %s"%repr(self._comments)) # out.write("\n") # out.write("composites = %s"%repr(self._composites)) # out.write("\n") out.close() def write2(self, filename): """ Another version of writing the font file, uses the CPickle module @param filename: the name of the font file to write @type filename: string """ afm = AFM() afm._attrs = self._attrs afm._chars = self._chars afm._kerning = self._kerning afm._comments = self._comments afm._composites = self._composites fp = open(filename, "w") cPickle.dump(afm, fp) fp.close() def parsechar(self, rest): """ Parse a character @param rest: the character to parse @type rest: string """ m = charRE.match(rest) if m is None: raise AFMError, "syntax error in AFM file: " + `rest` things = [] for fr, to in m.regs[1:]: things.append(rest[fr:to]) #charname = things[2] del things[2] #charnum, width, l, b, r, t = map(string.atoi, things) charnum, width, l, b, r, t = map(int, things) # width l b r t self._chars[charnum] = width, l, b, r, t def parsekernpair(self, rest): """ Parse a kerning pair @param rest: the kerning pair to parse @type rest: string """ m = kernRE.match(rest) if m is None: raise AFMError, "syntax error in AFM file: " + `rest` things = [] for fr, to in m.regs[1:]: things.append(rest[fr:to]) leftchar, rightchar, value = things value = int(value) #self._kerning[(leftchar, rightchar)] = value # fix for all kernings if len(leftchar) == len(rightchar) == 1: self._kerning[(ord(leftchar), ord(rightchar))]=value def parseattr(self, word, rest): """ Parse an attribute @param word: the kind of attribute to be parsed (?) @type word: string @param rest: the attribute to parse @type rest: string """ if word == "FontBBox": #l, b, r, t = map(string.atoi, string.split(rest)) l, b, r, t = map(int, rest.split()) self._attrs[word] = l, b, r, t elif word == "Comment": self._comments.append(rest) else: try: value = int(rest) except (ValueError, OverflowError): self._attrs[word] = rest else: self._attrs[word] = value def parsecomposite(self, rest): """ Parse a composite string/expression/thing @param rest: the string to parse @type rest: string """ m = compositeRE.match(rest) if m is None: raise AFMError, "syntax error in AFM file: " + `rest` charname = m.group(1) ncomponents = int(m.group(2)) rest = rest[m.regs[0][1]:] components = [] while 1: m = componentRE.match(rest) if m is None: raise AFMError, "syntax error in AFM file: " + `rest` basechar = m.group(1) xoffset = int(m.group(2)) yoffset = int(m.group(3)) components.append((basechar, xoffset, yoffset)) rest = rest[m.regs[0][1]:] if not rest: break assert len(components) == ncomponents self._composites[charname] = components # ------------------------------------------------------------------- class AFM: """ Class for handling Adobe Font Metric objects """ def __init__(self, fontname): """ Initialisation of the AFM object @param fontname: the name of the font @type fontname: string """ # this should be a better name, but will stop the possible error # from occurring self.FullName = fontname fontname = fontname.lower() fontname = fontname.replace("-", "_") # the import statement seem a little bit of a hack # but this will work for now. try: f = __import__('pyscript.fonts.%s'%fontname, None, None, [fontname]) except ImportError, x: # rename the exception raise FontError, x self.f = f def has_kernpair(self, pair): """ Determines if the kerning pair exists in the font @param pair: the kering pair to look for @type pair: ? """ return self.f.kerning.has_key(pair) def kernpairs(self): """ Returns the kerning pairs in the font """ return self.f.kerning.keys() def has_char(self, char): """ Determins if the character exists in the font @param char: the character to look for @type char: ? """ return self.f.chars.has_key(char) def chars(self): """ Returns the characters in the font """ return self.f.chars.keys() def comments(self): """ Returns the comments in the font """ return self.f.comments def __getattr__(self, attr): """ Gets an attribute of the font @param attr: the attribute to get @type attr: ? """ if self.f.attrs.has_key(attr): return self.f.attrs[attr] else: raise AttributeError, attr def __getitem__(self, key): """ Gets an item within the font @param key: the item to get @type key: ? """ if type(key) == types.TupleType: # key is a tuple, return the kernpair return self.f.kerning.get(key, 0) else: # return the metrics instead return self.f.chars[key] def __repr__(self): """ Returns the representation of the font object """ if hasattr(self, "FullName"): return '' % self.FullName else: return '' % id(self) def bbox(self, string, size=1, kerning=0): ''' Return a strings boundingbox in this font at the scale provided (relative to 1 point?) @param string: the string to measure @type string: string @param size: the point size of the font (sort of) @type size: int @param kerning: whether to subtract off the kerning @type kerning: boolean @return: xl, yb, xr, yt ''' chars = map(ord, list(string)) # order: width l b r t # use 'reduce' and 'map' as they're written in C # add up all the widths width = reduce(lambda x, y : x+self[y][0], chars, 0) # subtract the kerning if kerning == 1: if len(chars)>1: kk = map(lambda x, y:self[(x, y)], chars[:-1], chars[1:]) kern = reduce(lambda x, y:x+y, kk) width += kern kk = map(lambda x, y:self[(x, y)], chars[:-1], chars[1:]) print kk # get rid of the end bits start = self[chars[0]][1] f = self[chars[-1]] width = width-start-(f[0]-f[3]) # accumulate maximum height top = reduce(lambda x, y: max(x, self[y][4]), chars, 0) # accumulate lowest point bottom = reduce(lambda x, y: min(x, self[y][2]), chars, self[chars[0]][2]) sc = size/1000. xl = start*sc yb = bottom*sc xr = xl + width*sc yt = top*sc return xl, yb, xr, yt def load(fontname): """ Loads the font of the given font name @param fontname: the name of the font to load @type fontname: string """ fontpath = os.path.join(FONTDIR, fontname) fp = open(fontpath+".font") font = cPickle.load(fp) fp.close() return font if __name__ == "__main__": # utility for converting afm files to pyscripts # font modules for afmFname in sys.argv[1:]: afmObj = ConvertAFM(afmFname) dirname, fname = os.path.split(afmFname) base, ext = os.path.splitext(fname) base = base.lower() base = base.replace("-", "_") outfile = os.path.join(dirname, base+".py") afmObj.write(outfile) # vim: expandtab shiftwidth=4: pyscript-0.6.1/pyscript/arrowheads.py0000644000175000001440000001415110432065557017473 0ustar cochraneusers# Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # $Id: arrowheads.py,v 1.6 2006/05/15 11:52:15 paultcochrane Exp $ """ Arrow heads for Path and elsewhere """ __revision__ = '$Revision: 1.6 $' from pyscript.defaults import defaults #from math import sqrt, pi, sin, cos from pyscript.vectors import P, Bbox # ,Identity from pyscript.base import Color from pyscript.objects import AffineObj import cStringIO # ------------------------------------------------------------------------- # Base class: ArrowHead # ------------------------------------------------------------------------- class ArrowHead(AffineObj): ''' Arrow head object @cvar tip: where to position the tip of the arrow head @cvar angle: the direction to point Convenience variables modifying the head size: @cvar scalew: scale the width by this amount @cvar scaleh: scale height by this amount The actual shape of the arrowhead is defined by the following, distances are given in points @cvar start: tuple giving starting point for path @cvar shape: list of tuples giving arguments to postscripts curveto operator @cvar closed: whether to close the path or not @cvar fg: line color or None for no line @cvar bg: fill color or None for no fill @cvar linewidth: linewidth @cvar linejoin: 0=miter, 1=round, 2=bevel @cvar mitrelimit: length of mitre of corners ''' fg = Color(0) bg = Color(0) # used by Path object to set position and direction reverse = 0 pos = 1 tip = P(0, 0) angle = 0 start = (0, 0) # triangular share in the Golden ratio # positions in pixels shape = [(0, 0, 1.5, -4.854, 1.5, -4.854), (1.5, -4.854, -1.5, -4.854, -1.5, -4.854), (-1.5, -4.854, 0, 0, 0, 0)] closed = 1 scalew = 1 scaleh = 1 linewidth = 0.2 linejoin = 2 #0=miter, 1=round, 2=bevel # miterlimit: # 1.414 cuts off miters at angles less than 90 degrees. # 2.0 cuts off miters at angles less than 60 degrees. # 10.0 cuts off miters at angles less than 11 degrees. # 1.0 cuts off miters at all angles, so that bevels are always produced miterlimit = 2 def __init__(self, *param, **options): # remember this angle for when instance is copied... # this assumes all rotations that have been applied # are represented by angle and reverse angle0 = self.angle + self.reverse*180 AffineObj.__init__(self, **options) if len(param) == 1: self.pos = param[0] sx = self.scalew sy = self.scaleh self.start = (self.start[0]*sx, self.start[1]*sy) shape = [] for b in self.shape: shape.append((b[0]*sx, b[1]*sy, b[2]*sx, b[3]*sy, b[4]*sx, b[5]*sy)) self.shape = shape self.rotate(self.angle+self.reverse*180-angle0) self.move(self.tip) def body(self): """ Return the postscript body of the Path """ out = cStringIO.StringIO() if self.linewidth is not None: out.write("%g setlinewidth " % self.linewidth) if self.linejoin is not None: out.write("%d setlinejoin " % self.linejoin) if self.miterlimit is not None: out.write("%f setmiterlimit " % self.miterlimit) out.write('newpath %g %g moveto\n' % self.start) for bez in self.shape: out.write('%g %g %g %g %g %g curveto\n' % bez) if self.closed: out.write('closepath\n') if self.bg is not None: out.write("gsave %s fill grestore\n" % self.bg) if self.fg is not None: out.write("%s stroke\n" % self.fg) return out.getvalue() def bbox(self): """ Return the bounding box of the Path """ # the (0,0) point: p0 = self.itoe(P(0, 0)) xmax = xmin = p0.x ymax = ymin = p0.y for bez in self.shape: c1x, c1y, c2x, c2y, p2x, p2y = bez p1 = self.itoe(P(c1x, c1y)/float(defaults.units)) p2 = self.itoe(P(c2x, c2y)/float(defaults.units)) p3 = self.itoe(P(p2x, p2y)/float(defaults.units)) xmax = max(xmax, p1.x, p2.x, p3.x) xmin = min(xmin, p1.x, p2.x, p3.x) ymax = max(ymax, p1.y, p2.y, p3.y) ymin = min(ymin, p1.y, p2.y, p3.y) return Bbox(sw=P(xmin, ymin), width=xmax-xmin, height=ymax-ymin) # ------------------------------------------------------------------------- # Modifications # ------------------------------------------------------------------------- # for symmetry.... class ArrowHead1(ArrowHead): ''' Default Arrow head: triangular in Golden ratio ''' pass class ArrowHead2(ArrowHead): ''' Similar to default but with concave base ''' shape = [(0, 0, 1.5, -4.854, 1.5, -4.854), (0, -2, 0, -2, -1.5, -4.854), (-1.5, -4.854, 0, 0, 0, 0)] class ArrowHead3(ArrowHead): ''' Like default but rounded base ''' shape = [(0, 0, 1.5, -4.854, 1.5, -4.854), (1.5*1.5, 1.5*(-4.854), 1.5*(-1.5), 1.5*(-4.854), -1.5, -4.854), (-1.5, -4.854, 0, 0, 0, 0)] class ArrowHead4(ArrowHead): ''' traditional line arrow ''' bg = None start = (2, -5) closed = 0 linewidth = .5 shape = [(2, -5, 0, 0, 0, 0), (0, 0, -2, -5, -2, -5)] # vim: expandtab shiftwidth=4: pyscript-0.6.1/pyscript/base.py0000644000175000001440000003135010441273624016242 0ustar cochraneusers# Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # $Id: base.py,v 1.30 2006/06/06 12:39:48 paultcochrane Exp $ """ Base objects """ __revision__ = '$Revision: 1.30 $' import copy import types # ------------------------------------------------------------------------- class PyScriptError(Exception): """ Handles a PyScript error """ pass class FontError(Exception): """ Handles a font error """ pass # ------------------------------------------------------------------------- UNITS = { "inch":72, "points":1, "cm":28.346, "mm":2.8346 } # ------------------------------------------------------------------------- class PsObj(object): """ Base Class that most pyscript objects should subclass """ def __init__(self, **options): ''' can pass a dict of atributes to set ''' object.__init__(self) self(**options) def __call__(self, **options): ''' Set a whole lot of attributes in one go eg:: obj.set(bg=Color(.3),linewidth=2) @return: self @rtype: self ''' # first do non-property ones # this will raise an exception if class doesn't have attribute # I think this is good. prop = [] for key, value in options.items(): if isinstance(eval('self.__class__.%s'%key), property): prop.append((key, value)) else: self.__class__.__setattr__(self, key, value) # now the property ones # (which are functions of the non-property ones) for key, value in prop: self.__class__.__setattr__(self, key, value) # for convenience return a reference to us return self def copy(self, **options): ''' return a copy of this object with listed attributes modified eg:: newobj=obj.copy(bg=Color(.3)) @rtype: self ''' # here for convenience obj = copy.deepcopy(self) obj(**options) return obj def __repr__(self): ''' Return a representation of this object @rtype: string ''' return str(self.__class__) def __str__(self): ''' return actual postscript string to generate object @rtype: string ''' return self.prebody()+self.body()+self.postbody() def prebody(self): ''' convenience function to allow clean subclassing @rtype: string ''' return '' def body(self): ''' subclasses should overide this for generating postscipt code @rtype: string ''' return '' def postbody(self): ''' convenience function to allow clean subclassing @rtype: string ''' return '' def bbox(self): """ return objects bounding box this can be a Null Bbox() if object doesn't draw anything on the page.) NB that the bbox should be dynamically calculated and take into account the transformation matrix if it applies @return: A bounding box object @rtype: Bbox """ return '' # ------------------------------------------------------------------------- class Color(PsObj): """ Class to encode a postscript color There are five ways to specify the color: - Color(C,M,Y,K) =CMYKColor - Color(R,G,B) =RGBColor - Color(G) = Gray - Color('yellow') etc, see L{COLORS} - Color('#FF0000') Hex string, must start with '#' """ COLORS = { "aliceblue":(240, 248, 255), "antiquewhite":(250, 235, 215), "aqua":(0, 255, 255), "aquamarine":(127, 255, 212), "azure":(240, 255, 255), "beige":(245, 245, 220), "bisque":(255, 228, 196), "black":(0, 0, 0), "blanchedalmond":(255, 235, 205), "blue":(0, 0, 255), "blueviolet":(138, 43, 226), "brown":(165, 42, 42), "burlywood":(222, 184, 135), "cadetblue":(95, 158, 160), "chartreuse":(127, 255, 0), "chocolate":(210, 105, 30), "coral":(255, 127, 80), "cornflowerblue":(100, 149, 237), "cornsilk":(255, 248, 220), "crimson":(220, 20, 60), "cyan":(0, 255, 255), "darkblue":(0, 0, 139), "darkcyan":(0, 139, 139), "darkgoldenrod":(184, 134, 11), "darkgray":(169, 169, 169), "darkgrey":(169, 169, 169), "darkgreen":(0, 100, 0), "darkkhaki":(189, 183, 107), "darkmagenta":(139, 0, 139), "darkolivegreen":(85, 107, 47), "darkorange":(255, 140, 0), "darkorchid":(153, 50, 204), "darkred":(139, 0, 0), "darksalmon":(233, 150, 122), "darkseagreen":(143, 188, 143), "darkslateblue":(72, 61, 139), "darkslategray":(47, 79, 79), "darkslategrey":(47, 79, 79), "darkturquoise":(0, 206, 209), "darkviolet":(148, 0, 211), "deeppink":(255, 20, 147), "deepskyblue":(0, 191, 255), "dimgray":(105, 105, 105), "dimgrey":(105, 105, 105), "dodgerblue":(30, 144, 255), "firebrick":(178, 34, 34), "floralwhite":(255, 250, 240), "forestgreen":(34, 139, 34), "fuchsia":(255, 0, 255), "gainsboro":(220, 220, 220), "ghostwhite":(248, 248, 255), "gold":(255, 215, 0), "goldenrod":(218, 165, 32), "gray":(128, 128, 128), "grey":(128, 128, 128), "green":(0, 128, 0), "greenyellow":(173, 255, 47), "honeydew":(240, 255, 240), "hotpink":(255, 105, 180), "indianred":(205, 92, 92), "indigo":(75, 0, 130), "ivory":(255, 255, 240), "khaki":(240, 230, 140), "lavender":(230, 230, 250), "lavenderblush":(255, 240, 245), "lawngreen":(124, 252, 0), "lemonchiffon":(255, 250, 205), "lightblue":(173, 216, 230), "lightcoral":(240, 128, 128), "lightcyan":(224, 255, 255), "lightgoldenrod":(250, 250, 210), "lightgreen":(144, 238, 144), "lightgray":(211, 211, 211), "lightgrey":(211, 211, 211), "lightpink":(255, 182, 193), "lightsalmon":(255, 160, 122), "lightseagreen":(32, 178, 170), "lightskyblue":(135, 206, 250), "lightslategray":(119, 136, 153), "lightslategrey":(119, 136, 153), "lightsteelblue":(176, 196, 222), "lightyellow":(255, 255, 224), "lime":(0, 255, 0), "limegreen":(50, 205, 50), "linen":(250, 240, 230), "magenta":(255, 0, 255), "maroon":(128, 0, 0), "mediumaquamarine":(102, 205, 170), "mediumblue":(0, 0, 205), "mediumorchid":(186, 85, 211), "mediumpurple":(147, 112, 219), "mediumseagreen":(60, 179, 113), "mediumslateblue":(123, 104, 238), "mediumspringgreen":(0, 250, 154), "mediumturquoise":(72, 209, 204), "mediumvioletred":(199, 21, 133), "midnightblue":(25, 25, 112), "mintcream":(245, 255, 250), "mistyrose":(255, 228, 225), "moccasin":(255, 228, 181), "navajowhite":(255, 222, 173), "navy":(0, 0, 128), "oldlace":(253, 245, 230), "olive":(128, 128, 0), "olivedrab":(107, 142, 35), "orange":(255, 165, 0), "orangered":(255, 69, 0), "orchid":(218, 112, 214), "palegoldenrod":(238, 232, 170), "palegreen":(152, 251, 152), "paleturquoise":(175, 238, 238), "palevioletred":(219, 112, 147), "papayawhip":(255, 239, 213), "peachpuff":(255, 218, 185), "peru":(205, 133, 63), "pink":(255, 192, 203), "plum":(221, 160, 221), "powderblue":(176, 224, 230), "purple":(128, 0, 128), "red":(255, 0, 0), "rosybrown":(188, 143, 143), "royalblue":(65, 105, 225), "saddlebrown":(139, 69, 19), "salmon":(250, 128, 114), "sandybrown":(244, 164, 96), "seagreen":(46, 139, 87), "seashell":(255, 245, 238), "sienna":(160, 82, 45), "silver":(192, 192, 192), "skyblue":(135, 206, 235), "slateblue":(106, 90, 205), "slategray":(112, 128, 144), "slategrey":(112, 128, 144), "snow":(255, 250, 250), "springgreen":(0, 255, 127), "steelblue":(70, 130, 180), "tan":(210, 180, 140), "teal":(0, 128, 128), "thistle":(216, 191, 216), "tomato":(255, 99, 71), "turquoise":(64, 224, 208), "violet":(238, 130, 238), "wheat":(245, 222, 179), "white":(255, 255, 255), "whitesmoke":(245, 245, 245), "yellow":(255, 255, 0), "yellowgreen":(154, 205, 50), } def __init__(self, *col, **options): """ Initialisation of the colour object @param col: @type col: @param options: @type options: """ # some sanity checks if type(col[0]) == types.StringType: if col[0][0] == "#" and len(col[0]) == 7: # hex color scheme eg #A0FF00 col = (int(col[0][1:3], 16) / 255.0, int(col[0][3:5], 16) / 255.0, int(col[0][5:7], 16) / 255.0) else: # named color col = col[0].lower() col = self.COLORS[col] # renormalise so that values are in [0,1] col = (col[0]/255., col[1]/255., col[2]/255.) assert len(col) > 0 and len(col) < 5 for ii in col: assert ii >= 0 and ii <= 1 self.color = col PsObj.__init__(self, **options) def body(self): """ Returns the body of the postscript for the Color object """ color = self.color if len(color) == 1: # grayscale color ps = " %g setgray " % color elif len(color) == 3: # rgb color ps = " %g %g %g setrgbcolor " % color elif len(color) == 4: # cmyk color ps = " %g %g %g %g setcmykcolor " % color else: raise ValueError, "Unknown color" return ps def __mul__(self, other): ''' colors can be multiplied by a numeric factor. factors less than 1 will darken the colors, factors grater than will will lighten the colors. (this depends on how the colors where specified) eg:: Color(.2,.6,.6)*.5 = Color(.1,.3,.3) ''' assert other >= 0 #and other<=1 newcol = [] for ii in self.color: newcol.append(min(1, ii*other)) # XXX this breaks things: #return Color(tuple(newcol)) return apply(Color, tuple(newcol)) # ------------------------------------------------------------------------- class Dash(PsObj): """ Class to encode postscript dash pattern Argument is a list of lengths for alternating dash and spaces eg: Dash(3) 3 on, 3 off, ... Dash(2,offset=1) 1 on, 2 off, 2 on, 2 off, ... Dash(2,1) 2 on, 1 off, 2 on, 1 off, ... Dash(3,5,offset=6) 2 off, 3 on, 5 off, 3 on, 5 off, ... Dash(3,1,1,1) 3 on, 1 off, 1 on, 1 off, 3 on, ... @cvar offset: initially fastforward this much into the pattern """ pattern = (2, ) offset = 0 def __init__(self, *args, **options): """ Initialisation of the Dash object """ if len(args) > 0: self.pattern = args PsObj.__init__(self, **options) def body(self): """ Returns the postscript of a Dash object """ # if we don't start with a space horrible things happen pat = "" delim = ' ' pat = "[ "+ delim.join(["%g" % l for l in self.pattern]) pat = pat + "] %g setdash " % self.offset return pat # vim: expandtab shiftwidth=4: pyscript-0.6.1/pyscript/defaults.py0000644000175000001440000000366410401101572017132 0ustar cochraneusers# Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # $Id: defaults.py,v 1.12 2006/02/28 17:08:10 paultcochrane Exp $ """ Default settings for TeX and PyScript """ __revision__ = '$Revision: 1.12 $' from pyscript.base import UNITS # , Color #from pyscript.arrowheads import * class defaults: """ A class to hold default settings """ tex_head = r"""\documentclass{article} \pagestyle{empty} \begin{document} """ tex_tail = r"\end{document}" tex_command = "latex -interaction=batchmode %s" dvips_options = "-Ppdf" units = UNITS['cm'] linewidth = 0.5 linecap = 1 #0=butt, 1=round, 2=square linejoin = 0 #0=miter, 1=round, 2=bevel # miterlimit: # 1.414 cuts off miters at angles less than 90 degrees. # 2.0 cuts off miters at angles less than 60 degrees. # 10.0 cuts off miters at angles less than 11 degrees. # 1.0 cuts off miters at all angles, so that bevels are always produced miterlimit = 10 dash = None # the default arrow head to use in Arrow and DoubleArrow # this causes import recursiveness at the moment... #arrowhead=ArrowHead() # a 'color' of None is transparent #fg=Color(0) #bg=None # vim: expandtab shiftwidth=4: pyscript-0.6.1/pyscript/groups.py0000644000175000001440000007371210401111632016641 0ustar cochraneusers# Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # $Id: groups.py,v 1.35 2006/02/28 18:16:58 paultcochrane Exp $ """ Groupies Here are collected all the classes and functions to do with groups. Since much of the rendering is done by Eps, Page and Pages this module also contains some helper functions such as collecttex and TeXStuff. """ __revision__ = '$Revision: 1.35 $' import cStringIO, time, os, sys from types import TupleType, ListType from pyscript.base import PsObj from pyscript.vectors import P, Bbox, U from pyscript.objects import Area, TeX from pyscript.defaults import defaults from pyscript.version import version # ------------------------------------------------------------------------- class Group(Area): """ Groups together a list of objects """ def __init__(self, *objects, **options): """ Initialisation of Group object @param objects: list of objects to group together @type objects: list @param options: dictionary of options @type options: dict """ self.objects = [] self.objbox = Bbox() if len(objects) == 1 and type(objects[0]) in (TupleType, ListType): apply(self.append, objects[0]) #self.append(objects[0]) else: apply(self.append, objects) #self.append(objects) Area.__init__(self, **options) def __getitem__(self, i): """ Get an item from the list of objects @param i: the index of the item to get @type i: int """ return self.objects[i] # these will break alignment #def __setitem__(self,i,other): # self.objects[i]=other def __getslice__(self, i, j): """ Get a slice of items from the list of objects @param i: the first index of the slice of items to get @type i: int @param j: the last index of the slice of items to get @type j: int """ return self.objects[i:j] #def __setslice__(self,i,j,wert): # self.objects[i:j]=wert def __len__(self): """ Returns the length of the object list """ return len(self.objects) def validate(self, obj): ''' make sure this object can be inserted into group @param obj: object to test for insertability @type obj: object ''' if isinstance(obj, Page) or isinstance(obj, Pages): raise TypeError, "Can't add a Page to %s" % str(self.__class__) def reverse(self): """ Reverse the order of objects in the list of objects in the group """ self.objects.reverse() # for convenience return reference to group return self def insert(self, idx, obj): ''' insert object @param idx: index at which to insert object @type idx: int @param obj: the object to insert @type obj: object ''' self.validate(obj) self.objbox.union(obj.bbox()) self.objects.insert(idx, obj) # for convenience return reference to group return self def append(self, *objs, **options): ''' append object(s) to group @param objs: list of objects to append @type objs: list @param options: dictionary of options @type options: dict ''' for obj in objs: self.validate(obj) self.objbox.union(obj.bbox()) self.objects.append(obj) # update size if self.objbox.is_set(): self.isw = self.objbox.sw self.width = self.objbox.width self.height = self.objbox.height # for convenience return reference to group return self def apply(self, **options): ''' apply attributes to all objects @param options: dictionary of attributes @type options: dict @return: reference to self @rtype: self ''' # do this by attributes since they # might not all get accepted for key, value in options.items(): dict1 = {key:value} for obj in self.objects: if isinstance(obj, Group): # recurse apply(obj.apply, (), options) try: apply(obj, (), dict1) except AttributeError: # skip objects that don't have the attribute pass # we don't know if the sizes where changes so recalculate them self.recalc_size() # for convenience return reference to group return self def recalc_size(self): ''' recalculate internal container size based on objects within ''' self.objbox = Bbox() for obj in self.objects: self.objbox.union(obj.bbox()) if self.objbox.is_set(): self.isw = self.objbox.sw self.width = self.objbox.width self.height = self.objbox.height def clear(self): ''' Clear all the elements and reset group to an empty group ''' self.isw = Area.isw self.width = Area.width self.height = Area.height self.objbox = Bbox() self.objects = [] def body(self): """ Returns the body postscript of the object """ out = cStringIO.StringIO() for obj in self.objects: if obj.bbox().sw is not None: out.write(str(obj)) return out.getvalue() def bbox(self): """ Gather together common bounding box for group Don't use Area's bbox as transformations may mean a tighter bbox (eg a circle) @return: a Bbox() @rtype: Bbox """ # We need to do the calculation in the # external co-ordinates (that's where the # bounding box will be used) # first a null Bbox bbox = Bbox() for obj in self.objects: bbox.union(obj.bbox(), self.itoe) return bbox # ------------------------------------------------------------------------- class Align(Group): ''' Function to align a group of objects. - a1: The first anchor point to align to eg "e", "c" - a2: The second anchor point for aligning - space: the amount of space to enforce between the anchor points, if None, then only move perpendicular to angle - angle: the angle of the line between anchor points ''' a1 = 'c' a2 = 'c' space = None angle = 0 def __init__(self, *objects, **options): """ Initialisation of the Align object @param objects: list of objects to align @type objects: list @param options: dictionary of attributes @type options: dict """ Group.__init__(self, **options) self.aligned = [] self.append(*objects) def append(self, *objects, **options): """ Append objects to list of objects for aligning @param objects: list of objects to append @type objects: list @param options: dictionary of attributes to temporarily override @type options: dict """ # this allows temporary overiding of parameters: a1 = options.get('a1', self.a1) a2 = options.get('a2', self.a2) space = options.get('space', self.space) angle = options.get('angle', self.angle) assert a1 in ["n", "ne", "e", "se", "s", "sw", "w", "nw", "c"] assert a2 in ["n", "ne", "e", "se", "s", "sw", "w", "nw", "c"] for obj in objects: if isinstance(obj, PsObj): if len(self.aligned)==0: # first object sets the position ... Group.append(self, obj) self.aligned.append(obj) else: # align the object p1 = getattr(self.aligned[-1].bbox(), a1) p2 = getattr(obj.bbox(), a2) if space is not None: obj.move(U(angle, space)-(p2-p1)) else: # Don't touch the spacing in the angle direction # adjust in othogonal direction instead obj.move((U(angle+90)*(p2-p1))*U(angle-90)) Group.append(self, obj) self.aligned.append(obj) else: # append but don't align Group.append(self, obj) # for convenience return self # ---------------------------------------------------------------------- # some convenience functions class VAlign(Align): """ Vertical align class """ a1 = 's' a2 = 'n' space = 1 angle = 180 class HAlign(Align): """ Horizontal align class """ a1 = 'e' a2 = 'w' space = 1 angle = 90 # ------------------------------------------------------------------------- def Distribute(*items, **options): ''' Function to distribute a group of objects. @param items: list of items to distribute @type items: list @param options: dictionary of attributes @type options: dict - p1: first point of the line along which to distribute - p2: second point of the line along which to distribute - a1: The first anchor point to use for spacing to eg "e", "c" - a2: The second anchor point for spacing - as: anchor point for first item (overides a2 if present) - ae: anchor point for last item (overides a1 if present) @return: a reference to a group containing the objects @rtype: Group ''' a1 = options.get('a1', 'c') a2 = options.get('a2', 'c') assert a1 in ["n", "ne", "e", "se", "s", "sw", "w", "nw", "c"] assert a2 in ["n", "ne", "e", "se", "s", "sw", "w", "nw", "c"] # note the swap: as = options.get('as', a2) ae = options.get('ae', a1) assert as in ["n", "ne", "e", "se", "s", "sw", "w", "nw", "c"] assert ae in ["n", "ne", "e", "se", "s", "sw", "w", "nw", "c"] # these two have to be present p1 = options['p1'] p2 = options['p2'] pv = p2-p1 if len(items) == 1: if isinstance(items[0], Group): items = items[0] # A vector giving the direction to distribute things pv = p2-p1 if len(items) == 1: # place item in the centre ov = ( getattr(items[0].bbox(), a1)+getattr(items[0].bbox(), a2) )/2. -p1 # how much we need to move by mv = (pv.length/2.-pv.U*ov)*pv.U items[0].move(mv) else: # work out the amount of space we have to play with space = pv.length # place items at the edges # ---first object---- ov = getattr(items[0].bbox(), as)-p1 # how much we need to move by mv = -pv.U*ov*pv.U items[0].move(mv) space -= abs(( getattr(items[0].bbox(), a1) - getattr(items[0].bbox(), as) )*pv.U) # ---second object--- ov = getattr(items[-1].bbox(), ae)-p2 # how much we need to move by mv = -pv.U*ov*pv.U items[-1].move(mv) space -= abs(( getattr(items[-1].bbox(), ae) - getattr(items[-1].bbox(), a2) )*pv.U) if len(items)>2: # take out the length of each item in this dir for item in items[1:-1]: # abs? XX space -= abs(( getattr(item.bbox(), a2) - getattr(item.bbox(), a1) )*pv.U) ds = space/float((len(items)-1)) for ii in range(1, len(items)-1): p1 = getattr(items[ii-1].bbox(), a1) p2 = getattr(items[ii].bbox(), a2) mv = (ds-(p2-p1)*pv.U)*pv.U items[ii].move(mv) if isinstance(items, Group): items.recalc_size() # for convenience .. return items else: # create a group (though it may not be used) # for convenience return apply(Group, items) # ------------------------------------------------------------------------- PSMacros = """%%BeginResource: procset pyscript /PyScriptDict 10 dict def PyScriptDict begin %show text with kerning if supplied /kernshow { 0 2 2 counttomark 2 sub { -2 roll } for counttomark 2 idiv { exch show 0 rmoveto} repeat pop } bind def /BeginEPSF { /b4_Inc_state save def /dict_count countdictstack def /op_count count 1 sub def userdict begin /showpage { } def 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit [ ] 0 setdash newpath /languagelevel where {pop languagelevel 1 ne {false setstrokeadjust false setoverprint } if } if } bind def /EndEPSF { count op_count sub {pop} repeat countdictstack dict_count sub {end} repeat b4_Inc_state restore } bind def /PyScriptStart {} def /PyScriptEnd {} def /showpage {} def end %%EndResource """ def collecttex(objects, tex = []): """ Collect the TeX objects in the order they're rendered @param objects: the objects to check for being TeX objects @type objects: object @param tex: list of TeX objects @type tex: list Used by render() @return: list of TeX objects @rtype: list """ for obj in objects: if isinstance(obj, TeX): tex.append(obj) elif isinstance(obj, Group) and not isinstance(obj, Eps): tex = collecttex(obj.objects, tex) return tex def TeXstuff(objects): ''' Get the actual postscript code and insert it into the tex objects. Also grab prolog used by render() @return: TeX objects prolog from dvips @rtype: string ''' objects = collecttex(objects) if len(objects) == 0: return "" print "Collecting postscript for TeX objects ..." fname = "temp.tex" fp = open(fname, "w") fp.write(defaults.tex_head) for tex in objects: fp.write('\\special{ps:PyScriptStart}\n') fp.write("{%s}\n"%tex.text) fp.write('\\special{ps:PyScriptEnd}\n') fp.write('\\newpage\n') fp.write(defaults.tex_tail) fp.close() ##os.system(defaults.tex_command%file+'> pyscript.log 2>&1') #(fi,foe) = os.popen4(defaults.tex_command%file) #fi.close() #sys.stderr.writelines(str(foe.readlines())) #sys.stderr.write('\n') #foe.close() # TeX it twice ... only pay attention to the 2nd one os.popen(defaults.tex_command % fname) foe = os.popen(defaults.tex_command % fname) sys.stderr.write(foe.read(-1)) sys.stderr.write('\n') # Help the user out by throwing the latex log to stderr if os.path.exists("%s.log" % fname): fp = open("%s.log" % fname, 'r') sys.stderr.write(fp.read(-1)) fp.close() if foe.close() is not None: raise RuntimeError, "Latex Error" (fi, foe) = os.popen4("dvips -q -tunknown %s -o temp.ps temp.dvi"%\ defaults.dvips_options) fi.close() err = foe.read(-1) sys.stderr.write(err) sys.stderr.write('\n') foe.close() if len(err)>0: raise RuntimeError, "dvips Error" fp = open("temp.ps", "r") ps = fp.read(-1) fp.close() # Now rip it appart .. use string rather than re which # gets caught on recursion limits # grab prolog dvips dosn't use %%BeginProlog! start = ps.index("%%EndComments")+14 end = ps.index("%%EndProlog") prolog = ps[start:end] tt = [] pos1 = end while 1: pos1 = ps.find("PyScriptStart", pos1) if pos1 < 0: break pos2 = ps.find("PyScriptEnd", pos1) tt.append("TeXDict begin 1 0 bop\n%s\neop end"%ps[pos1+14:pos2]) pos1 = pos2 assert len(tt) == len(objects) for ii in range(len(objects)): objects[ii].bodyps = tt[ii] # remove showpage # no we don't ... this kills some things #defs=re.sub("(?m)showpage","",defs) # Cant's seem to set a paper size of 0x0 without tinkering with # dvips config files. We need this so it matches with -E offsets. # the closest is the 'unknown' paper format which unfortunately # introduces some postript code that uses 'setpageparams' and # 'setpage' for size. Can't seem to overide # those def easily so hunt out that code and kill it: # defs=re.sub("(?s)statusdict /setpageparams known.*?if } if","",defs) return prolog class Eps(Group): ''' Create the EPS @cvar pad: extra padding around EPS bbox to absorb effect of line thicknesses etc (in pt) ''' pad = 2 def __init__(self, *objects, **options): ''' Override to allow fixed dimentions to be set @param objects: list of Eps objects @type objects: list @param options: dictionary of attributes @type options: dict ''' args = (self, )+objects Group.__init__(self, **options) b = self.bbox() # width and height have special meaning here if options.has_key('width') and options.has_key('height'): sx = options['width']/float(b.width) sy = options['height']/float(b.height) del options['width'] del options['height'] elif options.has_key('width'): sx = sy = options['width']/float(b.width) del options['width'] elif options.has_key('height'): sx = sy = options['height']/float(b.height) del options['height'] else: sx = sy = 1 self.scale(sx, sy) # initialise again since scaling must be applied BEFORE # any positioning args (width/height will be correct now) Group.__init__(*args, **options) def write(self, fp, title = "PyScriptEPS"): ''' write a self-contained EPS file @param fp: the filehandle to write to @type fp: file object @param title: the title of the postscript to write @type title: string ''' # --- Header Comments --- # We conform DSC 3.0... fp.write("%!PS-Adobe-3.0 EPSF-3.0\n") fp.write("%%%%BoundingBox: %d %d %d %d\n"%self.bbox_pp()) fp.write("%%%%Creator: PyScript %s\n"%version) fp.write("%%%%CreationDate: %s\n"%time.ctime(time.time())) # Color() can use CMYK ... don't need this with level 2 spec below # fp.write("%%Extensions: CMYK\n") # we've used some level 2 ops: fp.write("%%LanguageLevel: 2\n") fp.write("%%%%Title: %s\n"%title) # Say it's a single page: fp.write("%%Pages: 1\n") fp.write("%%EndComments\n") # --- Prolog --- fp.write("%%BeginProlog\n") fp.write(PSMacros) # insert TeX prolog & fonts here fp.write(TeXstuff(self)) fp.write("%%EndProlog\n") # --- Setup --- fp.write("%%BeginSetup\n") fp.write("PyScriptDict begin\n") fp.write('/uu {%f mul} def '%defaults.units) #fp.write('%s\n'%defaults.fg) fp.write('%g setlinewidth \n'%defaults.linewidth) fp.write('%d setlinecap %d setlinejoin %g setmiterlimit\n'%\ (defaults.linecap, defaults.linejoin, defaults.miterlimit )) if defaults.dash is not None: fp.write(defaults.dash+"\n") fp.write("end\n") fp.write("%%EndSetup\n") # --- Code --- fp.write("%%Page: 1 1\n") fp.write("PyScriptDict begin\n") fp.write(self.prebody()) fp.write(Group.body(self)) fp.write(self.postbody()) fp.write("end %PyScriptDict\n") # does this go after Trailer? fp.write("showpage\n") # where should this go? # --- Trailer --- fp.write("%%Trailer\n") fp.write("%%EOF\n") def __str__(self): ''' Eps file with correct pre- and post- code for embeding @rtype: string ''' out = cStringIO.StringIO() # NB this is slightly different to Epsf # transformations are done in write() here. # in Epsf, when the file is written the origin # is adjusted so it can be printed easily and # tranformations have to be done in __str__ too. # hence Epsf overrides body here we're override __str__ out.write("BeginEPSF\n") out.write("%%BeginDocument: PyScriptEPS\n") self.write(out) out.write("%%EndDocument\n") out.write("EndEPSF\n") return out.getvalue() def bbox_pp(self): """ Get the bounding box of the Eps object (with some padding) """ # Grab the groups bounding box b = self.bbox() p = self.pad x1 = round(b.sw[0]*defaults.units)-p y1 = round(b.sw[1]*defaults.units)-p x2 = round(b.ne[0]*defaults.units)+p y2 = round(b.ne[1]*defaults.units)+p return x1, y1, x2, y2 # ------------------------------------------------------------------------- class Page(Group): ''' A postscript page @cvar size: The paper size, eg "a4" @cvar orientation: The paper orientation, "Portrait"/"Landscape" @cvar label: page number label ''' size = 'a4' orientation = "Portrait" label = None # From gs_statd.ps which defines the paper sizes for gs: # Define various paper formats. The Adobe documentation defines only these: # 11x17, a3, a4, a4small, b5, ledger, legal, letter, lettersmall, note. # These procedures are also accessed as data structures during # initialization, so the page dimensions must be the first two elements # of the procedure. PAPERSIZES = { # Page sizes defined by Adobe documentation "11x17":(792, 1224), # a3 see below # a4 see below # a4small should be a4 with an ImagingBBox of [25 25 570 817]. # b5 see below "ledger":(1224, 792), # 11x17 landscape "legal":(612, 1008), "letter":(612, 792), # lettersmall should be letter with an ImagingBBox of [25 25 587 767]. # note should be letter (or some other size) with the ImagingBBox # shrunk by 25 units on all 4 sides. # ISO standard paper sizes "a0":(2380, 3368), "a1":(1684, 2380), "a2":(1190, 1684), "a3":(842, 1190), "a4":(595, 842), "a5":(421, 595), "a6":(297, 421), "a7":(210, 297), "a8":(148, 210), "a9":(105, 148), "a10":(74, 105), # ISO and JIS B sizes are different.... # first ISO "b0":(2836, 4008), "b1":(2004, 2836), "b2":(1418, 2004), "b3":(1002, 1418), "b4":(709, 1002), "b5":(501, 709), "b6":(354, 501), "jisb0":(2916, 4128), "jisb1":(2064, 2916), "jisb2":(1458, 2064), "jisb3":(1032, 1458), "jisb4":(729, 1032), "jisb5":(516, 729), "jisb6":(363, 516), "c0":(2600, 3677), "c1":(1837, 2600), "c2":(1298, 1837), "c3":(918, 1298), "c4":(649, 918), "c5":(459, 649), "c6":(323, 459), # U.S. CAD standard paper sizes "arche":(2592, 3456), "archd":(1728, 2592), "archc":(1296, 1728), "archb":(864, 1296), "archa":(648, 864), # Other paper sizes "flsa":(612, 936), # U.S. foolscap "flse":(612, 936), # European foolscap "halfletter":(396, 612), # Screen size (NB this is 2mm too wide for A4): "screen":(600, 800), } def area(self): ''' return an area object same size as page in default units @rtype: Area ''' d1, d2, w, h = self.bbox_pp() w, h = w/float(defaults.units), h/float(defaults.units) return Area(sw = P(0, 0), width = w, height = h) def recalc_size(self): """ Recalculate the size of the Page object """ # disable this as we're always the same size pass def bbox(self): """ Return the bounding box of the Page object as a Bbox object """ area = self.area() return Bbox(sw = area.sw, width = area.width, height = area.height) def bbox_pp_raw(self): """ Return the raw string of the bounding box of the Page object """ w, h = self.PAPERSIZES[self.size.lower()] return 0, 0, w, h def bbox_pp(self): """ Return the bounding box of the Page object """ w, h = self.PAPERSIZES[self.size.lower()] if self.orientation.lower() == "landscape": h, w = w, h return 0, 0, w, h def write(self, fp, number): ''' write a self-contained PS Page @param fp: the filehandle to write the postscript to @type fp: filehandle object @param number: the number of the page to write @type number: int ''' label = self.label if label is None: label = str(number) fp.write("%%%%Page: %s %d\n"%(label, number)) orientation = self.orientation.capitalize() if orientation not in ("Portrait", "Landscape"): raise ValueError, "Don't understand page orientation" fp.write("%%%%PageOrientation: %s\n" % orientation) w, h = self.PAPERSIZES[self.size.lower()] fp.write("%%%%PageBoundingBox: %d %d %d %d\n"%\ (0, 0, w, h)) # --- Setup --- fp.write("%%BeginPageSetup\n") fp.write("%%%%BeginFeature: *PageSize %s\n"%self.size) # The orientation of w & h should make no diff here acording to specs fp.write("<> setpagedevice\n"%\ (w, h)) fp.write("%%EndFeature\n") # remember the page graphics state fp.write("/pgsave save def\n") # rotate if we're landscape if orientation == "Landscape": fp.write("90 rotate 0 -%d translate\n"%w) fp.write("%%EndPageSetup\n") fp.write("PyScriptDict begin\n") fp.write(self.prebody()) fp.write(Group.body(self)) fp.write(self.postbody()) fp.write("end %PyScriptDict\n") # does this go after Trailer? # restore the graphics state and show the page fp.write("pgsave restore showpage\n") class Pages(Group): ''' Class to hold pages and write out a multi-page postsript document ''' def write(self, fp, title = "PyScriptPS"): ''' write the Pages @param fp: filehandle to write the postscript to @type fp: filehandle object @param title: the title to use in the postscript @type title: string ''' fp.write("%!PS-Adobe-3.0\n") fp.write("%%%%Creator: PyScript %s\n"%version) fp.write("%%%%CreationDate: %s\n"%time.ctime(time.time())) # Color() can use CMYK ... don't need this with level 2 spec below # fp.write("%%Extensions: CMYK\n") # we've used some level 2 ops: fp.write("%%LanguageLevel: 2\n") fp.write("%%%%Title: %s\n"%title) # If all the pages are orientated the same, give a global orientation # Combine boundingboxes to a highwater-mark global boundingbox orientation = self[0].orientation orient = True x1, y1, x2, y2 = self[0].bbox_pp_raw() for page in self: orient = orient and (page.orientation == orientation) x1t, y1t, x2t, y2t = page.bbox_pp_raw() x1 = min(x1, x1t) y1 = min(y1, y1t) x2 = max(x2, x2t) y2 = max(y2, y2t) fp.write("%%%%BoundingBox: %d %d %d %d\n"%(x1, y1, x2, y2)) if orient: fp.write("%%%%Orientation: %s\n"%orientation) # Say it's a single page: fp.write("%%%%Pages: %d\n"%len(self)) fp.write("%%EndComments\n") # --- Prolog --- fp.write("%%BeginProlog\n") fp.write(PSMacros) # insert TeX prolog & fonts here fp.write(TeXstuff(self)) fp.write("%%EndProlog\n") # --- Setup --- fp.write("%%BeginSetup\n") fp.write("PyScriptDict begin\n") fp.write('/uu {%f mul} def '%defaults.units) fp.write('%g setlinewidth \n'%defaults.linewidth) fp.write('%d setlinecap %d setlinejoin %g setmiterlimit\n'%\ (defaults.linecap, defaults.linejoin, defaults.miterlimit, )) if defaults.dash is not None: fp.write(defaults.dash+"\n") fp.write("end\n") fp.write("%%EndSetup\n") for pp in range(len(self)): self[pp].write(fp, pp+1) # --- Trailer --- fp.write("%%Trailer\n") fp.write("%%EOF\n") def validate(self, obj): """ Check that the objects are able to be added to the Page object @param obj: object to check validity of @type obj: object """ if not isinstance(obj, Page): raise TypeError, "Can only add Page to %s" % str(self.__class__) # vim: expandtab shiftwidth=4: pyscript-0.6.1/pyscript/objects.py0000644000175000001440000007440710432611767016777 0ustar cochraneusers# Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # $Id: objects.py,v 1.50 2006/05/16 05:38:31 aalexei Exp $ """ Some of the key drawing objects """ __revision__ = '$Revision: 1.50 $' import os, re, sys import cStringIO from math import cos, sin, pi from pyscript.defaults import defaults from pyscript.vectors import P, Bbox, Matrix from pyscript.base import PsObj, Color, UNITS from pyscript.afm import AFM import warnings # ------------------------------------------------------------------------- class AffineObj(PsObj): ''' A base class for object that should implement affine transformations, this should apply to any object that draws on the page. ''' o = P(0, 0) T = Matrix(1, 0, 0, 1) def concat(self, t, p = None): ''' concat matrix t to tranformation matrix @param t: a 2x2 Matrix dectribing Affine transformation @param p: the origin for the transformation @return: reference to self @rtype: self ''' # update transformation matrix self.T = t*self.T #if p is not None: # o=self.o # o is in external co-ords # self.move(p-o) # self.move(t*(o-p)) o = self.o # o is in external co-ords # set origin at (0,0) self.move(-o) # move to transformed p id defined if p is not None: self.move(p) self.move(t*(-p)) # move to transformed origin self.move(t*o) return self def move(self, *args): ''' translate object by a certain amount @param args: amount to move by, can be given as - dx,dy - P @return: reference to self @rtype: self ''' if len(args) == 1: # assume we have a point self.o += args[0] else: # assume we have dx,dy self.o += P(args[0], args[1]) return self def rotate(self, angle, p = None): """ rotate object, the rotation is around p when supplied otherwise it's the objects origin @param angle: angle in degrees, clockwise @param p: point to rotate around (external co-ords) @return: reference to self @rtype: self """ angle = angle/180.0*pi # convert angle to radians t = Matrix(cos(angle), sin(angle), -sin(angle), cos(angle)) self.concat(t, p) return self def scale(self, sx, sy = None, p = None): ''' scale object size (towards objects origin or p) @param sx: x scale factor, or total scale factor if sy=None @param sy: y scale factor @param p: point around which to scale @return: reference to self @rtype: self ''' if sy is None: sy = sx t = Matrix(sx, 0, 0, sy) self.concat(t, p) return self def reflect(self, angle, p = None): ''' reflect object in mirror @param angle: angle of mirror (deg clockwise from top) @param p: origin of reflection @return: reference to self @rtype: self ''' # convert angle to radians, clockwise from top angle = angle/180.0*pi-pi/2 t = Matrix( cos(angle)**2-sin(angle)**2, -2*sin(angle)*cos(angle), -2*sin(angle)*cos(angle), sin(angle)**2-cos(angle)**2 ) self.concat(t, p) return self def shear(self, s, angle, p = None): ''' shear object @param s: amount of shear @param angle: direction of shear (deg clockwise from top) @param p: origin of shear @return: reference to self @rtype: self ''' self.rotate(angle, p) t = Matrix(1, 0, -s, 1) self.concat(t, p) self.rotate(-angle, p) return self def itoe(self, p_i): ''' convert internal to external co-ords @param p_i: internal co-ordinate @return: external co-ordinate @rtype: P ''' assert isinstance(p_i, P), "object not a P()" return self.T*p_i+self.o def etoi(self, p_e): ''' convert external to internal co-ords @param p_e: external co-ordinate @return: internal co-ordinate @rtype: P ''' assert isinstance(p_e, P), "object not a P()" return self.T.inverse()*(p_e-self.o) def prebody(self): ''' set up transformation of coordinate system @rtype: string ''' T = self.T o = self.o S = "gsave " if T == Matrix(1, 0, 0, 1): S = S+"%s translate\n" % o else: # NB postscript matrix is the transpose of what you'd expect! S = S+"[%g %g %g %g %s] concat\n" % (T[0], T[2], T[1], T[3], o()) return S def postbody(self): ''' undo coordinate system transformation @rtype: string ''' return "grestore\n" # ------------------------------------------------------------------------- class Area(AffineObj): """ A Rectangular area defined by sw corner and width and height. defines the following compass points that can be set and retrived:: nw--n--ne | | w c e | | sw--s--se The origin is the sw corner and the others are calculated from the width and height attributes. If a subclass should have the origin somewhere other than sw then overide the sw attribute to make it a function @cvar width: the width @cvar height: the height @cvar c: centre point (simillarly for n,ne etc) """ #XXX allow the changing of sw corner away from origin eg Text isw = P(0, 0) width = 0 height = 0 # Dynamic locations def _get_n(self): """ Get the "north" point """ return self.itoe(P(self.width/2., self.height)+self.isw) def _set_n(self, pe): """ Set the "north" point """ self.move(pe-self.n) n = property(_get_n, _set_n) def _get_ne(self): """ Get the "north-east" point """ return self.itoe(P(self.width, self.height)+self.isw) def _set_ne(self, pe): """ Set the "north-east" point """ self.move(pe-self.ne) ne = property(_get_ne, _set_ne) def _get_e(self): """ Get the "east" point """ return self.itoe(P(self.width, self.height/2.)+self.isw) def _set_e(self, pe): """ Set the "east" point """ self.move(pe-self.e) e = property(_get_e, _set_e) def _get_se(self): """ Get the "south-east" point """ return self.itoe(P(self.width, 0)+self.isw) def _set_se(self, pe): """ Set the "south-east" point """ self.move(pe-self.se) se = property(_get_se, _set_se) def _get_s(self): """ Get the "south" point """ return self.itoe(P(self.width/2., 0)+self.isw) def _set_s(self, pe): """ Set the "south" point """ self.move(pe-self.s) s = property(_get_s, _set_s) def _get_sw(self): """ Get the "south-west" point """ return self.itoe(self.isw) def _set_sw(self, pe): """ Set the "south-west" point """ self.move(pe-self.sw) sw = property(_get_sw, _set_sw) def _get_w(self): """ Get the "west" point """ return self.itoe(P(0, self.height/2.)+self.isw) def _set_w(self, pe): """ Set the "west" point """ self.move(pe-self.w) w = property(_get_w, _set_w) def _get_nw(self): """ Get the "north-west" point """ return self.itoe(P(0, self.height)+self.isw) def _set_nw(self, pe): """ Set the "north-west" point """ self.move(pe-self.nw) nw = property(_get_nw, _set_nw) def _get_c(self): """ Get the "centre" point """ return self.itoe(P(self.width/2., self.height/2.)+self.isw) def _set_c(self, pe): """ Set the "centre" point """ self.move(pe-self.c) c = property(_get_c, _set_c) def bbox(self): """ Return the bounding box of the object """ x1, y1 = self.sw x2, y2 = self.ne for p in [self.sw, self.nw, self.ne, self.se]: x1 = min(x1, p[0]) y1 = min(y1, p[1]) x2 = max(x2, p[0]) y2 = max(y2, p[1]) return Bbox(sw = P(x1, y1), width = x2-x1, height = y2-y1) # ------------------------------------------------------------------------- class TeX(Area): ''' A TeX expression (requires working latex and dvips systems) @cvar fg: TeX color @cvar iscale: initial scale for tex ''' text = "" iscale = 1 fg = Color(0) bodyps = "" def __init__(self, text = "", **options): self.text = text print "Obtaining TeX object's boundingbox ..." # this should be a tempfile ? tempName = "temp1" fp = open("%s.tex"%tempName, "w") fp.write(defaults.tex_head) fp.write(text) fp.write(defaults.tex_tail) fp.close() foe = os.popen(defaults.tex_command % tempName) sys.stderr.write(foe.read(-1)) sys.stderr.write('\n') # Help the user out by throwing the latex log to stderr if os.path.exists("%s.log" % tempName): fp = open("%s.log" % tempName, 'r') sys.stderr.write(fp.read(-1)) fp.close() if foe.close() is not None: raise RuntimeError, "Latex Error" fi, foe = os.popen4("dvips -q -E -o %s.eps %s.dvi" % \ (tempName, tempName)) err = foe.read(-1) sys.stderr.write(err) sys.stderr.write('\n') fi.close() if len(err)>0: raise RuntimeError, "dvips Error" fp = open("%s.eps" % tempName, "r") eps = fp.read(-1) fp.close() # grab boundingbox ... only thing we want at this stage bbox_so = re.search("\%\%boundingbox:\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)", eps, re.I) bbox = [] for ii in bbox_so.groups(): bbox.append(int(ii)) self.width = (bbox[2]-bbox[0])/float(defaults.units) self.height = (bbox[3]-bbox[1])/float(defaults.units) # now we have a width and height we can initialise Area Area.__init__(self, **options) self.offset = -P(bbox[0], bbox[1])/float(defaults.units) self.scale(self.iscale) def body(self): """ Returns the object's postscript body """ out = cStringIO.StringIO() out.write("%s translate "%self.offset) out.write("%s\n"%self.fg) out.write("%s\n"%self.bodyps) return out.getvalue() # ------------------------------------------------------------------------- class Text(Area): ''' A single line text object @cvar font: postscript font name eg "Times-Roman" @cvar size: pointsize of the font @cvar kerning: use kerning? @cvar text: the string to typeset @cvar fg: color of the text ''' # these all affect the size so should be dynamic _text = '' _font = "Times-Roman" _size = 12 _kerning = 1 fg = Color(0) def __init__(self, text = "", **options): # get the bbox # first need font and scale BEFORE positioning # for efficiency don't use dynamic attributes self._text = text self._font = options.get('font', self._font) self._size = options.get('size', self._size) self._kerning = options.get('kerning', self._kerning) # Now calc sizes from AFM self._typeset() Area.__init__(self, **options) def _get_font(self): """ Get the font """ return self._font def _set_font(self, fontname): """ Set the font """ self._font = fontname self._typeset() font = property(_get_font, _set_font) def _get_size(self): """ Get the font size """ return self._size def _set_size(self, size): """ Set the font size """ self._size = size self._typeset() size = property(_get_size, _set_size) def _get_kerning(self): """ Get the kerning information """ return self._kerning def _set_kerning(self, kerning): """ Set the kerning information """ self._kerning = kerning self._typeset() kerning = property(_get_kerning, _set_kerning) def _get_text(self): """ Get the text of the Text object """ return self._text def _set_text(self, text): """ Set the text of the Text object """ self._text = text self._typeset() text = property(_get_text, _set_text) def _typeset(self): """ Typeset the Text object (including kerning info) """ string = self.text afm = AFM(self._font) # set the correct postscript font name self._font = afm.FontName size = self.size sc = size/1000. chars = map(ord, list(string)) # order: width l b r t # use 'reduce' and 'map' as they're written in C # add up all the widths width = reduce(lambda x, y: x+afm[y][0], chars, 0) # subtract the kerning if self.kerning == 1: if len(chars)>1: kerns = map(lambda x, y:afm[(x, y)] , chars[:-1], chars[1:]) charlist = list(string) out = "(" for ii in kerns: if ii != 0: out += charlist.pop(0)+") %s ("%str(ii*sc) else: out += charlist.pop(0) out += charlist.pop(0)+")" settext = out kern = reduce(lambda x, y:x+y, kerns) width += kern else: # this is to catch the case when there are no characters # in the string, but self.kerning==1 settext = "("+string+")" else: settext = "("+string+")" # get rid of the end bits start = afm[chars[0]][1] f = afm[chars[-1]] width = width-start-(f[0]-f[3]) # accumulate maximum height top = reduce(lambda x, y: max(x, afm[y][4]), chars, 0) # accumulate lowest point bottom = reduce(lambda x, y: min(x, afm[y][2]), chars, afm[chars[0]][2]) x1 = start*sc y1 = bottom*sc x2 = x1+width*sc y2 = top*sc self.settext = settext self.offset = -P(x1, y1)/float(defaults.units) self.width = (x2-x1)/float(defaults.units) self.height = (y2-y1)/float(defaults.units) def body(self): """ Returns the object's postscript body """ out = cStringIO.StringIO() ATTR = {'font':self.font, 'fg':self.fg, 'size':self.size, 'settext':self.settext, 'offset':self.offset} out.write("%(offset)s moveto\n" % ATTR) out.write("/%(font)s %(size)s selectfont %(fg)s \n" % ATTR) out.write("mark %(settext)s kernshow\n" % ATTR) return out.getvalue() # ------------------------------------------------------------------------- # Rectangle # ------------------------------------------------------------------------- class Rectangle(Area): """ Draw a rectangle @cvar linewidth: the line thickness in points @type linewidth: float @cvar dash: a Dash() object giving the dash pattern to use @type dash: L{Dash} object @cvar fg: line color @type fg: L{Color} object @cvar bg: fill color or None for empty @type bg: L{Color} object @cvar r: radius of corners (saturates at min(width/2,height/2)) @type r: float @cvar width: width of rectangle @type width: float @cvar height: height of rectangle @type height: float """ bg = None fg = Color(0) r = 0.0 linewidth = None dash = None width = 1.0 height = 1.0 def __init__(self, obj=None, **options): ''' @param obj: for Area() or Bbox(), the size and position will be taken from obj ''' if isinstance(obj, Area) or isinstance(obj, Bbox): options['sw'] = obj.sw options['width'] = obj.width options['height'] = obj.height Area.__init__(self, **options) def body(self): """ Returns the object's postscript body """ out = cStringIO.StringIO() if self.linewidth: out.write("%g setlinewidth "%self.linewidth) if self.dash is not None: out.write(str(self.dash)) # make sure we have a sensible radius r = min(self.width/2., self.height/2., self.r) w = self.width h = self.height ATTR = {'bg':self.bg, 'fg':self.fg, 'width':w, 'height':h, 'r':r, 'ne':P(w, h), 'n':P(w/2., h), 'nw':P(0, h), 'w':P(0, h/2.), 'sw':P(0, 0), 's':P(w/2., 0), 'se':P(w, 0), 'e':P(w, h/2.), } if self.bg is not None: if self.r == 0: out.write("%(bg)s 0 0 %(width)g uu %(height)g uu rectfill\n"\ % ATTR) else: out.write("%(bg)s newpath %(w)s moveto\n" % ATTR) out.write("%(nw)s %(n)s %(r)s uu arcto 4 {pop} repeat\n" % ATTR) out.write("%(ne)s %(e)s %(r)s uu arcto 4 {pop} repeat\n" % ATTR) out.write("%(se)s %(s)s %(r)s uu arcto 4 {pop} repeat\n" % ATTR) out.write("%(sw)s %(w)s %(r)s uu arcto 4 {pop} repeat\n" % ATTR) out.write("closepath fill\n") if self.fg is not None: if self.r == 0: out.write("%(fg)s 0 0 %(width)g uu %(height)g uu rectstroke\n"\ % ATTR) else: out.write("%(fg)s newpath %(w)s moveto\n" % ATTR) out.write("%(nw)s %(n)s %(r)s uu arcto 4 {pop} repeat\n" % ATTR) out.write("%(ne)s %(e)s %(r)s uu arcto 4 {pop} repeat\n" % ATTR) out.write("%(se)s %(s)s %(r)s uu arcto 4 {pop} repeat\n" % ATTR) out.write("%(sw)s %(w)s %(r)s uu arcto 4 {pop} repeat\n" % ATTR) out.write("closepath stroke\n") return out.getvalue() # ------------------------------------------------------------------------- class Circle(AffineObj): """ Draw a circle, or part of. Generate ellipses by scaling. The origin is the center @cvar r: radius @type r: float @cvar start: starting angle for arc @type start: float @cvar end: end angle for arc @type end: float @cvar c: (also n, ne,...) as for L{Area} @type c: L{P} object @cvar linewidth: width of the lines @type linewidth: float @cvar dash: Dash() object giving dash pattern to use @type dash: L{Dash} object """ bg = None fg = Color(0) r = 1.0 start = 0.0 end = 360.0 linewidth = None dash = None def locus(self, angle, target=None): ''' Set or get a point on the locus @param angle: locus point in degrees (Degrees clockwise from north) @type angle: float @param target: target point @return: - target is None: point on circumference at that angle - else: set point to the target, and return reference to object @rtype: self or P ''' r = self.r x = r*sin(angle/180.0*pi) y = r*cos(angle/180.0*pi) l = P(x, y) if target is None: return self.itoe(l) else: self.move(target-self.locus(angle)) return self # some named locations def _get_c(self): """ Get the "centre" point """ return self.o def _set_c(self, pe): """ Set the "centre" point """ self.move(pe-self.o) c = property(_get_c, _set_c) def _get_n(self): """ Get the "north" point """ return self.locus(0) def _set_n(self, pe): """ Set the "north" point """ self.locus(0, pe) n = property(_get_n, _set_n) def _get_e(self): """ Get the "east" point """ return self.locus(90) def _set_e(self, pe): """ Set the "east" point """ self.locus(90, pe) e = property(_get_e, _set_e) def _get_s(self): """ Get the "south" point """ return self.locus(180) def _set_s(self, pe): """ Set the "south" point """ self.locus(180, pe) s = property(_get_s, _set_s) def _get_w(self): """ Get the "west" point """ return self.locus(270) def _set_w(self, pe): """ Set the "west" point """ self.locus(270, pe) w = property(_get_w, _set_w) # these are of the square that holds the circle def _get_ne(self): """ Get the "nort-east" point """ return self.itoe(P(self.r, self.r)) def _set_ne(self, pe): """ Set the "north-east" point """ self.move(pe-self.ne) ne = property(_get_ne, _set_ne) def _get_nw(self): """ Get the "nort-west" point """ return self.itoe(P(-self.r, self.r)) def _set_nw(self, pe): """ Set the "nort-west" point """ self.locus(315, pe) self.move(pe-self.nw) nw = property(_get_nw, _set_nw) def _get_se(self): """ Get the "south-east" point """ return self.itoe(P(self.r, -self.r)) def _set_se(self, pe): """ Set the "south-east" point """ self.locus(135, pe) self.move(pe-self.se) se = property(_get_se, _set_se) def _get_sw(self): """ Get the "south-west" point """ return self.itoe(P(-self.r, -self.r)) def _set_sw(self, pe): """ Set the "south-west" point """ self.locus(235, pe) self.move(pe-self.sw) sw = property(_get_sw, _set_sw) def body(self): """ Returns the object's postscript body """ out = cStringIO.StringIO() if self.linewidth: out.write("%g setlinewidth " % self.linewidth) if self.dash is not None: out.write(str(self.dash)) # By default postscript goes anti-clockwise # and starts from 'e' ... fix it so it goes # clockwise and starts from 'n' ATTR = {'bg':self.bg, 'fg':self.fg, 'r':self.r, 'start':self.start, 'end':self.end} if self.bg is not None: out.write("%(bg)s 0 0 %(r)g uu 360 %(start)g -1 mul add 90 " "add 360 %(end)g -1 mul add 90 add arcn fill\n" % ATTR) if self.fg is not None: out.write("%(fg)s 0 0 %(r)g uu 360 %(start)g -1 mul add 90 " "add 360 %(end)g -1 mul add 90 add arcn stroke\n" % ATTR) return out.getvalue() def bbox(self): """ Return the bounding box object of the Circle """ #grab a tight boundingbox by zipping around circumference SW = self.locus(0) NE = self.locus(0) for ii in xrange(self.start, self.end+10, 10): p = self.locus(ii) SW[0] = min(SW[0], p[0]) SW[1] = min(SW[1], p[1]) NE[0] = max(NE[0], p[0]) NE[1] = max(NE[1], p[1]) return Bbox(sw = SW, width = NE[0]-SW[0], height = NE[1]-SW[1]) # ------------------------------------------------------------------------- class Dot(Circle): ''' draw a dot at the given location @cvar r: dot radius @cvar bg: dot color @cvar fg: dot border color ''' r = .05 bg = Color(0) fg = None def __init__(self, p1 = P(0, 0), p2 = 0, **options): if isinstance(p1, P): c = p1 else: c = P(p1, p2) Circle.__init__(self, **options) self.c = c def bbox(self): """ Return the bounding box of the Dot """ return Bbox(sw = self.sw, width = 2*self.r, height = 2*self.r) # ------------------------------------------------------------------------- class Paper(Area): ''' returns an area object the size of one of the standard paper sizes B{Class deprecated - use Page instead} ''' size = None orientation = "portrait" # PAPERSIZES taken from gs man page (x cm,y cm) PAPERSIZES = { "a0": (83.9611, 118.816), "a1": (59.4078, 83.9611), "a2": (41.9806, 59.4078), "a3": (29.7039, 41.9806), "a4": (20.9903, 29.7039), "a4r": (29.7039, 20.9903), # rotated version of a4 "a5": (14.8519, 20.9903), "a6": (10.4775, 14.8519), "a7": (7.40833, 10.4775), "a8": (5.22111, 7.40833), "a9": (3.70417, 5.22111), "a10": (2.61056, 3.70417), "b0": (100.048, 141.393), "b1": (70.6967, 100.048), "b2": (50.0239, 70.6967), "b3": (35.3483, 50.0239), "b4": (25.0119, 35.3483), "b5": (17.6742, 25.0119), "archA": (22.86 , 30.48), "archB": (30.48 , 45.72), "archC": (45.72 , 60.96), "archD": (60.96 , 91.44), "archE": (91.44 , 121.92), "flsa": (21.59 , 33.02), "flse": (21.59 , 33.02), "halfletter": (13.97 , 21.59), "note": (19.05 , 25.4 ), "letter": (21.59 , 27.94), "legal": (21.59 , 35.56), "11x17": (27.94 , 43.18), "ledger": (43.18 , 27.94), } def __init__(self, size, **options): ''' @param size: eg "a4","letter" etc. See L{PAPERSIZES} for sizes @return: An area object the size of the selected paper with the sw corner on P(0,0) ''' warnings.warn("Paper() class deprecated .. use Page()") self.size = size orientation = options.get("orientation", self.orientation) if orientation == "portrait": w, h = self.PAPERSIZES[size] else: h, w = self.PAPERSIZES[size] self.width = w*UNITS['cm']/float(defaults.units) self.height = h*UNITS['cm']/float(defaults.units) Area.__init__(self, **options) # ------------------------------------------------------------------------- class Epsf(Area): ''' Load an Eps from file @cvar width: on init - set width to this @type width: float @cvar height: on init - set height to this @type height: float ''' def __init__(self, file, **options): ''' @param file: path to epsf file @type file: string @return: The eps figure as an area object ''' self.file = file print "Loading %s" % file fp = open(file, 'r') self.all = fp.read(-1) fp.close() bbox_so = re.compile( "\%\%boundingbox:\s+(-?\d+)\s+(-?\d+)\s+(-?\d+)\s+(-?\d+)", re.I|re.S) so = bbox_so.search(self.all) x1s, y1s, x2s, y2s = so.groups() d = float(defaults.units) x1 = float(x1s)/d y1 = float(y1s)/d x2 = float(x2s)/d y2 = float(y2s)/d self.offset = -P(x1, y1) self.width = x2-x1 self.height = y2-y1 # width and height have special meaning here if options.has_key('width') and options.has_key('height'): sx = options['width']/float(self.width) sy = options['height']/float(self.height) del options['width'] del options['height'] elif options.has_key('width'): sx = sy = options['width']/float(self.width) del options['width'] elif options.has_key('height'): sx = sy = options['height']/float(self.height) del options['height'] else: sx = sy = 1 self.scale(sx, sy) Area.__init__(self, **options) def body(self): """ Return the body of the object's postcript """ out = cStringIO.StringIO() out.write("BeginEPSF\n") out.write("%s translate \n" % self.offset) out.write("%%%%BeginDocument: %s\n" % self.file) out.write(self.all) out.write("%%EndDocument\n") out.write("EndEPSF\n") return out.getvalue() # vim: expandtab shiftwidth=4: pyscript-0.6.1/pyscript/path.py0000644000175000001440000004326710432611767016302 0ustar cochraneusers# Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # $Id: path.py,v 1.25 2006/05/16 05:38:31 aalexei Exp $ """ The Path module """ __revision__ = '$Revision: 1.25 $' #from pyscript.defaults import defaults from math import sqrt, pi, sin, cos from pyscript.vectors import P, Bbox, U, Identity, R from pyscript.base import Color from pyscript.objects import AffineObj from pyscript.arrowheads import ArrowHead import cStringIO # ------------------------------------------------------------------------- # Pathlettes ... components of path, not used by themselves # ------------------------------------------------------------------------- class _line(object): ''' A line pathlette ''' s = None e = None def __init__(self, s, e): object.__init__(self) self.s = s self.e = e def _get_start(self): """ return start point """ return self.s start = property(_get_start) def _get_end(self): """ return end point """ return self.e end = property(_get_end) def _get_length(self): """ Get the length of the pathlette """ return (self.e-self.s).length length = property(_get_length) def P(self, f): ''' return point at fraction f of length ''' return (self.s+(self.e-self.s)*f) def tangent(self, f): ''' return angle of tangent of curve at fraction f of length ''' return (self.e-self.s).arg def body(self): """ Return the postscript body """ return '%s lineto\n' % self.e def bbox(self, itoe = Identity): """ Return the bounding box """ p0 = itoe(self.s) p1 = itoe(self.e) x0 = min(p0[0], p1[0]) x1 = max(p0[0], p1[0]) y0 = min(p0[1], p1[1]) y1 = max(p0[1], p1[1]) return Bbox(sw = P(x0, y0), width = x1-x0, height = y1-y0) # ------------------------------------------------------------------------- class _bezier(object): ''' A Bezier pathlette ''' s = None e = None cs = None ce = None length = None TOL = None #tolerance for linearising def __init__(self, s, cs, ce, e, TOL = 2e-3, temporary = False): object.__init__(self) self.s = s # start self.e = e # end self.cs = cs # start control self.ce = ce # end control self.TOL = TOL # for efficiency don't do this unless we intend to # keep this pathlette if not temporary: self._points = self.straighten() self.set_length() def _is_straight(self): ''' is this curve straight? ''' L1 = (self.cs-self.s).length+\ (self.ce-self.cs).length+\ (self.e-self.ce).length L2 = (self.e-self.s).length if abs(L1-L2)/float(L1) <= self.TOL: return True else: return False def straighten(self): """ Straighten the bezier curve """ if self._is_straight(): return (self.s, self.e) else: c1, c2 = self._bisect(temporary = True) return (c1.straighten()+c2.straighten()) def _bisect(self, t = .5, temporary = False): ''' Divide this bezier into two ''' p01 = self.s * (1-t) + self.cs * t p12 = self.cs * (1-t) + self.ce * t p23 = self.ce * (1-t) + self.e * t p012 = p01 * (1-t) + p12 * t p123 = p12 * (1-t) + p23 * t p0123 = p012 * (1-t) + p123 * t return (_bezier(self.s.copy(), p01, p012, p0123, temporary = temporary), _bezier(p0123.copy(), p123, p23, self.e.copy(), temporary = temporary)) def set_length(self): """ Set the length of the bezier curve """ L = 0 p0 = self.s for p in self._points: L += (p-p0).length p0 = p self.length = L def body(self): """ Return the postscript body of the object """ return '%s %s %s curveto\n' % (self.cs, self.ce, self.e) def _t(self, t): ''' Return point on curve parametrised by t [0-1] This is exact ''' a1 = 3*(self.cs-self.s) a2 = 3*(self.s-2*self.cs+self.ce) a3 = -self.s+3*self.cs-3*self.ce+self.e return a3*t**3+a2*t**2+a1*t+self.s def _get_start(self): """ return start point """ return self.s start = property(_get_start) def _get_end(self): """ return end point """ return self.e end = property(_get_end) def P(self, f): ''' return point on curve at fraction f of length ''' assert 0 <= f <= 1 #if self.length is None: # self._cache() if f == 0: return self.s elif f == 1: return self.e Lf = self.length*f L = 0 p0 = self.s for p in self._points: l = (p-p0).length if L+l >= Lf: break L += l p0 = p # XXX Add a correction here so it's actually on the curve! # Newton Rapson? return (p-p0).U*(Lf-L) +p0 def tangent(self, f): ''' return angle of tangent of curve at fraction f of length ''' assert 0 <= f <= 1 if f == 0: return (self.cs-self.s).arg elif f == 1: return (self.e-self.ce).arg Lf = self.length*f L = 0 p0 = self.s for p in self._points: l = (p-p0).length if L+l >= Lf: break L += l p0 = p # XXX Add a correction here so it's actually on the curve! # Newton Rapson? return (p-p0).arg def bbox(self, itoe = Identity): """ Return the bounding box of the object """ # run through the list of points to get the bounding box #if self.length is None: # self._cache() p0 = itoe(self.s) x0, y0 = p0 x1, y1 = p0 for p in self._points: p1 = itoe(p) x0 = min(x0, p1[0]) x1 = max(x1, p1[0]) y0 = min(y0, p1[1]) y1 = max(y1, p1[1]) return Bbox(sw = P(x0, y0), width = x1-x0, height = y1-y0) # ------------------------------------------------------------------------- # Curve specifier # ------------------------------------------------------------------------- class C(object): """ Specifier and generator for curves """ # these params control the natural bezier # (they are set to the MetaPost defaults) _a = sqrt(2) _b = 1/16. _c = (3-sqrt(5))/2. # user parameters for curve: c0 = None c1 = None t0 = 1 t1 = 1 #curl = 1 # this for specifing an arc arc = None def __init__(self, *args, **options): ''' store curve parameters ''' if len(args) == 1: raise ValueError, "C takes two arguments" #self.c0 = args[0] #self.c1 = args[0] elif len(args) == 2: self.c0 = args[0] self.c1 = args[1] # anything supplied in keywords will override # the above points eg C(P(0, 0), c1=45) object.__init__(self) self(**options) def __call__(self, **options): ''' Set a whole lot of attributes in one go eg:: obj.set(bg=Color(.3), linewidth=2) @return: self @rtype: self ''' # first do non-property ones # this will raise an exception if class doesn't have attribute # I think this is good. prop = [] for key, value in options.items(): if isinstance(eval('self.__class__.%s'%key), property): prop.append((key, value)) else: self.__class__.__setattr__(self, key, value) # now the property ones # (which are functions of the non-property ones) for key, value in prop: self.__class__.__setattr__(self, key, value) # for convenience return a reference to us return self def _get_fullyspecified(self): ''' Is this curve fully specified (all control points) ''' if self.arc is not None: # an arc is already fully specified return 1 elif isinstance(self.c0, P) and isinstance(self.c1, P): # both points set return 1 else: return 0 fullyspecified = property(_get_fullyspecified, None) def curve(self, p0, p1 = None): ''' return pathlette object corresponding to curve ''' if self.arc is not None: # an arc return self.create_arc(p0) else: # a bezier if not self.fullyspecified: # fit natural curve... self.fit_curve(p0, p1) return self.create_bezier(p0, p1) def fit_curve(self, p0, p1): ''' fit a natural looking spline to end slopes ''' # first get the angles ... if type(self.c0) in [type(10), type(10.0)]: # turn this into a unit vector in that direction w0 = U(self.c0) elif isinstance(self.c0, R): # already have unit vectior w0 = self.c0 elif isinstance(self.c0, P): # non-unit vector giving direction w0 = (self.c0-p0) else: raise ValueError, "Unknown control type c0" if type(self.c1) in [type(10), type(10.0)]: # turn this into a unit vector in that direction w1 = U(self.c1) elif isinstance(self.c1, R): # already have unit vectior w1 = self.c1 elif isinstance(self.c1, P): # non-unit vector giving direction w1 = (self.c1-p1) else: raise ValueError, "Unknown control type c1" t = ((p1-p0).arg-w0.arg)*pi/180. p = -((-p1+p0).arg-w1.arg)*pi/180. a = self._a b = self._b c = self._c alpha = a*(sin(t)-b*sin(p))*(sin(p)-b*sin(t))*(cos(t)-cos(p)) rho = (2+alpha)/(1+(1-c)*cos(t)+c*cos(p)) sigma = (2-alpha)/(1+(1-c)*cos(p)+c*cos(t)) c0 = P( p0.x + rho*( (p1.x-p0.x)*cos(t)-(p1.y-p0.y)*sin(t))/(3*self.t0) , p0.y + rho*( (p1.y-p0.y)*cos(t)+(p1.x-p0.x)*sin(t))/(3*self.t0) ) c1 = P( p0.x + (p1.x-p0.x)*(1-sigma*cos(p)/(3*self.t1)) - (p1.y-p0.y)*sigma*sin(p)/(3*self.t1) , p0.y + (p1.y-p0.y)*(1-sigma*cos(p)/(3*self.t1)) + (p1.x-p0.x)*sigma*sin(p)/(3*self.t1) ) # only change if we were given an angle if type(self.c0) in [type(10), type(10.0)]: self.c0 = c0 if type(self.c1) in [type(10), type(10.0)]: self.c1 = c1 def create_arc(self, centre): """ Create an arc """ return None def create_bezier(self, p0, p1): """ Create a bezier curve """ c0 = self.c0 c1 = self.c1 # fix up relative points: if isinstance(c0, R): c0 = p0+c0 if isinstance(c1, R): c1 = p1+c1 return _bezier(p0, c0, c1, p1) # ------------------------------------------------------------------------- # Path object # ------------------------------------------------------------------------- class Path(AffineObj): """ A Path """ fg = Color(0) bg = None linewidth = None linecap = None linejoin = None miterlimit = None dash = None closed = 0 #ArrowHead instances: heads = [] #_pathlettes=[] def __init__(self, *path, **options): self._pathlettes = [] AffineObj.__init__(self, **options) path = list(path) # so we can use pop # first point must be, well a point assert isinstance(path[0], P) # if the last point of a closed path has been # skipped, add it now if not isinstance(path[-1], P) and self.closed: path.append(path[0]) cp = path.pop(0) # current point while 1: if len(path) == 0: break p = path.pop(0) if isinstance(p, R): p = cp+p self._pathlettes.append(_line(cp, p)) cp = p elif isinstance(p, P): self._pathlettes.append(_line(cp, p)) cp = p elif isinstance(p, C): c = p # Get the next point p = path.pop(0) if isinstance(p, R): p = cp+p self._pathlettes.append(c.curve(cp, p)) cp = p else: raise ValueError, "Unknown path control" # now add arrowheads heads = [] for head in self.heads: # make a copy so this class has it's own instance h=head.copy() # line colors overide arrow they blend # (how would a user overide this?) if options.has_key('fg'): h(fg=options['fg']) h(bg=options['fg']) # position it appropriately: h.__init__(tip=self.P(head.pos), angle=self.tangent(head.pos).arg) heads.append(h) self.heads = heads def bbox(self): """ Return the bounding box of the Path """ b = Bbox() for pl in self._pathlettes: b.union(pl.bbox(self.itoe)) # take into account extent of arrowheads for ar in self.heads: b.union(ar.bbox()) return b def _get_start(self): """ return start point """ return self.itoe(self._pathlettes[0].start) start = property(_get_start) def _get_end(self): """ return end point """ return self.itoe(self._pathlettes[-1].end) end = property(_get_end) def _get_length(self): """ Get the length of the path """ l = 0 for pl in self._pathlettes: l += pl.length return l length = property(_get_length) def P(self, f): ''' Return the point at fraction f along the path ''' assert 0 <= f <= 1 Lf = self.length*f L = 0 for pl in self._pathlettes: l = pl.length if L+l >= Lf: break L += l return self.itoe(pl.P((Lf-L)/float(l))) def tangent(self, f): ''' return tangent (unit vector) of curve at fraction f of length ''' assert 0 <= f <= 1 Lf = self.length*f L = 0 for pl in self._pathlettes: l = pl.length if L+l >= Lf: break L += l return U(self.itoe(U(pl.tangent((Lf-L)/float(l)))).arg) def body(self): """ Return the postscript body of the Path """ out = cStringIO.StringIO() if self.linewidth is not None: out.write("%g setlinewidth "%self.linewidth) if self.linecap is not None: out.write("%d setlinecap "%self.linecap) if self.linejoin is not None: out.write("%d setlinejoin "%self.linejoin) if self.miterlimit is not None: out.write("%f setmiterlimit "%self.miterlimit) if self.dash is not None: out.write(str(self.dash)) out.write('newpath %s moveto\n'%self._pathlettes[0].start) for pl in self._pathlettes: out.write(pl.body()) if self.closed: out.write(' closepath ') if self.bg is not None: out.write("gsave %s fill grestore\n"%self.bg) if self.fg is not None: out.write("%s stroke\n"%self.fg) for head in self.heads: out.write(str(head)) return out.getvalue() # ------------------------------------------------------------------------- # Arrow objects # ------------------------------------------------------------------------- class Arrow(Path): ''' Path object with arrow at end ... just for convenience ''' #heads = [defaults.arrowhead(pos=1)] heads = [ArrowHead(1)] class DoubleArrow(Path): """ Path object with arrow at both ends ... just for convenience """ #heads = [defaults.arrowhead(pos=1),defaults.arrowhead(pos=1,reverse=1)] heads = [ArrowHead(1), ArrowHead(0, reverse=1)] # vim: expandtab shiftwidth=4: pyscript-0.6.1/pyscript/render.py0000644000175000001440000000504010401101572016570 0ustar cochraneusers# Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # $Id: render.py,v 1.31 2006/02/28 17:08:10 paultcochrane Exp $ """ Create the actual postscript """ __revision__ = '$Revision: 1.31 $' from pyscript.defaults import defaults from pyscript.groups import Eps, Page, Pages from pyscript.vectors import P # --------------------------------------------------------------------------- # Create the actual postscript # --------------------------------------------------------------------------- def render(*objects, **options): ''' render the file @param objects: list of objects to render @type objects: list @param options: dictionary of options to use when rendering @type options: dict ''' if not options.has_key('file'): raise LookupError, "No filename given" out = open(options['file'], "w") if len(objects) == 0: raise ValueError, "No objects to render!" elif len(objects) == 1: if isinstance(objects[0], Eps): obj = objects[0] elif isinstance(objects[0], Pages): obj = objects[0] elif isinstance(objects[0], Page): # wrap in Pages environment obj = apply(Pages, objects) else: # assume it's an eps and wrap obj = apply(Eps, objects) else: if isinstance(objects[0], Page): # assume we have pages obj = apply(Pages, objects) else: # we have an eps obj = apply(Eps, objects) if isinstance(obj, Eps): # Make the sw corner (0,0) since some brain-dead previewers # don't understand bounding-boxes x1, y1, x2, y2 = obj.bbox_pp() obj.move( (P(0, 0) - P(x1, y1))/float(defaults.units) ) obj.write(out) out.close() print "Wrote", options['file'] # vim: expandtab shiftwidth=4: pyscript-0.6.1/pyscript/vectors.py0000644000175000001440000003401510423157460017015 0ustar cochraneusers# Copyright (C) 2002-2006 Alexei Gilchrist and Paul Cochrane # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # $Id: vectors.py,v 1.26 2006/04/24 14:22:40 paultcochrane Exp $ """ Vectors """ __revision__ = '$Revision: 1.26 $' # Originally written by Mario Chemnitz (ucla@hrz.tu-chemnitz.de) # Cut back and reworked to suit pyscript from math import sqrt, sin, cos, pi, atan2 from pyscript.base import PsObj class Matrix: ''' 2x2 matrix class ''' type = 'Matrix' def __init__(self, a=0.0, b=0.0, c=0.0, d=0.0): # / a b \ # \ c d / self.data = [a, b, c, d] def body(self): """ Return the postscript body """ d = self.data #NB postscript uses transpose return "[%g %g %g %g]" % (d[0], d[2], d[1], d[3]) def __add__(self, o): if isinstance(o, Matrix): return Matrix(self[0]+o[0], self[1]+o[1], self[2]+o[2], self[3]+o[3]) else: raise TypeError, "non-matrix (%s) in matrix addition"\ % type(o) __radd__ = __add__ def __sub__(self, o): if isinstance(o, Matrix): return Matrix(self[0]-o[0], self[1]-o[1], self[2]-o[2], self[3]-o[3]) else: raise TypeError, "non-matrix (%s) in matrix subtraction"\ % type(o) def __rsub__(self, o): if isinstance(o, Matrix): return Matrix(o[0]-self[0], o[1]-self[1], o[2]-self[2], o[3]-self[3]) else: raise TypeError, "non-matrix (%s) in right matrix subtraction"\ % type(o) def __neg__(self): return Matrix(-self[0], -self[1], -self[2], -self[3]) def __len__(self): return 4 def __getitem__(self, i): if i < (len(self)): return self.data[i] else: raise IndexError, "index reading error" def __setitem__(self, i, other): if i < (len(self)): self.data[i] = other else: raise IndexError, "index writing error" # reads entry from row i and column j: -> data element def __getslice__(self, i, j): if i<2 and j<2: return self.data[2*i+j] else: raise IndexError, "index reading error" # writes matrix element to row i and column j def __setslice__(self, i, j, wert): if i<2 and j<2: self.data[2*i+j] = wert else: raise IndexError, "index writing error" #E matrix multiplication (self*other): -> matrix or vector def __mul__(self, other): if isinstance(other, Matrix): tmp = Matrix() for i in range(2): for j in range(2): for k in range(2): tmp[i:j] = tmp[i:j]+self[i:k]*other[k:j] return tmp elif isinstance(other, P): tmp = P() for i in range(2): for k in range(2): tmp[i] = tmp[i]+self[i:k]*other[k] return tmp elif isinstance(other, (int, float)): tmp = Matrix() for i in range(len(self)): tmp[i] = self[i]*other return tmp else: raise TypeError, "m-n-error in matrix multiplication" # E operand for matrix multiplication is on the right (other*self): # -> matrix def __rmul__(self, other): if isinstance(other, Matrix): tmp = Matrix() for i in range(len(self)): tmp[i] = other*self[i] return tmp else: raise TypeError, "error in right matrix multiplication" def det(self): """ Return the matrix determinant """ return self[0]*self[3]-self[1]*self[2] def inverse(self): """ Find the inverse of the matrix """ d = self.det() if d == 0 : raise ValueError, "determinant=0, cannot calc inverse" return Matrix(self[3], -self[1], -self[2], self[0])/float(d) def __div__(self, n): # only for numbers! assert isinstance(n, (int, float)), \ "only division by numbers implemented" n = float(n) tmp = Matrix() for i in range(len(self)): tmp[i] = self[i]/n return tmp # ------------------------------------------------------------------------- # P = Vector (relative to origin) ie a point # ------------------------------------------------------------------------- class P(PsObj): """ A Vector (or point) operations always return type 'P' vectors """ point = [0, 0] def __init__(self, x = 0.0, y = 0.0, **options): self.point = [x, y] PsObj.__init__(self, **options) def __len__(self): return 2 def __getitem__(self, i): if i < (len(self)): return self.point[i] else: raise IndexError, "index reading error" def __setitem__(self, i, other): if i < (len(self)): self.point[i] = other else: raise IndexError, "index writing error" def __add__(self, o): if isinstance(o, P): return P(self[0]+o[0], self[1]+o[1]) elif isinstance(o, (float, int)): return P(self[0]+o, self[1]+o) else: raise TypeError, "non-vector (%s) in vector addition"\ % type(o) __radd__ = __add__ def __sub__(self, o): if isinstance(o, P): return P(self[0]-o[0], self[1]-o[1]) else: raise TypeError, "non-vector (%s) in vector subtraction"\ % type(o) def __rsub__(self, o): if isinstance(o, P): return P(o[0]-self[0], o[1]-self[1]) else: raise TypeError, "non-vector (%s) in right vector subtraction"\ % type(o) def __neg__(self): return P(-self[0], -self[1]) def __mul__(self, o): if isinstance(o, P): # Dot product return self[0]*o[0]+self[1]*o[1] elif isinstance(o, Matrix): raise TypeError, "other must not be a matrix" else: return P(self[0]*o, self[1]*o) def __rmul__(self, o): return P(self[0]*o, self[1]*o) def body(self): """ return postscript as string """ return "%g uu %g uu" % tuple(self) def __div__(self, o): # only for numbers! if isinstance(o, (float, int)): n = float(o) return P(self[0]/n, self[1]/n) else: raise TypeError, "Only division by numbers implemented" def _get_x(self): """ Get the x coordinate """ return self[0] x = property(_get_x, None) def _get_y(self): """ Get the y coordinate """ return self[1] y = property(_get_y, None) def _get_length(self): ''' Return length of this vector (distance from origin to point) ''' return sqrt(self*self) length = property(_get_length, None) def _get_U(self): ''' Return unit vector pointing in same direction ''' return self/float(self.length) U = property(_get_U, None) def _get_arg(self): """ Get angle (argument) of the vector """ return atan2(self.x, self.y)/pi*180 arg = property(_get_arg, None) def cross(self, other): """ Calculate the cross product of two vectors """ if isinstance(other, P): tmp = P() tmp[0] = self[1]*other[2]-self[2]*other[1] tmp[1] = self[2]*other[0]-self[0]*other[2] return tmp else: raise TypeError, "non-vector (%s) in cross product" % type(other) # ------------------------------------------------------------------------- # R = Vector (relative to last point) function dependent! # ------------------------------------------------------------------------- class R(P): """ Relative point vector """ def __add__(self, o): if isinstance(o, (float, int)): return R(self[0]+o, self[1]+o) else: return P.__add__(self, o) def __mul__(self, o): if isinstance(o, (float, int)): return R(self[0]*o, self[1]*o) else: return P.__mul__(self, o) def __rmul__(self, o): return R(self[0]*o, self[1]*o) def __div__(self, o): # only for numbers! if isinstance(o, (float, int)): return R(self[0]/float(o), self[1]/float(o)) else: raise TypeError, "Only division by numbers implemented" def __neg__(self): return R(-self[0], -self[1]) # ------------------------------------------------------------------------- # Unit vector # ------------------------------------------------------------------------- def U(angle, r = 1): ''' return a relative vector of length r in the given direction ''' x = r*sin(angle/180.0*pi) y = r*cos(angle/180.0*pi) return R(x, y) # ------------------------------------------------------------------------- # Unit vector # ------------------------------------------------------------------------- def Cusp(p1, p2): ''' Alignment aid returns P(p1.x, p2.y) ''' return P(p1[0], p2[1]) # ------------------------------------------------------------------------- def Identity(p): ''' function which does nothing ''' # do it this way so we return a copy return P(p[0], p[1]) # ------------------------------------------------------------------------- class Bbox(object): """ A Rectangular area defined by sw corner and width and height. which specifies a boundingbox. Has the same attributes (but read only) as Area:: nw--n--ne | | w c e | | sw--s--se """ sw = None width = 0 height = 0 def __init__(self, **options): ''' can pass a dict of atributes to set ''' object.__init__(self) # this will raise an exception if class doesn't have attribute # I think this is good. prop = [] for key, value in options.items(): if isinstance(eval('self.__class__.%s'%key), property): prop.append((key, value)) else: self.__class__.__setattr__(self, key, value) def _get_n(self): """ Get the "north" point """ return self.sw+P(self.width/2., self.height) n = property(_get_n) def _get_ne(self): """ Get the "north-east" point """ return self.sw+P(self.width, self.height) ne = property(_get_ne) def _get_e(self): """ Get the "east" point """ return self.sw+P(self.width, self.height/2.) e = property(_get_e) def _get_se(self): """ Get the "south-east" point """ return self.sw+P(self.width, 0) se = property(_get_se) def _get_s(self): """ Get the "south" point """ return self.sw+P(self.width/2., 0) s = property(_get_s) def _get_w(self): """ Get the "west" point """ return self.sw+P(0, self.height/2.) w = property(_get_w) def _get_nw(self): """ Get the "north-west" point """ return self.sw+P(0, self.height) nw = property(_get_nw) def _get_c(self): """ Get the "centre" point """ return self.sw+P(self.width/2., self.height/2.) c = property(_get_c) def is_set(self): ''' Is the bounding box set with a value? ''' if self.sw is None: return 0 else: return 1 def union(self, bbox, itoe = Identity): ''' Expand this boundingbox to include bbox, passing bbox through itoe if supplied ''' if not bbox.is_set(): # if the supplied bbox is not set we have # nothing to do return ne = itoe(bbox.ne) sw = itoe(bbox.sw) nw = itoe(bbox.nw) se = itoe(bbox.se) xmin = min(ne[0], nw[0], se[0], sw[0]) xmax = max(ne[0], nw[0], se[0], sw[0]) ymin = min(ne[1], nw[1], se[1], sw[1]) ymax = max(ne[1], nw[1], se[1], sw[1]) #if self.is_set(): #x1=min(self.sw[0],sw[0]) #y1=min(self.sw[1],sw[1]) #x2=max(self.ne[0],ne[0]) #y2=max(self.ne[1],ne[1]) #self.sw=P(x1,y1) #self.width=x2-x1 #self.height=y2-y1 #else: #self.sw=sw #self.width,self.height=ne-sw if self.is_set(): x1 = min(self.sw[0], xmin) y1 = min(self.sw[1], ymin) x2 = max(self.ne[0], xmax) y2 = max(self.ne[1], ymax) self.sw = P(x1, y1) self.width = x2-x1 self.height = y2-y1 else: self.sw = P(xmin, ymin) self.width = xmax-xmin self.height = ymax-ymin # vim: expandtab shiftwidth=4: pyscript-0.6.1/pyscript/version.py0000644000175000001440000000166410401101573017007 0ustar cochraneusers# Copyright (C) 2003-2006 Alexei Gilchrist and Paul Cochrane # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # $Id: version.py,v 1.7 2006/02/28 17:08:11 paultcochrane Exp $ """ The PyScript version """ __revision__ = '$Revision: 1.7 $' version = "0.6.0" # vim: expandtab shiftwidth=4: pyscript-0.6.1/BUGS0000644000175000001440000000074007713324620013564 0ustar cochraneusers- gv doesn't preview postscript files with nonstandard paper sizes properly. eg "screen" landscape will have the right part clipped. Workaround: use the -dFIXEDMEDIA switch in the gs options - using LaTeX's color package will disable the color setting in TeX() as the latex color changes happen within the code that TeX() produces. Workaround: if you need to use the color package you will have to do all the color setting from within latex (for the TeX objects) pyscript-0.6.1/CHANGES0000644000175000001440000001256310441274371014101 0ustar cochraneusers0.6.1 ~~~~~ - Added documentation source files to distribution. 0.6 ~~~ - Extended and rewrote sections of the Talk() class of the 'presentation' library (note that this is different to the 'present' library). Also more completely documented the class in the user manual - Implemented the use of user-defined styles for talks - Complete rewrite of the Poster() class of the 'presentation' library; now has a more similar interface to that of the Talk() class of the same library. Also documented the class in the user manual - Implemented the use of user-defined styles for posters - More completely implemented the 'electronics' object library; documented the objects in the user manual - Extended the 'optics' object library and documented its usage in the manual - Added some examples of usage of the 'optics' library - Many changes in 'qi' (quantum information) library. No longer causes error at installation :-) - Added Arrow() convenince class ... a Path with a predefined arrowhead - integrated Path and Arrowhead ... path now has a heads attribute which is a list of arrowheads to draw on path - added a tangent() method to Path that returns a unit vector tangent to the path at a particular point - code clean ups ... and documentation - added an Arrowhead class - added an iscale attribute to TeX to set initial scale (only time it's used) makes it easy to subclass at a given scale. - Added HAlign and VAlign convenience functions - Align is now a class that inherits from Group - no longer supports anchor attribute (not sure how useful this was esp as objects can now be appended) first alignable object added forms anchor. - the change seems mostly transparent but may break some things - Added a Dash() object to describe postscript dashes - fixed up examples and added a few others - Dot() now returns a bounding box - objects that return null BBox()'s are ignored in Alignment operations This was chiefly to accomodate a Pause() object in talks - Fixed bug with move and rotations commuting (thanks Adrian) - curves can now be given just a direction at the end points (eg C(45,90)), a "natural" curve will be chosen automatically. This is the first half of the algorithm that Metapost uses which is really nice. (next part is to choose curvature automatically in unspecified curves) - last point of a closed path can be skipped (added automatically) - P now has 'arg' attribute (in degrees), return angle of P relative to origin - there is now a --version argument when running PyScript 0.5 ~~~ - rewrote Path object: the internals have completely changed. There have been some incompatible changes with previous versions but its now much closer to what I envisaged for the object Changes: - C() no longer takes numerical arguments - Path() no longer sublasses Area (this doesn't make sense really) so the points n,ne,e ... etc are not available for this object use either bbox() method or group and Area object with the path Additions: - Path takes 'relative' points R(), these are the same as P() but will be intepreted as relative to last point. - C() takes relative control points with R(). The first is relative the start the second to the end of the curve - path.length returns the length of the path (local co-ord system) - path.P(f) returns the point on the curve at fraction f of it's length - Finally added some docs for the Path object - fixed bug with defaults for linewidth etc not being taken up (thanks Marcus) - Color() can now take a Hex string, eg "#FF00FF", must start with a '#' - object reference returned from group's append, insert and reverse This makes for convenient one liners - Group() now has a reverse() function - Pages now produces global BoundinBox and Orientation comments - Fixed minor bug in Align, when passed single object 0.4 ~~~ - Rectangle now can have rounded corners (r=...) - Rectangle can have an Area or Bbox in its contruction to set size and position eg r=Rectangle(g.bbox()) - Added a reflect() method to AffineObj - Added a shear() method tho AffineObj - Added an Eps object ... produces a self-contained eps, and this object is used to generate the actual eps. You can also nest them if you wanted to. - Eps output now conforms to DSC 3.0! - rewrote render to use Eps. - Added Page() and Pages() objects .. pyscript can now do multi-page postscript (or A0 posters etc), which also conforms to DSC 3.0. - Fixed some bugs with Text() handling of fonts and attributes changes - Dot can now take x,y argument instead of point - scale() can take a single number for both axes 0.3 ~~~ - Start of a Page() object for ps (as opposed to eps) - Pyscript now redirects stderr to pyscript.log. and gives info about what's going on etc etc, some basic command line switches for debugging - Lots of changes to TeX's internals - default units now cm - group has insert function - Paper now takes an orientation flag (portrait or landscape) - showpage always written to EPS file ... should be able to send file straight to printer - more of the docs written - E() has been renamed U() (unit vector) - Epsf() now complies with spec, takes an initial width/height argument for scaling - added Align() and Distribute() functions - added a presentation library for posters and talks - munched some bugs 0.2 ~~~ - First public release 0.1 ~~~ - Hazy past with lots of experimentation ... never released pyscript-0.6.1/LICENSE0000644000175000001440000003545107452716443014125 0ustar cochraneusers GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS pyscript-0.6.1/MANIFEST0000644000175000001440000000611310441273156014231 0ustar cochraneusersBUGS CHANGES LICENSE MANIFEST README TODO setup.py bin/pyscript contrib/styles/ccp2004-poster.py contrib/styles/greenbullet.eps contrib/styles/prosper-darkblue.py contrib/styles/redbullet.eps contrib/styles/yellowbullet.eps doc/examples/Makefile doc/examples/align.py doc/examples/align2.py doc/examples/atom.py doc/examples/bifurcate.py doc/examples/ccp2004_poster.py doc/examples/detector.py doc/examples/distribute.py doc/examples/div_con.py doc/examples/fabry-perot_pdh.py doc/examples/flower_algorithm.py doc/examples/mach-zehnder.py doc/examples/michelson-morely.py doc/examples/qcirc.py doc/examples/sagnac.py doc/examples/sphere.py doc/examples/stateSwap.py doc/examples/teleport.py doc/examples/tex.py doc/examples/tutorial.py doc/examples/twoqubitQST.py doc/manual/Makefile doc/manual/class_structure.pdf doc/manual/libpresent.tex doc/manual/libpresentation.tex doc/manual/libqi.tex doc/manual/pyscript.bib doc/manual/pyscript.pdf doc/manual/pyscript.tex doc/manual/pyscriptElectronics.tex doc/manual/pyscriptOptics.tex doc/manual/pyscript_defs.tex doc/manual/electronics/AndGate.pdf doc/manual/electronics/Capacitor.pdf doc/manual/electronics/NandGate.pdf doc/manual/electronics/NorGate.pdf doc/manual/electronics/NotGate.pdf doc/manual/electronics/NxorGate.pdf doc/manual/electronics/OrGate.pdf doc/manual/electronics/Resistor.pdf doc/manual/electronics/XorGate.pdf doc/manual/figs/fig_area.pdf doc/manual/figs/fig_circle.pdf doc/manual/figs/fig_circle_eg1.pdf doc/manual/figs/fig_circle_eg2.pdf doc/manual/figs/fig_colorchart.pdf doc/manual/figs/fig_path.pdf doc/manual/figs/fig_path_eg.pdf doc/manual/figs/fig_position_eg1.pdf doc/manual/figs/fig_position_eg2.pdf doc/manual/figs/fig_rectangle.pdf doc/manual/figs/fig_tex_eg.pdf doc/manual/figs/fig_text_kerning.pdf doc/manual/figs/logo.pdf doc/manual/figs/tutorial.pdf doc/manual/optics/BSBox.pdf doc/manual/optics/BSLine.pdf doc/manual/optics/Detector.pdf doc/manual/optics/FreeSpace.pdf doc/manual/optics/LambdaPlate.pdf doc/manual/optics/Laser.pdf doc/manual/optics/Lens.pdf doc/manual/optics/Mirror.pdf doc/manual/optics/Modulator.pdf doc/manual/optics/PhaseShifter.pdf doc/manual/optics/fabry-perot_pdh.pdf doc/manual/optics/mach-zehnder.pdf doc/manual/optics/michelson-morely.pdf doc/manual/optics/sagnac.pdf pyscript/__init__.py pyscript/afm.py pyscript/arrowheads.py pyscript/base.py pyscript/defaults.py pyscript/groups.py pyscript/objects.py pyscript/path.py pyscript/render.py pyscript/vectors.py pyscript/version.py pyscript/fonts/__init__.py pyscript/fonts/courier.py pyscript/fonts/courier_bold.py pyscript/fonts/courier_boldoblique.py pyscript/fonts/courier_oblique.py pyscript/fonts/helvetica.py pyscript/fonts/helvetica_bold.py pyscript/fonts/helvetica_boldoblique.py pyscript/fonts/helvetica_oblique.py pyscript/fonts/symbol.py pyscript/fonts/times_bold.py pyscript/fonts/times_bolditalic.py pyscript/fonts/times_italic.py pyscript/fonts/times_roman.py pyscript/fonts/zapfdingbats.py pyscript/lib/__init__.py pyscript/lib/electronics.py pyscript/lib/optics.py pyscript/lib/present.py pyscript/lib/presentation.py pyscript/lib/qi.py pyscript/lib/quantumcircuits.py pyscript-0.6.1/README0000644000175000001440000000343710422525202013755 0ustar cochraneusers =============== pyscript =============== -------------------------------------------------------------------- Summary -------------------------------------------------------------------- Pyscript is a set of modules and scripts for python that facilitate the creation of high-quality postscript diagrams. The diagrams are scripted rather than drawn. See http://pyscript.sourceforge.net -------------------------------------------------------------------- Installation -------------------------------------------------------------------- Pyscript is just a python module ... treat it as any other module * Global Installation: As root use > python setup.py install This will install the files, in the appropriate place for your python distribution. This will be something like e.g. /usr/lib/python2.2/site-packages/ * Local installation: You can supply the base directory using > python setup.py install --home= which will install the files in /lib/python/ for more help and options use > python setup.py install --help also see http://www.python.org/doc/current/inst/ for more details on using the distutils package * By hand: copy all the files in the pyscript directory to somewhere in your python path eg cp -r pyscript ~/lib/python/ * RPM package: Install using your favourite rpm installation tool, or from root issue a command like: > rpm -i pyscript-.rpm (where is the version string of the rpm file). * DEB package: Check to make sure that the tetex-base and python packages are installed (just in case), and then use dpkg in the usual manner, e.g. > dpkg -i pyscript_.deb (where is the verstion string of the .deb package). pyscript-0.6.1/TODO0000644000175000001440000000000107703715531013563 0ustar cochraneusers pyscript-0.6.1/setup.py0000644000175000001440000000131210441270206014577 0ustar cochraneusers#!/usr/bin/env python from distutils.core import setup a=setup(name="pyscript", version="0.6.1", description="Postscript Graphics with Python", author="Alexei Gilchrist and Paul Cochrane", author_email="aalexei@users.sourceforge.net, paultcochrane@users.sourceforge.net", maintainer="Alexei Gilchrist and Paul Cochrane", maintainer_email="aalexei@users.sourceforge.net, paultcochrane@users.sourceforge.net", url="http://pyscript.sourceforge.net", license="GPL", keywords="presentation scientific/engineering graphics drawing", platforms="OS Independent", packages=['pyscript','pyscript.lib','pyscript.fonts'], scripts=['bin/pyscript'], ) pyscript-0.6.1/PKG-INFO0000644000175000001440000000057610441274723014205 0ustar cochraneusersMetadata-Version: 1.0 Name: pyscript Version: 0.6.1 Summary: Postscript Graphics with Python Home-page: http://pyscript.sourceforge.net Author: Alexei Gilchrist and Paul Cochrane Author-email: aalexei@users.sourceforge.net, paultcochrane@users.sourceforge.net License: GPL Description: UNKNOWN Keywords: presentation scientific/engineering graphics drawing Platform: OS Independent