ewe 0.1.0.46 → 0.3.1.1
raw patch · 10 files changed
+294/−3644 lines, 10 filesdep +uuagc-cabalbuild-type:Custom
Dependencies added: uuagc-cabal
Files
- app/Main.hs +134/−0
- dist/build/ewe/ewe-tmp/Language/EWE/Parser.hs +0/−872
- dist/build/ewe/ewe-tmp/Language/EWE/Scanner.hs +0/−582
- ewe.cabal +25/−10
- src-ag/Language/EWE/PPProg.ag +129/−0
- src/Language/EWE/AbsSyn.hs +0/−181
- src/Language/EWE/CheckGrammar.hs +0/−1853
- src/Language/EWE/Parser.y +1/−1
- src/Language/EWE/VM.hs +5/−11
- src/Main.hs +0/−134
+ app/Main.hs view
@@ -0,0 +1,134 @@+module Main where++import Paths_ewe (version)+import System.Environment(getArgs)+import System.IO(openFile, hClose, IOMode(..), hGetContents, stdin, stdout+ ,stderr, hPutStr, hPutStrLn)+import System.Exit(ExitCode(..),exitSuccess)+import Data.Version(Version(..), showVersion)+import System.Exit(exitSuccess)+import System.Console.GetOpt+import Text.PrettyPrint(Doc(..),render,empty)+import Data.Maybe(fromMaybe)+import Control.Monad(when)+import Language.EWE.Token+import Language.EWE.TokenUtils+import Language.EWE.Scanner+import Language.EWE.Parser+import Language.EWE.AbsSyn+import Language.EWE.VM(runVM,execVM)+import Language.EWE.CheckGrammar++data Options = Options { optShowVersion :: Bool+ , optShowHelp :: Bool+ , optNoExec :: Bool+ , optScanOut :: Bool+ , optParserOut :: Bool+ , optDebug :: Bool+ } deriving Show++defaultOptions :: Options+defaultOptions = Options { optShowVersion = False+ , optShowHelp = False+ , optNoExec = True+ , optScanOut = False+ , optParserOut = False+ , optDebug = False+ }++options :: [OptDescr (Options -> Options)]+options =+ [ Option ['v'] ["version"]+ (NoArg (\opts -> opts { optShowVersion = True }))+ "shows a version number and quits "+ , Option ['h', '?'] ["help"]+ (NoArg (\opts -> opts { optShowHelp = True }))+ "shows help menu and quits"+ , Option ['n'] ["noexec"]+ (NoArg (\opts -> opts { optNoExec = False }))+ "not execute the current file with ewe-vm"+ , Option ['p'] ["parser"]+ (NoArg (\opts -> opts { optParserOut = True }))+ "shows parser info"+ , Option ['s'] ["scanner"]+ (NoArg (\opts -> opts { optScanOut = True }))+ "shows scan info"+ , Option ['d'] ["debug"]+ (NoArg (\opts -> opts { optDebug = True }))+ "shows debug info"+ ]++compilerOpts :: [String] -> IO (Options, [String])+compilerOpts argv =+ case getOpt Permute options argv of+ (o,n,[]) -> return (foldl (flip id) defaultOptions o,n)+ (_,_,errs) -> ioError (userError (concat errs ++ usageInfo header options))+ where header = "Usage: ewe [OPTION...] files..."++showScannerOutput :: Either String Tkns -> IO ()+showScannerOutput scanout =+ case scanout of+ Left err -> hPutStrLn stderr $ "Scanner error: " ++ show err+ Right tkns -> hPutStrLn stdout $ ppTokens tkns++showParserOutput :: (Bool,(String,Doc)) -> IO ()+showParserOutput (False,(msg,_)) =+ do hPutStrLn stderr $ show msg+showParserOutput (True,(_,doc)) =+ do hPutStrLn stdout $ render doc++showHelp :: IO ()+showHelp = do+ mapM_ (hPutStrLn stderr) (lines $ usageInfo header options)+ exitSuccess+ where header = "Usage: ewe [OPTION...] files..."++execProg :: Options -> Bool -> Either String Prog -> IO ()+execProg _ True _ = return ()+execProg opts False (Right prog) = do+ r <- execVM prog+ return ()+ when (optDebug opts) (hPutStrLn stdout $ show r)+execProg _ False _ = return ()++processFile :: Options -> FilePath -> IO ()+processFile opts fp = do+ when (optDebug opts) (hPutStrLn stdout $ "Processing file: " ++ fp)+ fh <- openFile fp ReadMode+ s <- hGetContents fh+ let scanout = runAlex s alexExec+ pRes = pEWE s+ errorParser = either (\_ -> True) (\_ -> False) pRes+ ckg@(passGrammar,(errGram,doc)) = either (\_ -> (False,([],empty))) checkGrammar pRes+ when (optScanOut opts) (showScannerOutput scanout)+ when (optParserOut opts) (showParserOutput ckg)+ when (not passGrammar) (showErrorGrammar errGram)+ when (optNoExec opts && passGrammar) (execProg opts errorParser pRes)+ hClose fh++showErrorGrammar :: String -> IO ()+showErrorGrammar msg = do+ hPutStrLn stderr $ show msg++checkGrammar :: Prog -> (Bool,(String,Doc))+checkGrammar prog = let inh = Inh_Prog+ syn = wrap_Prog (sem_Prog prog) inh+ in case (res_Syn_Prog syn) of+ Left msg -> (False, (msg, empty))+ Right () -> (True, ([], pp_Syn_Prog syn))++processStaticOptions :: Options -> IO ()+processStaticOptions opts =+ if optShowVersion opts+ then do hPutStrLn stdout $ "ewe version: " ++ (showVersion version)+ exitSuccess+ else if optShowHelp opts+ then showHelp+ else return ()++main :: IO ()+main = do+ (opts, fls) <- (getArgs >>= compilerOpts)+ processStaticOptions opts+ mapM_ (processFile opts) fls+ return ()
− dist/build/ewe/ewe-tmp/Language/EWE/Parser.hs
@@ -1,872 +0,0 @@-{-# OPTIONS_GHC -w #-}-{-# OPTIONS -fglasgow-exts -cpp #-}-{-# OPTIONS -w #-}-module Language.EWE.Parser(pEWE) where--import Language.EWE.Token(Tkns,Tkn(..), Tkn_(..))-import Language.EWE.Scanner-import Language.EWE.AbsSyn-import qualified Data.Array as Happy_Data_Array-import qualified GHC.Exts as Happy_GHC_Exts-import Control.Applicative(Applicative(..))-import Control.Monad (ap)---- parser produced by Happy Version 1.19.5--newtype HappyAbsSyn t4 t5 t6 t7 t8 t9 t10 = HappyAbsSyn HappyAny-#if __GLASGOW_HASKELL__ >= 607-type HappyAny = Happy_GHC_Exts.Any-#else-type HappyAny = forall a . a-#endif-happyIn4 :: t4 -> (HappyAbsSyn t4 t5 t6 t7 t8 t9 t10)-happyIn4 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn4 #-}-happyOut4 :: (HappyAbsSyn t4 t5 t6 t7 t8 t9 t10) -> t4-happyOut4 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut4 #-}-happyIn5 :: t5 -> (HappyAbsSyn t4 t5 t6 t7 t8 t9 t10)-happyIn5 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn5 #-}-happyOut5 :: (HappyAbsSyn t4 t5 t6 t7 t8 t9 t10) -> t5-happyOut5 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut5 #-}-happyIn6 :: t6 -> (HappyAbsSyn t4 t5 t6 t7 t8 t9 t10)-happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn6 #-}-happyOut6 :: (HappyAbsSyn t4 t5 t6 t7 t8 t9 t10) -> t6-happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut6 #-}-happyIn7 :: t7 -> (HappyAbsSyn t4 t5 t6 t7 t8 t9 t10)-happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn7 #-}-happyOut7 :: (HappyAbsSyn t4 t5 t6 t7 t8 t9 t10) -> t7-happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut7 #-}-happyIn8 :: t8 -> (HappyAbsSyn t4 t5 t6 t7 t8 t9 t10)-happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn8 #-}-happyOut8 :: (HappyAbsSyn t4 t5 t6 t7 t8 t9 t10) -> t8-happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut8 #-}-happyIn9 :: t9 -> (HappyAbsSyn t4 t5 t6 t7 t8 t9 t10)-happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn9 #-}-happyOut9 :: (HappyAbsSyn t4 t5 t6 t7 t8 t9 t10) -> t9-happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut9 #-}-happyIn10 :: t10 -> (HappyAbsSyn t4 t5 t6 t7 t8 t9 t10)-happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn10 #-}-happyOut10 :: (HappyAbsSyn t4 t5 t6 t7 t8 t9 t10) -> t10-happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut10 #-}-happyInTok :: (Tkn) -> (HappyAbsSyn t4 t5 t6 t7 t8 t9 t10)-happyInTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyInTok #-}-happyOutTok :: (HappyAbsSyn t4 t5 t6 t7 t8 t9 t10) -> (Tkn)-happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOutTok #-}---happyActOffsets :: HappyAddr-happyActOffsets = HappyA# "\xfe\xff\xfe\xff\x5f\x00\xfe\xff\x00\x00\x66\x00\x64\x00\x5e\x00\x63\x00\x62\x00\x61\x00\x60\x00\x5b\x00\x36\x00\x0a\x00\x00\x00\x00\x00\x4c\x00\x12\x00\x00\x00\x5d\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x05\x00\x0a\x00\xfe\xff\x09\x00\x00\x00\x00\x00\x5c\x00\x5a\x00\x03\x00\x00\x00\x00\x00\x59\x00\x53\x00\x00\x00\x00\x00\x58\x00\x4f\x00\x57\x00\x55\x00\x50\x00\x52\x00\x56\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x54\x00\x05\x00\x51\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x4e\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x4b\x00\x4a\x00\x34\x00\x33\x00\x00\x00\x47\x00\x49\x00\x46\x00\x1a\x00\x44\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--happyGotoOffsets :: HappyAddr-happyGotoOffsets = HappyA# "\x02\x00\x2c\x00\x45\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x00\x00\x00\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x00\x41\x00\x40\x00\x3f\x00\x3e\x00\x3d\x00\x30\x00\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x00\x00\x38\x00\x37\x00\x35\x00\x2b\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--happyDefActions :: HappyAddr-happyDefActions = HappyA# "\x00\x00\x00\x00\xe3\xff\xfd\xff\xfa\xff\x00\x00\xe0\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\xff\xe4\xff\x00\x00\x00\x00\xe0\xff\x00\x00\xe9\xff\xe8\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xfe\xff\x00\x00\x00\x00\xf5\xff\xf9\xff\xf8\xff\x00\x00\x00\x00\xfb\xff\xf6\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\xff\xdb\xff\xde\xff\xdf\xff\xdc\xff\xdd\xff\x00\x00\xea\xff\x00\x00\xec\xff\xed\xff\xe1\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\xf1\xff\xf2\xff\xf3\xff\xf4\xff\xf7\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xeb\xff\x00\x00\x00\x00\x00\x00\xe3\xff\x00\x00\x00\x00\xe7\xff\xe6\xff\xee\xff\xef\xff\xe2\xff"#--happyCheck :: HappyAddr-happyCheck = HappyA# "\xff\xff\x03\x00\x00\x00\x01\x00\x02\x00\x03\x00\x01\x00\x05\x00\x03\x00\x05\x00\x01\x00\x02\x00\x03\x00\x03\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x04\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x17\x00\x1f\x00\x20\x00\x16\x00\x17\x00\x17\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x01\x00\x02\x00\x03\x00\x05\x00\x05\x00\x01\x00\x02\x00\x03\x00\x05\x00\x05\x00\x02\x00\x03\x00\x01\x00\x05\x00\x03\x00\x01\x00\x06\x00\x03\x00\x05\x00\x21\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x04\x00\x01\x00\x04\x00\x1e\x00\x09\x00\x01\x00\x09\x00\x1c\x00\x07\x00\x01\x00\x0b\x00\x09\x00\x01\x00\x08\x00\x01\x00\x09\x00\x07\x00\x0a\x00\x08\x00\x07\x00\xff\xff\x07\x00\x03\x00\xff\xff\x06\x00\x04\x00\x0b\x00\x0b\x00\x08\x00\x06\x00\x06\x00\x06\x00\x05\x00\x04\x00\x08\x00\xff\xff\xff\xff\x22\x00\xff\xff\xff\xff\x17\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#--happyTable :: HappyAddr-happyTable = HappyA# "\x00\x00\x07\x00\x11\x00\x02\x00\x03\x00\x04\x00\x2c\x00\x05\x00\x14\x00\x5c\x00\x25\x00\x26\x00\x14\x00\x14\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x5e\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x15\x00\x10\x00\x11\x00\x27\x00\x28\x00\x15\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x1f\x00\x03\x00\x04\x00\x48\x00\x05\x00\x02\x00\x03\x00\x04\x00\x49\x00\x05\x00\x28\x00\x04\x00\x5b\x00\x05\x00\x5c\x00\x16\x00\x31\x00\x17\x00\x4a\x00\x22\x00\x4b\x00\x4c\x00\x4e\x00\x50\x00\x38\x00\x23\x00\x29\x00\x2a\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x12\x00\x20\x00\x59\x00\x5a\x00\x52\x00\x5e\x00\x57\x00\x58\x00\x53\x00\x54\x00\x4e\x00\x56\x00\x55\x00\x50\x00\x48\x00\x2c\x00\x3e\x00\x3a\x00\x3b\x00\x40\x00\x3c\x00\x00\x00\x3d\x00\x23\x00\x00\x00\x18\x00\x1d\x00\x3f\x00\x41\x00\x31\x00\x19\x00\x1a\x00\x1b\x00\x1e\x00\x1f\x00\x1c\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--happyReduceArr = Happy_Data_Array.array (1, 37) [- (1 , happyReduce_1),- (2 , happyReduce_2),- (3 , happyReduce_3),- (4 , happyReduce_4),- (5 , happyReduce_5),- (6 , happyReduce_6),- (7 , happyReduce_7),- (8 , happyReduce_8),- (9 , happyReduce_9),- (10 , happyReduce_10),- (11 , happyReduce_11),- (12 , happyReduce_12),- (13 , happyReduce_13),- (14 , happyReduce_14),- (15 , happyReduce_15),- (16 , happyReduce_16),- (17 , happyReduce_17),- (18 , happyReduce_18),- (19 , happyReduce_19),- (20 , happyReduce_20),- (21 , happyReduce_21),- (22 , happyReduce_22),- (23 , happyReduce_23),- (24 , happyReduce_24),- (25 , happyReduce_25),- (26 , happyReduce_26),- (27 , happyReduce_27),- (28 , happyReduce_28),- (29 , happyReduce_29),- (30 , happyReduce_30),- (31 , happyReduce_31),- (32 , happyReduce_32),- (33 , happyReduce_33),- (34 , happyReduce_34),- (35 , happyReduce_35),- (36 , happyReduce_36),- (37 , happyReduce_37)- ]--happy_n_terms = 35 :: Int-happy_n_nonterms = 7 :: Int--happyReduce_1 = happySpecReduce_2 0# happyReduction_1-happyReduction_1 happy_x_2- happy_x_1- = case happyOut5 happy_x_1 of { happy_var_1 -> - case happyOut8 happy_x_2 of { happy_var_2 -> - happyIn4- (Prg happy_var_1 happy_var_2- )}}--happyReduce_2 = happySpecReduce_1 1# happyReduction_2-happyReduction_2 happy_x_1- = case happyOut6 happy_x_1 of { happy_var_1 -> - happyIn5- ([happy_var_1]- )}--happyReduce_3 = happySpecReduce_2 1# happyReduction_3-happyReduction_3 happy_x_2- happy_x_1- = case happyOut6 happy_x_1 of { happy_var_1 -> - case happyOut5 happy_x_2 of { happy_var_2 -> - happyIn5- (happy_var_1:happy_var_2- )}}--happyReduce_4 = happySpecReduce_3 2# happyReduction_4-happyReduction_4 happy_x_3- happy_x_2- happy_x_1- = case happyOutTok happy_x_1 of { (Tkn _ (TknId happy_var_1)) -> - case happyOut6 happy_x_3 of { happy_var_3 -> - happyIn6- (addLabel happy_var_1 happy_var_3- )}}--happyReduce_5 = happySpecReduce_1 2# happyReduction_5-happyReduction_5 happy_x_1- = case happyOut7 happy_x_1 of { happy_var_1 -> - happyIn6- (Stmt [] happy_var_1- )}--happyReduce_6 = happySpecReduce_3 3# happyReduction_6-happyReduction_6 happy_x_3- happy_x_2- happy_x_1- = case happyOut9 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_3 of { (Tkn _ (TknInt happy_var_3)) -> - happyIn7- (IMMI happy_var_1 happy_var_3- )}}--happyReduce_7 = happySpecReduce_3 3# happyReduction_7-happyReduction_7 happy_x_3- happy_x_2- happy_x_1- = case happyOut9 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_3 of { (Tkn _ (TknStr happy_var_3)) -> - happyIn7- (IMMS happy_var_1 happy_var_3- )}}--happyReduce_8 = happyReduce 5# 3# happyReduction_8-happyReduction_8 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut9 happy_x_1 of { happy_var_1 -> - case happyOutTok happy_x_5 of { (Tkn _ (TknInt happy_var_5)) -> - happyIn7- (IMRPC happy_var_1 happy_var_5- ) `HappyStk` happyRest}}--happyReduce_9 = happySpecReduce_3 3# happyReduction_9-happyReduction_9 happy_x_3- happy_x_2- happy_x_1- = case happyOut9 happy_x_3 of { happy_var_3 -> - happyIn7- (SPC happy_var_3- )}--happyReduce_10 = happySpecReduce_3 3# happyReduction_10-happyReduction_10 happy_x_3- happy_x_2- happy_x_1- = case happyOut9 happy_x_1 of { happy_var_1 -> - case happyOut9 happy_x_3 of { happy_var_3 -> - happyIn7- (IMMM happy_var_1 happy_var_3- )}}--happyReduce_11 = happyReduce 5# 3# happyReduction_11-happyReduction_11 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut9 happy_x_1 of { happy_var_1 -> - case happyOut9 happy_x_3 of { happy_var_3 -> - case happyOut9 happy_x_5 of { happy_var_5 -> - happyIn7- (IAdd happy_var_1 happy_var_3 happy_var_5- ) `HappyStk` happyRest}}}--happyReduce_12 = happyReduce 5# 3# happyReduction_12-happyReduction_12 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut9 happy_x_1 of { happy_var_1 -> - case happyOut9 happy_x_3 of { happy_var_3 -> - case happyOut9 happy_x_5 of { happy_var_5 -> - happyIn7- (ISub happy_var_1 happy_var_3 happy_var_5- ) `HappyStk` happyRest}}}--happyReduce_13 = happyReduce 5# 3# happyReduction_13-happyReduction_13 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut9 happy_x_1 of { happy_var_1 -> - case happyOut9 happy_x_3 of { happy_var_3 -> - case happyOut9 happy_x_5 of { happy_var_5 -> - happyIn7- (IMul happy_var_1 happy_var_3 happy_var_5- ) `HappyStk` happyRest}}}--happyReduce_14 = happyReduce 5# 3# happyReduction_14-happyReduction_14 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut9 happy_x_1 of { happy_var_1 -> - case happyOut9 happy_x_3 of { happy_var_3 -> - case happyOut9 happy_x_5 of { happy_var_5 -> - happyIn7- (IDiv happy_var_1 happy_var_3 happy_var_5- ) `HappyStk` happyRest}}}--happyReduce_15 = happyReduce 5# 3# happyReduction_15-happyReduction_15 (happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut9 happy_x_1 of { happy_var_1 -> - case happyOut9 happy_x_3 of { happy_var_3 -> - case happyOut9 happy_x_5 of { happy_var_5 -> - happyIn7- (IMod happy_var_1 happy_var_3 happy_var_5- ) `HappyStk` happyRest}}}--happyReduce_16 = happyReduce 8# 3# happyReduction_16-happyReduction_16 (happy_x_8 `HappyStk`- happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut9 happy_x_1 of { happy_var_1 -> - case happyOut9 happy_x_5 of { happy_var_5 -> - case happyOutTok happy_x_7 of { (Tkn _ (TknInt happy_var_7)) -> - happyIn7- (IMRI happy_var_1 happy_var_5 happy_var_7- ) `HappyStk` happyRest}}}--happyReduce_17 = happyReduce 8# 3# happyReduction_17-happyReduction_17 (happy_x_8 `HappyStk`- happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut9 happy_x_3 of { happy_var_3 -> - case happyOutTok happy_x_5 of { (Tkn _ (TknInt happy_var_5)) -> - case happyOut9 happy_x_8 of { happy_var_8 -> - happyIn7- (IMMR happy_var_3 happy_var_5 happy_var_8- ) `HappyStk` happyRest}}}--happyReduce_18 = happyReduce 4# 3# happyReduction_18-happyReduction_18 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut9 happy_x_3 of { happy_var_3 -> - happyIn7- (IRI happy_var_3- ) `HappyStk` happyRest}--happyReduce_19 = happyReduce 4# 3# happyReduction_19-happyReduction_19 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut9 happy_x_3 of { happy_var_3 -> - happyIn7- (IWI happy_var_3- ) `HappyStk` happyRest}--happyReduce_20 = happyReduce 6# 3# happyReduction_20-happyReduction_20 (happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut9 happy_x_3 of { happy_var_3 -> - case happyOut9 happy_x_5 of { happy_var_5 -> - happyIn7- (IRS happy_var_3 happy_var_5- ) `HappyStk` happyRest}}--happyReduce_21 = happyReduce 4# 3# happyReduction_21-happyReduction_21 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut9 happy_x_3 of { happy_var_3 -> - happyIn7- (IWS happy_var_3- ) `HappyStk` happyRest}--happyReduce_22 = happySpecReduce_2 3# happyReduction_22-happyReduction_22 happy_x_2- happy_x_1- = case happyOutTok happy_x_2 of { (Tkn _ (TknInt happy_var_2)) -> - happyIn7- (IGI happy_var_2- )}--happyReduce_23 = happySpecReduce_2 3# happyReduction_23-happyReduction_23 happy_x_2- happy_x_1- = case happyOutTok happy_x_2 of { (Tkn _ (TknId happy_var_2)) -> - happyIn7- (IGS happy_var_2- )}--happyReduce_24 = happyReduce 7# 3# happyReduction_24-happyReduction_24 (happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut9 happy_x_2 of { happy_var_2 -> - case happyOut10 happy_x_3 of { happy_var_3 -> - case happyOut9 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_7 of { (Tkn _ (TknInt happy_var_7)) -> - happyIn7- (IFI happy_var_2 happy_var_3 happy_var_4 happy_var_7- ) `HappyStk` happyRest}}}}--happyReduce_25 = happyReduce 7# 3# happyReduction_25-happyReduction_25 (happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOut9 happy_x_2 of { happy_var_2 -> - case happyOut10 happy_x_3 of { happy_var_3 -> - case happyOut9 happy_x_4 of { happy_var_4 -> - case happyOutTok happy_x_7 of { (Tkn _ (TknId happy_var_7)) -> - happyIn7- (IFS happy_var_2 happy_var_3 happy_var_4 happy_var_7- ) `HappyStk` happyRest}}}}--happyReduce_26 = happySpecReduce_1 3# happyReduction_26-happyReduction_26 happy_x_1- = happyIn7- (IH- )--happyReduce_27 = happySpecReduce_1 3# happyReduction_27-happyReduction_27 happy_x_1- = happyIn7- (IB- )--happyReduce_28 = happySpecReduce_0 4# happyReduction_28-happyReduction_28 = happyIn8- ([]- )--happyReduce_29 = happyReduce 7# 4# happyReduction_29-happyReduction_29 (happy_x_7 `HappyStk`- happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_2 of { (Tkn _ (TknId happy_var_2)) -> - case happyOutTok happy_x_5 of { (Tkn _ (TknInt happy_var_5)) -> - case happyOut8 happy_x_7 of { happy_var_7 -> - happyIn8- ((happy_var_2,happy_var_5):happy_var_7- ) `HappyStk` happyRest}}}--happyReduce_30 = happyReduce 4# 5# happyReduction_30-happyReduction_30 (happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_3 of { (Tkn _ (TknInt happy_var_3)) -> - happyIn9- (MRefI happy_var_3- ) `HappyStk` happyRest}--happyReduce_31 = happySpecReduce_1 5# happyReduction_31-happyReduction_31 happy_x_1- = case happyOutTok happy_x_1 of { (Tkn _ (TknId happy_var_1)) -> - happyIn9- (MRefId happy_var_1- )}--happyReduce_32 = happySpecReduce_1 6# happyReduction_32-happyReduction_32 happy_x_1- = happyIn10- (CLET- )--happyReduce_33 = happySpecReduce_1 6# happyReduction_33-happyReduction_33 happy_x_1- = happyIn10- (CLT- )--happyReduce_34 = happySpecReduce_1 6# happyReduction_34-happyReduction_34 happy_x_1- = happyIn10- (CGET- )--happyReduce_35 = happySpecReduce_1 6# happyReduction_35-happyReduction_35 happy_x_1- = happyIn10- (CGT- )--happyReduce_36 = happySpecReduce_1 6# happyReduction_36-happyReduction_36 happy_x_1- = happyIn10- (CE- )--happyReduce_37 = happySpecReduce_1 6# happyReduction_37-happyReduction_37 happy_x_1- = happyIn10- (CNE- )--happyNewToken action sts stk- = lexwrap(\tk -> - let cont i = happyDoAction i tk action sts stk in- case tk of {- Tkn _ TknEOF -> happyDoAction 34# tk action sts stk;- Tkn _ (TknInt happy_dollar_dollar) -> cont 1#;- Tkn _ (TknStr happy_dollar_dollar) -> cont 2#;- Tkn _ (TknId happy_dollar_dollar) -> cont 3#;- Tkn _ TknAssgn -> cont 4#;- Tkn _ TknColon -> cont 5#;- Tkn _ TknLPar -> cont 6#;- Tkn _ TknRPar -> cont 7#;- Tkn _ TknLBrk -> cont 8#;- Tkn _ TknRBrk -> cont 9#;- Tkn _ TknComma -> cont 10#;- Tkn _ (TknOper '+') -> cont 11#;- Tkn _ (TknOper '-') -> cont 12#;- Tkn _ (TknOper '*') -> cont 13#;- Tkn _ (TknOper '/') -> cont 14#;- Tkn _ (TknOper '%') -> cont 15#;- Tkn _ (TknCond "<>") -> cont 16#;- Tkn _ (TknCond "=") -> cont 17#;- Tkn _ (TknCond "<") -> cont 18#;- Tkn _ (TknCond "<=") -> cont 19#;- Tkn _ (TknCond ">") -> cont 20#;- Tkn _ (TknCond ">=") -> cont 21#;- Tkn _ (TknResWrd "PC") -> cont 22#;- Tkn _ (TknResWrd "M") -> cont 23#;- Tkn _ (TknResWrd "readInt") -> cont 24#;- Tkn _ (TknResWrd "writeInt") -> cont 25#;- Tkn _ (TknResWrd "readStr") -> cont 26#;- Tkn _ (TknResWrd "writeStr") -> cont 27#;- Tkn _ (TknResWrd "goto") -> cont 28#;- Tkn _ (TknResWrd "if") -> cont 29#;- Tkn _ (TknResWrd "then") -> cont 30#;- Tkn _ (TknResWrd "halt") -> cont 31#;- Tkn _ (TknResWrd "break") -> cont 32#;- Tkn _ (TknResWrd "equ") -> cont 33#;- _ -> happyError' tk- })--happyError_ 34# tk = happyError' tk-happyError_ _ tk = happyError' tk--happyThen :: () => Alex a -> (a -> Alex b) -> Alex b-happyThen = (>>=)-happyReturn :: () => a -> Alex a-happyReturn = (return)-happyThen1 = happyThen-happyReturn1 :: () => a -> Alex a-happyReturn1 = happyReturn-happyError' :: () => (Tkn) -> Alex a-happyError' tk = parseError tk--parse = happySomeParser where- happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut4 x))--happySeq = happyDontSeq---lexwrap :: (Tkn -> Alex a) -> Alex a-lexwrap cont = do- t <- alexMonadScan- cont t--addLabel :: String -> Stmt -> Stmt-addLabel s (Stmt ss i) = Stmt (s:ss) i--parseError :: Tkn -> Alex a-parseError t = do- (l,c) <- getPosn- fail (show l ++ ":" ++ show c ++ ": Parser error on Token: " ++ show t ++ "\n")--pEWE :: String -> Either String Prog-pEWE s = runAlex s parse-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<built-in>" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}--- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp ---{-# LINE 13 "templates/GenericTemplate.hs" #-}-------- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.-#if __GLASGOW_HASKELL__ > 706-#define LT(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.<# m)) :: Bool)-#define GTE(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.>=# m)) :: Bool)-#define EQ(n,m) ((Happy_GHC_Exts.tagToEnum# (n Happy_GHC_Exts.==# m)) :: Bool)-#else-#define LT(n,m) (n Happy_GHC_Exts.<# m)-#define GTE(n,m) (n Happy_GHC_Exts.>=# m)-#define EQ(n,m) (n Happy_GHC_Exts.==# m)-#endif--{-# LINE 46 "templates/GenericTemplate.hs" #-}---data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList-------{-# LINE 67 "templates/GenericTemplate.hs" #-}---{-# LINE 77 "templates/GenericTemplate.hs" #-}-----------infixr 9 `HappyStk`-data HappyStk a = HappyStk a (HappyStk a)---------------------------------------------------------------------------------- starting the parse--happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll---------------------------------------------------------------------------------- Accepting the parse---- If the current token is 0#, it means we've just accepted a partial--- parse (a %partial parser). We must ignore the saved token on the top of--- the stack in this case.-happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =- happyReturn1 ans-happyAccept j tk st sts (HappyStk ans _) = - (happyTcHack j (happyTcHack st)) (happyReturn1 ans)---------------------------------------------------------------------------------- Arrays only: do the next action----happyDoAction i tk st- = {- nothing -}- -- case action of- 0# -> {- nothing -}- happyFail i tk st- -1# -> {- nothing -}- happyAccept i tk st- n | LT(n,(0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}- - (happyReduceArr Happy_Data_Array.! rule) i tk st- where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))- n -> {- nothing -}- -- happyShift new_state i tk st- where new_state = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))- where off = indexShortOffAddr happyActOffsets st- off_i = (off Happy_GHC_Exts.+# i)- check = if GTE(off_i,(0# :: Happy_GHC_Exts.Int#))- then EQ(indexShortOffAddr happyCheck off_i, i)- else False- action- | check = indexShortOffAddr happyTable off_i- | otherwise = indexShortOffAddr happyDefActions st---indexShortOffAddr (HappyA# arr) off =- Happy_GHC_Exts.narrow16Int# i- where- i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)- high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))- low = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))- off' = off Happy_GHC_Exts.*# 2#------data HappyAddr = HappyA# Happy_GHC_Exts.Addr#------------------------------------------------------------------------------------- HappyState data type (not arrays)---{-# LINE 170 "templates/GenericTemplate.hs" #-}---------------------------------------------------------------------------------- Shifting a token--happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =- let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in--- trace "shifting the error token" $- happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)--happyShift new_state i tk st sts stk =- happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)---- happyReduce is specialised for the common cases.--happySpecReduce_0 i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happySpecReduce_0 nt fn j tk st@((action)) sts stk- = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)--happySpecReduce_1 i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')- = let r = fn v1 in- happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happySpecReduce_2 i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')- = let r = fn v1 v2 in- happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happySpecReduce_3 i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')- = let r = fn v1 v2 v3 in- happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happyReduce k i fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happyReduce k nt fn j tk st sts stk- = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of- sts1@((HappyCons (st1@(action)) (_))) ->- let r = fn stk in -- it doesn't hurt to always seq here...- happyDoSeq r (happyGoto nt j tk st1 sts1 r)--happyMonadReduce k nt fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happyMonadReduce k nt fn j tk st sts stk =- case happyDrop k (HappyCons (st) (sts)) of- sts1@((HappyCons (st1@(action)) (_))) ->- let drop_stk = happyDropStk k stk in- happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))--happyMonad2Reduce k nt fn 0# tk st sts stk- = happyFail 0# tk st sts stk-happyMonad2Reduce k nt fn j tk st sts stk =- case happyDrop k (HappyCons (st) (sts)) of- sts1@((HappyCons (st1@(action)) (_))) ->- let drop_stk = happyDropStk k stk-- off = indexShortOffAddr happyGotoOffsets st1- off_i = (off Happy_GHC_Exts.+# nt)- new_state = indexShortOffAddr happyTable off_i---- in- happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))--happyDrop 0# l = l-happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t--happyDropStk 0# l = l-happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs---------------------------------------------------------------------------------- Moving to a new state after a reduction---happyGoto nt j tk st = - {- nothing -}- happyDoAction j tk new_state- where off = indexShortOffAddr happyGotoOffsets st- off_i = (off Happy_GHC_Exts.+# nt)- new_state = indexShortOffAddr happyTable off_i------------------------------------------------------------------------------------- Error recovery (0# is the error token)---- parse error if we are in recovery and we fail again-happyFail 0# tk old_st _ stk@(x `HappyStk` _) =- let i = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in--- trace "failing" $ - happyError_ i tk--{- We don't need state discarding for our restricted implementation of- "error". In fact, it can cause some bogus parses, so I've disabled it- for now --SDM---- discard a state-happyFail 0# tk old_st (HappyCons ((action)) (sts)) - (saved_tok `HappyStk` _ `HappyStk` stk) =--- trace ("discarding state, depth " ++ show (length stk)) $- happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk))--}---- Enter error recovery: generate an error token,--- save the old token and carry on.-happyFail i tk (action) sts stk =--- trace "entering error recovery" $- happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)---- Internal happy errors:--notHappyAtAll :: a-notHappyAtAll = error "Internal Happy error\n"---------------------------------------------------------------------------------- Hack to get the typechecker to accept our action functions---happyTcHack :: Happy_GHC_Exts.Int# -> a -> a-happyTcHack x y = y-{-# INLINE happyTcHack #-}----------------------------------------------------------------------------------- Seq-ing. If the --strict flag is given, then Happy emits --- happySeq = happyDoSeq--- otherwise it emits--- happySeq = happyDontSeq--happyDoSeq, happyDontSeq :: a -> b -> b-happyDoSeq a b = a `seq` b-happyDontSeq a b = b---------------------------------------------------------------------------------- Don't inline any functions from the template. GHC has a nasty habit--- of deciding to inline happyGoto everywhere, which increases the size of--- the generated parser quite a bit.---{-# NOINLINE happyDoAction #-}-{-# NOINLINE happyTable #-}-{-# NOINLINE happyCheck #-}-{-# NOINLINE happyActOffsets #-}-{-# NOINLINE happyGotoOffsets #-}-{-# NOINLINE happyDefActions #-}--{-# NOINLINE happyShift #-}-{-# NOINLINE happySpecReduce_0 #-}-{-# NOINLINE happySpecReduce_1 #-}-{-# NOINLINE happySpecReduce_2 #-}-{-# NOINLINE happySpecReduce_3 #-}-{-# NOINLINE happyReduce #-}-{-# NOINLINE happyMonadReduce #-}-{-# NOINLINE happyGoto #-}-{-# NOINLINE happyFail #-}---- end of Happy Template.-
− dist/build/ewe/ewe-tmp/Language/EWE/Scanner.hs
@@ -1,582 +0,0 @@-{-# LANGUAGE CPP,MagicHash #-}-{-# LINE 1 "src/Language/EWE/Scanner.x" #-}--module Language.EWE.Scanner(Alex(..),- AlexPosn(..),- alexMonadScan,- alexExec,- runAlex,- alexGetInput,- getPosn- ) where--import Language.EWE.Token(Tkns,Tkn(..),Tkn_(..))--#if __GLASGOW_HASKELL__ >= 603-#include "ghcconfig.h"-#elif defined(__GLASGOW_HASKELL__)-#include "config.h"-#endif-#if __GLASGOW_HASKELL__ >= 503-import Data.Array-import Data.Char (ord)-import Data.Array.Base (unsafeAt)-#else-import Array-import Char (ord)-#endif-#if __GLASGOW_HASKELL__ >= 503-import GHC.Exts-#else-import GlaExts-#endif-{-# LINE 1 "templates/wrappers.hs" #-}-{-# LINE 1 "templates/wrappers.hs" #-}-{-# LINE 1 "<built-in>" #-}-{-# LINE 1 "templates/wrappers.hs" #-}--- -------------------------------------------------------------------------------- Alex wrapper code.------ This code is in the PUBLIC DOMAIN; you may copy it freely and use--- it for any purpose whatsoever.--import Control.Applicative (Applicative (..))-import Data.Word (Word8)--{-# LINE 23 "templates/wrappers.hs" #-}--import qualified Data.Bits---- | Encode a Haskell String to a list of Word8 values, in UTF8 format.-utf8Encode :: Char -> [Word8]-utf8Encode = map fromIntegral . go . ord- where- go oc- | oc <= 0x7f = [oc]-- | oc <= 0x7ff = [ 0xc0 + (oc `Data.Bits.shiftR` 6)- , 0x80 + oc Data.Bits..&. 0x3f- ]-- | oc <= 0xffff = [ 0xe0 + (oc `Data.Bits.shiftR` 12)- , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)- , 0x80 + oc Data.Bits..&. 0x3f- ]- | otherwise = [ 0xf0 + (oc `Data.Bits.shiftR` 18)- , 0x80 + ((oc `Data.Bits.shiftR` 12) Data.Bits..&. 0x3f)- , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)- , 0x80 + oc Data.Bits..&. 0x3f- ]----type Byte = Word8---- -------------------------------------------------------------------------------- The input type---type AlexInput = (AlexPosn, -- current position,- Char, -- previous char- [Byte], -- pending bytes on current char- String) -- current input string--ignorePendingBytes :: AlexInput -> AlexInput-ignorePendingBytes (p,c,ps,s) = (p,c,[],s)--alexInputPrevChar :: AlexInput -> Char-alexInputPrevChar (p,c,bs,s) = c--alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)-alexGetByte (p,c,(b:bs),s) = Just (b,(p,c,bs,s))-alexGetByte (p,c,[],[]) = Nothing-alexGetByte (p,_,[],(c:s)) = let p' = alexMove p c - (b:bs) = utf8Encode c- in p' `seq` Just (b, (p', c, bs, s))----{-# LINE 93 "templates/wrappers.hs" #-}---{-# LINE 107 "templates/wrappers.hs" #-}---{-# LINE 122 "templates/wrappers.hs" #-}---- -------------------------------------------------------------------------------- Token positions---- `Posn' records the location of a token in the input text. It has three--- fields: the address (number of chacaters preceding the token), line number--- and column of a token within the file. `start_pos' gives the position of the--- start of the file and `eof_pos' a standard encoding for the end of file.--- `move_pos' calculates the new position after traversing a given character,--- assuming the usual eight character tab stops.---data AlexPosn = AlexPn !Int !Int !Int- deriving (Eq,Show)--alexStartPos :: AlexPosn-alexStartPos = AlexPn 0 1 1--alexMove :: AlexPosn -> Char -> AlexPosn-alexMove (AlexPn a l c) '\t' = AlexPn (a+1) l (((c+7) `div` 8)*8+1)-alexMove (AlexPn a l c) '\n' = AlexPn (a+1) (l+1) 1-alexMove (AlexPn a l c) _ = AlexPn (a+1) l (c+1)----- -------------------------------------------------------------------------------- Default monad---data AlexState = AlexState {- alex_pos :: !AlexPosn, -- position at current input location- alex_inp :: String, -- the current input- alex_chr :: !Char, -- the character before the input- alex_bytes :: [Byte],- alex_scd :: !Int -- the current startcode---- }---- Compile with -funbox-strict-fields for best results!--runAlex :: String -> Alex a -> Either String a-runAlex input (Alex f) - = case f (AlexState {alex_pos = alexStartPos,- alex_inp = input, - alex_chr = '\n',- alex_bytes = [],---- alex_scd = 0}) of Left msg -> Left msg- Right ( _, a ) -> Right a--newtype Alex a = Alex { unAlex :: AlexState -> Either String (AlexState, a) }--instance Functor Alex where- fmap f a = Alex $ \s -> case unAlex a s of- Left msg -> Left msg- Right (s', a') -> Right (s', f a')--instance Applicative Alex where- pure a = Alex $ \s -> Right (s, a)- fa <*> a = Alex $ \s -> case unAlex fa s of- Left msg -> Left msg- Right (s', f) -> case unAlex a s' of- Left msg -> Left msg- Right (s'', b) -> Right (s'', f b)--instance Monad Alex where- m >>= k = Alex $ \s -> case unAlex m s of - Left msg -> Left msg- Right (s',a) -> unAlex (k a) s'- return a = Alex $ \s -> Right (s,a)--alexGetInput :: Alex AlexInput-alexGetInput- = Alex $ \s@AlexState{alex_pos=pos,alex_chr=c,alex_bytes=bs,alex_inp=inp} -> - Right (s, (pos,c,bs,inp))--alexSetInput :: AlexInput -> Alex ()-alexSetInput (pos,c,bs,inp)- = Alex $ \s -> case s{alex_pos=pos,alex_chr=c,alex_bytes=bs,alex_inp=inp} of- s@(AlexState{}) -> Right (s, ())--alexError :: String -> Alex a-alexError message = Alex $ \s -> Left message--alexGetStartCode :: Alex Int-alexGetStartCode = Alex $ \s@AlexState{alex_scd=sc} -> Right (s, sc)--alexSetStartCode :: Int -> Alex ()-alexSetStartCode sc = Alex $ \s -> Right (s{alex_scd=sc}, ())----------alexMonadScan = do- inp <- alexGetInput- sc <- alexGetStartCode- case alexScan inp sc of- AlexEOF -> alexEOF- AlexError ((AlexPn _ line column),_,_,_) -> alexError $ "lexical error at line " ++ (show line) ++ ", column " ++ (show column)- AlexSkip inp' len -> do- alexSetInput inp'- alexMonadScan- AlexToken inp' len action -> do- alexSetInput inp'- action (ignorePendingBytes inp) len---- -------------------------------------------------------------------------------- Useful token actions--type AlexAction result = AlexInput -> Int -> Alex result---- just ignore this token and scan another one--- skip :: AlexAction result-skip input len = alexMonadScan---- ignore this token, but set the start code to a new value--- begin :: Int -> AlexAction result-begin code input len = do alexSetStartCode code; alexMonadScan---- perform an action for this token, and set the start code to a new value-andBegin :: AlexAction result -> Int -> AlexAction result-(action `andBegin` code) input len = do alexSetStartCode code; action input len--token :: (AlexInput -> Int -> token) -> AlexAction token-token t input len = return (t input len)------ -------------------------------------------------------------------------------- Monad (with ByteString input)---{-# LINE 347 "templates/wrappers.hs" #-}----- -------------------------------------------------------------------------------- Basic wrapper---{-# LINE 374 "templates/wrappers.hs" #-}----- -------------------------------------------------------------------------------- Basic wrapper, ByteString version---{-# LINE 392 "templates/wrappers.hs" #-}---{-# LINE 406 "templates/wrappers.hs" #-}----- -------------------------------------------------------------------------------- Posn wrapper---- Adds text positions to the basic model.---{-# LINE 423 "templates/wrappers.hs" #-}----- -------------------------------------------------------------------------------- Posn wrapper, ByteString version---{-# LINE 438 "templates/wrappers.hs" #-}----- -------------------------------------------------------------------------------- GScan wrapper---- For compatibility with previous versions of Alex, and because we can.---alex_base :: AlexAddr-alex_base = AlexA# "\xf8\xff\xff\xff\xf3\xff\xff\xff\x73\x00\x00\x00\xb4\x00\x00\x00\x00\x00\x00\x00\x25\x01\x00\x00\x00\x00\x00\x00\xa5\x01\x00\x00\x25\x02\x00\x00\x00\x00\x00\x00\x96\x02\x00\x00\x96\x03\x00\x00\x56\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x03\x00\x00\x8d\x04\x00\x00\x8d\x05\x00\x00\xf0\x03\x00\x00\x00\x00\x00\x00\xfe\xff\xff\xff\x03\x06\x00\x00\x00\x00\x00\x00\xc9\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcf\xff\xff\xff\xd0\xff\xff\xff\x00\x00\x00\x00\xde\x05\x00\x00\xd3\x06\x00\x00\x1e\x07\x00\x00\x69\x07\x00\x00\xb4\x07\x00\x00\xff\x07\x00\x00\x4a\x08\x00\x00\x95\x08\x00\x00\xe0\x08\x00\x00\x2b\x09\x00\x00\x76\x09\x00\x00\xc1\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x04\x00\x00\x0c\x0a\x00\x00\x57\x0a\x00\x00\xa2\x0a\x00\x00\xed\x0a\x00\x00\x38\x0b\x00\x00\x83\x0b\x00\x00\xce\x0b\x00\x00\x19\x0c\x00\x00\x64\x0c\x00\x00\xaf\x0c\x00\x00\xfa\x0c\x00\x00\x45\x0d\x00\x00\x90\x0d\x00\x00\xdb\x0d\x00\x00\x26\x0e\x00\x00\x71\x0e\x00\x00\xbc\x0e\x00\x00\x07\x0f\x00\x00\x52\x0f\x00\x00\x9d\x0f\x00\x00\xe8\x0f\x00\x00\x33\x10\x00\x00\x7e\x10\x00\x00\xc9\x10\x00\x00\x14\x11\x00\x00\x5f\x11\x00\x00\xaa\x11\x00\x00\xf5\x11\x00\x00\x40\x12\x00\x00\x8b\x12\x00\x00\xd6\x12\x00\x00\x21\x13\x00\x00\x6c\x13\x00\x00\xb7\x13\x00\x00\x02\x14\x00\x00"#--alex_table :: AlexAddr-alex_table = AlexA# "\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x16\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x20\x00\x20\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x10\x00\x15\x00\x00\x00\x18\x00\x14\x00\x00\x00\x19\x00\x1a\x00\x18\x00\x18\x00\x1d\x00\x18\x00\x00\x00\x18\x00\x2e\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x17\x00\x00\x00\x1f\x00\x20\x00\x1e\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x21\x00\x40\x00\x40\x00\x30\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x00\x00\x00\x00\x40\x00\x43\x00\x40\x00\x40\x00\x36\x00\x40\x00\x39\x00\x3a\x00\x4e\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x3e\x00\x40\x00\x45\x00\x40\x00\x40\x00\x41\x00\x40\x00\x40\x00\x40\x00\x11\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x01\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x03\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x08\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x0b\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x2f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0b\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0c\x00\x08\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x03\x00\x07\x00\x06\x00\x06\x00\x06\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x11\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x13\x00\x12\x00\x01\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0f\x00\x02\x00\x09\x00\x09\x00\x09\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x22\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x27\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x2b\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x2c\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x4d\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x33\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x4b\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x49\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x4a\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x48\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x47\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x35\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x38\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x3d\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x42\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x3f\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x3c\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x3b\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x37\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x34\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x4c\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x31\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x4f\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x50\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x51\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x52\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x2a\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x29\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x28\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x26\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x25\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x24\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x23\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--alex_check :: AlexAddr-alex_check = AlexA# "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x3d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x3d\x00\x3d\x00\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x22\x00\x23\x00\xff\xff\x25\x00\x20\x00\xff\xff\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\xff\xff\x5d\x00\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x0a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#--alex_deflt :: AlexAddr-alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\x0d\x00\x0d\x00\x04\x00\x04\x00\xff\xff\xff\xff\x0e\x00\x0e\x00\x10\x00\x10\x00\x10\x00\x13\x00\x13\x00\x10\x00\x15\x00\x15\x00\x15\x00\xff\xff\x15\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#--alex_accept = listArray (0::Int,82) [AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAccSkip,AlexAcc (alex_action_3),AlexAcc (alex_action_4),AlexAcc (alex_action_5),AlexAcc (alex_action_6),AlexAcc (alex_action_7),AlexAcc (alex_action_8),AlexAcc (alex_action_9),AlexAcc (alex_action_10),AlexAcc (alex_action_11),AlexAcc (alex_action_11),AlexAcc (alex_action_11),AlexAcc (alex_action_12),AlexAcc (alex_action_13),AlexAcc (alex_action_14),AlexAcc (alex_action_15),AlexAcc (alex_action_16),AlexAcc (alex_action_17),AlexAcc (alex_action_18),AlexAcc (alex_action_19),AlexAcc (alex_action_20),AlexAcc (alex_action_21),AlexAcc (alex_action_22),AlexAcc (alex_action_23),AlexAcc (alex_action_24),AlexAcc (alex_action_25),AlexAcc (alex_action_25),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26),AlexAcc (alex_action_26)]-{-# LINE 54 "src/Language/EWE/Scanner.x" #-}--returnTkn :: Tkn_ -> AlexInput -> Int -> Alex Tkn-returnTkn tkn _ _ = do pos <- getPosn - return $ Tkn pos tkn--returnEOL :: AlexInput -> Int -> Alex Tkn-returnEOL = returnTkn $ TknEOL--returnAssgn :: AlexInput -> Int -> Alex Tkn-returnAssgn = returnTkn $ TknAssgn--returnColon :: AlexInput -> Int -> Alex Tkn-returnColon = returnTkn $ TknColon--returnLPar :: AlexInput -> Int -> Alex Tkn-returnLPar = returnTkn $ TknLPar--returnRPar :: AlexInput -> Int -> Alex Tkn-returnRPar = returnTkn $ TknRPar--returnLBrk :: AlexInput -> Int -> Alex Tkn-returnLBrk = returnTkn $ TknLBrk--returnRBrk :: AlexInput -> Int -> Alex Tkn-returnRBrk = returnTkn $ TknRBrk--returnComma :: AlexInput -> Int -> Alex Tkn-returnComma = returnTkn $ TknComma--returnOper :: AlexInput -> Int -> Alex Tkn-returnOper = returnFunction (TknOper . head)--returnCond :: AlexInput -> Int -> Alex Tkn-returnCond = returnFunction TknCond--returnStr :: AlexInput -> Int -> Alex Tkn-returnStr = returnFunction (TknStr . read)--returnInt :: AlexInput -> Int -> Alex Tkn-returnInt = returnFunction (TknInt . read)--returnId :: AlexInput -> Int -> Alex Tkn-returnId = returnFunction TknId--returnResWrd :: AlexInput -> Int -> Alex Tkn-returnResWrd = returnFunction TknResWrd--returnFunction :: (String -> Tkn_) -> AlexInput -> Int -> Alex Tkn-returnFunction f (_,_,_,s) i = do pos <- getPosn- return $ (Tkn pos (f (take i s)))--alexEOF :: Alex Tkn-alexEOF = do pos <- getPosn- return $ Tkn pos TknEOF--alexExec :: Alex Tkns-alexExec = do- t <- alexMonadScan- case t of- (Tkn pos TknEOF) -> return $ [t]- _ -> do ts <- alexExec- return (t:ts)--getPosn :: Alex (Int,Int)-getPosn = do- (AlexPn _ l c,_,_,_) <- alexGetInput- return (l,c)--alex_action_2 = returnEOL -alex_action_3 = returnAssgn -alex_action_4 = returnColon -alex_action_5 = returnOper -alex_action_6 = returnLPar-alex_action_7 = returnRPar -alex_action_8 = returnLBrk -alex_action_9 = returnRBrk -alex_action_10 = returnComma -alex_action_11 = returnCond -alex_action_12 = returnResWrd -alex_action_13 = returnResWrd -alex_action_14 = returnResWrd -alex_action_15 = returnResWrd -alex_action_16 = returnResWrd -alex_action_17 = returnResWrd -alex_action_18 = returnResWrd -alex_action_19 = returnResWrd -alex_action_20 = returnResWrd -alex_action_21 = returnResWrd -alex_action_22 = returnResWrd -alex_action_23 = returnResWrd -alex_action_24 = returnStr -alex_action_25 = returnInt -alex_action_26 = returnId -{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<built-in>" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}--- -------------------------------------------------------------------------------- ALEX TEMPLATE------ This code is in the PUBLIC DOMAIN; you may copy it freely and use--- it for any purpose whatsoever.---- -------------------------------------------------------------------------------- INTERNALS and main scanner engine---{-# LINE 21 "templates/GenericTemplate.hs" #-}-------- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.-#if __GLASGOW_HASKELL__ > 706-#define GTE(n,m) (tagToEnum# (n >=# m))-#define EQ(n,m) (tagToEnum# (n ==# m))-#else-#define GTE(n,m) (n >=# m)-#define EQ(n,m) (n ==# m)-#endif--{-# LINE 51 "templates/GenericTemplate.hs" #-}---data AlexAddr = AlexA# Addr#--- Do not remove this comment. Required to fix CPP parsing when using GCC and a clang-compiled alex.-#if __GLASGOW_HASKELL__ < 503-uncheckedShiftL# = shiftL#-#endif--{-# INLINE alexIndexInt16OffAddr #-}-alexIndexInt16OffAddr (AlexA# arr) off =-#ifdef WORDS_BIGENDIAN- narrow16Int# i- where- i = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)- high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))- low = int2Word# (ord# (indexCharOffAddr# arr off'))- off' = off *# 2#-#else- indexInt16OffAddr# arr off-#endif------{-# INLINE alexIndexInt32OffAddr #-}-alexIndexInt32OffAddr (AlexA# arr) off = -#ifdef WORDS_BIGENDIAN- narrow32Int# i- where- i = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`- (b2 `uncheckedShiftL#` 16#) `or#`- (b1 `uncheckedShiftL#` 8#) `or#` b0)- b3 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))- b2 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))- b1 = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))- b0 = int2Word# (ord# (indexCharOffAddr# arr off'))- off' = off *# 4#-#else- indexInt32OffAddr# arr off-#endif-------#if __GLASGOW_HASKELL__ < 503-quickIndex arr i = arr ! i-#else--- GHC >= 503, unsafeAt is available from Data.Array.Base.-quickIndex = unsafeAt-#endif------- -------------------------------------------------------------------------------- Main lexing routines--data AlexReturn a- = AlexEOF- | AlexError !AlexInput- | AlexSkip !AlexInput !Int- | AlexToken !AlexInput !Int a---- alexScan :: AlexInput -> StartCode -> AlexReturn a-alexScan input (I# (sc))- = alexScanUser undefined input (I# (sc))--alexScanUser user input (I# (sc))- = case alex_scan_tkn user input 0# input sc AlexNone of- (AlexNone, input') ->- case alexGetByte input of- Nothing -> ---- AlexEOF- Just _ ->---- AlexError input'-- (AlexLastSkip input'' len, _) ->---- AlexSkip input'' len-- (AlexLastAcc k input''' len, _) ->---- AlexToken input''' len k----- Push the input through the DFA, remembering the most recent accepting--- state it encountered.--alex_scan_tkn user orig_input len input s last_acc =- input `seq` -- strict in the input- let - new_acc = (check_accs (alex_accept `quickIndex` (I# (s))))- in- new_acc `seq`- case alexGetByte input of- Nothing -> (new_acc, input)- Just (c, new_input) -> ---- case fromIntegral c of { (I# (ord_c)) ->- let- base = alexIndexInt32OffAddr alex_base s- offset = (base +# ord_c)- check = alexIndexInt16OffAddr alex_check offset- - new_s = if GTE(offset,0#) && EQ(check,ord_c)- then alexIndexInt16OffAddr alex_table offset- else alexIndexInt16OffAddr alex_deflt s- in- case new_s of- -1# -> (new_acc, input)- -- on an error, we want to keep the input *before* the- -- character that failed, not after.- _ -> alex_scan_tkn user orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)- -- note that the length is increased ONLY if this is the 1st byte in a char encoding)- new_input new_s new_acc- }- where- check_accs (AlexAccNone) = last_acc- check_accs (AlexAcc a ) = AlexLastAcc a input (I# (len))- check_accs (AlexAccSkip) = AlexLastSkip input (I# (len))--{-# LINE 198 "templates/GenericTemplate.hs" #-}--data AlexLastAcc a- = AlexNone- | AlexLastAcc a !AlexInput !Int- | AlexLastSkip !AlexInput !Int--instance Functor AlexLastAcc where- fmap f AlexNone = AlexNone- fmap f (AlexLastAcc x y z) = AlexLastAcc (f x) y z- fmap f (AlexLastSkip x y) = AlexLastSkip x y--data AlexAcc a user- = AlexAccNone- | AlexAcc a- | AlexAccSkip--{-# LINE 242 "templates/GenericTemplate.hs" #-}---- used by wrappers-iUnbox (I# (i)) = i-
ewe.cabal view
@@ -2,9 +2,9 @@ -- see http://haskell.org/cabal/users-guide/ name: ewe-version: 0.1.0.46-synopsis: A language for teaching simple programming languages-description: Another implemention of the EWE programming language originally created and designed by Kent D. Lee. EWE is an extension of the RAM programming language (Ravin Sethi).+version: 0.3.1.1+synopsis: An interpreter for EWE programming language+description: A Haskell implementation of the EWE programming language originally created and developed by Kent D. Lee. EWE is an extension of the RAM programming language. RAM was created by Sethi. This is use for academic purpose only. homepage: http://github.com/jfcmacro/ewe license: BSD3 license-file: LICENSE@@ -12,20 +12,34 @@ maintainer: fcardona@eafit.edu.co -- copyright: category: Language-build-type: Simple+build-type: Custom cabal-version: >=1.8-extra-source-files: src-ag/Language/EWE/CheckGrammar.ag src-ag/Language/EWE/AbsSyn.ag+stability: experimental+extra-source-files: + src-ag/Language/EWE/CheckGrammar.ag + src-ag/Language/EWE/PPProg.ag+ src-ag/Language/EWE/AbsSyn.ag+tested-with: GHC == 8.2.2 +custom-setup+ setup-depends: base >= 4.5 && < 5,+ uuagc-cabal >= 1.1.0.0,+ uulib >= 0.9.23,+ uuagc >= 0.9.52.1,+ Cabal >= 1.8 + executable ewe main-is: Main.hs+ hs-source-dirs:+ app, src, src-ag Build-depends: base >=4.5 && < 5, transformers >=0.3, mtl >= 2.1, containers >= 0.4.2, array >= 0.4.0.0,- pretty >= 1.1- hs-source-dirs: src, src-ag- build-tools: alex, happy+ pretty >= 1.1,+ uuagc-cabal >= 1.1.0.0+ build-tools: alex, happy, uuagc other-modules: Language.EWE.AbsSyn, Language.EWE.Utils, Language.EWE.VM,@@ -34,8 +48,9 @@ Language.EWE.Scanner, Language.EWE.CheckGrammar, Language.EWE.Parser- x-agmodule: file: "src-ag/Language/EWE/AbsSyn.ag" options : data, pretty, haskellsyntax, module "Language.EWE.AbsSyn", output "src/Language/EWE/AbsSyn.hs"- x-agmodule: file: "src-ag/Language/EWE/CheckGrammar.ag" options : semfuns, pretty, haskellsyntax, catas, wrappers, signatures, module "Language.EWE.CheckGrammar", output "src/Language/EWE/CheckGrammar.hs"+ + x-agmodule: file: "src-ag/Language/EWE/AbsSyn.ag" options : data, pretty, haskellsyntax, module "Language.EWE.AbsSyn" -- , output "src/Language/EWE/AbsSyn.hs"+ x-agmodule: file: "src-ag/Language/EWE/CheckGrammar.ag" options : semfuns, pretty, haskellsyntax, catas, wrappers, signatures, module "Language.EWE.CheckGrammar" -- , output "src/Language/EWE/CheckGrammar.hs" source-repository head type: git
+ src-ag/Language/EWE/PPProg.ag view
@@ -0,0 +1,129 @@+imports+{+import Prelude hiding ((<>))+import Text.PrettyPrint+}++attr MRef+ syn pp :: {Doc}++attr Cond+ syn pp :: {Doc}++attr Equ+ syn pp :: {Doc}++attr Equates+ syn pp use {$$} {empty} :: {Doc}++attr Labels+ syn pp use {<==>} {empty} :: {Doc}++attr Stmt+ syn pp :: {Doc}++attr Stmts+ syn pp use {($$)} {empty} :: {Doc}++attr Prog+ syn pp :: {Doc}++attr Instr+ syn pp :: {Doc}++sem MRef+ | MRefI lhs.pp = { text "M" <> brackets ( int @int ) }+ | MRefId lhs.pp = { text "M" <>+ brackets (text @string) }++sem Cond+ | CLET lhs.pp = { text "<=" }+ | CLT lhs.pp = { char '<' }+ | CGET lhs.pp = { text ">=" }+ | CGT lhs.pp = { char '>' }+ | CE lhs.pp = { char '=' }+ | CNE lhs.pp = { text "<>" }++sem Equ+ | Tuple lhs.pp = { text "equ" <+> nest 5 (text @x1)+ <+> nest 10 (text "M" <> brackets (int @x2)) }++sem Stmt+ | Stmt lhs.pp = { @labels.pp $$ @instr.pp }++sem Prog+ | Prg lhs.pp = { @stms.pp $$ @equates.pp }++sem Instr+ | IMMI lhs.pp = { @dest.pp <+> nest 5 (text ":=") <+> nest 5 (int @int) }+ | IMMS lhs.pp = { @dest.pp <+> nest 5 (text ":=")+ <+> nest 5 (doubleQuotes (text @string)) }+ | IMRPC lhs.pp = { @dest.pp <+> nest 5 (text ":=")+ <+> nest 5 (text "PC")+ <+> char '+'+ <+> int @int+ }+ | SPC lhs.pp = { text "PC" <+> nest 5 (text ":=")+ <+> nest 5 @oper.pp+ }+ | IMMM lhs.pp = { @dest.pp <+> nest 5 (text ":=")+ <+> nest 5 @oper.pp+ }+ | IAdd lhs.pp = { @dest.pp <+> nest 5 (text ":=")+ <+> nest 5 @left.pp+ <+> char '+'+ <+> @right.pp+ }+ | ISub lhs.pp = { @dest.pp <+> nest 5 (text ":=")+ <+> nest 5 @left.pp+ <+> char '-'+ <+> @right.pp+ }+ | IMul lhs.pp = { @dest.pp <+> nest 5 (text ":=")+ <+> nest 5 @left.pp+ <+> char '*'+ <+> @right.pp+ }+ | IDiv lhs.pp = { @dest.pp <+> nest 5 (text ":=")+ <+> nest 5 @left.pp+ <+> char '/'+ <+> @right.pp+ }+ | IMod lhs.pp = { @dest.pp <+> nest 5 (text ":=")+ <+> nest 5 @left.pp+ <+> char '%'+ <+> @right.pp+ }+ | IMRI lhs.pp = { @dest.pp <+> nest 5 (text ":=")+ <+> nest 5 (char 'M')+ <> brackets (@oper.pp+ <+> char '+'+ <+> int @int)+ }+ | IMMR lhs.pp = { char 'M' <> brackets (@dest.pp+ <+> char '+'+ <+> int @int)+ <+> nest 5 (text ":=")+ <+> nest 5 @oper.pp+ }+ | IRI lhs.pp = { text "readInt" <> parens @oper.pp }+ | IWI lhs.pp = { text "writeInt" <> parens @oper.pp }+ | IRS lhs.pp = { text "readStr" <> parens (@left.pp <> comma+ <+> @right.pp) }+ | IWS lhs.pp = { text "writeStr" <> parens @oper.pp }+ | IGI lhs.pp = { text "goto" <+> int @int }+ | IGS lhs.pp = { text "goto" <+> text @string }+ | IFI lhs.pp = { text "if" <+> @bcond.pp <+> @cond.pp <+> @then.pp+ <+> text "then" <+> text "goto" <+> int @int }+ | IFS lhs.pp = { text "if" <+> @bcond.pp <+> @cond.pp <+> @then.pp+ <+> text "then" <+> text "goto"+ <+> text @string }+ | IH lhs.pp = { text "halt" }+ | IB lhs.pp = { text "break" }+ | INI lhs.pp = { empty }++{+(<==>) :: String -> Doc -> Doc+s <==> doc = text s $$ doc+}+-- include "AbsSyn.ag"
− src/Language/EWE/AbsSyn.hs
@@ -1,181 +0,0 @@----- UUAGC 0.9.52.1 (src-ag/Language/EWE/AbsSyn.ag)-module Language.EWE.AbsSyn where--- Cond ---------------------------------------------------------{-- alternatives:- alternative CLET:- alternative CLT:- alternative CGET:- alternative CGT:- alternative CE:- alternative CNE:--}-data Cond = CLET- | CLT- | CGET- | CGT- | CE- | CNE- deriving ( Eq,Show)--- Equ ----------------------------------------------------------{-- alternatives:- alternative Tuple:- child x1 : {String}- child x2 : {Int}--}-type Equ = ( (String),(Int))--- Equates ------------------------------------------------------{-- alternatives:- alternative Cons:- child hd : Equ - child tl : Equates - alternative Nil:--}-type Equates = [Equ]--- Instr --------------------------------------------------------{-- alternatives:- alternative IMMI:- child dest : MRef - child int : {Int}- alternative IMMS:- child dest : MRef - child string : {String}- alternative IMRPC:- child dest : MRef - child int : {Int}- alternative SPC:- child oper : MRef - alternative IMMM:- child dest : MRef - child oper : MRef - alternative IAdd:- child dest : MRef - child left : MRef - child right : MRef - alternative ISub:- child dest : MRef - child left : MRef - child right : MRef - alternative IMul:- child dest : MRef - child left : MRef - child right : MRef - alternative IDiv:- child dest : MRef - child left : MRef - child right : MRef - alternative IMod:- child dest : MRef - child left : MRef - child right : MRef - alternative IMRI:- child dest : MRef - child oper : MRef - child int : {Int}- alternative IMMR:- child dest : MRef - child int : {Int}- child oper : MRef - alternative IRI:- child oper : MRef - alternative IWI:- child oper : MRef - alternative IRS:- child left : MRef - child right : MRef - alternative IWS:- child oper : MRef - alternative IGI:- child int : {Int}- alternative IGS:- child string : {String}- alternative IFI:- child bcond : MRef - child cond : Cond - child then : MRef - child int : {Int}- alternative IFS:- child bcond : MRef - child cond : Cond - child then : MRef - child string : {String}- alternative IH:- alternative IB:- alternative INI:--}-data Instr = IMMI (MRef) (Int)- | IMMS (MRef) (String)- | IMRPC (MRef) (Int)- | SPC (MRef)- | IMMM (MRef) (MRef)- | IAdd (MRef) (MRef) (MRef)- | ISub (MRef) (MRef) (MRef)- | IMul (MRef) (MRef) (MRef)- | IDiv (MRef) (MRef) (MRef)- | IMod (MRef) (MRef) (MRef)- | IMRI (MRef) (MRef) (Int)- | IMMR (MRef) (Int) (MRef)- | IRI (MRef)- | IWI (MRef)- | IRS (MRef) (MRef)- | IWS (MRef)- | IGI (Int)- | IGS (String)- | IFI (MRef) (Cond) (MRef) (Int)- | IFS (MRef) (Cond) (MRef) (String)- | IH- | IB- | INI- deriving ( Eq,Show)--- Labels -------------------------------------------------------{-- alternatives:- alternative Cons:- child hd : {String}- child tl : Labels - alternative Nil:--}-type Labels = [(String)]--- MRef ---------------------------------------------------------{-- alternatives:- alternative MRefI:- child int : {Int}- alternative MRefId:- child string : {String}--}-data MRef = MRefI (Int)- | MRefId (String)- deriving ( Eq,Show)--- Prog ---------------------------------------------------------{-- alternatives:- alternative Prg:- child stms : Stmts - child equates : Equates --}-data Prog = Prg (Stmts) (Equates)- deriving ( Eq,Show)--- Stmt ---------------------------------------------------------{-- alternatives:- alternative Stmt:- child labels : Labels - child instr : Instr --}-data Stmt = Stmt (Labels) (Instr)- deriving ( Eq,Show)--- Stmts --------------------------------------------------------{-- alternatives:- alternative Cons:- child hd : Stmt - child tl : Stmts - alternative Nil:--}-type Stmts = [Stmt]
− src/Language/EWE/CheckGrammar.hs
@@ -1,1853 +0,0 @@----- UUAGC 0.9.52.1 (src-ag/Language/EWE/CheckGrammar.ag)-module Language.EWE.CheckGrammar where-{-# LINE 2 "src-ag/Language/EWE/PPProg.ag" #-}--import Text.PrettyPrint-{-# LINE 9 "src/Language/EWE/CheckGrammar.hs" #-}--{-# LINE 2 "src-ag/Language/EWE/CheckGrammar.ag" #-}--import qualified Data.Set as Set-import qualified Data.Map as Map-import Language.EWE.AbsSyn-import Language.EWE.Utils-{-# LINE 17 "src/Language/EWE/CheckGrammar.hs" #-}-{-# LINE 124 "src-ag/Language/EWE/PPProg.ag" #-}--(<==>) :: String -> Doc -> Doc-s <==> doc = text s $$ doc-{-# LINE 22 "src/Language/EWE/CheckGrammar.hs" #-}--{-# LINE 110 "src-ag/Language/EWE/CheckGrammar.ag" #-}--isLabelDef :: String -> Set.Set String -> Either String ()-isLabelDef str sets- | str `Set.member` sets = Right ()- | otherwise = Left $ "Label: " ++ str ++ " is not defined "--isLabelNotDef :: String -> Set.Set String -> Either String ()-isLabelNotDef str sets- | str `Set.member` sets = Left $ "Label: " ++ str ++ " is already defined "- | otherwise = Right ()--isMemRefDef :: String -> Map.Map String Int -> Either String ()-isMemRefDef str map- | str `Map.member` map = Right ()- | otherwise = Left $ "Mem Ref: " ++ str ++ " is not defined"-{-# LINE 40 "src/Language/EWE/CheckGrammar.hs" #-}--- Cond ---------------------------------------------------------{-- visit 0:- synthesized attribute:- pp : Doc- alternatives:- alternative CLET:- alternative CLT:- alternative CGET:- alternative CGT:- alternative CE:- alternative CNE:--}--- cata-sem_Cond :: Cond ->- T_Cond-sem_Cond (CLET) =- (sem_Cond_CLET)-sem_Cond (CLT) =- (sem_Cond_CLT)-sem_Cond (CGET) =- (sem_Cond_CGET)-sem_Cond (CGT) =- (sem_Cond_CGT)-sem_Cond (CE) =- (sem_Cond_CE)-sem_Cond (CNE) =- (sem_Cond_CNE)--- semantic domain-type T_Cond = ( Doc)-data Inh_Cond = Inh_Cond {}-data Syn_Cond = Syn_Cond {pp_Syn_Cond :: Doc}-wrap_Cond :: T_Cond ->- Inh_Cond ->- Syn_Cond-wrap_Cond sem (Inh_Cond) =- (let ( _lhsOpp) = sem- in (Syn_Cond _lhsOpp))-sem_Cond_CLET :: T_Cond-sem_Cond_CLET =- (let _lhsOpp :: Doc- -- "src-ag/Language/EWE/PPProg.ag"(line 39, column 11)- _lhsOpp =- ({-# LINE 39 "src-ag/Language/EWE/PPProg.ag" #-}- text "<="- {-# LINE 86 "src/Language/EWE/CheckGrammar.hs" #-}- )- in ( _lhsOpp))-sem_Cond_CLT :: T_Cond-sem_Cond_CLT =- (let _lhsOpp :: Doc- -- "src-ag/Language/EWE/PPProg.ag"(line 40, column 11)- _lhsOpp =- ({-# LINE 40 "src-ag/Language/EWE/PPProg.ag" #-}- char '<'- {-# LINE 96 "src/Language/EWE/CheckGrammar.hs" #-}- )- in ( _lhsOpp))-sem_Cond_CGET :: T_Cond-sem_Cond_CGET =- (let _lhsOpp :: Doc- -- "src-ag/Language/EWE/PPProg.ag"(line 41, column 11)- _lhsOpp =- ({-# LINE 41 "src-ag/Language/EWE/PPProg.ag" #-}- text ">="- {-# LINE 106 "src/Language/EWE/CheckGrammar.hs" #-}- )- in ( _lhsOpp))-sem_Cond_CGT :: T_Cond-sem_Cond_CGT =- (let _lhsOpp :: Doc- -- "src-ag/Language/EWE/PPProg.ag"(line 42, column 11)- _lhsOpp =- ({-# LINE 42 "src-ag/Language/EWE/PPProg.ag" #-}- char '>'- {-# LINE 116 "src/Language/EWE/CheckGrammar.hs" #-}- )- in ( _lhsOpp))-sem_Cond_CE :: T_Cond-sem_Cond_CE =- (let _lhsOpp :: Doc- -- "src-ag/Language/EWE/PPProg.ag"(line 43, column 11)- _lhsOpp =- ({-# LINE 43 "src-ag/Language/EWE/PPProg.ag" #-}- char '='- {-# LINE 126 "src/Language/EWE/CheckGrammar.hs" #-}- )- in ( _lhsOpp))-sem_Cond_CNE :: T_Cond-sem_Cond_CNE =- (let _lhsOpp :: Doc- -- "src-ag/Language/EWE/PPProg.ag"(line 44, column 11)- _lhsOpp =- ({-# LINE 44 "src-ag/Language/EWE/PPProg.ag" #-}- text "<>"- {-# LINE 136 "src/Language/EWE/CheckGrammar.hs" #-}- )- in ( _lhsOpp))--- Equ ----------------------------------------------------------{-- visit 0:- chained attribute:- idMemRef : Map.Map String Int- synthesized attributes:- pp : Doc- res : Either String ()- alternatives:- alternative Tuple:- child x1 : {String}- child x2 : {Int}--}--- cata-sem_Equ :: Equ ->- T_Equ-sem_Equ ( x1,x2) =- (sem_Equ_Tuple x1 x2)--- semantic domain-type T_Equ = (Map.Map String Int) ->- ( (Map.Map String Int),Doc,(Either String ()))-data Inh_Equ = Inh_Equ {idMemRef_Inh_Equ :: (Map.Map String Int)}-data Syn_Equ = Syn_Equ {idMemRef_Syn_Equ :: (Map.Map String Int),pp_Syn_Equ :: Doc,res_Syn_Equ :: (Either String ())}-wrap_Equ :: T_Equ ->- Inh_Equ ->- Syn_Equ-wrap_Equ sem (Inh_Equ _lhsIidMemRef) =- (let ( _lhsOidMemRef,_lhsOpp,_lhsOres) = sem _lhsIidMemRef- in (Syn_Equ _lhsOidMemRef _lhsOpp _lhsOres))-sem_Equ_Tuple :: String ->- Int ->- T_Equ-sem_Equ_Tuple x1_ x2_ =- (\ _lhsIidMemRef ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- _lhsOidMemRef :: (Map.Map String Int)- -- "src-ag/Language/EWE/PPProg.ag"(line 47, column 11)- _lhsOpp =- ({-# LINE 47 "src-ag/Language/EWE/PPProg.ag" #-}- text "equ" <+> nest 5 (text x1_)- <+> nest 10 (text "M" <> brackets (int x2_))- {-# LINE 181 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 46, column 11)- _lhsOres =- ({-# LINE 46 "src-ag/Language/EWE/CheckGrammar.ag" #-}- if x1_ `Map.member` _lhsIidMemRef- then Left $ x1_ ++ " was already defined "- else Right ()- {-# LINE 189 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 46, column 11)- _lhsOidMemRef =- ({-# LINE 50 "src-ag/Language/EWE/CheckGrammar.ag" #-}- Map.insert x1_ x2_ _lhsIidMemRef- {-# LINE 195 "src/Language/EWE/CheckGrammar.hs" #-}- )- in ( _lhsOidMemRef,_lhsOpp,_lhsOres)))--- Equates ------------------------------------------------------{-- visit 0:- chained attribute:- idMemRef : Map.Map String Int- synthesized attribute:- pp : Doc- alternatives:- alternative Cons:- child hd : Equ - child tl : Equates - alternative Nil:--}--- cata-sem_Equates :: Equates ->- T_Equates-sem_Equates list =- (Prelude.foldr sem_Equates_Cons sem_Equates_Nil (Prelude.map sem_Equ list))--- semantic domain-type T_Equates = (Map.Map String Int) ->- ( (Map.Map String Int),Doc)-data Inh_Equates = Inh_Equates {idMemRef_Inh_Equates :: (Map.Map String Int)}-data Syn_Equates = Syn_Equates {idMemRef_Syn_Equates :: (Map.Map String Int),pp_Syn_Equates :: Doc}-wrap_Equates :: T_Equates ->- Inh_Equates ->- Syn_Equates-wrap_Equates sem (Inh_Equates _lhsIidMemRef) =- (let ( _lhsOidMemRef,_lhsOpp) = sem _lhsIidMemRef- in (Syn_Equates _lhsOidMemRef _lhsOpp))-sem_Equates_Cons :: T_Equ ->- T_Equates ->- T_Equates-sem_Equates_Cons hd_ tl_ =- (\ _lhsIidMemRef ->- (let _lhsOpp :: Doc- _lhsOidMemRef :: (Map.Map String Int)- _hdOidMemRef :: (Map.Map String Int)- _tlOidMemRef :: (Map.Map String Int)- _hdIidMemRef :: (Map.Map String Int)- _hdIpp :: Doc- _hdIres :: (Either String ())- _tlIidMemRef :: (Map.Map String Int)- _tlIpp :: Doc- -- use rule "src-ag/Language/EWE/PPProg.ag"(line 16, column 10)- _lhsOpp =- ({-# LINE 16 "src-ag/Language/EWE/PPProg.ag" #-}- _hdIpp $$ _tlIpp- {-# LINE 245 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (up)- _lhsOidMemRef =- ({-# LINE 13 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _tlIidMemRef- {-# LINE 251 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _hdOidMemRef =- ({-# LINE 16 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRef- {-# LINE 257 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (chain)- _tlOidMemRef =- ({-# LINE 13 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _hdIidMemRef- {-# LINE 263 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _hdIidMemRef,_hdIpp,_hdIres) =- hd_ _hdOidMemRef- ( _tlIidMemRef,_tlIpp) =- tl_ _tlOidMemRef- in ( _lhsOidMemRef,_lhsOpp)))-sem_Equates_Nil :: T_Equates-sem_Equates_Nil =- (\ _lhsIidMemRef ->- (let _lhsOpp :: Doc- _lhsOidMemRef :: (Map.Map String Int)- -- use rule "src-ag/Language/EWE/PPProg.ag"(line 16, column 10)- _lhsOpp =- ({-# LINE 16 "src-ag/Language/EWE/PPProg.ag" #-}- empty- {-# LINE 279 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (chain)- _lhsOidMemRef =- ({-# LINE 13 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRef- {-# LINE 285 "src/Language/EWE/CheckGrammar.hs" #-}- )- in ( _lhsOidMemRef,_lhsOpp)))--- Instr --------------------------------------------------------{-- visit 0:- inherited attributes:- idMemRefDef : Map.Map String Int- labelFound : Set.Set String- synthesized attributes:- pp : Doc- res : Either String ()- alternatives:- alternative IMMI:- child dest : MRef - child int : {Int}- alternative IMMS:- child dest : MRef - child string : {String}- alternative IMRPC:- child dest : MRef - child int : {Int}- alternative SPC:- child oper : MRef - alternative IMMM:- child dest : MRef - child oper : MRef - alternative IAdd:- child dest : MRef - child left : MRef - child right : MRef - alternative ISub:- child dest : MRef - child left : MRef - child right : MRef - alternative IMul:- child dest : MRef - child left : MRef - child right : MRef - alternative IDiv:- child dest : MRef - child left : MRef - child right : MRef - alternative IMod:- child dest : MRef - child left : MRef - child right : MRef - alternative IMRI:- child dest : MRef - child oper : MRef - child int : {Int}- alternative IMMR:- child dest : MRef - child int : {Int}- child oper : MRef - alternative IRI:- child oper : MRef - alternative IWI:- child oper : MRef - alternative IRS:- child left : MRef - child right : MRef - alternative IWS:- child oper : MRef - alternative IGI:- child int : {Int}- alternative IGS:- child string : {String}- alternative IFI:- child bcond : MRef - child cond : Cond - child then : MRef - child int : {Int}- alternative IFS:- child bcond : MRef - child cond : Cond - child then : MRef - child string : {String}- alternative IH:- alternative IB:- alternative INI:--}--- cata-sem_Instr :: Instr ->- T_Instr-sem_Instr (IMMI _dest _int) =- (sem_Instr_IMMI (sem_MRef _dest) _int)-sem_Instr (IMMS _dest _string) =- (sem_Instr_IMMS (sem_MRef _dest) _string)-sem_Instr (IMRPC _dest _int) =- (sem_Instr_IMRPC (sem_MRef _dest) _int)-sem_Instr (SPC _oper) =- (sem_Instr_SPC (sem_MRef _oper))-sem_Instr (IMMM _dest _oper) =- (sem_Instr_IMMM (sem_MRef _dest) (sem_MRef _oper))-sem_Instr (IAdd _dest _left _right) =- (sem_Instr_IAdd (sem_MRef _dest) (sem_MRef _left) (sem_MRef _right))-sem_Instr (ISub _dest _left _right) =- (sem_Instr_ISub (sem_MRef _dest) (sem_MRef _left) (sem_MRef _right))-sem_Instr (IMul _dest _left _right) =- (sem_Instr_IMul (sem_MRef _dest) (sem_MRef _left) (sem_MRef _right))-sem_Instr (IDiv _dest _left _right) =- (sem_Instr_IDiv (sem_MRef _dest) (sem_MRef _left) (sem_MRef _right))-sem_Instr (IMod _dest _left _right) =- (sem_Instr_IMod (sem_MRef _dest) (sem_MRef _left) (sem_MRef _right))-sem_Instr (IMRI _dest _oper _int) =- (sem_Instr_IMRI (sem_MRef _dest) (sem_MRef _oper) _int)-sem_Instr (IMMR _dest _int _oper) =- (sem_Instr_IMMR (sem_MRef _dest) _int (sem_MRef _oper))-sem_Instr (IRI _oper) =- (sem_Instr_IRI (sem_MRef _oper))-sem_Instr (IWI _oper) =- (sem_Instr_IWI (sem_MRef _oper))-sem_Instr (IRS _left _right) =- (sem_Instr_IRS (sem_MRef _left) (sem_MRef _right))-sem_Instr (IWS _oper) =- (sem_Instr_IWS (sem_MRef _oper))-sem_Instr (IGI _int) =- (sem_Instr_IGI _int)-sem_Instr (IGS _string) =- (sem_Instr_IGS _string)-sem_Instr (IFI _bcond _cond _then _int) =- (sem_Instr_IFI (sem_MRef _bcond) (sem_Cond _cond) (sem_MRef _then) _int)-sem_Instr (IFS _bcond _cond _then _string) =- (sem_Instr_IFS (sem_MRef _bcond) (sem_Cond _cond) (sem_MRef _then) _string)-sem_Instr (IH) =- (sem_Instr_IH)-sem_Instr (IB) =- (sem_Instr_IB)-sem_Instr (INI) =- (sem_Instr_INI)--- semantic domain-type T_Instr = (Map.Map String Int) ->- (Set.Set String) ->- ( Doc,(Either String ()))-data Inh_Instr = Inh_Instr {idMemRefDef_Inh_Instr :: (Map.Map String Int),labelFound_Inh_Instr :: (Set.Set String)}-data Syn_Instr = Syn_Instr {pp_Syn_Instr :: Doc,res_Syn_Instr :: (Either String ())}-wrap_Instr :: T_Instr ->- Inh_Instr ->- Syn_Instr-wrap_Instr sem (Inh_Instr _lhsIidMemRefDef _lhsIlabelFound) =- (let ( _lhsOpp,_lhsOres) = sem _lhsIidMemRefDef _lhsIlabelFound- in (Syn_Instr _lhsOpp _lhsOres))-sem_Instr_IMMI :: T_MRef ->- Int ->- T_Instr-sem_Instr_IMMI dest_ int_ =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- _destOidMemRefDef :: ( Map.Map String Int )- _destIpp :: Doc- _destIres :: ( Either String () )- -- "src-ag/Language/EWE/PPProg.ag"(line 57, column 11)- _lhsOpp =- ({-# LINE 57 "src-ag/Language/EWE/PPProg.ag" #-}- _destIpp <+> nest 5 (text ":=") <+> nest 5 (int int_)- {-# LINE 443 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 83, column 11)- _lhsOres =- ({-# LINE 83 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _destIres- {-# LINE 449 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _destOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 455 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _destIpp,_destIres) =- dest_ _destOidMemRefDef- in ( _lhsOpp,_lhsOres)))-sem_Instr_IMMS :: T_MRef ->- String ->- T_Instr-sem_Instr_IMMS dest_ string_ =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- _destOidMemRefDef :: ( Map.Map String Int )- _destIpp :: Doc- _destIres :: ( Either String () )- -- "src-ag/Language/EWE/PPProg.ag"(line 58, column 11)- _lhsOpp =- ({-# LINE 58 "src-ag/Language/EWE/PPProg.ag" #-}- _destIpp <+> nest 5 (text ":=")- <+> nest 5 (doubleQuotes (text string_))- {-# LINE 476 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 84, column 11)- _lhsOres =- ({-# LINE 84 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _destIres- {-# LINE 482 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _destOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 488 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _destIpp,_destIres) =- dest_ _destOidMemRefDef- in ( _lhsOpp,_lhsOres)))-sem_Instr_IMRPC :: T_MRef ->- Int ->- T_Instr-sem_Instr_IMRPC dest_ int_ =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- _destOidMemRefDef :: ( Map.Map String Int )- _destIpp :: Doc- _destIres :: ( Either String () )- -- "src-ag/Language/EWE/PPProg.ag"(line 60, column 11)- _lhsOpp =- ({-# LINE 60 "src-ag/Language/EWE/PPProg.ag" #-}- _destIpp <+> nest 5 (text ":=")- <+> nest 5 (text "PC")- <+> char '+'- <+> int int_- {-# LINE 511 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 85, column 11)- _lhsOres =- ({-# LINE 85 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _destIres- {-# LINE 517 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _destOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 523 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _destIpp,_destIres) =- dest_ _destOidMemRefDef- in ( _lhsOpp,_lhsOres)))-sem_Instr_SPC :: T_MRef ->- T_Instr-sem_Instr_SPC oper_ =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- _operOidMemRefDef :: ( Map.Map String Int )- _operIpp :: Doc- _operIres :: ( Either String () )- -- "src-ag/Language/EWE/PPProg.ag"(line 65, column 11)- _lhsOpp =- ({-# LINE 65 "src-ag/Language/EWE/PPProg.ag" #-}- text "PC" <+> nest 5 (text ":=")- <+> nest 5 _operIpp- {-# LINE 543 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 86, column 11)- _lhsOres =- ({-# LINE 86 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _operIres- {-# LINE 549 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _operOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 555 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _operIpp,_operIres) =- oper_ _operOidMemRefDef- in ( _lhsOpp,_lhsOres)))-sem_Instr_IMMM :: T_MRef ->- T_MRef ->- T_Instr-sem_Instr_IMMM dest_ oper_ =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- _destOidMemRefDef :: ( Map.Map String Int )- _operOidMemRefDef :: ( Map.Map String Int )- _destIpp :: Doc- _destIres :: ( Either String () )- _operIpp :: Doc- _operIres :: ( Either String () )- -- "src-ag/Language/EWE/PPProg.ag"(line 68, column 11)- _lhsOpp =- ({-# LINE 68 "src-ag/Language/EWE/PPProg.ag" #-}- _destIpp <+> nest 5 (text ":=")- <+> nest 5 _operIpp- {-# LINE 579 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 87, column 11)- _lhsOres =- ({-# LINE 87 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _destIres <--> _operIres- {-# LINE 585 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _destOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 591 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _operOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 597 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _destIpp,_destIres) =- dest_ _destOidMemRefDef- ( _operIpp,_operIres) =- oper_ _operOidMemRefDef- in ( _lhsOpp,_lhsOres)))-sem_Instr_IAdd :: T_MRef ->- T_MRef ->- T_MRef ->- T_Instr-sem_Instr_IAdd dest_ left_ right_ =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- _destOidMemRefDef :: ( Map.Map String Int )- _leftOidMemRefDef :: ( Map.Map String Int )- _rightOidMemRefDef :: ( Map.Map String Int )- _destIpp :: Doc- _destIres :: ( Either String () )- _leftIpp :: Doc- _leftIres :: ( Either String () )- _rightIpp :: Doc- _rightIres :: ( Either String () )- -- "src-ag/Language/EWE/PPProg.ag"(line 71, column 11)- _lhsOpp =- ({-# LINE 71 "src-ag/Language/EWE/PPProg.ag" #-}- _destIpp <+> nest 5 (text ":=")- <+> nest 5 _leftIpp- <+> char '+'- <+> _rightIpp- {-# LINE 629 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 88, column 11)- _lhsOres =- ({-# LINE 88 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _destIres <--> _leftIres <--> _rightIres- {-# LINE 635 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _destOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 641 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _leftOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 647 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _rightOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 653 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _destIpp,_destIres) =- dest_ _destOidMemRefDef- ( _leftIpp,_leftIres) =- left_ _leftOidMemRefDef- ( _rightIpp,_rightIres) =- right_ _rightOidMemRefDef- in ( _lhsOpp,_lhsOres)))-sem_Instr_ISub :: T_MRef ->- T_MRef ->- T_MRef ->- T_Instr-sem_Instr_ISub dest_ left_ right_ =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- _destOidMemRefDef :: ( Map.Map String Int )- _leftOidMemRefDef :: ( Map.Map String Int )- _rightOidMemRefDef :: ( Map.Map String Int )- _destIpp :: Doc- _destIres :: ( Either String () )- _leftIpp :: Doc- _leftIres :: ( Either String () )- _rightIpp :: Doc- _rightIres :: ( Either String () )- -- "src-ag/Language/EWE/PPProg.ag"(line 76, column 11)- _lhsOpp =- ({-# LINE 76 "src-ag/Language/EWE/PPProg.ag" #-}- _destIpp <+> nest 5 (text ":=")- <+> nest 5 _leftIpp- <+> char '-'- <+> _rightIpp- {-# LINE 687 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 89, column 11)- _lhsOres =- ({-# LINE 89 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _destIres <--> _leftIres <--> _rightIres- {-# LINE 693 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _destOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 699 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _leftOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 705 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _rightOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 711 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _destIpp,_destIres) =- dest_ _destOidMemRefDef- ( _leftIpp,_leftIres) =- left_ _leftOidMemRefDef- ( _rightIpp,_rightIres) =- right_ _rightOidMemRefDef- in ( _lhsOpp,_lhsOres)))-sem_Instr_IMul :: T_MRef ->- T_MRef ->- T_MRef ->- T_Instr-sem_Instr_IMul dest_ left_ right_ =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- _destOidMemRefDef :: ( Map.Map String Int )- _leftOidMemRefDef :: ( Map.Map String Int )- _rightOidMemRefDef :: ( Map.Map String Int )- _destIpp :: Doc- _destIres :: ( Either String () )- _leftIpp :: Doc- _leftIres :: ( Either String () )- _rightIpp :: Doc- _rightIres :: ( Either String () )- -- "src-ag/Language/EWE/PPProg.ag"(line 81, column 11)- _lhsOpp =- ({-# LINE 81 "src-ag/Language/EWE/PPProg.ag" #-}- _destIpp <+> nest 5 (text ":=")- <+> nest 5 _leftIpp- <+> char '*'- <+> _rightIpp- {-# LINE 745 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 90, column 11)- _lhsOres =- ({-# LINE 90 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _destIres <--> _leftIres <--> _rightIres- {-# LINE 751 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _destOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 757 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _leftOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 763 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _rightOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 769 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _destIpp,_destIres) =- dest_ _destOidMemRefDef- ( _leftIpp,_leftIres) =- left_ _leftOidMemRefDef- ( _rightIpp,_rightIres) =- right_ _rightOidMemRefDef- in ( _lhsOpp,_lhsOres)))-sem_Instr_IDiv :: T_MRef ->- T_MRef ->- T_MRef ->- T_Instr-sem_Instr_IDiv dest_ left_ right_ =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- _destOidMemRefDef :: ( Map.Map String Int )- _leftOidMemRefDef :: ( Map.Map String Int )- _rightOidMemRefDef :: ( Map.Map String Int )- _destIpp :: Doc- _destIres :: ( Either String () )- _leftIpp :: Doc- _leftIres :: ( Either String () )- _rightIpp :: Doc- _rightIres :: ( Either String () )- -- "src-ag/Language/EWE/PPProg.ag"(line 86, column 11)- _lhsOpp =- ({-# LINE 86 "src-ag/Language/EWE/PPProg.ag" #-}- _destIpp <+> nest 5 (text ":=")- <+> nest 5 _leftIpp- <+> char '/'- <+> _rightIpp- {-# LINE 803 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 91, column 11)- _lhsOres =- ({-# LINE 91 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _destIres <--> _leftIres <--> _rightIres- {-# LINE 809 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _destOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 815 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _leftOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 821 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _rightOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 827 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _destIpp,_destIres) =- dest_ _destOidMemRefDef- ( _leftIpp,_leftIres) =- left_ _leftOidMemRefDef- ( _rightIpp,_rightIres) =- right_ _rightOidMemRefDef- in ( _lhsOpp,_lhsOres)))-sem_Instr_IMod :: T_MRef ->- T_MRef ->- T_MRef ->- T_Instr-sem_Instr_IMod dest_ left_ right_ =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- _destOidMemRefDef :: ( Map.Map String Int )- _leftOidMemRefDef :: ( Map.Map String Int )- _rightOidMemRefDef :: ( Map.Map String Int )- _destIpp :: Doc- _destIres :: ( Either String () )- _leftIpp :: Doc- _leftIres :: ( Either String () )- _rightIpp :: Doc- _rightIres :: ( Either String () )- -- "src-ag/Language/EWE/PPProg.ag"(line 91, column 11)- _lhsOpp =- ({-# LINE 91 "src-ag/Language/EWE/PPProg.ag" #-}- _destIpp <+> nest 5 (text ":=")- <+> nest 5 _leftIpp- <+> char '%'- <+> _rightIpp- {-# LINE 861 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 92, column 11)- _lhsOres =- ({-# LINE 92 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _destIres <--> _leftIres <--> _rightIres- {-# LINE 867 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _destOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 873 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _leftOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 879 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _rightOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 885 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _destIpp,_destIres) =- dest_ _destOidMemRefDef- ( _leftIpp,_leftIres) =- left_ _leftOidMemRefDef- ( _rightIpp,_rightIres) =- right_ _rightOidMemRefDef- in ( _lhsOpp,_lhsOres)))-sem_Instr_IMRI :: T_MRef ->- T_MRef ->- Int ->- T_Instr-sem_Instr_IMRI dest_ oper_ int_ =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- _destOidMemRefDef :: ( Map.Map String Int )- _operOidMemRefDef :: ( Map.Map String Int )- _destIpp :: Doc- _destIres :: ( Either String () )- _operIpp :: Doc- _operIres :: ( Either String () )- -- "src-ag/Language/EWE/PPProg.ag"(line 96, column 11)- _lhsOpp =- ({-# LINE 96 "src-ag/Language/EWE/PPProg.ag" #-}- _destIpp <+> nest 5 (text ":=")- <+> nest 5 (char 'M')- <> brackets (_operIpp- <+> char '+'- <+> int int_)- {-# LINE 917 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 93, column 11)- _lhsOres =- ({-# LINE 93 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _destIres <--> _operIres- {-# LINE 923 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _destOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 929 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _operOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 935 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _destIpp,_destIres) =- dest_ _destOidMemRefDef- ( _operIpp,_operIres) =- oper_ _operOidMemRefDef- in ( _lhsOpp,_lhsOres)))-sem_Instr_IMMR :: T_MRef ->- Int ->- T_MRef ->- T_Instr-sem_Instr_IMMR dest_ int_ oper_ =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- _destOidMemRefDef :: ( Map.Map String Int )- _operOidMemRefDef :: ( Map.Map String Int )- _destIpp :: Doc- _destIres :: ( Either String () )- _operIpp :: Doc- _operIres :: ( Either String () )- -- "src-ag/Language/EWE/PPProg.ag"(line 102, column 11)- _lhsOpp =- ({-# LINE 102 "src-ag/Language/EWE/PPProg.ag" #-}- char 'M' <> brackets (_destIpp- <+> char '+'- <+> int int_)- <+> nest 5 (text ":=")- <+> nest 5 _operIpp- {-# LINE 965 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 94, column 11)- _lhsOres =- ({-# LINE 94 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _destIres <--> _operIres- {-# LINE 971 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _destOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 977 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _operOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 983 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _destIpp,_destIres) =- dest_ _destOidMemRefDef- ( _operIpp,_operIres) =- oper_ _operOidMemRefDef- in ( _lhsOpp,_lhsOres)))-sem_Instr_IRI :: T_MRef ->- T_Instr-sem_Instr_IRI oper_ =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- _operOidMemRefDef :: ( Map.Map String Int )- _operIpp :: Doc- _operIres :: ( Either String () )- -- "src-ag/Language/EWE/PPProg.ag"(line 108, column 11)- _lhsOpp =- ({-# LINE 108 "src-ag/Language/EWE/PPProg.ag" #-}- text "readInt" <> parens _operIpp- {-# LINE 1004 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 95, column 11)- _lhsOres =- ({-# LINE 95 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _operIres- {-# LINE 1010 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _operOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 1016 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _operIpp,_operIres) =- oper_ _operOidMemRefDef- in ( _lhsOpp,_lhsOres)))-sem_Instr_IWI :: T_MRef ->- T_Instr-sem_Instr_IWI oper_ =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- _operOidMemRefDef :: ( Map.Map String Int )- _operIpp :: Doc- _operIres :: ( Either String () )- -- "src-ag/Language/EWE/PPProg.ag"(line 109, column 11)- _lhsOpp =- ({-# LINE 109 "src-ag/Language/EWE/PPProg.ag" #-}- text "writeInt" <> parens _operIpp- {-# LINE 1035 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 96, column 11)- _lhsOres =- ({-# LINE 96 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _operIres- {-# LINE 1041 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _operOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 1047 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _operIpp,_operIres) =- oper_ _operOidMemRefDef- in ( _lhsOpp,_lhsOres)))-sem_Instr_IRS :: T_MRef ->- T_MRef ->- T_Instr-sem_Instr_IRS left_ right_ =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- _leftOidMemRefDef :: ( Map.Map String Int )- _rightOidMemRefDef :: ( Map.Map String Int )- _leftIpp :: Doc- _leftIres :: ( Either String () )- _rightIpp :: Doc- _rightIres :: ( Either String () )- -- "src-ag/Language/EWE/PPProg.ag"(line 110, column 11)- _lhsOpp =- ({-# LINE 110 "src-ag/Language/EWE/PPProg.ag" #-}- text "readStr" <> parens (_leftIpp <> comma- <+> _rightIpp)- {-# LINE 1071 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 97, column 11)- _lhsOres =- ({-# LINE 97 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _leftIres <--> _rightIres- {-# LINE 1077 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _leftOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 1083 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _rightOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 1089 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _leftIpp,_leftIres) =- left_ _leftOidMemRefDef- ( _rightIpp,_rightIres) =- right_ _rightOidMemRefDef- in ( _lhsOpp,_lhsOres)))-sem_Instr_IWS :: T_MRef ->- T_Instr-sem_Instr_IWS oper_ =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- _operOidMemRefDef :: ( Map.Map String Int )- _operIpp :: Doc- _operIres :: ( Either String () )- -- "src-ag/Language/EWE/PPProg.ag"(line 112, column 11)- _lhsOpp =- ({-# LINE 112 "src-ag/Language/EWE/PPProg.ag" #-}- text "writeStr" <> parens _operIpp- {-# LINE 1110 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 98, column 11)- _lhsOres =- ({-# LINE 98 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _operIres- {-# LINE 1116 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _operOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 1122 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _operIpp,_operIres) =- oper_ _operOidMemRefDef- in ( _lhsOpp,_lhsOres)))-sem_Instr_IGI :: Int ->- T_Instr-sem_Instr_IGI int_ =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- -- "src-ag/Language/EWE/PPProg.ag"(line 113, column 11)- _lhsOpp =- ({-# LINE 113 "src-ag/Language/EWE/PPProg.ag" #-}- text "goto" <+> int int_- {-# LINE 1138 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 99, column 11)- _lhsOres =- ({-# LINE 99 "src-ag/Language/EWE/CheckGrammar.ag" #-}- Right ()- {-# LINE 1144 "src/Language/EWE/CheckGrammar.hs" #-}- )- in ( _lhsOpp,_lhsOres)))-sem_Instr_IGS :: String ->- T_Instr-sem_Instr_IGS string_ =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- -- "src-ag/Language/EWE/PPProg.ag"(line 114, column 11)- _lhsOpp =- ({-# LINE 114 "src-ag/Language/EWE/PPProg.ag" #-}- text "goto" <+> text string_- {-# LINE 1158 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 100, column 11)- _lhsOres =- ({-# LINE 100 "src-ag/Language/EWE/CheckGrammar.ag" #-}- isLabelDef string_ _lhsIlabelFound- {-# LINE 1164 "src/Language/EWE/CheckGrammar.hs" #-}- )- in ( _lhsOpp,_lhsOres)))-sem_Instr_IFI :: T_MRef ->- T_Cond ->- T_MRef ->- Int ->- T_Instr-sem_Instr_IFI bcond_ cond_ then_ int_ =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- _bcondOidMemRefDef :: ( Map.Map String Int )- _thenOidMemRefDef :: ( Map.Map String Int )- _bcondIpp :: Doc- _bcondIres :: ( Either String () )- _condIpp :: Doc- _thenIpp :: Doc- _thenIres :: ( Either String () )- -- "src-ag/Language/EWE/PPProg.ag"(line 115, column 11)- _lhsOpp =- ({-# LINE 115 "src-ag/Language/EWE/PPProg.ag" #-}- text "if" <+> _bcondIpp <+> _condIpp <+> _thenIpp- <+> text "then" <+> text "goto" <+> int int_- {-# LINE 1189 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 101, column 11)- _lhsOres =- ({-# LINE 101 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _bcondIres <--> _thenIres- {-# LINE 1195 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _bcondOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 1201 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _thenOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 1207 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _bcondIpp,_bcondIres) =- bcond_ _bcondOidMemRefDef- ( _condIpp) =- cond_- ( _thenIpp,_thenIres) =- then_ _thenOidMemRefDef- in ( _lhsOpp,_lhsOres)))-sem_Instr_IFS :: T_MRef ->- T_Cond ->- T_MRef ->- String ->- T_Instr-sem_Instr_IFS bcond_ cond_ then_ string_ =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- _bcondOidMemRefDef :: ( Map.Map String Int )- _thenOidMemRefDef :: ( Map.Map String Int )- _bcondIpp :: Doc- _bcondIres :: ( Either String () )- _condIpp :: Doc- _thenIpp :: Doc- _thenIres :: ( Either String () )- -- "src-ag/Language/EWE/PPProg.ag"(line 117, column 11)- _lhsOpp =- ({-# LINE 117 "src-ag/Language/EWE/PPProg.ag" #-}- text "if" <+> _bcondIpp <+> _condIpp <+> _thenIpp- <+> text "then" <+> text "goto"- <+> text string_- {-# LINE 1239 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 102, column 11)- _lhsOres =- ({-# LINE 102 "src-ag/Language/EWE/CheckGrammar.ag" #-}- isLabelDef string_ _lhsIlabelFound <--> _bcondIres <--> _thenIres- {-# LINE 1245 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _bcondOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 1251 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _thenOidMemRefDef =- ({-# LINE 42 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 1257 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _bcondIpp,_bcondIres) =- bcond_ _bcondOidMemRefDef- ( _condIpp) =- cond_- ( _thenIpp,_thenIres) =- then_ _thenOidMemRefDef- in ( _lhsOpp,_lhsOres)))-sem_Instr_IH :: T_Instr-sem_Instr_IH =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- -- "src-ag/Language/EWE/PPProg.ag"(line 120, column 11)- _lhsOpp =- ({-# LINE 120 "src-ag/Language/EWE/PPProg.ag" #-}- text "halt"- {-# LINE 1276 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 103, column 11)- _lhsOres =- ({-# LINE 103 "src-ag/Language/EWE/CheckGrammar.ag" #-}- Right ()- {-# LINE 1282 "src/Language/EWE/CheckGrammar.hs" #-}- )- in ( _lhsOpp,_lhsOres)))-sem_Instr_IB :: T_Instr-sem_Instr_IB =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- -- "src-ag/Language/EWE/PPProg.ag"(line 121, column 11)- _lhsOpp =- ({-# LINE 121 "src-ag/Language/EWE/PPProg.ag" #-}- text "break"- {-# LINE 1295 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 104, column 11)- _lhsOres =- ({-# LINE 104 "src-ag/Language/EWE/CheckGrammar.ag" #-}- Right ()- {-# LINE 1301 "src/Language/EWE/CheckGrammar.hs" #-}- )- in ( _lhsOpp,_lhsOres)))-sem_Instr_INI :: T_Instr-sem_Instr_INI =- (\ _lhsIidMemRefDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- -- "src-ag/Language/EWE/PPProg.ag"(line 122, column 11)- _lhsOpp =- ({-# LINE 122 "src-ag/Language/EWE/PPProg.ag" #-}- empty- {-# LINE 1314 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 105, column 11)- _lhsOres =- ({-# LINE 105 "src-ag/Language/EWE/CheckGrammar.ag" #-}- Right ()- {-# LINE 1320 "src/Language/EWE/CheckGrammar.hs" #-}- )- in ( _lhsOpp,_lhsOres)))--- Labels -------------------------------------------------------{-- visit 0:- chained attribute:- labelDef : Set.Set String - synthesized attributes:- copy : Labels - pp : Doc- res : Either String () - alternatives:- alternative Cons:- child hd : {String}- child tl : Labels - visit 0:- local copy : _- alternative Nil:- visit 0:- local copy : _--}--- cata-sem_Labels :: Labels ->- T_Labels-sem_Labels list =- (Prelude.foldr sem_Labels_Cons sem_Labels_Nil list)--- semantic domain-type T_Labels = ( Set.Set String ) ->- ( Labels,( Set.Set String ),Doc,( Either String () ))-data Inh_Labels = Inh_Labels {labelDef_Inh_Labels :: ( Set.Set String )}-data Syn_Labels = Syn_Labels {copy_Syn_Labels :: Labels,labelDef_Syn_Labels :: ( Set.Set String ),pp_Syn_Labels :: Doc,res_Syn_Labels :: ( Either String () )}-wrap_Labels :: T_Labels ->- Inh_Labels ->- Syn_Labels-wrap_Labels sem (Inh_Labels _lhsIlabelDef) =- (let ( _lhsOcopy,_lhsOlabelDef,_lhsOpp,_lhsOres) = sem _lhsIlabelDef- in (Syn_Labels _lhsOcopy _lhsOlabelDef _lhsOpp _lhsOres))-sem_Labels_Cons :: String ->- T_Labels ->- T_Labels-sem_Labels_Cons hd_ tl_ =- (\ _lhsIlabelDef ->- (let _lhsOres :: ( Either String () )- _lhsOlabelDef :: ( Set.Set String )- _lhsOpp :: Doc- _lhsOcopy :: Labels- _tlOlabelDef :: ( Set.Set String )- _tlIcopy :: Labels- _tlIlabelDef :: ( Set.Set String )- _tlIpp :: Doc- _tlIres :: ( Either String () )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 53, column 11)- _lhsOres =- ({-# LINE 53 "src-ag/Language/EWE/CheckGrammar.ag" #-}- isLabelNotDef hd_ _tlIlabelDef- {-# LINE 1376 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 53, column 11)- _lhsOlabelDef =- ({-# LINE 54 "src-ag/Language/EWE/CheckGrammar.ag" #-}- Set.insert hd_ _tlIlabelDef- {-# LINE 1382 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- use rule "src-ag/Language/EWE/PPProg.ag"(line 19, column 10)- _lhsOpp =- ({-# LINE 19 "src-ag/Language/EWE/PPProg.ag" #-}- _tlIpp- {-# LINE 1388 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- self rule- _copy =- ({-# LINE 39 "src-ag/Language/EWE/CheckGrammar.ag" #-}- (:) hd_ _tlIcopy- {-# LINE 1394 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- self rule- _lhsOcopy =- ({-# LINE 39 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _copy- {-# LINE 1400 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _tlOlabelDef =- ({-# LINE 38 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIlabelDef- {-# LINE 1406 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _tlIcopy,_tlIlabelDef,_tlIpp,_tlIres) =- tl_ _tlOlabelDef- in ( _lhsOcopy,_lhsOlabelDef,_lhsOpp,_lhsOres)))-sem_Labels_Nil :: T_Labels-sem_Labels_Nil =- (\ _lhsIlabelDef ->- (let _lhsOres :: ( Either String () )- _lhsOlabelDef :: ( Set.Set String )- _lhsOpp :: Doc- _lhsOcopy :: Labels- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 55, column 11)- _lhsOres =- ({-# LINE 55 "src-ag/Language/EWE/CheckGrammar.ag" #-}- Right ()- {-# LINE 1422 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 55, column 11)- _lhsOlabelDef =- ({-# LINE 56 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIlabelDef- {-# LINE 1428 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- use rule "src-ag/Language/EWE/PPProg.ag"(line 19, column 10)- _lhsOpp =- ({-# LINE 19 "src-ag/Language/EWE/PPProg.ag" #-}- empty- {-# LINE 1434 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- self rule- _copy =- ({-# LINE 39 "src-ag/Language/EWE/CheckGrammar.ag" #-}- []- {-# LINE 1440 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- self rule- _lhsOcopy =- ({-# LINE 39 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _copy- {-# LINE 1446 "src/Language/EWE/CheckGrammar.hs" #-}- )- in ( _lhsOcopy,_lhsOlabelDef,_lhsOpp,_lhsOres)))--- MRef ---------------------------------------------------------{-- visit 0:- inherited attribute:- idMemRefDef : Map.Map String Int - synthesized attributes:- pp : Doc- res : Either String () - alternatives:- alternative MRefI:- child int : {Int}- alternative MRefId:- child string : {String}--}--- cata-sem_MRef :: MRef ->- T_MRef-sem_MRef (MRefI _int) =- (sem_MRef_MRefI _int)-sem_MRef (MRefId _string) =- (sem_MRef_MRefId _string)--- semantic domain-type T_MRef = ( Map.Map String Int ) ->- ( Doc,( Either String () ))-data Inh_MRef = Inh_MRef {idMemRefDef_Inh_MRef :: ( Map.Map String Int )}-data Syn_MRef = Syn_MRef {pp_Syn_MRef :: Doc,res_Syn_MRef :: ( Either String () )}-wrap_MRef :: T_MRef ->- Inh_MRef ->- Syn_MRef-wrap_MRef sem (Inh_MRef _lhsIidMemRefDef) =- (let ( _lhsOpp,_lhsOres) = sem _lhsIidMemRefDef- in (Syn_MRef _lhsOpp _lhsOres))-sem_MRef_MRefI :: Int ->- T_MRef-sem_MRef_MRefI int_ =- (\ _lhsIidMemRefDef ->- (let _lhsOpp :: Doc- _lhsOres :: ( Either String () )- -- "src-ag/Language/EWE/PPProg.ag"(line 34, column 12)- _lhsOpp =- ({-# LINE 34 "src-ag/Language/EWE/PPProg.ag" #-}- text "M" <> brackets ( int int_ )- {-# LINE 1491 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 79, column 12)- _lhsOres =- ({-# LINE 79 "src-ag/Language/EWE/CheckGrammar.ag" #-}- Right ()- {-# LINE 1497 "src/Language/EWE/CheckGrammar.hs" #-}- )- in ( _lhsOpp,_lhsOres)))-sem_MRef_MRefId :: String ->- T_MRef-sem_MRef_MRefId string_ =- (\ _lhsIidMemRefDef ->- (let _lhsOpp :: Doc- _lhsOres :: ( Either String () )- -- "src-ag/Language/EWE/PPProg.ag"(line 35, column 12)- _lhsOpp =- ({-# LINE 35 "src-ag/Language/EWE/PPProg.ag" #-}- text "M" <>- brackets (text string_)- {-# LINE 1511 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 80, column 12)- _lhsOres =- ({-# LINE 80 "src-ag/Language/EWE/CheckGrammar.ag" #-}- isMemRefDef string_ _lhsIidMemRefDef- {-# LINE 1517 "src/Language/EWE/CheckGrammar.hs" #-}- )- in ( _lhsOpp,_lhsOres)))--- Prog ---------------------------------------------------------{-- visit 0:- synthesized attributes:- pp : Doc- res : Either String ()- alternatives:- alternative Prg:- child stms : Stmts - child equates : Equates --}--- cata-sem_Prog :: Prog ->- T_Prog-sem_Prog (Prg _stms _equates) =- (sem_Prog_Prg (sem_Stmts _stms) (sem_Equates _equates))--- semantic domain-type T_Prog = ( Doc,(Either String ()))-data Inh_Prog = Inh_Prog {}-data Syn_Prog = Syn_Prog {pp_Syn_Prog :: Doc,res_Syn_Prog :: (Either String ())}-wrap_Prog :: T_Prog ->- Inh_Prog ->- Syn_Prog-wrap_Prog sem (Inh_Prog) =- (let ( _lhsOpp,_lhsOres) = sem- in (Syn_Prog _lhsOpp _lhsOres))-sem_Prog_Prg :: T_Stmts ->- T_Equates ->- T_Prog-sem_Prog_Prg stms_ equates_ =- (let _lhsOpp :: Doc- _stmsOlabelDef :: (Set.Set String)- _stmsOlabelFound :: (Set.Set String)- _stmsOidMemRefDef :: (Map.Map String Int)- _equatesOidMemRef :: (Map.Map String Int)- _lhsOres :: (Either String ())- _stmsIlabelDef :: (Set.Set String)- _stmsIpp :: Doc- _stmsIres :: (Either String ())- _equatesIidMemRef :: (Map.Map String Int)- _equatesIpp :: Doc- -- "src-ag/Language/EWE/PPProg.ag"(line 54, column 9)- _lhsOpp =- ({-# LINE 54 "src-ag/Language/EWE/PPProg.ag" #-}- _stmsIpp $$ _equatesIpp- {-# LINE 1565 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 59, column 9)- _stmsOlabelDef =- ({-# LINE 59 "src-ag/Language/EWE/CheckGrammar.ag" #-}- Set.empty- {-# LINE 1571 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 59, column 9)- _stmsOlabelFound =- ({-# LINE 60 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _stmsIlabelDef- {-# LINE 1577 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 59, column 9)- _stmsOidMemRefDef =- ({-# LINE 61 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _equatesIidMemRef- {-# LINE 1583 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 62, column 9)- _equatesOidMemRef =- ({-# LINE 62 "src-ag/Language/EWE/CheckGrammar.ag" #-}- Map.empty- {-# LINE 1589 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (up)- _lhsOres =- ({-# LINE 10 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _stmsIres- {-# LINE 1595 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _stmsIlabelDef,_stmsIpp,_stmsIres) =- stms_ _stmsOidMemRefDef _stmsOlabelDef _stmsOlabelFound- ( _equatesIidMemRef,_equatesIpp) =- equates_ _equatesOidMemRef- in ( _lhsOpp,_lhsOres))--- Stmt ---------------------------------------------------------{-- visit 0:- inherited attributes:- idMemRefDef : Map.Map String Int- labelFound : Set.Set String- chained attribute:- labelDef : Set.Set String- synthesized attributes:- pp : Doc- res : Either String ()- alternatives:- alternative Stmt:- child labels : Labels - child instr : Instr - visit 0:- local res1 : _--}--- cata-sem_Stmt :: Stmt ->- T_Stmt-sem_Stmt (Stmt _labels _instr) =- (sem_Stmt_Stmt (sem_Labels _labels) (sem_Instr _instr))--- semantic domain-type T_Stmt = (Map.Map String Int) ->- (Set.Set String) ->- (Set.Set String) ->- ( (Set.Set String),Doc,(Either String ()))-data Inh_Stmt = Inh_Stmt {idMemRefDef_Inh_Stmt :: (Map.Map String Int),labelDef_Inh_Stmt :: (Set.Set String),labelFound_Inh_Stmt :: (Set.Set String)}-data Syn_Stmt = Syn_Stmt {labelDef_Syn_Stmt :: (Set.Set String),pp_Syn_Stmt :: Doc,res_Syn_Stmt :: (Either String ())}-wrap_Stmt :: T_Stmt ->- Inh_Stmt ->- Syn_Stmt-wrap_Stmt sem (Inh_Stmt _lhsIidMemRefDef _lhsIlabelDef _lhsIlabelFound) =- (let ( _lhsOlabelDef,_lhsOpp,_lhsOres) = sem _lhsIidMemRefDef _lhsIlabelDef _lhsIlabelFound- in (Syn_Stmt _lhsOlabelDef _lhsOpp _lhsOres))-sem_Stmt_Stmt :: T_Labels ->- T_Instr ->- T_Stmt-sem_Stmt_Stmt labels_ instr_ =- (\ _lhsIidMemRefDef- _lhsIlabelDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- _lhsOlabelDef :: (Set.Set String)- _labelsOlabelDef :: ( Set.Set String )- _instrOidMemRefDef :: (Map.Map String Int)- _instrOlabelFound :: (Set.Set String)- _labelsIcopy :: Labels- _labelsIlabelDef :: ( Set.Set String )- _labelsIpp :: Doc- _labelsIres :: ( Either String () )- _instrIpp :: Doc- _instrIres :: (Either String ())- -- "src-ag/Language/EWE/PPProg.ag"(line 51, column 10)- _lhsOpp =- ({-# LINE 51 "src-ag/Language/EWE/PPProg.ag" #-}- _labelsIpp $$ _instrIpp- {-# LINE 1661 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 65, column 10)- _res1 =- ({-# LINE 65 "src-ag/Language/EWE/CheckGrammar.ag" #-}- let f (e,er,s) lbl = if Set.member lbl s- then (True,- lbl ++ " is already defined\n" ++ er,- s)- else (e, er, Set.insert lbl s)- (e', errs', set') = foldl f (False,"",_lhsIlabelDef) _labelsIcopy- in if e'- then Left errs'- else Right ()- {-# LINE 1675 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- "src-ag/Language/EWE/CheckGrammar.ag"(line 76, column 11)- _lhsOres =- ({-# LINE 76 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _res1 <--> _instrIres- {-# LINE 1681 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (up)- _lhsOlabelDef =- ({-# LINE 26 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _labelsIlabelDef- {-# LINE 1687 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _labelsOlabelDef =- ({-# LINE 38 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIlabelDef- {-# LINE 1693 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _instrOidMemRefDef =- ({-# LINE 33 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 1699 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _instrOlabelFound =- ({-# LINE 32 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIlabelFound- {-# LINE 1705 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _labelsIcopy,_labelsIlabelDef,_labelsIpp,_labelsIres) =- labels_ _labelsOlabelDef- ( _instrIpp,_instrIres) =- instr_ _instrOidMemRefDef _instrOlabelFound- in ( _lhsOlabelDef,_lhsOpp,_lhsOres)))--- Stmts --------------------------------------------------------{-- visit 0:- inherited attributes:- idMemRefDef : Map.Map String Int- labelFound : Set.Set String- chained attribute:- labelDef : Set.Set String- synthesized attributes:- pp : Doc- res : Either String ()- alternatives:- alternative Cons:- child hd : Stmt - child tl : Stmts - alternative Nil:--}--- cata-sem_Stmts :: Stmts ->- T_Stmts-sem_Stmts list =- (Prelude.foldr sem_Stmts_Cons sem_Stmts_Nil (Prelude.map sem_Stmt list))--- semantic domain-type T_Stmts = (Map.Map String Int) ->- (Set.Set String) ->- (Set.Set String) ->- ( (Set.Set String),Doc,(Either String ()))-data Inh_Stmts = Inh_Stmts {idMemRefDef_Inh_Stmts :: (Map.Map String Int),labelDef_Inh_Stmts :: (Set.Set String),labelFound_Inh_Stmts :: (Set.Set String)}-data Syn_Stmts = Syn_Stmts {labelDef_Syn_Stmts :: (Set.Set String),pp_Syn_Stmts :: Doc,res_Syn_Stmts :: (Either String ())}-wrap_Stmts :: T_Stmts ->- Inh_Stmts ->- Syn_Stmts-wrap_Stmts sem (Inh_Stmts _lhsIidMemRefDef _lhsIlabelDef _lhsIlabelFound) =- (let ( _lhsOlabelDef,_lhsOpp,_lhsOres) = sem _lhsIidMemRefDef _lhsIlabelDef _lhsIlabelFound- in (Syn_Stmts _lhsOlabelDef _lhsOpp _lhsOres))-sem_Stmts_Cons :: T_Stmt ->- T_Stmts ->- T_Stmts-sem_Stmts_Cons hd_ tl_ =- (\ _lhsIidMemRefDef- _lhsIlabelDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- _lhsOlabelDef :: (Set.Set String)- _hdOidMemRefDef :: (Map.Map String Int)- _hdOlabelDef :: (Set.Set String)- _hdOlabelFound :: (Set.Set String)- _tlOidMemRefDef :: (Map.Map String Int)- _tlOlabelDef :: (Set.Set String)- _tlOlabelFound :: (Set.Set String)- _hdIlabelDef :: (Set.Set String)- _hdIpp :: Doc- _hdIres :: (Either String ())- _tlIlabelDef :: (Set.Set String)- _tlIpp :: Doc- _tlIres :: (Either String ())- -- use rule "src-ag/Language/EWE/PPProg.ag"(line 25, column 10)- _lhsOpp =- ({-# LINE 25 "src-ag/Language/EWE/PPProg.ag" #-}- (($$) _hdIpp _tlIpp)- {-# LINE 1773 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- use rule "src-ag/Language/EWE/CheckGrammar.ag"(line 23, column 12)- _lhsOres =- ({-# LINE 23 "src-ag/Language/EWE/CheckGrammar.ag" #-}- ((<-->) _hdIres _tlIres)- {-# LINE 1779 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (up)- _lhsOlabelDef =- ({-# LINE 20 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _tlIlabelDef- {-# LINE 1785 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _hdOidMemRefDef =- ({-# LINE 28 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 1791 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _hdOlabelDef =- ({-# LINE 26 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIlabelDef- {-# LINE 1797 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _hdOlabelFound =- ({-# LINE 27 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIlabelFound- {-# LINE 1803 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _tlOidMemRefDef =- ({-# LINE 22 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIidMemRefDef- {-# LINE 1809 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (chain)- _tlOlabelDef =- ({-# LINE 20 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _hdIlabelDef- {-# LINE 1815 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (down)- _tlOlabelFound =- ({-# LINE 21 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIlabelFound- {-# LINE 1821 "src/Language/EWE/CheckGrammar.hs" #-}- )- ( _hdIlabelDef,_hdIpp,_hdIres) =- hd_ _hdOidMemRefDef _hdOlabelDef _hdOlabelFound- ( _tlIlabelDef,_tlIpp,_tlIres) =- tl_ _tlOidMemRefDef _tlOlabelDef _tlOlabelFound- in ( _lhsOlabelDef,_lhsOpp,_lhsOres)))-sem_Stmts_Nil :: T_Stmts-sem_Stmts_Nil =- (\ _lhsIidMemRefDef- _lhsIlabelDef- _lhsIlabelFound ->- (let _lhsOpp :: Doc- _lhsOres :: (Either String ())- _lhsOlabelDef :: (Set.Set String)- -- use rule "src-ag/Language/EWE/PPProg.ag"(line 25, column 10)- _lhsOpp =- ({-# LINE 25 "src-ag/Language/EWE/PPProg.ag" #-}- empty- {-# LINE 1840 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- use rule "src-ag/Language/EWE/CheckGrammar.ag"(line 23, column 12)- _lhsOres =- ({-# LINE 23 "src-ag/Language/EWE/CheckGrammar.ag" #-}- Right ()- {-# LINE 1846 "src/Language/EWE/CheckGrammar.hs" #-}- )- -- copy rule (chain)- _lhsOlabelDef =- ({-# LINE 20 "src-ag/Language/EWE/CheckGrammar.ag" #-}- _lhsIlabelDef- {-# LINE 1852 "src/Language/EWE/CheckGrammar.hs" #-}- )- in ( _lhsOlabelDef,_lhsOpp,_lhsOres)))
src/Language/EWE/Parser.y view
@@ -54,7 +54,7 @@ | LabelInstr Executable { $1:$2 } LabelInstr : id ':' LabelInstr { addLabel $1 $3 }- | Instr { Stmt [] $1 }+ | Instr { Stmt [] $1 } Instr : MemRef ':=' int { IMMI $1 $3 } | MemRef ':=' str { IMMS $1 $3 }
src/Language/EWE/VM.hs view
@@ -12,15 +12,11 @@ import System.IO(hFlush, stdout,hPutStrLn,hPutStr) import System.Exit(exitWith,ExitCode(..)) --- type Memory = [(Int,Int)] type Memory = Map.Map Int Int emptyMemory :: Memory emptyMemory = Map.empty --- emptyMemory :: Memory--- emptyMemory = []- type PC = Int initPC :: PC@@ -29,11 +25,15 @@ data StateVM = StVM { mem :: Memory , prg :: Prog , pc :: PC+ , debug :: Bool+ , steps :: Int } deriving (Show) emptyStateVM = StVM { mem = emptyMemory- , pc = initPC , prg = emptyProg+ , pc = initPC+ , debug = False+ , steps = 0 } type StateVMM = StateT StateVM IO@@ -56,14 +56,8 @@ mRef (MRefI i) _ = i mRef (MRefId s) m = M.fromMaybe (error $ "Internal error: memory reference " ++ s ++ " not found ") $ L.lookup s m --- outMem :: Int -> Memory -> (Memory,Int)--- outMem r m = M.maybe ((r,0):m, 0) ((,) m) (L.lookup r m)- outMem :: Int -> Memory -> (Memory,Int) outMem r m = M.maybe (Map.insert r 0 m, 0) ((,) m) (Map.lookup r m)---- inMem :: Int -> Int -> Memory -> Memory--- inMem i v m = (i,v):m inMem :: Int -> Int -> Memory -> Memory inMem = Map.insert
− src/Main.hs
@@ -1,134 +0,0 @@-module Main where--import Paths_ewe (version)-import System.Environment(getArgs)-import System.IO(openFile, hClose, IOMode(..), hGetContents, stdin, stdout- ,stderr, hPutStr, hPutStrLn)-import System.Exit(ExitCode(..),exitSuccess)-import Data.Version(Version(..), showVersion)-import System.Exit(exitSuccess)-import System.Console.GetOpt-import Text.PrettyPrint(Doc(..),render,empty)-import Data.Maybe(fromMaybe)-import Control.Monad(when)-import Language.EWE.Token-import Language.EWE.TokenUtils-import Language.EWE.Scanner-import Language.EWE.Parser-import Language.EWE.AbsSyn-import Language.EWE.VM(runVM,execVM)-import Language.EWE.CheckGrammar--data Options = Options { optShowVersion :: Bool- , optShowHelp :: Bool- , optNoExec :: Bool- , optScanOut :: Bool- , optParserOut :: Bool- , optDebug :: Bool- } deriving Show--defaultOptions :: Options-defaultOptions = Options { optShowVersion = False- , optShowHelp = False- , optNoExec = True- , optScanOut = False- , optParserOut = False- , optDebug = False- }--options :: [OptDescr (Options -> Options)]-options =- [ Option ['v'] ["version"]- (NoArg (\opts -> opts { optShowVersion = True }))- "shows a version number and quits "- , Option ['h', '?'] ["help"]- (NoArg (\opts -> opts { optShowHelp = True }))- "shows help menu and quits"- , Option ['n'] ["noexec"]- (NoArg (\opts -> opts { optNoExec = False }))- "not execute the current file with ewe-vm"- , Option ['p'] ["parser"]- (NoArg (\opts -> opts { optParserOut = True }))- "shows parser info"- , Option ['s'] ["scanner"]- (NoArg (\opts -> opts { optScanOut = True }))- "shows scan info"- , Option ['d'] ["debug"]- (NoArg (\opts -> opts { optDebug = True }))- "shows debug info"- ]--compilerOpts :: [String] -> IO (Options, [String])-compilerOpts argv =- case getOpt Permute options argv of- (o,n,[]) -> return (foldl (flip id) defaultOptions o,n)- (_,_,errs) -> ioError (userError (concat errs ++ usageInfo header options))- where header = "Usage: ewe [OPTION...] files..."--showScannerOutput :: Either String Tkns -> IO ()-showScannerOutput scanout =- case scanout of- Left err -> hPutStrLn stderr $ "Scanner error: " ++ show err- Right tkns -> hPutStrLn stdout $ ppTokens tkns--showParserOutput :: (Bool,(String,Doc)) -> IO ()-showParserOutput (False,(msg,_)) =- do hPutStrLn stderr $ show msg-showParserOutput (True,(_,doc)) =- do hPutStrLn stdout $ render doc--showHelp :: IO ()-showHelp = do- mapM_ (hPutStrLn stderr) (lines $ usageInfo header options)- exitSuccess- where header = "Usage: ewe [OPTION...] files..."--execProg :: Options -> Bool -> Either String Prog -> IO ()-execProg _ True _ = return ()-execProg opts False (Right prog) = do- r <- execVM prog- return ()- when (optDebug opts) (hPutStrLn stdout $ show r)-execProg _ False _ = return ()--processFile :: Options -> FilePath -> IO ()-processFile opts fp = do- when (optDebug opts) (hPutStrLn stdout $ "Processing file: " ++ fp)- fh <- openFile fp ReadMode- s <- hGetContents fh- let scanout = runAlex s alexExec- pRes = pEWE s- errorParser = either (\_ -> True) (\_ -> False) pRes- ckg@(passGrammar,(errGram,doc)) = either (\_ -> (False,([],empty))) checkGrammar pRes- when (optScanOut opts) (showScannerOutput scanout)- when (optParserOut opts) (showParserOutput ckg)- when (not passGrammar) (showErrorGrammar errGram)- when (optNoExec opts && passGrammar) (execProg opts errorParser pRes)- hClose fh--showErrorGrammar :: String -> IO ()-showErrorGrammar msg = do- hPutStrLn stderr $ show msg--checkGrammar :: Prog -> (Bool,(String,Doc))-checkGrammar prog = let inh = Inh_Prog- syn = wrap_Prog (sem_Prog prog) inh- in case (res_Syn_Prog syn) of- Left msg -> (False, (msg, empty))- Right () -> (True, ([], pp_Syn_Prog syn))--processStaticOptions :: Options -> IO ()-processStaticOptions opts =- if optShowVersion opts- then do hPutStrLn stdout $ "ewe version: " ++ (showVersion version)- exitSuccess- else if optShowHelp opts- then showHelp- else return ()--main :: IO ()-main = do- (opts, fls) <- (getArgs >>= compilerOpts)- processStaticOptions opts- mapM_ (processFile opts) fls- return ()