$ od -c -N 50000 [Erinyes]<LispManual>RandomIO.IM!9 0000000 \r \r { B e g i n S u b S e c 0000020 R a n d o m A c c e s s F i 0000040 l e O p e r a t i o n s } \r { 0000060 T i t l e R a n d o m A c c 0000100 e s s F i l e O p e r a t i 0000120 o n s } \r { T e x t \r \r { i n d 0000140 e x * P R I M A R Y * R a n 0000160 d o m l y a c c e s s i b l e 0000200 f i l e s } \r { T a g R a n 0000220 d o m I O } \r \r F o r m o s t 0000240 a p p l i c a t i o n s , f 0000260 i l e s a r e r e a d s t 0000300 a r t i n g a t t h e i r 0000320 b e g i n n i n g a n d p r 0000340 o c e e d i n g s e q u e n t 0000360 i a l l y , i . e . , t h e 0000400 n e x t c h a r a c t e r 0000420 r e a d i s t h e o n e 0000440 i m m e d i a t e l y f o l l 0000460 o w i n g t h e l a s t c 0000500 h a r a c t e r r e a d . 0000520 S i m i l a r l y , f i l e s 0000540 a r e w r i t t e n s e q 0000560 u e n t i a l l y . H o w e 0000600 v e r , f o r f i l e s o 0000620 n s o m e d e v i c e s , 0000640 i t i s a l s o p o s s i 0000660 b l e t o r e a d / w r i t 0000700 e c h a r a c t e r s a t 0000720 a r b i t r a r y p o s i t i 0000740 o n s i n a f i l e , e 0000760 s s e n t i a l l y t r e a t 0001000 i n g t h e f i l e a s 0001020 a l a r g e b l o c k o f 0001040 a u x i l i a r y s t o r a 0001060 g e . F o r e x a m p l e 0001100 , o n e a p p l i c a t i o 0001120 n m i g h t i n v o l v e 0001140 w r i t i n g a n e x p r e 0001160 s s i o n a t t h e { i t 0001200 b e g i n n i n g } o f t 0001220 h e f i l e , a n d t h e 0001240 n r e a d i n g a n e x p 0001260 r e s s i o n f r o m a s 0001300 p e c i f i e d p o i n t i 0001320 n i t s { i t m i d d l e 0001340 } . T h i s p a r t i c u 0001360 l a r e x a m p l e r e q u 0001400 i r e s t h e f i l e b e 0001420 o p e n f o r { i t b o 0001440 t h } i n p u t a n d o u 0001460 t p u t . H o w e v e r , 0001500 r a n d o m f i l e i n p u 0001520 t o r o u t p u t c a n 0001540 a l s o b e p e r f o r m e 0001560 d o n f i l e s t h a t 0001600 h a v e b e e n o p e n e d 0001620 f o r o n l y i n p u t 0001640 o r o n l y o u t p u t . \r 0001660 \r { i n d e x * P R I M A R Y 0001700 * F i l e p o i n t e r s } 0001720 \r \r A s s o c i a t e d w i t 0001740 h e a c h f i l e i s a 0001760 " f i l e p o i n t e r " 0002000 t h a t p o i n t s t o t 0002020 h e l o c a t i o n w h e r 0002040 e t h e n e x t c h a r a 0002060 c t e r i s t o b e r e 0002100 a d f r o m o r w r i t t 0002120 e n t o . T h e f i l e 0002140 p o s i t i o n o f a b 0002160 y t e i s t h e n u m b e 0002200 r o f b y t e s t h a t 0002220 p r e c e d e i t i n t h 0002240 e f i l e , i . e . , 0 0002260 i s t h e p o s i t i o n 0002300 o f t h e b e g i n n i n g 0002320 o f t h e f i l e . T 0002340 h e f i l e p o i n t e r 0002360 t o a f i l e i s a u t 0002400 o m a t i c a l l y a d v a n 0002420 c e d a f t e r e a c h i 0002440 n p u t o r o u t p u t o 0002460 p e r a t i o n . T h i s 0002500 s e c t i o n d e s c r i b e 0002520 s f u n c t i o n s w h i c 0002540 h c a n b e u s e d t o 0002560 { i t r e p o s i t i o n } 0002600 t h e f i l e p o i n t e 0002620 r o n t h o s e f i l e s 0002640 t h a t c a n b e r a n 0002660 d o m l y a c c e s s e d . 0002700 A f i l e u s e d i n 0002720 t h i s f a s h i o n i s 0002740 m u c h l i k e a n a r r 0002760 a y i n t h a t i t h a 0003000 s a c e r t a i n n u m b 0003020 e r o f a d d r e s s a b l 0003040 e l o c a t i o n s t h a t 0003060 c h a r a c t e r s c a n 0003100 b e p u t i n t o o r t 0003120 a k e n f r o m . H o w e 0003140 v e r , u n l i k e a r r a 0003160 y s , f i l e s c a n b e 0003200 e n l a r g e d . F o r 0003220 e x a m p l e , i f t h e 0003240 f i l e p o i n t e r i s 0003260 p o s i t i o n e d a t t h 0003300 e e n d o f a f i l e 0003320 a n d a n y t h i n g i s 0003340 w r i t t e n , t h e f i l 0003360 e " g r o w s . " I t i 0003400 s a l s o p o s s i b l e 0003420 t o p o s i t i o n t h e 0003440 f i l e p o i n t e r { i t 0003460 b e y o n d } t h e e n d 0003500 o f f i l e a n d t h e 0003520 n t o w r i t e . ( I f 0003540 t h e p r o g r a m a t t 0003560 e m p t s t o { i t r e a 0003600 d } b e y o n d t h e e n 0003620 d o f f i l e , a n { l 0003640 i s p E N D O F F I L E } 0003660 { i n d e x E N D O F F I 0003700 L E E r r o r } e r r o r 0003720 o c c u r s . ) I n t h i 0003740 s c a s e , t h e f i l e 0003760 i s e n l a r g e d , a n 0004000 d a " h o l e " i s c r 0004020 e a t e d , w h i c h c a n 0004040 l a t e r b e w r i t t e 0004060 n i n t o . N o t e t h 0004100 a t t h i s e n l a r g e m 0004120 e n t o n l y t a k e s p 0004140 l a c e a t t h e { i t 0004160 e n d } o f a f i l e ; 0004200 i t i s n o t p o s s i b 0004220 l e t o m a k e m o r e 0004240 r o o m i n t h e m i d d 0004260 l e o f a f i l e . I 0004300 n o t h e r w o r d s , i 0004320 f e x p r e s s i o n { l i 0004340 s p A } b e g i n s a t 0004360 p o s i t i o n 1 0 0 0 , a 0004400 n d e x p r e s s i o n { l 0004420 i s p B } a t 1 1 0 0 , 0004440 a n d t h e p r o g r a m 0004460 a t t e m p t s t o o v e r 0004500 w r i t e { l i s p A } w 0004520 i t h e x p r e s s i o n { 0004540 l i s p C } , w h o s e p 0004560 r i n t e d r e p r e s e n t 0004600 a t i o n i s 2 0 0 b y t 0004620 e s l o n g , p a r t o f 0004640 { l i s p B } w i l l b 0004660 e a l t e r e d . \r \r \r W a r 0004700 n i n g : F i l e p o s i 0004720 t i o n s a r e a l w a y s 0004740 i n t e r m s o f b y t 0004760 e s , n o t c h a r a c t e 0005000 r s . T h e u s e r s h 0005020 o u l d t h u s b e v e r 0005040 y c a r e f u l a b o u t 0005060 c o m p u t i n g t h e s p 0005100 a c e n e e d e d f o r a 0005120 n e x p r e s s i o n . I 0005140 n p a r t i c u l a r , { i 0005160 n d e x N S c h a r a c t e 0005200 r s } { i n d e x N S c h a 0005220 r a c t e r I / O } N S c 0005240 h a r a c t e r s m a y t a 0005260 k e m u l t i p l e b y t e 0005300 s ( s e e { P a g e R e f 0005320 T e r m N S c h a r a c t e 0005340 r I / O } ) . A l s o , 0005360 t h e { i n d e x E n d - o 0005400 f - l i n e c h a r a c t e r 0005420 } e n d - o f - l i n e c h a 0005440 r a c t e r ( s e e { P a g 0005460 e R e f T e r m E n d - o f 0005500 - l i n e c h a r a c t e r } 0005520 ) m a y b e r e p r e s e 0005540 n t e d b y a d i f f e r 0005560 e n t n u m b e r o f c h 0005600 a r a c t e r s i n d i f f 0005620 e r e n t i m p l e m e n t a 0005640 t i o n s . O u t p u t f 0005660 u n c t i o n s m a y a l s 0005700 o i n t r o d u c e e n d - 0005720 o f - l i n e ' s a s a r 0005740 e s u l t o f { f n L I N 0005760 E L E N G T H } c o n s i d e 0006000 r a t i o n s . T h e r e f 0006020 o r e { f n N C H A R S } 0006040 ( { P a g e R e f F n N C H 0006060 A R S } ) d o e s { i t n 0006100 o t } s p e c i f y h o w 0006120 m a n y b y t e s a n e x 0006140 p r e s s i o n t a k e s t 0006160 o p r i n t , e v e n i g 0006200 n o r i n g l i n e l e n g 0006220 t h c o n s i d e r a t i o n 0006240 s . \r \r \r { F n D e f { F n N 0006260 a m e G E T F I L E P T R } 0006300 { F n A r g s F I L E } \r { T 0006320 e x t \r R e t u r n s t h e 0006340 c u r r e n t p o s i t i o n 0006360 o f t h e f i l e p o i 0006400 n t e r f o r { a r g F I 0006420 L E } , i . e . , t h e b 0006440 y t e a d d r e s s a t w 0006460 h i c h t h e n e x t i n 0006500 p u t / o u t p u t o p e r a 0006520 t i o n w i l l c o m m e n 0006540 c e . \r } } \r \r \r { F n D e f 0006560 { F n N a m e S E T F I L E P 0006600 T R } { F n A r g s F I L E 0006620 A D R } \r { T e x t \r S e t s 0006640 t h e f i l e p o i n t e 0006660 r { i n d e x F i l e p o i 0006700 n t e r s } f o r { a r g 0006720 F I L E } t o t h e p o s 0006740 i t i o n { a r g A D R } ; 0006760 r e t u r n s { a r g A D 0007000 R } . T h e s p e c i a l 0007020 v a l u e { a r g A D R } 0007040 = { l i s p - 1 } i s i n 0007060 t e r p r e t e d t o m e a 0007100 n t h e a d d r e s s o f 0007120 t h e e n d o f f i l e 0007140 . \r \r N o t e : I f a f 0007160 i l e i s o p e n e d f o 0007200 r o u t p u t o n l y , t 0007220 h e e n d o f f i l e i 0007240 s i n i t i a l l y z e r o 0007260 , e v e n i f a n o l d 0007300 f i l e b y t h e s a m 0007320 e n a m e h a d e x i s t 0007340 e d ( s e e { f n O P E N 0007360 S T R E A M } , { P a g e R e 0007400 f f n O P E N S T R E A M } 0007420 ) . I f a f i l e i s 0007440 o p e n e d f o r b o t h 0007460 i n p u t a n d o u t p u 0007500 t , t h e i n i t i a l f 0007520 i l e p o i n t e r i s t 0007540 h e b e g i n n i n g o f 0007560 t h e f i l e , b u t { l 0007600 i s p ( S E T F I L E P T R 0007620 { a r g F I L E } - 1 ) } 0007640 s e t s i t t o t h e e 0007660 n d o f t h e f i l e . 0007700 I f t h e f i l e h a d 0007720 b e e n o p e n e d i n 0007740 a p p e n d m o d e b y { 0007760 l i s p ( O P E N S T R E A M 0010000 { a r g F I L E } ' A P P 0010020 E N D ) } , t h e f i l e 0010040 p o i n t e r r i g h t a f 0010060 t e r o p e n i n g w o u l 0010100 d b e s e t t o t h e 0010120 e n d o f t h e e x i s t 0010140 i n g f i l e , i n w h i 0010160 c h c a s e a { f n S E 0010200 T F I L E P T R } t o p o s 0010220 i t i o n t h e f i l e a 0010240 t t h e e n d w o u l d 0010260 b e u n n e c e s s a r y . \r 0010300 } } \r \r \r { F n D e f { F n N 0010320 a m e G E T E O F P T R } { 0010340 F n A r g s F I L E } \r { T e 0010360 x t \r R e t u r n s t h e b 0010400 y t e a d d r e s s o f t 0010420 h e e n d o f f i l e , 0010440 i . e . , t h e n u m b e r 0010460 o f b y t e s i n t h e 0010500 f i l e . E q u i v a l e 0010520 n t t o p e r f o r m i n g 0010540 { l i s p ( S E T F I L E P 0010560 T R { a r g F I L E } - 1 0010600 ) } a n d r e t u r n i n g 0010620 { l i s p ( G E T F I L E P 0010640 T R { a r g F I L E } ) } 0010660 e x c e p t t h a t i t d 0010700 o e s n o t c h a n g e t 0010720 h e c u r r e n t f i l e 0010740 p o i n t e r . \r } } \r \r \r \r { 0010760 F n D e f { F n N a m e R A 0011000 N D A C C E S S P } { F n A r 0011020 g s F I L E } \r { T e x t \r R 0011040 e t u r n s { a r g F I L E 0011060 } i f { a r g F I L E } 0011100 i s r a n d o m l y a c c e 0011120 s s i b l e , { l i s p N I 0011140 L } o t h e r w i s e . T 0011160 h e f i l e { l i s p T } 0011200 i s n o t r a n d o m l y 0011220 a c c e s s i b l e , n o r 0011240 a r e c e r t a i n n e t 0011260 w o r k f i l e c o n n e c 0011300 t i o n s i n I n t e r l i 0011320 s p - D . { a r g F I L E 0011340 } m u s t b e o p e n o 0011360 r a n e r r o r i s g e 0011400 n e r a t e d , { l i s p F 0011420 I L E N O T O P E N } { i n 0011440 d e x F I L E N O T O P E 0011460 N E r r o r } . \r } } \r \r \r { 0011500 F n D e f { F n N a m e C O 0011520 P Y B Y T E S } { F n A r g s 0011540 S R C F I L D S T F I L S 0011560 T A R T E N D } \r { T e x t \r 0011600 C o p i e s b y t e s f r o 0011620 m { a r g S R C F I L } t 0011640 o { a r g D S T F I L } , 0011660 s t a r t i n g f r o m p o 0011700 s i t i o n { a r g S T A R 0011720 T } a n d u p t o b u t 0011740 n o t i n c l u d i n g p 0011760 o s i t i o n { a r g E N D 0012000 } . B o t h { a r g S R 0012020 C F I L } a n d { a r g D 0012040 S T F I L } m u s t b e o 0012060 p e n . R e t u r n s { l 0012100 i s p T } . \r \r I f { a r g 0012120 E N D } = { l i s p N I L } 0012140 , { a r g S T A R T } i s 0012160 i n t e r p r e t e d a s 0012200 t h e n u m b e r o f b y 0012220 t e s t o c o p y ( s t a 0012240 r t i n g a t t h e c u r 0012260 r e n t p o s i t i o n ) . 0012300 I f { a r g S T A R T } 0012320 i s a l s o { l i s p N I 0012340 L } , b y t e s a r e c o 0012360 p i e d u n t i l t h e e 0012400 n d o f t h e f i l e i 0012420 s r e a c h e d . \r \r W a r n 0012440 i n g : { f n C O P Y B Y 0012460 T E S } d o e s n o t t a 0012500 k e a n y a c c o u n t o 0012520 f m u l t i - b y t e N S 0012540 c h a r a c t e r s ( { P a g 0012560 e R e f T e r m N S C h a 0012600 r a c t e r s } ) . { f n 0012620 C O P Y C H A R S } ( b e l o 0012640 w ) s h o u l d b e u s e 0012660 d w h e n e v e r c o p y i 0012700 n g i n f o r m a t i o n t 0012720 h a t m i g h t i n c l u d 0012740 e N S c h a r a c t e r s . 0012760 \r } } \r \r \r { F n D e f { F n 0013000 N a m e C O P Y C H A R S } 0013020 { F n A r g s S R C F I L D 0013040 S T F I L S T A R T E N D } 0013060 \r { T e x t \r L i k e { f n 0013100 C O P Y B Y T E S } e x c e p 0013120 t t h a t i t c o p i e s 0013140 { i n d e x N S c h a r a 0013160 c t e r s } N S c h a r a c t 0013200 e r s ( { P a g e R e f T e 0013220 r m N S C h a r a c t e r s 0013240 } ) , a n d p e r f o r m s 0013260 t h e p r o p e r c o n v 0013300 e r s i o n i f t h e e n 0013320 d - o f - l i n e c o n v e n 0013340 t i o n s o f { a r g S R 0013360 C F I L } a n d { a r g D 0013400 S T F I L } a r e n o t t 0013420 h e s a m e ( s e e { P a 0013440 g e R e f T e r m E n d - o 0013460 f - l i n e c h a r a c t e r 0013500 } ) . { a r g S T A R T } 0013520 a n d { a r g E N D } a 0013540 r e i n t e r p r e t e d t 0013560 h e s a m e a s w i t h 0013600 { f n C O P Y B Y T E S } , 0013620 i . e . , a s b y t e ( n 0013640 o t c h a r a c t e r ) s p 0013660 e c i f i c a t i o n s i n 0013700 { a r g S R C F I L } . T 0013720 h e n u m b e r o f b y t 0013740 e s a c t u a l l y o u t p 0013760 u t t o { a r g D S T F I 0014000 L } m i g h t b e m o r e 0014020 o r l e s s t h a n t h 0014040 e n u m b e r o f b y t e 0014060 s s p e c i f i e d b y { 0014100 a r g S T A R T } a n d { 0014120 a r g E N D } , d e p e n d 0014140 i n g o n w h a t t h e 0014160 e n d - o f - l i n e c o n v 0014200 e n t i o n s a r e . I n 0014220 t h e c a s e w h e r e 0014240 t h e e n d - o f - l i n e 0014260 c o n v e n t i o n s h a p p 0014300 e n t o b e t h e s a m 0014320 e , { f n C O P Y C H A R S 0014340 } s i m p l y c a l l s { 0014360 f n C O P Y B Y T E S } . \r } 0014400 } \r \r \r \r \r { i n d e x * P R 0014420 I M A R Y * S e a r c h i n g 0014440 f i l e s } \r \r \r { F n D e f 0014460 { F n N a m e F I L E P O S 0014500 } { F n A r g s P A T T E R 0014520 N F I L E S T A R T E N D 0014540 S K I P T A I L C A S E A 0014560 R R A Y } \r { T e x t \r A n a l 0014600 o g o u s t o { i n d e x 0014620 S T R P O S F N } { f n S T 0014640 R P O S } ( { P a g e R e f 0014660 F n S T R P O S } ) , b u t 0014700 s e a r c h e s a f i l e 0014720 r a t h e r t h a n a s 0014740 t r i n g . { f n F I L E 0014760 P O S } s e a r c h e s { a 0015000 r g F I L E } f o r t h e 0015020 s t r i n g { a r g P A T 0015040 T E R N } . \r S e a r c h b e 0015060 g i n s a t { a r g S T A 0015100 R T } ( o r t h e c u r r 0015120 e n t p o s i t i o n o f 0015140 t h e f i l e p o i n t e r 0015160 , i f { a r g S T A R T } 0015200 = { l i s p N I L } ) , a n 0015220 d g o e s t o { a r g E 0015240 N D } ( o r t h e e n d 0015260 o f { a r g F I L E } , i 0015300 f { a r g E N D } = { l i s 0015320 p N I L } ) . R e t u r n 0015340 s t h e a d d r e s s o f 0015360 t h e s t a r t o f t h 0015400 e m a t c h , o r { l i s 0015420 p N I L } i f n o t f o 0015440 u n d . \r \r { a r g S K I P } 0015460 c a n b e u s e d t o 0015500 s p e c i f y a c h a r a c 0015520 t e r w h i c h m a t c h e 0015540 s a n y c h a r a c t e r 0015560 i n t h e f i l e . I f 0015600 { a r g T A I L } i s { 0015620 l i s p T } , a n d t h e 0015640 s e a r c h i s s u c c e 0015660 s s f u l , t h e v a l u e 0015700 i s t h e a d d r e s s 0015720 o f t h e f i r s t c h a 0015740 r a c t e r { i t a f t e r 0015760 } t h e s e q u e n c e o 0016000 f c h a r a c t e r s c o r 0016020 r e s p o n d i n g t o { a 0016040 r g P A T T E R N } , i n s 0016060 t e a d o f t h e s t a r 0016100 t i n g a d d r e s s o f 0016120 t h e s e q u e n c e . I 0016140 n e i t h e r c a s e , t 0016160 h e f i l e i s l e f t 0016200 s o t h a t t h e n e x t 0016220 i / o o p e r a t i o n b 0016240 e g i n s a t t h e a d d 0016260 r e s s r e t u r n e d a s 0016300 t h e v a l u e o f { i 0016320 n d e x F I L E P O S F N } 0016340 { f n F I L E P O S } . \r \r { 0016360 a r g C A S E A R R A Y } s 0016400 h o u l d b e a " c a s e 0016420 a r r a y " { i n d e x C a 0016440 s e a r r a y s } t h a t 0016460 s p e c i f i e s t h a t c 0016500 e r t a i n c h a r a c t e r 0016520 s s h o u l d b e t r a n 0016540 s f o r m e d t o o t h e r 0016560 c h a r a c t e r s b e f o 0016600 r e m a t c h i n g . C a 0016620 s e a r r a y s a r e r e 0016640 t u r n e d b y { f n C A 0016660 S E A R R A Y } o r { f n 0016700 S E P R C A S E } b e l o w . 0016720 { a r g C A S E A R R A Y 0016740 } = { l i s p N I L } m e a 0016760 n s n o t r a n s f o r m a 0017000 t i o n w i l l b e p e r 0017020 f o r m e d . \r \r A c a s e 0017040 a r r a y i s a n i m p l 0017060 e m e n t a t i o n - d e p e n 0017100 d e n t o b j e c t t h a t 0017120 i s l o g i c a l l y a n 0017140 a r r a y o f c h a r a c 0017160 t e r c o d e s w i t h o 0017200 n e e n t r y f o r e a c 0017220 h p o s s i b l e c h a r a 0017240 c t e r . { f n F I L E P 0017260 O S } m a p s e a c h c h 0017300 a r a c t e r i n t h e f 0017320 i l e " t h r o u g h " { a 0017340 r g C A S E A R R A Y } i n 0017360 t h e s e n s e t h a t 0017400 e a c h c h a r a c t e r c 0017420 o d e i s t r a n s f o r m 0017440 e d i n t o t h e c o r r 0017460 e s p o n d i n g c h a r a c 0017500 t e r c o d e f r o m { a 0017520 r g C A S E A R R A Y } b e 0017540 f o r e m a t c h i n g . 0017560 T h u s i f t w o c h a r 0017600 a c t e r s m a p i n t o 0017620 t h e s a m e v a l u e , 0017640 t h e y a r e t r e a t e d 0017660 a s e q u i v a l e n t b 0017700 y { f n F I L E P O S } . 0017720 { f n C A S E A R R A Y } 0017740 a n d { f n S E T C A S E A 0017760 R R A Y } p r o v i d e a n 0020000 i m p l e m e n t a t i o n - 0020020 i n d e p e n d e n t i n t e 0020040 r f a c e t o c a s e a r 0020060 r a y s . \r \r \r F o r e x 0020100 a m p l e , t o s e a r c h 0020120 w i t h o u t r e g a r d 0020140 t o u p p e r a n d l o w 0020160 e r c a s e d i f f e r e n 0020200 c e s , { a r g C A S E A R 0020220 R A Y } w o u l d b e a 0020240 c a s e a r r a y w h e r e 0020260 a l l c h a r a c t e r s 0020300 m a p t o t h e m s e l v e 0020320 s , e x c e p t f o r l o 0020340 w e r c a s e c h a r a c t 0020360 e r s , w h o s e c o r r e 0020400 s p o n d i n g e l e m e n t 0020420 s w o u l d b e t h e u 0020440 p p e r c a s e c h a r a c 0020460 t e r s . T o s e a r c h 0020500 f o r a d e l i m i t e d 0020520 a t o m , o n e c o u l d 0020540 u s e " { a r g A T O M 0020560 } " a s t h e p a t t e 0020600 r n , a n d s p e c i f y 0020620 a c a s e a r r a y i n 0020640 w h i c h a l l o f t h e 0020660 b r e a k a n d s e p a r 0020700 a t o r c h a r a c t e r s 0020720 m a p p e d i n t o t h e 0020740 s a m e c o d e a s s p a 0020760 c e . \r } } \r \r \r F o r a p p 0021000 l i c a t i o n s c a l l i n 0021020 g f o r e x t e n s i v e 0021040 f i l e s e a r c h e s , t 0021060 h e f u n c t i o n { f n 0021100 F F I L E P O S } i s o f t 0021120 e n f a s t e r t h a n { 0021140 f n F I L E P O S } . \r \r { F 0021160 n D e f { F n N a m e F F I 0021200 L E P O S } { F n A r g s P 0021220 A T T E R N F I L E S T A R 0021240 T E N D S K I P T A I L 0021260 C A S E A R R A Y } \r { T e x t 0021300 \r L i k e { f n F I L E P O 0021320 S } , e x c e p t m u c h 0021340 f a s t e r i n m o s t a 0021360 p p l i c a t i o n s . { f 0021400 n F F I L E P O S } i s a 0021420 n i m p l e m e n t a t i o n 0021440 o f t h e B o y e r - M o 0021460 o r e f a s t s t r i n g 0021500 s e a r c h i n g a l g o r i 0021520 t h m { i n d e x B o y e r - 0021540 M o o r e f a s t s t r i n 0021560 g s e a r c h i n g a l g o 0021600 r i t h m } . T h i s a l 0021620 g o r i t h m p r e p r o c e 0021640 s s e s t h e s t r i n g 0021660 b e i n g s e a r c h e d f 0021700 o r a n d t h e n s c a n 0021720 s t h r o u g h t h e f i 0021740 l e i n s t e p s u s u a 0021760 l l y e q u a l t o t h e 0022000 l e n g t h o f t h e s 0022020 t r i n g . T h u s , { f 0022040 n F F I L E P O S } s p e e 0022060 d s u p r o u g h l y i n 0022100 p r o p o r t i o n t o t 0022120 h e l e n g t h o f t h e 0022140 s t r i n g , e . g . , a 0022160 s t r i n g o f l e n g t 0022200 h 1 0 w i l l b e f o u 0022220 n d t w i c e a s f a s t 0022240 a s a s t r i n g o f 0022260 l e n g t h 5 i n t h e 0022300 s a m e p o s i t i o n . \r \r 0022320 B e c a u s e o f c e r t a 0022340 i n f i x e d o v e r h e a 0022360 d s , i t i s g e n e r a 0022400 l l y b e t t e r t o u s 0022420 e { f n F I L E P O S } f 0022440 o r s h o r t s e a r c h e 0022460 s o r s h o r t s t r i n 0022500 g s . \r } } \r \r \r { F n D e f 0022520 { N a m e C A S E A R R A Y } 0022540 { A r g s O L D A R R A Y } 0022560 \r { T e x t \r C r e a t e s a 0022600 n d r e t u r n s a n e w 0022620 c a s e a r r a y , w i t 0022640 h a l l e l e m e n t s s 0022660 e t t o t h e m s e l v e s 0022700 , t o i n d i c a t e t h 0022720 e i d e n t i t y m a p p i 0022740 n g . I f { a r g O L D 0022760 A R R A Y } i s g i v e n , 0023000 i t i s r e u s e d . \r } 0023020 } \r \r \r { F n D e f { N a m e 0023040 S E T C A S E A R R A Y } { 0023060 A r g s C A S E A R R A Y F 0023100 R O M C O D E T O C O D E } \r 0023120 { T e x t \r M o d i f i e s t 0023140 h e c a s e a r r a y { a 0023160 r g C A S E A R R A Y } s o 0023200 t h a t c h a r a c t e r 0023220 c o d e { a r g F R O M C O 0023240 D E } i s m a p p e d t o 0023260 c h a r a c t e r c o d e 0023300 { a r g T O C O D E } . \r } } 0023320 \r \r \r { F n D e f { N a m e 0023340 G E T C A S E A R R A Y } { A 0023360 r g s C A S E A R R A Y F R 0023400 O M C O D E } \r { T e x t \r R e 0023420 t u r n s t h e c h a r a c 0023440 t e r c o d e t h a t { a 0023460 r g F R O M C O D E } i s 0023500 m a p p e d t o i n { a r 0023520 g C A S E A R R A Y } . \r } } 0023540 \r \r \r { F n D e f { F n N a m 0023560 e S E P R C A S E } { F n A 0023600 r g s C L F L G } \r { T e x t 0023620 \r R e t u r n s a n e w c 0023640 a s e a r r a y s u i t a b 0023660 l e f o r u s e b y { f 0023700 n F I L E P O S } o r { f 0023720 n F F I L E P O S } i n w 0023740 h i c h a l l o f t h e 0023760 b r e a k / s e p a r a t o r s 0024000 o f { v a r F I L E R D T 0024020 B L } a r e m a p p e d i 0024040 n t o c h a r a c t e r c o 0024060 d e z e r o . I f { a r 0024100 g C L F L G } i s n o n - 0024120 { l i s p N I L } , t h e n 0024140 a l l C L I S P c h a r a 0024160 c t e r s a r e m a p p e d 0024200 i n t o t h i s c h a r a 0024220 c t e r a s w e l l . T 0024240 h i s i s u s e f u l f o 0024260 r f i n d i n g a d e l i 0024300 m i t e d a t o m i n a 0024320 f i l e . F o r e x a m p 0024340 l e , i f { a r g P A T T 0024360 E R N } i s { l i s p " 0024400 F O O " } , a n d { l i s 0024420 p ( S E P R C A S E T ) } 0024440 i s u s e d f o r { a r g 0024460 C A S E A R R A Y } , t h e 0024500 n { f n F I L E P O S } w 0024520 i l l f i n d { l i s p " 0024540 ( F O O _ " } . \r } } \r \r \r { V 0024560 a r D e f { N a m e U P P E 0024600 R C A S E A R R A Y } \r { T e x 0024620 t \r V a l u e i s a c a s 0024640 e a r r a y i n w h i c h 0024660 e v e r y l o w e r c a s e 0024700 c h a r a c t e r i s m a 0024720 p p e d i n t o t h e c o 0024740 r r e s p o n d i n g u p p e 0024760 r c a s e c h a r a c t e r . 0025000 U s e f u l f o r s e a 0025020 r c h i n g t e x t f i l e 0025040 s . \r } } \r \r \r \r } { E n d S 0025060 u b S e c R a n d o m A c c 0025100 e s s F i l e O p e r a t i 0025120 o n s } \r \r \r \r \r { B e g i n 0025140 S u b S e c I n p u t / O u t 0025160 p u t O p e r a t i o n s w 0025200 i t h C h a r a c t e r s a 0025220 n d B y t e s } \r { T i t l e 0025240 I n p u t / O u t p u t O p 0025260 e r a t i o n s w i t h C h 0025300 a r a c t e r s a n d B y t 0025320 e s } \r { T e x t \r \r { i n d e 0025340 x * P R I M A R Y * C h a r 0025360 a c t e r I / O } \r { i n d e 0025400 x * P R I M A R Y * N S c 0025420 h a r a c t e r I / O } \r \r I 0025440 n t e r l i s p - D s u p p o 0025460 r t s t h e 1 6 - b i t N 0025500 S c h a r a c t e r s e t 0025520 ( s e e { P a g e R e f T e 0025540 r m N S c h a r a c t e r s 0025560 } ) . A l l o f t h e 0025600 s t a n d a r d s t r i n g 0025620 a n d p r i n t n a m e f 0025640 u n c t i o n s a c c e p t 0025660 l i t a t o m s a n d s t r 0025700 i n g s c o n t a i n i n g 0025720 N S c h a r a c t e r s . 0025740 I n a l m o s t a l l c a 0025760 s e s , a p r o g r a m d 0026000 o e s n o t h a v e t o 0026020 d i s t i n g u i s h b e t w 0026040 e e n N S c h a r a c t e r 0026060 s o r 8 - b i t c h a r a 0026100 c t e r s . T h e e x c e 0026120 p t i o n t o t h i s r u 0026140 l e i s t h e h a n d l i 0026160 n g o f i n p u t / o u t p 0026200 u t o p e r a t i o n s . \r \r 0026220 { i n d e x C h a r a c t e r 0026240 s e t s } \r { i n d e x * P 0026260 R I M A R Y * R u n - e n c o 0026300 d i n g o f N S c h a r a 0026320 c t e r s } \r \r I n t e r l i s 0026340 p - D u s e s t w o w a y 0026360 s o f w r i t i n g 1 6 - 0026400 b i t N S c h a r a c t e r 0026420 s o n f i l e s . O n e 0026440 w a y i s t o w r i t e 0026460 t h e f u l l 1 6 - b i t 0026500 s ( t w o b y t e s ) e v 0026520 e r y t i m e a c h a r a 0026540 c t e r i s o u t p u t . 0026560 T h e o t h e r w a y i 0026600 s t o u s e " r u n - e n 0026620 c o d i n g . " E a c h 1 0026640 6 N S c h a r a c t e r c 0026660 a n b e d e c o d e d i n 0026700 t o a c h a r a c t e r s 0026720 e t ( a n i n t e g e r f 0026740 r o m 0 t o 2 5 4 i n c 0026760 l u s i v e ) a n d a c h 0027000 a r a c t e r n u m b e r ( 0027020 a l s o a n i n t e g e r 0027040 f r o m 0 t o 2 5 4 i n 0027060 c l u s i v e ) . I n r u 0027100 n - e n c o d i n g , t h e 0027120 b y t e 2 5 5 ( i l l e g a 0027140 l a s e i t h e r a c h 0027160 a r a c t e r s e t n u m b 0027200 e r o r a c h a r a c t e 0027220 r n u m b e r ) i s u s e 0027240 d t o s i g n a l a c h 0027260 a n g e t o a g i v e n 0027300 c h a r a c t e r s e t , a 0027320 n d t h e f o l l o w i n g 0027340 b y t e s a r e a l l a 0027360 s s u m e d t o c o m e f 0027400 r o m t h e s a m e c h a 0027420 r a c t e r s e t ( u n t i 0027440 l t h e n e x t c h a n g 0027460 e - c h a r a c t e r s e t 0027500 s e q u e n c e ) . R u n - 0027520 e n c o d i n g c a n r e d 0027540 u c e t h e n u m b e r o 0027560 f b y t e s r e q u i r e d 0027600 t o e n c o d e a s t r 0027620 i n g o f N S c h a r a c 0027640 t e r s , a s l o n g a s 0027660 t h e r e a r e l o n g 0027700 s e q u e n c e s o f c h a 0027720 r a c t e r s f r o m t h e 0027740 s a m e c h a r a c t e r 0027760 s e t ( u s u a l l y t h e 0030000 c a s e ) . \r \r \r { i t N o 0030020 t e t h a t c h a r a c t e 0030040 r s a r e n o t t h e s 0030060 a m e a s b y t e s . } 0030100 A s i n g l e c h a r a c t 0030120 e r c a n t a k e a n y w 0030140 h e r e f r o m o n e t o 0030160 f o u r b y t e s b y t e 0030200 s , d e p e n d i n g o n 0030220 w h e t h e r i t i s i n 0030240 t h e s a m e c h a r a c 0030260 t e r s e t a s t h e p 0030300 r e c e e d i n g c h a r a c 0030320 t e r , a n d w h e t h e r 0030340 r u n - e n c o d i n g i s 0030360 e n a b l e d . P r o g r 0030400 a m s w h i c h a s s u m e 0030420 t h a t c h a r a c t e r s 0030440 a r e e q u a l t o b y 0030460 t e s m u s t b e c h a n 0030500 g e d t o w o r k w i t h 0030520 N S c h a r a c t e r s . \r 0030540 \r T h e f u n c t i o n s { 0030560 f n B I N } ( { P a g e R e 0030600 f F n B I N } ) a n d { 0030620 f n B O U T } ( { P a g e R 0030640 e f F n B O U T } ) s h o 0030660 u l d o n l y b e u s e d 0030700 t o r e a d a n d w r i 0030720 t e s i n g l e e i g h t - 0030740 b i t b y t e s . T h e 0030760 f u n c t i o n s { f n R E 0031000 A D C C O D E } ( { P a g e R 0031020 e f F n R E A D C C O D E } 0031040 ) a n d { f n P R I N T C C 0031060 O D E } ( { P a g e R e f F 0031100 n P R I N T C C O D E } ) s 0031120 h o u l d b e u s e d t o 0031140 r e a d a n d w r i t e 0031160 s i n g l e c h a r a c t e r 0031200 c o d e s , i n t e r p r e 0031220 t i n g r u n - e n c o d e d 0031240 N S c h a r a c t e r s . 0031260 { f n C O P Y B Y T E S } 0031300 ( { P a g e R e f F n C O P 0031320 Y B Y T E S } ) s h o u l d 0031340 o n l y b e u s e d t o 0031360 c o p y b l o c k s o f 8 0031400 - b i t d a t a ; { f n C 0031420 O P Y C H A R S } s h o u l d 0031440 b e u s e d t o c o p y 0031460 c h a r a c t e r s . M o 0031500 s t I / O f u n c t i o n s 0031520 ( { f n R E A D C } , { f 0031540 n P R I N 1 } , e t c . ) 0031560 r e a d o r w r i t e 1 6 0031600 - b i t N S c h a r a c t e 0031620 r s . \r \r { i n d e x F i l e 0031640 p o i n t e r s } \r \r T h e 0031660 u s e o f N S c h a r a c 0031700 t e r s h a s s e r i o u s 0031720 c o n s e q u e n c e s f o 0031740 r a n y p r o g r a m t h 0031760 a t u s e s f i l e p o i 0032000 n t e r s t o a c c e s s 0032020 a f i l e i n a r a n d 0032040 o m a c c e s s m a n n e r 0032060 . A t a n y p o i n t 0032100 w h e n a f i l e i s b 0032120 e i n g r e a d o r w r i 0032140 t t e n , i t h a s a " 0032160 c u r r e n t c h a r a c t e 0032200 r s e t . " I f t h e 0032220 f i l e p o i n t e r i s 0032240 c h a n g e d w i t h { f n 0032260 S E T F I L E P T R } ( { P 0032300 a g e R e f F n S E T F I L 0032320 E P T R } ) t o a p a r t 0032340 o f t h e f i l e w i t 0032360 h a d i f f e r e n t c h 0032400 a r a c t e r s e t , a n y 0032420 c h a r a c t e r s r e a d 0032440 o r w r i t t e n m a y 0032460 h a v e t h e w r o n g c 0032500 h a r a c t e r s e t . T 0032520 h e c u r r e n t c h a r a 0032540 c t e r s e t c a n b e 0032560 a c c e s s e d w i t h t h 0032600 e f o l l o w i n g f u n c 0032620 t i o n : \r \r { F n D e f { N 0032640 a m e C H A R S E T } { A r 0032660 g s S T R E A M C H A R A C 0032700 T E R S E T } \r { T e x t \r R e 0032720 t u r n s t h e c u r r e n 0032740 t c h a r a c t e r s e t 0032760 o f t h e s t r e a m { a 0033000 r g S T R E A M } . I f 0033020 { a r g C H A R A C T E R S E 0033040 T } i s n o n - { l i s p 0033060 N I L } , t h e c u r r e n 0033100 t c h a r a c t e r s e t 0033120 f o r { a r g S T R E A M } 0033140 i s s e t . N o t e t 0033160 h a t f o r o u t p u t s 0033200 t r e a m s t h i s m a y 0033220 c a u s e b y t e s t o b 0033240 e w r i t t e n t o t h e 0033260 s t r e a m . \r \r I f { a r 0033300 g C H A R A C T E R S E T } 0033320 i s { l i s p T } , r u n 0033340 e n c o d i n g f o r { a 0033360 r g S T R E A M } i s d i 0033400 s a b l e d : b o t h t h e 0033420 c h a r a c t e r s e t a 0033440 n d t h e c h a r a c t e r 0033460 n u m b e r ( t w o b y t 0033500 e s t o t a l ) w i l l b 0033520 e w r i t t e n t o t h e 0033540 s t r e a m f o r e a c h 0033560 c h a r a c t e r p r i n t 0033600 e d . \r } } \r \r \r } { E n d 0033620 S u b S e c I n p u t / O u 0033640 t p u t O p e r a t i o n s 0033660 w i t h C h a r a c t e r s 0033700 a n d B y t e s } \r \r \0 \0 \0 \0 0033720 \0 005 \0 002 \0 ( \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0033740 \0 \0 002 001 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0033760 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 ( \0 \0 0034000 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 002 001 \0 \0 \0 \0 0034020 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 0034040 \0 \0 \0 \0 \0 \0 \0 \0 \0 004 \0 002 \0 ? \0 1 0034060 ( D E F A U L T F O N T 1 ( 0034100 G A C H A 1 0 ) ( G A C H A 0034120 8 ) ( T E R M I N A L 8 ) 0034140 ) \0 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 ? \0 1 ( 0034160 D E F A U L T F O N T 1 ( G 0034200 A C H A 1 0 ) ( G A C H A 0034220 8 ) ( T E R M I N A L 8 ) ) 0034240 \0 \n \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 002 0034260 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 0034300 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 0034320 \0 002 \0 002 \0 \0 \0 - \0 \0 \0 \0 002 \0 \0 \0 0034340 \0 \0 002 \0 002 \0 \0 \0 & \0 \0 \0 \0 002 \0 \0 0034360 \0 \0 \0 002 \0 002 \0 \0 \0 006 \0 \0 \0 \0 002 \0 0034400 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 0034420 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 , \0 \0 \0 \0 0034440 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 017 \0 \0 \0 0034460 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 0034500 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 003 030 \0 0034520 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 0034540 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 0034560 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 0034600 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 0034620 \0 005 351 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 0034640 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 0034660 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 0034700 \0 002 \0 \0 002 346 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 0034720 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 0034740 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 0034760 \0 \0 002 \0 002 \0 \0 \0 ) \0 \0 \0 \0 002 \0 \0 0035000 \0 \0 \0 002 \0 002 \0 \0 \0 006 \0 \0 \0 \0 002 \0 0035020 \0 \0 \0 \0 002 \0 002 \0 \0 \0 220 \0 \0 \0 \0 002 0035040 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 003 \0 \0 \0 \0 0035060 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 0035100 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 0035120 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 - \0 0035140 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 006 0035160 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 0035200 306 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 0035220 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 0035240 \0 002 ] \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 0035260 \0 \0 \0 003 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 0035300 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 0035320 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 0035340 002 \0 002 \0 \0 \0 ( \0 \0 \0 \0 002 \0 \0 \0 \0 0035360 \0 002 \0 002 \0 \0 \0 006 \0 \0 \0 \0 002 \0 \0 \0 0035400 \0 \0 002 \0 002 \0 \0 \0 366 \0 \0 \0 \0 002 \0 \0 0035420 \0 \0 \0 002 \0 002 \0 \0 \0 003 \0 \0 \0 \0 002 \0 0035440 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 0035460 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 0035500 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 0035520 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 * \0 \0 0035540 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 006 \0 0035560 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 001 033 0035600 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 0035620 003 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 0035640 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 0035660 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 0035700 \0 \0 \0 ; \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 0035720 002 \0 \0 \0 006 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 0035740 \0 002 \0 \0 \0 310 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 0035760 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 0036000 \0 002 \0 002 \0 \0 \0 322 \0 \0 \0 \0 002 \0 \0 \0 0036020 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 0036040 \0 \0 \0 002 \0 002 \0 \0 \0 325 \0 \0 \0 \0 002 \0 0036060 \0 \0 \0 \0 002 \0 002 \0 \0 \0 003 \0 \0 \0 \0 002 0036100 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 0036120 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 0036140 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 ; \0 \0 0036160 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 006 \0 0036200 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 002 310 0036220 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 0036240 003 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 0036260 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 0036300 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 0036320 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 0036340 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 0036360 \0 002 \0 \0 \0 " \0 \0 \0 \0 002 \0 \0 \0 \0 \0 0036400 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 0036420 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 0036440 \0 \0 002 \0 002 \0 \0 \0 L \0 \0 \0 \0 002 \0 \0 0036460 \0 \0 \0 002 \0 002 \0 \0 \0 006 \0 \0 \0 \0 002 \0 0036500 \0 \0 \0 \0 002 \0 002 \0 \0 \0 253 \0 \0 \0 \0 002 0036520 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 376 \0 \0 \0 \0 0036540 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 0036560 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 001 310 \0 \0 0036600 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 0036620 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 001 ) 0036640 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 0036660 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 0036700 002 037 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 0036720 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 0036740 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 0036760 002 \0 \0 001 272 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 0037000 \0 002 \0 \0 \0 003 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 0037020 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 0037040 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 0037060 \0 \0 002 \0 002 \0 \0 \0 t \0 \0 \0 \0 002 \0 \0 0037100 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 0037120 \0 \0 \0 \0 002 \0 002 \0 \0 \0 M \0 \0 \0 \0 002 0037140 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 006 \0 \0 \0 \0 0037160 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 002 016 \0 \0 \0 0037200 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 0037220 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 t \0 0037240 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 003 0037260 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 0037300 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 0037320 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 0037340 \0 \0 ( \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 0037360 \0 \0 \0 006 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 0037400 002 \0 \0 \0 230 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 0037420 \0 002 \0 \0 \0 003 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 0037440 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 0037460 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 0037500 \0 \0 002 \0 002 \0 \0 \0 < \0 \0 \0 \0 002 \0 \0 0037520 \0 \0 \0 002 \0 002 \0 \0 \0 006 \0 \0 \0 \0 002 \0 0037540 \0 \0 \0 \0 002 \0 002 \0 \0 \0 x \0 \0 \0 \0 002 0037560 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 003 \0 \0 \0 \0 0037600 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 0037620 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 0037640 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 5 \0 0037660 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 006 0037700 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 0037720 P \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 0037740 \0 003 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 0037760 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 0040000 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 0040020 002 \0 \0 \0 ( \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 0040040 \0 002 \0 \0 \0 006 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 0040060 002 \0 002 \0 \0 001 330 \0 \0 \0 \0 002 \0 \0 \0 \0 0040100 \0 002 \0 002 \0 \0 \0 003 \0 \0 \0 \0 002 \0 \0 \0 0040120 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 0040140 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 0040160 \0 \0 \0 \0 002 \0 002 \0 \0 \0 036 \0 \0 \0 \0 002 0040200 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 006 \0 \0 \0 \0 0040220 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 221 \0 \0 \0 0040240 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 003 \0 \0 0040260 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 0040300 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 0040320 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 0040340 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 0040360 \0 , \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 0040400 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 0040420 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 0040440 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 0040460 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 0040500 002 \0 002 \0 \0 \0 A \0 \0 \0 \0 002 \0 \0 \0 \0 0040520 \0 002 \0 002 \0 \0 \0 : \0 \0 \0 \0 002 \0 \0 \0 0040540 \0 \0 002 \0 002 \0 \0 \0 006 \0 \0 \0 \0 002 \0 \0 0040560 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 0040600 \0 \0 \0 \0 002 \0 002 \0 \0 \0 \0 \0 \0 \0 002 0040620 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 # \0 \0 \0 \0 0040640 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 0040660 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 001 p \0 \0 0040700 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 0040720 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 027 0040740 \0 \0 \0 \0 001 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 0040760 0 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 0041000 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 \0 0041020 \0 003 0 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 002 0041040 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 0041060 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 0041100 \0 002 \0 \0 001 V \0 \0 \0 \0 002 \0 \0 \0 \0 \0 0041120 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 0041140 \0 002 \0 002 \0 \0 002 3 \0 \0 \0 \0 002 \0 \0 \0 0041160 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 0041200 \0 \0 \0 002 \0 002 \0 \0 \0 026 \0 \0 \0 \0 002 \0 0041220 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 0041240 \0 \0 \0 \0 \0 002 \0 002 \0 \0 001 352 \0 \0 \0 \0 0041260 002 \0 \0 \0 \0 \0 002 \0 002 \0 \0 \0 001 \0 \0 \0 0041300 \0 002 \0 \0 \0 \0 \0 002 \0 001 \0 \0 \0 1 \0 \0 0041320 \0 \0 001 \0 \0 \0 \0 \0 002 \0 001 \0 \0 \0 006 \0 0041340 \0 \0 \0 001 \0 \0 \0 \0 \0 002 \0 001 \0 \0 \0 353 0041360 \0 \0 \0 \0 001 \0 \0 \0 \0 \0 002 \0 001 \0 \0 \0 0041400 001 \0 \0 \0 \0 001 \0 \0 \0 \0 \0 002 \0 001 \0 \0 0041420 \0 314 \0 \0 \0 \0 001 \0 \0 \0 \0 \0 002 \0 001 \0 0041440 \0 \0 003 \0 \0 \0 \0 001 \0 \0 \0 \0 \0 002 \0 002 0041460 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 \0 0041500 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 \0 002 0041520 \0 002 \0 \0 \0 @ \0 \0 \0 \0 002 \0 \0 \0 \0 \0 0041540 002 \0 002 \0 \0 \0 001 \0 \0 \0 \0 002 \0 \0 \0 \0 0041560 \0 002 \0 002 \0 \0 7 314 001 E z 272 0041574