home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 618b.lha / MathPlotter_v2.0 / mathplotter.hlp < prev    next >
Text File  |  1991-10-12  |  22KB  |  463 lines

  1. ***************************************************************************
  2.                    MARK'S MATH PLOTTER - V2.0 - HELP FILE
  3. ***************************************************************************
  4. CONTENTS:
  5. I.    NEW FEATURES IN VERSION 2.0
  6. II.   SYSTEM AND USER REQUIREMENTS
  7. III.  BACKGROUND
  8. IV.   INSTRUCTIONS - GENERAL
  9. V.    INSTRUCTIONS - SPECIFIC MODULES REACHED FROM THE MAIN MENU
  10. VI.   EXAMPLES TO TRY
  11. VII.  PRINTING GRAPHS AND SAVING GRAPHS AS IFF FILES
  12. VIII. FILES INCLUDED ON THE ORIGINAL DISK
  13. ***************************************************************************
  14.  
  15.  
  16.  
  17. I.   NEW FEATURES IN VERSION 2.0
  18.  
  19. **** VERSION 2.0 IS MORE THAN  TWICE  AS  POWERFUL  AS ITS PREDECESSOR.  The
  20. parser has been SIGNIFICANTLY EXPANDED so as to recognize 34, rather than 14
  21. mathematical functions.  (SEE LIST IN SECTION IV, PART F)
  22.  
  23. **** Requesters now come filled in with  default values for the math novice.
  24. Only the  function  has  to  be  entered  to  get  started.    In  addition,
  25. REQUESTERS HAVE MEMORY, that is they always remember their last pass values.
  26. This is handy when you only want to  change  one or two parameters at a time
  27. as you draw.  Every pass now  takes  the  user  immediately  to the function
  28. requester(s).
  29.  
  30. **** Up to 30 constants per expression are now allowed, rather than 24.
  31.  
  32. **** I also felt that  eventually  someone  would  want  to enter a function
  33. longer than what would fit  on  one  line,  so  now  function requesters are
  34. either 150 or 225 characters long depending on available screen space.
  35.  
  36. **** For those of you that know about parsing,  up to 75 tokens and 75 quads
  37. per expression are  now  allowed,  ALLOWING  MORE  COMPLICATED  MATHEMATICAL
  38. EXPRESSIONS.
  39.  
  40. **** Feeling that 2dgrapher would get  the  most use, I put a graphing speed
  41. requester on 2dgrapher.  Use  it  to  speed  up  the  graphing.  Very little
  42. accuracy will be sacrificed.
  43.  
  44. **** Some effort was also  put  into  placing  the  triad  on the graph more
  45. accurately in 3dplotter and hidden3dplot.
  46.  
  47.  
  48.  
  49. II.  SYSTEM AND USER REQUIREMENTS
  50.  
  51.      System requirements include an Amiga with  one megabyte memory minimum.
  52. Software developed under Workbench 1.3.   Compatible with Workbench 2.0 with
  53. HiRes screen 640x200.  A math  coprocessor  or  accelerator chip is optional
  54. and helpful, but not necessary.  Program will multi-task.  Use public domain
  55. utility ScreenX to capture graphs as IFF files.
  56.      User requirements: basic  knowledge  of  function  plotting  in two and
  57. three dimensions; knowledge  of  the  built  in  functions,  and mathematics
  58. beyond algebra.
  59.  
  60.  
  61.  
  62. III. BACKGROUND
  63.  
  64.      The idea for Mark's MathPlotter came about when I was teaching calculus
  65. at a junior college.  Knowing  the  graphics  capabilities  of  the Amiga, I
  66. decided to use my Amiga  as  an  electronic  chalkboard  to  draw  graphs of
  67. functions that would have  been  nearly  impossible  to draw by hand.    The
  68. computer could be used  in  conjunction  with  the  new calculators that can
  69. graph, since most students can at least  afford the calculators.  Hopefully,
  70. some students would see the advantage of using an Amiga during their college
  71. years and go buy one.
  72.  
  73.      I looked to see what software was  available  for  the Amiga.  I bought
  74. Doug's Math Aquarium, and examined  True  Basic's  packages, but they lacked
  75. some of the features I  needed  for  teaching,  such  as  drawing  solids of
  76. revolution, graphing polar functions,  etc,  and they were rather expensive.
  77. So, I decided to put my M.A. in Mathematics  and my M.S. in Computer Science
  78. to work and write my own program.  Modules have been continually added since
  79. the original two, 2DGRAPHER and POLAR.  After many years of development (off
  80. and on), I have arrived at the  current  eight modules.  A recursive descent
  81. predictive parser for function parsing,  along with compilation of the code,
  82. has reduced the rendering time considerably.
  83.  
  84.      Mark's MathPlotter is unique in many  respects.   It has the ability to
  85. zoom in on graphs in the Cartesian  and  polar  planes, which can be used to
  86. find points of intersection  to  6-7  place  accuracy.   It  can  be used to
  87. generate wire framed solids  of  revolution,  a  feature for which one would
  88. probably have to go to a CAD package  to  get.  In the 3d rendering you have
  89. the choice of whether you  want  hidden  surface  removal  or not.  The user
  90. interface is friendly,  with  help  available  for  all  input requester and
  91. default values available  for  most  input  requesters.   Functions  use the
  92. standard BASIC notation which is familiar to many.
  93.  
  94.      If you are a first time  user  please  read  over  the  instructions to
  95. follow.
  96.  
  97.  
  98.  
  99. IV.  INSTRUCTIONS - GENERAL
  100.  
  101. SPECIAL NOTE TO CLI USERS:
  102.      You MUST set the stack size to  allow  for  the  static arrays that are
  103. used.  The command I use is 'STACK  32000'.   Do this BEFORE entering one of
  104. 'run mpintroV2.0' or 'run  mathplotterV2.0'  which get you into the program.
  105. If you  go lower  than  '32000'  however,  or  you'll  probably  get a guru.
  106. Workbench users will not have to worry  about this as the stack size is read
  107. from the .info files.
  108.  
  109. ALL USERS:
  110.      To start the program from the  workbench  double click on either of the
  111. icons, 'MPIntroV2.0' or 'MathPlotterV2.0'.  To start it from the CLI type in
  112. either 'run MPIntroV2.0' or 'run  MathPlotterV2.0'  AFTER  setting the stack
  113. size as shown above.
  114.  
  115.      MPIntroV2.0 has some information screens before going to the main menu.
  116. MathPlotterV2.0 takes you immediately  to  the main menu, from which you can
  117. select one of ten items by clicking once  in the box of your choice with the
  118. left mouse button or hit the key  indicated  in each selection.  There is an
  119. addition help screen on 'What  are  valid  functions?'  which can be reached
  120. from the main menu.
  121.  
  122.      Each module will begin with a screen  with  input  requesters.  You can
  123. only put in input into a box when the box is  outlined in gold.  Upon module
  124. startup, all requesters  are  filled  in  with  default  values,  except the
  125. function requester. After entering the  function, if you decide some changes
  126. are necessary, you can  randomly  make  changes  to  the various parameters.
  127. After entering the function, you'll see two or more boxes at the bottom.  To
  128. make changes to your input, click on the  left one ('CLICK HERE TO CLEAR AND
  129. REDO INPUT') and then click on a requester  to change its value.  Change the
  130. input, hit enter, and then  click  on  another  requester  if  you have more
  131. changes.  You can continue to select  requesters  in this fashion until your
  132. happy with all  the  values.   By  just  hitting  enter  after  selecting  a
  133. requester, you can retain its previous  value.  When you're satisfied, click
  134. on the right box at the bottom ('CLICK HERE TO CONTINUE AND GRAPH').
  135.  
  136.      Each requester, except for the  function  requester,  has an associated
  137. default or last pass value.  To use it, just hit enter at the requester.  If
  138. you are making  changes  to  the  data,  the  requesters  will  remember the
  139. previous values it used.   ALL  REQUESTERS  IN  V2.0 NOW REMEMBER THEIR LAST
  140. PASS  VALUES.   UPON  MODULE  START,  ALL  PARAMETERS  ARE  FILLED  IN  WITH
  141. REASONABLE DEFAULTS.  HOWEVER, YOU MUST  AT LEAST ENTER A FUNCTION.  This is
  142. a real time saver if you are redrawing the same graph over and over again.
  143.  
  144.      Each input requester has help which is  available by hitting the 'HELP'
  145. key when the requester is outlined  in  gold.   A default value is available
  146. for most requesters, except the function requesters, by just hitting 'ENTER'
  147. in the requester.  The default value and well as any special restrictions on
  148. the current input value can be  discovered  by hitting the 'HELP' key.  Each
  149. input requester is expecting you to hit certain keys or it will beep at you.
  150. For instance, there are requesters for positive integers which expect you to
  151. only hit the keys 0-9.  For integers  in  general, you can begin with '-' or
  152. 0-9 in the first position, followed by  the keys 0-9.  Floating point (real)
  153. values have the same valid keys as  integers,  with  the addition of the '.'
  154. key.  Function requesters allow you to use all the keys, but if you input an
  155. invalid function you'll  probably  get  an  error  message from the function
  156. parser, and you'll have to start over.
  157.  
  158.      All requesters allow you to edit your input with the delete, backspace,
  159. right and left arrow  keys,  before  hitting  return  to  move on.  Don't be
  160. afraid to explore with different values.
  161.  
  162.  
  163.  
  164. V.   INSTRUCTIONS - SPECIFIC MODULES REACHED FROM THE MAIN MENU
  165.  
  166. NOTE: MAIN MENU CHOICES WILL BE INDICATED BESIDE THE MODULE NAME
  167.  
  168. A.   [1] 2DGRAPHER AND [2] POLAR
  169.  
  170.      These can be  used  for  drawing  functions  of  one  variable  in  the
  171. rectangular or polar  coordinate  systems  respectively.   Both modules have
  172. similar input requesters which are described below.
  173.  
  174. UNIT LENGTH:  Unit length refers to  the  number  of pixels for each unit in
  175. the graph.  2DGRAPHER has one for x and y, POLAR has just one but also has a
  176. requester for  increments  which  tells  it  the  number  of degrees between
  177. samplings of the function.  Generally, the lower the number the smoother the
  178. drawing (and slower). (integer, >0)
  179.  
  180. COORDINATES AT THE CENTER OF THE  SCREEN:   These help position the graph on
  181. the screen.  Most of the time 0,0  will  be fine.  To explore other areas in
  182. the plane, move the center.  A small gold circle indicates the center on the
  183. graph.  In the polar version,  the  center  of  the screen is still given in
  184. rectangular coordinates, not polar (i.e. (1,1) is r=sqr(2), theta=45 degrees
  185. in polar coordinates). (reals)
  186.  
  187. FUNCTION REQUESTER:   Finally,  a  function  requester  expects  a  function
  188. y=f(x), but don't type in the  'y='  part,  just  the  'f(x)' part.  If your
  189. function is rejected you'll get an error message, and after hitting any key,
  190. you'll be returned to the input screen.
  191.  
  192.      2dgrapher will also  prompt  you  for  a  graph  speed.   Just  use the
  193. spacebar to select the value (1=slowest,  6=fastest), and then hit return to
  194. start drawing.
  195.  
  196.      After the graph is drawn, 5 selections appear:
  197.  
  198. 1)  ECHO COORDINATES - hit  1,  then  move  the  mouse  over the graph while
  199. holding down the left button.  Coordinates  of where you're pointing will be
  200. reflected on the screen.  This along with  the zoom feature can allow one to
  201. find the intersection point of two  curves  to  within 6 places of accuracy.
  202. Letting up on the mouse button quits this choice.
  203.  
  204. 2)  ZOOM-IN - use to frame a  portion  of  the  graph to zoom in on.  Hit 2,
  205. then move the mouse to the upper left corner of the area you want to zoom in
  206. on, hold down the left mouse button  and  drag  the box over the graph until
  207. you reach the lower right corner  of  the  area  you wish to zoom in on, and
  208. then release.  It will recalculate the parameters and redraw that portion of
  209. the graph.  The drag box in POLAR is kept in the shape of a square.
  210.  
  211. 3)  ADD A GRAPH - (valid if only one  graph  has been drawn) hit 3, then you
  212. will be prompted to type in a second function to graph.
  213.  
  214. 4)  MAKE CHANGES - Lets you try again.  Erases the chalkboard.
  215.  
  216. 5)  QUIT - Returns to main menu.
  217.  
  218.  
  219. B.   [3] ROTATION(ONE) AND [4] ROTATION(TWO)
  220.  
  221.      These two modules are for drawing wire  frame representations of solids
  222. of revolution (often done in calculus  or  engineering courses).  One or two
  223. functions (depending on the module selected)  of one variable are bound to a
  224. certain finite interval on the x axis.   Then both curves are revolved about
  225. the x axis to generate a solid of revolution.
  226.  
  227.      The input requesters are:
  228.  
  229. UNIT LENGTH:  refers to the number of pixels  used per unit in each of the x
  230. and y directions. (integer, >0)
  231.  
  232. COORDINATES AT THE CENTER OF THE SCREEN:  works the same as in 2dgrapher and
  233. corresponds to  the  coordinates  in  2d  space  (the  xy  plane) before any
  234. revolving is done. (real)
  235.  
  236. INCREMENT:  the number  of  degrees  the  curve(s)  is(are)  revolved before
  237. it(they) is(are) drawn again. (integer, 0<?<90)
  238.  
  239. Y-ROTATION:  the number of  degrees  the  y  axis is rotated for viewing; if
  240. this value is zero, the z axis is  coming  out towards the viewer, x axis is
  241. to the right, and the y axis is  up;  a  positive  value rotates about the y
  242. axis clockwise (as one is looking down the y axis towards the origin); hence
  243. a value between 0 and 90 puts  the  viewer  in  the  first octant. (integer,
  244. recommend -180<?<180)
  245.  
  246. DENSITY:  the number of pixels between  samplings of the function; a smaller
  247. value yields a smoother,  more  accurate  drawing,  but is slower to render.
  248. (integer, >0, recommend 2<?<5)
  249.  
  250. LOWER AND  UPPER  BOUNDS:   these  are  the  bounds  along  the  x axis that
  251. indicates the interval of consideration. (real)
  252.  
  253. FUNCTION(S):  in ROTATION(ONE)  there  is  only  one function to revolve; in
  254. ROTATION(TWO) there are two, a lower function (y=g(x)) and an upper function
  255. (y=f(x)) where it is intended  that  g(x)<=f(x)  for  all  x in the interval
  256. selected (this  is  not  a  strict  requirement,  experiment  and  see  what
  257. happens).
  258.  
  259.      To try again, hit 'y', else hit any key to quit.
  260.  
  261.  
  262. C.   [5] 3DPLOTTER AND [6] HIDDEN3DPLOT
  263.  
  264.      The input requesters are identical for  both of these modules.  In fact
  265. both programs draw functions of two variables  (z=f(x,y)) over a rectangular
  266. field in the xy plane, except that HIDDEN3DPLOT  has hidden surface removal.
  267. Hence, 3DPLOTTER is  faster,  but  the  graphs  are  not  as realistic or as
  268. pretty.  Their input requesters include:
  269.  
  270. LOWER X AND UPPER X:  these are the lower and upper bounds along the x axis.
  271. (real, lower<upper)
  272.  
  273. LOWER Y AND UPPER Y:  these are the lower and upper bounds along the y axis.
  274. (real, lower<upper)
  275.  
  276. SAMPLING RATE: this is a value  which  determines  the  sampling and drawing
  277. density over the field; realistic drawings  need a value at least around 20;
  278. the higher the  value,  the  slower  the  rendering,  but  a  better picture
  279. results; the maximum is 50; the  default  32 is a good compromise. (integer,
  280. 0<?<50)
  281.  
  282. ANGLE OF PROJECTION:  number of degrees  the field will be 'twisted' to give
  283. a 3d effect; turns out  to  be  the  angle  between  the  xy  plane  and the
  284. 'camera'. (integer, 0<?<90, recommend 20<?<50)
  285.  
  286. Z SCALAR FACTOR:  this is  a  factor  that  all  z  values are multiplied by
  287. before drawing; if large z values are expected, make the value <.5; if small
  288. z values are expected, try values >.5; you'll probably have to experiment to
  289. get it just right;  if  its  too  big  funny  graphs  result.  (real,  >0.0,
  290. recommend 0.0<?<.75, start small if you're unsure)
  291.  
  292. FUNCTION:  enter any valid function of two variables.
  293.  
  294.      Hit 'r' to retry, or any key to quit and return to the main menu.
  295.  
  296. NOTE:  For even better rendering of  functions  of two variables, use my new
  297. release, NEW3D, or write me for a copy (address in MPIntroV2.0).
  298.  
  299.  
  300. D.   [7] TABLE_XY
  301.  
  302.      This module generates a table of  function  values for functions of one
  303. variable.  Initially, you'll be ask to click on one of two boxes to indicate
  304. if you want one or two functions at once in the table.
  305.  
  306.      The first  three  requesters  are  for  X  MINIMUM,  X  MAXIMUM,  and X
  307. INCREMENT.  These three requesters  all  depend on each other, so if you try
  308. to edit one, you'll be placed in the  first  requester.   They all take real
  309. values, and x minimum  should  be  less  than  x  maximum.   Also, if you're
  310. tabulating two functions at once, you're only allowed 400 entries.  Based on
  311. the three values entered,  it  will  check  to  see  if you've exceeded this
  312. limit.  If so, you'll be warned and asked to reenter the values.
  313.  
  314.      Also, there will be one or two  function  requesters  depending on your
  315. earlier selection.  Enter functions of one variable in each.  This module is
  316. easy to use, so just follow the on screen  prompts.  One side comment, don't
  317. hit the keys too rapidly as  you  page  through  the  table, as the keyboard
  318. buffer will keep the keystrokes and  you  may  page past where you wanted to
  319. look.  If you page past where  you  wanted  to  look,  you'll have to escape
  320. ('ESC') and restart (choose 'retry') the tabulation.
  321.  
  322.  
  323. E.   [8] TABLE_XYZ
  324.  
  325.      This module is almost the same as  TABLE_XY,  but only one function can
  326. be handled on screen at a time.  Again,  there are requesters for X MINIMUM,
  327. X MAXIMUM, and X  INCREMENT,  along  with  a  similar  set  for Y MINIMUM, Y
  328. MAXIMUM, and Y INCREMENT.   These  work  the  same as in TABLE_XY.  The only
  329. difference is that there is no restriction on the number of entries that you
  330. can have.
  331.  
  332.      Finally, there is a requester for a  function  of  two variables.  This
  333. module is easy to use,  so  just  follow  the  on  screen prompts.  One side
  334. comment, don't hit the keys too  rapidly  as  you page through the table, as
  335. the keyboard buffer will keep the keystrokes and you may page past where you
  336. wanted to look.  If you page past  where  you wanted to look, you'll have to
  337. escape ('ESC') and restart the tabulation by hitting 'r' to retry.
  338.  
  339.  
  340. F.   [9] or [HELP] HELP AND [Q] QUIT
  341.  
  342.      The help screen reached  here  tells  the  user  the  valid  constants,
  343. variables,  operators,  and   mathematical  functions  supported  in  Mark's
  344. MathPlotter.  Up to 30 constants per expression  are allowed.  Currently, 34
  345. functions are supported in upper and lower case:
  346.  
  347. ABS     ACSCH   ASECH   ATANH   CSCH    FIX     LOG     SGN     TAN
  348. ACOS    ACTN    ASIN    COS     CTN     FRAC    RND     SIN     TANH
  349. ACOSH   ACTNH   ASINH   COSH    CTNH    INT     SEC     SINH
  350. ACSC    ASEC    ATAN    CSC     EXP     LN      SECH    SQR
  351.  
  352.  
  353.      To exit Mark's MathPlotter, choose [Q] to quit.
  354.  
  355.  
  356.  
  357. VI.  EXAMPLES TO TRY
  358.  
  359. For those unfamiliar with this software  and/or mathematical functions, here
  360. are some examples to get you  started.   The  values are listed in the order
  361. they appear on the screen starting in the upper left.  Enter the function(s)
  362. first, then go back and change any parameters if needed.
  363.  
  364. 2DGRAPHER:
  365. example) 20, 20, 0, 0, x^3-x; Hit return  to use the default graphing speed.
  366. After this first function is graphed, choose 'add a graph' and graph sin(x);
  367. with both graphs on the screen, try  to  find  the intersection point in the
  368. first quadrant using the zoom-in and echo coordinates features.
  369.  
  370. POLAR:
  371. example) 40, 45, 0, 0,  sin(2*x);  then  add  the graph sin(3*x); retry with
  372. sin(4*x) and sin(5*x); these graphs  are  known as roses; can you deduct how
  373. many petals are in a rose of the form sin(k*x), based on different values of
  374. k? (hint: consider odd and even values of k separately)
  375.  
  376. ROTATION(ONE):
  377. example) use all defaults except make unit lengths 20, 20.  Use the function
  378. (f(x)=) cos(x)+1.
  379. example) 20, 20, 0, 0, 45, 30, 3, 0, 6.28,  (f(x)=) sin(x)+1.5 (draws a vase
  380. like object).
  381. example) 20, 20, 0, 0, 30, 45, 3, -2, 2, (f(x)=) x^2+1
  382.  
  383. ROTATION(TWO):
  384. example) use all defaults.  Let (g(x)=) sqr(x), (f(x)=) 2*sqr(x)
  385. example) use all defaults except change unit lengths to 15, 15 and make the 
  386. upper bound 6.0.  Use the functions (g(x)=) cos(x), (f(x)=) sqr(x)+1.
  387. example) 20, 20, 0, 0, 45, 30, 3, -2, 2, (g(x)=) 1, (f(x)=) 5-x^2
  388. example) 25, 25, 0, 0, 60, 45, 3, -1, 1, (g(x)=) x^2+1, (f(x)=) 3-x^2
  389.  
  390. 3DPLOTTER AND HIDDEN3DPLOT:
  391. example) -3, 3, -3, 3, 40, 30, .25, sin(x^2+y^2) (draws a rippled hat).
  392. example) -3, 3, -3, 3, 35, 35, .2, x^2-y^2  (draws a saddle)
  393.  
  394. TABLE_XY AND TABLE_XYZ:
  395. Experiment with the above functions.
  396.  
  397.  
  398.  
  399. VII. PRINTING GRAPHS AND SAVING GRAPHS AS IFF FILES
  400.  
  401.      To print graphs, use the Graphidump  utility  on Workbench, or save the
  402. graph as an IFF file (as described below),  and print out with your favorite
  403. utility.  For those with a standard B&W dot matrix, I recommend setting your
  404. printer preferences  (under  Graphics  1  for  those  with Workbench 1.3) to
  405. Image: negative, Shade: black &  white,  and Threshold: 14 for graphs with a
  406. black background, 11 for graphs with  a  dark green background.  Choose SAVE
  407. or USE for these  settings.   Then  position  the  Graphidump  icon so it is
  408. visible and ready to use  on  the  Workbench.   Now,  draw  the graph in the
  409. program.  Use the depth arrangement  gadgets  in the upper right to get back
  410. to the Workbench screen so as to double  click Graphidump.  I had to use the
  411. Left Amiga N and M to get back  and  forth  on  the  screens with the hires,
  412. interlace, black background graphs.   I  haven't  figured out why as of yet,
  413. but it gets the job done.   This  technique  gave  nice  printouts on my dot
  414. matrix.
  415.      To save graphs as IFF files, I use  the  public  domain utility ScreenX
  416. found on many BBS.  I open up ScreenX  on  the Workbench, draw my graph, and
  417. then return to my Workbench as described  above to open up ScreenX.  The two
  418. main tasks this utility performs is saving screens as IFF files and printing 
  419. screens.  However, I could  never  seem  to  get  ScreenX to read my printer
  420. preferences as I had set them, so I  decided  to use ScreenX just for saving
  421. the graphs as IFF files.   I'll  use  Graphidump  for  the  printouts.  Once
  422. saved, these graphs can be used in any slide show or paint program.
  423.  
  424.  
  425.  
  426. VIII. FILES INCLUDED ON THE ORIGINAL DISK
  427.  
  428. Files on the original Mark's MathPlotterV2.0 disk:
  429.  
  430. mathplotterV2.0     mathplotterV2.0.info
  431. mpintroV2.0         mpintroV2.0.info
  432. bas.rl              mathplotter.hlp     readme
  433. readme.info         2dgrapher.run       polar.run
  434. rotation_one.run    rotation_two.run    3dplotter.run
  435. hidden3dplot.run    table_xy.run        table_xyz.run
  436.  
  437.  
  438.                         <<END OF USER HELP MANUAL>>
  439.  
  440.  
  441.  
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450.  
  451.  
  452.  
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.