4IBM p@ >> FastCopy PRO << by Martin Backschat, Bergstr.16, D-8071 Hepberg // (c) 1991 ICP Verlag/TOS Magazin, Wendelsteinstr. 3, D-8011 Vaterstetten, Tel. 0810633954l@` /@`/#@%`)+-/1 3@5`79;=?A C@E`GIKMOQ S@U`WY[]_a c@e`gikmoq s@u`wy{} @` @ ` @ ` @ ` @ ` ǀ ɠ @ ` ׀ ٠  O` @`!Aa   !Aa!!#A%a')+-/1!3A5a79;=?A!CAEaGIKMOQ!SAUaWY[]_a!cAeaikmq!suawy{}!Aa!Aa!Aa!Aa!Aaǁɡ!Aaׁ١!Aa!Aa " B b  !"!B!b!!!!!"!""#B"%b"'")"+"-"/#1"#3B#5b#7#9##=#?$ACB$Eb$G$I$K$M$O%Q"%SB%Ub%W%Y%[%]%_&a"&cB&eb&g&i&k&m&o'q"'sB'ub'w'y'{'}'("(B(b((((()")B)b)))))*"*B*b*****+"+B+b+++++,",B,b,ǂ,ɢ,,,-"-B-b-ׂ-٢---.".B.b...../"/B/b////@` /@`/#@%`)+-/1 3@5`79;=?A C@E`GIKMOQ S@U`WY[]_a c@e`gikmoq s@u`wy{} @` @ ` @ ` @ ` @ ` ǀ ɠ @ ` ׀ ٠  O` @`!Aa   !Aa!!#A%a')+-/1!3A5a79;=?A!CAEaGIKMOQ!SAUaWY[]_a!cAeaikmq!suawy{}!Aa!Aa!Aa!Aa!Aaǁɡ!Aaׁ١!Aa!Aa " B b  !"!B!b!!!!!"!""#B"%b"'")"+"-"/#1"#3B#5b#7#9##=#?$ACB$Eb$G$I$K$M$O%Q"%SB%Ub%W%Y%[%]%_&a"&cB&eb&g&i&k&m&o'q"'sB'ub'w'y'{'}'("(B(b((((()")B)b)))))*"*B*b*****+"+B+b+++++,",B,b,ǂ,ɢ,,,-"-B-b-ׂ-٢---.".B.b...../"/B/b////HARDWOODQRT `h"HARDWOODTXT 5` MIRRORS QRT ` PIANO QRT %`>PLUS QRT 4`!PLUS RAW C'QRT_DOC TXT `QRT_ST TTP &`H{QRT_ST TXT ,`g&RAW2SPECPRG $`ovRAW2SPECTXT 5`taROOM QRT `zLROOM RAW `fWALL_SPHQRT 4`;WALL_SPHRAW D`B{ ************************************************************************* ** Sphere Floating Above a Hardwood Floor R. Barnhardt ** ** ** ** The brick pattern was taken from the sample .QRT files in the ** ** QRT_ST archive. The wood pattern was taken from PIANO.QRT, ** ** the colours modified, and a bit of reflectivity added. ** ** ** ** For use with the QRT ray tracing system. ** ************************************************************************* } FILE_NAME = HardWood.raw DEFAULT ( x_res = 280 y_res = 160 aspect = 0.75 ) { **************************************************************** } { ** Pattern Definitions - Brick and WoodGrain patterns. ** } { **************************************************************** } PATTERN ( x_size = 80, y_size = 50, name = BRICK, RECTANGLE ( start_x = 0, start_y = 2, end_x = 15, end_y = 18, diff = (1.00, .20, .20); ) RECTANGLE ( start_x = 62, start_y = 2, end_x = 77, end_y = 18, diff = (1.00, .20, .20); ) RECTANGLE ( start_x = 22, start_y = 2, end_x = 55, end_y = 18, diff = (.80, .20, .20); ) RECTANGLE ( start_x = 2, start_y = 27, end_x = 35, end_y = 43, diff = (.85, .35, .10); ) RECTANGLE ( start_x = 42, start_y = 27, end_x = 75, end_y = 43, diff = (.70, .25, .20); ) ) PATTERN ( name = WOODGRAIN, x_size = 10, y_size = 11, POLYGON ( diff = (.23, .1, .1) reflect = .42 sreflect = 32 point = (1, 0) point = (1.2, 1) point = (1.4, 3) point = (1.4, 4) point = (.8, 5) point = (.5, 6) point = (.2, 7) point = (.2, 8.4) point = (.8, 10) point = (1, 11) point = (2, 11) point = (1, 9) point = (.6, 8) point = (.7, 7) point = (1.4, 6) point = (1.8, 5) point = (1.8, 3) point = (2.2, 2) point = (2.2, 1) point = (2, 0) point = (1, 0) ) POLYGON ( diff = (.29, .14, .14) reflect = .35 sreflect = 25 point = (1.8, 8) point = (2, 7) point = (2.5, 6) point = (2.8, 5.2) point = (3, 5) point = (3.4, 5.4) point = (3.4, 6) point = (3.3, 7) point = (3.8, 8) point = (3.8, 9) point = (3.4, 9.8) point = (3, 10) point = (2.4, 9.8) point = (2, 9) point = (1.8, 8) ) POLYGON ( diff = (.57, .29, .29) reflect = .10 sreflect = 7 point = (2.8, 7.2) point = (3.1, 8) point = (3.1, 9) point = (3, 9.1) point = (2.9, 9) point = (2.6, 8.6) point = (2.6, 8) point = (2.8, 7.2) ) POLYGON ( diff = (.44, .24, .24) reflect = .20 sreflect = 15 point = (4, 0) point = (3.6, .6) point = (3, 2) point = (3.6, 3) point = (3.8, 4.6) point = (4.2, 5) point = (4.8, 8) point = (3.6, 9) point = (4, 11) point = (5, 11) point = (5.2, 10) point = (5.2, 9) point = (5.6, 7.5) point = (5.4, 6) point = (4, 4) point = (4, 2) point = (5, 0) point = (4, 0) ) POLYGON ( diff = (.43, .29, .29) reflect = .25 sreflect = 20 point = (6, 0) point = (6, .8) point = (5.4, 2) point = (5.4, 3) point = (5.8, 5) point = (6, 6) point = (6.1, 8) point = (6, 11) point = (6.4, 11) point = (6.6, 9) point = (6.6, 8) point = (6.8, 7) point = (6.4, 5) point = (6.4, 4) point = (6, 3) point = (6.4, 1) point = (6.2, 0) point = (6, 0) ) POLYGON ( diff = (.36, .21, .21) reflect = .20 sreflect = 15 point = (7.2, 0) point = (7.2, 1) point = (6.8, 2.2) point = (7, 3.2) point = (7.4, 3) point = (7.8, 1) point = (7.8, 0) point = (7.2, 0) ) POLYGON ( diff = (.36, .29, .29) reflect = .18 sreflect = 13 point = (7.2, 11) point = (7.4, 9) point = (7.2, 8.6) point = (7.2, 7.6) point = (7.4, 7.6) point = (7.9, 10) point = (7.8, 11) point = (7.2, 11) ) POLYGON ( diff = (.29, .14, .14) reflect = .35 sreflect = 25 point = (8.4, 0) point = (8.6, 3) point = (8.6, 4) point = (8, 7) point = (8.2, 8) point = (8.2, 10) point = (8.4, 11) point = (9, 11) point = (8.9, 8) point = (9.4, 6) point = (9.4, 4.4) point = (9, 2.2) point = (9, 0) ) ) { **************************************************************** } { ** Room Description - four walls, a floor, and a ceiling. ** } { **************************************************************** } PARALLELOGRAM ( loc = ( 0, 0, -100), { Walls, brick pattern } v1 = (100, 0, 0), v2 = ( 0, 50, 0), diff = ( .4, .25, .25) pattern = BRICK, xmult = .2, ymult = .2 ) PARALLELOGRAM ( loc = ( 0, 0, 100), v1 = (100, 0, 0), v2 = ( 0, 50, 0), diff = (.4, .25, .25) pattern = BRICK, xmult = .3, ymult = .3 ) PARALLELOGRAM ( loc = (100, 0, -100), v1 = ( 0, 0, 200), v2 = ( 0, 50, 0), diff = (.4, .25, .25) pattern = BRICK xmult = .3, ymult = .3 ) PARALLELOGRAM ( loc = ( 0, 0, -100), v1 = ( 0, 0, 200), v2 = ( 0, 50, 0), diff = (.4, .25, .25) pattern = BRICK, xmult = .3, ymult = .3, ) PARALLELOGRAM ( loc = ( 0, 0, 100), { Floor, wood grain. } v1 = (100, 0, 0), v2 = ( 0, 0, -200), diff = (.57, .29, .29) reflect = .10 sreflect = 7 pattern = WOODGRAIN, xmult = .7, ymult = .7 ) PARALLELOGRAM ( loc = ( 0, 50, 100), { Ceiling, med. blue. } v1 = (100, 0, 0), v2 = ( 0, 0, -200) diff = (0.4, 0.4, 0.8) ) { **************************************************************** } { ** The room's sole occupant, a silver ball (arrgh). ** } { **************************************************************** } BEGIN_BBOX SPHERE ( loc = (50, 25, -25), radius = 15, diff = (.3, .3, .3), mirror = (.7, .7, .7), reflect = .4 sreflect = 20 ) END_BBOX { **************************************************************** } { ** Technicalities: Our Observer, and a couple of lamps. ** } { **************************************************************** } OBSERVER ( loc = (30, 25, 30), lookat = (50, 0, -80) ) LAMP ( loc = (50, 45, 0), diff = (1.0, 1.0, 0.9), radius = 5, dist = 40 ) LAMP ( loc = (30, 10, -10), diff = (1.0, 1.0, 0.9) radius = 5, dist = 20 ) A Few Words About the HardWood Picture & Scene Description """"""""""""""""""""""""""""""""""""""""""""""""""""""""""" HardWood is an rudimentary example of what can be done with QRT/ST. The floor and wall patterns (wood, brick) were taken from the original QRT samples, both modified slightly (the gap between bricks was increased, the wood was hardened and given a coat of wax). I state this because I don't want anyone to get the wrong idea about QRT/ST - HardWood is certainly not the penultimate QRT scene! Someone more interesting than myself might have used cones, or cylinders, or any of the other QRT objects to make an interesting scene; I'm certainly not an artist. To add a bit of excitement (and nostalgia), a silver ball floats in the far corner of the room, reflecting the ceiling and walls, including the one 'behind' you (the observer). This scene took about 2.5 hours to render at the resolution you see it. R. Barnhardt {************************************************** QRT source for mirrored surface demo. Demonstrates arbitrary reflection characteristics. - Steve Koren 11 Jun 88 **************************************************} FILE_NAME = Mirror.RAW { ********* Some pattern definitions ********** } PATTERN ( x_size = 60, { ** Checkered pattern ** } y_size = 60, name = CHECK, RECTANGLE ( start_x = 0, start_y = 0, end_x = 30, end_y = 30, diff = (.1,1.0,.1), ) RECTANGLE ( start_x = 30, start_y = 30, end_x = 60, end_y = 60, diff = (.1,1.0,.1), ) ) PATTERN ( x_size = 60, { ** Checkered pattern ** } y_size = 60, { ** mirrored surfaces ** } name = MIRROR_CHECK, { ** (red) ** } RECTANGLE ( start_x = 0, start_y = 0, end_x = 30, end_y = 30, diff = (.2,.1,.1), mirror = (.7,.2,.2) ) RECTANGLE ( start_x = 30, start_y = 30, end_x = 60, end_y = 60, diff = (.2,.1,.1), mirror = (.7,.2,.2) ) ) PATTERN ( name = MIRROR_STRIPE_V { ** blue striped mirror ** } x_size = 60 y_size = 60 RECTANGLE ( start_x = 0 start_y = 0 end_x = 30 end_y = 60 diff = (.1, .1, .2) mirror = (.2, .2, .9) ) ) PATTERN ( name = MIRROR_STRIPE_H { ** striped mirror ** } x_size = 60 y_size = 60 RECTANGLE ( start_x = 0 start_y = 0 end_x = 60 end_y = 30 diff = (.1, .1, .1) mirror = (.45, .45, .45) ) ) { ********************* OBJECTS ********************* } { ** ground (standard checkered type) ** } PARALLELOGRAM ( loc = ( -10000, 0, -10000), { ** big! ** } v1 = (20000, 0, 0), v2 = ( 0, 0, 20000), diff = ( .8, .8, 0), pattern = CHECK xmult = 2 ymult = 2 ) { ** 3 balls (red, green, blue) - all are shiny ** } BEGIN_BBOX SPHERE ( loc = (150, 25, 0) radius = 20 diff = (.9, .1, .1) { ** red ** } amb = (.4, .4, .4) reflect = .70 sreflect= 20 ) SPHERE ( loc = (150, 75, 0) radius = 20 diff = (.1, .9, .1) { ** green ** } amb = (.4, .4, .4) reflect = .70 sreflect= 20 ) SPHERE ( loc = (150, 125, 0) radius = 20 diff = (.3, .3, .9) { ** blue ** } amb = (.4, .4, .4) reflect = .60 sreflect= 20 ) END_BBOX { ** mirrored parallelograms ** } PARALLELOGRAM ( loc = (150, 0, 100) v1 = (100, 0, -100) v2 = (0, 180, 0) diff = (.1, .1, .1) mirror = (.7, .7, .7) pattern= MIRROR_CHECK ) PARALLELOGRAM ( loc = (250, 0, -40) v1 = (-100, 0, -100) v2 = (0, 180, 0) diff = (.1, .1, .1) mirror = (.8, .8, .8) pattern= MIRROR_STRIPE_H xmult = .5 ymult = .5 ) { ** An observer ** } OBSERVER ( loc = (-20, 85 -40) lookat = (200, 50, -15) ) { ** Lights (but not Bud lights) ** } LAMP ( loc = (20, 140, 20), radius = 5, dist = 140 ) LAMP ( loc = (240, 75, -5), radius = 5, dist = 70 ) SKY ( horiz = (.3, .3, .75), zenith = (.1, .1, .50), dither = 4 ) FOC_LENGTH = 65 { ** QRT image spec file for a baby grand piano with wood grain. This image requires QRT version 1.3 to run. { this tests nested comments { } - new to 1.3 } - Steve Koren 16 Jun 88 ** } FILE_NAME = piano.raw PATTERN ( name = PIANO_LEG_CUTOUT { ** trapezoid shape for leg ** } x_size = 10 y_size = 44 POLYGON ( point = (0, 0) point = (2, 0) point = (0, 44) point = (0, 0) ) POLYGON ( point = (8, 0) point = (10, 0) point = (10, 44) point = (8, 0) ) ) BEGIN_INSTANCES NAME = PIANO_LEG { ** define an instance for this so we ** } BEGIN_BBOX { ** don't have to keep repeating the ** } { ** parallelogram definitions ** } PARALLELOGRAM ( diff = (.5, .1, .1) loc = (2, 0, 0) v1 = (0, 0, 10) v2 = (-2, 44, 0) remove = PIANO_LEG_CUTOUT ) PARALLELOGRAM ( diff = (.5, .1, .1) loc = (0, 0, 2) v1 = (10, 0, 0) v2 = (0, 44, -2) remove = PIANO_LEG_CUTOUT ) END_BBOX END_INSTANCES PATTERN ( name = STRINGS, x_size = 6, y_size = 5, RECTANGLE ( diff = (.9, .9, .9) start_x = 0, end_x = 2.5 start_y = 0 end_y = 5 ) ) PATTERN ( name = WOOD_GRAIN, x_size = 10, y_size = 11, POLYGON ( diff = (.43, .1, .1) point = (1, 0) point = (1.2, 1) point = (1.4, 3) point = (1.4, 4) point = (.8, 5) point = (.5, 6) point = (.2, 7) point = (.2, 8.4) point = (.8, 10) point = (1, 11) point = (2, 11) point = (1, 9) point = (.6, 8) point = (.7, 7) point = (1.4, 6) point = (1.8, 5) point = (1.8, 3) point = (2.2, 2) point = (2.2, 1) point = (2, 0) point = (1, 0) ) POLYGON ( diff = (.44, .22, .1) point = (1.8, 8) point = (2, 7) point = (2.5, 6) point = (2.8, 5.2) point = (3, 5) point = (3.4, 5.4) point = (3.4, 6) point = (3.3, 7) point = (3.8, 8) point = (3.8, 9) point = (3.4, 9.8) point = (3, 10) point = (2.4, 9.8) point = (2, 9) point = (1.8, 8) ) POLYGON ( diff = (.55, .41, .1) point = (2.8, 7.2) point = (3.1, 8) point = (3.1, 9) point = (3, 9.1) point = (2.9, 9) point = (2.6, 8.6) point = (2.6, 8) point = (2.8, 7.2) ) POLYGON ( diff = (.44, .22, .1) point = (4, 0) point = (3.6, .6) point = (3, 2) point = (3.6, 3) point = (3.8, 4.6) point = (4.2, 5) point = (4.8, 8) point = (3.6, 9) point = (4, 11) point = (5, 11) point = (5.2, 10) point = (5.2, 9) point = (5.6, 7.5) point = (5.4, 6) point = (4, 4) point = (4, 2) point = (5, 0) point = (4, 0) ) POLYGON ( diff = (.44, .27, .1) point = (6, 0) point = (6, .8) point = (5.4, 2) point = (5.4, 3) point = (5.8, 5) point = (6, 6) point = (6.1, 8) point = (6, 11) point = (6.4, 11) point = (6.6, 9) point = (6.6, 8) point = (6.8, 7) point = (6.4, 5) point = (6.4, 4) point = (6, 3) point = (6.4, 1) point = (6.2, 0) point = (6, 0) ) POLYGON ( diff = (.45, .2, .1) point = (7.2, 0) point = (7.2, 1) point = (6.8, 2.2) point = (7, 3.2) point = (7.4, 3) point = (7.8, 1) point = (7.8, 0) point = (7.2, 0) ) POLYGON ( diff = (.45, .2, .1) point = (7.2, 11) point = (7.4, 9) point = (7.2, 8.6) point = (7.2, 7.6) point = (7.4, 7.6) point = (7.9, 10) point = (7.8, 11) point = (7.2, 11) ) POLYGON ( diff = (.40, .14, .1) point = (8.4, 0) point = (8.6, 3) point = (8.6, 4) point = (8, 7) point = (8.2, 8) point = (8.2, 10) point = (8.4, 11) point = (9, 11) point = (8.9, 8) point = (9.4, 6) point = (9.4, 4.4) point = (9, 2.2) point = (9, 0) ) ) PATTERN ( name = PIANO_TOP, x_size = 108, y_size = 85, POLYGON ( point = (0, 65) { ** This is the part of the } point = (3, 74) { piano top to remove from } point = (8, 78) { a parallelogram ** } point = (14, 81) point = (20, 83) point = (42, 83) point = (50, 80) point = (56, 76) point = (60, 70) point = (63, 60) point = (68, 48) point = (80, 37) point = (90, 30) point = (100, 25) point = (106, 20) point = (108, 15) point = (108, 85) point = (0, 85) point = (0, 65) ) ) PATTERN ( name = KEYBOARD, x_size = 14, y_size = 8, RECTANGLE ( { ** C natural ** } start_x = 0, start_y = 0 end_x = 1.9 end_y = 8 diff = (.9, .9, .9) amb = (.4, .4, .4) ) RECTANGLE ( { ** D natural ** } start_x = 2, start_y = 0 end_x = 3.9 end_y = 8 diff = (.9, .9, .9) amb = (.4, .4, .4) ) RECTANGLE ( { ** E natural ** } start_x = 4, start_y = 0 end_x = 5.9 end_y = 8 diff = (.9, .9, .9) amb = (.4, .4, .4) ) RECTANGLE ( { ** F natural ** } start_x = 6, start_y = 0 end_x = 7.9 end_y = 8 diff = (.9, .9, .9) amb = (.4, .4, .4) ) RECTANGLE ( { ** G natural ** } start_x = 8, start_y = 0 end_x = 9.9 end_y = 8 diff = (.9, .9, .9) amb = (.4, .4, .4) ) RECTANGLE ( { ** A natural ** } start_x = 10, start_y = 0 end_x = 11.9 end_y = 8 diff = (.9, .9, .9) amb = (.4, .4, .4) ) RECTANGLE ( { ** B natural ** } start_x = 12, start_y = 0 end_x = 13.9 end_y = 8 diff = (.9, .9, .9) amb = (.4, .4, .4) ) RECTANGLE ( { ** C sharp ** } start_x = 1, start_y = 3 end_x = 1.9, end_y = 8 diff = (0, 0, 0) ) RECTANGLE ( { ** D sharp ** } start_x = 3, start_y = 3 end_x = 3.9, end_y = 8 diff = (0, 0, 0) ) RECTANGLE ( { ** F sharp ** } start_x = 7, start_y = 3 end_x = 7.9, end_y = 8 diff = (0, 0, 0) ) RECTANGLE ( { ** G sharp ** } start_x = 9, start_y = 3 end_x = 9.9, end_y = 8 diff = (0, 0, 0) ) RECTANGLE ( { ** A sharp ** } start_x = 11, start_y = 3 end_x = 11.9, end_y = 8 diff = (0, 0, 0) ) ) PATTERN ( x_size = 30, { ** Striped pattern ** } y_size = 30, name = STRIPE, RECTANGLE ( start_x = 0, start_y = 0, end_x = 30, end_y = 5, diff = (.1,.1,.1), ) ) { ********************* OBJECTS ********************* } { ** ground ** } PARALLELOGRAM ( loc = ( -10000, 0, -10000), v1 = ( 0, 0, 20000), v2 = (20000, 0, 0), diff = ( 1, 1, 0), pattern = STRIPE xmult = 2 ymult = 2 ) PARALLELOGRAM ( loc = (150, 40, -50) v1 = (0, 0, 108) v2 = (85, 0, 0) remove = PIANO_TOP, diff = (.2, .2, .2) pattern = STRINGS xmult = .5 ) { ** piano top ** } PARALLELOGRAM ( loc = (150, 50, -50), v1 = (0, 50, 95.73), v2 = (85, 0, 0), remove = PIANO_TOP, diff = (.55, .41, .1), dither = 4, pattern = WOOD_GRAIN xmult = 1.5 ymult = 1.5 ) { ** Piano sides ** } BEGIN_BBOX BEGIN_BBOX PARALLELOGRAM ( loc = (150, 40, -50) v1 = (0, 10, 0) v2 = (65, 0, 0) diff = (.55, .41, .1) pattern = WOOD_GRAIN ) PARALLELOGRAM ( loc = (215, 40, -50) v1 = (0, 10, 0) v2 = (9, 0, 3) diff = (.55, .41, .1) pattern = WOOD_GRAIN ) PARALLELOGRAM ( loc = (224, 40, -47) v1 = (0, 10, 0) v2 = (4, 0, 5) diff = (.55, .41, .1) pattern = WOOD_GRAIN ) END_BBOX BEGIN_BBOX PARALLELOGRAM ( loc = (228, 40, -42) v1 = (0, 10, 0) v2 = (3, 0, 6) diff = (.55, .41, .1) pattern = WOOD_GRAIN ) BEGIN_BBOX PARALLELOGRAM ( loc = (231, 40, -36) v1 = (0, 10, 0) v2 = (2, 0, 6) diff = (.55, .41, .1) pattern = WOOD_GRAIN ) PARALLELOGRAM ( loc = (233, 40, -30) v1 = (0, 10, 0) v2 = (0, 0, 22) diff = (.55, .41, .1) pattern = WOOD_GRAIN ) END_BBOX PARALLELOGRAM ( loc = (233, 40, -8) v1 = (0, 10, 0) v2 = (-3, 0, 8) diff = (.55, .41, .1) pattern = WOOD_GRAIN ) END_BBOX END_BBOX BEGIN_BBOX BEGIN_BBOX PARALLELOGRAM ( loc = (230, 40, 0) v1 = (0, 10, 0) v2 = (-4, 0, 6) diff = (.55, .41, .1) pattern = WOOD_GRAIN ) PARALLELOGRAM ( loc = (226, 40, 6) v1 = (0, 10, 0) v2 = (-6, 0, 4) diff = (.55, .41, .1) pattern = WOOD_GRAIN ) PARALLELOGRAM ( loc = (220, 40, 10) v1 = (0, 10, 0) v2 = (-10, 0, 3) diff = (.55, .41, .1) pattern = WOOD_GRAIN ) END_BBOX BEGIN_BBOX PARALLELOGRAM ( loc = (210, 40, 13) v1 = (0, 10, 0) v2 = (-12, 0, 5) diff = (.55, .41, .1) pattern = WOOD_GRAIN ) BEGIN_BBOX PARALLELOGRAM ( loc = (198, 40, 18) v1 = (0, 10, 0) v2 = (-11, 0, 12) diff = (.55, .41, .1) pattern = WOOD_GRAIN ) PARALLELOGRAM ( loc = (187, 40, 30) v1 = (0, 10, 0) v2 = (-7, 0, 10) diff = (.55, .41, .1) pattern = WOOD_GRAIN ) END_BBOX PARALLELOGRAM ( loc = (180, 40, 40) v1 = (0, 10, 0) v2 = (-5, 0, 10) diff = (.55, .41, .1) pattern = WOOD_GRAIN ) END_BBOX BEGIN_BBOX PARALLELOGRAM ( loc = (175, 40, 50) v1 = (0, 10, 0) v2 = (-5, 0, 6) diff = (.55, .41, .1) pattern = WOOD_GRAIN ) PARALLELOGRAM ( loc = (170, 40, 56) v1 = (0, 10, 0) v2 = (-5, 0, 2) diff = (.55, .41, .1) pattern = WOOD_GRAIN ) PARALLELOGRAM ( loc = (165, 40, 58) v1 = (0, 10, 0) v2 = (-15, 0, 0) diff = (.55, .41, .1) pattern = WOOD_GRAIN ) END_BBOX END_BBOX BEGIN_BBOX BEGIN_BBOX { ** keyboard ** } PARALLELOGRAM ( loc = (140, 44, -45) v1 = (0, 0, 98) v2 = (8, 0, 0) pattern= KEYBOARD diff = (0, 0, 0) ) { ** boarder for keyboard ** } PARALLELOGRAM ( loc = (138, 43.95, -50) v1 = (0, 0, 108) v2 = (12, 0, 0) diff = (.55, .41, .2) ) END_BBOX PARALLELOGRAM ( loc = (150, 44, -50) v1 = (0, 0, 108) v2 = (0, 6, 0) diff = (.55, .41, .2) pattern = WOOD_GRAIN ) PARALLELOGRAM ( loc = (138, 40, -50) v1 = (0, 0, 108) v2 = (0, 4, 0) diff = (.55, .41, .1) ) PARALLELOGRAM ( loc = (138, 40, -50) v1 = (12, 0, 0) v2 = (0, 4, 0) diff = (.55, .41, .1) ) END_BBOX BEGIN_BBOX INSTANCE_OF ( name = PIANO_LEG { ** three piano legs ** } pos = (155, 0, -45) ) INSTANCE_OF ( name = PIANO_LEG pos = (155, 0, 45) ) END_BBOX INSTANCE_OF ( name = PIANO_LEG pos = (220, 0, -25) ) { ** prop for top of piano ** } PARALLELOGRAM ( loc = (155, 50, 55) v1 = (3, 0, 0) v2 = (0, 43, -20) diff = (.55, .41, .1) ) { ** An observer ** } OBSERVER ( loc = (75 , 85, -65), lookat = (190, 30, 0) ) { ** A lamp ** } LAMP ( loc = (50, 120, -80), radius = 5, dist = 145 ) LAMP ( loc = (270, 120, 60) radius = 5 dist = 60 ) SKY ( horiz = (.1, .1, .65), zenith = (.1, .1, .65), dither = 1 ) FOC_LENGTH = 70 {************************************************** QRT source for abstract thing shaped sort of like a dumbell supported by levitating blue rings. (it might well bring millions if auctioned off as modern art). - Steve Koren 9 Jun 88 **************************************************} FILE_NAME = Plus.RAW { ********* Some pattern definitions ********** } PATTERN ( x_size = 16, { ** A stripe pattern ** } y_size = 8, { ** for the sphere ** } name = MIRROR_STRIPE, RECTANGLE ( start_x = 0, start_y = 0, end_x = 16, end_y = 4, diff = (.1, .1, .1), mirror = (.9, .9, .9) ) ) PATTERN ( x_size = 60, { ** Checkered pattern ** } y_size = 60, name = CHECK, RECTANGLE ( start_x = 0, start_y = 0, end_x = 30, end_y = 30, diff = (.1,1.0,.1), ) RECTANGLE ( start_x = 30, start_y = 30, end_x = 60, end_y = 60, diff = (.1,1.0,.1), ) ) { ********************* OBJECTS ********************* } { ** ground (standard checkered type) ** } PARALLELOGRAM ( loc = ( -10000, 0, -10000), { ** big! ** } v1 = (20000, 0, 0), v2 = ( 0, 0, 20000), diff = ( .8, .8, 0), pattern = CHECK xmult = 2 ymult = 2 ) BEGIN_BBOX { ** Horizontal pole ** } SPHERE ( loc = (200, 90, -80), radius = 35, diff = (.7, .3, .5), pattern = MIRROR_STRIPE, xmult = 1.5, ymult = 1.5 ) QUADRATIC ( loc = (200, 90, 1), a = 1, b = 1, c = 0, d = 150, xmin = -13, xmax = 13, ymin = -13, ymax = 13, zmin = -80, zmax = 80, diff = (.8, .1, .1) reflect = .65 sreflect = 20 ) SPHERE ( loc = (200, 90, 80), radius = 35, diff = (.7, .3, .5), pattern = MIRROR_STRIPE, xmult = 1.5, ymult = 1.5 ) END_BBOX { ** Bunch of floating rings ** } BEGIN_BBOX BEGIN_BBOX RING ( loc = (150, 20, 0), v1 = (1, 0, 0) v2 = (0, 0, 1) rad_2 = 15 rad_1 = 8 diff = (.2, .8, .8) ) RING ( loc = (150, 30, 0), v1 = (1, 0, 0) v2 = (0, 0, 1) rad_2 = 15 rad_1 = 8 diff = (.2, .8, .8) ) END_BBOX BEGIN_BBOX RING ( loc = (150, 40, 0), v1 = (1, 0, 0) v2 = (0, 0, 1) rad_2 = 15 rad_1 = 8 diff = (.2, .8, .8) ) RING ( loc = (150, 50, 0), v1 = (1, 0, 0) v2 = (0, 0, 1) rad_2 = 15 rad_1 = 8 diff = (.2, .8, .8) ) END_BBOX BEGIN_BBOX RING ( loc = (150, 60, 0), v1 = (1, 0, 0) v2 = (0, 0, 1) rad_2 = 15 rad_1 = 8 diff = (.2, .8, .8) ) RING ( loc = (150, 70, 0), v1 = (1, 0, 0) v2 = (0, 0, 1) rad_2 = 15 rad_1 = 8 diff = (.2, .8, .8) ) RING ( loc = (150, 80, 0), v1 = (1, 0, 0) v2 = (0, 0, 1) rad_2 = 15 rad_1 = 8 diff = (.2, .8, .8) ) END_BBOX END_BBOX { ** Base - slightly reflective ** } BEGIN_BBOX PARALLELOGRAM ( loc = ( 100, 10,-100), v1 = ( 0, 0, 200), v2 = ( 200, 0, 0), diff = ( .6, .4, .4), dither = 4 ) PARALLELOGRAM ( loc = ( 100, 0,-100), v1 = ( 0, 0, 200), v2 = ( 0, 10, 0), diff = ( .3, .1, .1), mirror = ( .4, .2, .2) ) END_BBOX { ** An observer ** } OBSERVER ( loc = (-20, 110, -100) lookat = (200, 50, 0) ) { ** A lamp (really, 2 lamps ) ** } LAMP ( loc = (120, 140, 50), radius = 5, dist = 90 ) LAMP ( loc = (100, 55, -70), radius = 5, dist = 95 ) { ** Might as well make the sky dark blue ** } SKY ( horiz = (.2, .2, .55), zenith = (.1, .1, .25), dither = 4 ) FOC_LENGTH = 70 { ** slight telephoto ** } 320 200 111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111      ! #%//|00}00~11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111--|,,y,,v++t**s))q))o    "$&(*,++o++o,,p,,q..t..v//x00y:):)9(111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111  ++t**q))n((l''j&&h&&f&&e&&d&&c ! #%')+- /!((c((c))e**g**g**i++k,,m--pA.B/C0D1E1E111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111      ''i&&g%%d%%b$$`$$^$$]$$\##[##Z! #%')+- /!1#3$&&[&&[&&\''^((`))a))b**e,,hF2G3I4K5L 6M 7N!74466111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111         %%a$$^##\""Z!!X""W!!V!!T R!!S"$&(*,.!0"2$4%##S##S##T%%V%%W%%X''[((]((_H3J5L 6N!7O!8Q"9R#:T#;22z44}5511111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111133445555]'B`)Dc*Fe+Hf+Hf+Hd*Ga)E77111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111--|,,x          !!X!!U SQ QPNNLK%')+- /"1#3$5&!!M!!M""N""O##P##R$$T%%V&&X''ZL 6N!7P!9Q":S#;U$X%?11u22x44|55771111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122~K522y22w22v22u33s33s33r44r44q55r55r55s:b;c:b:a9`7]99999911111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111--|,,w**t))p((l         RPNMLJIIHG&(*,.!0"2$4%6&8( H!!I!!J""K##N##O##O$$Q%%TM 7O!8Q":S#;U$Y%?[&@//l//o22t33x44|66a)E11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111113$A.L 6W$>a)Ej-Ls0R{3W6\:ai22g33h44h44h44i55j55k66mFuEuEtDsCqAn99{99}99::n.N1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111--|,,x++t))q((m''j&&g         NLJIHGEEDC')+- /!1#3$5%7'9(D E F G""I""J""L$$N$$PN!7P"9R#:T#X%?Y&?[&A]'B_(D--e..g//k11n22r33v44yl.Ml.Mk-L11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 //z//w00t//q11o11l11i00g00d00b00aEuHyK~MPRSUWW55^66`77a77b66b77d88fXWVTQP;;v;;x;;|;;;;9`s1R111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111  ++t))q((m''j&&g%%d%%b$$_         GFECBBA@?A2"5%7':)=+@-B/E1G2I3BC!!E""G!!G""G##I##K$$L\'B^'B`(Da(Db)Eb)Ec*Fc*F,,a--d//g00j11m11p33uo/Op/Pq0Pq0Po/O111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111..}//z//v//s00q00m00k00h11g11d11c11a11_11]22]22\33[UWY[]^`a88]88^77^88_99b::d::f88e_][XUS<+A.C/F2I3K6N 7P!9 C C!!E""F""G""H$$I$$J$$Le*Gf*Ig+Ih,Ji,Kk-Ll-Ll-Mm.M,,a--d..f//i11n22p33tr0Qt1Ru1Su1St1S;;1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 ..z9(I3V$>c)Go/Oz3W8^11e11c11a11_11]22]22[33Z33Y44Y44Y^`bdffhhi99^99_::`::a::c;;e;;gfda_\X<,A.D0G2J4L 6O!8R":T#!!D!!D""F##G##G##H$$J%%K%%L''Nm-Nn.No/Pq/Pr0Qs0Rt1Ru1S--`..b..e//g11k11m22pt1Ru2Tw2Ux3Uy3Vy3V<<111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 0"B/Q"9^'Cj,Kv1S6[:b>iCpFvJ|33_44^44]44[55[44Z55Y55Y66Yfgjkklkkk;;`;;a<>c>>e>>f??h??j>>klkjgd`>>x>>{>>}==J|Ds>h;;111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111       &&i&&f%%c%%b$$_##]""Z""Y!!W       $IIGGFFE EE F EM 7P!8S#;V$=Y&?\&A^'Ca(Ed*Gf+H$$I%%J%%K%%K&&K''M''N((O))R{3X|4X5Z5[6[6]7]7^8_00c00d00g22j22k33n55r7]6\6[}5Y~5Z6Z;;<<<<111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 );*K5Y%?f*Hr/Q}4Y9`=gAnEuI|MQTX[^66]77\77]88]99]99]99]::];;^lkkllkl@@e??e@@g@@hAAj@@k@@mllkljf@@x??y??|>>~>>K~Et?i;;9911111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111--|       &&h%%e%%c%%a$$_##]""Z""Y!!W     "&*. K J!!J I!!I!!H G!!H""H""GS";V$=Y%?\'A_(Db(Ee*Hg+Ij,Kl.M&&K&&K''M''N''N))P))Q))R++T6]7]8_8_9`:b:b:c;d11d11e11h33k33k44n55r;c;c9a9_8^6\99;;<<==11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 ..y//x11w00t11r22p44p33m33k33iFvJ}NQUX\_be99`::`;;`::`;;a<>clllllkklAAhBBkBBkBBmBBnAAoAAplkkkkgAA{BB~??}????K~Et?i;;991111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111..}--z        %%e%%b%%a$$_##]##[""Z!!X   ! #%'+/!2$!!M!!M!!L""L##M""L""K""J$$L$$KX%?['A^(Da)Ed*Gg+Jk,Kn.Np/Os0R''O((O))Q))Q))R**T++T++U,,W,,X:b;d;dh>h22f22g22i44l55m55o66r66s>h>g>e==d==d>>e??e@@flklkllllCCnCCoCCpCCpCCrDDtDDukllllhBB~BB??@@OJ|Ds>g<<99111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111..}--{,,x        %%e%%c%%b$$`$$^##\##[##Z !#&(*,0"4$8(##Q##P""O""N$$P$$P$$O$$N%%O&&O^(Ca)Ed+Gh+Jk,Km.Np/Ps0Rv2Tx3V))S**S++U++U++V,,W,,X,,X--Z--[=g>h>i?j@k@lAmAmAn33i44k55m66o66p77s77tAnAl@l?j>i=g;;;;<<==8^111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111..},,y,,v--u--r,,p33u44t55r55q55o77o77n88n88m99kX[^aehjlk>>i??i@@iAAjAAjAAkBBlBBkklkklkkDDrEEsEEtEEuEEvEEwEExllmllkDDBBBB@@??NHzBp==;;Z&@11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111..}--|--y,,w++u       %%f%%d%%b%%a%%`$$_$$]$$\$$\&(+- /!2#5&9(=+$$T%%T$$S$$S%%S&&S%%R%%R&&R&&Rd*Gg,Ik,Kn.Nq/Pt0Rv2Ty3V|4X6Z++W++W,,X,,Y,,Y--[..[..\..]//_@kAlAnBnCpCqDqDrDs55l55m77o77q77r99u99vEsDrCqBpBoAm<<<<;;<<==9_11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111..}--z,,v,,v+5%=,--p..n..l//l00k00j11h11h11g22g;;o^adgjkllk@@nAAnAAnBBoBBoCCpDDqDDqlklllllGGxHHyGGyGGzGG{GG|GG}llllkjDDCCCCAAQKFv@k<<::I411111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111..~..}--{,,x,,v++t       &&g%%e%%c&&c&&b&&a&&`%%^&&^+- 0"2#4%7':)>,B.%%W&&X&&X&&W''W''W((W''W((W((W((Vl-Mo/Ps0Qv2Ty3V|4Y~6Z6\7^9`--[..]..]..^//^00`00a00a22cCpDqCrDsDuEuFvFwFw66n77p88r99t88u::w::x99yFwFwFuEtDrCq<<==>>>>:b9`..}--{  &/!8(@.I4Q"9Y%?00n11m11l11k22k22j33j33j44iEtHyK~NQSVX99j::k;;k<>;e;c9`..~..}   )2#:)C/K5S#;Z&@b)F11o22o33o33n44n44m55m55m66nHyK~NPSVX[<>q??r??r@@s@@slllllllKKJJJJKKJJKKJJllkkljEEEECCCCQJ~Et?j==;;V$= ..}--{--y,,x++v++t       ((k''i((i''g((g((f((e))e((d4%7'9)<*>,A.C0G2K6P!8**`**_**_**_++`++_++_,,_--`--`w2Uz4W~5Z7\7^9`:b;e=f>i22e22e33f33g33g44i55i55j66l66lHzI{J|J}K~KLLM::v;;x<>@@??????=g;d    #+4%<*D0L 6S#;[&Ac*Fj-K22r33r44q55r66r66r77r88rHxJ}MPRUWZ>>u>>u??v@@w@@wAAxAAxBByklllllmEEFFFFLLMMLLKKkllklkGGEEEECCCCLFvAm>>;;99  --|--{,,y,,x++v++u      ((l))l((k))k))i))i))h))g**g9(;*>,A.C0F1H3L 6Q!8T#<,,d,,d,,d,,c..e--d--d--c//e//e}5X6[7]8`:b;d=f>h?k@l44j44j55l55l66l77n77n77o77o88pK~LMMNNOOP<>>>POONNMK@@@@@@@@Am=g;d..~    $- 5%=+E1L 6T#;[&Ab)Fj-Kq0P44v55u55u66u77u88u99v::wJ|LOQTVY[@@zAA{AA{BB|BB|CC}DD~ijkllllkGGGGFFFFLLMMllllkkHHFFFFEEDDOHyBoh?j@lAnBq55m66n88p88p88q88q99r99s99t;;uMNOOPPQQR==}>>~??>>??@@@@@@QQPPONAABBAAAADtBnY&?^(Bb)F00o11p11p22p22p33q44q44q44q55r55r=f>i?kAnBpDqEtFvHyHz::w::w;;y;;y;;y<<{<<{<<{<<|==}TTUVVVVVAABBAABBBBBBCCCCWWVVUSDDDDCCDDCCIzEtAl\] ^ _ ` a c c d f g h j k m n o q r s u v w y z {}>>EvI{MPTVYDDEEFFGGHHIIIIllkllkVXCCDDDDEEEEFFFFdefgghhIIIIHHHHOOPPNNklkkjgHHHHFFEEDDJ|Cq>>>>>@@UVWWXXYYZCCCCDDDDCCEEEEYYXWWVUDDEEDDDDLHyDsgl@@I|MQTVZGGHHGGHHIIJJKKLLkkkllllCCDDDDEEEEFFFFbccdeeeeIIIIPPPPPPOOllllieIIGGGGEEDDI{Cq[&@]'B`(Dc*Ff+Ik-Lo/O33w55y55y55y66y77z77z88{88{99|AmBpDrFuGwHyI|K~LM>>>>>>??????@@AAAAAAXYZZ[[\\\EEEEEEFFEEEEGG\[[ZZYXFFFFEEEENKHxCp""J|MQSVZ\HHIIIIJJJJKKLLlkkkkkkDDEEEEFFFFGGGGHH`aabbbbQQQQQQPPPPPPklkjgcJJHHGGEEDDHyBo>AABBDDFFGGJJLLMMNNPPRRTTUUVVVVWWXXYYYYZZZZZZZZZZYYYYXXddbb``^^\\ZZXXUUSSPPMMIIGG>>::88554411//--++((''%%$$11LPRVX[IIJJJJKKLLMMMMlkkHzJ}LNEEEEFFFFFFGGGGHHZZlkllkRRRRPPPPPPOOllhec`IIHHFFEECCDt?j9`x2U::88I4 ..~    ..}..}..}..}..}//~$(,0"4%8(<*?-3333444455555555^(Ca)Ee*Gh,Jk-Ln.Np/Ps1Rw2T|4X::99::;;;;;;========GxIzJ|LMNPQSTUDDDDDDFFFFFFFFGGGG__`aabbccIIJJJJIIJJJJJJKKba``_^JJDDla8M-#(GGSOKAA:: !!!!""##$$%%''((**++,,--..1133446688::<>>>??@@@kBoDrFuHxI{K~EEEEFFFFFFGGGGRRkkmllllQQQQPPPPPPOONNhfc_\HHGGFFDDBBCp=g7]t0R9977E1 ..~    ..}..}..}//~//~00'+/!3$7';*?-C/445555555566667777e+Hi,Jl-Mo/Or0Qu1Sx3U{4W5Z::;;<<<<====>>??????@@K}LMOQRTTVWFFFFFFFFHHHHHHIIIIabccddeefKKKKLLKKKKLLKKKKccba`_|e@@`66a**TQNkk__ ""!!""##$$$$%%&&''))**++,,--..001133667799;;==>>@@CCEEGGIILLNNQQTTVVYY[[^^aabbeeggiillmmpprrssuuvvyyzzzz{{||}}~~~~~~~~~~~~~~}}{{zzyywwvvtt||xxuuqqmmiidd``[[VVSSNNIIEE@@<<7733//,,))&&$$"" L 6R":X%>]'Bc*Fh,J;;;;<<====>>??=g?jAmCqEsFvHyJ|DDEERRQQRRRRRRllkllkkPPPPPPOOOONNMMfb`]YHHFFEECCBB@l:c~5Yn/O  @- ..~..~    ..~..}//~0000). 2#6&:)>,B/F2555566667777888899i,Km.Mp/Ps1Rv2Ty3V|4X6Z7]<<<<==>>>>????@@AAAAAALNPQRTUWXZFFHHHHHHIIIIIIIIKKKKddeffgggLLLLLLLLLLKKMMMMfeedcb`IItk>T:)111VSOJ}{{ !!!!""""######$$%%&&''''(())))**,,--..//00112233447799::<<==??@@BBEEFFGGIIJJLLNNPPQQSSUUVVWWXXZZZZ\\\\]]^^____````____``__^^^^]]\\[[ZZYYWWUURRQQOO]]ZZWWTTOOKKFFCC??;;774400--++((&&$$##!! H3N!7S#;Y%?^(Cc*Gh,J;;;;<<====>>;billkkkPPPPQQQQQQQQQQklkllkkPPOOOONNMMMMdb`]ZWGGEE.,&&>h8_x2Ui,J :)..~    ..~////0011110"5%9(=+A.E1I4666677777788889999m.Nq/Pt1Rw2Uz4W}5Y6[8]9`;c>>>>@@@@@@AABBBBCCCCNPQSTVXXZ[HHIIIIJJJJKKKKKKLLLLfghhiiiiiNNMMNNNNMMNNMMggfedcbOO]8888XTQM>????AAAAAABBCCCCDDPQSUWWY[\^IIJJKKKKKKLLLLLLLLMMhiijjkkklOONNNNOONNNNNNjhggfdc__a7788GGURNmmCC !!!! !!!!!!!!!!""""""!!""""##############################$$######""""""""""##""""""!!!!!!!!!!!! GyK}MOQT3344<5555 = 55ceegiik#>#88##=#77#77#77#$>$$>$kllllkj66"44 !:!!:!33 9 ^\XVSP,,10((''7]v2Tj,K $ " *     ////001111225&9)>,B/F2J5O!8777788889999::;;;;t1Sx3U{4X6Z7]8_:a;ch@@@@AABBCCCCCCEEEEEERTVVXZ[]^_KKKKKKLLLLLLMMMMMMNNjklkkkkkkOOOOOOOOOONNNNNNkjihfdVVb:N7788>>WSOOO88FuHzK~NPRJJ@@@@ L !M!!M!`bcdefgDD!$N$CC"BB!CC"BB"BB"$K$jjihhgf"E"== ::!C! A @ZXVRPL116..3**{4Wn/Na)E '      //00001122227'<*@-D1I4M 7Q":U$=88889999::::;;;;x3U{4X6Z7]9_:b;d=f>h?kAAAAAABBCCDDDDDDFFFFTUWXZ[]^`aLLLLLLMMMMMMMMNNNNNNllllklllmOOPPPPOOPPOOOOOOlkjihfQQ:_777777XTO::11&&$$##""""""!!!!  --DsFwI{KMO e f !j!<=]]]]^_`bbcd[[ 'j''h'%f%VV!UU!TT!gffeedcKKIIII!R!!Q!NBBVTRNLHy66<:9~4Yr0Qf+HX$>"" +    339(>,B/G2K5O!8T#;X%>889999::::;;;;<<{4X6Z7]9_:bi@kAnAABBBBBBDDDDEEEEFFGGUWYZ[]_`acdLLMMMMNNNNNNOOOOOOlklklklll55$55$55$%:%$9$55$44#$9$kkkjigi?T[227766YUP22//,,++))((&&%%$$######""!! s s r q +0"5%:)>,C/G3ll tt --D[\]^``a**((''((oo cbbaa`_$k$$i$$f$!b!QQOOMMRPNJ}HyI<<DB33t1Si,J\&AN!7 + (      ;*?-D0I3M 7Q":V$=Z&@ #$%%<<<<==7\8_:b%%>%%>%lkkkjh^Kg1155YUQ11//,,**))''&&%%####""!! ^ ^ ] \ [ Z Y Y J &+/"4%9(=+ !!]'Ba)Ed*Gh,Jk-Ln.Nq0Pt1R ++++__^]]\[kkjjffcc"s"!o!PNLI{FwDqGGCC??==88j-K_(CR":((-'       A.F1J5O!8S#;X%>\'A$ &!!!!""'8^:a;d=f>i@lAnCpDs,-((..))++1,,2--Z\]^`bddfg33"33"#:#33"$<$$<$$<$$=$77$klkllllkk;;%&C&;;%&C&==%%C%O==$llkljiss||mmrXX//YUP22..$$##""""!!!! IHGFEDCBA@?8_;c=g@lBpDtGwffrrrr%%&&V$=Z&@]'B`)Dc*Gf+Ii,K##!! |4X}5Y~5Y~5Z6Z6Z6Z%%$$####hhLJ|HxEtBo?jMMYTOJ`(DS#i@kAnCpDsFuGx**2++33..//6711[]_`bcefhh99"$B$$B$$B$$C$%D%%D%%E%&F&'H'lkkkllklDD%FF&'O''O''P''Q'FF$HH%llllki**0'+pBY.%)==YUP11..0/.-,+*('&p m k i e c ` y3W6[8_;c=h@lBoDsgKKsSS]]hhܙ2233PRSY%?\'A^(Ca)E q0Qs0Rt1Ru1Su1Sv2Tv2T%%~~zz!!HxFuCq@l=h;bTTOOZDD _(CU$[&A`(D*+%%%%--./0:bh?kAmCpDsFuGxIz882222334455???\^_aceggijAA"BB"CC#&O&&P&HH%'R''S''T')V)llllkkkkRR&RR%*a**b*TT%UU&QOkkllkjMM!,u,S5D"S"DDYUO11..}zxvs p m W U T R Q P N M L77u1Sw2Uy3V6[9_:b=f?jV@@^EEfJJpRRzXX__ DDLMNPPQQS !! ""h,Jj-Kk-Lk-Ll.Ml.Ml.MEuCqAm>i>?? I J ]_acdfgikkOO#OO#PP#RR$(a((b(*d*XX%YY%*i*kklkllkkkff&hh'-z--z-(66)77hh%lllllj'h'VV RR"\""X"YTO..++}zywut r q o m l j h g e c b ` ^ ] V$=\'B#$(      8^:bJ66O::U??ZBBaGGgJJnOO$UUIzJ}K~LML 6O!8}}zzwwtttt `(Da)Ea)Eb)Fc*FML@m>jh@kBnCqEtGvHyJ|K~@@MNOORFFIIJJKK_abdeghjkl^^#*q**s*,v,,w,,y,,{,-~-....kklkklllk'~~&000000NNkklkljff!(t(%c%NN..XSM**~|zxvts q o m k h f d b ` ] [ Y V S Q M JE?G2Q":Y%?^(Cc*Gh,Jk-Lo/Or0Qt1Sv2T   eDDlHHrLL>**A,,F00J22N553$6&9(<+?-B/D0G2rrssrrppoonnkkLKK~J}I|I{Hy((''##!!44557788::::?jAmBpDsFuHxI{K~LJJJJMMNN _ ` !b!!d!#h#%j%_acefhjkkl,,,,vv$xx${{%}}%~~%%00&llllkkkkl''&*88)77%%kkllmjqq!kk [[ @ >VQK&&|zxus p n k h e b ^ [ V Q H!K5T#;Z&@`(De*Gi,Jl.Mo/Or0Qt1Sv2Tx3UmMMrPPxUU~YY\\aaddgg?k@mAoCpDrDsEuFvzzyyzzzzxxwwwwvvGxGwFwFuFuEsDrccbb__####!!:`7]~5Yx2Ur0Ql-Lll ee ^^ mB08', ..     $  ""#  5 K5P"9U$=Z&@_(Dd*Gi,KBCDF<<IKMP@kAnCqEtGwHzJ|LMd h XX[[]]``bbeegg&~&`bcegijlkl#%1111113333334444lkllkllll&'&55)77)77Ekkllli||!uu 003?UOIz""|yvs o l g b \ Q  % $$ U$<[&Aa)Ee+Hi,Kl.Mo/Or0Qt1RhJJmMMpOOuSSyVVYY]]aabbgtSSwUUoonnoooooo?j>j?i>i=g=f>[AA^CCdFFhIIlLLoOOtRRxUUw2Uw2Ux3Uz4W}5Y6Z6\7^8_qPPrQQtRRjjjjjjkkjj:b;b:b9`9`8^7]aa``^^ZZm-Mi,Jd*G^'CY%?R";|s+" F1#############"""""""""""!!!!!!!!  ( * + %% J4O!8U$>]BB`DDfHHiKKmLLpOOs0Rt1Rt1Su1Su1Su1Su1Sx2Uy3WlMMnMMcccceeffeeee6[5Z5Z~5Y|4X{4Wy3V^^]][[YY}WW`(D\'AV$=Q"9K5~u'" F %$$$$$$$$$$$$##!!!!!!!!    "' ""$$ / H3N!8T#h&&&&&''#$$$%%&&&''((())***++,,--..//0011223J4!#O88T<R";N 8I3C0w'! 44&&&&&&&&&&&&%%%%%%$$$$$$$$$""############    (!!""$$'' 2 M 6R#;X%?^'Cc*Fi,Jn.NNNQQUUWWZZsaaddAnCqEtGwI{K~MNPR**--degijlllkl7777778899%998888kllllllllǐ:}}9{{8uuR2cc1__llkhfbuWWlQQ5,,2))KCp((((((((((('(()))**+++,,- N!7T#=jRR8xx5qq{{wwkifc`]nQQdKKYCC((=g !!!!!!!!!!!!   O!8S#;W%>Z&@\'A^(C [==L22N44O55dCCgDDsPPuQQvRRvSSa)E`)E_(D^(C]'B[&AZ&@X%>tQQtPPsPPqMMoMMtt rr E1B/?,;*8'[[SS  ********* ((((((((((((((((($$$  ""%%((**E1L 6R":X%>^'Cc*Gi,Kloty| BpDsFvHzJ}LNPR--..00//001122112233bceghjllklklkkklklluZZ;8}}0,,{\\z\\wZZifc`]XhMM^FF.%%//!!!!!!!!!!!!""""""""""""""""""""""  !#S77aCCcEEeFFV<>Y??Z@@[@@oMM]'B\'A[&A     gEEfDDeCCdCCbAAhh      bb__WW!  ,++++++++!!!!!!!!!!!!!!!!!!+++++*********))))))))))((((((%%%&  - 0 3 A.H3N!8U$<[&@a)Ef+Imqv{BnDrFuHyJ|LNOQ--..////110022112233bcdfhikkkllkkllmklltYYnTTiPPbMMyyttppfc`\XTaHH1((&&""""""""""""""""""""""""------!! "#%%^AA`BBcDDcFFW$=W$=V$=V$=U$=    bAAjIIhGGhGGeFFkk ii @.>,;)7'4$dd\\TT>> """"""""""""""""""""""""""""""""""""""""""""""""""!!++++++++++++++++++*****)))))))) ((&&&&""" / 3 6 D0K5Q"9W%>]'Bc*Gi,Ksy|AmCpEtGwIzK~MOP,,....//110011112233abdefhikmkkklklllllpVVkSSfOO_KKssppllb_[XTdJJXAA%%66...........///////)***+9(@-D0G2I4K5L 6M 7N!7N!7N!7N!7M 7M 6L 6bDDaDDaBBaBB`BB|{=,;*8'4%1#]]UU /////$$$$$$$$$$$$##############################"""""""""""""""""""",,,,,,,,,,,,++++++!!!!!!!!!!!!!!!!!!!!!!!!!! )&''''''''''''''"$$ 1 4 ?,F1L 6S#;Y&?_(De+H]]x~@kBoDrFuHyJ|LNPQ..00////00111111 5 `bcdeghikllllkkllllmTTgOOaKK^IIppkkff^ZWRMZCC+""///////////00000000###$$$%%%&&'',---..//- 7'<*>,@.B/B/C/C0"!!     8'5&2#/!+%0000000000%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$############################--##""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!'''(((())))))))))))"- 2 8(@-G2N!7U$<[&Aa)E^^bbff>i@lBpEsGwIzK}LNP0011334_`bcddfghj着ꧧ䣣zzkkllkllljhPPcLL^IIoojjeeccYUQLFu,$$B%%00000000112222222222                                             "###$$$%%%..///0011 /!- +(#22222111111111&&&&&&&&&&&&&&&&&&%%%%%%%%00000000/////.......######################"""""""""""""""""")))))))))))))*******0$$0"9(A.H3O!8U$=\'A\\ aaffiiww||=f?iAmCqEtGwI{K~MO..//^_`abcdefg椤夤䢢⡡ߟܞwwttqqkklkkjihgOObLL\HHZFFiidd``WSNI|Cr*""&&&&&&&&&&22222233333333((((((((                                ###$$$$%%&         .///001112444444444222''''''''''''22222211111111111110000000000000//$$$$$$#################### )))))*************++,,,&&0"8(@.H3O!8V$=[[ ^^ ccggppuuzz=f?jAmCqEtGxI{K~M....\]^_`abbcdҖіuussqqoolljjhhiiihgfedbLL\HHXDDeebb]]{YYPLFw@l7]((((((3333(((((((())))))))))))))))))))))))))))!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!##$$$%%%&&&'           --..///0011************))))))))))((((((((((((((((((((((((33333222222222222111111111110000000%%%%%%%%$$$$ *****+!!!!!!!!!!!!!!!!!!""""""""""""""#####. 7'?-G2N!8Hrw|ww{{:b=f?jAmCqEtGwIzK~----zz}}[\]^_``aallllkkjjggffddaa``eeddcba_[FFVBBdd``}[[wWWoQQHyCpi@lCpDsFvHy,,,,ssuuYZ[\\]^^^ddccbb``__~]]{\\||vXXaa__]][ZT@@``~[[xWWqSSkNNDr>i5[66666666677777++,,,,,,,,,,,,,,,,,,,,,,,,,,--""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!                     ,,,,,,,,,,,,,,,,,,,,,,++++++++++++++++++++++++++++**************665555555555433333((''''''''''''''''''''""""""""""################################$$$$$$$$$$$$$$$$#0"9)B/Cmsx}}5Y7]9`;d>g@kBnDrEu**++jjllnnVWXYYZ[[[zZZz[[yZZvXXuWWsUUpSSnSSss\\ZZXWUT}ZZxWWsSSnOOfJJ\CC8^h+J88888888999999999----------------------......"""""""""""""""""""""""""""""""""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!          //......----------------------,,,,,,,,,,,,,,,,,,,,,,,,++++++++++++++++++++7++************))))))))))))((((((((((((((((((########################$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%&&&&&&&&(4$KKPP kqw}t1Sz3W6Z8^:bi@lBovvyy}}))**ccgghhRSTUVVWWXqqppmQQlPPkPPiOOgMMdKKaIIVUTSRPNKrSSmOOeII]CCR<>=0000//////////////////////....----------------::::::988888888++++++++++++++++++++++******))))))))########$$$$%%%%%%%%%%%%%%%%%%%%%%%%&&&&1111112222222.++MMRR mtyj-Kp/Ou2S{4W6[8_:binnpp((((^^^^``aaOOPQRRSSSjjiiiicJJaII_GG]FF[EEXCCONMLJ}HxEujMMdHH[CCR<<$;;;;;;;;<<<<<<<////////0000000000>>>>>>>>>@@$$$$$$$$$$$$$$$$$$$$$$$$$$$$(()""""""""""""""""!!!!!!!!!!!!!!!@@?????11111100000000======<<<<<<<<<;;;;;;;;:::::9999,,,,,,,,,,,,,,++++++++++%%%%%%%%///0111111111122222222223333334,**MMSS nt^'Bd*Gj-Kp/Ou1Sz4W6[8^:a wz+&&vUUxVVzYY}ZZ\\J|K~LMMNNNOaaaa````____]]\\O;;HxFvEtCp@m>h:bX>>N99 " <<<////////////////000000000011111111222222$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*++++,,"""""""""""""""""""""""""!!!AA442222222222222222@@@@@@@??????>>========<<<<<<<;;;;;;;;::------,,,,,,1111111111222222222233444444445555555)) 1 ..QQ N!7U$<\'Ab)Fh,Jm.Ns0Rx3U}5Yhk))*mOOqRRsRRtSSvUUEtFuGwGxHyHyIzIzIzS>>S>>Q==P<h;d8_}5Yr0Q(0000000011111111111111%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"####$$%%%%%%%%%$$$$$$$$,,,---.55555555555555555544444444333333AAAAAAAA@@@@@@@??>>>>>=======<<<<<<<<;;;1122222222333444444444555555555667777++++++++3$?-H3P!9W$>]'Bc*Fh,Jn.N\&''dGGeIIhJJjKKkMM>h?j@k@lAmBnBoBoBoBoI88I77H77F55lNNkMMhJJeII8_6[x3Vo/Ob)F&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&""###$$$$%%%%%%%%%%%%%%%%%%%%%%,---..../00000000//666666666666666666555555555555CCBBBBBBBAAAAAAA@@@@@@>>>>>>>======3333344444444445555556667777777788888,,,,,,,,,,,,,,,,;*E1M 7T#>X??\BB]BB`DD`EE7\8]8_9`:a:a:b:b:bdHHdGGbFFaFF`DD]CCZ@@U<444444445566666667777777788888899,,,,,,,,::::;;;;;;;;0""%C//G22J55K66O88Q99R;;k-Lm.Mo/Op/Pq0Pr0Qr0Qq0Pp/PU<>>>>>>>>>ONNNNNMMMMLLLLLKKKWVVVVTTTTTSSSSRRRRQQQPOOO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"""""""""""""""""""""""",,,,,,---------!!!!!!!!      ,,----.     BBBBAAAAAAAAAAAA@@@@@@@@@@@@????PPPPPOOOONNNNYYYYXXXXWWWWVUUUTTTTSSSSRR))))))))))))) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""##################--F..F..F..F..G..G..G..G..G//H//H//""""""""""!!!!!!!!!!,----..     DDDDDDDDDDCCCCCCCCCCBBBBBBBBBBBBAAAAAAAAAA@@RRQQQQ]]]]\\\\ZZZZYYYYXXXWWWWUUUUT(((())))))))))))**********!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""##########################F..F..F..G..G//G//G//G//H//H//H//H00I00I00I00I00I00J00J11J11J11J11K11############""""""""""--..--.    GGFFFFFFFFFFFFEEEEEEEEEEEEDDDDDDDDDDCCCCCCCCCCBBBBBBBBbaaa`____^^^]]]]\\[ZZZZYYYYXXX(((((((()))))))))))***********++++++++!!!!""""""""""""""""""""""""""##########################F..F//G//G//G//G//G//H00H00H00H00I00I00I00I11J11J11J11J00J00K11K11K11K11L11L11L11L22L22M22M22M22M22N22N33N33$$$$$$$$$$$$##############""""!!!!!!!!!!  ----....  ,,""""""IIIIIIIIIIHHHHHHHHHHGGGGGGGGGGGGFFFFFFFFEEEEQQQQQQPPPPOOOOOONNNNcccbbbba``____^^^]]]][[[ZZ()))))))))))**********+++++++++++,,,,,,""""""""""######################F..F..F..F..G..G..G//G//H//H//H//H//I00I00I00I00J00J00J00J11K11K11K11K11L11L22L22L22M22M22M22M33M33N33N33N33N33O33O44O44O44P44P44P44P55P55P55P55P55P55%%%%%%%%%%$$$$$$$$$$$$############"""""""""",,,,----,,""""""""""""""""""!!!!!!!!!!ZZZZZZZZYYYYYYYYXXWWWWWWWWWWVVVVVVVVVVUUUUUUTTTTSSSSSSSSRRRRRRRRRRQQQQQQPPOO e e d d dcccbbba```___^^^]))))**********++++++++++,,,,,,,,,,-----##########  F..F..F..F..F..G//G//G//G//H//H//H00H00I00I00I00I00J11J11J11J11K11K11K22L22L22L22L22M22M33M33M33N33N33N33N44O44O44O44O44P44P55P55P55Q55Q55Q55Q66R66R66R66R66R55R66R66R66R66S66S66S66S77S77T77T77T77T77U77U88%%%%%%%%%%$$$$$$$$++,,,+,--""""""""""""""""^^^^^^]]]]\\\\\\[[[[[[[[[[[[ZZZZZZZZXXXXXXXXXXWWWWWWWWVVVVVVVVUUTTTTTTTTSSSSSSSSRRRRRRRR g g f e e e d d d dcccbaa``******++++++++++,,,,,,,,,--------          D--D--D--E--E--E..E..F..F..F..G..H//H//H//H//I//I//I00I00J00J00J00J00K11K11K11K11L11L11L22M22M22M22M22N22N33N33N33O33O33O44O44P44P44P44P44Q55Q55Q55R55R55R55R66S66S66S66S66T66T77T77T77U77U77T77T88U88U88U88U88V88V99V99V99 22 22 22 22 11 11 11 11 11 00 00 00 00 00 // //,,,,Y;;Z;;Z;;Z;;Z;;Z;;--######bbbbaa``````````__________^^]]]]]]]]\\\\\\\\[[[[[[[[[[YYYYYYYYXXXXXXXXWWWWWWWWVVUUUUUUTTTTTTTTSSSSSSSS i h h h f f e e OOOOOONNNN++++++++,,,,,,,,,---------........              D,,D,,D,,D,,E,,E--E--E--E--F--F..F//F//G//G//G//G//H00H00H00I00J00J00J11J11K11K11K11L11L22L22L22M22M22M33M33N33N33N33O33O44O44O44P44P44P44P55Q55Q55Q55R55R66R66R66S66S66S77S77T77T77T77U77U88U88U88V88V88V88V99W99W99W99W99W::W::W::X::X:: 55 55 55 55 55 44 44 44 44 44 33 33 33 33 22 22 22 22 11 11 11 11 11 00 00.....\==\==]==]==]==]==]==]==]==]==^==^==]>>]>>]>>]>>]>>]==]==]==]==]==]==]==\==]==]==]==]==]==]==]==]==]==]==\==[<< l l ddddddddccccccccccbbaaaaaaaaaa````````____^^^^]]]]]]]]]]\\\\\\\\[[ZZZZYYYYYYYYXXXXXXXXWWWWWWVVUUUUUUTT k k j SSSSSSRRRRQQQQPPPP+,,,,,,,,---------.........///////             !!B++B++B++C++C++C,,C--D--D--D--D--E--F..F..F..F..G..G..G//G//H//H//H//H//I00I00I00I00J00K00K11L22L22L22L22M22M33M33M33N33N33N44O44O44O44O44P44P55P55P55Q55Q55Q66R66R66R66R66S77S77S77T77T77T77T88U88U88U88V88V99V99V99W99W99W::X::X::X::X::Y;;Y;;Y;;Z;;Z;;Z::Z;;Z;;Z;; 88 88 88 88 88 77 77 77 77 66 66]==]==]==^==^>>]>>]>>^>>^>>^>>^??^>>_>> 22 22 22 22 11 11/////0`??`??`??`@@`@@a??`??`??`??`??`??`??`??`??`??`??a??`??`??`??`@@`@@`??`??`??`??`??`??`??_??_??_??_??_??_>>_>> p o o o o o n n ggggggffeeeeeeeeeeddddddddccbbbbbbbbaaaaaaaa``````__^^^^^^^^]]]]]]]]\\\\[[ZZZZZZZZ r q p p p o o o n n n m l l TTTTTTSSSS,,---------........////////0000000           !!!!A**A**A**A++A++B,,B,,B,,C,,D,,D,,D,,D--D--E--E--E--E--F..F..F..G..H//H//H//H00I00I00I00I00J11J11J11J11K11K11K22L22M22M22M22N22N33N33N33O33O33O44P44P44P44P44Q55Q66Q66R66R66R66R77S77S77S77T77T88T88T88U88U88U99V99V99V99V99W::W::W::X::X::X;;Y;;Y;;Y;;Y::Z;;Z;;Z;;[;;[;;[<<[<<\<<\<<\<<]<<]==<<;;;; ;; ;; :: :: :: :: 99_??_??_??`??`??`@@`@@a??`??`??`??a??a@@a@@a@@b@@b@@b@@b@@bAA 33 33 33 22///000cAAcAAcAAcAAcAAcAAcAAcAAcBBcBBcBBdBBdAAcAAcAAcAAcAAcAAcAAcAAcAAcAAcAAcAAbAAbAAbAAbAAb@@b@@b@@b@@b@@b@@a@@a@@a@@ t s s s s s s r r r r r r q q q iiiiiiiihhhhhhggggffffffffeeeeeeeeccccccccbbbbbbbbaaaaaa``__ y y x x x w v u u u t t t s s s q q p p p o o n n n UU---........////////000000001111111          !!?))?))?))@**@**@**@++@++B++B++B++B++C++C,,C,,C,,C,,D,,D,,E..E..F..F..F..F..G..G//G//G//H//H//I//I00J00J00J00J00K00K22K22K22L22L22L22L33N33N33N33N33O44O44O44P44P44P55P55Q55Q55Q55R55R66R66R66S66S66S77T77T77T77U77U88U88U88V88V88V99W99W99W99X99X::X::X::Y::Y::Y;;Z;;Z;;Z;;[;;[<<[<<\<<\<<\<<\==]==]==]==^==^>>^>>_>>_>>_>>_????+>>>>>>======<<<((>((>((>((?))?**?**?**@**A**A**A**A++A++B++B++B++B++C++D--D--D--D--E--E--E--E..E..G..G..G..G..H//H//H00H00I00I00I00J11K11K11K11K11L22L22L22L22M22M22M33N33O33O44O44P44P55P55P55Q55Q55Q66R66R66R66R66S77S77S77T77T77T88V88V88V88V88W99W99W99X99X99X::Y::Y::Y::Z::Z;;Z;;Z;;[;;[;;[<<\<<\<<\<<]==]==]==^==^==^>>_>>^>>^>>_>>_??_??_??`??`??`@@a@@a@@a@@b@@bAAbAABBAAAAAA@@@@@@??????eBBeBBeBBeCCfCCfCCfCCfCCfCCfDDfDDfDDgDDgCCgCCgDDhDDR66R66R66 77 77 660001111T88U88U88U88U88U88U88U88V88V88V99V99V99V99V99V99V99V99V99V99V99W99iEEiEEiEEiEEiEEiDDhDDhDDhDDhDDhDDgDDgDDgDDgDDfDDfDDfDDfDDfDD y y y y y x x x x w w w w w v v v nnnnnnllllllllkkkk    ~ ~ } } | { { z z z y y x w w v v u u u t t /////0000000111&&&&&&&&&&''''''''''''''''((((((((((((;'';''=''=''=''=((=((>))>))>))>))?))@))@**@**@**@**A**A**B**B,,B,,C,,C,,C,,C,,C,,D--E--E--E--F--F--F--F//G//G//G//H//H//I00I00I00I00J00J00J11J11L11L22L22L22M33M33M33N33N33N33N44O44P44P44P44Q55Q55Q55R55R55R66R77S77S77S77T77T88T88U88V88V88V99W99W99W99X99X::X::Y::Y::Y::Y;;Z;;Z;;Z;;[<<[<<[<<\<<\<<\==]==]==]==^==^>>^>>_>>_>>_??`??`??`??a??a@@a@@b@@b@@bAAcAAcAAcAAcAAcBBcBBcBBdBBdBBdCCeBBeBBEEDDDDCCCCCCBBBBBBAAAA@@hEEhEEiEEiEEiEEiFFiEEiEEiEEiEEjEES77S77S77 ;; :: :: 99 991111211V99V99V99W99W99W99W99W::W::X::X::X::X::X::X::X::X::X::X::X::Y::Y::Y::Y::Y::Y;;Y;;Y;;kGGkGGkGGkGGkGGkFFkFFkEEjEEjEEiEEiEEiEEiEEiEEiEEiEEhEE | | | { { { { { z z z z y y y x x ^^pppp   ~ ~ ~ | | { { z z z y y w w w 0000&&&&&&&&&&&&&&&&&&''''''''''''''''(((((((((((((((())))))))))=((=((=))>))?))?))?))?))?))@**@**A**A++A++B++B++B++B,,B,,D,,D,,D,,D,,D,,E..E..E..E..G..G..G..G//H//H//H//H//H//J11J11J11J11K11K11K22K22L22M22M22M22N33N33N33O44O44O44O55Q55Q55Q55Q55R66R66R66S66S66S77S77T77T77T77V77V99V99W99W99W99W::X::X::X::Y;;Y;;Y;;Z;;Z;;Z<<[<<[<<[<<\<<\==\==]==]==]==]>>^>>^>>^>>_??_??_??`??`??`@@a@@a@@a@@bAAbAAbAAcAAcAAdBBdBBdBBeBBeCCeCCfCCfCCfCCgDDgDDgCCfCCgDDgDDgDDhDDhDDhEEGGGGFFFFEEEEDDDDCCCCCCBBBBAAAA@@@@@@????>>>>======<<<<1111112oIInIInIInIIoIIoHHoIIoIIoIIoIInIIoIIoIIoIIoIIoIIZ;;Z<))?))?))@))@**@**A++A++A++A++A++C++C++C++C,,C--D--D--D--E--F--F..F..F..F..G..G..H//H00I00I00I00I00I00J11K11K11K11L11L11L33L33M33M33N33N33O44O44O44P44P44P44P55R55R66R66R66S77S77S77T77T77T88T88V88V88V88W88W99W99X99X99X99X;;Y;;Y;;Y;;Z<>^>>_>>_>>_??`??`??`??a??a@@a@@b@@b@@bAAcAAcAAcAAdAAdBBdBBeBBeBBeCCfCCfCCfCCgDDfDDfDDgDDgDDgEEhEEhEEhEEiEEiEEjEEjEEjEEkFFkFFkFFkFFkGGkGGlGGlGGlGGIIHHHHGGGGFFFFEEEEDDDDCCCCBBBBAAAA@@@@@@111112qJJqKKqKKqKKrKKrJJqJJqJJqKKrKKrKKrKKrKKqKKqKKrKKrKKrKKrKKrKKrKKqKKqKKqKKrKK]==]==]==]==]==]==]==]==]==]==]==]==]==]==pJJpJJpIIpIIpIIpIIoIIoIIoIInIInIInIInIInIImHHmHHmGGmGGlGGffffeeeeeeeeeeddddddddccccccccbbbbuuuutt    } ''''''''''''''(((((((((((((((())))))))))))))****************++++++++@**@**@**B++B++B++B++B++C,,C,,C,,D--D--E--E--E--E--E--G..G//G//G//H//H//H//H00J00J00J00J00J11K22K22L22L22M22M22M33M33N33N33O33O44P55P55P55P55Q55Q55Q66S66S66S66S66T77T88T88U88U88V88V99W99W99W99X99X::X::X::Y::Y::Y;;Z;;[;;[<<\<<\==\==]==]==]>>^>>^>>^>>_>>_??_??`??`??`@@a@@a@@a@@b@@bAAbAAcAAcAAcBBdBBdBBdBBeCCeCCeCCfCCfCCfDDgDDgDDhDDhEEhEEiEEiEEiFFjFFjFFjFFkFFkGGkFFlFFkFFkGGlGGlGGlGGmHHmHHnHHnHHnHHoIIoIIGGGGFFFFFFEEEEEEDDDDHHHHGGFFFFEE11221000Y;;Z;;Z;;sLLsMMtMMtLLtLLtLLuLLtLLtMMtMMtMMuMMuMMuMMuLLtLLtMMuMMuMMuMMuMMuMMtMMtMMtMMtLLuLLuLL_>>_??_??_??_??_??_??_??_??_??_??_??_??_??sLLsLLrLLrLLrLLrKKrJJrJJrJJqJJpJJpJJpJJpJJpJJpJJpJJoJJnIInHHhhhhggggggggffffffffeeeeeeeeddddddccvvvv ''(((((((((((((((())))))))))))))**************++++++++++++++,,,,,,,,B,,B,,B,,C,,C,,D,,D,,D,,D--D--F--F..F..F..F..G//G//H//H//I//I//I00I11I11K11K11K11K11L22L22L22M22N33N33N33N44O44O44O44P44Q44Q55Q55Q66R66R66S77S77T77T77T77U77U88U88U88W88W99W::X::X::X::X::Y;;Y;;Y;;[;;[;;[<<\<<\<<\<<]<<]==]>>^>>^>>^??^??_??`??`??a@@a@@a@@b@@b@@bAAcAAcAAdAAdBBdBBeBBeBBeCCfCCfCCfCCgCCgDDgDDhDDhDDhEEiEEiEEjEEjFFjFFkFFkFFkGGlGGlGGkGGlHHlHHmHHmHHmIInHHnHHnHHoHHoIIoIIpIIpIIoJJpJJKKKKKKJJJJJJIIIIIIHHHHHHGGGGGGFFFFEEEEEEDDDDDDCCCCBBBB00011vNNvNNwNNwNNwNNwNNwOOwOOwOOwOOwNNwNNxNNxOOwOOwOOwOOwOOxOOxOOxNNwNNwNNwNNwOOwOOwOOxOOwOOa@@a@@a@@a@@a@@a@@a@@a@@a@@a@@a@@a@@a@@uMMuMMuMMuMMuMMuMMuMMtMMsMMsMMsLLsKKsKKsKKsKKrKKrKKqKKqKKqKKqKKqJJjjiiiiiiiiiihhhhhhggggggggffffffeeeeyyww (((())))))))))))))**************++++++++++++++,,,,,,,,,,,,----------C,,C,,D,,E--E--E..E..F..F..G..G..G..H//H00H00H00I00J00J00J11J11K11L11L22L22M22M33M33M33O33O33O33O44O55P55P55Q55R55R66R66R66S66S66T66T88U88U88U88U88V99V99W99X99X99X::X::Y;;Y;;Y;;[<<[<<[<<\<<\<<\==\==]==]==]==^>>_>>_??`??`??`@@a@@a@@a@@bAAbAAbAAcAAcAAcBBdBBdBBdBBeCCfCCfCCgCCgCChDDhDDhDDiDDiEEiEEjEEjEEjFFkFFkFFkFFkGGkGGlGGlGGlHHmHHmHHmHHnIInIIoIIoIIoJJpJJpJJpJJqKKqJJpJJqJJqJJrKKrKKrKKPPOOOOOONNNNMMMMMMLLLLvMMvMMvMMvNNvNNvNNwNNwOOwOOwOOZ;;Z;;Z<<[<<[<<EEEEEEDDDD211111yPPzPPzQQzQQzPPyPPzPPzPPzPPzPPzQQzQQzQQzQQzPPzPPzPP{PPzPPzQQzQQzQQzQQzQQyPPyPPcAAcAAcAAcAAcAAcAAcAAcAAcAAcAAcAAcAAcAAcAAxOOxOOxOOxOOxNNwNNwNNvNNvNNvNNvNNvNNuNNuNNuMMuLLtLLtLLtLLsLLsLLsLLrLLrKKllkkkkkkkkjjjjjjiiiiiiiihhhhhhggggggzzzzzz ))))))**************++++++++++++,,,,,,LLMMMMMMNNOOOOOOOOOO..........E--F--F..F..G..G//G//G//I//I00I00I00I00J00K11K11K22L22L22L22M22M22N33N44N44N44P44P44P55P55Q55Q55R55R66S77S77S77S77T77U77U88V88V88V99V99W99X::X::X::Y::Y::Y;;Z;;[;;[<<[<<\==\==\==]==]==]>>_>>_>>_>>`>>`??`??a@@a@@aAAbAAbAAcAAdAAdBBdBBeBBeBBeCCfCCfCCfCCgCCgDDgDDhDDhDDhEEiEEiEEiEEjFFjFFjFFkFFkGGlGGlGGlGGmGGmHHmHHnHHnHHoIIoIIoIIpIIpJJpJJqJJqJJrKKrKKrKKsKKrLLrLLsLLsLLtMMtLLtLLuLLuMMTTSSSSSSRRRRQQQQQQPPxNNwOOxOOxOOxOOyPPyPPyPPyPPyPPyQQzPPzPP[<<\==\==\==]==]==]>>GGFFFFFF22223|RR|QQ}RR}RR}RR|RR|RR}RR}SS}SS}SS|RR}RR}RR}RR}RR}RR|SS|SS}SS}RR}RR}RR|RR|RRdBBdBBdBBdBBeBBeBBeBBeBBeBBeBBeBBeBBeBBeBB{PP{PP{PP{PPzPPyPPyPPyPPyPPyPPxOOxOOxOOxOOxOOwOOwOOvNNvNNvNNvMMvMMuMMuMMuMMtMMtLLmmmmmmllllllllkkkkkkjjjjjjiiiiiihhhhhh{{{{ ********++++++++++JJKKLLLLLLLLLLNNNNNNNNNNOOPPPPPPPPQQQQRR//////////F//H//H//H//H//H//J00J11J11J11K11K11L11L22L22M22M33M33N33O33O44O44O44P44Q55Q55Q66Q66R66R66S66T66T77T88T88U88V88V88V99W99W99W99X99Y;;Y;;Y;;Z;;Z;;Z;;[<<\<<\<<\<<]==]>>]>>_>>_>>_>>_??`??`??`??a@@a@@b@@cAAcAAcBBdBBdBBdBBeBBeCCeCCfCCgCCgDDhDDhDDhDDiEEiEEiEEjEEjEEjFFkFFkFFlFFlGGlGGmHHmHHmIInIInIInHHoIIoIIpIIpIIpJJqJJqJJqJJrKKrKKsKKsKKsLLtLLtLLtLLtMMtMMuMMuMMuNNvNNvNNwNNwOOwNNxNNwNNXXWWWWVVVVVVUUUUTTzQQzPP{PP{QQ{QQ|QQ{QQ{RR|RR|RR|RR}RR|RR|RR}RR}RR]>>^>>^>>^>>_>>_??IIIIHH322233b@@TTTTTTTTTTTTUUTTTTTTTTTTTTTTTTTTTTTTTTTTTTfCCfCCfCCfCCfCCfCCfCCfCCfDDfDDfDDfDDfDDfDDfDDfDD}SS}SS}SS|SS|SS|QQ|QQ|QQ|QQ{QQ{QQ{QQ{QQ{QQzQQzPPyPPyPPyPPyOOyOOxOOwOOwOOwOOwOOwNNvNNvMMvMMoooonnnnnnmmmmmmmmllllllkkkkkkjjjjiiii}}|||| IIIIIIJJKKKKKKKKLLLLMMMMMMNNNNNNOOOOPPPPPPPPQQRRRRRRRRSSTT0000000011I00I00I00J00J11K11K11K11L11L22L22M33N33N33N33N33O33P55P55P55P55Q55R55R55R66S77S77T77T77U77U88U88U88W99W99W::W::X::Y::Y::Z::Z;;Z<>_??_??`??`??`@@`@@b@@b@@b@@cAAcAAcBBdBBdBBdCCfCCfCCfCCgDDgDDgDDhDDhDDhEEiEEiEEjEEkFFkGGkGGlGGlHHmHHmHHmHHnHHnIInIIoIIoIIoJJpJJpJJqJJqKKqKKrKKrKKrLLsLLsLLtLLtMMtMMuMMuMMvMMvMMuMMvMMvNNvNNwNNwOOxOOxOOxOOyPPyPPzPPyPPyQQzQQzPP{PP[[[[ZZZZZZYYYYXXWW}SS~RR}RR}SS~SS~SS~SSTT~TTTTTTSSTTTTTTTTUU_??`??`??`??LLKKKK333344cAAcAAdBBdBBdBBdBBdBBeBBeCCVVVVVVVVVVUUUUfDDgDDgDDgDDgDDgDDgDDgDDgDDhDDhDDhDDhDDhEEhEEhEEhEEhEEhEEhEEhEEUUUUTTTTTTTTTTTTTT~TT~SS~SS~RR}RR}RR|RR|RR|RR|RR|RR|RR{QQzPPzPPzPPzPPzPPyPPxPPxPPxOOxNNwNNwNNppppppppoooooonnnnnnmmmmmmllllkkkkkkjjjj~~}} KKKKKKKKKKMMMMMMMMMMOOOOOOOOOOPPQQQQQQQQRRSSSSSSSSTTTTUUUU1111112222J00K11K22K22L22L22M22M22M33N33O44O44O44O44P44Q55Q55Q66Q66S66S66S77S77T77U77U88U88V99V99V99W99X99X99X;;X;;Z;;Z;;Z;;[;;[<<\<<\==]==]==]>>^>>_>>_>>_>>`??`@@`@@b@@b@@bAAcAAcAAcAAcAAeBBeCCeCCfCCfCCfDDgDDgDDhDDiEEiEEiEEjEEjEEjFFkGGkGGkGGlHHlHHmHHnHHnIIoIIoIIoIIpIIpJJpJJqJJqJJqKKrKKrKKsKKsLLsLLtLLtLLuMMuMMuMMvMMvNNvNNwNNwOOxOOxOOxOOxPPxPPyPPyPPyQQzPPzPP{PP{QQ{QQ|QQ|QQ{RR|RR|RR}RR}SS}SS~SS____^^^^]]]]\\[[[[ZZZZTTUUUUUUUUUUVVVVUUUUVVVVVVVVWWWWPPOOOONNNN444444dBBeBBeBBeCCeCCfCCfCCfCCfCCfDDgDDgDDgDDgDDgDDhDDhDDhEEhEEhEEhEEiEEiEEiEEiEEiEEiEEiEEiEEiFFiFFiFFjFFjFFjFFjFFVVVVVVVVVVVVVVVVVVUUUUUUUUTTTTTTTTTTSSSS~SS}SS}SS}SS}SS}RR|RR{QQ{QQ{QQ{QQzQQzPPzPPyPPyPPxPPxOOrrrrqqqqqqppppppoooooonnnnmmmmmmllllllkkLLLLMMMMMMNNNNOOOOOOPPPPQQQQQQRRRRSSSSSSSSTTUUUUUUUUWWWWWW2222333333L22L22L22N33N33N33N44O44P44P44P55P55R55R66R66R66R66T66T77T88T88U88V88V88V88W::W::X::X::Y::Y::Y;;[<<[<<[<<[<<\<<]==]==]==^>>^>>_??`??`??`??`??b@@bAAbAAcAAcAAcBBeBBeBBeBBeBB6$$6$$6$$7$$7$$7$$7$$7$$7$$7$$7$$8$$8%%8%%8%%8%%8%%8%%8%%nIInIIpIIpJJqJJqJJqJJrJJrKKrKKsKKsKKsLLtLLtLLuLLuMMuMMvMMvMMwNNwNNwNNxNNxOOxOOyOOyPPzPPzPPzPP{QQ{QQ{QQ{QQ{RR|RR|RR}RR}SS}SS~SS~SSSS~SS~SSTTTTTTTTUUUUUUUUccbbbbaa````__^^^^]]]]\\[[[[ZZYYXX_??XXWWVVVVUUTTTTSSSSRRQQ555444eCCeCCfCCfCCfCCfDDgDDgDDgDDgDDhDDhEEhEEhEEhEEiEEiEEiEEiEEiFFjFFjFFjFFjFFjFFjFFjFFjFFkFFkFFkFFkGGkGGkGGXXXXXXXXXXXXXXXXWWWWWWWWWWWWWWWWVVUUUUUUUUUUUUUUUUTTTTTTTT~SS~SS~SS~SS}SS}SS|RR|QQ|QQ{QQ{QQ{QQ{QQyQQyPPyPPssssrrrrrrqqqqppppppoooooonnnnmmmmmmllNNNNNNNNOOPPPPPPPPPPRRRRRRRRSSTTTTTTTTUUVVVVVVVVWWXXXXXXYY444444444455M33O33O33O33O55O55Q55Q55Q55Q55S55S77S77S77T77U77U77U88U99W99W99W99W99X::Y;;Y;;Y;;Z;;[;;[<<\<<\==\==]==^==^>>^>>^>>`??`??`@@a@@a@@b@@b@@cAAcBBcBB7$$7$$7$$7$$7$$7$$8%%8%%8%%8%%8%%8%%9%%9%%9%%9%%9&&9&&9&&:&&:&&:&&:&&:&&:&&:&&:&&:&&;&&;&&;'';'';'';'';'';''uMMuMMuNNvNNvNNwNNwOOwOOxOOxOOxPPyPPyPPzPPzQQzQQ{QQ{QQ|RR|RR|RR}SS}SS~SS~RR~SS~SS~SSSSTTTTTTTTUUUUUUVVVVVVUUVVVVVVVVWWWWWWWWWWeeeeddccccbbaaaa``____^^]]]]\\[[[[ZZYYYYXXWWVV5556555fCCfCCfCCfDDgDDgDDgDDhDDhDDhEEhEEiEEiEEiEEiEEiFFjFFjFFjFFjFFjFFkFFkFFkGGkGGkGGkGGkGGlGGlGGlGGlGGZZZZYYYYZZZZZZZZZZYYYYYYYYYYYYYYYYXXXXXXWWWWWWWWWWVVVVVVVVVVVVVVVVUUTTTTTTTTTTTT~TT~SS~SS~RR|RR|RR|RR|QQ{QQ{QQzQQzQQttttssssssrrrrrrqqqqppppppoooonnnnnnmmmmOOOOPPPPQQQQQQRRRRSSSSSSTTTTUUUUVVVVVVWWWWXXXXYYYYZZZZZZ[[5555556666EP44P44P55Q55R66R66R66R66T77T77T77T88U88V88V88V99V99X::X::X::X::Z;;Z;;Z;;Z<<\<<\<<\==]==]==^>>^>>_>>_??`??`??a??a@@aAAcAAcAAcAA7$$8$$8%%8%%8%%8%%9%%9%%9%%9&&9&&:&&:&&:&&:&&:&&:&&;&&;'';'';'';'';'';''<''<''<''<''<''<((<((<((=((=((=((=((=((=((=((=((=((=((=((=((=((=((=((=((=((=((=(({QQ{QQ{QQ|RR|RR}RR}RR}SS~SS~SSSSTTTTTTUUUUUUUUVVVVVVVVVVVVVVVVWWWWWWXXXXXXXXXXXXXXXX[[ZZZZYYYYYYXXggggffeeddddccbbaaaa``__^^^^]]\\566666eCCfCCfCCfCCgDDgDDgDDgDDhDDhEEhEEiEEiEEiEEiFF]]\\\\jFFjFFkFFkGGkGGkGGlGGlGG\\\\\\\\\\\\\\\\\\\\[[[[[[[[[[[[[[ZZZZZZ[[[[[[[[ZZZZYYYYYYYYYYYYXXXXXXXXXXXXXXXXWWWWWWVVVVVVVVVVUUUUUUTTTTTTTTTT~TT~SS}RR}RR|RR|RR|RR|QQ{QQuuuuuuttttssssssrrrrqqqqqqppppoooooonnnnQQQQQQQQSSSSSSSSSSUUUUUUUUVVWWWWWWWWYYYYYYYYZZ[[[[ t t v v EFFFGGR66S66S66S66S77U88U88U88U88W88W99W99W::X::Y::Y::Y;;Z;;[<<[<<[<<\<<]==]==]>>^>>_>>_>>_??a??a@@a@@a@@b@@cAAcBB8%%8%%9%%9%%9%%9&&:&&:&&:&&:&&:&&;'';'';'';'';''<''<''<''<((<((=((=((=((=((=((=((>((>))>))>))>))>))>))?))?))?))?))?))?))?))?**?**?**?**@**@**@**@**@**@**@**@**@**@**@**@**@**@**@**@**@**@**@**UUVVVVVVVVWWWWVVVVWWWWWWXXXXXXXXYYYYYYYYYYYYYYZZZZZZZZ____^^^^]]]]]]\\\\[[[[ZZZZ`??`??`@@a@@a@@a@@bAAbAAUUUUUUTTTTSSSSRR23333ӎ^^gDDhDDhEEhEEiEEiEEiEEiFFjFFjFFjFFjFFkFF^^^^^^^^^^]]]]^^^^^^^^]]]]]]]]^^^^]]]]]]]]]]]]]]\\\\\\\\\\\\\\[[[[[[[[[[[[[[ZZZZZZZZZZZZZZYYYYYYYYYYYYXXXXWWWWWWWWWWWWVVVVVVUUUUUUUUTTTTTTTTTT}SS}RR}RR}RR|RR|RRvvvvvvuuuuttttttssssrrrrqqqqqqppppooooooRRSSSSTTTTTTUUUUVVVVVVWWWWXXXXXX q q s s s u u u v w w w y GGHHHIT77T77T77V88V99V99V99X99X99X::X;;Y;;Z;;Z;;Z;;[<<\==\==]==]==^==^>>_??_??`??`??a??a@@bAAbAAcAAdAA9&&9&&:&&:&&:&&:&&;'';'';'';''<''<''<''<((=((=((=((=((=((>))>))>))>))>))?))?))?))?**?**@**@**@**@**@**@**A**A++A++A++A++A++A++A++B++B++B++B++B++B++B++B++B++B++B,,B,,B,,B,,B,,B,,B,,B,,B,,B,,B,,B,,B,,B++B++B++B++B++B++B++B++B++B++A++A++YYZZZZZZ[[ZZZZZZ[[[[[[[[\\\\[[[[ccccccbbbbaaaa````___>>_??_??`??`??a@@a@@a@@bAAbAA^^^^______^^^^VVUUUUTTTT33333֐______iFFjFFjFFjFFkFFkFFkGGkGGlGGlGGlGG__``________________________^^^^^^______^^^^^^^^^^^^^^]]]]]]]]]]]]\\\\\\\\\\\\\\[[[[[[[[[[[[[[ZZYYYYYYYYYYYYYYYYWWWWWWWWWWWWWWWWUUUUUUUUUUTTTTTTTT~SS}SS}RR}RR|RRwwwwvvvvvvuuuuttttttssssrrrrqqqqqqppppooooTTTTTTUUVVVVVV n o p p q q r r s t t t v v v x x x y z z { IIIJJJU88W99W99W99W::Y::Y::Y::Y;;Z<<[<<[<<\<<\<<]>>]>>^>>^>>_>>`>>`@@`@@a@@b@@b@@bAAdBBdBBdBB:&&;'';'';'';''<''<''<((=((=((=((=((>((>))>))>))?))?))?))?**@**@**@**@**@**A**sLLtLLtMMtMMB++B++B++B,,B,,C,,C,,C,,C,,C,,C,,C,,D,,D--D--D--D--D--D--D--D--D--E--E--E--E--E--E--E--E--E--E--E--E--E--E--E--E--E--E--E--E--E--D--D--D--D--D--D--D--D--D,,D,,C,,C,,C,,C,,C,,]]]]]]]]]]]]]]^^hhhhggggffffeeeedd^>>_??_??`??`??`@@a@@a@@b@@bAAbAA``__````````aa``````XXWWWWVV44444ؒaaaaaaaakFFkGGkGGlGGlGGlGGlHHmHHmHHmHHmHH````aaaaaa````````aaaa````````````__________``____________^^^^^^^^^^^^^^]]]]]]]]\\\\\\[[[[[[[[[[[[[[ZZZZZZYYYYYYYYYYXXXXWWWWWWWWWWWWVVUUUUUUUUUUTTTTTT~SS~SS}RR}RRxxxxwwwwvvvvvvuuuuttttssssssrrrr l n n n o p p q q r r s s t u u v w w w y y y { { { | } } KKKLLLX::X::X::Y;;Z;;Z;;[<<[<<\==\==]==]==^==_??_??_??a??a??a@@aAAcAAcAAcAAdAAeBBeCC<''<''<''<((=((=((=((>((>))>))>))?))?))?**@**@**@**@**A**A++A++A++B++sKKsKKsMMuMMuMMuMMC,,D,,D--D--D--D--E--E--E--E--E..E..F..F..F..F..F..F..F..G..G//G//G//G//G//G//G//G//G//G//G//G//H//H//H//H//H//H//H//H//G//G//G//G//G//G//G//G//G//G//G//G..G..F..F..F..F..F..F..F..E..E..E--E--E--E--D--D--D--D--llllkkkkjjjjiiiihh_??_??`??`??a@@a@@a@@bAAbAAcAAcAAbbbbbbaabbbbbbbbbbbb[[ZZZZYYYY54455ܔbbbbccbblGGlGGlGGlHHmHHmHHmHHnHHnHHnIInIIbbbbbbbbbbbbbbbbbbaaaaaaaabbbbaaaaaaaaaa````````````____________^^^^^^^^^^^^^^]]]]]]]]]]]]]]\\\\\\[[[[[[[[ZZZZZZZZZZYYYYYYXXXXXXXXWWWWWWWWVVUUUUUUUUUUTTTTTT~SS~SS}RRyyxxxxwwwwwwvv o o o q q q s s s t u u v v w x x y z z z | | | ~ ~ ~  MMMNNNY;;Z;;[;;[<<\==\==]==^==^>>^>>`>>`??`@@`@@a@@b@@b@@cBBcBBdBBeBBeBBfCCgDD=((=((>((>))>))?))?))?**?**@**@**@**A++A++A++B++B++B,,B,,C,,C,,sLLtLLuMMuMMuNNwNNwNNwNNE..F..F..F..F..G..G//G//G//G//H//H//H//H//H00I00I00I00I00I00I00VVI00J00J11J11J11J11J11J11J11J11J11J11J11J11J11J11J11J11J11J11J11J11J11J11J11J11J11J11J11J00J00I00I00I00I00I00I00I00H00H00H//H//H//G//G//G//G//G..F..F..F..ppppoooonnmmmmllll`??`@@a@@a@@a@@bAAbAAcAAcAAcBBccccccddddccccdddddd^^^^]]\\\\55556ޗddddddddlGGlHHmHHmHHmHHnHHnIInIInIIoIIoIIccccddccccccccccbbccccccccccbbbbbbbbbbaabbbbbbbbbbaaaaaaaaaa````````````______________^^^^]]]]]]]]]]\\\\\\\\\\[[[[ZZZZZZZZZZZZYYXXXXXXXXXXWWWWWWWWVVUUUUUUUUUUTTTTTT~SS}SS}RR q r r r t t t u v v w w x y y z { { { } } ~   OOOPPP\<<\<<]==]>>^>>_>>_>>_??`??a@@a@@bAAbAAcAAdAAdBBdCCfCCfCCfCCgDDhEE>))?))?))?**@**@**@**A++A++A++B++B++B,,C,,C,,C,,D--D--D--E--tLLuNNvNNvNNwNNwNNxPPyPPyPPH//H//H//H00I00I00I00I00J00J11J11J11J11K11K11K11K11K22WWWWXXXXL22L22L22M22M22M33M33M33M33M33M33M33M33M33M33M33M33M33M33M33M33M33M33M33M33M33M33M33M33M22M22L22L22L22L22L22L22L22K22K22K11K11K11K11J11J11J11J00I00I00I00I00H00H00ttttssssrrqqqqppoooo      cBBdBBdBBeBBeeeeeeeeeeeeeebbaaaa``__66666ffeeeeeelHHmHHmHHmHHmHHnHHnIInIIoIIoIIoIIoJJeeeeeeddddddeeeeddddddddddccccddddddccccccccccbbbbbbbbbbbbaaaaaaaaaa````````````______________^^^^^^^^^^]]\\\\\\\\\\\\\\\\ZZZZZZZZZZZZYYXXXXXXXXXXWWWWWWVVVVUUUUUUUUUUTTTTSS~SS}RR s s u u u v w w x y y z z { | | ~ ~ ~  QQQRRS^??_??`??`??a??a@@b@@cAAcAAcBBeBBeBBeBBfDDgDDgDDhDDhDDjEE@**@**A**A++A++B++B++B,,C,,C,,C,,D--D--D--E--E--E..F..F..uMMvNNwNNwOOxOOxOOyPPzPPzQQ{QQJ00J11J11K11K11K11K22L22L22L22L22M22M33M33M33N33N33XXXXYYYYZZO44O44O44O44O44P44P44P55P55P55P55P55P55P55P55P55P55P55P55P55P55P55P55P55P55P55P55P55P55P55P55P44P44O44O44O44O44O44O44N44N44N33N33N33N33M33M33M33M22L22L22L22L22K22K11K11K11yyxxwwwwvvuuttttssrrqqqqppoooo      iiiihhggffffeeddcc77777gggggglGGlHHmHHmHHmHHnHHnIInIInIIoIIoIIoIIpJJpJJffffffeeffffffffeeeeeeeeeeeeeeeeeeddddddddddccddddddddccccccccccccbbbbbbbbbbaaaaaaaaaaaa````________^^^^^^^^^^^^^^\\\\\\\\\\\\\\[[ZZZZZZZZZZZZYYXXXXXXXXWWWWWWWWVVUUUUUUUUUUTTTTTT~SS}RR u v v w x x y z z { { | } }    SSSTTUa@@a@@b@@b@@bAAdBBdBBeBBeCCfCCgCCgDDgEEiEEiEEjEEjFFkGGB++B++B,,C,,C,,D,,D--D--E--E--E..F..F..G..G//G//H//H//H00xOOxOOyPPzQQzQQ{QQ|QQ|QQ|SSL22L22L22M33M33M33N33N33N44O44O44O44O44P44P55P55P55ZZZZZZZZ[[R66R66R66R66R66R66S66S66S77S77S77S77S77S77S77S77S77S77T77T77T77T77T77S77S77S77S77S77S77S77S77S77S77S77S66R66R66R66R66R66R66Q66Q66Q55Q55Q55P55P55P55P44O44O44O44O44N44N33N33M33M33M33M22L22{{{{zzyyxxwwwwvvuuttssssrrqqppoooonnmmllkkkkjjiihh778887kGGkGGlGGlGGlHHmHHmHHmHHnHHnIInIIoIIoIIoIIoJJpJJpJJgggggghhggggggggffffggggggffffffffeeeeeeffffeeeeeeeeeeddddddddddccccccccccbbbbbbbbbbbbaaaaaaaaaaaa````````____^^^^^^^^^^^^^^\\\\\\\\\\\\\\ZZZZZZZZZZZZYYXXXXXXXXXXWWWWWWWWVVUUUUUUUUTTTTTTTT}RR w x y y z { { | } } ~ ~ UUVVVWcAAcAAdAAeBBeCCfCCfCChDDhDDhDDiFFjFFkFFkFFkGGlGGmHHD,,D--D--E--E--F..F..F..G//G//H//H//H00I00I00J00J11J11K11zPPzQQ|RR|RR}RR~SS~SSTTTTN44O44O44O44P55P55P55Q55Q55Q66R66R66R66R66S77S77S77\\\\\\\\]]U88U88U88U88U88V88V88V99V99V99V99V99V99W99W99W99W99W99W99W99W99W99W99W99W99W99W99W99W99W99V99V99V99V99V99V99V88V88U88U88U88U88U88T88T77T77T77S77S77S77S66R66R66R66R66Q66Q55Q55P55P55P44O44O44O44N44N33~~}}||{{zzzzyyxxwwvvuuttttssrrqqppoonn999889jFFkFFkGGkGGlGGlGGlGGmHHmHHmHHnHHnIInIInIIoIIoIIoJJpJJiiiihhhhiiiihhhhhhhhgghhhhhhggggggggggggggggggffffffffffeeeeeeeeeeddddddeeeeddddddddddbbbbbbbbbbbbaaaaaaaaaa````````````__^^^^^^^^^^^^]]\\\\\\\\\\\\[[ZZZZZZZZZZYYYYXXXXXXXXWWWWWWWWUUUUUUUUUUTTTTTTTT}RR z z z | | } ~ ~   WWXXYYeBBeBBgDDgDDgDDhEEiEEjEEjEEjGGlGGlGGmHHmHHoHHoIIE..F..F..G..G//H//H//H00I00I00J00J11K11K11K22L22L22M22M33|RR}RR~TTTTTTTTUUVVVVQ55Q66R66R66R66S77S77S77T77T77T88U88U88U88V88V99V99^^^^^^____X::X::X::X::Y::Y;;Y;;Y;;Y;;Y;;Z;;Z;;Z;;Z;;Z;;Z;;Z;;Z;;Z;;Z<>]>>]>>^>>^>>^>>^>>^>>^>>^>>^>>^>>^>>^>>^>>^>>^>>^>>^>>]>>]>>]==]==]==]==]==\==\==\==\==\<<[<<[<<[<<[<>_??_??_??`??`??`??`??`@@a@@a@@a@@a@@a@@a@@a@@a@@a@@b@@b@@b@@b@@b@@b@@b@@b@@b@@a@@a@@a@@a@@a@@a@@a@@a@@a@@`@@`??`??`??`??_??_??_??_>>^>>^>>^>>]>>]==]==]==\==\==\<<[<<[<>^>>^>>_>>_??_??`??`??a@@a@@eeeeggggbAAcAAcAAcAAcBBdBBdBBdBBdBBdBBeBBeBBeCCeCCeCCeCCeCCeCCeCCeCCfCCfCCfCCfCCeCCeCCeCCeCCeCCeCCeCCeCCeCCeBBdBBdBBdBBdBBdBBcBBcAAcAAcAAbAAbAAbAAb@@a@@a@@a@@`@@`??`??_??_??^>>^>>^>>]==]==\==\==\<<[<<[<>^>>^>>_??_??`??`@@a@@a@@b@@bAAbAAcAAcAAdBBdBBdBBeBBeCCeCCiiiifDDgDDgDDgDDgDDhDDhEEhEEhEEhEEiEEiEEiEEiEEiEEiEEiFFiFFiFFjFFjFFjFFjFFjFFjFFiFFiFFiFFiEEiEEiEEiEEiEEiEEhEEhEEhEEhDDhDDgDDgDDgDDgDDfCCfCCfCCeCCeCCeBBdBBdBBcBBcAAcAAbAAbAAa@@a@@a@@`??`??_??_??^>>^>>]>>]==\==\==[<<[<>^>>^>>``````aabbb@@bAAcAAcAAdBBdBBdBBeCCeCCfCCfCCgDDgDDhDDhEEhEEiEEiEEiFFjFFjFFllkFFkGGkGGlGGlGGlGGlGGlHHmHHmHHmHHmHHmHHmHHmHHnHHnHHnHHnHHnHHnHHnHHnHHnHHnHHnHHmHHmHHmHHmHHmHHmHHmHHlHHlGGlGGlGGlGGkGGkGGkFFjFFjFFjFFiFFiEEiEEhEEhEEhDDgDDgDDfDDfCCeCCeCCeBBdBBdBBcAAcAAbAAb@@a@@a@@`??_??_??^>>^>>]>>]==\==\<<[<<[<>^>>_??`??`??a@@a@@bAAbAAcAAdBBdBBddeCCfCCfCCgDDgDDhEEhEEiEEiFFjFFjFFkFFkGGlGGlGGlHHmHHmHHnHHnIInIIoIIoIIoIIpJJpJJpJJpJJqJJqJJqKKqKKqKKqKKrKKrKKrKKrKKrKKrKKrKKrKKrKKrKKrKKrKKrKKrKKrKKrKKrKKqKKqKKqKKqKKqJJpJJpJJpJJpJJoJJoIIoIInIInIInHHmHHmHHmHHlGGlGGkGGkGGjFFjFFjFFiEEiEEhEEhDDgDDgDDfCCeCCeCCdBBdBBcBBcAAbAAb@@a@@`@@`??_??_>>^>>^>>]==\==\<<[<<[<>^>>_>>_??`??a@@a@@bAAbAAcAAdBBdBBeCCfCCfCCgDDgDDhEEhEEiEEjFFjFFkFFkGGlGGlHHmHHmHHnIInIIoIIoIIpJJpJJqJJqKKqKKrKKrKKsLLsLLsLLtLLtMMtMMuMMuMMuMMuMMuNNvNNvNNvNNvNNvNNvNNvNNwNNwNNwNNwNNwNNwNNwNNwNNvNNvNNvNNvNNvNNvNNvNNuNNuMMuMMuMMtMMtMMtMMtLLsLLsLLsLLrKKrKKqKKqKKqJJpJJpJJoIIoIInIInHHmHHmHHlGGlGGkGGkFFjFFjFFiEEhEEhEEgDDgDDfCCeCCeCCdBBdBBcAAbAAb@@a@@`@@`??_??_>>^>>]>>]==\==[<<[<>^>>_>>_??`??a@@a@@bAAcAAcBBdBBeBBeCCfCCgDDgDDhEEiEEiEEjFFkFFkGGlGGlHHmHHnHHnIIoIIoJJpJJpJJqKKrKKrKKsLLsLLtLLtMMuMMuMMvNNvNNvNNwNNwOOxOOxOOxOOyPPyPPyPPyPPzPPzQQzQQzQQ{QQ{QQ{QQ{QQ{QQ{QQ{QQ{QQ{QQ{QQ{QQ{QQ{QQ{QQ{QQ{QQ{QQ{QQ{QQzQQzQQzQQzPPyPPyPPyPPyPPxOOxOOxOOwOOwOOvNNvNNvNNuMMuMMtMMtLLsLLsLLrKKrKKqKKqJJpJJpJJoIInIInHHmHHmHHlGGkGGkFFjFFiFFiEEhEEhDDgDDfCCfCCeCCdBBdBBcAAbAAb@@a@@`??`??_??^>>^>>]==yyxxxxwwwwxxwwwwvvwwvvvvvvuuvvuuuuttttuuttttssssttssssrrrrrrrrrrrrqqqqqqqqqqppppppoooooooooooonnnnnnnnmmmmmmmmmmmmllllllllkkkkkkjjjjjjjjiiiiiiiihhhhhhhhggggggggggffffffffeeeeeeeeeeddddccccccbbbbbbbbbbbbaa``````````______^^^^^^]]]]]]\\\\\\[[[[[[ZZ*  m n n o p q q }RR}RR~SSSSUUUUVVVVWWWWXXYYYYZZZZ[[\\_??`??a@@a@@bAAcAAcBBdBBeBBeCCfCCgDDhDDhEEiEEjFFjFFkGGlGGlHHmHHnHHnIIoIIpJJpJJqKKrKKrLLsLLtLLtMMuMMuNNvNNwNNwOOxOOxOOyPPyPPzPPzQQ{QQ{QQ{RR|RR|RR}RR}SS}SS~SS~SS~SS~TTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUTTTTTTTTTTTTTT~TT~SS~SS~SS}SS}RR|RR|RR|RR{QQ{QQzQQzQQyPPyPPxPPxOOwOOwOOvNNvNNuMMuMMtMMsLLsLLrKKrKKqKKpJJpJJoIInIInHHmHHlGGlGGkGGjFFiFFiEEhEEgDDgDDfCCeCCeBBdBBcAAbAAzz{{{{zzzzzzzzyyyyxxyyxxxxwwxxxxwwwwvvwwvvvvuuuuvvuuuuttttuuttttssssssssssrrrrrrqqqqrrqqqqppppppooooppoooooonnnnnnmmmmmmnnmmmmmmllllllllkkkkkkjjjjjjjjiiiiiiiihhhhhhhhggggggggggffffffffeeeeeeeeddccccccccccbbbbbbbbbbaa``````````____^^^^^^^^^^]]\\\\++***  p q q r s t t TTUUVVWWWWXXXXXXZZZZ[[[[\\\\^^^^__cAAdBBeBBeCCfCCgDDhDDhEEiEEjFFkFFkGGlGGmHHnHHnIIoIIpJJpJJqKKrKKsLLsLLtMMuMMuMMvNNwNNwOOxOOyPPyPPzQQzQQ{QQ|RR|RR}RR}SS~SS~SSTTTTTTUUUUUUVVVVVVVVVVWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXWWWWWWWWWWWWVVVVVVVVVVUUUUUUTTTTTT~SS~SS}SS}RR|RR|RR{QQzQQzQQyPPyPPxOOwOOwNNvNNuNNuMMtMMsLLsLLrKKqKKpJJpJJoIInII~~~~~~}}~~}}}}||||||||{{{{{{{{zzzzzzzzzzyyyyyyyyxxxxwwxxwwwwvvvvwwvvvvuuuuttuuuuttttssssttssssrrrrrrrrrrrrqqqqppppppooppppoooooonnnnnnmmmmmmmmmmmmmmllllllkkkkkkkkjjjjjjjjiiiiiiiihhhhhhhhggggggggffffffffffeeddddddddccccccccccbbbbaaaaaa``````````__^^^^,,,+++++++  s [[\\\\]]]]^^VVWWXXXXYYYYZZ[[\\\\]]]]^^^^``aaaabbbbcciEEjFFjFFkGGlGGmHHmHHnIIoIIpJJqJJqKKrKKsLLtLLuMMuMMvNNwNNxOOxOOyPPzPPzQQ{QQ|RR|RR}SS~SS~TTTTTTUUUUVVVVVVWWWWWWXXXXXXYYYYYYYYZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ZZZZZZZZZZYYYYYYXXXXXXXXWWWWWWVVVVUUUUUUTTˇˆʆ˅ʆɆʅɅȅɅȄDŽDŽDŽǃƃŃƃłĂāÂÁÁ€€~~~~~~~~}}}}||}}||||{{{{{{{{zzzzzzzzyyyyxxyyxxxxwwwwwwwwwwvvvvuuvvuuuuuuttttttttssssssrrrrssrrrrqqqqqqppppppppppppoooooonnnnnnmmmmmmmmmmmmmmllllllkkkkkkkkjjjjjjiiiiiiiihhhhhhhhhhggggggggffeeeeeeeeddddddddccccccccccaaaaaaaaaaaa-----,,,,,,,,++]]]]^^^^__````YYYYZZZZ[[[[\\]]^^____````bbbbccccddddffgggghhoIIpJJpJJqKKrKKsLLtLLuMMuNNvNNwOOxOOyPPzPPzQQ{QQ|RR}RR}SS~SSTTTTUUUUVVVVWWWWXXXXXXYYYYZZZZZZ[[[[[[\\\\\\]]]]]]]]^^^^^^^^^^^^______________________________^^^^^^^^^^^^]]ӋҌӌӋҋӋҋҋҋҊыҋъъъЊЊЉϊωωΈΈΈ͈͇͇̇̇ˆˆʆʆʅɅȅȄȄǃDŽƃƃłłłĂÁÀ€€~~~~~~}}}}||||||||{{{{{{{{zzzzyyyyyyyyxxxxwwxxwwwwwwvvvvvvvvuuuuttttuuttttssssssrrssrrrrrrqqqqqqppppppppppoooooonnnnnnnnmmmmmmllllllllllllllkkkkkkjjjjjjjjiiiiiiiihhhhhhhhffffffffeeeeeeeeeeddddddddddccbbbbN%N%M%M%..--------,,,,,,__````aabbbbcc[[[[\\\\]]]]__````aaaabbccddddeeffffgghhiijjjjkkkkmmmmvNNwOOxOOyPPzPPzQQ{QQ|RR}SS~SSTTTTUUUUVVVVWWXXXXYYYYZZZZZZ[[[[\\\\]]]]^^^^^^______``````·aaaaaaaabbbbbbbbbbbbbbԍՍՍՎ֎֎֎׎׎׎؎׎׏؏؏׎؏؏׏؏؎׏؏׎؎׏׎׎׎֎֎֍ՍՍՍԍԌԌӌӌҋӋҋыъЊЊЉωΈΈ͈͈͇̆̇ˆʆʅɆɅɄȄǃDŽƃłłłĂāÁ€~~~~}}}}}}||||{{||{{{{zzzzzzzzyyyyxxxxxxxxwwwwvvvvwwvvvvuuuuttuuttttttssssrrrrssrrrrrrqqqqppppppooppppoooooonnnnnnmmmmmmllllllllkkkkkkjjjjjjjjiiiiiiiihhhhhhggggggggggffffffffeeeeeeeeeeddO%O%O%O%O%O%N%N%N%N%....---------,aabbccccddeeee]]]]^^^^__``aabbbbccccddffffgggghhiijjkkkkllmmmmooooppqqqqrrttttuuuuUUVVVVWWWWXXXXYYZZZZ[[[[\\\\]]]]^^^^____````aaaȧ͈ψωЊъҋҋӋԌԍՍ֍֍׏؏؏؏ِڐڐېېۑܑܑܑݑܒܒݒݒݓݒݒݒݒݓݒݒݒܒݒܒܑܒܒۑܑېڑۑڐڐُِِ؏׏؏׎֎֍ՍԍՌԌӌӌҋъыЊЊЉψωΈ͇͇̇ˇˆʅɆɅȅȄȃDŽƃƃłāĂÁÀ€~~~~}}}}||}}||||{{{{zz{{zzzzyyyyyyyyxxxxwwwwvvwwvvvvuuuuuuuuuuttttssssssrrrrrrrrrrqqqqqqppppppoooooooooonnnnnnnnmmmmmmllllllkkkkkkkkjjjjjjiiiiiiiihhhhhhhhggggggggffffffQ&Q&Q&P&P&P&P&P&O&O&O%O%O%O%O%N%N%N%.....------}}~~ddeeeeffgggghh____````bbccccddddeeffgghhiiiijjjjllmmmmnnoooopprrrrssssttvvvvwwxxxxyy{{{{||||}}~~€ÁĂƃDŽȄɅʅˆ͈̇ΈωщыҋӌԌՌՎ׎׎؏ُڐڑڑܑܑܒޓޓޓߓߔߔᔔᕕ╕ᕕᕕ╕▖▖㖖㖖╕㖖㖖▖㖖㖖▖㖖╕▖▖╕ᕕ╕ᕕᔔߔߔߓޓޒݓݒݒܑےۑڐڐڐِ؏؎׎׎֎ՍՌԍӌӋҋъыЊωωΉΈΈ͇̆̇ˆʅʅɅȅȄǃƃŃłĂÁÁÁ€€~~~~}}}}}}}}||||{{||{{zzzzyyyyyyyyxxxxwwwwwwwwwwvvvvuuuuttuuuuttttssssrrrrrrrrrrrrqqqqppppppoooooonnoooonnnnnnmmmmmmllllllkkkkkkkkjjjjjjjjiiiiiihhhhhhhhS'S'R'R'R'Q'Q'Q&Q&Q&Q&Q&Q&P&P&P&P&P&O&O&O%O%O%O%N%.......--ffgghhiiiijjkkaaaabbbbddeeeeffggggiijjjjkkllllmmooooppqqqqrrttttuuvvvvwwyyyyzz{{{{||~~~~€ÀāŃǃDŽȄɅˇ͈̇ψЉЉыӋԌԌ֍׎؏؏ڐڐےݒݒޓߓߔ╕╕▖䗗䗗䗗嗗嘘嘘昘昘昘癙癙癙癙蚚蚚蚚虙虙蚚蚚蚚虙蚚蚚癙虙癙癙癙昘昘晙嘘嘘嗗䗗䗗䗗㖖▖▖ᕕᕕᔔߓޓޒݓܒܑۑڐڐِ؏؎׏֎֍ՍԌԌӌҋҊыЊЉωΈΈ͈̇ˆˇʆɅɅȄDŽDŽƃłłĂÁ€€~~~~}}~~}}||||{{||{{{{zzzzyyzzyyyyxxxxwwwwwwwwvvvvuuuuuuttuuttttssssssrrrrqqrrrrqqqqqqppppoooooonnnnnnmmmmmmmmmmmmllllllllkkkkkkjjjjjjjjiiT(T(S(S(S'S'S'S'S'R'R'R'R'R'Q'Q'Q'Q&Q&Q&Q&Q&P&P&P&O&O&O&O%O%O%N%..    iijjjjkkllmmmmccddffffgghhhhiijjkkllmmmmnnooppqqrrssssttuuvvwwxxyyyyzz||||}}~~ÁĂłǃȄɅʆ͇̇ΈЉЊыҋԌՍ֎׏ُِڐܑݒݓޓᕕ▖㖖䗗嗗昘昘晙虙虙蚚ꛛꛛꛛ뛛뜜뜜윜휜휜읝흝흝흝흝흝흝흝휜읝흝윜뜜뛛뜜ꛛꛛ隚隚隚虙癙瘘晙嘘嗗䗗㖖㗗▖ᕕᕕߔߓޓݒݒܒۑېڑُِ؎׎׎֍ԍԌӌҋыъЉϊωΈ͈͇̇ˆˆʅɄɅȄǃƃƂŃĂāÁ€~~}}~~}}}}||||||||{{zzzzyyyyyyyyxxxxwwwwvvwwwwvvvvuuuuttttttttttssssrrrrrrqqqqppqqqqppppppoooonnnnnnmmmmmmmmllllllkkkkkkjjU)U)U)U(U(U(U(T(T(T(T(T(S(S(S'S'S'S'S'R'R'R'R'R'Q'Q'Q&Q&Q&Q&P&P&P&P&P&     LLLkkllmmnnooooppeegghhhhiijjkkkkmmnnnnooppqqqqssttttuuvvwwxxyyzz{{{{||~~€ÁĂƃDŽɅʆ͇̆ΉЉъҋӋՌ֎׎؏ڐېܒܒޓߔ╕㖖㗗䗗昘昘癙隚隚ꛛꛛ윜읝흝흝흝윜뜜뛛ꛛ雛隚虙皚癙昘嗗嗗䗗㖖㖖ᕕߔޓޒݒܒۑڐُؐ؏׎֍֍ԍӌӋҋыъЊωψΈ͈̇̆ʆɆɅȅDŽǃƄŃĂĂāÀ€~~~~~~~~}}||||{{||{{{{zzzzyyzzyyyyxxxxwwwwvvwwvvvvuuuuttttssssttssssrrrrrrqqqqppppppooppppoooooonnnnnnmmmmmmW*W)W)W)V)V)V)V)V)U)U)U(U)U(U(U(U(T(T(T(T(T(S(S(S'S'S'S'R'R'R'R'Q'Q'Q&  >>>>>>======nnooppqqqqrrsshhiijjkkkkllmmnnooppqqrrrrssuuvvvvwwxxyyzz{{||}}~~~~ĂƃǃȄɅˇ̇ΈЉъҊӌՍ֎׎؏ڐۑܒݓߓᖖ▖䗗嘘昘虙隚雛ꛛ윜윜힞흝휜윜뜜ꛛ隚蚚虙癙昘昘䗗㖖㖖╕ᕕᔔߔޓݓݒܑڑڐِ؏؎׎ՎՍԌӋӌҋъЉωΉ͈͇̇ˆʆʆɅȄȄDŽƃŃłāÁ€~~~~~~~~}}}}||{{||{{{{zzzzyyyyyyyyxxxxwwwwvvvvvvvvuuuuttttttssssrrssrrrrrrqqqqqqppppoooooonnnnnnX*X*X*X*X*W*W*W)W)W)W)W)W)V)V)V)V)U)U)U(U(U(U(U(T(T(T(T(S(S(S(S'S'S'S'!!!  AA@@@@@@??qqrrrrssttuuvvwwkkkkllmmnnnnooqqrrssssttuuvvxxxxyyzz{{||||~~ÁĂƂDŽɅʆ͇̇ψЊыӌՌ֍׎ؐۑܑݒޓᕕ▖㗗嗗昘皚蚚ꛛ뜜윜흝뜜뛛ꛛ隚隚癙昘昘嗗㖖▖╕ᕕߔߓޓݓݒۑڐڐِ؏֎֍ՍԍԌҋъъЊωΈΈ͇̆ˇʆɅȄȄDŽƃŃłāÁ~~~~~~}}}}||||{{{{{{zzzzyyyyxxyyxxxxwwwwvvvvuuuuuuuuttttttssssrrrrrrqqrrqqqqqqppZ+Z+Y*Z+Y*Y*Y*X*X*X*X*X*X*X*W*W*W)W)W)W)W)W)V)V)V)V)V)U)U)U(U(U(U(T(T(T(""!!!CCCCBBBBBBssttuuvvwwxxyyzzmmnnooooppqqrrssttuuvvwwxxxxzz{{||}}~~~~€ÁĂƃȄɅʅ̇ΈωъҋԌՍ׎؏ڐۑݒޓᕕ▖䗗旗癙蚚雛뛛윜힞흝윜뛛ꛛ隚蚚癙昘嗗䖖㗗▖╕ߓޓݓܒۑېِ؏؏׎֍ԍԌӌҋҊЊωΉΈ͇̇̇ˆʅɅȄDŽƄŃłĂÁ~~~~~~}}}}||||{{zz{{zzzzyyyyxxxxxxxxwwwwvvvvuuuuttttttttttssssrrrr[+[+[+[+[+Z+Z+Z+Z+Z+Z+Y*Z+Y*Y*Y*X*X*X*X*X*X*X*X*W*W*W)W)W)W)V)V)V)V)U)U)#####FFFFEEEEDDDDvvwwxxyyzz{{||}}ooppqqrrrrssuuvvwwxxxxyyzz||}}~~€ŁƃDŽɅʆ̇ΈϊыӋԌ֍׎ُۑܒݓᔔ╕㗗昘癙蚚隚웛흝흝휜윜ꜜꛛ蚚癙瘘嘘䗗㖖╕ᕕߔޓݒݑۑڑِ؏׎֍֍ՍӌҋҊъЊΉΈ͇̇̇ˆʅɅɄȄDŽƃłĂÁ€€~~~~~~}}}}||||{{zzzzzzzzyyyyxxxxwwwwwwwwvvvvuuuuttttss],],\,\,\,\,\,\,[+[+[+[+[+Z+Z+Z+Z+Z+Z+Y*Z+Y*Y*Y*X*X*X*X*X*X*X*X*W*W*W)W)$$$$#IIHHHHHHGGyyzz{{||}}~~rrssttuuvvxxxxyyzz{{||}}ÁĂłǃɄˆ͈̇ЉъӋԍՎ؏ِۑܒޒᕕ㖖嗗昘虙雛뜜흝휜윜뛛隚蚚虙晙嘘䗗㖖╕ߓݒݒܒڑُِ؎֎֎ՍԌҋҊыЊωΈ͇̇ˇˆʆɅȄȃDŽƃĂĂÁ€€~~}}}}}}}}||||{{zzzzyyzzyyyyxxxxwwwwvvvv_-^-^-^-^-^-],],],],],\,\,\,\,\,\,\,[+[+[+Z+Z+Z+Z+Z+Z+Z+Y*Y*Y*Y*Y*Y*X*X*&%%%%%LLKKKKJJJJ||}}~~uuvvvvwwxxzz{{||}}~~€ÂłǃȄʅˆ·ωъҋԌ֍׎ِڑݒޓᕕ䖖嘘癙蚚ꛛ윜흝힞흝윜ꛛꚚ蚚癙嘘嗗䖖▖╕ߔޓݒܒۑڐُ؎֏֎ՍԌҋҊыЊωΈ͇̇ˇˆʅɅȄȃƄŃĂĂÁ€~~}}}}||}}||{{{{zzzzyyyyxx`.`.`.`.`.`._-_-_-_-^-^-^-^-^-],],],],\,\,\,\,\,\,[+[+[+[+[+Z+Z+Z+Z+Z+Z+Z+''''&PPOOOONNMMMMwwxxyyzz||}}~~~~ÀāƃDŽʅˆ͇ΈЉҋԌՍ׎ُېܑޓߔ╕㖖嗗昘陙ꛛ윜흝윜뛛Ꚛ隚癙瘘嗗䖖▖▖ᕕߔޓݒܒۑڐُ؎֏֎ՍԌҋҊыЊωΈ͇̇ˇˆʅɅDŽƃƃŃĂÁÁ€~~}}}}||||{{{{4b/b/a.a.a.a.`.`.`.`.`.`._-_-_-_-^-^-^-^-^-^-],],],],\,\,\,\,\,\,[+[+[+[+)((('SSRRRRQQQQPPyyzz{{||~~ÁłǃȄʆˇΈωъӋՌ׎؏ڐۑޒᕕ㗗嘘癙隚ꛛ윜윜뛛ꛛ隚癙瘘嗗䖖◗▖ᕕߔޓݒܒۑڐُ؎֍֎ՍӌҋҊщЊΉ͈͇̆ˆʆɅȅDŽƃƂłĂÁ€~~~~44444444b/b/b/b/b/a.a.`.`.`.`.`.`._-_-_-_-^-^-^-^-^-^-],],],],],\,***)))VVVVUUUUTT||}}~~ĂŃDŽɅˆ̇ΉЊҋԌՍ׎ڏۑݒߓ㖖䗗昘蚚ꛛ윜윜웛ꛛ隚癙瘘嗗䖖▖╕ߔޓݒܒڑُِ׎֍ՍԍӌҋъЉωΉ͈͇̆ʆɅȅȄDŽƃłŁā44444444444444c/b/b/b/b/b/a.a.a.`.`.`.`.`.`.`._-_-_-_-^-^-^-^-,,+++[[ZZZZYYXXXX~~€ĂƃȄɅˆ͇ψъҌԍ֎؏ڐۑޒ╕㗗嘘虙隚뛛흝윜웛ꛛ隚癙瘘嗗䖖▖╕ߓݒݑےڑِ؏׎֍ԍԌӋҋЊЉψΈ̈ˇˆʅɅȄ44444444444444444444c/c/b/b/b/b/b/a.a.a.a.`.`.`.`.`._-_-.----__^^^^]]\\\\€Ăǃȅʆˇ͈ЉъӋՌ֎ُۑܒޓ㕕䗗晙蚚ꛛ윜윜뛛ꛛ蚚癙昘嗗㖖▖ᕕޓݒܑۑڐ؏؎׎ՍԌӌҋъЉωΈ444444444444444444444444444c/c/b/b/b/b/b/b/a.a.a.0////.ccbbbbaa``Ȅʅ̇ΈωъԌՍ׎ُڑݒߓᕕ㖖䗗瘘隚뜜흝흝뜜뛛雛蚚晙昘䗗㖖ᖖᕕߔޓܒܑڐِ؏֎֍Ռ4444444444444444444444444444444444c/c/c/b/b/21100iihhggffeeeeˆ·ЊыӌՍ׎ُۑݓߔᕕ㖖嘘癙隚웛흝윜뛛Ꚛ隚癙嘘嗗㖖╕ޓݒۑڐ44444444444444444444444444444444444444 43322mmmmllkkjjiiωҊӌՍ׎ِۑݒߓᕕ㗗昘癙隚뜜흝흝윜ꛛ隚蚚晙嘘㗗㖖444444444444444444444444444444444444444       rrqqppoonnҋՌ׎ِۑܒߓᕕ㖖嘘癙ꛛ윜윜뛛4444444444444444444444444444444444444444 !     ֍ِۑܒޓ㖖嗗瘘雛뜜4444444444444444444444444444444444444444 # " " " ! !ِܒޓ▖䗗瘘隚뛛흝4444444444444444444444444444444444444444 $ $ $ # # #▖䗗昘蚚뛛휜44444444444444444444444444444444444444444 & & % % % $㗗嘘癙雛뜜44444444444444444444444444444444444444444(('''&癙隚뜜흝44444444444444444444444444444444444444444**)))(ꛛ윜44444444444444444444444444444444444444444,,+++**흝444444444444444444444444444444444444444444...--,444444444444444444444444444444444444444444100///l4444444444444444444444444444444444444444443322211l4l4l4l4l4l4l4444444444444444444444444444444444444444443l4l4l4l4l4l4l4l4l4l4l4l44444444444444444444444444444444444444l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l444444444444444444444444444444444l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4444444444444444444444444444l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l44444444444444444444444l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l444444444444444444l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l444444444444l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4444444l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l44l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4l4 Introduction to the QRT Ray Tracer QRT is a ray tracing image rendering system that runs under a variety of operating systems. It has a free format input language with extensive error detection and reporting capabilities. This manual is divided into several sections as follows: QRT Language Reference: This is a quick reference guide to the QRT command language. It can suffice as a tutorial for those familiar with ray tracing programs, or function as a guide to QRT features not described in the User Manual. QRT User Manual: The User Manual is a more complete tutorial to the QRT system. It describes the basic commands and features of QRT, without listing every possible command or option. It would be a good starting place for beginners. QRT bugs and desired enhancements are listed at the end of this section. QRT Sample Programs These are actual QRT input files; they show suggested QRT indenting style and give examples of various features. Machine Specifics The QRT post processor is machine dependent. This section contains instructions on using it, as well as information on other machine dependent features. QRT Ray Tracer Page 1 Introduction References Howard Anton, Elementary Linear Algebra, Anton Textbooks, Inc., 1987 David F. Rogers, Procedural Elements for Computer Graphics, McGraw Hill, Inc., 1985 Eric Graham, Graphic Scene Simulations, Amiga World, CW Communications/Peterborough, Inc., May/June 1987 QRT Ray Tracer Page 2 Introduction Table of Contents Page I. QRT Language Reference Manual A. Introduction .......................... 1 B. Setup Commands ......................... 3 1. Sky ................................. 3 2. Ground .............................. 3 3. Focal Length ........................ 4 4. First Scan .......................... 4 5. Last Scan ........................... 5 6. File Name ........................... 5 7. Observer ............................ 6 8. Lamp ................................ 7 C. Primitive Types ........................ 8 1. Sphere .............................. 8 2. Parallelogram ....................... 9 3. Triangle ............................ 10 4. Ring ................................ 11 5. Quadratic ........................... 12 D. Patterned Surfaces ..................... 14 1. Pattern ............................. 14 2. Rectangle ........................... 16 3. Circle .............................. 17 E. Bounding Boxes ......................... 18 1. Begin Bbox .......................... 18 2. End Bbox ............................ 18 F. Instances .............................. 19 1. Begin Instances ..................... 19 2. End Instances ....................... 20 3. Instance Of ......................... 21 G. Setting Defaults ....................... 22 1. Default ............................. 22 QRT Ray Tracer Page 3 Introduction Table of Contents - Cont. Page II. QRT Users Manual A. Introduction .......................... 1 B. Comparison to Other Systems ............ 1 C. The World .............................. 2 D. Input Language ......................... 3 E. Illumination Model ..................... 4 F. Light Sources .......................... 6 G. Observer ............................... 7 H. Filenames .............................. 8 I. Sky and Ground ......................... 8 J. Bounding Boxes ......................... 9 K. Patterns ............................... 10 L. Instances .............................. 12 M. Defaults ............................... 13 N. Problems, Bugs ......................... 14 O. Possible Enhancements .................. 14 QRT Ray Tracer Page 4 Introduction QRT Language Reference INTRODUCTION This document is a reference guide to the QRT command language. One section is devoted to each QRT command. All parameters to commands are listed. More information on QRT can be found in the User's Manual and Technical Reference Manual. The following table lists syntax used in this document: TEXT MEANING EXAMPLE RANGE (x,y,z) floating pt vector (10, -20, 30.56) all (r,g,b) color value triple (0, .5, 1.00) 0 to 1 i an integer 12 0 to 127 n floating pt number -123.4 all p positive float 123.4 >0 string text string FOO_BAR ASCII Each section of this document contains one or more of the following sub-sections: QRT Ray Tracer Page 1 Language Reference Command Type : OPTIONAL or REQUIRED Parameters (required) : Lists required parameters Parameters (optional) : Lists optional parameters Optional Forms : Alternatives for parameter names. Ex: 'horiz' = 'horizon' means either can be used as a parameter name. Example : An example of the command (with all required parameters, but not necessarily all optional ones. Restrictions : Things not to do See also : Similar commands QRT has a free format input language, and parameters can be given in any order. QRT Ray Tracer Page 2 Language Reference QRT Misc. Setup Commands SKY: Command type: OPTIONAL The SKY command is used to specify the color of all rays that don't hit any other object. The sky is black by default. The sky color at the zenith (up), and horizon can be specified, and QRT will blend the colors in between as smoothly as possible. In addition, dithering can be specified. Parameters (optional): zenith = (r,g,b) : the color of the zenith horiz = (r,g,b) : the color at the horizon dither = i : dithering Optional forms: 'horiz' = 'horizon' Example: SKY ( horiz = (0, 0, .6), zenith = (0, 0, .4), dither = 5 ) See also : GROUND GROUND: Command type: OPTIONAL QRT does not have a specific ground command. Instead, use a large parallelogram with an optional pattern. PARALLELOGRAM ( loc = (-10000, 0, -10000), v1 = ( 20000, 0, 0), v2 = ( 0, 0, 20000), pattern = PATTERN_OF_CHOICE ) See also : PARALLELOGRAM QRT Ray Tracer Page 3 Language Reference FOC_LENGTH: Command type: OPTIONAL This sets the focal length of QRT's "camera". The default is 50, but it can be changed with this command. As with 35mm photography, larger numbers result in a 'telephoto' effect, and smaller numbers will result in wide angle (and distorted) views. Example: FOC_LENGTH = 70 Restrictions: 0 < FOC_LENGTH FIRST_SCAN: Command type: OPTIONAL By default, QRT generates an image with the same resolution as your screen. However, it can be instructed to create a partial image by using this command and LAST_SCAN. This feature may not be supported, depending on your QRT post processor. First scan should be less than the Y resolution of your screen. Example: FIRST_SCAN = 100 Restrictions: 0 < FIRST_SCAN < y-resolution See also : LAST_SCAN QRT Ray Tracer Page 4 Language Reference LAST_SCAN: Command type: OPTIONAL This command is similar to FIRST_SCAN. LAST_SCAN should be less than the Y resolution of your screen. Example: LAST_SCAN = 300 Restrictions: 0 < LAST_SCAN < y-resolution See also : FIRST_SCAN FILE_NAME: Command type: REQUIRED This is used to set the output file for QRT, which will be read by the post processor. The file name will be mapped to upper case. Some restrictions may arise from file naming conventions on specific computers. Example: FILE_NAME = QRT_IMAGE.RAW QRT Ray Tracer Page 5 Language Reference OBSERVER: Command type: REQUIRED OBSERVER tells QRT where the observer is located, and his direction of view. The view direction is specified by giving the coordinates he should look at. In addition, the observer UP vector may be given. This is, by default, (0,1,0). Parameters (required): loc = (x,y,z) : location of observer lookat = (x,y,z) : point of interest Parameters (optional): up = (x,y,z) : up vector Optional forms: 'loc' = 'pos' = 'location' = 'position' Example: OBSERVER ( loc = (0, 0, 0), lookat = (100, 0, 0) ) Restrictions: The observer cannot look in the direction of the up vector. 'lookat' cannot be equal to 'loc'. 'up' must have non-zero length. QRT Ray Tracer Page 6 Language Reference LAMP: Command type: OPTIONAL Lamps are sources of light in QRT. They can be placed anywhere, and emit any color and intensity of light. The ambient light value is the color of the lamp. The distance parameter is the minimum distance from the lamp that objects will be illuminated at full intensity. Most objects should be farther from the lamp than this value, or else they will be washed out. The radius parameter is ignored by this version of QRT, but may eventually be used to implement penumbral shadows. Parameters (required): loc = (x,y,z) : location of object dist = p : distance of max illumination Parameters (optional): amb = (r,g,b) : ambient light radius = p : radius Optional forms: 'loc' = 'pos' = 'location' = 'position' Example: LAMP ( loc = (12,34,56), radius = 123.4, ) QRT Ray Tracer Page 7 Language Reference QRT Primitive Types SPHERE: Command type: OPTIONAL SPHERE creates a sphere with a given location, radius, and surface characteristics. Parameters (required): loc = (x,y,z) : location of object radius = p : radius Parameters (optional): name = string : name for object pattern = string : pattern name to attach amb = (r,g,b) : ambient light diff = (r,g,b) : diffuse reflection trans = (r,g,b) : transmission mirror = (r,g,b) : mirror reflection fuzz = i : currently unused index = p : index of refraction dither = i : dithering sreflect= p : Phong specular refl. coeff. reflect = p : percent specular reflection Optional forms: 'loc' = 'pos' = 'location' = 'position' Example: SPHERE ( loc = (100, 100, 50.234), radius = 123.4, diff = (1.00, .20, .20) ) QRT Ray Tracer Page 8 Language Reference PARALLELOGRAM: Command type: OPTIONAL This command creates a parallelogram with a given location, shape, and surface characteristics. Two vectors define the shape of the parallelogram (they need not be orthogonal). Parameters (required): loc = (x,y,z) : location of object v1 = (x,y,z) : vector for side one v2 = (x,y,z) : vector for side two Parameters (optional): name = string : name for object pattern = string : pattern name to attach amb = (r,g,b) : ambient light diff = (r,g,b) : diffuse reflection trans = (r,g,b) : transmission mirror = (r,g,b) : mirror reflection fuzz = i : currently unused index = p : index of refraction dither = i : dithering sreflect= p : Phong specular refl. coeff. reflect = p : percent specular reflection Optional forms: 'loc' = 'pos' = 'location' = 'position' 'vect1' = 'v1' 'vect2' = 'v2' Example: PARALLELOGRAM ( loc = (10, 20, 50), vect1 = (20, 0, 0), vect2 = ( 0, 0, 50), diff = (0, .90, .20) ) QRT Ray Tracer Page 9 Language Reference TRIANGLE: Command type: OPTIONAL The TRIANGLE command (similar to PARALLELOGRAM) creates a triangle shape. Two vectors define the sides of the triangle. Parameters (required): loc = (x,y,z) : location of object v1 = (x,y,z) : vector for side one v2 = (x,y,z) : vector for side two Parameters (optional): name = string : name for object pattern = string : pattern name to attach amb = (r,g,b) : ambient light diff = (r,g,b) : diffuse reflection trans = (r,g,b) : transmission mirror = (r,g,b) : mirror reflection fuzz = i : currently unused index = p : index of refraction dither = i : dithering sreflect= p : Phong specular refl. coeff. reflect = p : percent specular reflection Optional forms: 'loc' = 'pos' = 'location' = 'position' 'vect1' = 'v1' 'vect2' = 'v2' Example: TRIANGLE ( loc = (52, 21, 50), vect1 = (10, 5, 0), vect2 = ( 0, 8, 20), diff = ( 0, 0, 0), mirror = ( 1, 1, 1) ); QRT Ray Tracer Page 10 Language Reference RING: Command type: OPTIONAL RING creates a ring (annulus), which is a circle with a smaller circle cut out of it. If the innder radius is zero, the ring will be a simple circle. Two vectors define the plane of the annulus, as with RING and PARALLELOGRAM. Parameters (required): loc = (x,y,z) : location of object v1 = (x,y,z) : vector one v2 = (x,y,z) : vector two rad_1 = p : inner radius rad_2 = p : outer radius Parameters (optional): name = string : name for object pattern = string : pattern name to attach amb = (r,g,b) : ambient light diff = (r,g,b) : diffuse reflection trans = (r,g,b) : transmission mirror = (r,g,b) : mirror reflection fuzz = i : currently unused index = p : index of refraction dither = i : dithering sreflect= p : Phong specular refl. coeff. reflect = p : percent specular reflection Optional forms: 'loc' = 'pos' = 'location' = 'position' 'vect1' = 'v1' 'vect2' = 'v2' Example: RING ( loc = (52, 21, 50), v1 = (10, 5, 0), v2 = ( 0, 8, 20), rad_1 = 10, rad_2 = 20, ) Restrictions: 0 < rad_1 < rad_2 QRT Ray Tracer Page 11 Language Reference QUADRATIC: Command type: OPTIONAL This command creates a quadratic surface given by the equation: 2 2 2 a x + b y + c z = d The coefficients a,b,c and d can be specified. This primitive can be used to create cylinders, cones, oblong spheroids, etc. Several min and max parameters specify the maximum extents of the surface. Parameters (required): loc = (x,y,z) : location of object a = n b = n c = n d = n xmax = n xmin = n ymax = n ymin = n zmax = n zmin = n Parameters (optional): name = string : name for object pattern = string : pattern name to attach amb = (r,g,b) : ambient light diff = (r,g,b) : diffuse reflection trans = (r,g,b) : transmission mirror = (r,g,b) : mirror reflection fuzz = i : currently unused index = p : index of refraction dither = i : dithering sreflect= p : Phong specular refl. coeff. reflect = p : percent specular reflection Optional forms: 'loc' = 'pos' = 'location' = 'position' QRT Ray Tracer Page 12 Language Reference Example: { ** vertical cylinder ** } QUADRATIC ( loc = (57, 21.2, 0), a = 1, b = 0, c = 1, d = 100 ); Restrictions: a != 0 or b != 0 or c != 0 QRT Ray Tracer Page 13 Language Reference Patterned Surfaces PATTERN: Command type: OPTIONAL This command creates a pattern definition which can be attached to any primitive object. A pattern is a two dimensional array than can be mapped to the surface of any primitive. Patterns must be defined before they are used. The PATTERN keyword serves two functions: to create a pattern definition, and to attach this definition to a primitive. The correct meaning is found by context: if the PATTERN keyword appears in a primitive definition followed by a name, it is assumed to refer to a predefined pattern. However, if PATTERN occurs outside any primitive definition, it is assumed to be a pattern definition. If all the pattern definitions are grouped at the top of the file, they will always be defined before they are used. A pattern is defined by giving it a size, a name, and one or more sub-pattern definitions. There are currently two types of sub-patterns: CIRCLE and RECTANGLE. The sub-pattern list can be of any length (although long lists will slow the ray tracer), and can use several of each type of sub-pattern primitive. The X and Y size parameters specify the size of the pattern; the pattern will be repeated over the surface of an object each X or Y units in the indicated direction. These size units are arbitrary, since the pattern can be given a new size when attached to an object. In each sub-pattern, any object surface characteristics can be specified. If a given ray hits this sub-pattern, the surface will be colored as indicated. If it does not hit any sub pattern in the list, the objects default surface characteristics will be used. The example below defines a red-checkered pattern. The background color of the object to which this pattern is attached will determine the color of the other checker box in the pattern. Parameters (required): name = string : name for pattern x_size = p : x size of pattern y_size = p : y size of pattern QRT Ray Tracer Page 14 Language Reference Parameters (optional): CIRCLE = circle_defn : CIRCLE sub-pattern - see reference for CIRCLE RECTANGLE = rect_defn : RECTANGLE sub-pattern - see reference for RECTANGLE Optional forms: 'loc' = 'pos' = 'location' = 'position' Example: PATTERN ( x_size = 16, y_size = 16, name = CHECK, RECTANGLE ( start_x = 0, start_y = 0, end_x = 8, end_y = 8, diff = (1.00, .20, .20); ) RECTANGLE ( start_x = 8, start_y = 8, end_x = 16, end_y = 16, diff = (1.00, .20, .20); ) ) This pattern can now be attached to an object as follows: SPHERE ( { ** sphere definition here ** } pattern = CHECK, xmult = .5, ymult = .5 ) Where the xmult and ymult parameters specify a new size for the pattern. Restrictions: At least one sub-pattern must appear. If two sub-patterns overlap in a region, the last one defined will be used in this region. See also : RECTANGLE, CIRCLE QRT Ray Tracer Page 15 Language Reference RECTANGLE: Command type: OPTIONAL RECTANGLE is a type of sub-pattern. Parameters (required): start_x = p : start position for rectangle start_y = p end_x = p : end position for rectangle end_y = p Parameters (optional): amb = (r,g,b) : ambient light diff = (r,g,b) : diffuse reflection trans = (r,g,b) : transmission mirror = (r,g,b) : mirror reflection fuzz = i : currently unused index = p : index of refraction dither = i : dithering sreflect= p : Phong specular refl. coeff. reflect = p : percent specular reflection Example: RECTANGLE ( start_x = 10, start_y = 12, end_x = 15, end_y = 15, diff = (1.00, .20, .20); ) Restrictions: RECTANGLE should be used only within a pattern definition. start_x < end_x start_y < end_y See also : PATTERN QRT Ray Tracer Page 16 Language Reference CIRCLE: Command type: OPTIONAL CIRCLE is a type of sub-pattern. Parameters (required): radius = p : radius Parameters (optional): amb = (r,g,b) : ambient light diff = (r,g,b) : diffuse reflection trans = (r,g,b) : transmission mirror = (r,g,b) : mirror reflection fuzz = i : currently unused index = p : index of refraction dither = i : dithering sreflect= p : Phong specular refl. coeff. reflect = p : percent specular reflection Example: CIRCLE ( radius = 5, diff = (1.00, .20, .20); ) Restrictions: CIRCLE should be used only within a pattern definition. See also : PATTERN QRT Ray Tracer Page 17 Language Reference Bounding Boxes BEGIN_BBOX: Command type: OPTIONAL The BEGIN_BBOX, END_BBOX commands form an enclosing bounding box around a group of objects (which may include other bounding boxes). An optional name must precede the bounding box begin statement. Bounding boxes cannot be given surface characteristics, since they are conceptual objects. Parameters (optional): name = string : name for box Example: name = SAMPLE_BBOX BEGIN_BBOX SPHERE (); { ** sphere here ** } TRIANGLE (); { ** triangle here ** } END_BBOX Restrictions: Must be paired with an END_BBOX statement. END_BBOX: Command type: OPTIONAL Companion command to BEGIN_BBOX. Example: name = SAMPLE_BBOX BEGIN_BBOX SPHERE (); { ** sphere here ** } TRIANGLE (); { ** triangle here ** } END_BBOX Restrictions: Must be paired with a BEGIN_BBOX statement. QRT Ray Tracer Page 18 Language Reference Instances BEGIN_INSTANCES: Command type: OPTIONAL Several primitives may be grouped into an 'instance', and this group can easily be placed in several locations. In addition, it can be resized. All instance definitions must be placed within the BEGIN_INSTANCES and END_INSTANCES statements; only one set of these statements is allowed. A group of objects must be placed in a BBOX, and this BBOX must be given a name. In the following example, three objects are defined: OBJECT_1, SUB_OBJECT_1, and OBJECT_2. Any inclusion of OBJECT_1 will implicitly include SUB_OBJECT_1, but not OBJECT_2. Any arbitrary object tree can be included. Referring to a node will include the sub-tree rooted at that node. Example: BEGIN_INSTANCES NAME = OBJECT_1 BEGIN_BBOX { ** some primitives here ** } NAME = SUB_OBJECT_1 BEGIN_BBOX { ** some more primitives here ** } END_BBOX END_BBOX NAME = OBJECT_2 BEGIN_BBOX { ** more primitives ** } END_BBOX END_INSTANCES Restrictions: There can be only one BEGIN_INSTANCES statement. See also: END_INSTANCES, INSTANCE_OF QRT Ray Tracer Page 19 Language Reference END_INSTANCES: Command type : OPTIONAL This command specifies the end of the instance tree. Any primitive after the END_INSTANCES statement are actually displayed as part of the image. Restrictions: There can be only one END_INSTANCES statement. See also: BEGIN_INSTANCES, INSTANCE_OF QRT Ray Tracer Page 20 Language Reference INSTANCE_OF: Command type: OPTIONAL After an instance tree is defined with the BEGIN_INSTANCES, END_INSTANCES command pair, parts of the tree can be referred to with the INSTANCE_OF statement. This actually puts the sub-tree in the image. You must specify the name of the root of the sub-tree. The original instance should be defined relative to (0,0,0), and the location parameter specifies where the new copy will go. Parameters (required): name = string : name of sub-tree loc = (x,y,z) : location for instance Parameters (optional): scale = (x,y,z) : scale factor Example: INSTANCE_OF ( name = OBJECT_1, loc = (100.23, 20.23, 45.678), scale = (.5, .5, .5) ) Optional forms: 'loc' = 'pos' = 'location' = 'position' Restrictions: All scale factor entries should be greater than zero. If the scale factor entries are unequal, some primitives in the instance will not be affected correctly. For example, a SPHERE will remain round if scaled by (1,2,3), not change to a QUADRATIC spheroid. See also : BEGIN_INSTANCES, END_INSTANCES QRT Ray Tracer Page 21 Language Reference Setting Defaults DEFAULT: Command type: OPTIONAL QRT sets certain defaults for the color attributes of a surrface. The standard default is for a white, non reflective, non shiny, non transparent surface with a medium amount of dithering. These defaults can be changed with the DEFAULT command. More than one DEFAULT command can be included, in which case each one affects all primitives after it and before the next DEFAULT or the end of the file. In addition to new surface characteristics, the NO_SHADOW keyword instructs QRT not to compute shadow information for the scene. This can decrease image generation time at the expense of image quality. Parameters (optional): no_shadow : QRT will not compute shadow information amb = (r,g,b) : ambient light diff = (r,g,b) : diffuse reflection trans = (r,g,b) : transmission mirror = (r,g,b) : mirror reflection fuzz = i : currently unused index = p : index of refraction dither = i : dithering sreflect = p : Phong specular refl. coeff. reflect = p : percent specular reflection Example: DEFAULT ( no_shadow, { ** no shadowing ** } diff = (1, 0, 0) { ** default = red objects ** } ) QRT Ray Tracer Page 22 Language Reference QRT Users Manual INTRODUCTION QRT (Quick Ray Tracer) is an easy to use image generation system that uses a ray tracing algorithm for image rendering. Versions exist for the Amiga personal computer and Data General MV10000. QRT overcomes many of the problems of other ray tracing packages, and is designed to operate nicely in a multi-tasking environment. COMPARISON TO OTHER SYSTEMS QRT was developed on the Amiga personal computer, so it will be compared to other Amiga ray tracers. There are, to my knowledge, five other Amiga ray tracers, each with its own strengths and weaknesses. I will describe each system briefly, and compare it to QRT. All the Amiga ray tracers can operate in HAM (4096 color) mode. RT: RT was the first ray tracer written for the Amiga, by Eric Graham. It will model a universe made of only spheres, a sky, and a checkered or solid ground. It is relatively fast, but not generally useful for realistic modeling because of the sphere limitation. The input language is cryptic, although some error checking is done. The system will only generate low resolution images. SILVER: I have never seen SILVER, so I cannot say much about this system. SCULPT-3D: This package incorporates an interactive editor for creating objects, and is capable of quickly generating a preliminary image of the scene by using hidden surface techniques. However, every primitive is made of polygons, and some primitives such as spheres require hundreds of polygons for a smooth texture, so the ray tracing is very slow. Also, the package takes a large amount of memory to run, and is prone to system crashes. Its chief feature is the ability to create arbitrary shaped objects using a series of triangles. Mirrored, dull, or shiny objects are supported. CLIGHT: This ray tracer also has an interactive editor, but produces very poor quality images. It is not capable of any patterning or reflection characteristics. QRT Ray Tracer Page 1 User Manual DBW: This is possibly the most complete ray tracer for the Amiga. It will support objects with arbitrary degrees of reflection and gloss, depth of field effects, some texturing, wavy surfaces, fractals, transparent surfaces, diffuse propagation of light from object to object, and 5 primitive types (sphere, triangle, parallelogram, fractal, and ring). The input language, however, is so cryptic as to be nearly incomprehensible, and if there is any error in the input file, it will crash the system. It is also painfully slow; some images take 16 to 24 hours to complete. QRT is meant to be a compromise between the fast, simple ray tracers and the slow powerful systems. It compares favorably in speed to RT, and in power to Sculpt-3d or DBW. It has a very friendly input language with extensive error checking. Here are some features of QRT: o Multiple primitive types, including user defined quadratic surfaces o Arbitrary levels of diffuse reflection, spectral reflection, transmission, ambient lighting, and gloss o User defined pattern information for objects o Bounding boxes for groups of objects o Shadows o Multiple light sources with different characteristics o Arbitrary Phong spectral reflection coefficients o Color dithering to increase the apparent number of colors o Easy to use, free format input language with error checking. Parameters are by keyword and may appear in any order. o Supports medium resolution (128k dots/screen) Each of these features of QRT will be discussed is greater detail in this document. THE QRT WORLD QRT constructs an image of the world by performing certain manipulations on an internal representation of a group of QRT Ray Tracer Page 2 User Manual objects. You must provide a description of these objects to QRT through the QRT input language. QRT writes a machine independent bitmap file which can be read by a computer specific post processor. The post processor either displays the image or converts it into the proper form for display by system programs. (See the Machine Dependent Information section of this manual for details). QRT is capable of dealing with 5 types of primitive objects: spheres, parallelograms, triangles, rings (annulus), and quadratic surfaces. The latter can be used to model cones, oblong spheroids, and other interesting surfaces. Each of these objects can have an arbitrary orientation in space, and arbitrary surface characteristics. QRT INPUT LANGUAGE The QRT input language is free format, in that commands may be placed anywhere on a line, and newlines may be placed at any point. This makes it easy to use indentation. Comments are also supported by surrounding text with curly braces '{' and '}'. Comments may span lines. Once a file with QRT commands is built (using any available text editor), qrt can be made to process these commands: QRT qrt.out SetTaskPriority 0 This set of commands is specific to the Commodore Amiga; see the Machine Dependent Information section of the manual for other operating systems. QRT will write a very large file, which may be anywhere from 400K to 4 megabytes depending on the specific computer display resolution. (See the Machine Dependent Information section of this manual for the exact file size). There should be at least enough room on your disk to accommodate this file. I recommend sending the output to a RAM disk, so that the physical disk does QRT Ray Tracer Page 3 User Manual not get used for 60 minutes while QRT computes the image. A typical QRT command to create a sphere using the default surface attributes would, be: SPHERE ( loc = (5,10,100) { this is a white sphere } radius = 12.5 ) For comparison, the sphere command for DBW looks like this: s 0 0 0 1 0 0 0 .2 .2 .2 .8 .8 .8 5 10 100 12.5 Or, in RT, the command would be: <1,1,1> 2 (5,10,100):1; The QRT input should be much easier to understand. If QRT sees an error in its input file, it will stop and print the line number of the offending line, along with a descriptive error message (ILLEGAL PARAMETER, etc). The QRT input language is not case sensitive. A full description of the language and a shorter, context free grammar can be found elsewhere in this manual. THE QRT ILLUMINATION MODEL Before meaningful images can be created, the QRT illumination model must be understood. The light that reaches the observer from each object is composed of several components: o Diffuse light - The "color" of the object o Ambient light - The color of the light that falls on the surface of the object if no lamps are shining on this spot. Note that this specifies the color of light, not the color of the object itself. o Reflected light - If the object acts as a mirror, some light is reflected. o Specular highlights - The "bright spots" of a shiny object viewed in a light. o Transmitted light - The object may transmit some of the light that strikes the back of the object (glass surfaces) QRT Ray Tracer Page 4 User Manual All of these light characteristics can be specified for any object. If none are specified, the current defaults are assumed. These defaults can be changed (see DEFAULT in Language Reference Guide). Most of these light characteristics deal with a percentage of light. For example, a light may reflect 80% of the red light that strikes it, 20% of the green, and 40% of the blue. This is the "color" of the object (diffuse light), and would be specified in QRT by the following syntax: diff = (.80, .20, .40) In QRT, 1.00 is 100%. The language is also free-format, so the above is equivalent to: diff = (.80, .20, .40 ) The commas between parameters are optional, but make the input easier to read. Semicolons can also be used. Ambient light is specified in a similar manner: amb = (.20, .20, .20) The ambient light values should be fairly small. Most of the light hitting the object comes from lamps, but some parts of the object may be in the shadow of another object. If no ambient light is specified, these shadows will appear totally black, which looks unrealistic. Ambient light will give the affect of a small amount of light hitting areas in a shadow, producing a more realistic looking image. Reflection is specified using the MIRROR attribute: mirror = (.90, .90, .90) If a true mirrored surface is desired, the mirror values should be fairly high. If one of the values has a higher value than the others, the mirror will appear red, green, or blue. Transmission is specified as follows: trans = (.80, .80, .80) index = 120 Note the addition of another parameter, the index of refraction. An explanation of the index of refraction for an object is beyond QRT Ray Tracer Page 5 User Manual the scope of this document - see a book on elementary optics for details. In addition, specular highlights are specified with two parameters: reflect = .50, sreflect = 45 "REFLECT" is the percentage of light reflected in the specular highlight, and sreflect is the Phong spectral reflection coefficient. Again, an explanation of the Phong coefficient is beyond the scope of this document; however, a higher value for the coefficient will result in smaller, tighter highlights for a more metallic looking object. Lower values of sreflect should be accompanied by lower values in reflect, and will produce duller looking surfaces, such as paper. QRT also accepts a dithering amount for each object: dither = 3 Dithering is a mechanism for simulating colors not available on the display by blending other colors. The default dithering coefficient is 3; it should be kept small. Values of 1 to 6 are good. Larger objects should employ more dithering, and mirrored or glass objects should have little or no dithering. QRT also accepts an attribute "FUZZ", but this is not used in the present implementation. In a future implementation of QRT, FUZZ will effect small, random perturbations of the normal vector at a given location on an object. This will simulate rough surfaces, matted glass, or imperfectly reflecting mirrors. All of the above light characteristics may be attached to any object. The default is for a white, non reflecting, non transmitting dull surface with an average amount of dithering. In addition, any of the above color information (which will be referred to from now on as COLORINFO) may also be attached to a pattern structure (see the PATTERN section of this document). LIGHT SOURCES Light sources in QRT are called "LAMPS". The lamp structure is simple: LAMP ( loc = (12, 34, 56), dist = 50, radius = 10 ) QRT Ray Tracer Page 6 User Manual The default is for a bright white lamp, but if you wish to change this, you can specify different values for the lamp's ambient light. The radius value is ignored by this implementation of QRT, but it must be supplied. In a future version, the radius may be used to implement penumbral shadows. I didn't include them in this version, since they take a very long time to compute, and don't add much to the image quality. The "dist" entry in the lamp structure specifies at what distance the light from the lamp is at full intensity. Beyond this value, the light will decrease in intensity. This value should be set so that the nearest object in the scene is slightly more than "dist" distance units from the lamp. This does not have to be exact. If objects are nearer than dist" units, they will be so bright that shading will not take place. Objects very far away will be dimly illuminated. By the way, QRT distance units are not tied to any real world unit. They can stand for feet, nautical miles, or furlongs, at your choice. THE OBSERVER After defining the world, you must tell QRT the position and orientation of the observer. This is done as follows: OBSERVER ( loc = (0, 10, 20), lookat = (5, 5, 120), up = (0, 1, 0) ) The x,y, and z are the location of the observer. The "lookat" variables give a location in space that the observer is looking at. Most ray tracers require you to give two angles for the observers view direction, but it is MUCH easier to know the location of an object or point in space you wish the observer to look at. This will be the center of your scene. The "up" variables define which direction is up. Usually, you will wish to use the values given above. QRT uses a right hand coordinate system: positive y is up, positive z is out of the screen, and positive x is to the right if you are looking in the negative z direction. The "up" parameter is optional, and if omitted, defaults to (0,1,0). QRT will generate an error message if no observer is defined. QRT Ray Tracer Page 7 User Manual OUTPUT FILENAME QRT places its output in a file, so you must give it the name of this file: FILE_NAME = outfile.tmp This file must observe any file naming restrictions of the operating system and computer you are using. See the Machine Dependent Information section of this manual for information on file naming restrictions. FOCAL LENGTH This is the focal length of the "lens" used by the observer. Think of it as a 35mm camera lens - higher numbers produce a telephoto effect, and smaller numbers are for wide angle lenses. Note that small numbers may produce some distortion of the image around the edges. FOC_LENGTH = 60 SCAN RANGE If you do not want QRT to produce a whole image, you can specify the first and last scan lines. The parameters should be less than the maximum Y resolution of your display. FIRST_SCAN = 100 LAST_SCAN = 300 This is useful for quickly generating part of an image. SKY AND GROUND QRT has facilities for generating the sky and ground. To define the sky, you must give it two colors - one for the sky overhead (zenith), and one for the horizon: SKY ( zenith = (.10, .2, .4), horiz = (.10, .2, .65), dither = 6 ) QRT Ray Tracer Page 8 User Manual This will produce a blue sky, with a brighter color near the horizon. (The sky need not be blue - it could be red or hot pink, or vary from red to green). QRT will smoothly blend the colors from the zenith to the horizon. Since the sky is so large, you may want to specify a greater amount of dithering to compensate for the displays color resolution limit. The SKY structure will also produce sky colors below the horizon; any ray that does not strike an object will strike the SKY. To fix this, define a ground. There is no dedicated GROUND command, since you can define a very large parallelogram with the same effect. You can make it brown with patches of green using a PATTERN, or checkered green and yellow in the classic ray-tracing ground pattern. BOUNDING BOXES QRT supports the use of bounding boxes to speed the ray tracing process. For images composed of only a few (1 to 3) objects, bounding boxes will not do much to increase speed. However, for images where there are groups of objects physically close to each other, they can greatly reduce execution times. A bounding box is a conceptual structure that encloses a group of objects. When the ray tracer is finding line/object intersections, if a line does not strike a bounding box, it cannot possibly strike any objects within that bounding box. This saves the ray tracer the trouble of checking intersections with all objects within the box. In the case where the ray DOES enter the box, some additional overhead is incurred; however, this cost is easily justified by reduced times for negative tests. Bounding boxes can occasionally be useful for complex objects, such as quadratic surfaces, when the object is fairly small. Since the time to find the intersection with a quadratic surface is large, but bounding box intersections are fast, the ray tracer can save time for all the negative tests. QRT Ray Tracer Page 9 User Manual Bounding boxes can contain other bounding boxes, in a recursive manner. This recursive structure defines an "object tree". There are two keywords that define the beginning and end of a bounding box: BEGIN_BBOX and END_BBOX. Here is an example: { ** QRT Code for a chessman ** } BEGIN_BBOX QUADRATIC ( { ** quadr defn ** } ) QUADRATIC ( { ** quadr defn 2 ** } ) SPHERE ( { ** sphere defn ** } ) BEGIN_BBOX SPHERE ( ) { ** two spheres ** } SPHERE ( ) END_BBOX END_BBOX This structure may be nested to an arbitrary level; if you had a closely spaced group of chessmen, you could enclose all of them with a bounding box. PATTERNS QRT permits user defined patterns which can be mapped to the surface of any object. A pattern is basically an organized method for changing an object's COLORINFO over the surface of that object. For example, a checkered surface can be created, or a surface given the appearance of brick or tile. The current patterning in QRT is limited, yet powerful enough to describe many common patterns. A pattern is composed of a series of sub-patterns. Each sub-pattern defines a region on the surface of an object which will contain a given COLORINFO. These regions are presently limited to rectangles, but this may be expanded in a future implementation of QRT. QRT Ray Tracer Page 10 User Manual A pattern can be defined once, and used for many objects. For example, a brick pattern might be defined: PATTERN ( name = BRICK, { ** other pattern info here ** } ) SPHERE ( { ** sphere definition ** } pattern = BRICK ) PARALLELOGRAM ( { ** parallelogram definition ** } pattern = BRICK ) This example ignores what is actually in the pattern definition to demonstrate how patterns are attached to objects. A pattern must be defined before it can be used. It is given a name, such as BRICK, and any object can specify this pattern with "PATTERN = BRICK". There are no practical restrictions on the length of pattern names (if your computer has 1 megabyte of ram, you cannot have a pattern name longer than 1 million characters). Multiple patterns may be defined at the top of an input file, and used for any object in the file. What exactly makes up a pattern, you ask? A pattern can be viewed as a rectangle that is repeated over the surface of an object. If the pattern size is 10 x 10, and you have an object (say a parallelogram) that is 50 x 50, the pattern will repeat 5 times in each direction. Within this repeating rectangle, sub patterns can be defined. A sub-pattern is a rectangle or circle within the pattern rectangle with a certain COLORINFO. Any number of these sub-patterns can be created within one pattern definition. To create a brick wall, you might define several sub-patterns, each with a slightly different color of red or brown. The sub patterns need not cover the entire pattern rectangle; if they do not, the COLORINFO you defined for the object is used instead of the pattern COLORINFO. If you defined sub-patterns for bricks, the area not covered would be mortar, and the objects COLORINFO would define the color of the mortar. An actual brick pattern is given in appendix C. The proper use of patterns can be very effective in producing realistic looking scenes. However, complicated patterns will slow image creation, so it is recommended that you first display test scenes with no patterns, and then add pattern information when the scene is right. QRT Ray Tracer Page 11 User Manual INSTANCES Often, several copies of a complex object must be created. Specifying their component primitives each time would be difficult. There is a solution to both these problems: INSTANCES. An INSTANCE is a method by which several primitives (actually, an arbitrary object tree) can be grouped and given a name. Copies of these objects may be easily created with one command. Here is an example of an instance definition. BEGIN_INSTANCES NAME = object1 BEGIN_BBOX { ** a bunch of primitives here ** } END_BBOX NAME = object2 BEGIN_BBOX { ** a bunch more primitives here ** } NAME = spheres BEGIN_BBOX SPHERE ( ) { ** two sphere definitions ** } SPHERE ( ) END_BBOX END_BBOX END_INSTANCES There can be only one of these instance definitions, and it must appear before any instances are used. However, any arbitrary object tree can appear within the begin/end instance statements. Several instances are now available for use. For example: INSTANCE_OF ( name = object1, loc = (100, 10, 20), ) INSTANCE_OF ( name = spheres, loc = (12.3, 24.5, 999) ) This example shows that any named portion of the object subtree can function as an instance (the "spheres" object is at a lower level than the "object1' object). The "offset" parameters are required. They specify a new position for the instance (offset from the origin). In the instance definition segment, all objects are defined relative to 0,0,0. They can then be moved in the INSTANCE_OF statement with the offset command. QRT Ray Tracer Page 12 User Manual In addition, the instance can be given a new size: INSTANCE_OF ( name = object2, loc = (200, 100, 50), scale = (1.5, 2.0, .25) ) The scale factors are optional, and are given the default of 1. The instance will be resized by the indicated amount in each of the directions. Note that there are some restrictions to this: if spheres are given a different scale factor in each direction, they will remain spheres (not change to QUADRATIC types). The new radius will be the old radius scaled by the smallest of the scale factors. DEFAULTS Each object in QRT is given certain default surface light characteristics (see the section on surface characteristics). If these defaults are not suitable, they can be changed with the DEFAULT command: DEFAULT ( diff = (1.00, .1, .1) no_shadow ) This will make all future objects red unless specified otherwise. More than one default command can be used in a file: each one affects all the objects created after it, but before the next default command. Any light characteristics can be changed (MIRROR, DITHER, etc). In addition, the keyword "no_shadow" can be included (as above). Ordinarily, QRT computes shadow information for all objects. This takes a lot of time, especially for scenes composed of many objects and many lamps. The "no_shadow" command causes QRT to bypass the shadow routines. This will result in a much faster image generation time, but the picture will not look as realistic. QRT Ray Tracer Page 13 User Manual PROBLEMS WITH QRT There are several limitations in this version of QRT: o Patterning does not work well with some quadratic surfaces. This is a problem with the 3d to 2d mapping function used for quadratics. o Patterns do not support circular or non-orthogonal rectangular sub-patterns. This would slow pattern processing but increase the utility of patterns. o User defined texturing is not implemented - all objects in QRT appear smooth. I have some ideas on how to add textures to objects, but these have not been tested and are not incorporated into this version of QRT. o Some rounded objects such as spheres appear distorted if they are near the edge of the image. This is a bug in the routine that creates a ray for a given pixel position. FUTURE ENHANCEMENTS TO QRT The following are some things I'd like to add to QRT: o Enhanced patterning capability. This could include arbitrary polygonal patterns, and non-orthogonal shapes. Also, the ability to use enumerated (bit-mapped) patterns as well as analytic patterns would be useful. o Anti-dithering routines. These routines are very computationally expensive (they can increase image generation times by a factor of 3 to 5), so they were not included in this version. o Penumbral shadows. This is also very computationally expensive for a minimal utility level, so I didn't bother to include this feature. o Fractal generation. Fractals are, again, computationally expensive, but some things, such as mountains, cannot be modeled with a ray tracer any other way. o Wavy surfaces. This is useful for modeling water, rippled mirrors, etc. I know how to do it, I just didn't have time to add it yet. It would be nice if the waves were user definable in amplitude and x and y wavelength. Wavy surfaces are very similar in implementation to textures. QRT Ray Tracer Page 14 User Manual o Snowy surfaces. This is an idea from DBW, which adds snow to a surface depending on its slope and altitude. o Interpolated normal surfaces. This is a mechanism to model arbitrary curved surfaces by using a polygonal approximation to the surface, and interpolating the normal vector between surfaces to avoid angular looking surfaces. o Image plane object lists. This is a technique for increasing the speed for positive line/object intersection test. (Bounding boxes increase speed for negative line/object intersection tests). o Heuristics for faster completion of images using area coherence. o An interactive editor. This is another large scale project in itself, and I can't forsee having time to do it for a long time, but it would be useful. The editor would display a preliminary image of the scene, and when the user had placed objects to his satisfaction, it would write a QRT input file and call QRT as a background task. There are certain problems here - for instance, how do you quickly generate the outline of a user defined quadratic that can take many forms (cone, spheroid, etc)? And how can the user easily specify the object tree structure (bounding boxes) with an interactive editor? QRT Ray Tracer Page 15 User Manual Addendum to QRT Version 1.2 The following are changes to QRT made since version 1.1 Additions and Enhancements Polygon Primitive Added to Pattern Command Patterns in version 1.1 could include only rectangles and circles; a new polygon command vastly increases the utility of the pattern command. Polygons may have any number of points (at least three), but a large number of points will increase the time taken for the containment test, and hence the time to complete the image. A fast containment algorithm is used, but it is still linear in the number of points in the polygon. A practical limit might be 30 to 40 points (split amoung all polygons in the pattern). In order for the polygon command to operate correctly, the first point must be the same as the last point. ex: PATTERN ( name = TRIANGLE_TEST x_size = 6 y_size = 6 POLYGON ( POINT = (0 , 0) POINT = (5 , 0) POINT = (2.5,5) POINT = (0 , 0) { same as 1st pt } { ** any number of additional points could be added here ** } ) { ** more polygons or other pattern primitives could come here ** } ) Polygon primitives may be mixed in a pattern with either circles or rectangles. If a rectangle is desired, the rectangle primitive is faster than a four point polygon. QRT Ray Tracer Page 1 Addendum to 1.2 Bug Report One bug found in version 1.1 has been fixed. The shadowing routine in version 1.1 did not operate quite correctly: a point was (incorrectly) computed as being in a shadow if a line drawn from the point to the lamp intersected an object even on the other side of the lamp. The test should have looked at objects only on the same side of the lamp as the point in question. This was giving extra shadows in strange places, and has been fixed in this version. Planned extentions for 1.3 Version 1.3 will probably include a better lexical analyser that can cope with nested comments and possibly #include files. The #include directive would enable one to amass a file of often used patterns, for example. The parser is plenty fast enough (between 2 and 3 hundred lines per second from RAM:) to make this practical. Hints, Tips, etc. Try using a general purpose macro processor to pre-process QRT input. #define BRICK_RED (.8, .2, .1), for example, or use parameter macros to #define CYLENDER (height, diameter) to elimiate the need for entering quadratic coeficcients. (I may add CYLENDER, CONE, and SPHEREOID commands to a future version of QRT. They would simply map into the current quadratic primitive, but make QRT easier to use). QRT Ray Tracer Page 2 Addendum to 1.2 Addendum to QRT Version 1.3 The following are changes to QRT made since version 1.2 Additions and Enhancements 'Remove' Command Added The 'REMOVE' command was added to allow sections of a planar primitive to be removed. This makes it much easier to create flat objects that are not shaped like QRT's planar primitives. For example, I had a QRT input file which created the image of a grand piano. The top of the piano, because of its complex shape, initially was created from 11 planar primitives. Now, it is only 1 PARALLELOGRAM primitive, and a section of the parallelogram is removed to create the shape of a piano top. Before the REMOVE command can be used, a pattern must be created using any of QRT's pattern primitives (the piano uses a polygon). This pattern need not be given any surface characteristics - it simply defines the region to be removed from the planar primitive. The pattern is attached to the primitive in exactly the same way as a normal pattern, except that the REMOVE command is used instead of the PATTERN command: PARALLELOGRAM ( loc = (0, 0, 0) v1 = (10, 0, 0) v2 = (0, 0, 10) diff = (1, 0, 0) remove = SECTION_TO_REMOVE pattern = ANY_PATTERN ) This example shows that the PATTERN command can be used on the same primive as the REMOVE command. Several things should be noted about the REMOVE command. First, the pattern defines the sections to remove, not the sections which will remain. In the piano example, the pattern mapped all of the parallelogram except the part that composed the actual piano top. Second, even though QRT Ray Tracer Page 1 Addendum to 1.3 the remove command can be used with the curved surface primitives (SPHERE, QUADRATIC), the results will not be quite right. To use the sphere as an example, the front surface of the sphere would have the correct pattern removed from it, but the back surface of the sphere would be completely gone. This is because the SPHERE intersect routine ignores completely the back surface of the sphere. I will probably fix this in a future version. Nested Comments Comments may now be nested. This makes it easier to comment out blocks of QRT code which themselves contain comments. Planned extentions for 1.4 I had planned to create an "#INCLUDE" command for version 1.3, but instead I worked on the REMOVE command (it seemed more important). #INCLUDE will probably be coming next time. QRT Ray Tracer Page 2 Addendum to 1.3 Addendum to QRT Version 1.4 The following are changes to QRT made since version 1.3 Additions and Enhancements Transmission Transmission of light through surfaces now works, allowing one to model glass surfaces. Some additions to and changes from the original grammar were necessary to provide the desired functionality. A new keyword, "DENSITY", has been added, and the function of the old "TRANS" keyword has been changed. Also, a "THRESHOLD" parameter has been added to the default structure. Since transmission is a complex operation, this entire Addendum will discuss aspects of modeling glass surfaces. The DENSITY keyword It was my previous intent that the TRANS keyword would specify the percent transmission of light though the surface. After thinking a little more about the nature of light transmission, it was clear that this wasn't adequate. The amount of light transmitted depends not only on a fixed coefficient of the surface, but on the thickness of the surface. For example, a hollow glass sphere will appear darker (transmit less light) near the edges, where the glass is thickest. To account for this effect, the "DENSITY" keyword was added. Density specifies what percentage of transmitted light will be removed per unit distance travelled though the object. For example, the following density attribute would remove 2 percent of all light per unit distance: DENSITY = (.02, .02, .02); If a sphere, at its widest point, was 10 units thick, 20 percent of the light would be removed. Near the edge of the sphere, less light would be removed. Since density is a function of distance, the same density factor will have different effects on objects of different sizes. To remove the same percentage of light from an object half as thick, double the density factor. QRT Ray Tracer Page 1 Addendum to 1.4 Shadows from Transparent Surfaces The old "TRANS" keyword still exists, but it performs a different function. It does not affect the appearance of the object, but rather, the attenuation of light passed through the surface. QRT knows how glass surfaces bend light, and so it can model the magnifying effects of looking through curved glass, etc. But for computing shadows, it cannot properly bend the light from lamps. This means that you can model lenses that the observer looks through, but not lenses used to focus light. In order to provide some attenuation effects, use "TRANS" to tell QRT how much light is passed through the surface. This information is ONLY used for computing shadows. For example, blue glass should cast a blue shadow. Use something similar to: TRANS = (0, 0, .7) to cast a blue shadow (this lets 70 percent of the blue light pass). Note that by using strange combinations of DENSITY and TRANS, you can model illogical objects which appear, for example, blue, but cast a red shadow. These shadows will be entirely of one intensity, and will not vary with the thickness of the glass. Using MIRROR with Transparent surfaces Glass surfaces not only refract light, but also reflect a percentage of it. This means that to realistically model glass, the glass should reflect a small percentage of the light. Try starting with 20 to 25 percent reflection. Note that all glass objects reflect light from both the outside and the inside surfaces of the glass. Index of Refraction The index of refraction for an object governs how much the light is bent upon entering or exiting the object. A higher index will bend the light more. The index of refraction of air is 1.00, and for glass is roughly 1.33. Some substances, such as diamond, have a higher index. Modeling Hollow Objects When designing the QRT transmission routines, I wanted to be able to model both solid glass and hollow glass objects. To understand how this is done, it is necessary to understand a little about how QRT's transmission model works. QRT Ray Tracer Page 2 Addendum to 1.4 A ray, after leaving the observer, has two states: either it is inside a glass object, or it is outside. The ray starts out outside. When it first encounters a glass surface, it is bent, and its state is toggled from OUTSIDE to INSIDE. It continues on until encountering another surface, whereupon it is bent again, and its state is once more toggled. This has several implications for modeling glass. The first is that ALL glass surfaces MUST have two sides - that is, once the ray enters the glass, there must be no way for it to exit without again passing through a surface. The second is that a ray must go from glass to air, or air to glass, but not from glass with index of refraction A to glass with index of refraction B; i.e, the two glass surfaces cannot touch each other, even though they may be placed very close together. As an example of how this works, consider a solid glass sphere. The ray encounters the sphere, and is bent (in this case, towards the normal vector). QRT now remembers that the ray is INSIDE a glass surface. The ray continues on until it hits the back side of the sphere, whereupon it is bent (away from the normal vector), and its state is toggled to OUTSIDE. In summary, the INSIDE/OUTSIDE flag tells QRT how to bend the ray. Consider now the case of a hollow glass sphere. This is modeled using two concentric spheres, one with a smaller radius. The ray will first hit the outside sphere, be bent, and have its state toggled to INSIDE. There are now two possible cases. First, the ray may miss the inside sphere, in which case the simulation proceeds as in the above paragraph. Second, it may hit the inside sphere. In this case, it is bent, and its state is toggled to OUTSIDE. The ray is now considered to be back in air, so that the inside sphere has modeled the hollow portion of the glass. In a similar manner, the ray reaches the other side of the inside sphere, enters the glass again, and finally leaves the outside sphere. Note that even though the inside sphere is thought of as the "air" in the center of the object, it MUST have the same index of refraction as the outside sphere. This is necessary so that QRT can correctly bend the light when it exits the glass. Chromatic Aberration In QRT, all rays, regardless of color, are refracted exactly the same. This is contrast to the real world, in which the amount the light is bent depends on its wavelength. This appears, so far as I can tell, to be a bug in the real world, and I saw no reason to include it in a ray tracer. QRT Ray Tracer Page 3 Addendum to 1.4 Threshold attribute A new keyword, THRESHOLD, has been added to the default structure. In previous versions of QRT, there was a mechanism for detecting infinite recursion provided that objects reflected less that 100 percent of the light reaching them. QRT stopped the recursion when the intensity of the light reached 1 percent of its original value. When transmission was added, I made this value adjustable. With glass objects, both surfaces reflect light, and if QRT waits until the 1 percent mark before stopping recursion, the time necessary to complete the image is greatly increased with little or no increase in image quality. The default is now 10 percent, and is changeable as follows: DEFAULT ( threshold = .05 ) This would stop recursion when the intensity reaches 5 percent of the original value. An added effect is that if the objects surface reflects (or transmits) less than the threshold amount of light, the reflection or transmission will be ignored completely. Affect of Glass on Speed Unfortunately, the presence of any glass objects will slow the ray tracer down. This effect may range from barely noticeable, for few, small objects to excruciatingly miserably slow, for many, large objects. Sorry, there is nothing I can do to speed it up - the 68000 simply won't go any faster. The reason for the slowdown is that for every ray/glass surface intersection, TWO additional rays must be sent out (as opposed to one, for reflection). And remember, each ray intersects a glass object twice: once on the way in, and once on the way out. Also, the two generated rays may intersect the glass, as well. You can see how this process could get very slow. Notes, etc. Watch for control characters in the QRT input file. I had accidentally imbedded an invisible control character in a file I was working on, and the QRT parser refused to parse the file. After closely checking the file, I began to look for a bug in the parser code. Finally, I discovered the control character, but only after spending 1 hour checking the parser code. The QRT parser will generate a SYNTAX ERROR, CODE 207 QRT Ray Tracer Page 4 Addendum to 1.4 upon encountering any special characters in the input file. Since transmission involves heavy recursion, don't forget to set the default stack size to something larger than the default 4000 bytes. A stack size of 40000 to 50000 bytes seems safe for most images. Notes on Multitasking The following discussion is not at all QRT specific, but it is here just to clear up some confusion many people have about multitasking. There has been some discussion to the effect that multitasking is either: a) not useful at all (just ask Apple/Mac type folks), or b) useful only as a mechanism for loading more than one interactive program at once and switching between them (said/believed by many Amiga folks). While for some people this may be true, for anyone who runs ray tracers, mandelbrot set program, or down/uploads programs from a BBS, multitasking holds great benefits. Try this: run QRT on the Amiga, in the background, with a low task priority. Now forget about it, and do whatever else you wanted to do (run a text editor/spreadsheet/terminal prog, etc). Now, run a ray tracer on an IBM or MAC II, and you'll very quickly tire of staring at the machine while it thinks. The key to getting the maximum benefit from multitasking, (and this is what many people don't realize), is being able to specify task priorities. Non interactive, number crunching tasks should be given a low priority (try -5). This will give any interactive tasks all the CPU time they want. By lowering the priority of the background tasks, the editor or spreadsheet or compiler will run just as fast as it would have without the background task. If the background task is run with the SAME priority as the foreground task (editor, etc), the foreground task will run noticeably slower. Don't ever run a task such as a ray tracer with a HIGHER priority as the CLI or interactive task. Doing so will cause the interactive task to stop dead until the ray tracer has finished. One more note on multitasking for programmers: do try to write nice, friendly programs that give up the CPU when they don't need it. Number crunching programs typically need all the CPU time they can get; however, interactive programs do not. If you wish to wait, use the timer device, not a for loop. This has two advantages: 1) it doesn't hog the CPU, and 2) the elapsed time will be relatively independent of how busy the CPU is. There is nothing more annoying than some little calculator or notepad program that wants ALL the CPU time, causing low priority tasks to stop. Even some commercial QRT Ray Tracer Page 5 Addendum to 1.4 software houses have committed this fault (witness some popular paint programs or terminal programs). OK, enough preaching about multitasking. I hope this has cleared up the issue for anyone who was confused. QRT Ray Tracer Page 6 Addendum to 1.4 `y\`,LArc's PFX 1.13P 1990 -soft, Markus Fritze g.h` /H*@"m mA$H -(H!!!!!!!!Sj JC pC QN , HD , p,m:<0r Q&N~Q~d RESn`, HED@|D@ArTApAQڀn&-A LA(HJkf&CH"grאg<fA``+D +E+F.ޅR؃+D؅+DC m Sj m -м`BSjL gpNޭ '-lz5-9yA t QRT_ST.TTP `KJ$f(ByO,/9 ?<HNA\OJk.@# `6 - ЭnHй*"ҍ¼.A// {Bg.JNA #.h .h/(,HhNoP(.J(-?),ގ֎T.NV n PW g.e.xX8/w.kPD N^Nugf (֭HNy 8"J|d pR?!@zo/X$' m Hn=irO (.! ܾ(.".#B:$V'P3l":#` ";\  "/($38"? 5""m.?@?R8O1kb? ?/82f9l ?<5!B8%B OCz4+O=OOE5\`N. O?8B`LoA OOS8'R _Sz49",_>_PV5 9$ ,/_ o?5 (?_PO1`V?oz?0oBo??oU?_h OoR5!rPOtO$6OVOVOY{oq#_wQ_z_*P<_R/d hv////_/?p?.???o?OhOrޟOO_r_<__گ_odo|8ooğo\ֿTx0fү4ϜX+ i,n0/`JJ/Pߺ߄4,@#/  jޏ   ?<'~ Jpm.p\X0`$(4> |gN W@J, c  e?m"0p:>ppbpxvpdpRp@p. ppͲouDp>p@>p^>,pp>>p?zp=hp>TGrBD$>2$8> S@Zc0<@ [T"|N{T}3.#-Jfq!^30--"n>l 3J  oB$`Ȅ46XBH fXT(T(T(tT(hT% l0( | g < ` jbF n:""6Xg=[: %%PJ@f#j$,$JM #J$?4"?44H$,  /R 2N2?2?;!!/.J B@񝱐RC r|x4 2 BFT,J JNTW:6D]T0VR\*Vr*Z*d~r#n?*r?r 79G?*mfr6:A:88]᧿#^Lﰬ%s#O-O_c#?#%4830RrX|4VX2ɢ`ZyB B~(0b^_8Q,Q6]!fj1&1>>"BN`jѲ(UvkUhfa-*kko*oTTlBBRrަT"~ƒv_pRopRʀ aaQk"X@0(t%4U!wbl$߂D_V_Rz__D_ _ZG*s&Y}+m"RV/)-^ !GYvXϲznϚϲ!ϏᏯ?FM$p߂6Jdx㞯OX_&_8_(:TfTZ$শTֻڢা $俔yڢ ঃqwRڢq㣡qwVڢq Bڢ. FڢJڢrڢvP!t%z`o , ,π& π:5&fa9KjѝEn.i,H,t.ܕFB*4HNP*-/KF*@V/JHR*F/HJ*)L/HV*R$*V6AXQ߿m͉?›?$*w߭Lx(hl갲pt`,BPTFhUVڨP-L.Ԣ8ܜ$6H}P".جV 6`ѧցPxV $WĐ6HVhA<7ĐHT舶Ր &Hh rVRdv/P8DޒdHꠄh@p%/(L/T/訶찲հ H"hV"????L/D1?OBnn}BjARosJ@ o2qJ@ȊH S Ȋ$ (hHMD0xJ}Ȭ8 bt,:o+m.20><[o[1|o2ooo8JNd"|x5꯰F 2,eӚ>PbtN6τ@?f9]C!ߓWۦfRΛA3Zb&AhPQi+n H~3vb4ȯگҿ@4(>j||j2b<rbtφϐϼ$T^2^p߂^<$JPRHZ2r ^| #8hb5z5g5vb67DHu3 : ?t4?= aE9d/bW?/Qt?@Bw6!&6N7,KA&WdO|#L BD>bKA+A?$ +AR _\2W0B zB$zZB0T\T_.Z.PD(}stzW\TJ"g yBn!D薳X%.ZH CoUonooi&6P"q)*qD(0, u Z"8/"i'7/ =8)=|r !_3/BH$@x{f`^4OE!H"<^4E!P RBn kP_`^4o^4~^4^4f^r(vЍusБ^TM@^4PoG?N$$.j&r^.^Dʟ(|r5Y :Na1$&Gn#OlO`2(&Eթ⯠OL XF\OO`2 0i2 K]o/'տ u__U`Td____Zho,o>ooboooo*6(z1#3f 0?m#[ Z` 8$O@ JM`?<ݨpŲqaH%bO.H` oOʁAިpOEBbX#BX]ǩbO WXR@Z#wXT QJfpKߨpu6Q/%T%Qpd dd֥B$6ZQ6UPJ@qp°qNq_TT\qrYe'Red@m!@hS,VlIbe`Rpr4R3ne02c1@钰fiR~dRpmJԤtIfJܤkbaJ~H/AV2x@HM*x@tDt ht-B NtUAj|~u}(hS Z&rqz-IbDVKvԜFiB?Zi˄.@ЀxRJH̞w/ٟc!8Jįnw}_;UClj}7M08`ʲ(eִ(bڪ Ktb3úxԀ~ҏP!^{vP 1Ġ݃dɔ߸ܯ0tbϬ.ίC "ϨߺHWu㦖i|0 PQfP"Awby𠶈Uя t@w(:b2GY߀Z/g. XIbk.0~hzIbgFOdO/G잺fX\tFbeeR`  :0H~KP4 0k/AZZV`׃׉ua.Nh!Rp q"  Ex0tVh(/"$$(4/e,g¦\j̦[l$ggU$ &/S\ .T N?3BP7Lb,L4E4Le4<L 84N$8.O(8bO26tLL$OLOLO*B4r(Ou2LOD_vOj_OO_OO>E$R*Q@"8.dg..d 421a"1a}29Xate~ir1&l ^b9n5J ftd\0P0<`m2JP~1i4@Dg&83!H!?L a`V1Bg>>5вH/ `/$ A pW N𠶹d+X.젶 |TpLnB֟=@xATlSnrRnIrxA\2.H ffXus!(xrv5QL-hT`vR?-/\2\.8 ?Vdqzrppr!@hl`-P"X?Jfoc(:jb f,Ɵؒޟ֔LT 2ؒӃO ֑iEbl$@fKf_"5j,D!)ّ!%Pn`"촉R04S0 d.804<lJd>, t^dQY|^woJ !,<–!$ |B ʼqϤha0N> ]Zvu\ޕ{Np|zRXٿꚤbu<"\점/j r-{ަ0gR!QpJ\f40s{p@J@feMe(TXāJlT(<8?xXabt`O0`$X_OF`jrT=,8SBP$>?6 Sa/+ _+T- fB@P*T /Jg&VDT^DـhDT-vOO)UO >8V(9fB-X#a`qʦJZ@`q,Nt4u |g$t)zr }`3rmTv yl$*vS6x$BPv j tzRy,>tzO="zRxhrt }or3Rޏx(DVRxh@y 膟XPzx}ˋQy&8>\Q r r#|³Fc`$n?oˏE*ױR@@rԐֱ?̭¿`D>8DƳ.R >@DDwx/Á`$(U^^^^j뀮,񢄡 Ϩpώ/2,2IH0"2(PTnr8ᘄn߲hֿDRxt☆0 X\N`r桨IJdΚ>hl$VUJ5pBba-Hktwqq^uBi.Ba883p83-d Բ #jT13{-UYRSz-ή֮UʮƮ®UҮ`fp 8,J""J::`Zfp ,`fp -`f8`f!TхJp8U JUp8$$ ( W-(H!{.HUԄ0X J"U ,XTP"m$H6*C!<*eX*v%H:P ?;T\1VH~nh@gRe,\"6 44"2W-F6"4g D!.v#4b4zzV-H3@X3`WlAe((gVlH:3.P"2P?E!"2!50E!S@?2T122P"3DrE!,HP"K.B(O"wCH5ZH̟""3k(82#tB^B#@H B"%4bЏPRZjP3#M.lJb`P-"1H倒 /0X"^B|_V\Rn1`moi(_X,WJ@bo 5RJbCb_\_:_LVV_h_zR*T\Zo\)FoftD^_nkS̬#xv^BTUno\Z¢o"\ozoLV ooJtz^BonUJ+f#"Zblh.7lfI`}^B}6.`DZ$H!X mh-`|>Y:B>jBABd"f"p̖򪜆Жf s !f.*5p*/y7B@LRi=Jf>j@yԓv.V^߹ Jhnޔn ޔ ow 8 v\"P>>H{#ToЁLO\UrۂZ2(\HnnnޑnMl # $,(0A0'p.^B4@RBh#2(A1W@,`4Ԯ{r'.oB(0NN(1@=Ϫ[ nvoBB.( ,0 L Lm?͐!R "PKƭvB@{Y?0ܿѯ#f{, 0.4ĒH"Х*\Hla$&|=x\Hˊꭼxr$x`bn_-h®ppg tΤHޑH/"/O$"Ѳ"ܒB! @Rp10l$=`S,^bZh*z22{gfI(#:{1[$` -g`..e˜r,:oHnꈇ .?Il;BxR—`> ޑ0(FB.C616Ff`Ԗ"h "$/MEYC%!z1#B L.*J$kgFB@f#FK#Jn:놰%k:BA!(i2iAr4i2ڕޑo1Io `4N`_=@bW@=@0#| 2.^//:Xu)NF"j?5(.""Ɛ@,n*nsn,zeYr.OKl@J_\R3d_v_R @_Zy__R@Pl6a`\S@Q/h@bbBRR’@\d@bjf}s|b"R \  ڌ"(&6$0FӾ&@""i4J<z[ |`*B&pBg?{ &q!O@ hDg 0p,gV ,d`iA0r,T-q0t1"p-5&`wB`Bg^&pq-!El"O{1@l@ "0" P@.:R!nP?nr"Ю "в[#(n;$T/^@0D!!f-"@ /a2//g,1`Qnhnur.2o0УPDoOG7oBcCFF9^2YEbFр tУ?Qg*SR3??96?O#OVpڄ2fa $`>OQbB&@ O" O4afrQuVbuH战zaڦ&#|4Y2Ζ "Y1o.\h6&AR`X $$(fp7dϋ$ޏ E,$0fUH~򀙰*<˓Oaщ,(|*$d쁨_P$҅ R[I/$ۘjtƕįYؤO$hƔO7ۘRpF g. Cgk1 )1a Qdj$]\Ēd\A~0NB BL,f\Ģ 7Pa.N…R Z\0^¦$6HW"\5fPPW^ 0$lW^(Q_'!Dpqܞ3m_SNCdSEDp<ɺժ@lғyU`rh>_h52p`PإlY2"`G1NNR XPBkr"w!@6}ff' .z&(4F@Xž~f nX, ס_0/ 0R {DID%8%P/XZ, |IRB H3AB"8&ƨq.h06lHT%$0?# 0.$>"6?$8^?p4 VþP10H/ </b$ A` pNӿJg*)"/(qr&6gy @$ET? B!O"C@*O"TʦBF"]nG&'\ґSINpwp"fΆX!V=BfΒԘԘԘ}ؔԕ$1$Iptx6 BhđhܑБp Nd BPBhZ)!E1EZ%2|N_X?12ʣ\ѣ2=-Θ2ʣ1йF0/ã%7&ʪ0(%r&0&U0"0"%0&RΦb&=⦉2&6ޥ $TűXʣ'IJ~TVs1,$p t%2E1?#^¶?â&f)z:Xŏ B%Lɮ>%&vԛ" 8H B~B<*[BG`4LIJ/  f ^-@<`RGXR@H gf0,/p Erd\=JF`$0RF> 1J!"SG0f0bB3,pQH|=@?'.20RA0pQB0` 0*@(@?PЩ0PH1'sФgfgBA` ?PRѰ|"f_@ n `.f$s=|01,R0,@A@!"?P $',2D{N`'`<8H$f*-H`9 `` .8g<`oRRGg*ggf n8 80nmrB0J@m?Bgp FHBgŠTf"1((1I ^G·g<2Pg2<`oA?0?  A81@@@B->`0Z 2H-!lvmظ b-L0!1.fX1f !J!_MY "uP`P @ J@BN"4AN`!%"$0f B?B`J"} JlV{DJlRvd`Bb⊯d.|DdDЪ@A LBGl~D l GD&gHC H@J@g@HCBCւJGgD-C$".J6IAִ q.N"R.l.n# К%@"[ H`-q'8omnfQ'bU'(M$HqPP[ߴ$/ -H" >R!-~P&$nc܋|?"lB.N2.5Я3; >2/ %?72p³2721101541BE<3/ ڤ$ފP~A$EQ& HЁ @#ЮbR8$ގB Ї ֎P֢OIH`*~D#FQN@.3HS0v1fNn2I.g:"^454C: yq Mggd_vS`@= `O)/X=|P-| al_> @3?l9p n3o?TV`B`(~f2<0=`"zd3fn>ˆs>XONuhXORpokhvV(l+s`"CVx+rqDv^b^ls`$Cay}wrqu.# "(fJgu"¼vPм@ L*'sB fB`※$ `л8 tg jDh <ro`V$^!fBH@ @bQB @}YB郀?}UBJ@kSB&<"F€JHBЂJ?j<)(Nq$HBJBnDB Bcp`*` c ܇ۄHAHB>g ڇلHDHEHF8:|h($؇x>r$~>kڅلSG FHD„v ȀۆنGk G xz`F`SGOHG؇ļ r͞xt8:LME鴀0bRD1DHBHC.h^ЇHG~` B@J|F>rAHF<J8hnEН߄jSGd6HC,h ,ІHF|_d*HEHE8BEF~BdHG>_HA0Ѿ2 @xDjdhrxx8pznG‡~𮌁݅߅D ~~|_eǼ m/qbOP-R@RE8(AjP} ,$125To"X$na-)f]osq`0l 2UV6Zl$40`8bn0`| Pn?#?@|! U$hT65`L3n{&// /B` J?"bTA@605`hv1/"P/af0` @AA0 DW?< B/.TC(O ƅ"2.vbL0 fz@ !f`(Ig `Q|N0A`2%EX/@"%CJ?B$J `W &B.A3uC f,a($`"qS@qsnr\cNqzwA LP Bnbf=| RHZrgnZwgZag`bjA,b(@.C(H`{0,T`Q ^mɇBbBl -H|+WBl l f0plqāfBZ<~t>JGm TU`.Bg^` G8a2ʄ9G͐0!()@9)h /L0|ց0U0cfA>i X/ce0 $Bg0Q>00W^d11JW!$Jlo3ʰ gPqH0P0QP 0B-@JOm 0b00QPJl3צQt f,Юp&jt `h0g 6 렰oT|J@f+]0`` >0M/0Q0@9 J]0g3Ԩq`pi ."0&QSo/"5/n"Z./Ò. {X`@ڡf&`(7M)GB Pk~QƚA)j<7f0:PD.pOށڂBf (@#1)j,f,j*T`e*f(` BGpo+#̞ P`( @)jf^"t(M*gU`Ɉ'Pln`sg ꘰vQ*@(3j` ﰔm2Ќn2Дl`(To "сЁf T +T*`* ",ԍf Ѭ>`(&0J0\"HPgX_HfH`ZL!)n5OfBGЀt>c72)z<Ȉ Ag%R,0=೴@ -g&K?0>ೀPg@-3fA0):L"nAf .#T(&p0ЊrjBM ,0UꊐP6`m|```RR? Sn^`4/0Lltk =@8렖@`v iHmT/! 'ֶ+',RF,.'Ұ? *L fR`b!f #H\R5f)-O ڠРԢ{0^l(ƛ2 u0(L@B@ggSBAgHJ@0A5 rW'@fNu opPR@S߀JWjF52/0NuSA2V?0PkYN g檒 @ޒ @֤E=1QxpX Qh0m9nC1|0fB2a@DafB"A@AAEx osB %䞀0JX|Q-fPaR5bF2v/eHl$ 6{0H Ѓ\]@jCQHRbS5J gP` 5PoPDC`nQ&DAz@UAA$SqmeIѳ`RWS UzwH7q(M\g/A&H. c UΡ`<b S=`@ Qk |a|l0fDeP2Hnx ؿk0!g 3rd|c`~J0fBJ/ /޹a52kҰpP(џLw8($ BB`&: Bvd d``bdlo-A;tyL&gHC H@0@HCBCւ-C~u.J#W'.N R-+ .N RPY@P|?lN,.NXEV) 2oPH @#ΐa(4>U7 P'>UU `(JTj(U4 |*$(8>[Hj Xbn֜ٲP Oֿlڇ|*0tLHmUa .uP(UQ& (< >]6BE ,:< ` ``Xg`dg`ogК`ug¾`xg  @d@ - D.`!z@)rA &@B#(/8H/nX(0 D m2<7E`n0_A rPxUn X.f/ / 1oP*E`8eRa>!P(U8 GQ ><]<~P]|}|0R@?Y0=P11*b0f.f*0f@y`01'"`flB0UF` $<`(P&\`m Pj0%\$@Jg2. g$/ ?j0MchpNGg R *XG>Z\`=|\`ۜ8b-fVRR($0f$ 08&*f R=ST``16HR2($.f>8/J,Z/HRr(lj0$!f$Bߤ $@!dD$SX/ :Po:.$!Ƞ_g PU,2A3*w n!g=0`R> Ta#뜃|"4힤U`PP3`fQh6v2P`N<`cg.`eg`fg`gg `sgN.Pgj!E>.?E`4S7``J@P URBa"`ap[x\R` `fHOZOlO~K$O6J` =PL<f (8f0aTf"m m ;)h||Q(hu,T(P Bg"Vom/^`Xdg NU,H*+@`.`?XTQf2Pcf2S -gFgBTfxQ0},g|,2X` ,Rg ,HNqXyX`g "> cQ`U`Qf4'f<_p e}pdg<)` Gam`|` `AKmbNja F@3p30psta :B*"2*v`hgu  E. 2"hc:0`" "w60HЃ(2"^vSGp??hbl"B0`Pnqx~ƶ0Xq``U0z 0,g~g0bgBIa0d8c\Ϗ`SObAg D` Nq`Hؗcn*t* rr2"7褂wं`-f2"he`a~+g 2"0n{0j ~QGa40`0gfRn~ogSE&f^Z⇑G?/}8PTD.ۂz`0`.f0$``Eg`eҒ0$``2"heSMf~hg `)*JEl~n.HPZ8ffgY+P\ln`z BG3k,@ :a|VPXPH e`cg2hbT: Eg \nZ F%gFf0`Z?0Fg& nUZvZj5=PaN"1#Ro`-gMf!l"*%RHhcf0^uBCҐ~ڥ PRG0hdghoguhxDhB)󹤜0@[_\ NVr>ǿ `(,F`00*he*fB40Jf!XZ^lxS!@0"v^xehsD½ ڥ(P`$g0+Nc0g ePBRnRGfL0TTJPn=1`,>!g3kJ`D` Xi Ug$g )/p ?G\Wp 0":,AqE?o>`qO60\40 0H{є0,`elGl JEf}Xge6 Emv= 2HHAA`U60`,DPJ@n G@&@3 1FJxE70 f|ЭaQqnPgP'lB E@ ,PX(9lΠRE @/irgzBf gXge`:&lPR g ." fZ` @ B08 o/ f pJWf`g fS `pNuLrWɪ Sqf# a䞢 a‘! nol++ n4WoVZ{Q+  n]ưg qD@=@qưg02HupQ @#О3JĐq]*nt|I00nK~pP` vhr*tth f /.T`n/8߷P-`vP`6Б q-L-U-@K1.(>OG|JGn|m`NB0T@P1m d@D@`j1D@So<@RTO\ O`&烚AH@$@JGg FGQ 0dR@pBA1Q/,>33Կ׆Gҵ`QB`@H( q`0R  Hkm@d6;A>pR(@ ˱}`Fp0fRZ$` R$9nXJ*A R*@NqfSEHIw @Bw0 Input line number %d Warning: obsolete option@programm@stupidity error (%s)@OC FatalS code@@illeg0Ppa@@ Ptoo fewKWs CVobject type@malloc failur~PsyntaxUHconfus@UfileVatRPn not founAUalready def@An=osPserv@WPSKZworldQtainsPn-homogenioussT@an i `x of refracA is 0@DUcolor_info valu~PLV shou%`be >=caaKPSmu?ltipli@ad gnOP lef5tKQePxpwPROrighoDUvwP~6PstructRhj tr` zmmandSOO:L^p$6HZl~BEGIN_INSTANCESEND|BBOXssyNAMEO_SHADOWqLAMPTHRESHOLDX_pYrASPECT)AMBDIFFMIRRORTRANSDENSITYFUZZINDEXTHESRE3FLr9?sJPOSLOCYITIONOCAfRADIUS~XATTERNAMOVpXMUL'TYs){t@bUgyDISrRȏLO7OKApUPJnV1vp1V2z2}rZEN1BORIZ̀>Pbtv_1ʟܟ`0BT@$ƯqݯGxdЇABCpMÌXMApY9Y?Z9Z?DIRSP3pPARALLELOGRAMIANGLpRINGQUADRoC)s_OFSK"OC_LENGFIRST_S{CÀDEFArFILE_rrOBSERV4LAӵ`гXpT@TsЇְ)˦?PbMB8iFsk}ϏϡƢ̀WH@#߾rUz:ݒPj=|[ \vΰ` VWhzbxbЊp@ĪzGc{ bƹ?sQuick Ray TY`e v1.4stC) 1988,I9 Steve Ko`.miga`rRbyTtari ST portoRo@t B@hardt. OutzQFQ : %iPRe@u\bu wi;Pp/PlSwPQSize,o Asa3;p02w.3f@Foc0PLength) |8@ scanB0> ( 0%%+qpte).T(b.J%!/ Hit a keyexit.-x p -Y a Aw-f ubr(R ߐ?R¨ Xcm2,Դ m, t6*$³e ۻ\X(  &9 G$('G orsK Ж(C+21_/.Н{{>(,<4V H4syD}": ñtC$ C1!lѤ"4FX@jcIclt!°l°Y* B #-!SñA*z.lIllE/W/i/{//$".2.&1#/A.!%A "6 s72m."150l6Q*#'%b35B8±?W?i?{%1A*QT@Q)mվQC2*òC3σ*d*c°Єք1Q9 >Da4#)P**fR" "lR’Q`7  ,2/5SJ42QPP(PTSQ .*pKc*T@65c {P*(.2(1Sw up#:2 6@ $ ,p"NrBTrQ)! F@BtSP맚p(b׫,04 pݛbI7%@b4Њ1BB:B(, 1>Icq$ò1"V[  B"o(q)3šš3k zσ0b\`B .Ppě(QAcop" Mpdăƒ1R >T }:*b$&ݑо@Ia"pacF"6F'|1X8P 8TG"PQ0BD҃Q?$$Ys &*,V ,wp$4>@s B&p#9@u ,$  &8XD|:<* , `RPc0{PpP P GprXFpQpV`*P@FpP*eqv  wP\ m@'1C!T sb <!~E."(l`d$&` R04: "$( (X&>&. 1 . 4&f.,* p."(?$P:  " –01, @Ff:,Ā8 QGpD㈱ P@@ "' Bc:asu,61$f@D$dHH8P)tBF&8  ^} 0_Hv*,2x.(*VPءyD$m`tz8,J f  2$z 6 R0b,n,, [lf]" The X and Y resolution of the file, as ASCII strings seperated by a space, and terminated with a linefeed (chr$(10)). One byte each of red, green, and blue for each pixel. The bytes are in the range of 0 to 255, proving a 24 bit colour resolution (16 million colours). The post-processor provided with QRT/ST, RAW2SPEC, uses advanced dithering methods to reduce the 16 million colour output to 512 colours. For more information, read RAW2SPEC's documentation. IMPORTANT NOTE As of 03/08/91, I've not found an address of any sort for Steve Koren, the author of QRT. If you know of any way to contact him, let me know, because I'd like to notify him of this conversion. As usual in this sort of thing, QRT/ST is yours to use at your own discretion, and in the event of any accidental damages, neither I nor Steve Koren may be held responsible. QRT Ray Tracer Page 2 ST Reference UNIMPORTANT NOTES I chose QRT to port (as opposed to MTV or DKB) because I felt it represented the best compromise of speed and features. You won't be creating photorealistic images with QRT/ST (and if you could, the ST certainly couldn't display them), but you can make some incredible pictures, with a bit of time and effort. I won't release the Laser C source for QRT/ST, so don't ask; not only is it not mine to give, it has become unnecessarily cryptic (partly Megamax, partly me). If you want the original Amiga source, look on a few Amiga bulletin boards; that's where I found it, at any rate. If you create any images with QRT/ST and plan to upload them, you might consider uploading the .QRT source as well, as there seems to be a dearth of .QRT source in the public domain (those that I included in the QRT/ST archive are all that I could find). BUGS... If you find any, please report them to me, rather than to Steve Koren; they'll most likely be my fault, and if they're not, I'll try to pass them on (if I ever find him). I can be reached at the following: Robert Barnhardt CompuServe: 73707,533 869 Garrison Road GEnie : R.BARNHARDT1 Fort Erie, Ontario CANADA L2A 1N6 POST-SCRIPT As of this writing, 04/08/91 02:00, I've just finished hardwiring my floppy drive directly to my 520. At about 22:00 yesterday, the drive ceased to respond to the constant cable-jiggling that had previously kept it alive (if just barely). If this setup goes on me, I'll have no way to call the on-line services mentioned above; if you leave mail to me and I haven't replied within a month, you can safely assume that I won't be responding. At any rate, you can always reach me at the above (real-world) address. QRT Ray Tracer Page 3 ST Reference ` $o * ЪЪм// Bg?<JNAO /<~?<HNA\.j p a BgNA޼B?<NNTAC AC "pәQC pәQC pәQ?<NNTJ@gA P0ACBBBBC a pa z?<NAT<AA&: \*.R AWA: \*.S PUABB(AC0<?r46<JAg($HBJg n $ R` $SBT8<1@ RQA RAQA~><<:0@@2AA01@~0EE1E~1@RFQA |C A C ACK6 M0 C aAB0(fpaZ/:BT?<INA\BgNAKMJgJf %\fR(MfBgHz?<=NAPA0jpap*.RAWBJ@krA C E G f `SSfA0<OBBBBBBQpaSfpaRA@@ paC v gC ^A >r$X4QA A Au2<TpBX0 QE Bj aACrfaJk: g`BB@fJf8` f Jf4rR`<0k @`pa?:?<>NAX`&0 @@m0<@ Am2<44I@ T"HBR5|Bj @@g|@D@H4HCH@ 5@ Ag|DAI5AC((0<BBBBQBgI,Aoz>SG<faJk0faJk"faJkJFgSFQ`pa g`8Ak"0<?BBBBQAoChEk<SF``@``BAAA82ARrQ`<4|JB@BAdAAd8d2ARrBQ`G<4BBBG B@BBBE4B3 BAdAAd8d2ARrREQ`*AnCg~EiG >Ip/ KSG6<8:+<+BBk6<B@@@@JDjBD`Co8JEjBE`Co:JFjBF`Co<0@@2 82 2@RrAt2It2ItDEFK25@45P65`kkk K05@[05P[05`[K05@k05Pk05`kK6@7uP7u`8:<QI*_AlCfV:,<SF0@00REQAlBE<SFFFa`r6Cgj000p0oXC`8$00Cg,p@oYD`!@0XCCgp0lXC`!0@YDCf!0DlH<YFaLxFl:XEaNuAl4Cq0Ee0,@0l</ I=`CSF/>T<F?<2`OGp/ zJFg0qg~Qz&W0JqkQ`3``&Wv8<>:MNG???::1P<>MNGWooGFDl84Q\:`RX> 5p,QJ(_C<Ed QA">pBCBDBEBF2,`r4 S T U VSGgQHxPQ` klmnHxRW0lmpAo0<%O2JAj2<46AABAp0Q?:T?<>NAX?<NNT l:Hz?<&NN\?<?<NMXHz?<&NN\pa M C aA;`0(gJgJf %\fR(MfBgHz?<NAXJGg`8pK2JUg U(f,HpM"//<(?:?<?NAO Jk:*NLNuAf@|I@K ACEMGmf><BJgNNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqNqACE """"""""$$$$$$$$QACE """"""""$$$$$$$$ACEI뵠NqNq """"""""$$$$$$$$FNu  $Imv|z|z^vz~z`vD0D:DzDDD Z4 'bF}6QF}[0][ Raw2Spec Version 1.0 | Robert Barnhardt|][Yeah, OK][0][Dithering? |][Yes|No][0][ Method of Dithering: |][Simple|4 x 4|Error][0][Use Register 15? |][Yes|No][0][ Save This Picture? |][Yes|Again|No][0][ Thanks for using | Raw2Spec.|][Yeah, right.][0][ Raw2Spec Version 1.0 | Robert Barnhardt|][Yeah, OK][0][Dithering? |][Yes|No][0][ Method Of Dithering: |][Simple|4 x 4|Error][0][Use Register 15? |][Yes|No][0][ Save This Picture? |][Yes|Again|No][0][ Thanks for using | Raw2Spec.|][Yeah, right.][1][Unable to open|input file.][Too bad][1][Error occured while|reading input file.][Too bad][1][Input file terminated|unexpectedly.][Go on|Give up][1][Unable to create|output file.][Too bad][1][Error occured while|writing output file.][Too bad][1][Not enough memory,|remove any ACCs or|ramdisks.][Too bad]============================================================================== Raw2Spec Version 1.0 August 3rd, 1991 Robert Barnhardt (C) 1991 Brain~Waves Group ============================================================================== Raw2Spec is Copyright 1991 by Robert Barnhardt. You may use and distribute the program and its accompanying documentation, as long as they are retained intact, unmodified, and unmolested. General Information """""""""""""""""""" Raw2Spec is a post-processor for use with the QRT/ST ray tracing system. It converts the RAW output of QRT/ST into Spectrum 512 format, for display on any Atari ST system that can display Spectrum pictures (what a coincidence). Raw2Spec works in any resolution; however, the Spectrum preview is obviously not available in monochrome. Raw2Spec Usage """"""""""""""" 1. Render an image with QRT/ST. 2. Execute Raw2Spec from the Desktop. 3. Ignore the cheap alert box title screen. 4. Select a RAW file to convert (such as the one you just created). 5. Do you want dithering? Dithering involves using algorithms to render the RAW file with more accuracy than normal. I suggest you try using dithering, and if the results don't please you, try again with none. 6. If so, what sort? The selections, from least to most advanced, are 'Simple' (one pattern), '4 x 4' (a 4x4 ordered dither), and 'Error' (error dispersion, with Floyd/Steinberg filter). A good idea is to start with the most sophisticated, 'Error', and fall back to the lesser methods if you are not pleased with the results. 7. Use register 15? Spectrum 512 uses register 15 as its current drawing colour, and any images that you wish to load into Spectrum 512 can NOT use register 15. However, if you're only going to be viewing the pictures, there's no reason why you shouldn't use it (and gain a few extra colours in your image). 8. The picture will now be converted, at a fairly fast rate (~ 30 seconds for a full 320 x 200 image). If your image is greater than 320 x 200 in size, it will be cropped (not shrunk). 9. You will now get a preview of the picture (if you're not in monochrome). Hit any key to exit the preview. 10. If you're not in monochrome, you'll be asked if you you wish to save the picture. 'No' will take you back to the first file selector, and 'Again' will take you back to the first 'Dithering?' alert box (and will use the same input file). 11. If you selected 'Yes', you'll now specify where to save the Spectrum picture (as an uncompressed SPU file). Swapping disks is kosher. If you click on 'Cancel', you will be taken to the 'Save this picture?' alert, even if you're in monochrome. After the file is saved, you will be taken back to the initial file selector, where you may choose another file to convert, or exit the program by clicking 'Cancel'. Technical Notes """""""""""""""" o Raw2Spec was written in 100% assembly, with AssemPro from Abacus Software. o The input image is currently cropped (top left corner), if it is larger than 320 x 200. If another version is released, it will allow shrinking by pixel averaging as an option. o Dithering is used to reduce the input file, one scanline at a time, into the range of 512 colours. The colours are then sorted by popularity (frequency of occurance), and added to the palette in the order of most to least popular; if a colour cannot be added, the closest match is calculated by finding the least square to each available colour. Finally, the scanline is plotted (this could be done while setting the palettes, but using a strict left to right plot routine is faster in the long run). o The converter doesn't save in SPS format because SPS doesn't allow for the use of register 15. I'm not sure of SPC format yet. If ever I release another version of Raw2Spec, it will be able to save in all three (SPU, SPC, SPS) formats. An Explanation (not An Apology) """""""""""""""""""""""""""""""" To those who have written to me in the past: I have not forgotten you. I did, however, temporarily abandon you in favour of something that's slightly more important to me - education. I had been spending a totally ridiculous amount of time on this computer, and when the power supply went, I had a wonderful excuse to get back to the school work I'd been neglecting. I've just graduated grade 13, and will hopefully be attending a university (a cheap one) in a year or so. In the mean- time, I'll try to complete the projects that I said I'd do for you, barring any further technical difficulties; I'm not spending another dime on this antique. { The next week... For a good laugh, read the post-script to the QRT_ST documentation. Next time, I'll remember to knock on wood. } Bugs, Comments, Lawsuits """"""""""""""""""""""""" Get in touch. You can contact me on CompuServe at user # 73707,533 (I am not a number, I am a free man) or on GEnie as R.BARNHARDT1 (how original). If you're one of the few living people able to communicate by non-electronic means, write me at the following address: Robert Barnhardt 869 Garrison Road Fort Erie, Ontario CANADA L2A 1N6 {******************************* Room *******************************} FILE_NAME = ROOM.RAW { ********* Some pattern definitions ********** } PATTERN ( x_size = 16, { ** A checkered pattern ** } y_size = 16, name = CHECK, RECTANGLE ( start_x = 0, start_y = 0, end_x = 8, end_y = 8, diff = (1, .20, .20); ) RECTANGLE ( start_x = 8, start_y = 8, end_x = 16, end_y = 16, diff = (1.00, .20, .20); ) ) PATTERN ( x_size = 80, { ** brick pattern ** } y_size = 50, name = BRICK, RECTANGLE ( { 1st half brick 1 } start_x = 0, start_y = 2, end_x = 18, end_y = 23, diff = (1.00, .20, .20); ) RECTANGLE ( { 2nd hald brick 1 } start_x = 62, start_y = 2, end_x = 80, end_y = 23, diff = (1.00, .20, .20); ) RECTANGLE ( { brick 2 } start_x = 22, start_y = 2, end_x = 58, end_y = 23, diff = (.80, .20, .20); ) RECTANGLE ( { brick 3 } start_x = 2, start_y = 27, end_x = 38, end_y = 48, diff = (.85, .35, .10); ) RECTANGLE ( { brick 4 } start_x = 42, start_y = 27, end_x = 78, end_y = 48, diff = (.70, .25, .20); ) ) { *********** Now for the room itself ************ } { ** four walls ** } PARALLELOGRAM ( loc = ( 0, 0, -100), v1 = (100, 0, 0), v2 = ( 0, 50, 0), pattern = BRICK, xmult = .2, ymult = .2 ) PARALLELOGRAM ( loc = ( 0, 0, 100), v1 = (100, 0, 0), v2 = ( 0, 50, 0), pattern = BRICK, xmult = .2, ymult = .2 ) PARALLELOGRAM ( loc = (100, 0, -100), v1 = ( 0, 0, 200), v2 = ( 0, 50, 0), pattern = BRICK xmult = .2, ymult = .2 ) PARALLELOGRAM ( loc = ( 0, 0, -100), v1 = ( 0, 0, 200), v2 = ( 0, 50, 0), pattern = BRICK, xmult = .2, ymult = .2, ) { ** a floor ** } PARALLELOGRAM ( loc = ( 0, 0, 100), v1 = (100, 0, 0), v2 = ( 0, 0, -200), diff = ( 0, 1, 0), pattern = CHECK ) { ** several mirrored spheres ** } BEGIN_BBOX SPHERE ( loc = (50, 25, -40), radius = 15, diff = (0, 0, 0), mirror = (.9, .9, .9), dither = 0 ) END_BBOX BEGIN_BBOX QUADRATIC ( loc = (30, 0, -20), a = 1, b = 0, c = 1, d = 50, xmin = -10, xmax = 10, ymin = 0, ymax = 50, zmin = -10, zmax = 4, diff = (.7, 0, 0), dither = 4, reflect = .4, sreflect = 30 ) END_BBOX { ** An observer ** } OBSERVER ( loc = (40, 25, 30), lookat = (50, 0, -100) ) { ** Two lamps ** } LAMP ( loc = (65, 70, 20), radius = 5, dist = 45 ) LAMP ( loc = (30, 55, -10), radius = 5, dist = 25 ) SKY ( horiz = (0, 0, .55), zenith = (0, 0, .25), dither = 4 ) FOC_LENGTH = 50 320 200 ""dduuM {oXX;;YZGGSSL__&& {oMMm bbcc)) zpCC>>DD*Ę33I33ff,, zp99?? ?7;LLIIii--zp 00wwCCaa\11i #(llU;;jj//zp ((jja]]"ppBE1Ի``DLioojj00zp!!^^fXkkVhh菏IINN቉OOEE] KK[[jj00ypRRqq@..yyJZ:KKWW??}}VV)){vnby* z* {*!--7+7*6*6)5)5)4(3(3(3(2&2&1&ǧDCBAA@>>=55ppyyKK!! ~zuncw* x* x* y* z* {* ------,,ߚ6)5)5)4(3(3(3(2&2&1&ťCBAA@>>==;; ,,cckk@@ ~zuncu)u) w) w* x* x* y* z* {* ----,,,,,,,,++ږ5)4(3(3(2(2&2&1&ťCBAA@>>==;;u) $$VV^^22}zunc89u)u) w) w) x* x* y* z* {* ----,,,,,,,,++++****Ԓ3(2(2&2&1&0%ťCBAA@>>==;;u)s(r(JJxxPP''}ytnc77888u)u)w) w) x* x* y* z* z* ----,,,,,,,,++****))))))))΍2&0&0%ťCBAA@>>==;;u)s(r(p'o&??xxhhAA |ytnc66677888u)u)v) w) x* x* x* z* z* ----,,,,,,,,++****))))))))Ӧ((ťBBAA@>>==;;s(r(p'o&m&l&j%44jjllzzYY11 ~|xtmc445666667888t)u)u)v) w) w* x* x* z* z* --,,,,,,,,++++****))))))))((Ӧ((&&&&¢BAA@>>==;;:s(r(p'o&m&l&j%i%g$++]]WWttiiGG%%~{xsmc3 4 4 4566666788t)u)u)u) w) w) x* x* z* z* --,,,,,,,,++++****))))))))((ӥ((&&&&&&&&%%@>>==;;:s(r(p'o&m&l&j%i%g$z1  ##PP<<__xxttYY55 }{wsmce$g$3 4 4 4556666788t)t)u)u)w) w) x* x* z* z* --,,,,,,,,++******))))))((((У&&&&&&&&%%%%%%$$==;;:s(r(p'o&m&l&j%i%g$z1 x0 v/ DDyyCCbbxxyybbCC'' }zwsmcb"c"d"e#e$g$~3 3 4 4 4556666788t)t)u)u)w) w) x* ,,,,,,,,++++****))))))))((((У&&&&&&%%%%%%%%$$####"";;:s(r(p'o&m&l&j%i%g${1 x0 v0 u/ s/ q- 99ll..GGbbttxxffLL11~|zwrlc`!a"b"b"c"d"e#e$g$~3 3 4 4 4556666788t)t)u),,,,,,,,++++****))))))))((((У&&&&&&%%%%%%%%$$####""""s(r(p'o&m&l&j%i$g${1 x0 v0 u/ s/ q- p- n, //^^00EE]]llvvzz{{xxppddOO77## ~|yvrlc^ ^!_!`!`"b"b"c"d"e#e$g$~3 3 3 4 4556666688 ,,,,++******))))))))((((((ϣ&&&&&&%%%%%%%%$$####""""!!!! p'o&m&l&j%h$g${2 y0 v0 u/ s/ q- p- n, X|||zzz''QQ߭ //@@QQ__eeffccYYJJ88''}{yvrlcn, o, p- ^ ^!_!`!`"b"b"c"d"e#e$g$~3 3 3 4 4556666 **))))))))((((((((Ϣ&&&&&&%%%%%%%%$$####""""""!!!! l&j%h$g$e#y0 v0 u/ s/ q- p- n, XVUxxxvvv EEuuۣ  ++77AAHHJJFF??44(( }{xuqlc|||~~~j+ l+ l, n, o, p- ^ ^!_!`!`"b"b"c"d"e#e$~3 3 3 4 4 55 PO))))((((((((Ϣ&&&&&&%%%%%%$$$$####""""""!!!! h$g$f#y0 v0 u/ s/ q- p- n, XVUSQQrrr::ggם %%,,113311,,$$ |zxuqkcxxxzzzh* i* j* j* l+ l, n, n, p- ^ ^!^!`!`"b"b"c"d"e#e#~3 3 3 ~~ OOONNL((''̠&&&&%%%%%%$$######""""""!! y0 w0 u/ s/ q- p- n, XVUSQQrrr^& ooo00ZZӖ !!##!! zwtpkcNttttttQSxxxg) h* i* j* k* l+ l, n, n, p- ^ ^!^!`!`"b"b"c"d"d#e#{|}~~ OONNMLLڗ5)̠&&%%%%%%%%$$######""""""!! ywuu/ s/ q- p- n, XVUSRQO^& ^% \$ kkkiii''MMyyΑ  ywtpkcPpppqqqOPQQSxxxg) h* i* j* k* l+ l, n, n, ] ^!^!`!`!b"b"c"{|}~~ OONNLLLٖ4)4(3(3(ƛ%%%%$$######""""""!! ywutrqp- n, l+ XVUSRQO_& ^& \$ Z$ X# W" BBkkȎ  yvtpjcRlllnnnMMNOPQQSxxxg) h* i* j* k* l+ l, n, n, \ ] ^!^!`!{{|}~~ ONNMLLKٕ4)3(3(3(3(2&2&2&¿####"""""" wutrqomll+ XVUSRQO_& ^& \$ Z$ X# W"77^^ }xvsojcSxxhhhhhhY$ Z$ [$ nnnMMOOPQQSxxxg) h* i* j* k* l+ l, n, n, {{||~~ NNNLLLKKؕ4(3(3(3(2'2&2&1&0&0%0%/%""""!! wutrqoml~~~}}}USRQOqqq^& \$ Z$ Y# W"--QQvv}{xvsojbStpmihfdcbaaaabcdfhjmqudddeeeV" W" X# Y$ Z$ [$ KMMOOOQQSf( g) h* i* j* k* l+ kkmz{{|}~~ NNNLLKKK֓3(VUTSRQPPON/$/# wutrpoml~}}}{{{yyyvvvQOqqq^& \$ Z$ Y# W"eee%%EEii}{ywurnjbTrliea`][YXWVUUUUUVVWXY[^`bfimr```aaaDT" U" V" W" X# Y$ Z$ lllKMMOOOQQwwwe( g) g* |||}}}~~~ghijkkmy{{|}~~NNLLLKKJՓ3(3(TTSRQPONNMLlll?>>=wutrpoml~}{yvvvtttrrrqqq^& \$ Z$ Y$ W#eee ::\\||~|{ywwurnibUvoiea^[XVTRPONMLKKKKKLMNOOQSUWY\`bgjpw]]]@BBCDT" U" V" W" X# Y$ Z$ lllKMMOOOQQwwwxxxyyy{{{|||}}}ddffghijkkly{{|}~~w) w) NMLLKKKJՓ3(3(TSRRQPONMLLKjjjY$ X# >=<;;wutrpoml~}{ywww\ZqqqooommmZ$ Y$ W# eee00OOoo~}|zywuvtqnibUzqjfa^ZXTRONLJHGFFEDDDDDEEFFHIKMOPSVX\_cglrWWWYYYL>@@BBCbbbT" U" V" W" X# Y$ Z$ lllKMMOrrrsssuuuvvvwwwxyz|}}}ddffghhjjkyy{{r(s(t)t)u)u)v) w) NLLLKKJJӒ3(3(TSRQPPONMLKJjjjY$ X# V# U" <;;:988wutrpomk~}{ywww\ZYWUkkkiiigggeee''DDaa{{~~~~}|{zxwusvtqmibU>>>>>>>>>>>?-"-"-"-"-"-"unid`\XUROMKIGFDCB@@??>>>??@@ACDFFHJMOQTWZ^afjpwTTTGIJKL>@@BBCbbbT" U" V" W" X$ Y$ Z$ lllmmmooopppqqqrrrsuvwxyz|}}}dddffhhjjko'o'q'q'q'r(s(t)t)t)u)v)w) MLLKKKJIHӑ3(2(SSRQPONNMLKJjjjX# W# V# U" T" S! ;:988o&n&l&rpomkj~|{ywww\ZYWUUigeee 99UUnn{|}}~~~~~}}||{zywvusquspmhbV>>>>>>>>>>>>-"-"-"-"unid`\XUROMJHFDCA?>==<<<;;;<<===>@ACDFGJLOQTWZ^afjpwx) w) w) w)v)v)99999988888q(q(q'p'o&o&o&o&n&n&n&555554GGIJKL>@@BBCbbbT" U" V" W" hhhjjjkkklllmmmWXqqqrsuvwxyz{}}}cddffhhjjk5555o&o'p'q'q'r'r(s(t)t)u)u)v) ܹKKJJIHґ3(2&SRQQPONMMLKJjjjX# W# V" U" T" S! R! Q O 88o&n&l&k%i$h$f$kj~|{ywww\ZYWUUige //IIbbuuyyyzz{{|||}}}}}}|||{{zyyxwutsqousplhaV>>>>>>>>>>>>,","wpie`]YVSOMKHFECA?>=<;;:999999::;<==>?ACEFHKMORUX[_cglrzv)v)v)u)99999988888q(q'q'o&o&o&o&n&n&n&m&555544GGIJKZZZ?@@BBCbbbddddddfffhhhhhhSTUVWXqqqrsuuwxyz{}}}cddffhhijk}3 ~3 3 3 3 4 5 555o&o'p'q'q'r'r(s(t)t)t)u)v)ղHϏ2&2&RQPPONMLKKJiiihhhW# V" U" T! S! Q! P O NM7n&l&k%i$h$f$e#c#v0 ~|{ywww\ZYWUUige&&>>UUhhuuzzxxppwxxyyzzzz{{{{zzzzyyxwvvusrqomtrolhaV>>>>>>>>>>>>~,"rlgc_[XUQOLJGFDB@?==<;:99888888899:;<=>?ACDFHJMOQTXZ^aeintv)v)u)99999988888q'p'p'o&o&o&o&n&n&m&m&555444GGIJKZZZ?@@___```bbbbbbddfRRSTUVWXqqqrsuuwxyz{}}}cddffhhib"{1 {1 }2 }3 ~3 3 3 3 4 5 555n&o'o'q'q'q'r'r(t(t)t)u)u)))vvvQPONNMLKJIiiihhhV# U" T" S! R! Q! P O NMLYYYm&l&k%i$h$f#e#c#b#t/ r. q- ~~~|||{yw\ZYWUUiiige 33II\\iioommffuvvwwwxxxxxxxxxxwwvvuttsqpomktrolgaV=>>>>>>>>>>>vpjfa^ZXTQOMJHFDCA?>=<;::98888888899:;<==>@BCEFHKMOQTWZ]`dimryu)999999988888p'p'o'o&o&o&o&n&m&m&m&554444GHIJKZZZ[[[]]]^^^_`bbddfRRSTUVWXqqqrstuwwyz{{{bbdd_!_!`!`!b"b"y1 z1 {1 {2 }2 }3 ~3 3 3 3 4 555n&n&o&o'p'q'q'r'r(s(t)t)t)u)))))((((((((((uuutttsssrrrqqqpppLLKJIHgggV# U" T" S! R! Q P O NMLXXX<k&k%i$h$f#e#c#b"t/ r. q- o- m+ l+ j+ |||zzzyyywwwuuuZYWUUiiige **>>PP]]cccc[[sstuuuvvvvvvvvvvuuttsrrqonmkisqokgaVsniea^[XURONKIGFDBA?>==<;::99999999::;<==>?@BCEFHJLNPRUXZ^`dhlqv999999888887p'p'o'o&o&o&n&m&m&m&m&54444SSSGUUUWWWWWWYYYGGI^^^_`bbddfffQRSTUVVXqqqrstuwwyzzz{{{|||}}}~~~[[\ ] ]!^!_!`!`!a"b"y1 z1 {1 {2 }2 }3 ~3 3 3 3 4 5 55n&n&n&o'o'q'q'q'r'r(t)t)t)u)))))((((((((((''&&&&&&utttrrrqqqpppooonnnmmmllljjjiiiHgggV" U" T" S! R! Q P ONMLXXX<;:i$h$f#e#c#b"t/ r. q- o- m+ l+ j+ |||TTRtttrrrpppoooUUiiiged 44EEQQXXXXQQqqrrssttttttttttssrrqpponlkihrqnkgaW!!!!!!!!!!""""rnieb_[XVSQOMKIGFDCB@?>===<;;;::::;;;<<==>?@ACDFFHJLNORTWY[_aehlpuSSSTTTUWWWEEGGI^^^_`bbddfffQRSTTVVXqqstttuuuwwwwwwyyyyyy{{{i* i* k* k, m, [[\ ] ]!^!_!`!`!a"b"y1 z1 {1 {1 }2 }3 ~3 3 3 3 4 5 5m&n&n&o&o'p'q'q'r'r(s(t)t)t)))((((((((((''&&&&&&&&tsrqpoooVlllkkkjjjiiihhhgggeeedddcccbbbR! Q P NMLKXXX<;:99f#e#c#b"t/ r. q- o- m+ l+ j+ |||TTRPONnnnmmmkkkiiiggged **;;GGMMMMHHooppqqrrrrrrrrrrqqqpoonmlkihfrpnjf`W!!!!!!!!!!!!xrnifc`]ZXUSQOMKJHFFDCBA@?>>============>>?@ABCDFFGIKMNORTVXZ]`bfilqu~~~~STUCEEGGI^^^^`bbddfffPRRTTmmmnnnoooqqqqqqssssssuuuc( e( e( g) g* i* i* k* k+ [[[ ] ]!^!_!_!`!a"b"y0 y1 {1 {1 |2 }2 }3 ~3 3 3 3 4 5 l&n&n&o&o'o'q'q'q'r'))((((((((((''&&&&&&&&trqponnnVUTSRQPeeedddcccaaa```___^^^]]][[[LKXXX<;:9987c#a!t. r. q- o- m+ l+ j+ |||TSRPONnnn\$ Z$ Y$ X" eeeddd !!00==CCCC??mmnoooppppppppppooonmmlkjigfdqpmjf`W!!!!!!!!!!xrnjhda_\YXVSQONMKJHGFEDCCBAA@@????????@@AABCDDEFGHIKLNOPRTWXZ]_adgjmqu~~~~STUCEEGGH^^^^`bbddfffggghhhiiikkkkkkmmmLMMOOPuuuc( e( e( g) g* i* i* k* k+ Y[[[] ]!^!_!_!`!a!x0 y1 z1 {1 {2 }2 }3 ~3 3 3 3 4 5 l&n&))((((((((''&&&&&&&&%%%%rqponnnmmmUTSRQPONMLKJ^^^\\\[[[ZZZYYYXXXVVVUUU:98876a!t. r. p- o- m+ l+ j+ h* TSRPONnnn\$ Z$ Y$ X" V"ddd~&&2299;;77kllmmmnnnnnnnnnnnmmllkjihgfdcqomjf`W!!!!!!!!!!xsplifc`_\ZXVTSQOOMLKIHGFFFEEDDCCCCCCCCCCDDEEFFGGHIKLMOOQRTVXY[]_acfikorv~~~~STUCEEGGH^^^^`aaabbbddddddfffgggX" Y$ kkkKKLMMOOPuuuc( e( e( g) g* i* i* k* k* YZ[[] ] ]!_!_!`!`!x0 y1 z1 {1 {1 }2 }3 ~3 3 ((((((((''''&&&&&&&&%%%%qponmmmlllTSRRQPONMLKJ]]]\[ZYWVVVUUUTTTSSSQQQPPPOOONNN5LLLt. r. p- o- m+ k+ j+ h* TRRPONM\$ Z$ Y$ X" V"T"| ((//00--ijjkkllllllmlllllkkjjihgfedcapolie`W!!!!!!!!!!tqnjhec`_][YXVUSQP+=HHGGFFFFFFFFFFFGGGHIIJKLMNOOPQSTVWXZ\^`acfhjmpsw~~~}STUCEEZZZ[[[\\\^^^^^^``````S T" U" V" W" W" Y$ jjjKKLMMNOPuuuc( e( e( g) g* h* i* i* k* YY[[\ ] ]!^!_!`!`!w0 x0 y0 {{{|}~~((((((''''&&&&&&&&%%%%%%qponmmmlllTSRQPONNMLKJ]]]\[YXWVUTRQPPPOOONNNMMMLLLJJJo- m+ k+ j+ h* zzzRRPOMM\$ Z$ X$ X" V"T"y%%''$$hhiijjjjkkkkkjjjjiihggfedba`pnlie_Wvroljhfca`^\[YXWV):MLLKKKJJJJJJJJJJKKLLMMNOOOPQRSTVWXYZ\^_`bdfijlortx~~~}|STTTUUUWWWWWWYYY>?@@AB```S T" U" U" W" W" Y$ jjjJKLMMNOPc( c( d( e( f( g* h* i* i* k* YY[[[ ] ]!tuvvwxxyz{{||}~((((((''''&&&&&&%%%%%%%%ponmlkkkSSRQPONMLSRQPPP>=<; : IIIHHH~~~|||yyyRRPOMM\$ Z$ X$ X" V"T" fggghhhiiiiiiihhhggffedcba`^onkhd_W<<<<wtqoljhfdba`^][ZY&4FayOOOOONNNNNNNOOOOOOPPQRRSTUVWXXYZ[]^``bcegijloqsv?SSSGHIJYYY>?@@AB```S T" U" U" W" W" Y$ IJKKMMNOsssb' c( d( e( f( g) g* i* i* k* ttvvvxxyy{{{|}~((((''''&&&&&&&&%%%%%%%%ponmlkkkSRQPPON=<; : 9 8 7 }{{{yyywwwuuutttrrrpppMlllZ$ X$ W" V"T" deefffgggggggggfffeedcba`_^]omkhd_W<<<j$urqoljigfdba`_^]#0?fr TSSSRRRRRRRRRRRSSSTTUUVVWXXXYZ[\]^_`abdeghikmoqruOq7777n'n&n&m&m&l&l&l&l%k%k%444443EGHIJYYY>?@@AB```S S" U" U" W" W" iiiIJKKLMNOsssb' c( wwwwwwyyyyyy{{{{{{}}}}}}ffhttuvvwxyyy{{||}((((''''&&&&&&%%%%%%%%%%$$nmlkjjjiiiRQPO: 9 8 7 FFFD |{ywusZpppnnnllljjjiiigggV"T"bbb} ccdddeeeeeeeeeeedddcbba`_^\[nmjgd_W<<wurqomkjigfecba`+8_DDXXWWWWWWVVVWWWWWWXXXXXYYZ[[\]^^_``abcefgiijlnoqrc' H;7777n&m&m&m&l&l&l&l%l%j%j%444433EGHIJYYY>??@ABR R S" U" U" W" W" iiiIJKmmmooooooqqqqqqssssssuuuvvvwyyy_`abcddffgsttvvwxxyy{{{|&&&&%%%%%%%%%%%%$$mlkkjjjhhhQQP7 EEED C {ywusrrrXWUTSgggeeedddbbb{  aabbccccdddddccccbbaa`_^]\[ZXljgc^W<<h#vtrqpnmkjihgfed%2I jj))\\[[[[ZZZZZZZZZ[[[[\\\]]^^__```abbcdefghijklmopr- W`& EJ 777m&m&m&m&l&l%l%l%j%j%j%44433RRREGHIJYYY>>?@ABQ R S" dddeeefffgggiiiiiikkkkkkmmmooqqssuvwxxx_`abcddefgsttuvvwxyyy{{|mmmlkjiiihhhQPOC B ywusrrrXVUTSgggecbx _``aaabbbbbbbbbaaa``__^]\[ZXWligc^V;xvtsrqonmlkjiihg!,9<<嘘p```_______________``````aabbccddefgghiijklmnopn&i$w0 Z SkZ766m&m&m&l%l%l%k%k%j%j%j%433~3~3RRREGHIJXXX>[[[\\\]]]^^^``````bbbcccdddPPQRSTUmmmnoqqssuuwwww_`abbcdeffssttvvwxxyy{{{GGGFFlllkkkjjjiiihhhgggfffeeeA @ usqqqXVUSRQecbv ^^___````````````__^^]\[ZYXWUkifc^Vl%|2 ;eeesssl, a"9onmlkjj%0I ݔee ccccccbbbbbbbbbcccccddddeefffgghhiiijkklmnop>;q'k%{2 ~YOK QQQSSSSSSUUUVVVWWWXXXYYYG\\\\^_`bbdddOPQRSTUmmmmopqrsuuwwww_`aabcdeffqssttvvvwxyyy{{GGFFFFDDDCCC.$.$KJjjjiiihhhgggfffeeesqqqXVUSRQecbt}\]]^^^^________^^^]]\\[ZYXWVTkhfb]V@O Kg* ] f#6;,#0$Nnm *4i))堠rhhggggggggggggggggggghhhhiiiiiijjkkllmnnoop1&/#><8vo_kYYY||||{{{zQSSCCEEFG\\\\^_`abcccOPQRSSTmmmmooqrstuwww^__aabcddefqrssttvvwwxGFFFFDDDCCCC.$JIIHHGFMMMXVUSRQecbr{[[\\\]]]]]]]]]]]\\\[[ZYYXWVTSjheb]VrUUUOre1&JOT>1B4#,;GGӂdkjjjjjjjjjjjjjjjjjjjjkkkkklllmmmnnnooppqMJ1&/$!!xq|qqqC||{{zzyQSSCCDEFG\\^^`abcccOPQRRSTmmmmooqqstuvvv]__`abccdeo'o'p'FFFFDDDCCCCA.#.#IHHGFF<;USRQecaoyYZZZ[[[\\\\\\\\[[[ZZYYXWVUTSRjheb]VE\j_i""$$'')),,>1&/BOO33innnnnnnnnnmmmnnnnnnnnnnoooooppppqqqrrr@1=.9,MI$$##""t. QG7||zzzzQSSCCDEFG\\^^`abNOPPQRSTlllmooqqssuuuu]^_`aa}}}~~~{1 }2 g$i$i$i$j$j%k&l&l&m&m&m&o&o'o'p'FFFEDDCCCCBA.#-"IHGGFEELLLKKKJJJhhhfffeeecaw~XXYYYZZZZZZZZZZZZYYXXWWVUTSRPigda]VFR oooi* ^ $$''۸,,.. (2F <=<<R ___s{UVVWWWWWWXXXWWWWWVVUUTSRRPONhfd`\VHiiiuuu1 NNNGMDIBFI6+9,#,4FX ZvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwG7\++++22//++6+4(FCA~,#z+ 97nh{XaQQQRRRSSSUUUUUUWWWXXXYYYZZZ??@P P Q S S" U" U" fffGHIIJKLLooo_& `& a& b' c( c( e( e( f) zzzUVWWXYYY[[[ r. r. s. t. t/ v/ v0 w0 x0 x0 y1 y1 {1 f$g$g$h$i$i$j$j%j%k%l&l&m&m&m&o&EEDCCCCBBAA@@,"GGFFEDD>=<;;EEEqyTTUUUVVVVVVVVVVUUUTTSSRQPONMhfc`\UIj2 BGMi##ܞ8+$,5DO[Ӊ/%xxxxxxxxxxxxxxxxyyyyyyyyyI9,X++33++=/SO4(3'EB nh{Yd: j%j%j%j%j%i%i%h%h%g$g$}3 }3 }2 |1 {1 {1 EEFGHWWW<=>??@O P Q R S! T" U" eeeGHIIJKLLooo_& `& a& a' c( c( d( e( f( yyyUUVWWYYY[[[q. r. s. t. t. u/ v/ v0 w0 x0 y1 y1 {1 f$g$g$g$h$i$i$j$j%j%k%l&l&m&m&m&EDCCCCBBAA@@@,"~,"FFEEDC==<;;EEEow~SSSTTTUUUUUUUUTTTTSSRQQPONMLgec`[UIF```!!##$$&&''**%-6AM\((%%## m&`!zzzzzzzzzzzzzzzzzz{{g* %%)),,=.T;-9,O''&&$$####!!}nh{YeeeOOOj%j%j%j%i%h%h%h%h$g#g#}3 |2 |1 {1 {1 PPPDEFGHVVV<=>??@O P Q R S T" U" eeeGGIIJKKLooo_& _& a& a' b' c( d( e( e( yyyUUVWWXYYZ[[q. r. r. t. t. t/ v/ v0 w0 x0 x0 y1 y1 e$f$g$g$g$h$i$i$j$j%j%l%l&l&m&m&ECCCCBBBA@@@@~,"~,"FEEDDCB=<;;EEEmu|QRRSSSSSSTTSSSSSSRRQQPPONMLKgeb_[UJ^^^""##%%&&((%-6@L\E-#8iZaaa}3 ##""######`tttmo'=0%ֽM,,**))((&&&&%%##""!! _!n, h) OV"8j%j%j%h%h%h%h%h$g#g#g#|2 |1 |1 {1 {1 PPPDEFGH<<=>>?\\\O P Q R S S" U" eeeGGHIJJKnnn]& _& _& `& a' b' c( d( e( e( yyyTUVWWXYYY[[q. q. r. r. t. t. u/ v/ v0 w0 x0 y1 y1 e#e#e$g$g$g$h$h$i$j$j%j%k%l%l&m&CCCCBBBA@@@@?~,"}+"EEDDCCB=<;;:ktzPQQQRRRRRRRRRRRRQQQPPONNMLKJfdb_[UJ?=>0%1&&-6@L\##""{^%O z1 h#46r'9;z* ={+!<w) 8q'N^% ##$$''((((ϬFD.$-#=<u) r(n&4}3 c"_ n, g) NU"8j%i%h%h%h%h$h$g#g#f#f#|1 |1 {1 z1 z1 PPPCEFGH<<=>>?\\\O P Q Q S S" U" eeeGGHIIJKmmm]% ^& _& `& a& b' c( c( d( wwwyyyTUUVWWXYY[p- q. r. r. t. t. t/ v/ v/ w0 w0 x0 y1 d#e#e$e$g$g$g$h$h$i$j$j%j%k%l%l&dddcccbbbaaa``````___<;;:iry}OOPPPPQQQQQQQQQPPPOONNMMLKJIfda^ZUJ=;=.#%-6?K[=w* r. TY#ZZZ78s(9u) 9r'6KX# Ua"4v* ~,"A/$ȪEɊ0%ťBA-#~,"<9r'o&k%3 {1 a"] l, f) NU"7i%i%h%h$h$h$h#f#f#f#f#|1 z1 z1 z1 z1 CCEEGH;<==>?\\\O P Q Q S S" U" EGGHIIJKmmm]% ^& _& `& a& a' uuuuuuwwwwwwyyyyyy{{{{{{}}}}}}~~~cccbbbbbbaaa```___^^^GGGFFFEEEEEEgpw|NNNOOOOPPPPPPPOOOONNMMLKKJIHeca^ZTJV !!""%-5>JYoZOEint||tUddd[s!!##########""!! wshcvWb<OOOPPPQQQSSSSSSUUUUUUWWWXXXYYYZZZ[[[\\\^^^^^^___```aaacccccceeeeeeggggggiiiiiikkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyyyy{{{{{{}}}}}}$$$$$$$$$$####""""""""""!!!!!!!!ba`_^^^J7 FFFE D nuzMMMNNNNNOOOOONNNNMMMLLKJJIHGeca^ZTKR !!""$,4=HW6i$g) K```AdhnuwtnRRRQ nnnVs. f#8w)!!!!!!!! tqfatU`H wvuuuOPQAACCDEYZZ\]^_LLMNOPPQiikkmmooqqqqZ[\]]^_``a}}}}~lmmmooopqrrrtt$$$$$$$$$$##""""""""""""!!!!!!!!a``_^^^]]]7 FFFE D lsx~KLLLMMMMMMMMMMMMMLLLKKJIIHGFdb`]YTKOOOx* #,4<FTrcrGMCg) Xm, o, ]!t. a"x0 a"v/ `!_!r- Yj* 6NRufto&89u)u(:9r'q'65nc_rR\ivvuuuOPQQQAABCCWWWXZZ\\^___LLMNNPPgggiikkmmooqqqqZ[[\]^__`a|||}~klmmnooppqrrrt$$$$$$$$$$####""""""""""!!!!!!!!!!a`_^]]]]]]H7 FFFE D C jqx|JKKKLLLLLLLLLLLLLKKKJJIHHGFEdb`]YTK4 d#}3 4 5p'r'#*2;EQ^!Xd( mmmMEcefgiijkllmlmlljjiMMMXdddLg( Zwz~m&k%4 4 ~3 e#b"v/ r. p, XUb' nnneeeXXXvvuuuOPQQQ@AACCWWWXZZ\\^^^^LLLNNOPggghikklmnopppYY[[\]]^_`{{{{{{}}~kkmmmnoopprrrs$$$$$$$$####""""""""!!!!!!!!!!!!`_^^]]]\\\H7 FFFE D C hpv{IJJJJKKKKKKKKKKKJJJIIHHGGFEDca_]YTK4 y0 |2 !(08BNexXRr`n, _ b"{2 xxvub"`!r. o, Vwww`& JR FvutttNPQQQ@AACCWWWXYZ\\^^^^JLLNNOPggggiikkmmooooYYZ[\]]^__{{{{|}~kklmmmooppqrrr$$$$$$######""""""!!!!!!!!!!!!!!__^]\[[[G7 6 E D C gnty}HHIIIJJJJJJJJJJJIIIHHGGFFEDCca_\XSKG rsv &.6?J~ !!####$$$$$$$$##!!!! {it. c"{1 rrpig|||Sb' ]% F]]]JJJNNNPPPQQQQQQSSSSSSCCWWWXYZ\\]^^^JLLMNOPggggiikkmmooooYYZ[[\]^^_yyy{{}}~jjkkmmmnooppqrr$$$$########""""!!!!!!!!!!!!!! _^]\\[[[GFFFEEEDDDCCCelsw|GHHHHIIIIIIIIIIHHHGGFFEEDCBb`^\XSK/ EEEmo$,4=F""####%%''''(((())))))((%%######cju/ `!`!t/ hf|x\ooojjjccc<f$f$e#e#e#e#e#d#c#c#c#x0 w0 w0 w0 w0 w0 BCCEESSS:UUUWWWXXXYYYZZZZZZ\\\]]]^^^___```aaabbbcccdddeeefffgiikkmmnoooXYY[[\]]^_yyy{{|}~ijkkkmmmnooppr##########""""!!!!!!!!!!!!!! ]]\[ZZZFEEE:99ckqvz~FGGGGHHHHHHHHHHGGGFFFEDDCBAb`^[XSK: . m, o, r- ^ `!#*19C&&&&''''**++,,**++****,,))))''&&&&##fgp, o, ZYX|||{x[XkP^OOOf$e#e#e#e#e#c#c#c"c"c"w0 w0 w0 w0 v0 MMMACCEE::;<<=ZZZLMNO P Q Q CEEeeefffggggggiiiiiikkkkkkmmmmmmooooooqqqqqqssssssuuuuuuwwwwww^yyyz{{}}~iijkkkmmnnoppp##########""""!!!!!!!!!!!!!! ]\[[ZZZYYY::99bjotx|EFFFFGGGGGGGGGGFFFEEEDCCBA@?`^[XSK% , Uj+ l+  '.6?K))**++++++**++++**++++****++))(($$"" ~de~~~WVh) e) d( OppplllgLX{e#e#e#d#d#c#c"c"c"c"c"w0 w0 v0 v0 u/ MMMACCEE:::<<=ZZZLMNO P Q Q CDEEFGGHiiiZ$ [$ [$ ]% ]% ^& _& _& a& ssstttuuuuuuwwwwwwyyyyyy{{{{{{|||}}}~~~kkklmmnnopp########""""!!!!!!!!!!!! \[[ZYYYXXXE::98`hnsx{~DEEEEFFFFFFFFFFEEEDDDCCBA@?>_][WRKA0= xz`bc#+3;F**++++++++++,,++**++++++****((&&&&%%####!! {{{`{z`wwwc( b' OM[$ X#bbb[-{2 d#d#d#d"d"c"c"c"c"b"a"v0 v0 v0 u/ u/ AACCDE:::<<=YYYLMNO O P ```CCEEFGGHiiiY$ [$ [$ \$ ]% ]& _& _& `& sssPQQRSSSUUUW}}}k* k+ l, ######""""!!!!!!!!!!!! \[[[ZZZYYYYYYXXXWWW::98fmrvy}CDDDDEEEEEEEEEEDDDDCCBBA@@?>_]ZWRK7)- < tuuu '/7@++++++++,,**++++++++++++**""!!t[ZrpmmmjjjX#EO! {{1 d"d"d"d"c"c"b"b"b"a"a"v0 v0 u/ t. t. AACCDE9::;<<YYYLLNNO P ```CCEEEGGHiiiY$ Z$ [$ [$ ]% ]& ^& _& _& sssPPQQRSSTUU|||}}}j* k* l+ l, m, n, n, o, p- p- q- r. r. ^!`!`!`"######""!!!!!![[[ZZZZZZYYYXXXWWWWWW::98BBBdkptx{BCCCDDDDDDDDDDDDCCCBBAA@??>=^\ZVRKCMMM7 \#+3;F**++++++****++++++**++++++++++))))((''''%%##nnnmkSPbbbA"  sqqqqqpLNNNNNNOOOQQQQQQSSSSSS:;<<XXXLLMNO P ```CCEEEFGGiiiY$ Y$ [$ [$ ]$ ]% ]& _& _& qqqOPQQRSSSUU||||||j* k* k+ l, l, m, n, n, p, p- p- q- ^!_!`!`!`"a"a"b"c"c"c"d"d"e#e$f$}2 ~3 r(>>==<;:998BBBcinswz}BBBBCCCCCCCCCCCCBBBAAA@??>=<^\YVRKc75 ; hj## &.5?**++**++++++**++++++++++++((''&&&&$$####"" QOaI222&OOOqqqqpoLNNNN>??AAUUUUUUVVVWWWXXXZZZZZZ\\\\\\O P ```CCCEEFGgggW# Y$ Y$ [$ [$ \$ ]% ]& _& qqqOOPQQQRSSTU{{{i* i* j* k* l+ l, m, n, n, n, p- p- q- ^!^!_!`!`"a"a"a"a"c"c"c"d"d"e#}2 }2 }2 <<;;::99r(q(>==<<;EEEDDDCCCCCCBBBahnruy{~AAAABBBBBBBBBBBBAAAA@@??>=<;][YVQKbb=;?")09++++++,,++++++++**++++**''##}```H222#GOOOOONNNNcccL MNNN>??AATTTUVWXYZ\\\H]]]^^^___```aaabbbcccdddeeeGgggW" Y$ Y$ Z$ [$ [$ ]$ ]% ^& qqqNOOPQQRSSSU{{{h* i* j* j* k* l+ l, m, n, n, o, p- p- ^ ^!^!_!`!`"a"a"a"b"c"c"c"d"d"{2 }2 }2 >>>><<<<<;;::9999q(q(==<<;;:5 C B B _glptwz}@@@AAAAAAAAAAAAAA@@@??>>=<<;][YUQK8?D#+3;++++++++**++++++**++******))))))((((''&&&&####}t111$ OOONNNNNNNccccbbbL MNNN>??@ASSSUVWXYZZZZHHJJLLLcccdeeeeeeggggggiiiiiikkkkkklll\$ ]% ]& oooNOOOQQQSSSSzzzh* i* i* j* j* k+ l, l, n, n, n, o, p- \ ^ ^ ^!_!_!`!`"a"a"a"b"c"c"d"d"{2 |2 }2 >>=<<<<<;;;:99999q(p'=<<;;::5 C B B ^ejosvy|~???@@@@@@@@@@@@@@@??>>>=<<;:\[XUQK= C G$,4++++,,**++++**++++++++((''''''%%%%######""""XQH NNNNNNNNNNbbbbbbbbbbbaaaL LNNN>>?@ASSSUUWXXZZZZHHJJJLLbbbcdefghijkkkkkkmmmmmmooooooqqqqqqrrrssssssQQQSSSzzzg* h* i* j* j* k* l+ l, l, n, n, n, p- \ \ ^ ^ ^!_!_!`"a"a"a"a"b"c"c"d"{1 {2 |2 >==<<<;;;;:999998p'<<;;;::5 C B A ]cimquxz|~>>??????@@@@@?????>>>==<<;:9\ZXUQJFJ N%,{******++++++++++****''&&&&%%######""!![TL@ccccccccccccccccccccccccbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaa`````````......///$%%%&11122 2 WXYGHHIJJLLbcdefggiikkkTUVVWXXYsssssstttuuuvvvwwwwwwxxxyyyzzzh* h* i* j* j* k+ l+ l, m, n, n, \ \ ] ^ ^ ^!_!_!`"a"a"a"a"b"c"c"z1 {1 {1 {2 ==<<<;;;;:9999987n'<<;;::95 CCCB A [bhlptvx{~~=>>>>>?????????>>>>===<;;:99[ZWTPJH MOS$y{**++********))))''##""b]WODT" T! T! S! S! S! bbbbbbDDDDDCCCCCaaaQ! Q! Q! Q Q ---&''(///000000111111122 3 3 4 ( GHIJJLaaabcceefghijjjTUVVWXXYZssstuuvwxyyyzzzzzz{{{||||||~~~~~~n, n, \ \ \ ] ^ ^ _!_!_!_"a"a"a"b"b"y1 y1 {1 {1 <<<;;;;;99999887n&n&;;::995 CCCB A afkorvxz|~<====>>>>>>>>>>>====<<;;:998[YWTPJORUXYuvwyz**))**))))))))))))))((&&&&&&&&c_XQFS! S! S! S! S! S! S! bbbbbbDCCCCCCCCC```Q Q Q Q Q ---&'''(! ! ! " 1112222223333334 ( ) ) HJJJ```abcdefghiiiSTTUVVWXXYsssstuvwwxyzz||}}}c~~~^ ^ _!_!_!_"a"a"a"b"y1 y1 y1 {1 <<;;;;;999998877n&m&;::9985 CCCB AAA_ejmqtvxz|<<<=============<<<;;;:9987[YWTPJ<PSWX[]`aceghikmnpqrstvwxy(())))))))((''''''&&&&&&%%$$""""!!hd`YRF S! S! S! S! S! S! S! R! aaaaaaCCCCCCCCBB```Q Q P P P ---&'''(! ! ! ! " " 222++333444444555555666JJ```abcdeegghhhRTTUVVWXXYrrrsttuvwxxzzz||||bcddeefgga"a"x0 y1 y1 y1 ;;;;;;99999887776m&m%::99988CCCBBBBBB7@@@^dilpruwy{|~;;<<<<<<<<<<<<<<<;;;::99877ZXVSPJ=UXZ\^`bdfgijkmnpqrstuvwx((((((((((&&&&&&%%%%%%$$$$######!!!!!!jhd`YRC S! S! S! R! R! R! R! R! R! aaaCCCCCCBBBBB___P P P P P &&'''///! ! ! ! " " **++,,,555% 666666``````bbbbbbcdefghhhRSTTUVVWXXqqqrstuvvwxxzz||||||bccdeeeggghiij;;;;;:99998887766m&k%:SSSSSSRRRQQQQQQPPP9877@@@\bgknrtvxz||~:;;;;;;<<<<<<;;;;;:::9987M6ZXVSOJ>VXZ]_`bdfhijkmnoqrrstuvw''''''''&&&&%%%%%%####""""!! ligc_XPBbbbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`````````````````````_____________________^^^^^^^^^------&''/// ! ! ! " " **+++,,555% % % % & CbbbcccdddeeefffggggggRRTTUVVWXXqqqrsttuvvxxyzzzz|||bbccdeeeggghii;;;::99998887766SSSSSSRRRQQQQQQPPP>8877@@@[afjnpsuwyz||~:::::;;;;;;;;;;::::99887765YXUSOJ>X[]`acdfhijklnopqrrstuv''''%%$$$$"""" pmkifb^WL aaaaaaaaaLLLLLKKKKKK________^^^^^^^^--........./// ! ! ! " " **+++,,555$ % % % & & CbbbT" U" U" V" ggghhhiiijjjkkkkkkUVVWpppqqqqrsttvvwxxzzzzaabccceeeegggh;::999888RRQPPPP>876@@@Y_eiloqtvwyz|}}~~999:::::::::::::99998877665YWUROI?[]`abdfgiiklmnopqrrsttu%%&&&&&&&&%%%%%%%%%%!!pnligd`[S; aaaaa`````LKKKKKKKKKK_____^^^^^^]]]]]--...$$$///000000000! 111***++,,$ $ % % % & & & bbbT" U" U" V" W" W" X$ Y$ Y$ kkklllmmmnnnnnnooopppqrrstuvvxxxzzz`aabccceeefggh::9RQPPOOO=8766X_cgjnqsuwxy||}~~~~889999999999999999888776654XWURNI?_`bdeghijklmnopqrrrsss$$$$$$$$$$$$####pomljhea]WH a```````````KKKKKKKKJJJ^^^^^^^^]]]]]]]]-----#$$$%0000111111222222*+++,$ $ % % % % & & 888S" T" U" U" V" W" X" Y$ Y$ kkkKKKKoooppppppqqqrrrsssttttttvvvxxyyy``aabccceeefggQQPOOOONNN7766W]bgjmoqsuwxzz{|}}}}~}~}}888888999999998888877766544XVTRNI@`acdfgiijklmnoopqqrrrr$$$$########ponlkiheb^XL ```````````_____KKKJJJJJJJJ^^^^^]]]]]]\\\\\-----#$$$%00001112222333333333444$ $ $ % % % & & 888/T" U" U" V" W" W" X$ iiijjjIKKKMMMNOOsssttttttvvvvvvwwwxxxxxx_`aaacccceeefgQPOONNNNNN<7AAA@@@???U[`ehnqsuuwxzz{{||}|}|||777788888888888877776655443WVTQNI@acefghiijklmmnnooppppp####oonnmlkiigda^XH K````````___________JJJJJJ^^^^^^^^^^^^^^^]]]]]]]]]]]]]]]]]]]]]\\\\\\\\\\\\\\\,----#$$$%000001122 ' ( ( 444444555555555% % & & 777//T" U" U" V" W" X" iiiIIKKKKMMMOOrrra' b( c( d( vvvxxxxxxxxxzzzzzz{{{{{{bcccdeeff PPONNMMM<AAAAAA@ ? Z`chjmoqsuvwxyz{{{{|{{{{667777777777777777666554433WUTQNI@defghiijjkklllmmmmlllkjjihgeb`[SCCCCCCCCCCCCC C C C C C C C C C C B BBBBBBBBBBBBB B B B B A ---...$$$%000112222' ' ( ( ( ) ) 555666666666777///0U" U" V" W" W" hhhIIIKKKMMMMOrrra& b' b( c( d( d( d( f( f) f) zzz{{{{{{}}}}}}}}}ee ~ONNMMMM;3 AAA@ ? Y^cfjloqrsuvwxyyzz{zz{zy666666777777776666655544332WUSQMI@efgghhiiiiiiiiiihgfeca_[TE F F F F FFFFFFFFEEEEE E E E E E E E E E E E E EEEEEEE E E D D D DDDDDD...///$/00111222' ' ( ( ( ) ) 5555 6 6 7 7778888888880U" V" V" W" hhhIIIJKKKMMMppprrr`& a& b' b( c( d( d( d( f( f) f) h) {{{|||V}}}~~~~}NNMMLLL; 3 AAA@ ? > X]aehkmoqssuvvxxyyyyzyyy555666666666666665554443321VUSPMH@eeeddcbHHHHHHHHHHH H H H H H H H H H H H H HHHHHHHHHHHHHH H G G G G G G G G G G G GGGGFFF0000011222' ' ( ( ( ( ) 5555 6 6 7 7 7 8 8 999999eeeffffffhhhHIIIKKKLMMppprrr`& a& b' b' b( d( d( d( f( f) f) g) {{{{{{VVVWXX}}NMMLLLLKKK3 2 @ ? > V\adgjlnoqstuvvwwxxyxxxx445555555555555555444433221VTRPMH@KKKKKKKKKKKKKK K K K K K K K K K K K K K KKKKKJJ J J J J J J JJJJJJJJJJIIII I I I I I I 111111222'' ' ( ( ( ) 5555 6 6 6 7 7 8 8 888, OPfffggghhhhhhjjjIJKKKLMppp_& `& `& a& b' b' b( d( d( d( f( f) f) zzzTVVVWWXXYYYZ[ ~}}|MMLLKKKKKKJJJ2 @ ? > U[_cfikmoqqstuvvwwwwwwwvw444455555555554444433322100TRPLH@MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMLLLLLLLLLLLLK K K K K 222222' ( ( ( ) 5 5 5 6 6 7 7 7 8 888, , PPPRRiiijjjjjjllllllKLMppp^& _& `& `& a' b' b( b( d( d( d( f( f) yyyTUVVVWWXXYYYZ [ [ [ p- ~}}|{MMMLLLLLLKKKKKKJJJ3 2 ? ???A SY^bdhjlmoqqsttuuvvwvvvvu33444444444444444333222110/SROLH@PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPOOOOOOOOOOOOOONNNNNNNNNNMM333( ( 4 5 5 6 6 6 7 7 888, , , OPPQRRRjjjjllllllnnnnnnnnn^& _& `& `& `& b' b' b( d( d( d( e( f) yyyTTUVVVWWXXYYYZ [ p- p- q- q- r- r. s. ~}|||zzLLLLLLKKK4 3 3 2 @@@C C C SY]adgikmooqrsttuuvuuuutt3333334444444333333222110//SQOLHASSSSSSSSSSSSSSSSSSSSSSSSSSSSSRRRRRRRRRRRRRRRRRQQQQQQQQQQQPPPPPPP4445555 5 6 6 7 7 777+ , , , OPPQRRjjjjlllnnnnoooppppppqqq`& `& b' b' b( d( d( d( wwwyyyTTTUVVVWWXXYYYY p- p- p- q- q- r- r. ~~~|||zzyc"b"4 4 3 3 2 2 E E E QW\_bfhikmooqrrsUttttttts2233333333333333222211100/.SQOLGAUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUTTTTTTTTTTTTSSSSSSSSSRRRR5556666 6 7 777+ , , , - PPQRRjjjjjllmnnppqqqrrrrrrsssttttttc( d( d( wwwwwwTTTTUVVVWWXYYYYn- p- p- p- q- q- q. ~~~|||zzyy{1 z1 b"b"4 3 3 3 2 2 GPVZ_bdgikmmopqrrssssstssr22222222333222222211000/..ᏏPNKGAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXWWWWWWWWWWWWWVVVVVVVVVVVUUUUUUUUTT777777+ + , , , OPPQhhhhhhjjkllnnoppqrrrZssstttuuuuuuvvvwwwRRTTTUUVVWWWXYYYn- n- o- p- p- q- q- ~~}||{{~3 |2 |2 {1 z1 z1 b"b"3 3 3 2 2 1 TZ]adfgikmmoppqqrrrsrrrr11122222222222221111000//.-RPNKGAZZ[[[[[[[[[[[[[[[[[[[[[[[[ZZZZZZZZZZZZZZZZZZYYYYYYYYYYYXXXXXXXXWWWWWWWW888888, , OPPQhhhhijjllmnnoppqqqYZ[[[uuuvvvwwwwwwxxxyyyTTUUVVWWWWYn+ n, n, n- o- p- p- q- ~~}|3 ~3 ~3 |2 |2 |1 z1 z1 y1 b"a"3 3 2 2 1 1 1 TX]`begikkmnoppqqqrqqqqp011111111111111111000///..-QPNKG@]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]\\\\\\\\\\\\[[[[[[[[[[ZZZZZZZZYYYYY999999OPPggghhjjkllmnnopppqqqYYZ[[[]]]wwwxxxyyyyyyzzzzzzUVVWWWWl+ n+ n, n, n- o- o- p- ~433 3 ~3 ~3 |2 |2 {2 z1 z1 y1 x0 `"3 2 2 2 1 1 0 RW[_bdfgikkmnnppoppqppop00001111111111100000///..--QOMJG@_```````````````````````````````_______________^^^^^^^^^^^]]]]]]]]\\\\\\\[[[}}ffffffghijjkllmnoooopppYYY[[[[]]]^__yyyzzzzzz|||||||||}}}WWl+ l+ m+ n, n, o, o- o- 54443 3 ~3 ~3 }2 |2 {2 {1 z1 y1 x0 w0 `"_!2 2 1 1 0 0 QWZ]`cegiiklmnnooopoopon/00000000000000000////..--,QOMJF@bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaa`````````________^^^^hhhhhhijjklmmnooooooXYYY[[[\]]]^_yyyzzzzz|||||||||}}}~~~~~~l+ l+ l+ m+ n, n, o, o- m&l&44433 ~3 ~3 }2 |2 {2 {1 z1 y1 y0 w0 w0 _"_!2 1 1 1 0 0 OUZ]`bdegikklmnnonnoonnn////00000000000/////...--,,POMJF@ddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeddddddddddddddddccccccccccbbbbbbbbaaaaaiiijjjkkkklmmnnnWWYYYY[[[\]]]^xxxyyyzzz|||}}}~~~~~~m+ m, n, o, l&l&l&433 ~3 ~2 }2 |2 {2 {2 z1 y1 y0 w0 w0 w0 u/ _!_ 1 1 1 0 EEEEEEOTX[^aceggijkllmmmnnmnmm./////////////////....--,,+PNLJF@ggggggggggggggggggggggggggggggggggggggggggggffffffffffffeeeeeeeeedddddddllllllmnnnWWWYYYZ[[[\]]^xxxxyzzz|||}}~l&l&j&j%33 3 }2 }2 }2 {2 {2 {1 y0 y0 w0 w0 w0 u0 u. _ ] 1 GGGFFFFFFEEEDDDNSW[^`degiijkllmmlmmlll....////////////....---,,++ONLIF@iiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjiiiiiiiiiiiiiiiiihhhhhhhhhhgggggggggmmmnnnWWXYYYZ[[[\]]wwwxxxzzz{||}}~l&k&j%j$3 3 }2 }2 }2 {2 {2 {1 y0 y0 x0 w0 w0 v0 u. t. GGGFFFFFFE EEEDDD5 LRVZ]`acefgiijjkkkllklkkj..................---,,,++OMKIE@kkkkkkkkkllllllllllllllllllllllllllllllllllllllkkkkkkkkkkkkkjjjjjjjjjjiiooooooqqqYYYZ[[\\vvvvvvwxxxzzz{||}}k&j$j$i$3 }2 }2 }2 {2 {2 z1 y0 y0 x0 w0 w0 v0 u/ t. FFFF E E D DDD4 KPUY[^`bdegghijjkkkkkkkjj---...........-----,,,++*OMKIE@mmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnmmmmmmmmmmmllllqqqqqqYZ[[\uuuvvvvwxxxzz{{|}}}~j%j$i$i$}2 }2 }2 {2 {2 z2 z0 y0 x0 x0 w0 v0 E E D D CCC4 PUX[]`aceegghhiijjjkjjii------------------,,,,++**NMKHE@ooooooooppppppppppppppppppqqqqqqqqqqqqqqqqqqqqpppppppppppppppppoooooooorrrsss[[tttvvvvvxxxyzz{{{}}}~i$i$i$h$g$|2 |2 {2 z2 z0 y0 x0 x0 E D D C CCC4 OSVY\^`bcefghhhiiiiiiiih,,-------------,,,,+++**)NLJHE@ppqqqqqqqqqqrrrrrrrrrrrrrrssssssssssssssssssssssssssssssssrrrrrrrrrrrrrrqtttttttttvvvwxxyyz{{{}}}~~~~i$i$i$g$g$|2 {2 z2 z0 y0 D D C C BBBBBBMRVY[^`acdeffhhhhhhihhgh,,,,,,,-----,,,,,,,+++***)MLJHD@4jkkkkkllqqqrrrrrrrssssssssstttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuttttttvvvvvvvwxxyyz{{{|}}~~~~~~i$h$g$g$g${2 z2 z1 D D C C BBBBBB3 LQUX[\^`bcdeffggghhghggf+,,,,,,,,,,,,,,,++++***))MLJGD@5llmmmmmnnnnnooooopppppqqqqqqrrrrrrssssssttttttttuuuuuuuuvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww!!!!!!!!!!!! vvvwwwxxxxyyz{{{|}}}}~~~h$g$g$g$f$oonD C C B B AAA2 LPTWY\^`abcddffggfgggfgf+++++,,,,,,,,,++++++***))(MKIGD?5nnnooooopppppqqqqqrrrrrssssssttttttuuuuuuvvvvvvvwwwwwwwwwxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! xxxxxxyyyyy{{{||||}}}g$g$f$f#ponnmC B B A AAA2 JOSVY[\^`abcddeeffffffee++++++++++++++++++****))((LKIGD?6pppppqqqqrrrrrssssstttttuuuuuuvvvvvvwwwwwwxxxxxxxyyyyyyyyyzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{################""""""""""""""""""!!!!!!!! yyyyyy{{{{{|||ag$qpponnmlB B A A @@@aINRVXZ\^_`bbdddeeeeeeeed***+++++++++++++*****)))((LKIGD?6qqrrrrssssstttttuuuuuvvvvvwwwwwxxxxxxyyyyyyyzzzzzzz{{{{{{{{||||||||||||}}}}}}}}}}}}}}$$$$$$$$$$$$$$$$$$$$$$$$##########""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!zzz{{{{{{arrqpponnnll~B AAAAAAbbcccdGMQTWY[\^``bbcccdddeddcd*******************))))(('LJHFC?7ssstttttuuuuuvvvvwwwwwxxxxxyyyyyyzzzzzz{{{{{{|||||||''''''''&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! {{{rrrqpponnnlllj~~~~AAAcdddeeefffLPSVYZ\^^``bbcccddccdcb))***************)))))((''&JHFC?7tuuuuvvvvvwwwwxxxxxyyyyyzzzzz{{{{{{||||||}}}}}}~~''''''''''''((((((&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%##############""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!trrrppppnnnllljj~~~effggghhhiiKPSVWY[\^^``abccbcccbcb)))))*********))))))((((''&IHFC?7vvvwwwwxxxxxyyyyzzzzz{{{{{|||||}}}}}}~~~~~~))))((((((((((((((((((((&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%##################""""""""""""""""""""""""!!!!!!rrrppponnnlllkjj hhiiijjjkkkJNQTWYZ\]^_`aaabbbbbbaa)))))))))))))))))))((((''&&IGEC>7wxxxxyyyyyzzzz{{{{{||||}}}}}}~~~~~))))))))))))))))))((((((((((((((''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&&&&&&&######################"""""""""""""""""""""""""""" rrqpponnnmllkjji !!!!kklllmmmnnIMQTVWY[\^^_`aaabaaaaa``(())))))))))))))(((((''&&&IGEB>7yyyzzzzz{{{{||||}}}}}~~~~~))))))))))))))))))))))))))))))****))))))((''''''''''''''''''''''''''''''&&&&&&&&&&&&&&&&&&$$""""""""""!!!!!!!!!!!!!!!!!!!! qqpponnmmllkjjih !!!!!!!!!!!!!!!!!!mnnnooopppHMPSUWYZ\\^^__```aa````_(((((())))))(((((((''''&&%HGEB>7zz{{{{||||}}}}~~~~~************))******************************))((((&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$""""""""""""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! qppoonmmlkkkjii !!!!!!!!!!!!!!!!""""""""""""####ppqqqrrrrGKORTVWY[\]^^__```_``__^((((((((((((((((((''''&&%%HFDB>7||||}}}}~~~~~**++++++++++++****))))))))))))))))))))**********))))))))))))))))''''''''''''''''''&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%$$$$######""""""""!!!!!!!!!!!!!!!!!!!!!!!!pooonmmlkkkji !!!!!!!!!!!!!!!!""""""""""""""################rssstttuFKNQTVWYZ[\]]^________^^''(((((((((((((''''''&&&%%HFDB>8}}}~~~~,,,,++++++++++++++******************************))))))))))))))''''''''''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&################""""""!!!!!!!!!!!!ooonmmmkkki !!!!!!!!!!!!!!""""""""""""""######################uuuvvvvwDJMPRTWWJJ[[\]]^^^^_^^]^]'''''''((((''''''''&&&&%%$GFDA>8~~,,,,,,,,,,,,,,,,++++++++++++++******************************))))))))))''''''''''''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&##################""""""""""oommmmkk!!!!!!!!!!!!""""""""""""""##########################$$%%%%%%wwxxxxyDHLORTVWYY[[\]]^^]]^^]]\'&%%%$GFDA=8,,,,,,,,,,,,,,,,,,,,++++++++++++++++++**********************++++++********((((((((((((((((((((''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&####################""ommmmk%%%%%%%%%%%%%%%%%%%%%%%%%%yyzzzz{HKNQSUWWYY[[\\\]]]**************GECA=8--,,,,,,,,,,,,,,,,,,,,,,----++++++++,,,,,,,,,,,,,,++++++++++++++++++++++++++++******((((((((((((((((((((((((((((''''''''''''''''''''''''&&&&$$$$$$$$##########nmml%%%%%%%%%%%%%%%%%%%%%%%%%%''''''''''{{||||GKNQRTVWXYZ[[++++++++++++++++++++,,,,,,,,FECA=8----------------------------------,,,,,,,,,,,,,,,,,,,,,,,,++++++++++++++++++++++++++++++**((((((((((((((((((((((((((((((''''''''''''''''''''''''''$$$$$$$$mm%%%%%%%%%%%%%%%%%%%%%%''''''''''''''''''''''}}}~~~EJMORTUVddY++++++++++++++++++,,,,,,,,,,,,,,,,,,,,FEC@=8------------................--------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,++++++++++++++++++++++++++++((((((((((((((((((((((((((((((((''''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%''''''''''''''''''''''''''''''''''''EILOQRT++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,FDB@=8------................................--------,,,,,,,,,,,,,,,,,,,,,,,,,,,,--,,,,,,,,,,,,,,,,,,,,,,,,,,,,++++++++++++++++++****************************''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%$$$$$$$$%%%%%%%%%%%%''''''''''''''''''''''''''''''''''''(())))))))DHKNP++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------EDB@=8..//............................................--..----------,,,,++++++++++++++++++++++++++++**************************''''''''''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%%%%%%%%&&''''''''''''''''''''''''''''''''''(())))))))))))))BGK,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------------------EDB@<7////////////////................................................----------................,,,,,,++++++++++++++++++++++++++++++************************((((((((((((''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%''''''''''''''''''''''''''''''''''(((())))))))))))))))))BF,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,----------------------------ECB?<7//////............................////////........................,,,,,,++++++++++++++++++++++++++++++************************((((((((((((''''''''''''''''''&&&&&&&&&&&&&&&&&&''''''''''''''''''''''''''''''''''(())))))))))))))))))))))A,,,,,,....////DCA?<7//////////////............//////////////////////......................--------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,++++++++++++++++++++++++((((((((((((((''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''))))))))))))))))))**++++++++++++++++++++++,,,,,,,,//////////////DCA?<////////////////////0000//////////////////////////////////....................----------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,++++++++++++++++++++++++((((((((((((((''''''''''''''''''''''%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&''))))))**++++++++++++++++++++++++++++++++,,,,////////////////////DBA?//////////////////////0000000000//////////////////////////////////..........////////----------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,++++++++++++++++++++++))((((((((((((''''''''''''''''''%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&''''''))****++++++++++++++++++++++++++++++++++,,,,,,,,,,|--////////////////////////00CB@000000////////////////////000000000000//////////////////////////////0000//////////////////------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,++++++++++++++++++++++))))))))))))))))((''''''''''%%%%%%%%%%%%%%%%%%&&&&&&&&''''''''**++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,--//////////////////000000000000C0000000000000000//////////000000000000000000////////////////00000000000000000000////////////////............--------------------------------,,,,,,,,,,,,,,,,,,,,++))))))))))))))))((((((((%%%%%%%%%%%%&&&&&&&&''''''''''++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,------------////////////00000000000000000000000000000000000000000000000000000000000000000000//00000000000000000000000000000000////////////////............--------------------------------,,,,,,,,,,,,,,,,,,,,,,))))%%%%&&&&&&&&&&&&''''''''''++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,----------------..////////000000000000000000000000000000000000000011111111110000000000000011111111110000000000000000000000000000000000////////////////..............--------------------------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,++++++++++++++++++++++++++++++++++++))))))))))))))))))))&&&&&&&&&&''''''''''''''++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,----------------......//0000000000000000000000000000000000000011111100111111000000//////0000000000111100000000000000000000000000000000000000//////////000000......,,,,,,,,,,,,++++++++++++++++++++++++++++++++++++****************))))&&&&&&''''''''''''''++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,--------------..........0000000000000000000000000000000000//1111110000000000000000000000////000000000000000000//////0000////000000000000000011110000000000000000000000000000////////////////////////////////..................,,,,,,,,,,,,++++++++++++++++++++++++++++++++++++********************''''''''''''''''++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,------------..............0000000000000000000000000000//000000000000000000000000000000000000//000000000000000000000000////////////////////////////////..................,,,,,,,,,,,,++++++++++++++++++++++++++++++++++++********************''''''''''''++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,----------..................0000000000000000////0000//0000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111100000000000000000000000000000000000000////////////////////////////0000////////////////////----------,,++++++++++++++++++++++++++++++++++++******************''''''''''++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,--------........................00000000000000000000000000000000000000111100111111110000000000000000000000000000000000000000//////0000000000000000000000000000//////////////////--------------,,,,,,,,,,,,,,,,,,++++++++++++++++++**************''''''++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,------................................//////////////////////////////////////000000000000000000000000////000000////0000//////////////00000000000011000000//00//////0000////00//////000011111111110000000000000000000000000000000000//////////////////------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,++**********((++++,,,,,,,,,,........//////////////////////////////////////00000000000000000000000000////////////////////////0000000000000000000000000000////////////////////000000000000111111110000000000000000000000000000000000////////////////////------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,++++++))))))))))))))**********************++++++++++++++++....//////////////////////////////////////000000000000000000000000000000////////////////////0000000000000000000000000000000000////////////////0000000000000000000000110000000000000000000000000000000000////////////////////------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,++(((((((((((())))))))))))))))**************************++++++++++++++,,////////////////////////////////////////0000000000000000000000000000//////////////////0000000000000000000000000000000000000000//////////00000000000000000000000000000000//////0000000000000000000000000000////////////////////------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,(((((((())))))))))))))****************************++++++++++++,,,,,,////////////////////////////////////000000000000000000000000000000//////////////////00000000000000000000000000000000000000000000////00000000000000000000000000000000000000////////////0000000000000000000000////////////////000000------------,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,(((())))))))))))********************************++++++++,,,,,,,,//////////////////////////////////0000000000000000000000000000//////////0000//00000000000000000000000000000000000000000000000011000000000000000000000000000000000000000000////////////////////00000011111111110000000000000000000000............,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,))))))))))**********************************++++++++,,,,,,,,,,//////////////////////////////000000000000000000000000000000//////////000000000000000000000000000000000000000000000000000011111111000000000000000000000000000000000000000000//////////000000000000000000111111110000000000000000000000..........------------------,,,,,,,,,,))))**************************************++++,,,,,,,,,,,,,,//////////////////////////000000000000000000000000000000//////////000000000000000000000000000000000000000000000000000011111111111100000000000000000000000000//0000000000001111000000000000000000000000000000000011000000000000000000000000..........------------------------****************************************,,,,,,,,,,,,,,,,////////////////////////000000000000000000000000000000//////////0000000000000000000000000000000000//00000000//00111100000011110000000000////00000000//000000001111001111111100000000000000000000000000000000000011////00000000000000000000............--------------------************************************++,,,,,,,,,,,,,,,,////////////////////000000000000000000000000000000//////////00000000000000000000000000//00000000////0000//////001100000000110000000000////////00////////0000////00000000001111111100000000000000000000000000000000000000////00000000000000000000........................******************************++++++,,,,,,,,,,,,,,,,//////////////////000000000000000000000000000000//////////000000000000000000000000//////00////////////////000000000000000000000000////////////////////////////0000000000000000001100000000000000000000000000000000000000////////////00000000000000000000////////////////////////////////////////..............................************************++++++++,,,,,,,,,,,,,,,,////////////////000000000000000000000000000000//////////00000000000000000000000000//////////////////////0000000000000000000000000000//////////////////////000000000000000000000000//////0000000000////////////////////////////////////////................................********************++++++++++++,,,,,,,,,,,,,,//////////////000000000000000000000000000000//////////000000000000000000000000000000//////////////////00000000000000000000000000000000//////////////////00000000000000001111111111000000000000000000000000000000000000000000000000000000000000000000000000//..................................**************++++++++++++++++,,,,,,,,,,,,,,////////////00000000000000000000000000000000////////00000000000000000000000000000000//////////////0000000000000000000000000000000000////////////////0000000000000000000000//////////////////////////00001100111111111100000000000000000000000000111111110000000000000000000000000000000000000000//////////////////////////////....**********++++++++++++++++++,,,,,,,,,,,,////////00000000000000000000000000000000000000//000000000000000000000000000000000000//////////000000000000000000////////////////////////000000000000111100000000000000000000000000000000111111110000000000000000000000000000000000000000////////////////////////////////////****++++++++++++++++++++++,,,,,,,,,,,,////0000000000000000000000000000000000000000//00000000000000000000000000000000000000111111111111110000//00//////////////////000000000000//////////////////00000000000000000000000000000000//000000000000000000000000000011000000000000000000000000000000000000000000////////////////////////////////////++++++++++++++++++++++++,,,,,,,,,,,,//0000000000000000000000000000000000000000//0000000000000000000000000000000000000000000000000000000000000000000000000000111111111111110000//////////////////////////0000000000//////////////000000000000000000000000000000////////000000000000000000000000001111000000000000000000000000000000000000000000//////////////////////////////////////++++++++++++++++++++++++,,,,,,,,,,0000000000000000000000000000000000000000000000000000000000000000111111111111110000////////////////////////////0000000000////////////0000000000000000000000000000000000////////00//////000000000000000000000000////00000000000000000000000000000000000000//////////////////////////////////////++++++++++++++++++++++,,,,,,,,........////////////////////00000000000000000000000000000000000000001111111111110000////00//////////////////////000000000000////////00000000000000000000000000000000000000//////////////////0000////0000000000000000////00000000000000000000000000000000000000////////////////////////////////////++++++++++++++++++++++,,,,,,--------------------------------------............................//////////////000000000000000000000000000000000000001111111111111100////00////////////////////////00000000000000////000000000000000000000000000000000000000000//////////////////////////00000011110000////////////000000000000000000000000000000//////////////////////////////////----------------------------------------..................................////////0000000000000000000000000000000000000011111111111111//////00////////////////////////00000000000000//0000000000000000000000000000000000000000000000//////////////////////////11000000111100//////////////000000000000000000000000000000////////////////////////////////----------------------------------------........................................//0000000000000000000000000000000000000000111111111111////000000//////////////////////000000000000000011000000000000000000000000000000000000000000000000////////////////////0000000000000011111100//////////////////////0000000000000000000000//////////////////////////////--------------------------------------..........................................//////00000000000000000000000000000000001111111111000000000000////////////////////////000000000000000000000000000000000000000000000000000000000000000000////////////////00000000000000000000000000//////////////////////0000000000000000000000////////////////////////////------------------------------------............................................////////////000000000000000000000000111111000000000000000000//////////////////////0000000000000000000000000000000000000000000000000000000000000000000000////////////00000000000000000000000000000000//////////////////////0000000000000000000000//////////////////////////,,,,--------------------------------............................................//////////////0000000000000000000000001100000000000000000000////////////////////////000000000000000000000000000000000000000000000000000000000000000000000000////////000000000000000000000000000000000000000000000000000000000000000000001111111111111100000000000000000000////,,,,,,----------------------------............................................////////////////0000000000000000////0000000000000000000000////////////////////////000000000000000000000000000000000000000000000000000000000000000000000000//////000000000000000000000000000000000000000000//0000000000000000000000000000111111111111110000000000000000000000,,,,,,,,------------------------............................................//////////////////000000////////////0000000000000000000000//////0000//////////////00000000000000000000000000000000000000000000000000000000000000000000000000//0000000000000000000000000000000000000000000000////00000000000000000000000000001111111111111100000000000000000000,,,,,,,,,,--------------------............................................////////////////////////////////////000000000000000000000000//000000//////////////0000000000000000000000000000000000000000000000000000000000000000000000000011000000000000000000000000000000000000000000000000//////0000000000000000000000000000000000111111000000000000000000,,,,,,,,,,,,,,----------------............................................//////////////////////////////////////00000000000000000000000000000000//////////////000000000000000000000000000000000000000000000000000000000000000000000000111111000000000000000000000000000000000000000000000000////////00000000000000000000000000000000001111110000000000000000,,,,,,,,,,,,,,,,------------............................................//////////////////////////////////////00000000000000000000000000000000////////////////000000000000000000000000000000000000000000000000000000000000000000000011111100000000000000000000000000000000000000000000000000//////////000000000000000000000000000000000011111100000000000000,,,,,,,,,,,,,,,,,,--------..............................................////////////////////////////////////00000000000000000000000000000000////////00////0000000000000000000000000000000000000000000000000000000000000000000000111111111100000000000000000000000000000000000000000000000000//////////000000000000000000000000000000000000//////00000000,,,,,,,,,,,,,,,,,,,,--..............................................////////////////////////////////////00000000000000000000000000000000////0000//////0000000000000000000000000000000000000000000000000000000000000000000011111111110000000000000000000000000000000000000000000000000000////////////000000000000000000000000000000000000//////000000,,,,,,,,,,,,,,,,,,--............................................////////////////////////////////////00000000000000000000000000000000//00000000//////000000000000000000000000000000000000000000000000000000000000000000001111111111110000000000000000000000000000000000000000000000000000//////////////0000000000000000,,,,,,,,,,,,,,--------......................................////////////////////////////////////000000000000000000000000000000000000000000//////0000000000000000000000000000000000000000000000//0000////0000000011111111111111000000000000000000000000000000000000000000000000000000////////////////0000000000000000//////0000000000,,,,,,,,,,------------..................................////////////////////////////////////000000000000000000000000000000000000000000//////0000000000000000000000000000000000000000000000////0000////000000001100111111111111000000000000000000000000000000000000000000000000000000////////////000000000000111100000000000000000000000000000000000000000000000000////////////////00,,,,,,------------------..............................//////////////////////////////////000000000000000000000000000000000000000000//////11110000000000000000000000000000000000000000//////0000//000000001100111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000110000////00000000000000000000000000000000000000000000////////////////00,,,,----------------------........................//////////////////////////////////////000000000000000000000000000000000000000000//0000111100000000000000000000000000000000000000////////000000000000000000111111111100110000000000000000000000000000000000000011////////00000000000000000000000000000000000000000000////////////////000000----------------------------..................////////////////////////////////////////000000000000000000000000000000000000000000000011110000000000000000000000000000000000////////////0000000000//////0000000000000000000000000000////////0000000000000000000000000000000000000000000000////////////////000000------------------------------..............////////////////////////////////////////00000000000000000000000000000000000000000000110000000000000000000000000000000000//////////////0000000000111111000000000000//////000000//////00000000//////00000000000000000000000000000000//////0000000000000000000000000000000000000000000000////////////////////////----------------------------------......//////////////////////////////////////////0000000000000000000000000000000000000000001111000000111100000000000000000000//////////////////000000000000000000000000000000000000000000000011111111111111000000000000//////000000//////00000000//////00000000000000000000000000000000//////000000//////000000000000000000000000000000000000//////////////////////////------------------------------------////////////////////////////////////////////0000000000000000000000000000000000000000111100111111110000000000000000000000000000000000000000000000000000000000111111111111000000000000//////000000//////00000000//////000000000000000000000000000000000000//////////////////000000000000000000000000000000000000////////////////////////////----------------------------------......//////////////////////////////////////000000000000000000000000000000000000000000000000000000000000000000111111111111110000000000////0000000000////00000000//////000000000000000000000000000000000000//////////////////00000000000000000000000000000000000000////////////////////////////------------------------------............//////////////////////////////////0000001111110000000000000000000000000000000000000000000011111111111111000000000000//0000000000////00000000//////00000011000000110000000000000000000000//////////////////00000000000000000000000000000000000000////////////////////////////////--------------------------......................//////////////////////////0011110000000000000000000000000000000000000000000011110000000000000000000000000000000000000000000011111111111100000000000000//0000000000////00000000//////00000011000000111100000000000000000000////////////////////000000////00000000000000000000000000////////////////////00000000000000------------------------............................////////////////////0000000000000000000000000000000000000000001111110000000000000000000000000000000000000000000011110000000000000000000000000000000000000000000011111111110000000000000000000000000000////00000000//////0000001100000011111111000000000000000000////////////////////00////////0000000000000000000000000000////////00000000000000000000000000--------------------................00000000000000000000000000000000000000000000001111110000000000000000000000000000000000000000000011110000000011000000000000000000000000000000000011111111110000000000000000000000000000////0000000000////0000001100000011111111000000000000000000//////////////////////////////000000000000000000000000000000000000000000000000000000000000000000{************************************************** Walls with sphere - demonstrates pattern mapping to sphere surfaces. Rendered with QRT ray tracer on Amiga 1000 - Steve Koren 8 Jun 88 **************************************************} FILE_NAME = Wall_Sphere.RAW { ********* Some pattern definitions ********** } PATTERN ( x_size = 16, { ** A stripe pattern ** } y_size = 8, { ** for the sphere ** } name = MIRROR_STRIPE, RECTANGLE ( start_x = 0, start_y = 0, end_x = 16, end_y = 4, diff = (.1, .1, .1), mirror = (.8, .8, .8), ) ) PATTERN ( x_size = 60, { ** Checkered pattern ** } y_size = 60, name = CHECK, RECTANGLE ( start_x = 0, start_y = 0, end_x = 30, end_y = 30, diff = (.1,1.0,.1), ) RECTANGLE ( start_x = 30, start_y = 30, end_x = 60, end_y = 60, diff = (.1,1.0,.1), ) ) PATTERN ( x_size = 40, { ** Checkered pattern ** } y_size = 40, name = CHECK_BLUE, RECTANGLE ( start_x = 0, start_y = 0, end_x = 20, end_y = 20, diff = (.7,.2,.7) amb = (.32, .32, .32), reflect = .55 sreflect= 20 ) RECTANGLE ( start_x = 20, start_y = 20, end_x = 40, end_y = 40, diff = (.7,.5,.7), amb = (.32, .32, .32), reflect = .55 sreflect= 20 ) ) PATTERN ( x_size = 80, { ** brick pattern ** } y_size = 50, name = BRICK, RECTANGLE ( { 1st half brick 1 } start_x = 0, start_y = 2, end_x = 18, end_y = 23, diff = (1.00, .20, .20); ) RECTANGLE ( { 2nd hald brick 1 } start_x = 62, start_y = 2, end_x = 80, end_y = 23, diff = (1.00, .20, .20); ) RECTANGLE ( { brick 2 } start_x = 22, start_y = 2, end_x = 58, end_y = 23, diff = (.80, .20, .20); ) RECTANGLE ( { brick 3 } start_x = 2, start_y = 27, end_x = 38, end_y = 48, diff = (.85, .35, .10); ) RECTANGLE ( { brick 4 } start_x = 42, start_y = 27, end_x = 78, end_y = 48, diff = (.70, .25, .20); ) ) { ********************* OBJECTS ********************* } { ** ground ** } PARALLELOGRAM ( loc = ( -10000, 0, -10000), v1 = (20000, 0, 0), v2 = ( 0, 0, 20000), diff = ( .8, .8, 0), pattern = CHECK xmult = 2 ymult = 2 ) BEGIN_BBOX BEGIN_BBOX SPHERE ( loc = (200, 50, -80), radius = 35, diff = (.7, .3, .5), pattern = MIRROR_STRIPE, xmult = 1.5, ymult = 1.5 ) QUADRATIC ( loc = (200, 0, -80), a = 1, b = 0, c = 1, d = 150, xmin = -13, xmax = 13, ymin = 0, ymax = 50, zmin = -13, zmax = 13, diff = (.1, .1, .1), mirror = (.8, .8, .8) ) END_BBOX BEGIN_BBOX SPHERE ( loc = (200, 90, 80), radius = 35, diff = (.3, .3, .8), amb = (.32, .32, .32), reflect = .60 sreflect = 20 pattern = CHECK_BLUE, xmult = 1.0, ymult = 1.0 ) QUADRATIC ( loc = (200, 0, 80), a = 1, b = 0, c = 1, d = 150, xmin = -13, xmax = 13, ymin = 0, ymax = 90, zmin = -13, zmax = 13, diff = (.1, .1, .1), mirror = (.8, .8, .8) ) END_BBOX END_BBOX BEGIN_BBOX { ** a small brick wall ** } PARALLELOGRAM ( loc = (150, 00, -15), v1 = (0, 0, 30), v2 = (0, 100, 0) diff = (1, 1, 1), pattern = BRICK xmult = .5, ymult = .5 ) PARALLELOGRAM ( loc = (150, 00, -15), v1 = (100, 0, 0), v2 = (0, 100, 0) diff = (1, 1, 1), pattern = BRICK xmult = .5, ymult = .5 ) PARALLELOGRAM ( loc = (150, 00, 15), v1 = (100, 0, 0), v2 = (0, 100, 0) diff = (1, 1, 1), pattern = BRICK xmult = .5, ymult = .5 ) END_BBOX { ** An observer ** } OBSERVER ( loc = (-20 , 70, -40), lookat = (200, 50, 0) ) { ** A lamp ** } LAMP ( loc = (120, 120, -50), radius = 5, dist = 80 ) LAMP ( loc = (120, 150, 80), radius = 5, dist = 70 ) SKY ( horiz = (.2, .2, .55), zenith = (.1, .1, .25), dither = 4 ) FOC_LENGTH = 80 320 200 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0000//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////000000000000000000000000000000//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0000000000000000000000000000000000000000000000000000000000000000000000000000//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000oy~Čȏʐ̑ΓϔДДϔΓ̒ʐTTRRNNGG0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000qyƍːϓԗؙۛݞ^^^^\\ZZWWSSLL0000000000000000000000000000000000000000000000000000000000000011111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000lv}ƍ̐ѕ՘ڜޞ^^^^^^____[[XXRRJJ00000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AAv}ƍˑѕ֙ۜߟ^^__^^__^^^^^^]]XXTTKK11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000>>ryÊɏϓԗٚޞ^^__^^________FE____^^^^__^^[[WWRR111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055(DDIIMMPPSSVVϔ՘ڛߞ^^____^^^^__^^^^^^______^^__^^^^^^EFFEFDB@__\\XXSS11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111#(DDHHMMOORRVVXXZZ]]__^^^^^^^^__^^^^^^^^__________^^^^^^^^__^^______FFEFFECC@>;XXSS111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111|!|'CCHHKKNNRRTTWWYY[[^^______^^^^^^__^^______^^^^______^^^^__^^^^____________^^____EFFEFFEECA?<:8QQ1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111pp%AAFFIIMMPPSSUUXXZZ\\^^^^__^^^^____^^^^^^^^^^^^^^^^^^____^^______^^^^________________^^__^^__^^FFFFEFEFDB@=;96LL1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111#(CCGGKKNNQQSSVVXX[[]]____^^^^__^^__D^^__^^^^__^^__^^__^^^^__^^__^^^^__``____``````______``____^^^^^^^^^^FFFFEFEFDB@=<:7Ȼ31111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111rr%(DDHHLLOOQQTTVVYY[[]]______^^^^CDDEF____^^______^^__^^^^__^^^^__````aaaabbbbccccccccbbaaaa````____^^__EFFFFFFEEDB@=<:7ɽ4.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111|"|&AAEEIILLOORRTTWWXX[[]]__^^____BCCDEFFE__________^^^^^^________aabbccddggiikkllnnnnmmlljjhhffddccaa``____FFFEEFEFDCA?=;97Ƚ40111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"'AAEEHHLLOOQQTTVVYY[[\\^^^^@ABBCDEFFFF^^__^^__^^__^^^^____``ccddhhkkoorrww{{~~}}yyuuoollggccbb``FEFFFFEGECA@><:96Ƽ40111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111ss#'AAEEHHKKNNQQTTVVXXZZ\\]]=>?@ABCDEEEEFE^^____^^__^^^^``bbccggkkppvv}}}}uunnhhddaaGGFEFFEEDBA?=;:86ù3/11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111w w#&AAEEHHKKNNPPSSUUXXYY[[<=>?@ABCDDEFFEFF^^__^^^^^^__``aaddggllss{{uullggKHFFEEGEDBA@>;:87ǿ42GG111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111y!y$&@@DDGGJJMMPPRRTTVVYY:<=>?@AABCDEFFEFEEF^^__^^____aaccggkkss{{yyooggKHGFFFEDCA?><:975º30EE111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111afedcba`__^]\[ZYYXWVUUUTSRRQQPOONMݘ5)5)5(5)111111111111111111111111111111111111111111111111y!y$&??CCFFJJLLNNQQTTUUXX:;<=>??@ABCCDEFEFFEE__^^____``bbeejjooxx{{ppPKHGEEECB@@><:976ü42/AA11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111Y`edcba`_^^]\[ZYXXXWVUTSSSRQPPPONNMۘ5)4)4(4(4)4(3(3(2'2'3'2&2'1'1&1&1111111111111111111111111111111111111111111111y!y$&>>AAEEHHKKMMPPRRTT78:;<=>?@AABCDEDEFEFFFE____````ccggllrr||xxXOJHFDDCAA?=;:876ý420EE==11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111QX_ddba`_^]\\[ZZYXWWVUTTSRRQQPONONMMڗ5)4(4(3(4'3(3(3'2'2'1&2&2&1'1&1&11111111111111111111111111111111111111111111v v$&>>@@DDFFIILLNNQQRR789:;<=>?@@ABBCDEFFGEFFF^^__````ccffllss~~rrTMIEDCBA@><<:875½420.BB111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111ĵJPW^cbba`_^]\[[ZYXWVUUUTSRQQQPOONMMMLؕ4)4(3(3(3'3'3(2'2'2'1&1&2&1%1&0&111111111111111111111111111111111111111111//}#&'??BBEEHHKKMMOO46789:<<=>>?@ACDDEGHHIGGGF______``ccffkkss||wwVNJECB@@?==;9765420.DD>>11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111³IOV\ba``_^]\[ZYYXWVVUTTSRRQPOPONMMLLLו4(4(3(3'2'2'3&2'2'1&1&1&0&1%1%0&111111111111111111111111111111111111111111#::==jmCCGGIIKKMMл456689:;<=>?@ABEGIIJKKKJIHI````````bbeejjppxxxxXOJFCA@?>=<:875þ4320.DD@@771111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111p'{+!HOU[a`_^^]\[ZYXWWWVUTSRSRQPPOONNMLLKKՔ4(3(3'3'2'2'1&2&2'1&1&0&0%0%0%0%1111111111111111111111111111111111111111|"|99<@BEGJMPQRQRPOLLKI``__aabbddhhmmss||mmffbb``____^^__<<:98654210.,AA;;11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111e$o'z+!HNTZ`_^]]\[ZYXWWWVUTSSRQQQPONNNMMLKKJԒ4(3(3'2'2'2&1&1&1%1&1&0&0%0%/%0$111111111111111111111111111111111111111188<<>>knpsx/123567889:;=@BFKPUWZ\][[YWTQOLbbbbbbaabbkkffaa``____^^^^\\[[YYWWUUSSPPOOҵ21/.,AA<<441111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111yyye#n'y*!GMSY_^]\[[ZYXXWVUUTTSRQPPPOONMLMLKKJIґ2(3'2'2'2&1&1&1&0%1%0&0%0%/%/%/$1111111111111111111111111111111111111166::==jmpruHHJJdz12455678:<>knqDDEEFFGGJJKKʵ1234668>c]vTv1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111MMM:?T" \% d( b"k&u) DJOU[ZYXWWVUTTTSRQQPOOONMMLKLKJJIIHHHˌ1&1&0%0%0&0%0%0%/%/$/$.$.#/#.$.$1111111111111111111111111111111111|Y|99<S! Z$ c( `"i%r(BGMRlj0%0%0%/$/$/$.$.$.$.$.#.#-#-#-","11111111111111111111111111111111zWz^;;gkAACCDDEEFFFFwxy{KKLLMMOORRWW__kkwwzzssޞݞ۝ܜܜܝ۝ܜۜۜۜڜڜؚٜٛך֚՘ӗҖѕϔ͒ːʐȎƍSSRRQQPPNNMMMMLLJJIIGGEECCAA@@??>>==;;::88~Z~xUxoOo1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111117;LLL9>S! Z$ b' ~~~`!h$q(AG11111111111111111111111111111111|X|_<>==<<;;998866zWztStlMl1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111117;LLL9>R! Y$ a' ~~~_!g$p'1111111111111111111111111111111155_<R! Y$ a' }}}^!f$++..//....------,,,,++,,,,++++++****ت((((''''((''''''&&&&&&&&%%%%%%$$$$%%%%$$$$$$########""""""##""""111111111111111111111111111111//~55_<<>>??moprstuvwwHHHHIIŰ026>@@BB?IUev{rg[QHbb\\YYWWUUUUUUTTTTUUTTTTSSTTSSSSRRSSRRRRQQQQPPPPPPOONNMMMMLLLLKKJJǭ/.--,,+))('&%$$##|"|y!yv vrr..},,w))n1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111116:KKK8=Q X# qqq{{{ ""%%((**--..----,,,,,,++++++**++******))))ӧ''''''&&&&&&''&&&&&&%%%%%%$$$$$$$$####$$$$########""""""""!!!!""111111111111111111111111111111@8(88(8@8(8@@@@@@@@@@@88888899<<>>@@BBDDFFHHJJLLNNPPRR{tk_VMF@ZZXXUUSSSSRRRRSSRRRRQQRRRRQQQQQQQQPPOOOOOOOONNMMMMLLLLKKKKJJIIHHGG--,,+))(''%%##"|"|z!zx xu uqqmm--x**r''i1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111116:KKK8=___gggpppzzz{ ""%%''**,,----,,,,,,++++******))****))))))Ҥ''''&&&&&&&&%%&&&&%%%%%%$$$$$$$$########""######""""""""!!!!!!!!1111111111111111111111111111118(88(8@@8(88(88(88(8@@@@@@@@8888888899;;==??AACCEEGGIIKKMMOOQQSSUUVVXXZZ\\^^HA>:TTSSRRQQPPQQPPPPOOPPPPOOOOOOOONNNNNNMMMMLLLLLLKKKKJJIIHHGGHHGGFF,++*))(''%%$"}"}{"{z!zx!xu ussppmmii++r((l%%d1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111116:JJJQQQWWW___gggpyz""$$''))++,,,,,,++++++******))))))))))))((ϣ''&&&&&&&&%%%%%%%%%%%%$$$$$$$$########""""""##""""""""!!!!!!!!!!1111111111111111111111111111118(88(8@8(8@8(88(88(88(88(88(88(8@@@88888888888899;;==??AACCEEFFHHJJLLNNPPQQSSUUWWXXZZ\\]]__5PPOONNNNNNNNNNNNNNMMMMMMMMLLLLLLLLKKKKJJJJJJIIHHHHHHGGFFEEDDDDCC**))(''%%$#"{!{x!xw wu ussppnnkkhhdd))m&&g##^1111111111111111111111111111111111111111111111111111111111111111m-Mu1Ry3V}4Y6[77|77|88}88~88~11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111116EEEJJJPPPWWWJPoxx!!$$&&))++,,,,++++++******))))))(((())((((͢&&&&&&%%%%%%%%$$$$%%$$$$$$$$########""""""""!!""""""!!!!!!!!!! 1111111111111111111111111111118(8@@8(8@8(88(88(88(88(88(88(88(88(88(8@@888888888888::<<>>@@BBDDEEGGIIKKMMNNPPRRSSUUWWXXZZ[[]]MMLLKKLLLLKKLLKKKKJJKKKKJJKKJJIIIIHHIIHHGGGGFFFFFFEEDDCCBBBBBBAA)(('&%%$##|!|y yu ussrrppnnlliiffcc((m&&h$$a!!X111111111111111111111111111111111111111111111122x44y44xy3V6[8_:b>>>'&&%$$##|!|y yv vrrppnnmmkkiiggddaa^^&&g$$b""[P11111111111111111111111111111111111111w22v33v22s33s44r33q;c=g>jAmBpDsEuGwHzJ|77l77l77l88m88m88m88n88n88n88o88qPOOOMLJ}H{FuBp11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111???D J OCIOmwv!!##%%''**++++******))))))((((((''''''&&&&ɞ&&%%%%%%%%$$$$$$################""""""""!!!!!!!!!! !!!!!! 11111111111111111111111111111111@@8(8@@@8(88(88(88(88(88(88(88(8@@@@@@@@@@ACEGIAACCEEFFHHJJKKMMNNPPQQSSTTVVGGGGGGGGGGGGFFGGGGFFFFFFEEEEDDEEDDDDCCCCCCBBAA@@AA@@??>>==<<<<;;%%$$#~"~{!{y yv vssoollkkiihhffddbb__\\YY$$a""\UG1111111111111111111111111111B/W$>22u22s22q22o33o33n22l22k@kAmCqEtGwHzJ|KMN44e44e44d55e66f66f66g66g77h77h88jVWVVVUTSSQP<>>>==<<<<;;::99%$##}!}z!zx xvvsspplliiggffeeccaa__]]ZZWWTT""[ VD0D111111111111111111111111B/R":^'Bg+H11o11n11m22l11j22i22g22fCpDsFuHyJ|K~MNPQS44`44_55a55a55a55a55a66a66b77c[\[\\[[[ZZY;;r;;t;;v<>==>>==<<<<;;;;::99887766"~"~{!{y yw wuurrpplliiggddbbaa``^^\\ZZXXUU##^O8OK5KE1E<+<11111111111111111111I4V$=_(Cg,In.O00l00j00i11g11f11d11d00b00aFvHyJ|LMOPRSU33[22[33[44\44\44[44\44\44\55^66^__``_`_`_^^::l::n;;p;;q;;t<,>9(91111111111--s..r..oT#<\&Ac*Fk-Kq/Pw2T}5X//b//b..`//_//^00]//[//[//YJ|KNOQRTUWXZ11S11S22S22S33T33S33S33S44T44U44Ufggghhhhhhh88`99b99c::e;;g;;h;;j::k;;m;;o^][XVSOJ|Bo11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110 C H MAGLiqzow ""$$&&''''&&''''''&&&&&&&&%%%%%%%%$$$$##""########""""""""!!!!!!!! 1111111111111111111111111111111111@8(88(88(88(8@@@@@8888@@@@@@@@@@@@@@@@@@@@@@@BCEFG@-@A.AB/B``____^]]\\\[[Y}Y}|X|{X{zVzyVywUwvTvuSusRsrQrpOpnNnlNljLj--x,,v++t**p((n''l&&h&&f%%b##_##^##]""\""[!!Y W USQNJ=+=8(88(8111111..t--q--o--nV$=]'Bd*Gk-Lq/Pw2U~4Y..b..`.._..]//]//\//Z//Y..X//XKNOQRTVWYY[11Q22R22R22R22Q22Q22Q33R44S44S44Tghhiiijjjjj88^99`99a::c::d::f;;g;;i;;j;;lb`^\[YV6\x3Um.M33y1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110 B G MAFLhpynv~ 111111111111111111111111111111111111@8(88(88(8@@@@88888888@@@@@@@@@@@@@@@@@@@@@@@@ABD<+<>,>?-?@-@[[[ZZ~Z~~Z~}Y}}Y}|X|zWzzWzyVyyVywUwvUvuSutRtsRsqQqpOpoOomNmlLljKjhJhfHfeGe**q))o((m''i&&g%%e$$a##_""[!!Z!!Y!!X W UTRPMKH;*;8(88(811111111..q..o..mW%>^'Bd*Hk,Lq/Pv1T|4X7\..`--^..]//\//[..Z//Y..X//W//VMOPRSVWYZZ11Q00P22R22Q22Q22Q33R33R33R44S44Shhiijjjkklk88\88]::_99`99a::c::d::e;;g;;h<h;c8^44u33v44y11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110 BBBG LAFKgoxxx111111111111111111111111111111111111888(88(88(88(8@@888888888888@@@@@@@@@@@@@@@@@@@@@@@@@8(89)9:):;*;<+iȨCDDCCBBAAA@@?@???>>===<<<<<;;;::9s(r'r(r(q(p'q'p'p'o'n&o&n&m&m%m&1111111111111111111111111111111111111111@@@@8888888888888888888888@@@@@@@@@@@@@@@@@@@@8(88(88(88(88(88(88(8oOomNmmNmmMmlMllMlkLkkLkiKiiKihJhgIgfHfeHedGdcFcaFaaDa_C_]C]\B\[@[Y?YW>WU?>>>==<<<;;<;;:::99r'q'q'q'p'p'o'n'o'n&n&m&m&m%l%l%111111111111111111111111111111111111111188@@@@888888888888888888888888@@@@@@@@@@@@@@@@@@8(88(88(88(88(88(88(88(8kLkiKihJhgIgeHeeHedGddGdbFbbFbaEa`E`_C_]B]]B][A[Z@ZY?YW>WU=UT>>=>===<<<;;::;:::999q'q'p'o&o&o'n'n'm&n&m&l&l%k%l%k%111111111111111111111111111111111111111111@@@@@88888888888888888888888888@@@@@@@@@@@@@@@8(88(88(88(88(88(88(88(88(8hJhgIgeHedGdcFcaEa`D`^C^]B][A[[@[Y@YY?YW?WV=VU>===<<=<<;;;:::99:9998p'p'o&o&n&m&n&m&m&l&k&l%k%k%j%i%11111111111111111111111111111111111111111111@@@@888888888888888888888888888888@@@@@@@@@@@@@8(88(88(88(88(88(88(88(88(88(8dGdcFcaEa`D`_C_]B]\A\Z@ZY?YW>WV=VT>>==<<<;;<;;;::999889888o'n&n&n&m&m&l%k%l&k&k%j%j%j%i%i$1111111111111111111111111111111111111111111111@@@@88888888888888888888888888888888@@@@@@@@@@8(88(88(88(88(88(88(88(88(88(88(8aEa`D`_C_]C]\B\[A[Y?YX>XV=VU>=>>===<<<;;::;:::9998887787n&m&m&l&m%l%k%k%j%k$j%i%i%h%i$11111111111111111111111111111111111111111111111111@@@@888888888888888888888888888888888888@@@@@@@8(88(88(88(88(88(88(88(88(88(88(88(8]B]\A\[@[Y@YX?XV>VU>>==<==<<<;;;:::9::99988877767m&m&l&k%k%j%k%j%j$i$h$i%h%h$g$1111111111111111111111111111111111111111111111111111@@@@88888888888888888888888888888888888888@@@@8(88(88(88(88(88(88(88(88(88(88(88(88(88(8Y?YX>XV=VU>>==<<<;<<;;;:::9998898887776666l&k&k%k%j%j%i%i$i$h$h$g$h#g$g$@@@@@88888888888888888888888888888888888888888(88(88(88(88(88(88(88(88(88(88(88(88(88(88(88(8U,>ECA@@@@@@@@@@@@@@@@@`(Dc*Gh+Jm.Mq/Pv2T{3W6Z00d00c//c00c00a00b11b00a11a11`IyJ|K~MNPQSTTV55`55_66`66`66_66_11[22\22\22\22\22\RSSSSTTTTTT55a55a55a55b66b55b55c55d55d55e55fONMLKJ}I{HyGw55m55nrrr_3[0V.^^^C#7\{4Xu1Sn/Ng+I^(C11w00v2592 6SSSKQ V# LQV\ v0 }258>===<<<;;;;;;:::99988878877766655k&j%j%j%i%i%h$h$g$h$g$g#f#f#f$@@@@@888888888888888888888888888888888888@@@@@8(88(88(88(88(88(88(88(88(88(88(88(88(8P9PO8OM7ML6LK5KI4IH3HF2FE1EC0CB/B@.@>,>=+=;*;A@@@@@@@@@@@@@@@@88_(Dc*Fh+Jl.Lq/Pu2Sy3W~4Y00e00e00d11d00d00c22d11c22d22cGxIzJ}LMOPQSTU66c66b66b66b77c77c88d33_33_44`44_44`QRRRRSSSSSS66c66d55c55d55d55d55e55f66g66hONMMLK~J|IzGxFvm9g6c4^2Y/V.]]]7]}5Yw2Uq0Pj-Kb)F22w11w//v2592 5SSSKP V" KPU[ u/ {2 47==<<<;;;:::9::9998887776677666555j$i%i%h%h$h$h$g$g$f$g#f#f#e#e#@@@@@88888888888888888888888888888888@@@@@@@@@@8(88(88(88(88(88(88(88(88(88(8L6LJ5JI4IH3HF2FE1EC0CB/B@.@?,?=+=;*;:):@@@@@@@@@@@@@@@8888@_(Dc*Fg+Ik-Lp/Ot0Sx3V|4X00f11g11f00e11e11e22e22f22e33eFvHyI{K~LMOPRST66e77f77f77e77e88f88f99g99g44a44a55bPPQQQQRRRRR55e55e55f66g66g66h66h66h66h66iNMMLK~J|I{HyGwFud1+_/({{{e5b3]0Y/T-7]}5Yx3Ur0Ql-Me*H311w00v..u1581 5RRRJO U" JOTYs/ z1 46<<<;;;:::999899888877766656655554 h$i$h%h$g$g$f$g$f#e#e#d#e#d#d"@@@@@88888888888888888888888888@@@@@@@@@@@@@@@@8(88(88(88(88(88(8G3GF2FD1DC0CA/A@-@>,>=+=;*;:):8(8@@@@@@@@@@@@8888888888^(Cb)Ef+Hj,Ko.Os0Rw2T{3W00i00h11h11g22h22g11g33h33g33fEuGwHzI|K~LNOQRR77h77h88h77h77h77h77h99j99j99i44d44eOOOPPPPPPPP66h66h77i77i77j66i66j77j77j77kMLLK~J|I{HyGxFvEtg2,b0)^.(xxxd4mmmiiiR!!7]}5Yx3Vs0Rm.Mf+IB011w//v:::>>>BBBGGGLLLQQQJOT" JNSXr. x1 ~35<;;;:::999888888877766665555554 4 4 h$g$h#g#f$f$e$e#e#e#d#d#c#c"c"@@@@@8888888888888888888888@@@@@@@@@@@@@@@@@@@@@@@@8(8A.A?-?>,><+<;*;9)98(88(8@@@@@@@888888888888888888]'Ba)Ed*Gi,Jm.Nq/Pu1Sy3V11j11j11k11j11i22i22h33i44j44iDsEvGwHzJ|K~LNOPQ77j88k88j88j99k99k99k99k::l::l;;m;;mNNNNOOOOOOO66j77j77j77k77k77l77m88m88n77mLK~J}J|I{HyGxFvEtDrh2+c0*_/(zzzuuup$$l##f!!7\}5Yx3Us0Rm.Ng,IF@@@22x00v..u- >>>BBBGGGLLLQQQWWW\\\ccciiipppSWq- w0 }25:;:::9999888777677766655544444 4 4 4 g$f#f#e#f#e#e#d#d#c#d#c#c"b"b"@@@@@88888888888888@@@@@@@@@@@@@@@@@@@@@@@@@@@@DCA@@@888888888888888888888888888888\'B`(Dc*Fg+Ik-Lo/Os1R00k11l22l11k22k22k22k22k22k44l44lCqDsFvGxHzJ|KMMOP77l99m99m99m99m99m::n::n::n;;o;;o\\LMMMMNNNNN88m88n88n88n88n88n77n77o77o77pK}J|I{IzHyGwFvEtDsCq((}''v%%r$$l""h!!6[|4Xw2Us0Qm.Ng,JHCCC===11w//v&- >>>B F ; PPPVVV\\\bbbhhhooovvv}}}49:9999888777666666655554444 3 3 4 3 ~3 f#f#e#e#d#d"d"d#c#c#b"b"@@@@@888888@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8888888888888888888888888888[&A^(Ca)Ee*Hi-Jm.Mq/Q11m11l22n22n22m33n33m22l33m44m55nBoCqDtFuGxIzJ}J~LMO88n88n99o::p::p::p::p::p::p<C[agnnnuuu{{{8(88(88(88(88(8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@88888888888888888888888888Y&@]'B`(Dd*Fg+Ik-Lo.N22o11o22o33o33o33n33o33o33o44o55p@mBoCqEsFvFwHyI|K~LL88q99r::s99s99s99r::s::s::s::s;;tXYZ[J|J}J}K}K}K~K~K~88q88r88r88s99s99s99t88s88t88tHyGxGwFvEtEsDrCpBoAmu++p**l((}}}x&&s$$o##j!!}5Yy3Vu1Sq0Pl-Mg+I85BBB4 00v9(#- ===A E : >BZ`fm[`e8(88(88(88(8@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8888888888888888888888X%>[&A^'Ca)Ee*Hh,Jl-M11o22p22p33q44q33q33q44q44q44p>h?kAlBoCqDsEuGwHyI{J}K~99t99t99s;;u;;u;;u;;u;;u;;u<BY_elZ_dixxwwvuvuuttsssrrqqqppoononnmmmml8(88(88(88(8@@@@@@@@@@@@@@@@@@@@@@@@@@@88888888888888888888V$=Y%?\'A_(Cb)Ef+Hj,K11r11q22r33r33r44s44r44r55s55s=f>h>j@lAnCpDsEtFvGxIzJ|99u::v::v::v;;w;;w<it++n((|||wwwU)$R("O&!y3Vv2Tr0Qm.Ni,Kd*GOOO7303 =+1#, <<<@ E 9 =AY_dkY^chvvvvuutstssrrqqqppoooonnmnmmllkl8(88(88(8@@@@@@@@@@@@@@@@@@@@@@888888888888888888T#Z&@]'B_(Dc)Gg+I22s22s11s22t33t33t44u44t44t55u:ch=fb.(^-&[+%X*%T(#Q'"N% w2Ts1Ro/Ok-Lg+Ib)FD"741====+3$#, <<<@ D 9 =AX^djX]bguututtsrrrrqqppppoonmnmmllklkkjj) 8 0 3 DDDGI<?RR":U$Z&@]'Ba(Ed*G11t22u22t22t44v44u44u55v55v55v9a:bi?k@mBoBpDsEtFv99y::z::z::z::z;;{<<|<<|<<|<<|<<|PRRRTTUDrDrDrDsDs99z99{99{99{::{::{99z99z99z99{BnAmAl@k?j?i>h=g=+4%', <<<@ D 8 <@W]ciW\afttssrsrrqqpppoonnnnmmllllkkjjjji4448 0 2 CCCFI<>QP"9S#;U$=X%>Z&@^'Ba(E22v22v33v33v33v55x55w44w44w55x8^9`:b;dh?j@lAnBoCqDs::{::{::{;;|;;|;;|<<}<<}<<}<<}==~OOPQQRRSBoBpBp99{99{99{99{99|99|99|99|::|::}::}@k?k?j>i>h=gi?j@lBoBp::|;;};;};;};;};;};;}========MMNOOOPPAlAmAm::}::}::~::~99}99}99}99}99}99}99}>h>h=g=f;*3$)888. ? C 8 ;?V[afUZ_cqrqqppoooonnmmmmllkkjkjjiihihhh,888<<Z&@22w33x33x33x33w44x55y55y66z66z}4Y6Z7]8_9`:b22x22x22x33y33y33y44z55{55z55zx3V{3X~5Y6[8^8_9a;c;d=f>h>i::;;;;;;;;;;;;;;======HzIzJ|J}J~LLLM=g=g99~99~999999999999999999;c:b:a9`9_8^7]7\6[~5Yd$$`##^""[!!X USbbbh,Je*Ha)E^(CZ&@V$=?<97???8(1"(!!!!!!!!!!!!!!!!!!!!!!!!!!1>>>BBBFFF; >TZ_dSX\apoononnmmllllkkjjijiihhghhggffe"""""""""""",' ) 47DDD13@B !                 F2I4K 5N!7P"9R#:U$<22x33y33y33y44z44z44z55{66|66|u1Sw2Tz4W|4Y5Z7\7^8_:a:cS#;LLL<86???6&/!&"""""""""""""""""""""""14BBBFFFJJJOOOTY^cSW[`onnmmlmllkkjjjjiiihihhggfffffee"""",' ) 47DDD03@A"""!! !!!!!!!!!!              D0F2H3K5M 7O!8R":22x22x33y33y33y33y44z44z55{55{q/Ps0Rv1Sy3Uz4W}4Y6[7]8^9`9b;c9999;;;;;;;;;;;;;;<<==DsEsEuFvGvGxGxHyHzHz9`9`999999999999999999997\7\6[6Z}5Y|4X{4Wy3Vx2Uv2T]!!Z Y VTQP^^^a)E^(C[&@W%>T#>>3$-$########$$$$$$14- 0 JJJNNNSSSXXX]bRVZ_}nmmllkkkkkjjiiiihhggfggffeedeed$$$$$$$$$$$$$$$$$$$$ ,' ) 47CCC0 2?@$#!   """"""""""""""""""!A.C0F1H3J5M 6O!822y22y22y22y33z33z33z33z44{55|l-Mo/Nr0Qt0Sw2Ty3V|3X}5Y6[7\8^8`999999::::::;;;;;;;;;;BoBpDqDrDsEtEuEuFvFw7]7]99998888888888888888~5Y}5Y|4Xz4Wy3Vx3Uw2Tu1Ss1Rr0QZ X UTQOM\\\]'BZ&@W%>T#@''&&%%$# ##########################>,A.C/E1G3J4L 611x11x22y22y22y33z33z33z33z44{h,Jj,Lm.Mp/Or/Qu1Rw2Ty3V|4W}4Y6Z7\88888899::::::::::::::?k@lAnBnBoBpCqCrCrDsEs5Z888888888888888877~77~y3Vx3Vw2Uv2Tu1St1Rr0Qq0Po/On.Njjjgggfffbbb```^^^\\\ZZZZ&@W$>T#;Q"9M 7J4?< : .+. ' &&&&&&&&&&&&&&&&&''''''''''03, / 2 AEWWW[[[aaafffTX\zkkjkjjiihhghhggffeffeeddcddccbb}}}|||'''''''''          "+& ) 46BBB0 1=@!!*!!!!)((&%$""! %%%%%%%%%%%%%$$$$$$$;*>,@-B/D1G2I411x11x11x22y22y22y22y33z33z33zd*Gg+Hi,Jk-Mm.Np.Pr0Qu1Sw2Uy3Vz3W}5Y88888888889999::::::::=h>h?j?k?k@l@mBnBoBoCpz4W#####$u1St1Rs1Rr0Qq0Po/On.Nm.Mk-Li,KY,W*T)```E BB@V$=S#;P"9M 7J4F2>: 8 .*+$ ''''''''((03, / 2 ADH?```eeejjjooo[y~jjiihihhhggfffffeedddddccbbcbba{{{{{{))))))))))))))!!!!#+& ) 35- / 0=?$$-,##,!!!!) )(&$""!''''''&&&&&&&%%%%%%9(;*=+?-A.C0F1           `(Db)Fe*Gg+Ij,Kk-Lm.Np/Pr0Qt1Sw2Ty2U##$%!!!!!!''BEiiinnnssswww|iihhhggggfffeeeedddccbccbbaaaaazzzzzz """"""""""""""""""""""""""""%%333& ( 35- / 0 <>''10%%0%%-##,!!*)(%%""""""""''''''''''''''''''''6&8(:)<+>,@.B/ $ $ $  % %   &  [&A]'B`(Db)Ee*Gg+Ii,Jk-Lm.No.Or0Qt0R$$%%---''''0((****9a:a:b:c;dhq0P//9112233?ABD88l.Mk-Lj-Ki,Kh,Jg+Ie+Hd*Gc*Fa)ES(P'O'ZZZ@>==N!7K 5H3E1B/?-: 8 5 +( $  ++!!!!!!!!!!!!+++++++++++++++++++++++,,,,,,,02, . 1 @CG>ADH\% qqqvvv{{{~~~~~~}}}~~~}}}}}}||||||{{{|||{{{{{{zzzzzzyyyzzzzzzyyy""""""""""""""""""""$######################&'333666999<<<4- CCCDDDGGGHHH**))))))320%%/%%##""** ('%#####"3$5&7'9);*=+?- + , $$ $$ , - - && && 0 W%=Y%@[&A^'C`(Eb)Fe*Gg+Hh,Jj-Lm-Mo/O99;;=33>@B88887]7]8^8`9`:a:a:b;b;c;dm.MTFFHHJJLLNNbRRTTVVh,Jg+If+He*Hd*Gb)Fa)E`(D^(C]'BO'N&L%VVV>=;:J5G3E1B/>,;*9 6 ===:::777!   ""##############--------------------------..##/2+ . 1 ?CG=@DG[$ _& uuuyyy}}}~~~~~~~~~~~~}}}}}}||||||||||||{{{{{{zzzzzzzzzzzzyyyyyyxxxxxxxxx"...%%%%%%%%%%%%%%%%%& !!2 6 999<<<>>>@@@BBBDDDFFFH....,,875))4// 8 7 ,, ++ 3 )) 0 0 %$$$$$$$##### 0"2#4%6&8(:)<+ 5 ++,, 7 8 8 9 ; 11 11 11 U$Y%?[&A^'C`)Db)Fd*Ff+Hh,Jj,KLLOQBBDDEEFFHHJJKK}4Y5Z5Z7[7]7]8^8^8_9_9`h,J``bbddggqq rr c*Fb)Fa)E`)D_(D^(C]'B[&AZ&@X%?WWWVVVUUUTTTQQQPPPOOOMMMF2C0A.>,;*7'@@@===/- 5    ##################//////////////////////$$$$$$$$8882+ . 0 ?BF<@CFZ$ ^& a' e) |||l+ k+ k* j* j* j* i+ |||||||||UUUTTUTTTSSSRRSS&&&&&&&&&&&&&&&&!!""2 6 , / = @ AAA5 7 G@@>=553322 = 11 ; : 8 ,, ,, ++ )) 0 / &&'%%%%%%%%%%$$$$$$$$$$- /!1#3$5&7'9( ? A B B C E G G H J== P!9S#:U#V$=T#BE<?BEY$ \% `' d( zzzq. q- p- q- p- p- p- o, o, n, n, o, n, n, m, m, m, l, l, l+ l+ k+ k+ k+ j+ j* i* j* j* i* i* h) {{{{{{zzzUUTTTSSTSSSRRRQQ'''''''''''''"".2 5 , . = ? AAA4 6 F88E::::99 E 66 A 44 ? 11 ; // 8 ,, 5 2 ((''%%%%%%%%%%%%*,. 0"2#4%5&;;<<==??AABBSVFF GG HH L 6N 8P"9S":T#;V$=X%?[%@]'B^'B`)Dtvyddggiikkllnnqqssuut1Ru1Sv2Tw2Tx2Vy3Vy3Wz3W{4X|4X_(D Z&@Y&?X%?W%>V$=U$=<JJJH>,;*9(6&3$/"/.+ 5551   222222223''''''''''''''''''''''''''''''+ :::>>>- 0 >AE;>BEX# [% _& c( yyyp- p- o- o- p- o, o, n, n, n, m, m+ l+ m+ l+ l, l, k+ k+ j+ j+ k+ j+ j* i* i* i* h* h* h) h) h) {{{zzzzzzTTTSSSRRRRRRQQQQ((($$&&2 5 , . < ? 3 4 5 IBBAA????>> J ::88 C C 44 ? 22 ; : 7 5 ** 2 &&&&&&')+- /!0"2$BBEEXY[]_acehG2I4L6N!7P!9Q"9S#;V$=X$>Z%@[&@mm nn o/Op/Op/Pr0Ps0Qt0Rt1Su1Tv1Tw2U[&A U$=<;:GGGF:)7'4%2#/!+., + 2 .    444444445))))))))))))))))))))))))))+ : ===AAA/ =AD;>ADW# Z$ ^& b' wwwo- o- n, n, n, m, n, m, m+ m+ l+ l+ k+ k+ k+ k* k* j+ j+ j+ i+ i* h* i* i* h* h* h) g) g) f) g) yyyyyyyyySSSSRRRRQQQQQQPP &&))2 5 , - < > 2 4 9HIIGGEE T BBO>><< I F 77 66 44 ? 00 : --++ 4 ((')(((($&()+- /!KKLLMMdfhjmpqtB/E0G2I4K5L 7O 8Q"9S":U#,@.B.D0F2I3J5L5N!7P!8R!: d*Fd*Hf*Hg+Ih+Ii,Ji-Jj-Kk-LR#:R":L 6K 5J5I4H3G2E1D0C/= FFF22DDDCCCBBB@@@1#/!,)&# 333! '$  ,,,,,,,,,,,,,,,,,,,,::::::::::********************* 9 = 2 DDDGGG@C:=@CU" X# \% _& uuum, m, l, l+ l+ k+ k+ k+ j+ k+ j* j* j* i* i* i* h) h) h) h) h* g* g* g) f) f) e) f) f) e( e( e( wwwwwwvvvRQQQPPQQPPPOOOOO61 4 , - < @47FFFGliQQaMMIIXUBB@@ M ;;997766 ? 11 : -- 5 ) ""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+++*****************  !#%&(*WW[[\\__``{~:);*=,@-B.D/E1G3I3K5M 6  _'B_(D`(Ea)Ec*Fc*Fd*Ge*Gf+HN!7N!7H3G2F1E1C0B/A.@->,; CCC00/---- *(%"  ! ! % ......................<<<<<<<<<+++++++++++++++++++++* 9 < 2 4 GGGKKKB9<?BT" W# [% ^& sssk, k+ k+ k+ k+ j+ j+ j+ i* i* i* i* i* h* h) h) g) g) g) f) g) g( f) f) e) e) e) d) e( e( d( d( vvvvvvuuuQQQPPPOOPOOOONNN%81 4 + , =?45EEE__u\\XXiQQOO^ZFFDDRN K H 88 B @ > .. 8 ##############"""""""""""""""""""""""""""""""",,,,,,++++++++    !#%&^^^^aa|6&7'9(;*=+?,A-B/D0F1H3 Y%?Z%@[&A\'A]'B]'B^(C_(CI4I4I4C0B/A.@.?->,=+;*:)AAA/.---,*)&#!    ! %#--00000000000000000000000>>>>>????---------------------* 9 < 1 4 7 JJJNNNRRR;>AS! W# Z$ ]% `' ~~~j* j* i+ j+ j+ i* i* i* h* h* h* g* g) h) g) g) g) f) f) e( e( e( e( e( e) d) d( d( c( c( d( c( ttttttuuuQPPPOOOONNONNNNM<1114 , . =?35DDDhhffcc``[[WWTTdaJJGGVBBOL J F 66 ? 11 : $$$$$$$$$$$$$$$$$$$$$$$$$$$$##############################--------      !#aa}2$4%5%6&8(:)<*=+?-A-C/C0 T#;T$W%>X%?Y%?Z&@E1E1E1?,>,=+<*;*9)8(7'5&>>>-,,,*):::$"     ,,,$,,@@@@AAAAAAAA333333333333334444$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$* 8 < 1 4 7 J MMMQQQUUU>AR! V" Y$ \% _& ~~~}}}i* i* i) h* h* i* h* h* h* g* g) f) f) f) f) f) f) e( e( e( d( d( d( c' d' d' c( c( c( b( b' b' tttssssssOOPOOONNNNMMNMMM?111555777:::<???@@@BBBDDDqqkkggztpkfOOLLIIFFTPM I 995522 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$$$$$$$$$$$$$$$$$$$$$$$$$$$$..       ~/!0"1#2#3$5%7'8(:)<+>+>- N!7O!9P"9R":R":S";T#;A.A.A.@.:)9)8(7'6&5&4%2$1#00/::::::999777666      ***11KBBCCCCCCCCCC555555555555555566%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%) 8 ; 1 3 6 IIIMQQQTTTXXX@Q! U" X# [% ^& {{{|||h) h) h) g) g) g* f* g) g) f) f) f) e) e) e( d( e( e( d( d( d( c' c' c' b' c' c' b' b( b' a' a' ssssssrrrONNNNNNNMMMMLLML!!44)% 777:::<<>>3 6 HHHLPTXXX[[[Q T" W# Z$ ]% zzzzzzg) g) g) f) f( f( e( e) f) f) e) e) e( d( d( d( c( c( d( c' c' c' b' b' b' a' a' b& a& a& a' `' qqqrrrqqqNNNMMMMMMMLLLLKK!!D)% 66612,-7 9 uuddaa\\ojRRNNKKGGDDAA>> H E ))((((44443333333333333333222222222222221       hhjj()*+,- .!0"2#4$4%C0E0F2F2G3H38(8(8(8(8(8'1#1"0"/!- ,+*('6666 5 5 3 2 222&      9922HHHHIIIIIIIJJJ99::::::::::::;;;;;;((((((((((((((((((((((((((((((((((((((((5557 : >>>3 5 HHHK OSD[[[^^^S! V" Y$ \% yyyyyyg) f) f( f( e( e( e( d( d( d( d( d( d( c( c( c( b( b' b' a' b' b' b' a' a& a& `& `& `& `& `& `& pppppppppNMMMLLLLLLLLKKKK,H---)% 66612,-7 8 ||jjeebbupVVRRaKKGGT?? K G **************))555555555555544444444444443333       llnnpprr%&'())*+-/!/"?,@.A.B/4%4%4%4%4%3$3$tt- ,+*)('%$"4444442 2 1 000% %       6664KKKKKKKKLMMMM<<<<<<<<<<<<<<========))))))))))))))))))))))))))))))))))))))444777: ===2 5 GGGK NRCF]]]aaaU" X# [$ xxxxxxe( d( e( e( d( d( d( d' c' c' c( b( c( c( b( b' b' a' a' a' `' `' a& a& `& `& `& _& _& _& ^% _% pppooooooMMMLLLLKKKKKKKJJ.L&)% .02,,7 8 ||ppjjgg{uZZlgNNJJX R M I ,,2++++++++++++++++++++++++7777777666666666666555555         llnnppssuuvvxxzz! "#$%&&'(*+:(:*<*0"0"0"0"/"/!/!/!ttrr)('&%#"!   ``^^\\YYWW k h e        666666NNOO>>>>>>>>>>PPQQQQQQQQQQ777777777777777777,777:::===2 5 GGGJ NQCFI```dddW# Z$ wwwwwwd( d( c( d( d' c' c' c' b' b' b' b' a' a' b' a' a' a' `' `' `& _& _& _& `& _& _& _& ^% ^% ^% ]% oooooonnnLLLLLKKKKJJkkklllkkkkkkkkkP&000$ -02,,6 8 ||uuppll|vqkRRNN[VAA M --------------------,,,,,,,,,,,,,,99888888888888777777         mmooqqssttwwyy{{||    ! "##$%&4%5&+++++++++ttqqqqpp#"!      __]][[YY n k g d       ++++++,,,,,,,,,,,,,,,,,,AAAAAAAASTTTTTTTTUUUUU9999999999999999,.999<<<2 4 FFFJ MQBEHKcccfffiiivvvvvvc( c' b' b' ttttttsssttttttsssssssssrrrrrrrrrqqqrrrrrrqqqqqqqqqppppppoooooopppooooooooonnnnnnnnnmmmnnnnnnmmmmmmmmmllllllkkkllllllkkkkkkkkkjjjjjjjjjjjjjjj S &000$ -01+,6 8 llggccvpjd^YDD O : //////................................--::::::::::999999^^        oopprrssvvwwxx{{{{        ! ""/!''''''''&&qqppnn        ^^\\ZZ o m j g c      ------------------------------....WWWWWWXXXXXXXXYY;;;;;;;;;;;;;;+.' <<<1 4 FFFI LPADGJbbbeeehhhttttttuuutttttttttsssssssssrrrrrrsssrrrrrrrrrqqqqqqqqqpppppppppppppppooooooooonnnnnnnnnnnnnnnnnnmmmmmmmmmllllllmmmllllllkkkkkkkkkjjjjjjjjjjjjjjjjjjiiiiiiiiihhhDD,,,000$ -/:::+,5 6 ppkkggzunhb]FF R < 00000000>============<<<<<////////..............HH         qqrrssvvwwyy{{||~~~~           ########"""ll        ]][[YY n k h e a     ////////////////////////////////////====[[[[[[[\\\\\\=============+-' ) ???3 EEEH LOADFIaaadgggsssssssssrrrssssssrrrrrrrrrqqqqqqqqqpppqqqqqqpppppppppooooooooonnnoooooonnnnnnnnnmmmmmmVUUUUTTUUTTTTSSSRRSSRRhhhhhhHH,,,000$ -/999) ,5 5 ttppjjx\\WWfMMII U > @@@@@????????????>>>>>>>>000000000000HH         qqrrttvvwwyyzz||}}~~                             \\ZZ o m j g c _ Z   00000000000000111111111111111111111111?????????_______````??????????+-' ) >>>AAADDDH K O@CFH___cfrrrqqrqqqpppooopooooooooonnnWVVVVUUVUUUUTTTTSSTTSSSRRRRQQRRhhhgggJJ# 000$ -/999) +4 >>>}}xxssnn}^^YYiPPLL W @ BBBBBBBAAAAAAAAAA@@@@@@@@@@?11HHJJ        pprrttuuwwxxzz{{||~~                              p n k g d ` [ T  22222222222222222222333333333333AAAAAAAAAAAAA c c c c c d d e e BBBBBBBB+-' ( + AAADDDG K N@BEH___beqqqpppppppooonnnmmmnnnnnnmmmVVUUUUTTTUTTTTSSSSRRRSRRRQQQQPPffffff# / 222444666888:::;;;===>||xxrrggaa\\XXRRNN [ @ DDDDDDDDDCCCCCCCCCCBBBBBBBBBHHJJ         rrssuuwwxxzz{{||~~~~                               n k h e ` [ CC44444444444444444444445555CCCCCDDDDDDDDDDDD h h h h h h h i DDDDD+-& ( * 6CCCGGGJ M?BDG^^^adppppooonnonnnnmmmmmllllllmmmUUUUTTTTSSSSSSSSRRRRQQQRQQQQPPPfffeee# / ( 444666888999;;;0={{ttppjjee``ZZUUPP 55GFFFFFFFFFFFEEEEEEEEEDDDDDD Z II         rrssttvvwwyyzz{{}}~~                       ~          UU h PPLLHH66666666666666FFFF66777777777777777777777777777777777777777777UUUUUUUUUUVV7777*,& ( * 68FFFI M>ADF]]]`coooonnnnmmmmmmlllllkkkkkkkkkTSTTTSSSSSRRRRRRRRQQQQPPPQPPPPOeeeeee# / ' ) 6 7 9 //<}}mmhhbb\\ngMMIIIIHHHHHHHHHGGGGGGGGGFFF [ JJ        qqssssuuwwxxyy{{||}}                       ~ }          SSPPLLHHHHHHHHH8888999999999999999999999999999999999999999999999999YYYYYYYY222,& ( * 58FFFIIIL>@CF\\\_bnmmnnmmmllllkllkkkkkkkjjjjjjSSSRSSSRRRRQQQQQQQQQPPPPOOOOOOOdddddd# / ' ) 6 7 8 //<ppkkeexqjPP88KKKKKKKKJJJJJJJJJIIIIIIII         qqssttvvwwxxyy{{||                       ~ } | {           JJJJKKK::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;222,& ' ) 58:HHHKKK=@BE[[[^`mmlllllllkkkjjjkjjjjjjjjjiiiSRRRRQRRRQQQQPPPPPPPPPOOOONNNNMcccccc" / ' ) 6 6 888./;ssmmhh{tmRRNNMMMMMMMMMLLLLLLLLLKKKK        VVrrssttwwwwxxzz{{{{                        ~ } | { z x           MMMMM============================================================&444% ' ) 57:1 KKKNNN?BDZZZ]_llkkkkkkkkjjjiiiiiiiiiiiiiiiRRRQQQQPQQQPPPPPOOOONOOONNNNNMMbbbbbb ,,,. ' ( 5 6 777./;oojj~wpTT;;PPPPPPPOOOOOOOOONNNNNNNM        VVWWXXYYZZwwxxzz{{                        ~ ~ } { { z x w v t         PPPP????????????????????????????????????????????????????????????&444666' ) 4791 3 MMMPPPACYYY\_kkkjjjjijjiiiihhhhhhhhggghhhQQQQQPPPPOPPPOOOOONNNNMNNNNMMMMbbbbbb,,,. ' ( 5 6 777..;rrllysWWAAAAAAAAAA@@@@@@@@@@@@@@@@@@@@@@????????????????        TTVVWWWWYYZZ[[[[\\ v           ~ ~ ~                | { { y x w v t [[YY      RSSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA&3 666' ) 4690 3 5OOORRRCXXX[^jjjjiiihhhihhhhggggggggggfffQQPPPPPOOOONNOOONNNNMMMMMLMMMLL```aaa,,,. & ( 5 6 666-.:tt|wZZ>>CCCCCCCCCCBBBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAA        TTUUVVWWXXYYZZ s t            | } } } ~ ~ ~ ~ ~ ~ ~            y x w w u t [[YY   UUCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC&3 5 888( 4680 2 4OOOQQQBWWWZ]hiiihhhhggggggggffffffffffffOOPPOOOOONNNNNMNNNMMMMMLLLLKLLL``````J. & ( 4 6 666- -:::y ??XXXEEEEEEDDDDDDDDDDDDDDDDDDDDDDCCCCCCCCCCCCCCCC       WWWWXX q r s           z { { { { { { | | | |            w u t s XXEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF&3 5 888( 3680 2 4 6QQQTTTVVVY\hgghhggggffffefffffeeeeeeeeeOONNOOONNNNMMMMMLLMMMLLLLKKKKKJ______<<---& ' 4 5 666, 888QQwwqq|]][ZZZZZZZFFFFFFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEE                 x x y y y y z z z y y            [GGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH%2 5 777:::358/ 1 3 5DSSSVVVX[ggfffgffffeeeedddddeeeddddddNNNNMMNNNMMMMMLLLLLKLLLKKKKKJJJ______== P S 111444555666MMOO f ||xxss~__ S ]]]]]]]]\\\\HHHHHHHHHHHHHHGGGGGGGGGGGGGGGG              v v v eefgggg b            ^JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ^^^^%2 5 777- <<<57/ 1 3 5CEUUUWWWZfffeeeefeeeeddddcccccccccdddNNMMMMMLLMMMLLLLKKK______``````____________^^^^^^^^^^^^]]]^^^>>??@@CC V GGJJKK a e g }}yyttookkz S `````_________^^^^JJJJJJJJIIIIIIIIIIIIII            ` a b c c c c d d d d              P LL a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a %24 777, <<<47/ 0 2 4BEGVVVYYYeeeedddddddddddddddddddccccccccccccbbbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaa`````````aaa````````````____________^^^^^^^^^___^^^^^^^^^^^^]]]]]]]]]]]]@@@@BBDDEE [ ] ` b f h ~~yyuuqqllii} U  c c b b b b b b b b b b b a a a a a a a a a ` ` ` KKKKKKKKKKKKKK           c d e f g g g h h h h         % # * W S NN d d d d d d d d d d d d d d d d d d d d d d d d d d d d d d %24 666, . >>>6. 0 2 4 BDFVVVXXXeeedddddddddddddddccccccccccccbbbcccccccccbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaaaa````````````________________________^^^^^^^^^^^^]]]]]]]]]]]]]]]]]]]]]]]]\\\\\\@@BBCCEEGG ] ^ a c f i ~~{{wwssnnkk  e e e e e e e e e e d d d d d d d d d d c c c c c c c c c b b MMMMMMMM          n o o o o mm666) ) 2 0 % # ^ Y U QQQQ g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g g 14 666, . ===@@@. 0 2 3 ACFHWWWcccdddcccccccccccccccbbbbbbbbbbbbaaaaaaaaabbbbbbaaaaaaaaaaaa````````````Q Q!Q P P P P P O P ^^^^^^^^^A@@@@A@@@@@@????BBCCDDFF [ ] ` a d f i k{{wwssppll ] W h h h h h g g g g g g g g g g g g g f f f f f f f f f e e e e e e e e d d d  P BBZZ\\``eeiinnnnjj4443332 0 ...,,, ` [ W SSSS j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j j 13 666, - ===???- / 1 3 ACEGIbbbbbbS! R! R! R! S! S! S! R! R R R R Q Q Q Q Q P P Q Q QPPPP P O O O O O ^^^]]]]]]@@@@???@@@?????MMDDDDEEHH \ _ a b e g i j{{xxttrr j j j j j j j j j j j i i i i i i i i i i i h h h h h h h h h g g g g g g g  S DDGG__ccggkkppuunnkkffbb111000 l g c ^ Z VVVVVV m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m m 3 555+ - <<>?????OOOOOOOOOOPPPPPPPPPPPPPPQQQQDDDDFFGGII ] ` a c e g i j||yyvvssnnLL Z l l l l l l l l l l l l l l l k k k k k k k k k k k j j j j j j j j i i i i  T EEHHaaddhhllqqvv{{ookkggcc__[[ n i d ` HHXXXXXXXXXX p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p 333555+ - <<<> AAADDD0 2 ?BDFHaaaaaaQ! Q! Q Q Q Q P P P Q Q Q P P P P POOOOONNOOOONNNN\\\\\\\\\??????>>>>>>>>>PPPPPPQQQQQQQQQQQQRRRRRRRRRRRRRRSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTUUUUUU EEEEFFGGHHII ^ ` b c e g i jk||zzwwttpp n n n n n n n n n n n n n n n n n n n m m m m m m m m m m l l l l l l l k k  W GGIIccggkkoossww{{qqnnkkggcc__\\ o k g c KKZZZZZZZZ[[[[ s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s s 555+ - <<<> @ CCC0 2 ?ACEG``````Q Q Q P P P P P P O O P P POOOOOONNNNNMNNNNNM[[[\\\\\\????>>>>>>>====QQQQRRRRRRRRRRRRSSSSSSSSSSSSTTTTTTTTTTTTTTUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVGGGGHHHHHH ^ _ ` b d e g i jk||{{xxvvrrNN q q q q q q p p p p p p p p p p p p p p p p o o o o o o o o o o n n n n n  X HHKKeehhkkoossxx}}qqnnkkggdd``]]YY m h d LL]]]]]]]]]]]]]]]] v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v 444* , ;;;> @ B EEE1 >@BDF______P P P P P P O O O O ONNOOOONNNNNNMMMMMLMMMZZZZZZZZZ??>>>>>>=======RRSSSSSSSSSSTTTTTTTTTTTTUUUUUUUUUUUUUUVVVVVVVVVVVVVVWWWWWWWWWWWWWWXXXXXXXXXXXXXX HHHHHHIIII _ ` ` c d e g h i jk||{{yywwOOOO s s s s s s s s s r r r r r r r r r r r r r r YYYYYYYYYYYYYYYYYY~~~~~~~~~~JJLLggjjmmqquuyy}}mmkkggddaa^^[[ o k QQ__________________ y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y x x * , ;;;= @ B DDDGGG>@BDF^^^___P P O O O O O ONNNNNNMNNNNNMMMMMMLLLLLLZZZZZZZZZ===>>>=======<<TTTTTTTTTTTTUUUUUUUUUUVVVVVVVVVVVVWWWWWWWWWWWWWWXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYZZZZZZZZIIIIIIJJ ^ ` ` a c d e g h i jjj}}{{zzvvPP\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[[[[[[[[[[[[[[[[[[[[[[[[KKMMhhkkoorrvvzz~~jjggddbb__[[ o UUSSaaaaaaaabbbbbbbbbbbbbb | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | { { { 666, :::= ? A 5 FFF=?ACE]]]]]]NN O O ONNNNNNMMMMMMLMMMMMLLLLLLKKKYYYYYYYYY====<<=====<<<<UUUUUUUUUUVVVVVVVVVVVVWWWWWWWWWWXXXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[KK _ _ _ ` a b c d e e g h i i jkk}}{{zzRRPPOO]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]LLOOjjllppssww{{~~ ~ bb__\\YYWWTTccdddddddddddddddddddddddd                              ~ ~ ~ ~ ~ + :::< ? A 5 FFFHHH?ACD]]]\\\NNMMNNNNMMMMMMMLLLLLMLLLLLKKKKKKYYYYYYYYY==<<<<<<=<<<<<<VVVVVVVVVVWWWWWWWWWWXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZZZ s s s s t t t t t t u u u u u u u v v v v v _ ` a a b d d e e f g g h i jjkkkUU~~TTTTSSRRPP____________________________________NNPPSSoorrttww{{~~ ~ { x u ZZWWUUffffffffffffffffffffffffffgggggg 777:::< > @ 4 6 GGGJJJ@BD\\\\\\MMMMMLMMMMMMLLLLLLKKKKKLKKKKKKJJWWWXXXXXX<<<<<<<;;;;<<<;WWWW o o o o p p p p p q q q q r r r r r s s s s t t t t t u u u u u u v v v v v v w w w w w w w x x x x x x d d d e f f f g g g iiiiiTTTTTTTTTTSSSSRRQQ````````````````````````````QQSSppssvvyy||~~ ~ { y v s YYWWhhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiii 999; > @ 4 6 7 III@AC[[[[[[MMLLLLLLMLLLLLLKKKKKKJJJJKKJJJJWWWWWWWWWWWW<<<<;;;;;;;;::: o o p p p p q q q q r r r r s s s s s t t t t u u u u u v v v v v w w w w w w x x x x x x y y y y y y y z z z z z z z z z { { { ggggggSSaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbSSTTWWttvvyy||~~ ~ { y w t ZZWWjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkkkk 999; = @ 3 5 7 HHHKKKAC[[[[[[LLLLLKKKKKKLKKKKKKJJJJJJJIIIJJJWWWWWWVVVVVV<<;;;;;;;;::::: p q q q q r r r r s s s s s t t t t u u u u v v v v v w w w w w x x x x x y y y y y y z z z z z z z { { { { { { { | | | | | | | | | | } } } } } } bbccccccccccccccccccSSUUWWYYwwzz||  } { y w t [[YYllllllllllllllmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnn mmmmmmmmmmmmmmllllllllll; = ? 3 5 6 8 JJJLLLBZZZZZZLLKKKKKKKJJJJKKKJJJJJJIIIIIIHHHVVVVVVVVVVVV;;;;;;;:::::::: q r r r r s s s s t t t t u u u u u v v v v w w w w x x x x x y y y y y z z z z z z { { { { { { | | | | | | | } } } } } } } } ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ddddddUUWWXXZZ[[zz  ~ | { y w u s ZZnnnnnnnnnnnnnnnnoooooooooooooooooooooooooopppppppppppp ppppppppppppppppppppppppppppppppppppppppoooooooooooooooooooooooonnnnnnnn:::< ? 3 4 6 8 IIIKKKAYYYYYYKKKKKKJJJJJJJIIJJJJIIIIIIIHVVVUUUUUUVVVVVVVVVUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTSSSTTTTTTTTTTTTSSS r r s s s t t t t u u u u v v v v v w w w w x x x x y y y y y z z z z z { { { { { | | | | | | } } } } } } ~ ~ ~ ~ ~ ~ ~ ~           WWYY[[ t v x   ~ } { z x w v t s oooooopppppp rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrqqqqqqqqqqqqqqqqqqqqqqpppppppp< > 2 4 6 7 IIIKKKMMMXXXXXXKKJXXXXXXXXXXXXXXXWWWWWWWWWWWWWWWWWWVVVVVVVVVWWWWWWVVVVVVVVVVVVVVVVVVUUUUUUUUUUUUUUUUUUTTTUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTSSSSSSSSSSSSSSSRRRSSSSSS s s t t t t u u u u v v v v w w w w x x x x y y y y z z z z z { { { { { | | | | | } } } } } } ~ ~ ~ ~ ~ ~        XX q s t v w y { | } ~   y x w v t  ttttttttttttttttttttttttttttttttttttttttttttttssssssssssssssssssssrrrrrrrr<<<> 2 3 5 7 HHHJ LLLWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWVVVVVVVVVVVVVVVVVVUUUUUUUUUVVVVVVVVVUUUUUUUUUUUUUUUUUUTTTTTTTTTTTTTTTTTTSSSTTTTTTTTTAAAAAAAAAA@RRR t t t u u u u v v v w w w w x x x x y y y y y z z z z { { { { | | | | | } } } } } ~ ~ ~ ~ ~ ~        r s t v w x z { | } ~ ~ ~ ~}}{ u  vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvuuuuuuuuuuuuuuuuuuuutttttttttt===1 3 5 6 HHHJ LLLWWWWWWWWWVVVVVVVVVVVVVVVWWWVVVVVVVVVVVVVVVVVVUUUUUUUUUUUUBBBBBBBBBBBBBBAAAAAAAA@@@@@AA@@@QQQ u u u u v v v w w w w x x x x y y y y z z z z { { { { { | | | | } } } } } ~ ~ ~ ~ ~       s s u v w x y z { ~}}}{ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwwwwwwvvvvvvvvvvvvvv1 3 4 6 GGGI K VVVVVVUUUUVVUUUUUUUUUUUUUBBBBAAAAABBBAAAAAAA@@@@@@@@???@@QQQ u v v v v w w w w x x x y y y y z z z z { { { { | | | | | } } } } ~ ~ ~ ~ ~       t u v w w x ~~}zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxww>>>2 4 5 FFFH J VVUUUUUUUTTTTUUUTTTTTTTTTBBAAAAAAA@@@AAAAA@@@@@@@????????QQQ v v v w w w x x x x y y y y z z z z { { { { | | | | } } } } ~ ~ ~ ~       u u v |}}}~~~~||||||||||||||||||||||||||||||||||||||||||{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzyyyyyy2 3 5 FFFH J UUUUUUTTTTTTSSSTTTTTTTTTTAAAAAAA@@@@@@@?@@@@@@@???????>>PPPPPP v w w w x x x x y y y y z z z { { { { | | | | } } } } ~ ~ ~ ~ ~      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}}}}}}}}}}||||||||||||||{{{{{{{{{{???3 5 EEEG I TUTTTTTTTSSSSSSSRRRRRRSSSAAAA@@@@@@@@??????@????????>>>>OOOOOO w w x x x x y y y y z z z { { { { | | | | } } } } ~ ~ ~ ~     kkkkllllllmm ~~~~~~~~~~~~~~}}}}}}}}}}}}||||3 4 EEEG H SSSTTTSSSSSSSRRRRRRRRRRRRA@@@@@@@@????????>>>>?? ? ? > > >>>>OOONNN w x x x y y y y z z z { { { { | | | | } } } } ~ ~ ~ ~     mmmmmmnnnn ~~~~~~~~@@@4 DDDF H SSRRRRSSSRRRRRRRQQQQQQQQQ??@@@@????????>>>>>> > > > = > > > > > > =NNNNNN^^ x x y y y z z z z { { { { | | | } } } } ~ ~ ~ ~     oooooopp 3 DDDF G RRRRRRQQRRRRRQQQQQQQQQQQQ???>????????>>>>>> > > = = = = = = = = = = = NNNNNN____ y y y z z z z { { { | | | | } } } } ~ ~ ~ ~   ppqqqq AAACCCE G RRQQQQQQQQPQQQQQQQQPPPPPP>>>>>>>??>>>>>> > > > = = = = = = = = < < < < < NNNMMM______ y z z z { { { { | | | | } } } } ~ ~ rr CCCD F QQQQQQPPPPPPPQPPPPPPPPPPP>>>>>>====>> > > > = = = = = = = = < < < < < < < < LLLLLL____`````` z { { { { | | | | } } } BBBD F QQQPPPPPPPPOOOOOPPPPPPOOO>>>======= = = < = = = = = = = = < < < < < < < < < ; LLLLLL__````````aa { { { | | | C E PPPPPPPOOOOOOOONNNNNNNNNN======= = = = < < < < < < = = < < < < < < < < < ; ; ; ; LLLKKK``````````aaaaCCCE OOPPOOOOOOOONNNNNNNNNNNNN==== = = = < < < < < < < < < ; ; ; LLLLLLLLLKKKLLLLLLLLLLLLLLLLLLLLLKKKKKKKKK````DDDNNNNOOOONNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMLLLMMMMMMMMMMMMMMMMMMMMMLLLLLLLLLLLLLLLLLLLLLKKKKKKKKKKKKDDDNNNNNNNNNNNNNNNMMMMMMNNNNNNNNNNNNNNNNNNMMMMMMMMMMMMMMMMMMMMMMMMLLLLLLNNNMMMMMMb_\@