diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,29 @@
 and this project adheres to the
 [Haskell Package Versioning Policy](https://pvp.haskell.org/).
 
+## v0.3.1 — 2024-04-12
+
+This version supports proper dataization of test programs with dependencies.
+
+New:
+
+- Add `--dependency-file FILE` option to enable dependencies (e.g. `bool.phi`, `bytes.phi`) (see [#265](https://github.com/objectionary/normalizer/pull/265))
+
+Changes and fixes:
+
+- Fix handling of `Package` atom (also improves related code, see [#239](https://github.com/objectionary/normalizer/pull/239) and [#265](https://github.com/objectionary/normalizer/pull/265))
+- Update the dataless objects metric (see [#234](https://github.com/objectionary/normalizer/pull/234))
+- Improve reports (see [#225](https://github.com/objectionary/normalizer/pull/225))
+
+Documentation and maintenance:
+
+- Establish proposals format and process (see [#248](https://github.com/objectionary/normalizer/pull/248))
+- Improve the docs job, improve the site, fix minor errors (see [#228](https://github.com/objectionary/normalizer/pull/228))
+- Fix `hlint` warnings (see [#241](https://github.com/objectionary/normalizer/pull/241))
+- CI: run doctests (see [#230](https://github.com/objectionary/normalizer/pull/230))
+- CI: switch back to the official `stack-action` (see [#246](https://github.com/objectionary/normalizer/pull/246))
+- CI: publish extra files in artifacts (in particular, dependencies like `bool.phi`, see [#245](https://github.com/objectionary/normalizer/pull/245))
+
 ## v0.3.0 — 2024-03-26
 
 In this version the main executable has been renamed to `normalizer`
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE QuasiQuotes #-}
 {-# LANGUAGE CPP #-}
 -- Source: https://github.com/haskell/cabal/issues/6726#issuecomment-918663262
 
@@ -5,14 +6,12 @@
 -- for the parsers included in Ogma.
 module Main (main) where
 
-import           Distribution.Simple         (defaultMainWithHooks,
-                                              hookedPrograms, postConf,
-                                              preBuild, simpleUserHooks)
-import           Distribution.Simple.Program (Program (..), findProgramVersion,
-                                              simpleProgram)
-import           System.Process              (system)
+import Distribution.Simple (defaultMainWithHooks, hookedPrograms, postConf, preBuild, simpleUserHooks)
+import Distribution.Simple.Program (Program (..), findProgramVersion, simpleProgram)
+import System.Process (system)
+import Data.String.Interpolate (i)
 
--- | Run BNFC on the grammar before the actual build step.
+-- | Run BNFC, happy, and alex on the grammar before the actual build step.
 --
 -- All options for bnfc are hard-coded here.
 main :: IO ()
@@ -20,7 +19,12 @@
   { hookedPrograms = [ bnfcProgram ]
   , postConf       = \args flags packageDesc localBuildInfo -> do
 #ifndef mingw32_HOST_OS
-      _ <- system "bnfc --haskell -d -p Language.EO.Phi --generic -o src/ grammar/EO/Phi/Syntax.cf"
+      _ <- system [i|
+            bnfc --haskell -d -p Language.EO.Phi --generic -o src/ grammar/EO/Phi/Syntax.cf
+            cd src/Language/EO/Phi/Syntax
+            alex Lex.x
+            happy Par.y
+          |]
 #endif
       postConf simpleUserHooks args flags packageDesc localBuildInfo
   }
diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -26,7 +26,7 @@
 
 module Main (main) where
 
-import Control.Monad (forM, unless, when)
+import Control.Monad (foldM, forM, unless, when)
 import Data.Foldable (forM_)
 
 import Control.Exception (Exception (..), SomeException, catch, throw)
@@ -38,14 +38,14 @@
 import Data.Text.Lazy as TL (unpack)
 import Data.Yaml (decodeFileThrow)
 import GHC.Generics (Generic)
-import Language.EO.Phi (Bytes (Bytes), Object (Formation), Program (Program), parseProgram, printTree)
-import Language.EO.Phi.Dataize (dataizeRecursively, dataizeRecursivelyChain, dataizeStep, dataizeStepChain)
+import Language.EO.Phi (AlphaIndex (AlphaIndex), Attribute (Alpha), Binding (..), Bytes (Bytes), Function (..), Object (Formation), Program (Program), parseProgram, printTree)
+import Language.EO.Phi.Dataize
 import Language.EO.Phi.Metrics.Collect as Metrics (getProgramMetrics)
 import Language.EO.Phi.Metrics.Data as Metrics (ProgramMetrics (..), splitPath)
 import Language.EO.Phi.Report.Data (Report'InputConfig (..), Report'OutputConfig (..), ReportConfig (..), ReportItem (..), makeProgramReport, makeReport)
 import Language.EO.Phi.Report.Html (ReportFormat (..), reportCSS, reportJS, toStringReport)
 import Language.EO.Phi.Report.Html qualified as ReportHtml (ReportConfig (..))
-import Language.EO.Phi.Rules.Common (ApplicationLimits (ApplicationLimits), applyRulesChainWith, applyRulesWith, defaultContext, objectSize, propagateName1)
+import Language.EO.Phi.Rules.Common
 import Language.EO.Phi.Rules.Yaml (RuleSet (rules, title), convertRuleNamed, parseRuleSetFromFile)
 import Options.Applicative hiding (metavar)
 import Options.Applicative qualified as Optparse (metavar)
@@ -60,6 +60,7 @@
   , single :: Bool
   , json :: Bool
   , inputFile :: Maybe FilePath
+  , dependencies :: [FilePath]
   , maxDepth :: Int
   , maxGrowthFactor :: Int
   }
@@ -68,6 +69,7 @@
 data CLI'DataizePhi = CLI'DataizePhi
   { rulesPath :: String
   , inputFile :: Maybe FilePath
+  , dependencies :: [FilePath]
   , outputFile :: Maybe String
   , recursive :: Bool
   , chain :: Bool
@@ -140,6 +142,11 @@
 inputFileArg :: Parser (Maybe String)
 inputFileArg = optional $ strArgument (metavar.file <> help [i|#{fileMetavarName} to read input from. When no #{fileMetavarName} is specified, read from stdin.|])
 
+dependenciesArg :: Parser [FilePath]
+dependenciesArg =
+  many $
+    strOption (long "dependency-file" <> short 'd' <> metavar.file <> help [i|#{fileMetavarName} to read dependencies from (zero or more dependency files allowed).|])
+
 jsonSwitch :: Parser Bool
 jsonSwitch = switch (long "json" <> short 'j' <> help "Output JSON.")
 
@@ -191,10 +198,12 @@
       let maxValue = 10
        in option auto (long "max-growth-factor" <> metavar.int <> value maxValue <> help [i|The factor by which to allow the input term to grow before stopping. Defaults to #{maxValue}.|])
     inputFile <- inputFileArg
+    dependencies <- dependenciesArg
     pure CLI'TransformPhi{..}
   dataize = do
     rulesPath <- strOption (long "rules" <> short 'r' <> metavar.file <> help [i|#{fileMetavarName} with user-defined rules. Must be specified.|])
     inputFile <- inputFileArg
+    dependencies <- dependenciesArg
     outputFile <- outputFileOption
     recursive <- switch (long "recursive" <> help "Apply dataization + normalization recursively.")
     chain <- switch (long "chain" <> help "Display all the intermediate steps.")
@@ -270,6 +279,7 @@
   | CouldNotRead {message :: String}
   | CouldNotParse {message :: String}
   | CouldNotNormalize
+  | CouldNotMergeDependencies {message :: String}
   | Impossible {message :: String}
   deriving anyclass (Exception)
 
@@ -281,6 +291,7 @@
     CouldNotRead{..} -> [i|Could not read the program:\n#{message}|]
     CouldNotParse{..} -> [i|An error occurred when parsing the input program:\n#{message}|]
     CouldNotNormalize -> [i|Could not normalize the program.|]
+    CouldNotMergeDependencies{..} -> message
     Impossible{..} -> message
 
 getFile :: Maybe FilePath -> IO (Maybe String)
@@ -335,6 +346,81 @@
   program <- getProgram inputFile
   either throw pure (getMetrics' program bindingsPath)
 
+-- ** Merging programs with dependencies
+
+bindingAttr :: Binding -> Maybe Attribute
+bindingAttr (AlphaBinding a _) = Just a
+bindingAttr (EmptyBinding a) = Just a
+bindingAttr (DeltaBinding _) = Just (Alpha (AlphaIndex "Δ"))
+bindingAttr DeltaEmptyBinding = Just (Alpha (AlphaIndex "Δ"))
+bindingAttr LambdaBinding{} = Just (Alpha (AlphaIndex "λ"))
+bindingAttr MetaBindings{} = Nothing
+bindingAttr MetaDeltaBinding{} = Nothing
+
+zipBindings :: [Binding] -> [Binding] -> ([Binding], [(Binding, Binding)])
+zipBindings xs ys = (xs' <> ys', collisions)
+ where
+  as = map bindingAttr xs
+  bs = map bindingAttr ys
+
+  xs' = [x | x <- xs, bindingAttr x `notElem` bs]
+  ys' = [y | y <- ys, bindingAttr y `notElem` as]
+  collisions =
+    [ (x, y)
+    | x <- xs
+    , y <- ys
+    , bindingAttr x == bindingAttr y
+    ]
+
+isPackage :: [Binding] -> Bool
+isPackage = any isPackageBinding
+
+isPackageBinding :: Binding -> Bool
+isPackageBinding (LambdaBinding (Function "Package")) = True
+isPackageBinding _ = False
+
+mergeBinding :: Binding -> Binding -> Either String Binding
+mergeBinding (AlphaBinding a (Formation xs)) (AlphaBinding b (Formation ys))
+  | a == b = AlphaBinding a . Formation <$> mergeBindings xs ys
+mergeBinding x y | x == y = return x
+mergeBinding x y =
+  Left $
+    concat @[]
+      [ "conflict when adding dependencies (trying to merge non-formations)"
+      , printTree x
+      , printTree y
+      ]
+
+mergeBindings :: [Binding] -> [Binding] -> Either String [Binding]
+mergeBindings xs ys
+  | isPackage xs && isPackage ys = do
+      case zipBindings xs ys of
+        (zs, collisions) -> do
+          ws <- mapM (uncurry mergeBinding) collisions
+          return (zs <> ws)
+  | otherwise =
+      Left $
+        concat @[]
+          [ "conflict when adding dependencies (trying to merge non-Package formations "
+          , printTree (Formation xs)
+          , printTree (Formation ys)
+          , " )"
+          ]
+
+deepMerge :: Program -> Program -> Either String Program
+deepMerge (Program xs) (Program ys) = Program <$> mergeBindings (mkPackage xs) (mkPackage ys)
+ where
+  mkPackage bs
+    | isPackage bs = bs
+    -- FIXME: check if lambda attribute exists and throw error!
+    | otherwise = LambdaBinding (Function "Package") : bs
+
+deepMergePrograms :: [Program] -> Either String Program
+deepMergePrograms [] = Right (Program [])
+deepMergePrograms (p : ps) = foldM deepMerge p ps
+
+-- * Main
+
 main :: IO ()
 main = do
   opts <- customExecParser pprefs cliOpts
@@ -348,16 +434,21 @@
       logStrLn $ encodeToJSONString metrics
     CLI'TransformPhi' CLI'TransformPhi{..} -> do
       program' <- getProgram inputFile
+      deps <- mapM (getProgram . Just) dependencies
       (logStrLn, logStr) <- getLoggers outputFile
       ruleSet <- parseRuleSetFromFile rulesPath
       unless (single || json) $ logStrLn ruleSet.title
+      bindingsWithDeps <- case deepMergePrograms (program' : deps) of
+        Left err -> throw (CouldNotMergeDependencies err)
+        Right (Program bindingsWithDeps) -> return bindingsWithDeps
       let Program bindings = program'
           uniqueResults
-            | chain = applyRulesChainWith limits ctx (Formation bindings)
+            -- Something here seems incorrect
+            | chain = map fst $ applyRulesChainWith' limits ctx (Formation bindings)
             | otherwise = pure . ("",) <$> applyRulesWith limits ctx (Formation bindings)
            where
             limits = ApplicationLimits maxDepth (maxGrowthFactor * objectSize (Formation bindings))
-            ctx = defaultContext (convertRuleNamed <$> ruleSet.rules) (Formation bindings)
+            ctx = defaultContext (convertRuleNamed <$> ruleSet.rules) (Formation bindingsWithDeps) -- IMPORTANT: context contains dependencies!
           totalResults = length uniqueResults
       when (null uniqueResults || null (head uniqueResults)) (throw CouldNotNormalize)
       if
@@ -392,23 +483,27 @@
     CLI'DataizePhi' CLI'DataizePhi{..} -> do
       (logStrLn, _logStr) <- getLoggers outputFile
       program' <- getProgram inputFile
+      deps <- mapM (getProgram . Just) dependencies
+      bindingsWithDeps <- case deepMergePrograms (program' : deps) of
+        Left err -> throw (CouldNotMergeDependencies err)
+        Right (Program bindingsWithDeps) -> return bindingsWithDeps
       ruleSet <- parseRuleSetFromFile rulesPath
       let (Program bindings) = program'
       let inputObject = Formation bindings
-      let ctx = defaultContext (convertRuleNamed <$> ruleSet.rules) inputObject
+      let ctx = defaultContext (convertRuleNamed <$> ruleSet.rules) (Formation bindingsWithDeps) -- IMPORTANT: context contains dependencies!
       ( if chain
           then do
             let dataizeChain
-                  | recursive = dataizeRecursivelyChain
-                  | otherwise = dataizeStepChain
-            forM_ (dataizeChain ctx inputObject) $ \case
+                  | recursive = dataizeRecursivelyChain'
+                  | otherwise = dataizeStepChain'
+            forM_ (fst (dataizeChain ctx inputObject)) $ \case
               (msg, Left obj) -> logStrLn (msg ++ ": " ++ printTree obj)
               (msg, Right (Bytes bytes)) -> logStrLn (msg ++ ": " ++ bytes)
           else do
             let dataize
                   -- This should be moved to a separate subcommand
                   | recursive = dataizeRecursively
-                  | otherwise = dataizeStep
+                  | otherwise = dataizeStep'
             case dataize ctx inputObject of
               Left obj -> logStrLn (printAsProgramOrAsObject obj)
               Right (Bytes bytes) -> logStrLn bytes
@@ -425,24 +520,13 @@
       js <- maybe (pure reportJS) readFile (reportConfig.input >>= (.js))
 
       let report = makeReport reportConfig programReports
-
-          reportConfigHtml =
-            ReportHtml.ReportConfig
-              { expectedMetricsChange = reportConfig.expectedMetricsChange
-              , format =
-                  ReportFormat'Html
-                    { ..
-                    }
-              }
+          ReportConfig{..} = reportConfig
+          reportConfigHtml = ReportHtml.ReportConfig{format = ReportFormat'Html{..}, ..}
           reportHtml = toStringReport reportConfigHtml report
 
           reportJson = encodeToJSONString report
 
-          reportConfigMarkdown =
-            ReportHtml.ReportConfig
-              { expectedMetricsChange = reportConfig.expectedMetricsChange
-              , format = ReportFormat'Markdown
-              }
+          reportConfigMarkdown = ReportHtml.ReportConfig{format = ReportFormat'Markdown, ..}
           reportMarkdown = toStringReport reportConfigMarkdown report
 
       forM_ @[]
diff --git a/eo-phi-normalizer.cabal b/eo-phi-normalizer.cabal
--- a/eo-phi-normalizer.cabal
+++ b/eo-phi-normalizer.cabal
@@ -5,14 +5,14 @@
 -- see: https://github.com/sol/hpack
 
 name:           eo-phi-normalizer
-version:        0.3.0
+version:        0.3.1
 synopsis:       Command line normalizer of 𝜑-calculus expressions.
 description:    Please see the README on GitHub at <https://github.com/objectionary/eo-phi-normalizer#readme>
 homepage:       https://github.com/objectionary/eo-phi-normalizer#readme
 bug-reports:    https://github.com/objectionary/eo-phi-normalizer/issues
 author:         EO/Polystat Development Team
 maintainer:     nickolay.kudasov@gmail.com
-copyright:      2023 EO/Polystat Development Team
+copyright:      2023-2024 EO/Polystat Development Team
 license:        BSD3
 license-file:   LICENSE
 build-type:     Custom
@@ -32,6 +32,7 @@
       Cabal >=2.4.0.1 && <4.0
     , base >=4.11.0.0 && <5.0
     , process >=1.6.3.0
+    , string-interpolate
 
 library
   exposed-modules:
@@ -70,7 +71,7 @@
     , blaze-html
     , blaze-markup
     , directory
-    , file-embed
+    , file-embed >=0.0.16.0
     , filepath
     , generic-lens
     , lens
@@ -105,7 +106,7 @@
     , blaze-markup
     , directory
     , eo-phi-normalizer
-    , file-embed
+    , file-embed >=0.0.16.0
     , filepath
     , generic-lens
     , lens
@@ -118,6 +119,60 @@
     , yaml
   default-language: Haskell2010
 
+test-suite doctests
+  type: exitcode-stdio-1.0
+  main-is: Main.hs
+  other-modules:
+      Language.EO.Phi
+      Language.EO.Phi.Dataize
+      Language.EO.Phi.Metrics.Collect
+      Language.EO.Phi.Metrics.Data
+      Language.EO.Phi.Normalize
+      Language.EO.Phi.Report.Data
+      Language.EO.Phi.Report.Html
+      Language.EO.Phi.Rules.Common
+      Language.EO.Phi.Rules.PhiPaper
+      Language.EO.Phi.Rules.Yaml
+      Language.EO.Phi.Syntax
+      Language.EO.Phi.Syntax.Abs
+      Language.EO.Phi.Syntax.Lex
+      Language.EO.Phi.Syntax.Par
+      Language.EO.Phi.Syntax.Print
+      Language.EO.Phi.Syntax.Skel
+      Language.EO.Phi.TH
+      Paths_eo_phi_normalizer
+  hs-source-dirs:
+      test/doctests
+      src
+  default-extensions:
+      ImportQualifiedPost
+  ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -Wno-missing-export-lists
+  build-tools:
+      alex >=3.2.4
+    , happy >=1.19.9
+  build-tool-depends:
+      BNFC:bnfc >=2.9.4.1
+  build-depends:
+      aeson
+    , array >=0.5.5.0
+    , base >=4.7 && <5
+    , blaze-html
+    , blaze-markup
+    , directory
+    , doctest-parallel
+    , eo-phi-normalizer
+    , file-embed >=0.0.16.0
+    , filepath
+    , generic-lens
+    , lens
+    , mtl
+    , scientific
+    , string-interpolate
+    , template-haskell
+    , text
+    , yaml
+  default-language: Haskell2010
+
 test-suite spec
   type: exitcode-stdio-1.0
   main-is: Spec.hs
@@ -149,7 +204,7 @@
     , blaze-markup
     , directory
     , eo-phi-normalizer
-    , file-embed
+    , file-embed >=0.0.16.0
     , filepath
     , generic-lens
     , hspec
diff --git a/src/Language/EO/Phi.hs b/src/Language/EO/Phi.hs
--- a/src/Language/EO/Phi.hs
+++ b/src/Language/EO/Phi.hs
@@ -2,6 +2,7 @@
   defaultMain,
   normalize,
   parseProgram,
+  unsafeParseObject,
   unsafeParseProgram,
   module Language.EO.Phi.Syntax,
 ) where
@@ -20,6 +21,10 @@
  where
   tokens = Phi.myLexer input
 
+-- | Parse an 'Object' or return a parsing error.
+parseObject :: String -> Either String Phi.Object
+parseObject = Phi.pObject . Phi.myLexer
+
 -- | Parse a 'Program' from a 'String'.
 -- May throw an 'error` if input has a syntactical or lexical errors.
 unsafeParseProgram :: String -> Phi.Program
@@ -27,6 +32,11 @@
   case parseProgram input of
     Left parseError -> error parseError
     Right program -> program
+
+-- | Parse an 'Object' from a 'String'.
+-- May throw an 'error` if input has a syntactical or lexical errors.
+unsafeParseObject :: String -> Phi.Object
+unsafeParseObject = either error id . parseObject
 
 -- | Default entry point.
 -- Parses a 𝜑-program from standard input, normalizes,
diff --git a/src/Language/EO/Phi/Dataize.hs b/src/Language/EO/Phi/Dataize.hs
--- a/src/Language/EO/Phi/Dataize.hs
+++ b/src/Language/EO/Phi/Dataize.hs
@@ -1,16 +1,20 @@
+{-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE QuasiQuotes #-}
 {-# LANGUAGE TupleSections #-}
 {-# LANGUAGE ViewPatterns #-}
+{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-}
 
-module Language.EO.Phi.Dataize (dataizeStep, dataizeRecursively, dataizeStepChain, dataizeRecursivelyChain) where
+{-# HLINT ignore "Redundant fmap" #-}
 
+module Language.EO.Phi.Dataize where
+
 import Control.Arrow (ArrowChoice (left))
-import Data.List (find)
+import Data.List (singleton)
 import Data.Maybe (listToMaybe)
 import Data.String.Interpolate (i)
-import Language.EO.Phi (printTree)
-import Language.EO.Phi.Rules.Common (Context, applyRules, applyRulesChain, bytesToInt, extendContextWith, intToBytes)
+import Language.EO.Phi (Binding (DeltaEmptyBinding, EmptyBinding))
+import Language.EO.Phi.Rules.Common
 import Language.EO.Phi.Syntax.Abs (
   AlphaIndex (AlphaIndex),
   Attribute (Alpha, Phi, Rho),
@@ -21,128 +25,134 @@
  )
 
 -- | Perform one step of dataization to the object (if possible).
-dataizeStep :: Context -> Object -> Either Object Bytes
-dataizeStep ctx obj@(Formation bs)
-  | Just (DeltaBinding bytes) <- find isDelta bs = Right bytes
-  | Just (LambdaBinding (Function funcName)) <- find isLambda bs = Left (fst $ evaluateBuiltinFun ctx funcName obj ())
-  | Just (AlphaBinding Phi decoratee) <- find isPhi bs = dataizeStep (extendContextWith obj ctx) decoratee
-  | otherwise = Left obj
- where
-  isDelta (DeltaBinding _) = True
-  isDelta _ = False
-  isLambda (LambdaBinding _) = True
-  isLambda _ = False
-  isPhi (AlphaBinding Phi _) = True
-  isPhi _ = False
-dataizeStep ctx (Application obj bindings) = case dataizeStep ctx obj of
-  Left dataized -> Left $ Application dataized bindings
-  Right _ -> error ("Application on bytes upon dataizing:\n  " <> printTree obj)
-dataizeStep ctx (ObjectDispatch obj attr) = case dataizeStep ctx obj of
-  Left dataized -> Left $ ObjectDispatch dataized attr
-  Right _ -> error ("Dispatch on bytes upon dataizing:\n  " <> printTree obj)
-dataizeStep _ obj = Left obj
+dataizeStep :: Context -> Object -> (Context, Either Object Bytes)
+dataizeStep ctx obj = snd $ head $ runChain (dataizeStepChain obj) ctx -- FIXME: head is bad
 
+dataizeStep' :: Context -> Object -> Either Object Bytes
+dataizeStep' ctx obj = snd (dataizeStep ctx obj)
+
 -- | State of evaluation is not needed yet, but it might be in the future
 type EvaluationState = ()
 
 -- | Recursively perform normalization and dataization until we get bytes in the end.
 dataizeRecursively :: Context -> Object -> Either Object Bytes
-dataizeRecursively ctx obj = case applyRules ctx obj of
-  [normObj] -> case dataizeStep ctx normObj of
-    Left stillObj
-      | stillObj == normObj -> Left stillObj -- dataization changed nothing
-      | otherwise -> dataizeRecursively ctx stillObj -- partially dataized
-    Right bytes -> Right bytes
-  objs -> error errMsg -- Left Termination
-   where
-    errMsg =
-      "Expected 1 result from normalization but got "
-        <> show (length objs)
-        <> ":\n"
-        <> unlines (map (("  - " ++) . printTree) objs)
-        <> "\nFor the input:\n  "
-        <> printTree obj
+dataizeRecursively ctx obj = snd $ dataizeRecursivelyChain' ctx obj
 
+dataizeStepChain' :: Context -> Object -> ([(String, Either Object Bytes)], Either Object Bytes)
+dataizeStepChain' ctx obj = snd <$> head (runChain (dataizeStepChain obj) ctx) -- FIXME: head is bad
+
 -- | Perform one step of dataization to the object (if possible), reporting back individiual steps.
-dataizeStepChain :: Context -> Object -> [(String, Either Object Bytes)]
-dataizeStepChain ctx obj@(Formation bs)
-  | Just (DeltaBinding bytes) <- listToMaybe [b | b@(DeltaBinding _) <- bs] = [("Found bytes", Right bytes)]
-  | Just (LambdaBinding (Function funcName)) <- listToMaybe [b | b@(LambdaBinding _) <- bs] =
-      let evaluationChain = evaluateBuiltinFunChain ctx funcName obj ()
-       in ("Evaluating lambda '" <> funcName <> "'", Left obj) : map (fmap Left . fst) evaluationChain
-  | Just (AlphaBinding Phi decoratee) <- listToMaybe [b | b@(AlphaBinding Phi _) <- bs] =
-      ("Dataizing inside phi", Left decoratee) : dataizeStepChain (extendContextWith obj ctx) decoratee
-  | otherwise = [("No change to formation", Left obj)]
-dataizeStepChain ctx (Application obj bindings) = ("Dataizing inside application", Left obj) : map (fmap (left (`Application` bindings))) (dataizeStepChain ctx obj)
-dataizeStepChain ctx (ObjectDispatch obj attr) = ("Dataizing inside dispatch", Left obj) : map (fmap (left (`ObjectDispatch` attr))) (dataizeStepChain ctx obj)
-dataizeStepChain _ obj = [("Nothing to dataize", Left obj)]
+dataizeStepChain :: Object -> DataizeChain (Context, Either Object Bytes)
+dataizeStepChain obj@(Formation bs)
+  | Just (DeltaBinding bytes) <- listToMaybe [b | b@(DeltaBinding _) <- bs]
+  , not hasEmpty = do
+      logStep "Found bytes" (Right bytes)
+      ctx <- getContext
+      return (ctx, Right bytes)
+  | Just (LambdaBinding (Function funcName)) <- listToMaybe [b | b@(LambdaBinding _) <- bs]
+  , not hasEmpty = do
+      logStep ("Evaluating lambda '" <> funcName <> "'") (Left obj)
+      (obj', _state) <- evaluateBuiltinFunChain funcName obj ()
+      ctx <- getContext
+      return (ctx, Left obj')
+  | Just (AlphaBinding Phi decoratee) <- listToMaybe [b | b@(AlphaBinding Phi _) <- bs]
+  , not hasEmpty = do
+      logStep "Dataizing inside phi" (Left decoratee)
+      ctx <- getContext
+      let extendedContext = (extendContextWith obj ctx){currentAttr = Phi}
+      logStep "Dataizing inside phi" (Left decoratee)
+      withContext extendedContext $ dataizeStepChain decoratee
+  | otherwise = do
+      logStep "No change to formation" (Left obj)
+      ctx <- getContext
+      return (ctx, Left obj)
+ where
+  isEmpty (EmptyBinding _) = True
+  isEmpty DeltaEmptyBinding = True
+  isEmpty _ = False
+  hasEmpty = any isEmpty bs
+dataizeStepChain (Application obj bindings) = do
+  logStep "Dataizing inside application" (Left obj)
+  modifyContext (\c -> c{dataizePackage = False}) $ do
+    (ctx, obj') <- dataizeStepChain obj
+    return (ctx, left (`Application` bindings) obj')
+dataizeStepChain (ObjectDispatch obj attr) = do
+  logStep "Dataizing inside dispatch" (Left obj)
+  modifyContext (\c -> c{dataizePackage = False}) $ do
+    (ctx, obj') <- dataizeStepChain obj
+    return (ctx, left (`ObjectDispatch` attr) obj')
+dataizeStepChain obj = do
+  logStep "Nothing to dataize" (Left obj)
+  ctx <- getContext
+  return (ctx, Left obj)
 
+dataizeRecursivelyChain' :: Context -> Object -> ([(String, Either Object Bytes)], Either Object Bytes)
+dataizeRecursivelyChain' ctx obj = head (runChain (dataizeRecursivelyChain obj) ctx)
+
 -- | Recursively perform normalization and dataization until we get bytes in the end,
 -- reporting intermediate steps
-dataizeRecursivelyChain :: Context -> Object -> [(String, Either Object Bytes)]
-dataizeRecursivelyChain ctx obj = case applyRulesChain ctx obj of
-  [[]] -> [("No rules applied", Left obj)]
-  [rulesChain] ->
-    let (_lastRule, normObj) = last rulesChain
-        stepChain = dataizeStepChain ctx normObj
-     in map (fmap Left) rulesChain
-          ++ case stepChain of
-            [] -> []
-            (last -> (_, Left stillObj))
-              | stillObj == normObj -> stepChain -- dataization changed nothing
-              | otherwise -> stepChain ++ dataizeRecursivelyChain ctx stillObj -- partially dataized
-            bytesAndRest -> bytesAndRest
-  chains -> [(errMsg, Left Termination)]
-   where
-    errMsg =
-      "Expected 1 chain from normalization but got "
-        <> show (length chains)
-        <> ":\n"
-        <> unlines (map (unlines . map (\(name, object) -> "  - " ++ name ++ ": " ++ printTree object)) chains)
-        <> "\nFor the input:\n  "
-        <> printTree obj
+dataizeRecursivelyChain :: Object -> DataizeChain (Either Object Bytes)
+dataizeRecursivelyChain obj = do
+  ctx <- getContext
+  msplit (transformNormLogs (applyRulesChain obj)) >>= \case
+    Nothing -> do
+      logStep "No rules applied" (Left obj)
+      return (Left obj)
+    -- We trust that all chains lead to the same result due to confluence
+    Just (normObj, _alternatives) -> do
+      (ctx', step) <- dataizeStepChain normObj
+      case step of
+        (Left stillObj)
+          | stillObj == normObj && ctx `sameContext` ctx' -> return step -- dataization changed nothing
+          | otherwise -> withContext ctx' $ dataizeRecursivelyChain stillObj -- partially dataized
+        bytes -> return bytes
 
 -- | Given normalization context, a function on data (bytes interpreted as integers), an object,
 -- and the current state of evaluation, returns the new object and a possibly modified state along with intermediate steps.
-evaluateDataizationFunChain :: Context -> (Int -> Int -> Int) -> Object -> EvaluationState -> [((String, Object), EvaluationState)]
-evaluateDataizationFunChain ctx func obj _state = map (,()) result
- where
-  lhs = let o_rho = ObjectDispatch obj Rho in ("Evaluating LHS", Left o_rho) : dataizeRecursivelyChain ctx o_rho
-  rhs = let o_a0 = ObjectDispatch obj (Alpha (AlphaIndex "α0")) in ("Evaluating RHS", Left o_a0) : dataizeRecursivelyChain ctx o_a0
-  lhsBytes = [(msg, bytes) | (msg, Right bytes) <- lhs]
-  rhsBytes = [(msg, bytes) | (msg, Right bytes) <- rhs]
-  lhsObjects = [(msg, object) | (msg, Left object) <- lhs]
-  rhsObjects = [(msg, object) | (msg, Left object) <- rhs]
-  result = case (lhsBytes, rhsBytes) of
-    ([(_, l)], [(_, r)]) ->
+evaluateDataizationFunChain :: (Int -> Int -> Int) -> Object -> EvaluationState -> DataizeChain (Object, EvaluationState)
+evaluateDataizationFunChain func obj _state = do
+  let o_rho = ObjectDispatch obj Rho
+  let o_a0 = ObjectDispatch obj (Alpha (AlphaIndex "α0"))
+  logStep "Evaluating LHS" (Left o_rho)
+  lhs <- dataizeRecursivelyChain o_rho
+  logStep "Evaluating RHS" (Left o_a0)
+  rhs <- dataizeRecursivelyChain o_a0
+  result <- case (lhs, rhs) of
+    (Right l, Right r) -> do
       let (Bytes bytes) = intToBytes (bytesToInt r `func` bytesToInt l)
-       in lhsObjects
-            ++ rhsObjects
-            ++ [("Evaluated function", [i|Φ.org.eolang.float(Δ ⤍ #{bytes})|])]
-    _ -> lhsObjects ++ rhsObjects ++ [("Couldn't find bytes in one or both of LHS and RHS", Termination)]
+          resultObj = [i|Φ.org.eolang.float(Δ ⤍ #{bytes})|]
+      logStep "Evaluated function" (Left resultObj)
+      return resultObj
+    _ -> do
+      logStep "Couldn't find bytes in one or both of LHS and RHS" (Left Termination)
+      return Termination
+  return (result, ())
 
 -- | Like `evaluateDataizationFunChain` but specifically for the built-in functions.
 -- This function is not safe. It returns undefined for unknown functions
-evaluateBuiltinFunChain :: Context -> String -> Object -> EvaluationState -> [((String, Object), EvaluationState)]
-evaluateBuiltinFunChain ctx "Plus" = evaluateDataizationFunChain ctx (+)
-evaluateBuiltinFunChain ctx "Times" = evaluateDataizationFunChain ctx (*)
-evaluateBuiltinFunChain _ _ = const $ const [(undefined, ())]
-
--- | Given normalization context, a function on data (bytes interpreted as integers), an object,
--- and the current state of evaluation, returns the new object and a possibly modified state.
-evaluateDataizationFun :: Context -> (Int -> Int -> Int) -> Object -> EvaluationState -> (Object, EvaluationState)
-evaluateDataizationFun ctx func obj _state = (result, ())
+evaluateBuiltinFunChain :: String -> Object -> EvaluationState -> DataizeChain (Object, EvaluationState)
+evaluateBuiltinFunChain "Plus" obj = evaluateDataizationFunChain (+) obj
+evaluateBuiltinFunChain "Times" obj = evaluateDataizationFunChain (*) obj
+evaluateBuiltinFunChain "Package" (Formation bindings) = do
+  \state -> do
+    fmap dataizePackage getContext >>= \case
+      True -> do
+        let (packageBindings, restBindings) = span isPackage bindings
+        bs <- mapM dataizeBindingChain restBindings
+        logStep "Dataized 'Package' siblings" (Left $ Formation (bs ++ packageBindings))
+        return (Formation (bs ++ packageBindings), state)
+      False ->
+        return (Formation bindings, state)
  where
-  lhs = dataizeRecursively ctx (ObjectDispatch obj Rho)
-  rhs = dataizeRecursively ctx (ObjectDispatch obj (Alpha (AlphaIndex "α0")))
-  result = case (lhs, rhs) of
-    (Right l, Right r) -> let (Bytes bytes) = intToBytes (bytesToInt r `func` bytesToInt l) in [i|Φ.org.eolang.float(Δ ⤍ #{bytes})|]
-    _ -> Termination
+  isPackage (LambdaBinding (Function "Package")) = True
+  isPackage _ = False
+  dataizeBindingChain (AlphaBinding attr o) = do
+    dataizationResult <- dataizeRecursivelyChain o
+    return (AlphaBinding attr (either id (Formation . singleton . DeltaBinding) dataizationResult))
+  dataizeBindingChain b = return b
+evaluateBuiltinFunChain _ obj = \state -> return (obj, state)
 
 -- | Like `evaluateDataizationFun` but specifically for the built-in functions.
 -- This function is not safe. It returns undefined for unknown functions
 evaluateBuiltinFun :: Context -> String -> Object -> EvaluationState -> (Object, EvaluationState)
-evaluateBuiltinFun ctx "Plus" = evaluateDataizationFun ctx (+)
-evaluateBuiltinFun ctx "Times" = evaluateDataizationFun ctx (*)
-evaluateBuiltinFun _ "Package" = (,) -- Ignore package for now (See #203)
-evaluateBuiltinFun _ _ = const $ const (undefined, ())
+evaluateBuiltinFun ctx name obj state = snd $ head $ runChain (evaluateBuiltinFunChain name obj state) ctx -- FIXME: head is bad
diff --git a/src/Language/EO/Phi/Metrics/Collect.hs b/src/Language/EO/Phi/Metrics/Collect.hs
--- a/src/Language/EO/Phi/Metrics/Collect.hs
+++ b/src/Language/EO/Phi/Metrics/Collect.hs
@@ -16,42 +16,56 @@
 import Control.Monad.State (State, execState, runState)
 import Data.Foldable (forM_)
 import Data.Generics.Labels ()
+import Data.Maybe (catMaybes)
 import Data.Traversable (forM)
 import Language.EO.Phi.Metrics.Data (BindingMetrics (..), BindingsByPathMetrics (..), MetricsCount, ObjectMetrics (..), Path, ProgramMetrics (..))
 import Language.EO.Phi.Rules.Common ()
 import Language.EO.Phi.Syntax.Abs
 
+-- $setup
+-- >>> :set -XOverloadedStrings
+-- >>> :set -XOverloadedLists
+
+type HeightSafe = Maybe Int
+
 count :: (a -> Bool) -> [a] -> Int
 count x = length . filter x
 
-getHeight :: [Binding] -> [Int] -> Int
+getHeight :: [Binding] -> [HeightSafe] -> HeightSafe
 getHeight bindings heights
-  | hasDeltaBinding = 1
+  | hasDeltaBinding = Just 1
   | otherwise = heightAttributes
  where
   heightAttributes =
-    case heights of
-      [] -> 0
-      _ -> minimum heights + 1
-  hasDeltaBinding = not $ null [undefined | DeltaBinding _ <- bindings]
+    case catMaybes heights of
+      [] -> Nothing
+      x -> Just (minimum x + 1)
 
-countDataless :: Int -> Int
-countDataless x
-  | x == 0 || x > 2 = 1
+  isBinding = \case
+    DeltaBinding _ -> True
+    _ -> False
+
+  hasDeltaBinding = any isBinding bindings
+
+countDataless :: HeightSafe -> Int
+countDataless (Just x)
+  | x > 2 = 1
   | otherwise = 0
+countDataless _ = 1
 
+type InspectM = State MetricsCount HeightSafe
+
 class Inspectable a where
-  inspect :: a -> State MetricsCount Int
+  inspect :: a -> InspectM
 
 instance Inspectable Binding where
-  inspect :: Binding -> State MetricsCount Int
+  inspect :: Binding -> InspectM
   inspect = \case
-    AlphaBinding _ obj -> do
-      inspect obj
-    _ -> pure 0
+    AlphaBinding _ obj -> inspect obj
+    _ -> pure Nothing
 
 instance Inspectable Object where
-  inspect :: Object -> State MetricsCount Int
+  inspect :: Object -> InspectM
   inspect = \case
     Formation bindings -> do
       #formations += 1
@@ -63,17 +77,17 @@
       #applications += 1
       _ <- inspect obj
       forM_ bindings inspect
-      pure 0
+      pure Nothing
     ObjectDispatch obj _ -> do
       #dispatches += 1
       _ <- inspect obj
-      pure 0
-    _ -> pure 0
+      pure Nothing
+    _ -> pure Nothing
 
 -- | Get metrics for an object
 --
 -- >>> getThisObjectMetrics "⟦ α0 ↦ ξ, α0 ↦ Φ.org.eolang.bytes( Δ ⤍ 00- ) ⟧"
--- Metrics {dataless = 0, applications = 1, formations = 1, dispatches = 3}
+-- Metrics {dataless = 1, applications = 1, formations = 1, dispatches = 3}
 --
 -- >>> getThisObjectMetrics "⟦ α0 ↦ ξ, Δ ⤍ 00- ⟧"
 -- Metrics {dataless = 0, applications = 0, formations = 1, dispatches = 0}
@@ -82,25 +96,40 @@
 -- Metrics {dataless = 0, applications = 0, formations = 2, dispatches = 0}
 --
 -- >>> getThisObjectMetrics "⟦ α0 ↦ ξ, α1 ↦ ⟦ α2 ↦ ⟦ Δ ⤍ 00- ⟧ ⟧ ⟧"
--- Metrics {dataless = 0, applications = 0, formations = 3, dispatches = 0}
+-- Metrics {dataless = 1, applications = 0, formations = 3, dispatches = 0}
 --
 -- >>> getThisObjectMetrics "⟦ Δ ⤍ 00- ⟧"
 -- Metrics {dataless = 0, applications = 0, formations = 1, dispatches = 0}
 --
 -- >>> getThisObjectMetrics "⟦ α0 ↦ ⟦ α0 ↦ ∅ ⟧ ⟧"
--- Metrics {dataless = 0, applications = 0, formations = 2, dispatches = 0}
+-- Metrics {dataless = 2, applications = 0, formations = 2, dispatches = 0}
 --
 -- >>> getThisObjectMetrics "⟦ α0 ↦ ⟦ α0 ↦ ⟦ α0 ↦ ∅ ⟧ ⟧ ⟧"
--- Metrics {dataless = 1, applications = 0, formations = 3, dispatches = 0}
+-- Metrics {dataless = 3, applications = 0, formations = 3, dispatches = 0}
 --
 -- >>> getThisObjectMetrics "⟦ α0 ↦ ⟦ α0 ↦ ⟦ α0 ↦ ⟦ α0 ↦ ∅ ⟧ ⟧ ⟧ ⟧"
--- Metrics {dataless = 2, applications = 0, formations = 4, dispatches = 0}
+-- Metrics {dataless = 4, applications = 0, formations = 4, dispatches = 0}
 --
 -- >>> getThisObjectMetrics "⟦ org ↦ ⟦ ⟧ ⟧"
--- Metrics {dataless = 1, applications = 0, formations = 2, dispatches = 0}
+-- Metrics {dataless = 2, applications = 0, formations = 2, dispatches = 0}
 --
 -- >>> getThisObjectMetrics "⟦ a ↦ ⟦ b ↦ ⟦ c ↦ ∅, d ↦ ⟦ φ ↦ ξ.ρ.c ⟧ ⟧, e ↦ ξ.b(c ↦ ⟦⟧).d ⟧.e ⟧"
--- Metrics {dataless = 1, applications = 1, formations = 5, dispatches = 5}
+-- Metrics {dataless = 5, applications = 1, formations = 5, dispatches = 5}
+--
+-- >>> getThisObjectMetrics "⟦ α0 ↦ Φ.something(α1 ↦ ⟦ α2 ↦ ⟦ α3 ↦ ⟦ Δ ⤍ 01- ⟧ ⟧ ⟧) ⟧"
+-- Metrics {dataless = 2, applications = 1, formations = 4, dispatches = 1}
+--
+-- >>> getThisObjectMetrics "⟦ a ↦ ⟦ b ↦ ⟦ c ↦ ∅, d ↦ ⟦ φ ↦ ξ.ρ.c, Δ ⤍ 01- ⟧ ⟧, e ↦ ξ.b(c ↦ ⟦ Δ ⤍ 01- ⟧).d ⟧.e ⟧"
+-- Metrics {dataless = 2, applications = 1, formations = 5, dispatches = 5}
+--
+-- >>> getThisObjectMetrics "⟦ org ↦ ⟦ Δ ⤍ 01-, c ↦ ∅ ⟧(c ↦ ⟦ ⟧) ⟧"
+-- Metrics {dataless = 2, applications = 1, formations = 3, dispatches = 0}
+--
+-- >>> getThisObjectMetrics "⟦ α0 ↦ ⟦ α0 ↦ ⟦ α0 ↦ ⟦ α0 ↦ ⟦ Δ ⤍ 01- ⟧.a ⟧ ⟧ ⟧ ⟧"
+-- Metrics {dataless = 4, applications = 0, formations = 5, dispatches = 1}
+--
+-- >>> getThisObjectMetrics "⟦ α0 ↦ ⟦ α0 ↦ ⟦ ⟧.a ⟧, α0 ↦ ⟦ Δ ⤍ 01- ⟧.b ⟧"
+-- Metrics {dataless = 3, applications = 0, formations = 4, dispatches = 2}
 getThisObjectMetrics :: Object -> MetricsCount
 getThisObjectMetrics obj = execState (inspect obj) mempty
 
@@ -141,7 +170,7 @@
 -- Left ["a"]
 --
 -- >>> flip getBindingsByPathMetrics ["a"] "⟦ a ↦ ⟦ b ↦ ⟦ c ↦ ∅, d ↦ ⟦ φ ↦ ξ.ρ.c ⟧ ⟧, e ↦ ξ.b(c ↦ ⟦⟧).d ⟧ ⟧"
--- Right (BindingsByPathMetrics {path = ["a"], bindingsMetrics = [BindingMetrics {name = "b", metrics = Metrics {dataless = 0, applications = 0, formations = 2, dispatches = 2}},BindingMetrics {name = "e", metrics = Metrics {dataless = 1, applications = 1, formations = 1, dispatches = 2}}]})
+-- Right (BindingsByPathMetrics {path = ["a"], bindingsMetrics = [BindingMetrics {name = "b", metrics = Metrics {dataless = 2, applications = 0, formations = 2, dispatches = 2}},BindingMetrics {name = "e", metrics = Metrics {dataless = 1, applications = 1, formations = 1, dispatches = 2}}]})
 getBindingsByPathMetrics :: Object -> Path -> Either Path BindingsByPathMetrics
 getBindingsByPathMetrics object path =
   case getObjectByPath object path of
@@ -167,7 +196,7 @@
 -- Left ["a"]
 --
 -- >>> flip getObjectMetrics (Just ["a"]) "⟦ a ↦ ⟦ b ↦ ⟦ c ↦ ∅, d ↦ ⟦ φ ↦ ξ.ρ.c ⟧ ⟧, e ↦ ξ.b(c ↦ ⟦⟧).d ⟧ ⟧"
--- Right (ObjectMetrics {bindingsByPathMetrics = Just (BindingsByPathMetrics {path = ["a"], bindingsMetrics = [BindingMetrics {name = "b", metrics = Metrics {dataless = 0, applications = 0, formations = 2, dispatches = 2}},BindingMetrics {name = "e", metrics = Metrics {dataless = 1, applications = 1, formations = 1, dispatches = 2}}]}), thisObjectMetrics = Metrics {dataless = 1, applications = 1, formations = 5, dispatches = 4}})
+-- Right (ObjectMetrics {bindingsByPathMetrics = Just (BindingsByPathMetrics {path = ["a"], bindingsMetrics = [BindingMetrics {name = "b", metrics = Metrics {dataless = 2, applications = 0, formations = 2, dispatches = 2}},BindingMetrics {name = "e", metrics = Metrics {dataless = 1, applications = 1, formations = 1, dispatches = 2}}]}), thisObjectMetrics = Metrics {dataless = 5, applications = 1, formations = 5, dispatches = 4}})
 getObjectMetrics :: Object -> Maybe Path -> Either Path ObjectMetrics
 getObjectMetrics object path = do
   let thisObjectMetrics = getThisObjectMetrics object
@@ -180,13 +209,13 @@
 --
 -- If no formation is accessible by the path, return a prefix of the path that led to a non-formation when the remaining path wasn't empty.
 -- >>> flip getProgramMetrics (Just ["org", "eolang"]) "{⟦ org ↦ ⟦ eolang ↦ ⟦ x ↦ ⟦ φ ↦ Φ.org.eolang.bool ( α0 ↦ Φ.org.eolang.bytes (Δ ⤍ 01-) ) ⟧, z ↦ ⟦ y ↦ ⟦ x ↦ ∅, φ ↦ ξ.x ⟧, φ ↦ Φ.org.eolang.bool ( α0 ↦ Φ.org.eolang.bytes (Δ ⤍ 01-) ) ⟧, λ ⤍ Package ⟧, λ ⤍ Package ⟧⟧ }"
--- Right (ProgramMetrics {bindingsByPathMetrics = Just (BindingsByPathMetrics {path = ["org","eolang"], bindingsMetrics = [BindingMetrics {name = "x", metrics = Metrics {dataless = 0, applications = 2, formations = 1, dispatches = 6}},BindingMetrics {name = "z", metrics = Metrics {dataless = 0, applications = 2, formations = 2, dispatches = 7}}]}), programMetrics = Metrics {dataless = 0, applications = 4, formations = 6, dispatches = 13}})
+-- Right (ProgramMetrics {bindingsByPathMetrics = Just (BindingsByPathMetrics {path = ["org","eolang"], bindingsMetrics = [BindingMetrics {name = "x", metrics = Metrics {dataless = 1, applications = 2, formations = 1, dispatches = 6}},BindingMetrics {name = "z", metrics = Metrics {dataless = 2, applications = 2, formations = 2, dispatches = 7}}]}), programMetrics = Metrics {dataless = 6, applications = 4, formations = 6, dispatches = 13}})
 --
 -- >>> flip getProgramMetrics (Just ["a"]) "{⟦ a ↦ ⟦ b ↦ ⟦ c ↦ ∅, d ↦ ⟦ φ ↦ ξ.ρ.c ⟧ ⟧, e ↦ ξ.b(c ↦ ⟦⟧).d ⟧.e ⟧}"
 -- Left ["a"]
 --
 -- >>> flip getProgramMetrics (Just ["a"]) "{⟦ a ↦ ⟦ b ↦ ⟦ c ↦ ∅, d ↦ ⟦ φ ↦ ξ.ρ.c ⟧ ⟧, e ↦ ξ.b(c ↦ ⟦⟧).d ⟧ ⟧}"
--- Right (ProgramMetrics {bindingsByPathMetrics = Just (BindingsByPathMetrics {path = ["a"], bindingsMetrics = [BindingMetrics {name = "b", metrics = Metrics {dataless = 0, applications = 0, formations = 2, dispatches = 2}},BindingMetrics {name = "e", metrics = Metrics {dataless = 1, applications = 1, formations = 1, dispatches = 2}}]}), programMetrics = Metrics {dataless = 1, applications = 1, formations = 5, dispatches = 4}})
+-- Right (ProgramMetrics {bindingsByPathMetrics = Just (BindingsByPathMetrics {path = ["a"], bindingsMetrics = [BindingMetrics {name = "b", metrics = Metrics {dataless = 2, applications = 0, formations = 2, dispatches = 2}},BindingMetrics {name = "e", metrics = Metrics {dataless = 1, applications = 1, formations = 1, dispatches = 2}}]}), programMetrics = Metrics {dataless = 5, applications = 1, formations = 5, dispatches = 4}})
 getProgramMetrics :: Program -> Maybe Path -> Either Path ProgramMetrics
 getProgramMetrics (Program bindings) path = do
   ObjectMetrics{..} <- getObjectMetrics (Formation bindings) path
diff --git a/src/Language/EO/Phi/Metrics/Data.hs b/src/Language/EO/Phi/Metrics/Data.hs
--- a/src/Language/EO/Phi/Metrics/Data.hs
+++ b/src/Language/EO/Phi/Metrics/Data.hs
@@ -20,20 +20,19 @@
 
 module Language.EO.Phi.Metrics.Data where
 
-import Data.Aeson (ToJSON (..), Value (..), withObject, withScientific, withText, (.:), (.=))
+import Data.Aeson (ToJSON (..), Value (..), withObject, (.:), (.=))
 import Data.Aeson qualified as Aeson
-import Data.Aeson.Types (FromJSON (..), Parser, parseFail)
+import Data.Aeson.Types (FromJSON (..), Parser)
 import Data.Generics.Labels ()
 import Data.List (groupBy, intercalate)
-import Data.Scientific (toRealFloat)
 import GHC.Generics (Generic)
 import Language.EO.Phi.Rules.Common ()
 import Language.EO.Phi.TH (deriveJSON)
 
 data Metrics a = Metrics
-  { formations :: a
-  , dataless :: a
+  { dataless :: a
   , applications :: a
+  , formations :: a
   , dispatches :: a
   }
   deriving stock (Show, Generic, Eq, Functor, Foldable, Traversable)
@@ -47,18 +46,18 @@
   pure :: a -> Metrics a
   pure a =
     Metrics
-      { formations = a
-      , dataless = a
+      { dataless = a
       , applications = a
+      , formations = a
       , dispatches = a
       }
 
   (<*>) :: Metrics (a -> b) -> Metrics a -> Metrics b
   x <*> y =
     Metrics
-      { formations = x.formations y.formations
-      , dataless = x.dataless y.dataless
+      { dataless = x.dataless y.dataless
       , applications = x.applications y.applications
+      , formations = x.formations y.formations
       , dispatches = x.dispatches y.dispatches
       }
 
@@ -78,89 +77,10 @@
   fromInteger :: Integer -> Metrics a
   fromInteger x = pure $ fromInteger x
 
-data SafeNumber a = SafeNumber'NaN | SafeNumber'Number a
-  deriving stock (Functor)
-
--- >>> import Data.Aeson (decode')
---
--- >>> decode' @(SafeNumber Double) "\"NaN\""
--- Just NaN
---
--- >>> decode' @(SafeNumber Double) "3"
--- Just 3.0
-
-instance (FromJSON a, RealFloat a) => FromJSON (SafeNumber a) where
-  parseJSON :: Value -> Parser (SafeNumber a)
-  parseJSON (String s) =
-    withText
-      "NaN"
-      ( \case
-          "NaN" -> pure SafeNumber'NaN
-          _ -> parseFail "String is not a NaN"
-      )
-      (String s)
-  parseJSON (Number n) =
-    withScientific
-      "Number"
-      (pure . pure . toRealFloat)
-      (Number n)
-  parseJSON _ = parseFail "Value is not a NaN or a Number"
-
-instance (ToJSON a) => ToJSON (SafeNumber a) where
-  toJSON :: SafeNumber a -> Value
-  toJSON (SafeNumber'Number a) = toJSON a
-  toJSON SafeNumber'NaN = toJSON ("NaN" :: String)
-
-instance (Show a) => Show (SafeNumber a) where
-  show :: SafeNumber a -> String
-  show (SafeNumber'Number a) = show a
-  show SafeNumber'NaN = "NaN"
-
-instance (Eq a) => Eq (SafeNumber a) where
-  (==) :: SafeNumber a -> SafeNumber a -> Bool
-  (==) (SafeNumber'Number x) (SafeNumber'Number y) = x == y
-  (==) _ _ = False
-
-instance (Ord a) => Ord (SafeNumber a) where
-  (<=) :: SafeNumber a -> SafeNumber a -> Bool
-  (SafeNumber'Number x) <= (SafeNumber'Number y) = x <= y
-  _ <= SafeNumber'Number _ = True
-  _ <= _ = False
-
-instance Applicative SafeNumber where
-  pure :: a -> SafeNumber a
-  pure = SafeNumber'Number
-  (<*>) :: SafeNumber (a -> b) -> SafeNumber a -> SafeNumber b
-  (<*>) (SafeNumber'Number x') (SafeNumber'Number y') = SafeNumber'Number (x' y')
-  (<*>) _ _ = SafeNumber'NaN
-
-instance (Num a) => Num (SafeNumber a) where
-  (+) :: SafeNumber a -> SafeNumber a -> SafeNumber a
-  (+) x y = (+) <$> x <*> y
-  (*) :: SafeNumber a -> SafeNumber a -> SafeNumber a
-  (*) x y = (*) <$> x <*> y
-  abs :: SafeNumber a -> SafeNumber a
-  abs = (abs <$>)
-  signum :: SafeNumber a -> SafeNumber a
-  signum = (signum <$>)
-  fromInteger :: Integer -> SafeNumber a
-  fromInteger x = pure $ fromInteger x
-  negate :: SafeNumber a -> SafeNumber a
-  negate = (negate <$>)
-
-instance (Fractional a, Eq a) => Fractional (SafeNumber a) where
-  fromRational :: Rational -> SafeNumber a
-  fromRational = SafeNumber'Number . fromRational
-  (/) :: SafeNumber a -> SafeNumber a -> SafeNumber a
-  (/) (SafeNumber'Number x) (SafeNumber'Number y) | y /= 0 = SafeNumber'Number (x / y)
-  (/) _ _ = SafeNumber'NaN
-
-type MetricsSafe a = Metrics (SafeNumber a)
-
-instance (Fractional a, Eq a) => Fractional (MetricsSafe a) where
-  fromRational :: Rational -> MetricsSafe a
+instance (Fractional a) => Fractional (Metrics a) where
+  fromRational :: Rational -> Metrics a
   fromRational _ = 0
-  (/) :: MetricsSafe a -> MetricsSafe a -> MetricsSafe a
+  (/) :: Metrics a -> Metrics a -> Metrics a
   (/) x y = (/) <$> x <*> y
 
 instance (Num a) => Semigroup (Metrics a) where
diff --git a/src/Language/EO/Phi/Report/Data.hs b/src/Language/EO/Phi/Report/Data.hs
--- a/src/Language/EO/Phi/Report/Data.hs
+++ b/src/Language/EO/Phi/Report/Data.hs
@@ -3,6 +3,7 @@
 {-# LANGUAGE DerivingStrategies #-}
 {-# LANGUAGE DuplicateRecordFields #-}
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE InstanceSigs #-}
 {-# LANGUAGE OverloadedRecordDot #-}
 {-# LANGUAGE OverloadedStrings #-}
@@ -15,10 +16,12 @@
 
 module Language.EO.Phi.Report.Data where
 
+import Data.Aeson (FromJSON, ToJSON)
 import GHC.Generics (Generic)
-import Language.EO.Phi.Metrics.Data (BindingMetrics (..), Metrics (..), MetricsCount, ProgramMetrics, SafeNumber (..))
+import Language.EO.Phi.Metrics.Data (BindingMetrics (..), Metrics (..), MetricsCount, ProgramMetrics)
 import Language.EO.Phi.Metrics.Data qualified as Metrics
 import Language.EO.Phi.TH (deriveJSON)
+import Text.Printf (printf)
 import Prelude hiding (div, id, span)
 
 data ReportItem = ReportItem
@@ -39,12 +42,19 @@
 
 $(deriveJSON ''MetricsChangeCategory)
 
-type MetricsChange = Metrics (SafeNumber Double)
+type MetricsChange = Metrics Percent
 
 newtype Percent = Percent {percent :: Double}
+  deriving newtype
+    (FromJSON, ToJSON, Num, Fractional, Floating, Eq, Ord, Real, RealFrac, RealFloat)
 
-$(deriveJSON ''Percent)
+roundToStr :: Int -> Double -> String
+roundToStr = printf "%0.*f%%"
 
+instance Show Percent where
+  show :: Percent -> String
+  show Percent{..} = roundToStr 2 (percent * 100)
+
 type MetricsChangeCategorized = Metrics (MetricsChangeCategory Percent)
 
 data Report'InputConfig = Report'InputConfig
@@ -68,6 +78,7 @@
   { input :: Maybe Report'InputConfig
   , output :: Report'OutputConfig
   , expectedMetricsChange :: MetricsChange
+  , expectedImprovedProgramsPercentage :: Percent
   , items :: [ReportItem]
   }
   deriving stock (Show, Generic)
@@ -102,14 +113,23 @@
 
 $(deriveJSON ''Report)
 
+-- >>> calculateMetricsChange Metrics { dataless = 0.1, applications = 0.2, formations = 0.2, dispatches = 0.2 } Metrics { dataless = 100, applications = 0, formations = 100, dispatches = 100 } Metrics { dataless = 90, applications = 0, formations = 93, dispatches = 60 }
+-- Metrics {formations = MetricsChange'Bad {change = 7.00%}, dataless = MetricsChange'Good {change = 10.00%}, applications = MetricsChange'NA, dispatches = MetricsChange'Good {change = 40.00%}}
 calculateMetricsChange :: MetricsChange -> MetricsCount -> MetricsCount -> MetricsChangeCategorized
 calculateMetricsChange expectedMetricsChange countInitial countNormalized =
   getMetricsChangeClassified <$> expectedMetricsChange <*> actualMetricsChange
  where
-  getMetricsChangeClassified (SafeNumber'Number expected) (SafeNumber'Number actual)
-    | actual >= expected = MetricsChange'Good (Percent actual)
-    | otherwise = MetricsChange'Bad (Percent actual)
-  getMetricsChangeClassified _ _ = MetricsChange'NA
+  isFinite :: (RealFloat a) => a -> Bool
+  isFinite x = not (isNaN x || isInfinite x)
+
+  getMetricsChangeClassified :: Percent -> Percent -> MetricsChangeCategory Percent
+  getMetricsChangeClassified expected actual
+    | isFinite expected && isFinite actual =
+        if actual >= expected
+          then MetricsChange'Good actual
+          else MetricsChange'Bad actual
+    | otherwise = MetricsChange'NA
+
   actualMetricsChange :: MetricsChange
   actualMetricsChange = (initial - normalized) / initial
   initial = fromIntegral <$> countInitial
diff --git a/src/Language/EO/Phi/Report/Html.hs b/src/Language/EO/Phi/Report/Html.hs
--- a/src/Language/EO/Phi/Report/Html.hs
+++ b/src/Language/EO/Phi/Report/Html.hs
@@ -22,12 +22,11 @@
 import Data.String.Interpolate
 import Data.Text qualified as T
 import Data.Text.Encoding qualified as T
-import Language.EO.Phi.Metrics.Data (Metrics (..), MetricsCount, SafeNumber (..), toListMetrics)
+import Language.EO.Phi.Metrics.Data (Metrics (..), MetricsCount, toListMetrics)
 import Language.EO.Phi.Report.Data (MetricsChange, MetricsChangeCategorized, MetricsChangeCategory (..), Percent (..), ProgramReport (..), Report (..), ReportRow (..))
 import Text.Blaze.Html.Renderer.String (renderHtml)
 import Text.Blaze.Html5 hiding (i)
 import Text.Blaze.Html5.Attributes (class_, colspan, id, onclick, type_, value)
-import Text.Printf (printf)
 import Prelude hiding (div, id, span)
 
 -- | JavaScript file to embed into HTML reports
@@ -54,7 +53,7 @@
       [ tr $
           toHtml
             [ th ! colspan "2" ! class_ "no-sort" $ "Attribute"
-            , th ! colspan "4" ! class_ "no-sort" $ "Improvement = (Initial - Normalized) / Initial"
+            , th ! colspan "4" ! class_ "no-sort" $ "Change"
             , th ! colspan "4" ! class_ "no-sort" $ "Initial"
             , th ! colspan "4" ! class_ "no-sort" $ "Normalized"
             , th ! colspan "4" ! class_ "no-sort" $ "Location"
@@ -87,20 +86,13 @@
 
 data ReportConfig = ReportConfig
   { expectedMetricsChange :: MetricsChange
+  , expectedImprovedProgramsPercentage :: Percent
   , format :: ReportFormat
   }
 
-instance (ToMarkup a) => ToMarkup (SafeNumber a) where
-  toMarkup :: SafeNumber a -> Markup
-  toMarkup (SafeNumber'Number n) = toMarkup n
-  toMarkup SafeNumber'NaN = toMarkup ("NaN" :: String)
-
-roundToStr :: Int -> Double -> String
-roundToStr = printf "%0.*f%%"
-
 instance ToMarkup Percent where
   toMarkup :: Percent -> Markup
-  toMarkup Percent{..} = toMarkup $ roundToStr 2 (percent * 100)
+  toMarkup = toMarkup . show
 
 -- >>> import Text.Blaze.Html.Renderer.String (renderHtml)
 -- >>> reportConfig = ReportConfig { expectedMetricsChange = 0, format = ReportFormat'Markdown }
@@ -150,66 +142,64 @@
                 ]
          )
 
--- | Number of tests where metrics changes were better than expected
-countGoodMetricsChanges :: Report -> MetricsCount
-countGoodMetricsChanges report = metricsCount
- where
-  metricsChanges = (.metricsChange) <$> concatMap (.bindingsRows) report.programReports
-  metricsCount = foldMap ((\case MetricsChange'Good _ -> 1; _ -> 0) <$>) metricsChanges
-
--- | Number of tests in all programs
-countTests :: Report -> Int
-countTests report = length $ concatMap (.bindingsRows) report.programReports
-
 toHtmlReport :: ReportConfig -> Report -> Html
 toHtmlReport reportConfig report =
   toHtml $
     [ h2 "Overview"
         <> p
           [i|
-            We translate EO files into PHI programs.
-            Next, we normalize these programs.
+            We translate EO files into initial PHI programs.
+            Next, we normalize these programs and get normalized PHI programs.
             Then, we collect metrics for initial and normalized PHI programs.
           |]
+        <> h2 "Metrics"
         <> p
           [i|
             An EO file contains multiple test objects.
-            After conversion, these test objects become attributes in PHI programs.
+            After translation, these test objects become attributes in PHI programs.
             We call these attributes "tests".
           |]
         <> p
           [i|
-            In the report below, we present combined metrics for all programs,
-            metrics for programs,
-            and metrics for tests.
+            We collect metrics on the number of #{intercalate ", " (toListMetrics metricsNames)} in tests.
+            We want normalized tests to have less such elements than initial tests do.
           |]
-        <> h2 "Metrics"
+        <> p "A metric change for a test is calculated by the formula"
+        <> p (code "(metric_initial - metric_normalized) / metric_initial")
+        <> p "where:"
+        <> ul
+          ( toHtml
+              [ li $ code "metric_initial" <> " is the metric for the initial test"
+              , li $ code "metric_normalized" <> " is the metric for the normalized test"
+              ]
+          )
+        <> h3 "Expected"
         <> p
           [i|
-            We collect metrics on the number of dataless formations, applications, formations, and dispatches.
-            We want normalized PHI programs to have a smaller number of such elements than initial PHI programs.
+            Metric changes are expected to be as follows or greater:
           |]
-        <> p [i|These numbers are expected to reduce as follows:|]
         <> ul
           ( toHtml . toListMetrics $
-              makeMetricsItem
+              makePercentItem
                 <$> metricsNames
-                <*> ((Percent <$>) <$> reportConfig.expectedMetricsChange)
+                <*> reportConfig.expectedMetricsChange
           )
-        <> h2 "Statistics"
-        <> p [i|Total number of tests: #{countTests report}.|]
         <> p
-          [i|
-            For each metric, the number of tests where the metric was reduced as expected
-            (not counting tests where the metric was initially 0):
-          |]
+          ( let expectedImprovedProgramsPercentage = reportConfig.expectedImprovedProgramsPercentage
+             in [i|We expect such changes for at least #{expectedImprovedProgramsPercentage} of tests.|]
+          )
+        <> h3 "Actual"
+        <> p [i|We normalized #{testsCount} tests.|]
+        <> p [i|All metrics were improved for #{makeNumber allChangesGoodCount} tests.|]
+        <> p [i|Tests where a particular metric was improved:|]
         <> ul
           ( toHtml . toListMetrics $
-              makeMetricsItem
+              makeItem
                 <$> metricsNames
-                <*> countGoodMetricsChanges report
+                <*> particularMetricsChangeGoodCount
           )
-        <> h2 "Detailed results"
+        <> h2 "Table"
+        <> p [i|The table below provides detailed information about tests.|]
     ]
       <> [
          -- https://stackoverflow.com/a/55743302
@@ -250,12 +240,7 @@
               [ toHtmlReportHeader
               , tbody . toHtml $
                   toHtmlReportRow reportConfig
-                    <$> ( report.totalRow
-                            : concat
-                              [ programReport.programRow : programReport.bindingsRows
-                              | programReport <- report.programReports
-                              ]
-                        )
+                    <$> concat [programReport.bindingsRows | programReport <- report.programReports]
               ]
          ]
       <> ( case reportConfig.format of
@@ -267,8 +252,33 @@
          )
  where
   isMarkdown = reportConfig.format == ReportFormat'Markdown
-  makeMetricsItem :: (ToMarkup a) => String -> a -> Html
-  makeMetricsItem name x = li $ b (toHtml ([i|#{name}: |] :: String)) <> toHtml x
+
+  makePercentItem :: String -> Percent -> Html
+  makePercentItem name percent = li $ b [i|#{name}: |] <> toHtml percent
+
+  makeNumber :: Int -> String
+  makeNumber number = [i|#{number} (#{mkPercentage allChangesGoodCount})|]
+
+  makeItem :: String -> Int -> Html
+  makeItem name number = li $ b [i|#{name}: |] <> toHtml (makeNumber number)
+
+  tests = concatMap (.bindingsRows) report.programReports
+
+  testsCount = length tests
+
+  metricsChanges = (.metricsChange) <$> concatMap (.bindingsRows) report.programReports
+
+  isGood = \case
+    MetricsChange'Good _ -> True
+    _ -> False
+
+  countAllChanges cond = length $ filter (all cond) metricsChanges
+  allChangesGoodCount = countAllChanges isGood
+
+  mkPercentage x = Percent $ fromIntegral x / fromIntegral testsCount
+
+  particularMetricsChangeGoodCount :: Metrics Int
+  particularMetricsChangeGoodCount = sum $ ((\x -> if x then 1 else 0) . isGood <$>) <$> metricsChanges
 
 toStringReport :: ReportConfig -> Report -> String
 toStringReport reportConfig report = renderHtml $ toHtmlReport reportConfig report
diff --git a/src/Language/EO/Phi/Rules/Common.hs b/src/Language/EO/Phi/Rules/Common.hs
--- a/src/Language/EO/Phi/Rules/Common.hs
+++ b/src/Language/EO/Phi/Rules/Common.hs
@@ -1,3 +1,5 @@
+{-# HLINT ignore "Use &&" #-}
+{-# LANGUAGE DeriveFunctor #-}
 {-# LANGUAGE InstanceSigs #-}
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE RecordWildCards #-}
@@ -8,6 +10,8 @@
 module Language.EO.Phi.Rules.Common where
 
 import Control.Applicative (Alternative ((<|>)), asum)
+import Control.Arrow (Arrow (first))
+import Control.Monad
 import Data.List (nubBy, sortOn)
 import Data.List.NonEmpty (NonEmpty (..), (<|))
 import Data.List.NonEmpty qualified as NonEmpty
@@ -51,8 +55,17 @@
   , currentAttr :: Attribute
   , insideFormation :: Bool
   -- ^ Temporary hack for applying Ksi and Phi rules when dataizing
+  , dataizePackage :: Bool
+  -- ^ Temporary flag to only dataize Package attributes for the top-level formation.
   }
 
+sameContext :: Context -> Context -> Bool
+sameContext ctx1 ctx2 =
+  and
+    [ outerFormations ctx1 == outerFormations ctx2
+    , currentAttr ctx1 == currentAttr ctx2
+    ]
+
 defaultContext :: [NamedRule] -> Object -> Context
 defaultContext rules obj =
   Context
@@ -60,6 +73,7 @@
     , outerFormations = NonEmpty.singleton obj
     , currentAttr = Sigma
     , insideFormation = False
+    , dataizePackage = True
     }
 
 -- | A rule tries to apply a transformation to the root object, if possible.
@@ -99,12 +113,12 @@
       MetaFunction _ _ -> []
 
 -- | Given a unary function that operates only on plain objects,
--- converts it to a function that operates on name objects
+-- converts it to a function that operates on named objects
 propagateName1 :: (a -> b) -> (name, a) -> (name, b)
 propagateName1 f (name, obj) = (name, f obj)
 
 -- | Given a binary function that operates only on plain objects,
--- converts it to a function that operates on name objects
+-- converts it to a function that operates on named objects
 propagateName2 :: (a -> b -> c) -> (name, a) -> b -> (name, c)
 propagateName2 f (name, obj) bs = (name, f obj bs)
 
@@ -133,8 +147,6 @@
 isNF ctx = null . applyOneRule ctx
 
 -- | Apply rules until we get a normal form.
---
--- >>> mapM_ (putStrLn . Language.EO.Phi.printTree) (applyRules (Context [rule6] ["⟦ a ↦ ⟦ b ↦ ⟦ ⟧ ⟧.b ⟧"]) "⟦ a ↦ ⟦ b ↦ ⟦ ⟧ ⟧.b ⟧.a")
 applyRules :: Context -> Object -> [Object]
 applyRules ctx obj = applyRulesWith (defaultApplicationLimits (objectSize obj)) ctx obj
 
@@ -181,8 +193,10 @@
         equalObject
         [ obj''
         | (_ruleName, obj') <- applyOneRule ctx obj
-        , objectSize obj' < maxTermSize
-        , obj'' <- applyRulesWith limits{maxDepth = maxDepth - 1} ctx obj'
+        , obj'' <-
+            if objectSize obj' < maxTermSize
+              then applyRulesWith limits{maxDepth = maxDepth - 1} ctx obj'
+              else [obj']
         ]
 
 equalProgram :: Program -> Program -> Bool
@@ -219,21 +233,82 @@
 equalBinding (DeltaBinding _) (DeltaBinding _) = True
 equalBinding b1 b2 = b1 == b2
 
+-- * Chain variants
+
+newtype Chain log result = Chain
+  {runChain :: Context -> [([(String, log)], result)]}
+  deriving (Functor)
+
+type NormalizeChain = Chain Object
+type DataizeChain = Chain (Either Object Bytes)
+
+instance Applicative (Chain a) where
+  pure x = Chain (const [([], x)])
+  (<*>) = ap
+
+instance Monad (Chain a) where
+  return = pure
+  Chain dx >>= f = Chain $ \ctx ->
+    [ (steps <> steps', y)
+    | (steps, x) <- dx ctx
+    , (steps', y) <- runChain (f x) ctx
+    ]
+
+logStep :: String -> info -> Chain info ()
+logStep msg info = Chain $ const [([(msg, info)], ())]
+
+choose :: [a] -> Chain log a
+choose xs = Chain $ \_ctx -> [(mempty, x) | x <- xs]
+
+msplit :: Chain log a -> Chain log (Maybe (a, Chain log a))
+msplit (Chain m) = Chain $ \ctx ->
+  case m ctx of
+    [] -> runChain (return Nothing) ctx
+    (logs, x) : xs -> [(logs, Just (x, Chain (const xs)))]
+
+transformLogs :: (log1 -> log2) -> Chain log1 a -> Chain log2 a
+transformLogs f (Chain normChain) = Chain $ map (first (map (fmap f))) . normChain
+
+transformNormLogs :: NormalizeChain a -> DataizeChain a
+transformNormLogs = transformLogs Left
+
+getContext :: Chain a Context
+getContext = Chain $ \ctx -> [([], ctx)]
+
+withContext :: Context -> Chain log a -> Chain log a
+withContext = modifyContext . const
+
+modifyContext :: (Context -> Context) -> Chain log a -> Chain log a
+modifyContext g (Chain f) = Chain (f . g)
+
+applyRulesChain' :: Context -> Object -> [([(String, Object)], Object)]
+applyRulesChain' ctx obj = applyRulesChainWith' (defaultApplicationLimits (objectSize obj)) ctx obj
+
 -- | Apply the rules until the object is normalized, preserving the history (chain) of applications.
-applyRulesChain :: Context -> Object -> [[(String, Object)]]
-applyRulesChain ctx obj = applyRulesChainWith (defaultApplicationLimits (objectSize obj)) ctx obj
+applyRulesChain :: Object -> NormalizeChain Object
+applyRulesChain obj = applyRulesChainWith (defaultApplicationLimits (objectSize obj)) obj
 
+applyRulesChainWith' :: ApplicationLimits -> Context -> Object -> [([(String, Object)], Object)]
+applyRulesChainWith' limits ctx obj = runChain (applyRulesChainWith limits obj) ctx
+
 -- | A variant of `applyRulesChain` with a maximum application depth.
-applyRulesChainWith :: ApplicationLimits -> Context -> Object -> [[(String, Object)]]
-applyRulesChainWith limits@ApplicationLimits{..} ctx obj
-  | maxDepth <= 0 = [[("Max depth hit", obj)]]
-  | isNF ctx obj = [[("Normal form", obj)]]
-  | otherwise =
-      [ (ruleName, obj) : chain
-      | (ruleName, obj') <- applyOneRule ctx obj
-      , objectSize obj' < maxTermSize
-      , chain <- applyRulesChainWith limits{maxDepth = maxDepth - 1} ctx obj'
-      ]
+applyRulesChainWith :: ApplicationLimits -> Object -> NormalizeChain Object
+applyRulesChainWith limits@ApplicationLimits{..} obj
+  | maxDepth <= 0 = do
+      logStep "Max depth hit" obj
+      return obj
+  | otherwise = do
+      ctx <- getContext
+      if isNF ctx obj
+        then do
+          logStep "Normal form" obj
+          return obj
+        else do
+          (ruleName, obj') <- choose (applyOneRule ctx obj)
+          logStep ruleName obj'
+          if objectSize obj' < maxTermSize
+            then applyRulesChainWith limits{maxDepth = maxDepth - 1} obj'
+            else return obj'
 
 -- * Helpers
 
diff --git a/src/Language/EO/Phi/Rules/Yaml.hs b/src/Language/EO/Phi/Rules/Yaml.hs
--- a/src/Language/EO/Phi/Rules/Yaml.hs
+++ b/src/Language/EO/Phi/Rules/Yaml.hs
@@ -31,6 +31,10 @@
 import Language.EO.Phi.Rules.Common qualified as Common
 import Language.EO.Phi.Syntax.Abs
 
+-- $setup
+-- >>> :set -XOverloadedStrings
+-- >>> :set -XOverloadedLists
+
 instance FromJSON Object where parseJSON = fmap fromString . parseJSON
 instance FromJSON Binding where parseJSON = fmap fromString . parseJSON
 instance FromJSON MetaId where parseJSON = fmap MetaId . parseJSON
diff --git a/src/Language/EO/Phi/Syntax.hs b/src/Language/EO/Phi/Syntax.hs
--- a/src/Language/EO/Phi/Syntax.hs
+++ b/src/Language/EO/Phi/Syntax.hs
@@ -4,6 +4,7 @@
 module Language.EO.Phi.Syntax (
   module Language.EO.Phi.Syntax.Abs,
   printTree,
+  shrinkDots,
 ) where
 
 import Data.Char (isSpace)
@@ -19,8 +20,8 @@
 
 -- | Remove spaces around dots.
 --
--- >>> putStrLn (shrinkDots "a ↦ ξ . a")
--- a ↦ ξ.a
+-- >>> shrinkDots "a ↦ ξ . a" == "a ↦ ξ.a"
+-- True
 shrinkDots :: String -> String
 shrinkDots [] = []
 shrinkDots (' ' : '.' : ' ' : cs) = '.' : shrinkDots cs
diff --git a/src/Language/EO/Phi/Syntax/Lex.hs b/src/Language/EO/Phi/Syntax/Lex.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/EO/Phi/Syntax/Lex.hs
@@ -0,0 +1,14009 @@
+{-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-missing-signatures #-}
+{-# LANGUAGE CPP #-}
+{-# LINE 4 "Lex.x" #-}
+{-# OPTIONS -fno-warn-incomplete-patterns #-}
+{-# OPTIONS_GHC -w #-}
+
+{-# LANGUAGE PatternSynonyms #-}
+
+module Language.EO.Phi.Syntax.Lex where
+
+import Prelude
+
+import qualified Data.Bits
+import Data.Char     (ord)
+import Data.Function (on)
+import Data.Word     (Word8)
+#if __GLASGOW_HASKELL__ >= 603
+#include "ghcconfig.h"
+#elif defined(__GLASGOW_HASKELL__)
+#include "config.h"
+#endif
+#if __GLASGOW_HASKELL__ >= 503
+import Data.Array
+#else
+import Array
+#endif
+alex_tab_size :: Int
+alex_tab_size = 8
+alex_base :: Array Int Int
+alex_base = listArray (0 :: Int, 101)
+  [ -8
+  , 91
+  , -153
+  , -73
+  , 347
+  , 348
+  , -41
+  , 0
+  , 140
+  , 0
+  , 0
+  , 0
+  , 397
+  , 462
+  , 526
+  , -28
+  , 654
+  , 718
+  , 862
+  , -27
+  , 885
+  , 908
+  , 931
+  , -140
+  , -146
+  , 841
+  , -144
+  , -139
+  , 904
+  , 1032
+  , 1288
+  , 1407
+  , 0
+  , 0
+  , 0
+  , 1520
+  , 1585
+  , 1649
+  , -136
+  , -137
+  , 1777
+  , 1905
+  , 2161
+  , 2280
+  , 2408
+  , 2552
+  , -16
+  , 0
+  , 2633
+  , 2889
+  , 2890
+  , 3018
+  , 2483
+  , 3083
+  , 3196
+  , 0
+  , 0
+  , 0
+  , 0
+  , 3410
+  , 3624
+  , 3880
+  , 3881
+  , 4009
+  , 3266
+  , 3476
+  , 4122
+  , 0
+  , 0
+  , 0
+  , 911
+  , 0
+  , -131
+  , 856
+  , -106
+  , -83
+  , -46
+  , 0
+  , 6
+  , 4378
+  , 4623
+  , 4868
+  , 5104
+  , 5360
+  , 5361
+  , 5489
+  , -114
+  , -105
+  , 4314
+  , 4560
+  , 5602
+  , 0
+  , 0
+  , 0
+  , 5858
+  , 6094
+  , 4804
+  , -80
+  , 6222
+  , 6335
+  , 0
+  , 0
+  ]
+
+alex_table :: Array Int Int
+alex_table = listArray (0 :: Int, 6590)
+  [ 0
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 97
+  , 7
+  , 8
+  , 8
+  , 8
+  , 8
+  , 8
+  , 8
+  , 8
+  , 8
+  , 8
+  , 18
+  , 21
+  , 24
+  , -1
+  , -1
+  , 71
+  , 39
+  , 70
+  , 31
+  , 60
+  , 71
+  , 71
+  , -1
+  , -1
+  , 48
+  , 71
+  , 71
+  , 71
+  , 71
+  , 71
+  , 78
+  , 71
+  , 46
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 20
+  , 71
+  , 77
+  , -1
+  , -1
+  , 86
+  , 0
+  , 43
+  , 80
+  , 80
+  , 80
+  , 80
+  , 80
+  , 80
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 71
+  , 0
+  , 71
+  , -1
+  , -1
+  , 71
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 71
+  , 0
+  , 71
+  , 96
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 16
+  , 8
+  , 8
+  , 8
+  , 8
+  , 8
+  , 8
+  , 8
+  , 8
+  , 8
+  , 8
+  , 25
+  , 76
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 73
+  , 98
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 0
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 0
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 0
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 13
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 14
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 0
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 0
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 0
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 0
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 70
+  , 70
+  , 70
+  , 70
+  , 70
+  , 0
+  , 0
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 70
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 15
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 22
+  , 19
+  , 19
+  , 19
+  , 19
+  , 19
+  , 19
+  , 19
+  , 19
+  , 19
+  , 19
+  , 71
+  , 26
+  , 0
+  , 75
+  , 0
+  , 72
+  , 0
+  , 19
+  , 19
+  , 19
+  , 19
+  , 19
+  , 19
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 71
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 27
+  , 0
+  , 0
+  , 6
+  , 0
+  , 74
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 71
+  , 0
+  , 71
+  , 71
+  , 29
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 30
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 0
+  , 0
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , 0
+  , 0
+  , 0
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , 0
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 30
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 11
+  , 14
+  , 29
+  , 10
+  , 23
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 10
+  , 13
+  , 28
+  , 9
+  , 9
+  , 9
+  , 12
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 36
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 37
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 41
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 42
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 0
+  , 0
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , 0
+  , 0
+  , 0
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , 0
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 42
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 34
+  , 37
+  , 41
+  , 33
+  , 38
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 33
+  , 36
+  , 40
+  , 32
+  , 32
+  , 32
+  , 35
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 0
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , -1
+  , 0
+  , 0
+  , 0
+  , 45
+  , 0
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , 45
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 44
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 49
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 52
+  , 50
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 53
+  , 51
+  , 57
+  , 57
+  , 57
+  , 54
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 0
+  , 49
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 55
+  , 50
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 56
+  , 52
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 53
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 59
+  , 0
+  , 0
+  , 0
+  , 0
+  , 58
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 61
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 64
+  , 62
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 65
+  , 63
+  , 69
+  , 69
+  , 69
+  , 66
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 59
+  , 64
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 61
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 64
+  , 62
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 65
+  , 63
+  , 69
+  , 69
+  , 69
+  , 66
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 0
+  , 61
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 67
+  , 62
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 68
+  , 65
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 0
+  , 0
+  , 82
+  , 82
+  , 0
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 0
+  , 0
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 45
+  , 0
+  , 0
+  , 82
+  , 82
+  , 0
+  , 0
+  , 0
+  , 82
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 0
+  , 0
+  , 82
+  , 82
+  , 82
+  , 0
+  , 82
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 0
+  , 82
+  , 0
+  , 82
+  , 79
+  , 82
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 0
+  , 0
+  , 0
+  , 82
+  , 82
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 0
+  , 0
+  , 83
+  , 17
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 88
+  , 84
+  , 92
+  , 87
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 89
+  , 85
+  , 93
+  , 93
+  , 93
+  , 90
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 0
+  , 0
+  , 82
+  , 82
+  , 0
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 0
+  , 0
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 45
+  , 0
+  , 0
+  , 82
+  , 82
+  , 0
+  , 0
+  , 0
+  , 82
+  , 81
+  , 81
+  , 81
+  , 81
+  , 81
+  , 81
+  , 81
+  , 81
+  , 81
+  , 81
+  , 0
+  , 0
+  , 82
+  , 82
+  , 82
+  , 0
+  , 82
+  , 81
+  , 81
+  , 81
+  , 81
+  , 81
+  , 81
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 0
+  , 82
+  , 0
+  , 82
+  , 79
+  , 82
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 0
+  , 0
+  , 0
+  , 82
+  , 82
+  , 88
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 0
+  , 83
+  , 17
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 88
+  , 84
+  , 92
+  , 87
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 89
+  , 85
+  , 93
+  , 93
+  , 93
+  , 90
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 0
+  , 0
+  , 82
+  , 82
+  , 0
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 0
+  , 0
+  , 82
+  , 82
+  , 82
+  , 82
+  , 82
+  , 45
+  , 0
+  , 0
+  , 82
+  , 82
+  , 0
+  , 18
+  , 0
+  , 82
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 0
+  , 0
+  , 82
+  , 82
+  , 82
+  , 0
+  , 82
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 0
+  , 82
+  , 0
+  , 82
+  , 79
+  , 82
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 79
+  , 0
+  , 0
+  , 0
+  , 82
+  , 82
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 0
+  , 0
+  , 83
+  , 17
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 88
+  , 84
+  , 92
+  , 87
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 89
+  , 85
+  , 93
+  , 93
+  , 93
+  , 90
+  , -1
+  , -1
+  , 0
+  , 0
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , 0
+  , 0
+  , 0
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , 0
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 83
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 88
+  , 84
+  , 92
+  , 87
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 89
+  , 85
+  , 93
+  , 93
+  , 93
+  , 90
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 0
+  , 83
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 91
+  , 84
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 92
+  , 89
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 95
+  , 95
+  , 95
+  , 95
+  , 95
+  , 95
+  , 95
+  , 95
+  , 95
+  , 0
+  , 0
+  , 95
+  , 95
+  , 0
+  , 95
+  , 95
+  , 95
+  , 95
+  , 95
+  , 95
+  , 95
+  , 95
+  , 95
+  , 95
+  , 95
+  , 95
+  , 95
+  , 95
+  , 95
+  , 95
+  , 95
+  , 95
+  , 0
+  , 0
+  , 95
+  , 95
+  , 95
+  , 95
+  , 95
+  , 45
+  , 0
+  , 0
+  , 95
+  , 95
+  , 0
+  , 95
+  , 0
+  , 95
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 0
+  , 0
+  , 95
+  , 95
+  , 95
+  , 0
+  , 95
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 0
+  , 95
+  , 0
+  , 95
+  , 94
+  , 95
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 94
+  , 0
+  , 0
+  , 0
+  , 95
+  , 95
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 4
+  , 5
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 96
+  , 98
+  , 100
+  , 2
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 3
+  , 1
+  , 101
+  , 101
+  , 101
+  , 99
+  , -1
+  , -1
+  , 0
+  , 0
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , 0
+  , 0
+  , -1
+  , 0
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , 0
+  , 0
+  , 0
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , 0
+  , -1
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , 0
+  , 0
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 4
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 96
+  , 98
+  , 100
+  , 2
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 100
+  , 3
+  , 1
+  , 101
+  , 101
+  , 101
+  , 99
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 4
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 47
+  , 3
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  ]
+
+alex_check :: Array Int Int
+alex_check = listArray (0 :: Int, 6590)
+  [ -1
+  , 9
+  , 10
+  , 11
+  , 12
+  , 13
+  , 159
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 45
+  , 45
+  , 159
+  , 166
+  , 167
+  , 166
+  , 159
+  , 32
+  , 33
+  , 42
+  , 166
+  , 167
+  , 166
+  , 167
+  , 47
+  , 40
+  , 41
+  , 165
+  , 141
+  , 44
+  , 45
+  , 46
+  , 47
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 133
+  , 45
+  , 166
+  , 167
+  , 159
+  , -1
+  , 64
+  , 65
+  , 66
+  , 67
+  , 68
+  , 69
+  , 70
+  , 71
+  , 72
+  , 73
+  , 74
+  , 75
+  , 76
+  , 77
+  , 78
+  , 79
+  , 80
+  , 81
+  , 82
+  , 83
+  , 84
+  , 85
+  , 86
+  , 87
+  , 88
+  , 89
+  , 90
+  , 129
+  , -1
+  , 131
+  , 166
+  , 167
+  , 134
+  , 97
+  , 98
+  , 99
+  , 100
+  , 101
+  , 102
+  , 103
+  , 104
+  , 105
+  , 106
+  , 107
+  , 108
+  , 109
+  , 110
+  , 111
+  , 112
+  , 113
+  , 114
+  , 115
+  , 116
+  , 117
+  , 118
+  , 119
+  , 120
+  , 121
+  , 122
+  , 123
+  , -1
+  , 125
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , -1
+  , -1
+  , -1
+  , -1
+  , 195
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 206
+  , 207
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 226
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 0
+  , 1
+  , 2
+  , 3
+  , 4
+  , 5
+  , 6
+  , 7
+  , 8
+  , 9
+  , 10
+  , 11
+  , 12
+  , 13
+  , 14
+  , 15
+  , 16
+  , 17
+  , 18
+  , 19
+  , 20
+  , 21
+  , 22
+  , 23
+  , 24
+  , 25
+  , 26
+  , 27
+  , 28
+  , 29
+  , 30
+  , 31
+  , 32
+  , 33
+  , 34
+  , 35
+  , 36
+  , 37
+  , 38
+  , 39
+  , 40
+  , 41
+  , 42
+  , 43
+  , 44
+  , 45
+  , 46
+  , 47
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 58
+  , 59
+  , 60
+  , 61
+  , 62
+  , 63
+  , 64
+  , 65
+  , 66
+  , 67
+  , 68
+  , 69
+  , 70
+  , 71
+  , 72
+  , 73
+  , 74
+  , 75
+  , 76
+  , 77
+  , 78
+  , 79
+  , 80
+  , 81
+  , 82
+  , 83
+  , 84
+  , 85
+  , 86
+  , 87
+  , 88
+  , 89
+  , 90
+  , 91
+  , 92
+  , 93
+  , 94
+  , 95
+  , 96
+  , 97
+  , 98
+  , 99
+  , 100
+  , 101
+  , 102
+  , 103
+  , 104
+  , 105
+  , 106
+  , 107
+  , 108
+  , 109
+  , 110
+  , 111
+  , 112
+  , 113
+  , 114
+  , 115
+  , 116
+  , 117
+  , 118
+  , 119
+  , 120
+  , 121
+  , 122
+  , 123
+  , 124
+  , 125
+  , 126
+  , 127
+  , -1
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , -1
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , -1
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , -1
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , -1
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , -1
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , -1
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 9
+  , 10
+  , 11
+  , 12
+  , 13
+  , -1
+  , -1
+  , 65
+  , 66
+  , 67
+  , 68
+  , 69
+  , 70
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 32
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 65
+  , 66
+  , 67
+  , 68
+  , 69
+  , 70
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 65
+  , 66
+  , 67
+  , 68
+  , 69
+  , 70
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 148
+  , 134
+  , -1
+  , 136
+  , -1
+  , 138
+  , -1
+  , 65
+  , 66
+  , 67
+  , 68
+  , 69
+  , 70
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 166
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 159
+  , -1
+  , -1
+  , 177
+  , -1
+  , 164
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 187
+  , -1
+  , 189
+  , 190
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 0
+  , 1
+  , 2
+  , 3
+  , 4
+  , 5
+  , 6
+  , 7
+  , 8
+  , 9
+  , 10
+  , 11
+  , 12
+  , 13
+  , 14
+  , 15
+  , 16
+  , 17
+  , 18
+  , 19
+  , 20
+  , 21
+  , 22
+  , 23
+  , 24
+  , 25
+  , 26
+  , 27
+  , 28
+  , 29
+  , 30
+  , 31
+  , 32
+  , 33
+  , 34
+  , 35
+  , 36
+  , 37
+  , 38
+  , 39
+  , 40
+  , 41
+  , 42
+  , 43
+  , 44
+  , 45
+  , 46
+  , 47
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 58
+  , 59
+  , 60
+  , 61
+  , 62
+  , 63
+  , 64
+  , 65
+  , 66
+  , 67
+  , 68
+  , 69
+  , 70
+  , 71
+  , 72
+  , 73
+  , 74
+  , 75
+  , 76
+  , 77
+  , 78
+  , 79
+  , 80
+  , 81
+  , 82
+  , 83
+  , 84
+  , 85
+  , 86
+  , 87
+  , 88
+  , 89
+  , 90
+  , 91
+  , 92
+  , 93
+  , 94
+  , 95
+  , 96
+  , 97
+  , 98
+  , 99
+  , 100
+  , 101
+  , 102
+  , 103
+  , 104
+  , 105
+  , 106
+  , 107
+  , 108
+  , 109
+  , 110
+  , 111
+  , 112
+  , 113
+  , 114
+  , 115
+  , 116
+  , 117
+  , 118
+  , 119
+  , 120
+  , 121
+  , 122
+  , 123
+  , 124
+  , 125
+  , 126
+  , 127
+  , 9
+  , 10
+  , -1
+  , -1
+  , 13
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 32
+  , 33
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 39
+  , 40
+  , 41
+  , -1
+  , -1
+  , 44
+  , 45
+  , 46
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 58
+  , 59
+  , -1
+  , -1
+  , -1
+  , 63
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 91
+  , -1
+  , 93
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 123
+  , 124
+  , 125
+  , -1
+  , -1
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 0
+  , 1
+  , 2
+  , 3
+  , 4
+  , 5
+  , 6
+  , 7
+  , 8
+  , 9
+  , 10
+  , 11
+  , 12
+  , 13
+  , 14
+  , 15
+  , 16
+  , 17
+  , 18
+  , 19
+  , 20
+  , 21
+  , 22
+  , 23
+  , 24
+  , 25
+  , 26
+  , 27
+  , 28
+  , 29
+  , 30
+  , 31
+  , 32
+  , 33
+  , 34
+  , 35
+  , 36
+  , 37
+  , 38
+  , 39
+  , 40
+  , 41
+  , 42
+  , 43
+  , 44
+  , 45
+  , 46
+  , 47
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 58
+  , 59
+  , 60
+  , 61
+  , 62
+  , 63
+  , 64
+  , 65
+  , 66
+  , 67
+  , 68
+  , 69
+  , 70
+  , 71
+  , 72
+  , 73
+  , 74
+  , 75
+  , 76
+  , 77
+  , 78
+  , 79
+  , 80
+  , 81
+  , 82
+  , 83
+  , 84
+  , 85
+  , 86
+  , 87
+  , 88
+  , 89
+  , 90
+  , 91
+  , 92
+  , 93
+  , 94
+  , 95
+  , 96
+  , 97
+  , 98
+  , 99
+  , 100
+  , 101
+  , 102
+  , 103
+  , 104
+  , 105
+  , 106
+  , 107
+  , 108
+  , 109
+  , 110
+  , 111
+  , 112
+  , 113
+  , 114
+  , 115
+  , 116
+  , 117
+  , 118
+  , 119
+  , 120
+  , 121
+  , 122
+  , 123
+  , 124
+  , 125
+  , 126
+  , 127
+  , 9
+  , 10
+  , -1
+  , -1
+  , 13
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 32
+  , 33
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 39
+  , 40
+  , 41
+  , -1
+  , -1
+  , 44
+  , 45
+  , 46
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 58
+  , 59
+  , -1
+  , -1
+  , -1
+  , 63
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 91
+  , -1
+  , 93
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 123
+  , 124
+  , 125
+  , -1
+  , -1
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , -1
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 39
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 65
+  , 66
+  , 67
+  , 68
+  , 69
+  , 70
+  , 71
+  , 72
+  , 73
+  , 74
+  , 75
+  , 76
+  , 77
+  , 78
+  , 79
+  , 80
+  , 81
+  , 82
+  , 83
+  , 84
+  , 85
+  , 86
+  , 87
+  , 88
+  , 89
+  , 90
+  , 10
+  , -1
+  , -1
+  , -1
+  , 95
+  , -1
+  , 97
+  , 98
+  , 99
+  , 100
+  , 101
+  , 102
+  , 103
+  , 104
+  , 105
+  , 106
+  , 107
+  , 108
+  , 109
+  , 110
+  , 111
+  , 112
+  , 113
+  , 114
+  , 115
+  , 116
+  , 117
+  , 118
+  , 119
+  , 120
+  , 121
+  , 122
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 195
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 0
+  , 1
+  , 2
+  , 3
+  , 4
+  , 5
+  , 6
+  , 7
+  , 8
+  , 9
+  , 10
+  , 11
+  , 12
+  , 13
+  , 14
+  , 15
+  , 16
+  , 17
+  , 18
+  , 19
+  , 20
+  , 21
+  , 22
+  , 23
+  , 24
+  , 25
+  , 26
+  , 27
+  , 28
+  , 29
+  , 30
+  , 31
+  , 32
+  , 33
+  , 34
+  , 35
+  , 36
+  , 37
+  , 38
+  , 39
+  , 40
+  , 41
+  , 42
+  , 43
+  , 44
+  , 45
+  , 46
+  , 47
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 58
+  , 59
+  , 60
+  , 61
+  , 62
+  , 63
+  , 64
+  , 65
+  , 66
+  , 67
+  , 68
+  , 69
+  , 70
+  , 71
+  , 72
+  , 73
+  , 74
+  , 75
+  , 76
+  , 77
+  , 78
+  , 79
+  , 80
+  , 81
+  , 82
+  , 83
+  , 84
+  , 85
+  , 86
+  , 87
+  , 88
+  , 89
+  , 90
+  , 91
+  , 92
+  , 93
+  , 94
+  , 95
+  , 96
+  , 97
+  , 98
+  , 99
+  , 100
+  , 101
+  , 102
+  , 103
+  , 104
+  , 105
+  , 106
+  , 107
+  , 108
+  , 109
+  , 110
+  , 111
+  , 112
+  , 113
+  , 114
+  , 115
+  , 116
+  , 117
+  , 118
+  , 119
+  , 120
+  , 121
+  , 122
+  , 123
+  , 124
+  , 125
+  , 126
+  , 127
+  , -1
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 42
+  , -1
+  , -1
+  , -1
+  , -1
+  , 47
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 42
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 0
+  , 1
+  , 2
+  , 3
+  , 4
+  , 5
+  , 6
+  , 7
+  , 8
+  , 9
+  , 10
+  , 11
+  , 12
+  , 13
+  , 14
+  , 15
+  , 16
+  , 17
+  , 18
+  , 19
+  , 20
+  , 21
+  , 22
+  , 23
+  , 24
+  , 25
+  , 26
+  , 27
+  , 28
+  , 29
+  , 30
+  , 31
+  , 32
+  , 33
+  , 34
+  , 35
+  , 36
+  , 37
+  , 38
+  , 39
+  , 40
+  , 41
+  , 42
+  , 43
+  , 44
+  , 45
+  , 46
+  , 47
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 58
+  , 59
+  , 60
+  , 61
+  , 62
+  , 63
+  , 64
+  , 65
+  , 66
+  , 67
+  , 68
+  , 69
+  , 70
+  , 71
+  , 72
+  , 73
+  , 74
+  , 75
+  , 76
+  , 77
+  , 78
+  , 79
+  , 80
+  , 81
+  , 82
+  , 83
+  , 84
+  , 85
+  , 86
+  , 87
+  , 88
+  , 89
+  , 90
+  , 91
+  , 92
+  , 93
+  , 94
+  , 95
+  , 96
+  , 97
+  , 98
+  , 99
+  , 100
+  , 101
+  , 102
+  , 103
+  , 104
+  , 105
+  , 106
+  , 107
+  , 108
+  , 109
+  , 110
+  , 111
+  , 112
+  , 113
+  , 114
+  , 115
+  , 116
+  , 117
+  , 118
+  , 119
+  , 120
+  , 121
+  , 122
+  , 123
+  , 124
+  , 125
+  , 126
+  , 127
+  , -1
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 0
+  , 1
+  , 2
+  , 3
+  , 4
+  , 5
+  , 6
+  , 7
+  , 8
+  , -1
+  , -1
+  , 11
+  , 12
+  , -1
+  , 14
+  , 15
+  , 16
+  , 17
+  , 18
+  , 19
+  , 20
+  , 21
+  , 22
+  , 23
+  , 24
+  , 25
+  , 26
+  , 27
+  , 28
+  , 29
+  , 30
+  , 31
+  , -1
+  , -1
+  , 34
+  , 35
+  , 36
+  , 37
+  , 38
+  , 39
+  , -1
+  , -1
+  , 42
+  , 43
+  , -1
+  , -1
+  , -1
+  , 47
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , -1
+  , -1
+  , 60
+  , 61
+  , 62
+  , -1
+  , 64
+  , 65
+  , 66
+  , 67
+  , 68
+  , 69
+  , 70
+  , 71
+  , 72
+  , 73
+  , 74
+  , 75
+  , 76
+  , 77
+  , 78
+  , 79
+  , 80
+  , 81
+  , 82
+  , 83
+  , 84
+  , 85
+  , 86
+  , 87
+  , 88
+  , 89
+  , 90
+  , -1
+  , 92
+  , -1
+  , 94
+  , 95
+  , 96
+  , 97
+  , 98
+  , 99
+  , 100
+  , 101
+  , 102
+  , 103
+  , 104
+  , 105
+  , 106
+  , 107
+  , 108
+  , 109
+  , 110
+  , 111
+  , 112
+  , 113
+  , 114
+  , 115
+  , 116
+  , 117
+  , 118
+  , 119
+  , 120
+  , 121
+  , 122
+  , -1
+  , -1
+  , -1
+  , 126
+  , 127
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , -1
+  , -1
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 0
+  , 1
+  , 2
+  , 3
+  , 4
+  , 5
+  , 6
+  , 7
+  , 8
+  , -1
+  , -1
+  , 11
+  , 12
+  , -1
+  , 14
+  , 15
+  , 16
+  , 17
+  , 18
+  , 19
+  , 20
+  , 21
+  , 22
+  , 23
+  , 24
+  , 25
+  , 26
+  , 27
+  , 28
+  , 29
+  , 30
+  , 31
+  , -1
+  , -1
+  , 34
+  , 35
+  , 36
+  , 37
+  , 38
+  , 39
+  , -1
+  , -1
+  , 42
+  , 43
+  , -1
+  , -1
+  , -1
+  , 47
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , -1
+  , -1
+  , 60
+  , 61
+  , 62
+  , -1
+  , 64
+  , 65
+  , 66
+  , 67
+  , 68
+  , 69
+  , 70
+  , 71
+  , 72
+  , 73
+  , 74
+  , 75
+  , 76
+  , 77
+  , 78
+  , 79
+  , 80
+  , 81
+  , 82
+  , 83
+  , 84
+  , 85
+  , 86
+  , 87
+  , 88
+  , 89
+  , 90
+  , -1
+  , 92
+  , -1
+  , 94
+  , 95
+  , 96
+  , 97
+  , 98
+  , 99
+  , 100
+  , 101
+  , 102
+  , 103
+  , 104
+  , 105
+  , 106
+  , 107
+  , 108
+  , 109
+  , 110
+  , 111
+  , 112
+  , 113
+  , 114
+  , 115
+  , 116
+  , 117
+  , 118
+  , 119
+  , 120
+  , 121
+  , 122
+  , -1
+  , -1
+  , -1
+  , 126
+  , 127
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , -1
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 0
+  , 1
+  , 2
+  , 3
+  , 4
+  , 5
+  , 6
+  , 7
+  , 8
+  , -1
+  , -1
+  , 11
+  , 12
+  , -1
+  , 14
+  , 15
+  , 16
+  , 17
+  , 18
+  , 19
+  , 20
+  , 21
+  , 22
+  , 23
+  , 24
+  , 25
+  , 26
+  , 27
+  , 28
+  , 29
+  , 30
+  , 31
+  , -1
+  , -1
+  , 34
+  , 35
+  , 36
+  , 37
+  , 38
+  , 39
+  , -1
+  , -1
+  , 42
+  , 43
+  , -1
+  , 45
+  , -1
+  , 47
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , -1
+  , -1
+  , 60
+  , 61
+  , 62
+  , -1
+  , 64
+  , 65
+  , 66
+  , 67
+  , 68
+  , 69
+  , 70
+  , 71
+  , 72
+  , 73
+  , 74
+  , 75
+  , 76
+  , 77
+  , 78
+  , 79
+  , 80
+  , 81
+  , 82
+  , 83
+  , 84
+  , 85
+  , 86
+  , 87
+  , 88
+  , 89
+  , 90
+  , -1
+  , 92
+  , -1
+  , 94
+  , 95
+  , 96
+  , 97
+  , 98
+  , 99
+  , 100
+  , 101
+  , 102
+  , 103
+  , 104
+  , 105
+  , 106
+  , 107
+  , 108
+  , 109
+  , 110
+  , 111
+  , 112
+  , 113
+  , 114
+  , 115
+  , 116
+  , 117
+  , 118
+  , 119
+  , 120
+  , 121
+  , 122
+  , -1
+  , -1
+  , -1
+  , 126
+  , 127
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , -1
+  , -1
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 9
+  , 10
+  , -1
+  , -1
+  , 13
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 32
+  , 33
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 39
+  , 40
+  , 41
+  , -1
+  , -1
+  , 44
+  , 45
+  , 46
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 58
+  , 59
+  , -1
+  , -1
+  , -1
+  , 63
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 91
+  , -1
+  , 93
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 123
+  , 124
+  , 125
+  , -1
+  , -1
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 0
+  , 1
+  , 2
+  , 3
+  , 4
+  , 5
+  , 6
+  , 7
+  , 8
+  , 9
+  , 10
+  , 11
+  , 12
+  , 13
+  , 14
+  , 15
+  , 16
+  , 17
+  , 18
+  , 19
+  , 20
+  , 21
+  , 22
+  , 23
+  , 24
+  , 25
+  , 26
+  , 27
+  , 28
+  , 29
+  , 30
+  , 31
+  , 32
+  , 33
+  , 34
+  , 35
+  , 36
+  , 37
+  , 38
+  , 39
+  , 40
+  , 41
+  , 42
+  , 43
+  , 44
+  , 45
+  , 46
+  , 47
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , 58
+  , 59
+  , 60
+  , 61
+  , 62
+  , 63
+  , 64
+  , 65
+  , 66
+  , 67
+  , 68
+  , 69
+  , 70
+  , 71
+  , 72
+  , 73
+  , 74
+  , 75
+  , 76
+  , 77
+  , 78
+  , 79
+  , 80
+  , 81
+  , 82
+  , 83
+  , 84
+  , 85
+  , 86
+  , 87
+  , 88
+  , 89
+  , 90
+  , 91
+  , 92
+  , 93
+  , 94
+  , 95
+  , 96
+  , 97
+  , 98
+  , 99
+  , 100
+  , 101
+  , 102
+  , 103
+  , 104
+  , 105
+  , 106
+  , 107
+  , 108
+  , 109
+  , 110
+  , 111
+  , 112
+  , 113
+  , 114
+  , 115
+  , 116
+  , 117
+  , 118
+  , 119
+  , 120
+  , 121
+  , 122
+  , 123
+  , 124
+  , 125
+  , 126
+  , 127
+  , -1
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 0
+  , 1
+  , 2
+  , 3
+  , 4
+  , 5
+  , 6
+  , 7
+  , 8
+  , -1
+  , -1
+  , 11
+  , 12
+  , -1
+  , 14
+  , 15
+  , 16
+  , 17
+  , 18
+  , 19
+  , 20
+  , 21
+  , 22
+  , 23
+  , 24
+  , 25
+  , 26
+  , 27
+  , 28
+  , 29
+  , 30
+  , 31
+  , -1
+  , -1
+  , 34
+  , 35
+  , 36
+  , 37
+  , 38
+  , 39
+  , -1
+  , -1
+  , 42
+  , 43
+  , -1
+  , 45
+  , -1
+  , 47
+  , 48
+  , 49
+  , 50
+  , 51
+  , 52
+  , 53
+  , 54
+  , 55
+  , 56
+  , 57
+  , -1
+  , -1
+  , 60
+  , 61
+  , 62
+  , -1
+  , 64
+  , 65
+  , 66
+  , 67
+  , 68
+  , 69
+  , 70
+  , 71
+  , 72
+  , 73
+  , 74
+  , 75
+  , 76
+  , 77
+  , 78
+  , 79
+  , 80
+  , 81
+  , 82
+  , 83
+  , 84
+  , 85
+  , 86
+  , 87
+  , 88
+  , 89
+  , 90
+  , -1
+  , 92
+  , -1
+  , 94
+  , 95
+  , 96
+  , 97
+  , 98
+  , 99
+  , 100
+  , 101
+  , 102
+  , 103
+  , 104
+  , 105
+  , 106
+  , 107
+  , 108
+  , 109
+  , 110
+  , 111
+  , 112
+  , 113
+  , 114
+  , 115
+  , 116
+  , 117
+  , 118
+  , 119
+  , 120
+  , 121
+  , 122
+  , -1
+  , -1
+  , -1
+  , 126
+  , 127
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 9
+  , 10
+  , -1
+  , -1
+  , 13
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 32
+  , 33
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 39
+  , 40
+  , 41
+  , -1
+  , -1
+  , 44
+  , -1
+  , 46
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 58
+  , 59
+  , -1
+  , -1
+  , -1
+  , 63
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 91
+  , -1
+  , 93
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 123
+  , 124
+  , 125
+  , -1
+  , -1
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 128
+  , 129
+  , 130
+  , 131
+  , 132
+  , 133
+  , 134
+  , 135
+  , 136
+  , 137
+  , 138
+  , 139
+  , 140
+  , 141
+  , 142
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  , 143
+  , 144
+  , 145
+  , 146
+  , 147
+  , 148
+  , 149
+  , 150
+  , 151
+  , 152
+  , 153
+  , 154
+  , 155
+  , 156
+  , 157
+  , 158
+  , 159
+  , 160
+  , 161
+  , 162
+  , 163
+  , 164
+  , 165
+  , 166
+  , 167
+  , 168
+  , 169
+  , 170
+  , 171
+  , 172
+  , 173
+  , 174
+  , 175
+  , 176
+  , 177
+  , 178
+  , 179
+  , 180
+  , 181
+  , 182
+  , 183
+  , 184
+  , 185
+  , 186
+  , 187
+  , 188
+  , 189
+  , 190
+  , 191
+  , 192
+  , 193
+  , 194
+  , 195
+  , 196
+  , 197
+  , 198
+  , 199
+  , 200
+  , 201
+  , 202
+  , 203
+  , 204
+  , 205
+  , 206
+  , 207
+  , 208
+  , 209
+  , 210
+  , 211
+  , 212
+  , 213
+  , 214
+  , 215
+  , 216
+  , 217
+  , 218
+  , 219
+  , 220
+  , 221
+  , 222
+  , 223
+  , 224
+  , 225
+  , 226
+  , 227
+  , 228
+  , 229
+  , 230
+  , 231
+  , 232
+  , 233
+  , 234
+  , 235
+  , 236
+  , 237
+  , 238
+  , 239
+  , 240
+  , 241
+  , 242
+  , 243
+  , 244
+  , 245
+  , 246
+  , 247
+  , 248
+  , 249
+  , 250
+  , 251
+  , 252
+  , 253
+  , 254
+  , 255
+  ]
+
+alex_deflt :: Array Int Int
+alex_deflt = listArray (0 :: Int, 101)
+  [ -1
+  , -1
+  , 47
+  , 47
+  , 95
+  , 95
+  , -1
+  , -1
+  , -1
+  , 10
+  , 11
+  , 31
+  , 10
+  , 11
+  , 31
+  , -1
+  , -1
+  , 82
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 11
+  , 31
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 31
+  , 31
+  , 33
+  , 34
+  , 43
+  , 33
+  , 34
+  , 43
+  , 34
+  , 43
+  , -1
+  , -1
+  , 43
+  , 43
+  , -1
+  , -1
+  , -1
+  , 95
+  , 48
+  , 48
+  , -1
+  , -1
+  , 48
+  , 55
+  , 56
+  , 48
+  , 55
+  , 56
+  , -1
+  , 60
+  , 60
+  , 60
+  , -1
+  , -1
+  , 60
+  , 67
+  , 68
+  , 60
+  , 67
+  , 68
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , -1
+  , 82
+  , 82
+  , -1
+  , -1
+  , 82
+  , 91
+  , 82
+  , 91
+  , 92
+  , 82
+  , 91
+  , 92
+  , -1
+  , 95
+  , 95
+  , 95
+  , -1
+  , 100
+  , 47
+  , 100
+  ]
+
+alex_accept = listArray (0 :: Int, 101)
+  [ AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAcc 14
+  , AlexAcc 13
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAcc 12
+  , AlexAcc 11
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAcc 10
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAcc 9
+  , AlexAccNone
+  , AlexAcc 8
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccSkip
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccSkip
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccSkip
+  , AlexAcc 7
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAcc 6
+  , AlexAccNone
+  , AlexAcc 5
+  , AlexAcc 4
+  , AlexAcc 3
+  , AlexAcc 2
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAcc 1
+  , AlexAcc 0
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  , AlexAccNone
+  ]
+
+alex_actions = array (0 :: Int, 15)
+  [ (14,alex_action_7)
+  , (13,alex_action_7)
+  , (12,alex_action_4)
+  , (11,alex_action_4)
+  , (10,alex_action_8)
+  , (9,alex_action_9)
+  , (8,alex_action_10)
+  , (7,alex_action_3)
+  , (6,alex_action_4)
+  , (5,alex_action_5)
+  , (4,alex_action_5)
+  , (3,alex_action_5)
+  , (2,alex_action_5)
+  , (1,alex_action_6)
+  , (0,alex_action_6)
+  ]
+
+alex_action_3 = tok (eitherResIdent TV)
+alex_action_4 = tok (eitherResIdent T_Bytes)
+alex_action_5 = tok (eitherResIdent T_Function)
+alex_action_6 = tok (eitherResIdent T_LabelId)
+alex_action_7 = tok (eitherResIdent T_AlphaIndex)
+alex_action_8 = tok (eitherResIdent T_MetaId)
+alex_action_9 = tok (eitherResIdent T_MetaFunctionName)
+alex_action_10 = tok (eitherResIdent TV)
+
+#define ALEX_NOPRED 1
+-- -----------------------------------------------------------------------------
+-- 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
+
+#ifdef ALEX_GHC
+#  define ILIT(n) n#
+#  define IBOX(n) (I# (n))
+#  define FAST_INT Int#
+-- 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
+#  define PLUS(n,m) (n +# m)
+#  define MINUS(n,m) (n -# m)
+#  define TIMES(n,m) (n *# m)
+#  define NEGATE(n) (negateInt# (n))
+#  define IF_GHC(x) (x)
+#else
+#  define ILIT(n) (n)
+#  define IBOX(n) (n)
+#  define FAST_INT Int
+#  define GTE(n,m) (n >= m)
+#  define EQ(n,m) (n == m)
+#  define PLUS(n,m) (n + m)
+#  define MINUS(n,m) (n - m)
+#  define TIMES(n,m) (n * m)
+#  define NEGATE(n) (negate (n))
+#  define IF_GHC(x)
+#endif
+
+#ifdef ALEX_GHC
+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 :: AlexAddr -> Int# -> Int#
+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
+#if __GLASGOW_HASKELL__ >= 901
+  int16ToInt#
+#endif
+    (indexInt16OffAddr# arr off)
+#endif
+#else
+alexIndexInt16OffAddr arr off = arr ! off
+#endif
+
+#ifdef ALEX_GHC
+{-# INLINE alexIndexInt32OffAddr #-}
+alexIndexInt32OffAddr :: AlexAddr -> Int# -> Int#
+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
+#if __GLASGOW_HASKELL__ >= 901
+  int32ToInt#
+#endif
+    (indexInt32OffAddr# arr off)
+#endif
+#else
+alexIndexInt32OffAddr arr off = arr ! off
+#endif
+
+#ifdef ALEX_GHC
+
+#if __GLASGOW_HASKELL__ < 503
+quickIndex arr i = arr ! i
+#else
+-- GHC >= 503, unsafeAt is available from Data.Array.Base.
+quickIndex = unsafeAt
+#endif
+#else
+quickIndex arr i = arr ! i
+#endif
+
+-- -----------------------------------------------------------------------------
+-- Main lexing routines
+
+data AlexReturn a
+  = AlexEOF
+  | AlexError  !AlexInput
+  | AlexSkip   !AlexInput !Int
+  | AlexToken  !AlexInput !Int a
+
+-- alexScan :: AlexInput -> StartCode -> AlexReturn a
+alexScan input__ IBOX(sc)
+  = alexScanUser undefined input__ IBOX(sc)
+
+alexScanUser user__ input__ IBOX(sc)
+  = case alex_scan_tkn user__ input__ ILIT(0) input__ sc AlexNone of
+  (AlexNone, input__') ->
+    case alexGetByte input__ of
+      Nothing ->
+#ifdef ALEX_DEBUG
+                                   trace ("End of input.") $
+#endif
+                                   AlexEOF
+      Just _ ->
+#ifdef ALEX_DEBUG
+                                   trace ("Error.") $
+#endif
+                                   AlexError input__'
+
+  (AlexLastSkip input__'' len, _) ->
+#ifdef ALEX_DEBUG
+    trace ("Skipping.") $
+#endif
+    AlexSkip input__'' len
+
+  (AlexLastAcc k input__''' len, _) ->
+#ifdef ALEX_DEBUG
+    trace ("Accept.") $
+#endif
+    AlexToken input__''' len (alex_actions ! 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` IBOX(s)))
+  in
+  new_acc `seq`
+  case alexGetByte input__ of
+     Nothing -> (new_acc, input__)
+     Just (c, new_input) ->
+#ifdef ALEX_DEBUG
+      trace ("State: " ++ show IBOX(s) ++ ", char: " ++ show c) $
+#endif
+      case fromIntegral c of { IBOX(ord_c) ->
+        let
+                base   = alexIndexInt32OffAddr alex_base s
+                offset = PLUS(base,ord_c)
+
+                new_s = if GTE(offset,ILIT(0))
+                          && let check  = alexIndexInt16OffAddr alex_check offset
+                             in  EQ(check,ord_c)
+                          then alexIndexInt16OffAddr alex_table offset
+                          else alexIndexInt16OffAddr alex_deflt s
+        in
+        case new_s of
+            ILIT(-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
+#ifdef ALEX_LATIN1
+                   PLUS(len,ILIT(1))
+                   -- issue 119: in the latin1 encoding, *each* byte is one character
+#else
+                   (if c < 0x80 || c >= 0xC0 then PLUS(len,ILIT(1)) else len)
+                   -- note that the length is increased ONLY if this is the 1st byte in a char encoding)
+#endif
+                   new_input new_s new_acc
+      }
+  where
+        check_accs (AlexAccNone) = last_acc
+        check_accs (AlexAcc a  ) = AlexLastAcc a input__ IBOX(len)
+        check_accs (AlexAccSkip) = AlexLastSkip  input__ IBOX(len)
+#ifndef ALEX_NOPRED
+        check_accs (AlexAccPred a predx rest)
+           | predx user__ orig_input IBOX(len) input__
+           = AlexLastAcc a input__ IBOX(len)
+           | otherwise
+           = check_accs rest
+        check_accs (AlexAccSkipPred predx rest)
+           | predx user__ orig_input IBOX(len) input__
+           = AlexLastSkip input__ IBOX(len)
+           | otherwise
+           = check_accs rest
+#endif
+
+data AlexLastAcc
+  = AlexNone
+  | AlexLastAcc !Int !AlexInput !Int
+  | AlexLastSkip     !AlexInput !Int
+
+data AlexAcc user
+  = AlexAccNone
+  | AlexAcc Int
+  | AlexAccSkip
+#ifndef ALEX_NOPRED
+  | AlexAccPred Int (AlexAccPred user) (AlexAcc user)
+  | AlexAccSkipPred (AlexAccPred user) (AlexAcc user)
+
+type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool
+
+-- -----------------------------------------------------------------------------
+-- Predicates on a rule
+
+alexAndPred p1 p2 user__ in1 len in2
+  = p1 user__ in1 len in2 && p2 user__ in1 len in2
+
+--alexPrevCharIsPred :: Char -> AlexAccPred _
+alexPrevCharIs c _ input__ _ _ = c == alexInputPrevChar input__
+
+alexPrevCharMatches f _ input__ _ _ = f (alexInputPrevChar input__)
+
+--alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _
+alexPrevCharIsOneOf arr _ input__ _ _ = arr ! alexInputPrevChar input__
+
+--alexRightContext :: Int -> AlexAccPred _
+alexRightContext IBOX(sc) user__ _ _ input__ =
+     case alex_scan_tkn user__ input__ ILIT(0) input__ sc AlexNone of
+          (AlexNone, _) -> False
+          _ -> True
+        -- TODO: there's no need to find the longest
+        -- match when checking the right context, just
+        -- the first match will do.
+#endif
+{-# LINE 76 "Lex.x" #-}
+-- | Create a token with position.
+tok :: (String -> Tok) -> (Posn -> String -> Token)
+tok f p = PT p . f
+
+-- | Token without position.
+data Tok
+  = TK {-# UNPACK #-} !TokSymbol  -- ^ Reserved word or symbol.
+  | TL !String                    -- ^ String literal.
+  | TI !String                    -- ^ Integer literal.
+  | TV !String                    -- ^ Identifier.
+  | TD !String                    -- ^ Float literal.
+  | TC !String                    -- ^ Character literal.
+  | T_Bytes !String
+  | T_Function !String
+  | T_LabelId !String
+  | T_AlphaIndex !String
+  | T_MetaId !String
+  | T_MetaFunctionName !String
+  deriving (Eq, Show, Ord)
+
+-- | Smart constructor for 'Tok' for the sake of backwards compatibility.
+pattern TS :: String -> Int -> Tok
+pattern TS t i = TK (TokSymbol t i)
+
+-- | Keyword or symbol tokens have a unique ID.
+data TokSymbol = TokSymbol
+  { tsText :: String
+      -- ^ Keyword or symbol text.
+  , tsID   :: !Int
+      -- ^ Unique ID.
+  } deriving (Show)
+
+-- | Keyword/symbol equality is determined by the unique ID.
+instance Eq  TokSymbol where (==)    = (==)    `on` tsID
+
+-- | Keyword/symbol ordering is determined by the unique ID.
+instance Ord TokSymbol where compare = compare `on` tsID
+
+-- | Token with position.
+data Token
+  = PT  Posn Tok
+  | Err Posn
+  deriving (Eq, Show, Ord)
+
+-- | Pretty print a position.
+printPosn :: Posn -> String
+printPosn (Pn _ l c) = "line " ++ show l ++ ", column " ++ show c
+
+-- | Pretty print the position of the first token in the list.
+tokenPos :: [Token] -> String
+tokenPos (t:_) = printPosn (tokenPosn t)
+tokenPos []    = "end of file"
+
+-- | Get the position of a token.
+tokenPosn :: Token -> Posn
+tokenPosn (PT p _) = p
+tokenPosn (Err p)  = p
+
+-- | Get line and column of a token.
+tokenLineCol :: Token -> (Int, Int)
+tokenLineCol = posLineCol . tokenPosn
+
+-- | Get line and column of a position.
+posLineCol :: Posn -> (Int, Int)
+posLineCol (Pn _ l c) = (l,c)
+
+-- | Convert a token into "position token" form.
+mkPosToken :: Token -> ((Int, Int), String)
+mkPosToken t = (tokenLineCol t, tokenText t)
+
+-- | Convert a token to its text.
+tokenText :: Token -> String
+tokenText t = case t of
+  PT _ (TS s _) -> s
+  PT _ (TL s)   -> show s
+  PT _ (TI s)   -> s
+  PT _ (TV s)   -> s
+  PT _ (TD s)   -> s
+  PT _ (TC s)   -> s
+  Err _         -> "#error"
+  PT _ (T_Bytes s) -> s
+  PT _ (T_Function s) -> s
+  PT _ (T_LabelId s) -> s
+  PT _ (T_AlphaIndex s) -> s
+  PT _ (T_MetaId s) -> s
+  PT _ (T_MetaFunctionName s) -> s
+
+-- | Convert a token to a string.
+prToken :: Token -> String
+prToken t = tokenText t
+
+-- | Finite map from text to token organized as binary search tree.
+data BTree
+  = N -- ^ Nil (leaf).
+  | B String Tok BTree BTree
+      -- ^ Binary node.
+  deriving (Show)
+
+-- | Convert potential keyword into token or use fallback conversion.
+eitherResIdent :: (String -> Tok) -> String -> Tok
+eitherResIdent tv s = treeFind resWords
+  where
+  treeFind N = tv s
+  treeFind (B a t left right) =
+    case compare s a of
+      LT -> treeFind left
+      GT -> treeFind right
+      EQ -> t
+
+-- | The keywords and symbols of the language organized as binary search tree.
+resWords :: BTree
+resWords =
+  b "\958" 11
+    (b "}" 6
+       (b "," 3 (b ")" 2 (b "(" 1 N N) N) (b "{" 5 (b "." 4 N N) N))
+       (b "\955" 9 (b "\934" 8 (b "\916" 7 N N) N) (b "\957" 10 N N)))
+    (b "\8709" 16
+       (b "\966" 14 (b "\963" 13 (b "\961" 12 N N) N) (b "\8614" 15 N N))
+       (b "\10215" 19
+          (b "\10214" 18 (b "\8869" 17 N N) N) (b "\10509" 20 N N)))
+  where
+  b s n = B bs (TS bs n)
+    where
+    bs = s
+
+-- | Unquote string literal.
+unescapeInitTail :: String -> String
+unescapeInitTail = id . unesc . tail . id
+  where
+  unesc s = case s of
+    '\\':c:cs | elem c ['\"', '\\', '\''] -> c : unesc cs
+    '\\':'n':cs  -> '\n' : unesc cs
+    '\\':'t':cs  -> '\t' : unesc cs
+    '\\':'r':cs  -> '\r' : unesc cs
+    '\\':'f':cs  -> '\f' : unesc cs
+    '"':[]       -> []
+    c:cs         -> c : unesc cs
+    _            -> []
+
+-------------------------------------------------------------------
+-- Alex wrapper code.
+-- A modified "posn" wrapper.
+-------------------------------------------------------------------
+
+data Posn = Pn !Int !Int !Int
+  deriving (Eq, Show, Ord)
+
+alexStartPos :: Posn
+alexStartPos = Pn 0 1 1
+
+alexMove :: Posn -> Char -> Posn
+alexMove (Pn a l c) '\t' = Pn (a+1)  l     (((c+7) `div` 8)*8+1)
+alexMove (Pn a l c) '\n' = Pn (a+1) (l+1)   1
+alexMove (Pn a l c) _    = Pn (a+1)  l     (c+1)
+
+type Byte = Word8
+
+type AlexInput = (Posn,     -- current position,
+                  Char,     -- previous char
+                  [Byte],   -- pending bytes on the current char
+                  String)   -- current input string
+
+tokens :: String -> [Token]
+tokens str = go (alexStartPos, '\n', [], str)
+    where
+      go :: AlexInput -> [Token]
+      go inp@(pos, _, _, str) =
+               case alexScan inp 0 of
+                AlexEOF                   -> []
+                AlexError (pos, _, _, _)  -> [Err pos]
+                AlexSkip  inp' len        -> go inp'
+                AlexToken inp' len act    -> act pos (take len str) : (go inp')
+
+alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)
+alexGetByte (p, c, (b:bs), s) = Just (b, (p, c, bs, s))
+alexGetByte (p, _, [], s) =
+  case s of
+    []  -> Nothing
+    (c:s) ->
+             let p'     = alexMove p c
+                 (b:bs) = utf8Encode c
+              in p' `seq` Just (b, (p', c, bs, s))
+
+alexInputPrevChar :: AlexInput -> Char
+alexInputPrevChar (p, c, bs, s) = c
+
+-- | 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
+                        ]
diff --git a/src/Language/EO/Phi/Syntax/Par.hs b/src/Language/EO/Phi/Syntax/Par.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/EO/Phi/Syntax/Par.hs
@@ -0,0 +1,1429 @@
+{-# OPTIONS_GHC -w #-}
+{-# OPTIONS_GHC -fno-warn-incomplete-patterns -fno-warn-overlapping-patterns #-}
+{-# LANGUAGE PatternSynonyms #-}
+
+module Language.EO.Phi.Syntax.Par
+  ( happyError
+  , myLexer
+  , pProgram
+  , pObject
+  , pBinding
+  , pListBinding
+  , pAttribute
+  , pRuleAttribute
+  , pPeeledObject
+  , pObjectHead
+  , pObjectAction
+  , pListObjectAction
+  ) where
+
+import Prelude
+
+import qualified Language.EO.Phi.Syntax.Abs
+import Language.EO.Phi.Syntax.Lex
+import qualified Data.Array as Happy_Data_Array
+import qualified Data.Bits as Bits
+import Control.Applicative(Applicative(..))
+import Control.Monad (ap)
+
+-- parser produced by Happy Version 1.20.1.1
+
+data HappyAbsSyn 
+	= HappyTerminal (Token)
+	| HappyErrorToken Prelude.Int
+	| HappyAbsSyn13 (Language.EO.Phi.Syntax.Abs.Bytes)
+	| HappyAbsSyn14 (Language.EO.Phi.Syntax.Abs.Function)
+	| HappyAbsSyn15 (Language.EO.Phi.Syntax.Abs.LabelId)
+	| HappyAbsSyn16 (Language.EO.Phi.Syntax.Abs.AlphaIndex)
+	| HappyAbsSyn17 (Language.EO.Phi.Syntax.Abs.MetaId)
+	| HappyAbsSyn18 (Language.EO.Phi.Syntax.Abs.MetaFunctionName)
+	| HappyAbsSyn19 (Language.EO.Phi.Syntax.Abs.Program)
+	| HappyAbsSyn20 (Language.EO.Phi.Syntax.Abs.Object)
+	| HappyAbsSyn21 (Language.EO.Phi.Syntax.Abs.Binding)
+	| HappyAbsSyn22 ([Language.EO.Phi.Syntax.Abs.Binding])
+	| HappyAbsSyn23 (Language.EO.Phi.Syntax.Abs.Attribute)
+	| HappyAbsSyn24 (Language.EO.Phi.Syntax.Abs.RuleAttribute)
+	| HappyAbsSyn25 (Language.EO.Phi.Syntax.Abs.PeeledObject)
+	| HappyAbsSyn26 (Language.EO.Phi.Syntax.Abs.ObjectHead)
+	| HappyAbsSyn27 (Language.EO.Phi.Syntax.Abs.ObjectAction)
+	| HappyAbsSyn28 ([Language.EO.Phi.Syntax.Abs.ObjectAction])
+
+{- to allow type-synonyms as our monads (likely
+ - with explicitly-specified bind and return)
+ - in Haskell98, it seems that with
+ - /type M a = .../, then /(HappyReduction M)/
+ - is not allowed.  But Happy is a
+ - code-generator that can just substitute it.
+type HappyReduction m = 
+	   Prelude.Int 
+	-> (Token)
+	-> HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> m HappyAbsSyn)
+	-> [HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> m HappyAbsSyn)] 
+	-> HappyStk HappyAbsSyn 
+	-> [(Token)] -> m HappyAbsSyn
+-}
+
+action_0,
+ action_1,
+ action_2,
+ action_3,
+ action_4,
+ action_5,
+ action_6,
+ action_7,
+ action_8,
+ action_9,
+ action_10,
+ action_11,
+ action_12,
+ action_13,
+ action_14,
+ action_15,
+ action_16,
+ action_17,
+ action_18,
+ action_19,
+ action_20,
+ action_21,
+ action_22,
+ action_23,
+ action_24,
+ action_25,
+ action_26,
+ action_27,
+ action_28,
+ action_29,
+ action_30,
+ action_31,
+ action_32,
+ action_33,
+ action_34,
+ action_35,
+ action_36,
+ action_37,
+ action_38,
+ action_39,
+ action_40,
+ action_41,
+ action_42,
+ action_43,
+ action_44,
+ action_45,
+ action_46,
+ action_47,
+ action_48,
+ action_49,
+ action_50,
+ action_51,
+ action_52,
+ action_53,
+ action_54,
+ action_55,
+ action_56,
+ action_57,
+ action_58,
+ action_59,
+ action_60,
+ action_61,
+ action_62,
+ action_63,
+ action_64,
+ action_65,
+ action_66,
+ action_67,
+ action_68,
+ action_69,
+ action_70,
+ action_71,
+ action_72,
+ action_73,
+ action_74,
+ action_75,
+ action_76,
+ action_77,
+ action_78,
+ action_79,
+ action_80,
+ action_81,
+ action_82,
+ action_83,
+ action_84,
+ action_85,
+ action_86,
+ action_87,
+ action_88 :: () => Prelude.Int -> ({-HappyReduction (Err) = -}
+	   Prelude.Int 
+	-> (Token)
+	-> HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> (Err) HappyAbsSyn)
+	-> [HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> (Err) HappyAbsSyn)] 
+	-> HappyStk HappyAbsSyn 
+	-> [(Token)] -> (Err) HappyAbsSyn)
+
+happyReduce_10,
+ happyReduce_11,
+ happyReduce_12,
+ happyReduce_13,
+ happyReduce_14,
+ happyReduce_15,
+ happyReduce_16,
+ happyReduce_17,
+ happyReduce_18,
+ happyReduce_19,
+ happyReduce_20,
+ happyReduce_21,
+ happyReduce_22,
+ happyReduce_23,
+ happyReduce_24,
+ happyReduce_25,
+ happyReduce_26,
+ happyReduce_27,
+ happyReduce_28,
+ happyReduce_29,
+ happyReduce_30,
+ happyReduce_31,
+ happyReduce_32,
+ happyReduce_33,
+ happyReduce_34,
+ happyReduce_35,
+ happyReduce_36,
+ happyReduce_37,
+ happyReduce_38,
+ happyReduce_39,
+ happyReduce_40,
+ happyReduce_41,
+ happyReduce_42,
+ happyReduce_43,
+ happyReduce_44,
+ happyReduce_45,
+ happyReduce_46,
+ happyReduce_47,
+ happyReduce_48,
+ happyReduce_49,
+ happyReduce_50,
+ happyReduce_51,
+ happyReduce_52,
+ happyReduce_53 :: () => ({-HappyReduction (Err) = -}
+	   Prelude.Int 
+	-> (Token)
+	-> HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> (Err) HappyAbsSyn)
+	-> [HappyState (Token) (HappyStk HappyAbsSyn -> [(Token)] -> (Err) HappyAbsSyn)] 
+	-> HappyStk HappyAbsSyn 
+	-> [(Token)] -> (Err) HappyAbsSyn)
+
+happyExpList :: Happy_Data_Array.Array Prelude.Int Prelude.Int
+happyExpList = Happy_Data_Array.listArray (0,196) ([0,0,1,0,0,9216,6168,0,0,237,7,0,30336,896,0,0,49210,1,0,7584,224,0,8192,193,0,0,24720,0,0,144,0,0,18432,0,0,0,0,64,0,0,0,0,0,9,0,0,0,0,0,0,3792,112,0,16384,14343,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7584,224,0,0,0,0,8192,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,1,0,0,4096,0,0,0,8,0,0,0,0,0,0,0,0,32,0,0,36864,0,0,0,0,0,0,0,0,0,0,0,0,0,16384,49211,1,0,0,0,0,0,0,0,0,16384,0,0,46080,7171,0,0,8192,0,0,60672,1792,0,0,32884,3,0,1152,771,0,0,4096,0,0,8192,68,0,36864,24688,0,0,948,28,0,0,0,0,0,4096,0,0,0,0,0,512,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45056,0,0,0,0,0,0,2048,0,0,0,0,0,0,0,1024,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0
+	])
+
+{-# NOINLINE happyExpListPerState #-}
+happyExpListPerState st =
+    token_strs_expected
+  where token_strs = ["error","%dummy","%start_pProgram","%start_pObject","%start_pBinding","%start_pListBinding","%start_pAttribute","%start_pRuleAttribute","%start_pPeeledObject","%start_pObjectHead","%start_pObjectAction","%start_pListObjectAction","Bytes","Function","LabelId","AlphaIndex","MetaId","MetaFunctionName","Program","Object","Binding","ListBinding","Attribute","RuleAttribute","PeeledObject","ObjectHead","ObjectAction","ListObjectAction","'('","')'","','","'.'","'{'","'}'","'\916'","'\934'","'\955'","'\957'","'\958'","'\961'","'\963'","'\966'","'\8614'","'\8709'","'\8869'","'\10214'","'\10215'","'\10509'","L_Bytes","L_Function","L_LabelId","L_AlphaIndex","L_MetaId","L_MetaFunctionName","%eof"]
+        bit_start = st Prelude.* 55
+        bit_end = (st Prelude.+ 1) Prelude.* 55
+        read_bit = readArrayBit happyExpList
+        bits = Prelude.map read_bit [bit_start..bit_end Prelude.- 1]
+        bits_indexed = Prelude.zip bits [0..54]
+        token_strs_expected = Prelude.concatMap f bits_indexed
+        f (Prelude.False, _) = []
+        f (Prelude.True, nr) = [token_strs Prelude.!! nr]
+
+action_0 (33) = happyShift action_55
+action_0 (19) = happyGoto action_54
+action_0 _ = happyFail (happyExpListPerState 0)
+
+action_1 (36) = happyShift action_49
+action_1 (39) = happyShift action_50
+action_1 (45) = happyShift action_51
+action_1 (46) = happyShift action_52
+action_1 (53) = happyShift action_37
+action_1 (54) = happyShift action_53
+action_1 (17) = happyGoto action_46
+action_1 (18) = happyGoto action_47
+action_1 (20) = happyGoto action_48
+action_1 _ = happyFail (happyExpListPerState 1)
+
+action_2 (35) = happyShift action_43
+action_2 (37) = happyShift action_44
+action_2 (38) = happyShift action_31
+action_2 (40) = happyShift action_32
+action_2 (41) = happyShift action_33
+action_2 (42) = happyShift action_34
+action_2 (51) = happyShift action_35
+action_2 (52) = happyShift action_36
+action_2 (53) = happyShift action_37
+action_2 (15) = happyGoto action_24
+action_2 (16) = happyGoto action_25
+action_2 (17) = happyGoto action_39
+action_2 (21) = happyGoto action_45
+action_2 (23) = happyGoto action_42
+action_2 _ = happyFail (happyExpListPerState 2)
+
+action_3 (35) = happyShift action_43
+action_3 (37) = happyShift action_44
+action_3 (38) = happyShift action_31
+action_3 (40) = happyShift action_32
+action_3 (41) = happyShift action_33
+action_3 (42) = happyShift action_34
+action_3 (51) = happyShift action_35
+action_3 (52) = happyShift action_36
+action_3 (53) = happyShift action_37
+action_3 (15) = happyGoto action_24
+action_3 (16) = happyGoto action_25
+action_3 (17) = happyGoto action_39
+action_3 (21) = happyGoto action_40
+action_3 (22) = happyGoto action_41
+action_3 (23) = happyGoto action_42
+action_3 _ = happyReduce_32
+
+action_4 (38) = happyShift action_31
+action_4 (40) = happyShift action_32
+action_4 (41) = happyShift action_33
+action_4 (42) = happyShift action_34
+action_4 (51) = happyShift action_35
+action_4 (52) = happyShift action_36
+action_4 (53) = happyShift action_37
+action_4 (15) = happyGoto action_24
+action_4 (16) = happyGoto action_25
+action_4 (17) = happyGoto action_26
+action_4 (23) = happyGoto action_38
+action_4 _ = happyFail (happyExpListPerState 4)
+
+action_5 (35) = happyShift action_29
+action_5 (37) = happyShift action_30
+action_5 (38) = happyShift action_31
+action_5 (40) = happyShift action_32
+action_5 (41) = happyShift action_33
+action_5 (42) = happyShift action_34
+action_5 (51) = happyShift action_35
+action_5 (52) = happyShift action_36
+action_5 (53) = happyShift action_37
+action_5 (15) = happyGoto action_24
+action_5 (16) = happyGoto action_25
+action_5 (17) = happyGoto action_26
+action_5 (23) = happyGoto action_27
+action_5 (24) = happyGoto action_28
+action_5 _ = happyFail (happyExpListPerState 5)
+
+action_6 (36) = happyShift action_18
+action_6 (39) = happyShift action_19
+action_6 (45) = happyShift action_20
+action_6 (46) = happyShift action_21
+action_6 (25) = happyGoto action_22
+action_6 (26) = happyGoto action_23
+action_6 _ = happyFail (happyExpListPerState 6)
+
+action_7 (36) = happyShift action_18
+action_7 (39) = happyShift action_19
+action_7 (45) = happyShift action_20
+action_7 (46) = happyShift action_21
+action_7 (26) = happyGoto action_17
+action_7 _ = happyFail (happyExpListPerState 7)
+
+action_8 (29) = happyShift action_14
+action_8 (32) = happyShift action_15
+action_8 (27) = happyGoto action_16
+action_8 _ = happyFail (happyExpListPerState 8)
+
+action_9 (29) = happyShift action_14
+action_9 (32) = happyShift action_15
+action_9 (27) = happyGoto action_12
+action_9 (28) = happyGoto action_13
+action_9 _ = happyReduce_52
+
+action_10 (49) = happyShift action_11
+action_10 _ = happyFail (happyExpListPerState 10)
+
+action_11 _ = happyReduce_10
+
+action_12 (29) = happyShift action_14
+action_12 (32) = happyShift action_15
+action_12 (27) = happyGoto action_12
+action_12 (28) = happyGoto action_69
+action_12 _ = happyReduce_52
+
+action_13 (55) = happyAccept
+action_13 _ = happyFail (happyExpListPerState 13)
+
+action_14 (35) = happyShift action_43
+action_14 (37) = happyShift action_44
+action_14 (38) = happyShift action_31
+action_14 (40) = happyShift action_32
+action_14 (41) = happyShift action_33
+action_14 (42) = happyShift action_34
+action_14 (51) = happyShift action_35
+action_14 (52) = happyShift action_36
+action_14 (53) = happyShift action_37
+action_14 (15) = happyGoto action_24
+action_14 (16) = happyGoto action_25
+action_14 (17) = happyGoto action_39
+action_14 (21) = happyGoto action_40
+action_14 (22) = happyGoto action_68
+action_14 (23) = happyGoto action_42
+action_14 _ = happyReduce_32
+
+action_15 (38) = happyShift action_31
+action_15 (40) = happyShift action_32
+action_15 (41) = happyShift action_33
+action_15 (42) = happyShift action_34
+action_15 (51) = happyShift action_35
+action_15 (52) = happyShift action_36
+action_15 (53) = happyShift action_37
+action_15 (15) = happyGoto action_24
+action_15 (16) = happyGoto action_25
+action_15 (17) = happyGoto action_26
+action_15 (23) = happyGoto action_67
+action_15 _ = happyFail (happyExpListPerState 15)
+
+action_16 (55) = happyAccept
+action_16 _ = happyFail (happyExpListPerState 16)
+
+action_17 (55) = happyAccept
+action_17 _ = happyFail (happyExpListPerState 17)
+
+action_18 _ = happyReduce_47
+
+action_19 _ = happyReduce_48
+
+action_20 _ = happyReduce_49
+
+action_21 (35) = happyShift action_43
+action_21 (37) = happyShift action_44
+action_21 (38) = happyShift action_31
+action_21 (40) = happyShift action_32
+action_21 (41) = happyShift action_33
+action_21 (42) = happyShift action_34
+action_21 (51) = happyShift action_35
+action_21 (52) = happyShift action_36
+action_21 (53) = happyShift action_37
+action_21 (15) = happyGoto action_24
+action_21 (16) = happyGoto action_25
+action_21 (17) = happyGoto action_39
+action_21 (21) = happyGoto action_40
+action_21 (22) = happyGoto action_66
+action_21 (23) = happyGoto action_42
+action_21 _ = happyReduce_32
+
+action_22 (55) = happyAccept
+action_22 _ = happyFail (happyExpListPerState 22)
+
+action_23 (29) = happyShift action_14
+action_23 (32) = happyShift action_15
+action_23 (27) = happyGoto action_12
+action_23 (28) = happyGoto action_65
+action_23 _ = happyReduce_52
+
+action_24 _ = happyReduce_39
+
+action_25 _ = happyReduce_40
+
+action_26 _ = happyReduce_41
+
+action_27 _ = happyReduce_42
+
+action_28 (55) = happyAccept
+action_28 _ = happyFail (happyExpListPerState 28)
+
+action_29 _ = happyReduce_43
+
+action_30 _ = happyReduce_44
+
+action_31 _ = happyReduce_38
+
+action_32 _ = happyReduce_36
+
+action_33 _ = happyReduce_37
+
+action_34 _ = happyReduce_35
+
+action_35 _ = happyReduce_12
+
+action_36 _ = happyReduce_13
+
+action_37 _ = happyReduce_14
+
+action_38 (55) = happyAccept
+action_38 _ = happyFail (happyExpListPerState 38)
+
+action_39 (43) = happyReduce_41
+action_39 _ = happyReduce_30
+
+action_40 (31) = happyShift action_64
+action_40 _ = happyReduce_33
+
+action_41 (55) = happyAccept
+action_41 _ = happyFail (happyExpListPerState 41)
+
+action_42 (43) = happyShift action_63
+action_42 _ = happyFail (happyExpListPerState 42)
+
+action_43 (48) = happyShift action_62
+action_43 _ = happyFail (happyExpListPerState 43)
+
+action_44 (48) = happyShift action_61
+action_44 _ = happyFail (happyExpListPerState 44)
+
+action_45 (55) = happyAccept
+action_45 _ = happyFail (happyExpListPerState 45)
+
+action_46 _ = happyReduce_23
+
+action_47 (29) = happyShift action_60
+action_47 _ = happyFail (happyExpListPerState 47)
+
+action_48 (29) = happyShift action_58
+action_48 (32) = happyShift action_59
+action_48 (55) = happyAccept
+action_48 _ = happyFail (happyExpListPerState 48)
+
+action_49 _ = happyReduce_20
+
+action_50 _ = happyReduce_21
+
+action_51 _ = happyReduce_22
+
+action_52 (35) = happyShift action_43
+action_52 (37) = happyShift action_44
+action_52 (38) = happyShift action_31
+action_52 (40) = happyShift action_32
+action_52 (41) = happyShift action_33
+action_52 (42) = happyShift action_34
+action_52 (51) = happyShift action_35
+action_52 (52) = happyShift action_36
+action_52 (53) = happyShift action_37
+action_52 (15) = happyGoto action_24
+action_52 (16) = happyGoto action_25
+action_52 (17) = happyGoto action_39
+action_52 (21) = happyGoto action_40
+action_52 (22) = happyGoto action_57
+action_52 (23) = happyGoto action_42
+action_52 _ = happyReduce_32
+
+action_53 _ = happyReduce_15
+
+action_54 (55) = happyAccept
+action_54 _ = happyFail (happyExpListPerState 54)
+
+action_55 (46) = happyShift action_56
+action_55 _ = happyFail (happyExpListPerState 55)
+
+action_56 (35) = happyShift action_43
+action_56 (37) = happyShift action_44
+action_56 (38) = happyShift action_31
+action_56 (40) = happyShift action_32
+action_56 (41) = happyShift action_33
+action_56 (42) = happyShift action_34
+action_56 (51) = happyShift action_35
+action_56 (52) = happyShift action_36
+action_56 (53) = happyShift action_37
+action_56 (15) = happyGoto action_24
+action_56 (16) = happyGoto action_25
+action_56 (17) = happyGoto action_39
+action_56 (21) = happyGoto action_40
+action_56 (22) = happyGoto action_84
+action_56 (23) = happyGoto action_42
+action_56 _ = happyReduce_32
+
+action_57 (47) = happyShift action_83
+action_57 _ = happyFail (happyExpListPerState 57)
+
+action_58 (35) = happyShift action_43
+action_58 (37) = happyShift action_44
+action_58 (38) = happyShift action_31
+action_58 (40) = happyShift action_32
+action_58 (41) = happyShift action_33
+action_58 (42) = happyShift action_34
+action_58 (51) = happyShift action_35
+action_58 (52) = happyShift action_36
+action_58 (53) = happyShift action_37
+action_58 (15) = happyGoto action_24
+action_58 (16) = happyGoto action_25
+action_58 (17) = happyGoto action_39
+action_58 (21) = happyGoto action_40
+action_58 (22) = happyGoto action_82
+action_58 (23) = happyGoto action_42
+action_58 _ = happyReduce_32
+
+action_59 (38) = happyShift action_31
+action_59 (40) = happyShift action_32
+action_59 (41) = happyShift action_33
+action_59 (42) = happyShift action_34
+action_59 (51) = happyShift action_35
+action_59 (52) = happyShift action_36
+action_59 (53) = happyShift action_37
+action_59 (15) = happyGoto action_24
+action_59 (16) = happyGoto action_25
+action_59 (17) = happyGoto action_26
+action_59 (23) = happyGoto action_81
+action_59 _ = happyFail (happyExpListPerState 59)
+
+action_60 (36) = happyShift action_49
+action_60 (39) = happyShift action_50
+action_60 (45) = happyShift action_51
+action_60 (46) = happyShift action_52
+action_60 (53) = happyShift action_37
+action_60 (54) = happyShift action_53
+action_60 (17) = happyGoto action_46
+action_60 (18) = happyGoto action_47
+action_60 (20) = happyGoto action_80
+action_60 _ = happyFail (happyExpListPerState 60)
+
+action_61 (50) = happyShift action_79
+action_61 (14) = happyGoto action_78
+action_61 _ = happyFail (happyExpListPerState 61)
+
+action_62 (44) = happyShift action_77
+action_62 (49) = happyShift action_11
+action_62 (53) = happyShift action_37
+action_62 (13) = happyGoto action_75
+action_62 (17) = happyGoto action_76
+action_62 _ = happyFail (happyExpListPerState 62)
+
+action_63 (36) = happyShift action_49
+action_63 (39) = happyShift action_50
+action_63 (44) = happyShift action_74
+action_63 (45) = happyShift action_51
+action_63 (46) = happyShift action_52
+action_63 (53) = happyShift action_37
+action_63 (54) = happyShift action_53
+action_63 (17) = happyGoto action_46
+action_63 (18) = happyGoto action_47
+action_63 (20) = happyGoto action_73
+action_63 _ = happyFail (happyExpListPerState 63)
+
+action_64 (35) = happyShift action_43
+action_64 (37) = happyShift action_44
+action_64 (38) = happyShift action_31
+action_64 (40) = happyShift action_32
+action_64 (41) = happyShift action_33
+action_64 (42) = happyShift action_34
+action_64 (51) = happyShift action_35
+action_64 (52) = happyShift action_36
+action_64 (53) = happyShift action_37
+action_64 (15) = happyGoto action_24
+action_64 (16) = happyGoto action_25
+action_64 (17) = happyGoto action_39
+action_64 (21) = happyGoto action_40
+action_64 (22) = happyGoto action_72
+action_64 (23) = happyGoto action_42
+action_64 _ = happyReduce_32
+
+action_65 _ = happyReduce_45
+
+action_66 (47) = happyShift action_71
+action_66 _ = happyFail (happyExpListPerState 66)
+
+action_67 _ = happyReduce_51
+
+action_68 (30) = happyShift action_70
+action_68 _ = happyFail (happyExpListPerState 68)
+
+action_69 _ = happyReduce_53
+
+action_70 _ = happyReduce_50
+
+action_71 _ = happyReduce_46
+
+action_72 _ = happyReduce_34
+
+action_73 (29) = happyShift action_58
+action_73 (32) = happyShift action_59
+action_73 _ = happyReduce_25
+
+action_74 _ = happyReduce_26
+
+action_75 _ = happyReduce_27
+
+action_76 _ = happyReduce_31
+
+action_77 _ = happyReduce_28
+
+action_78 _ = happyReduce_29
+
+action_79 _ = happyReduce_11
+
+action_80 (29) = happyShift action_58
+action_80 (30) = happyShift action_87
+action_80 (32) = happyShift action_59
+action_80 _ = happyFail (happyExpListPerState 80)
+
+action_81 _ = happyReduce_19
+
+action_82 (30) = happyShift action_86
+action_82 _ = happyFail (happyExpListPerState 82)
+
+action_83 _ = happyReduce_17
+
+action_84 (47) = happyShift action_85
+action_84 _ = happyFail (happyExpListPerState 84)
+
+action_85 (34) = happyShift action_88
+action_85 _ = happyFail (happyExpListPerState 85)
+
+action_86 _ = happyReduce_18
+
+action_87 _ = happyReduce_24
+
+action_88 _ = happyReduce_16
+
+happyReduce_10 = happySpecReduce_1  13 happyReduction_10
+happyReduction_10 (HappyTerminal (PT _ (T_Bytes happy_var_1)))
+	 =  HappyAbsSyn13
+		 (Language.EO.Phi.Syntax.Abs.Bytes happy_var_1
+	)
+happyReduction_10 _  = notHappyAtAll 
+
+happyReduce_11 = happySpecReduce_1  14 happyReduction_11
+happyReduction_11 (HappyTerminal (PT _ (T_Function happy_var_1)))
+	 =  HappyAbsSyn14
+		 (Language.EO.Phi.Syntax.Abs.Function happy_var_1
+	)
+happyReduction_11 _  = notHappyAtAll 
+
+happyReduce_12 = happySpecReduce_1  15 happyReduction_12
+happyReduction_12 (HappyTerminal (PT _ (T_LabelId happy_var_1)))
+	 =  HappyAbsSyn15
+		 (Language.EO.Phi.Syntax.Abs.LabelId happy_var_1
+	)
+happyReduction_12 _  = notHappyAtAll 
+
+happyReduce_13 = happySpecReduce_1  16 happyReduction_13
+happyReduction_13 (HappyTerminal (PT _ (T_AlphaIndex happy_var_1)))
+	 =  HappyAbsSyn16
+		 (Language.EO.Phi.Syntax.Abs.AlphaIndex happy_var_1
+	)
+happyReduction_13 _  = notHappyAtAll 
+
+happyReduce_14 = happySpecReduce_1  17 happyReduction_14
+happyReduction_14 (HappyTerminal (PT _ (T_MetaId happy_var_1)))
+	 =  HappyAbsSyn17
+		 (Language.EO.Phi.Syntax.Abs.MetaId happy_var_1
+	)
+happyReduction_14 _  = notHappyAtAll 
+
+happyReduce_15 = happySpecReduce_1  18 happyReduction_15
+happyReduction_15 (HappyTerminal (PT _ (T_MetaFunctionName happy_var_1)))
+	 =  HappyAbsSyn18
+		 (Language.EO.Phi.Syntax.Abs.MetaFunctionName happy_var_1
+	)
+happyReduction_15 _  = notHappyAtAll 
+
+happyReduce_16 = happyReduce 5 19 happyReduction_16
+happyReduction_16 (_ `HappyStk`
+	_ `HappyStk`
+	(HappyAbsSyn22  happy_var_3) `HappyStk`
+	_ `HappyStk`
+	_ `HappyStk`
+	happyRest)
+	 = HappyAbsSyn19
+		 (Language.EO.Phi.Syntax.Abs.Program happy_var_3
+	) `HappyStk` happyRest
+
+happyReduce_17 = happySpecReduce_3  20 happyReduction_17
+happyReduction_17 _
+	(HappyAbsSyn22  happy_var_2)
+	_
+	 =  HappyAbsSyn20
+		 (Language.EO.Phi.Syntax.Abs.Formation happy_var_2
+	)
+happyReduction_17 _ _ _  = notHappyAtAll 
+
+happyReduce_18 = happyReduce 4 20 happyReduction_18
+happyReduction_18 (_ `HappyStk`
+	(HappyAbsSyn22  happy_var_3) `HappyStk`
+	_ `HappyStk`
+	(HappyAbsSyn20  happy_var_1) `HappyStk`
+	happyRest)
+	 = HappyAbsSyn20
+		 (Language.EO.Phi.Syntax.Abs.Application happy_var_1 happy_var_3
+	) `HappyStk` happyRest
+
+happyReduce_19 = happySpecReduce_3  20 happyReduction_19
+happyReduction_19 (HappyAbsSyn23  happy_var_3)
+	_
+	(HappyAbsSyn20  happy_var_1)
+	 =  HappyAbsSyn20
+		 (Language.EO.Phi.Syntax.Abs.ObjectDispatch happy_var_1 happy_var_3
+	)
+happyReduction_19 _ _ _  = notHappyAtAll 
+
+happyReduce_20 = happySpecReduce_1  20 happyReduction_20
+happyReduction_20 _
+	 =  HappyAbsSyn20
+		 (Language.EO.Phi.Syntax.Abs.GlobalObject
+	)
+
+happyReduce_21 = happySpecReduce_1  20 happyReduction_21
+happyReduction_21 _
+	 =  HappyAbsSyn20
+		 (Language.EO.Phi.Syntax.Abs.ThisObject
+	)
+
+happyReduce_22 = happySpecReduce_1  20 happyReduction_22
+happyReduction_22 _
+	 =  HappyAbsSyn20
+		 (Language.EO.Phi.Syntax.Abs.Termination
+	)
+
+happyReduce_23 = happySpecReduce_1  20 happyReduction_23
+happyReduction_23 (HappyAbsSyn17  happy_var_1)
+	 =  HappyAbsSyn20
+		 (Language.EO.Phi.Syntax.Abs.MetaObject happy_var_1
+	)
+happyReduction_23 _  = notHappyAtAll 
+
+happyReduce_24 = happyReduce 4 20 happyReduction_24
+happyReduction_24 (_ `HappyStk`
+	(HappyAbsSyn20  happy_var_3) `HappyStk`
+	_ `HappyStk`
+	(HappyAbsSyn18  happy_var_1) `HappyStk`
+	happyRest)
+	 = HappyAbsSyn20
+		 (Language.EO.Phi.Syntax.Abs.MetaFunction happy_var_1 happy_var_3
+	) `HappyStk` happyRest
+
+happyReduce_25 = happySpecReduce_3  21 happyReduction_25
+happyReduction_25 (HappyAbsSyn20  happy_var_3)
+	_
+	(HappyAbsSyn23  happy_var_1)
+	 =  HappyAbsSyn21
+		 (Language.EO.Phi.Syntax.Abs.AlphaBinding happy_var_1 happy_var_3
+	)
+happyReduction_25 _ _ _  = notHappyAtAll 
+
+happyReduce_26 = happySpecReduce_3  21 happyReduction_26
+happyReduction_26 _
+	_
+	(HappyAbsSyn23  happy_var_1)
+	 =  HappyAbsSyn21
+		 (Language.EO.Phi.Syntax.Abs.EmptyBinding happy_var_1
+	)
+happyReduction_26 _ _ _  = notHappyAtAll 
+
+happyReduce_27 = happySpecReduce_3  21 happyReduction_27
+happyReduction_27 (HappyAbsSyn13  happy_var_3)
+	_
+	_
+	 =  HappyAbsSyn21
+		 (Language.EO.Phi.Syntax.Abs.DeltaBinding happy_var_3
+	)
+happyReduction_27 _ _ _  = notHappyAtAll 
+
+happyReduce_28 = happySpecReduce_3  21 happyReduction_28
+happyReduction_28 _
+	_
+	_
+	 =  HappyAbsSyn21
+		 (Language.EO.Phi.Syntax.Abs.DeltaEmptyBinding
+	)
+
+happyReduce_29 = happySpecReduce_3  21 happyReduction_29
+happyReduction_29 (HappyAbsSyn14  happy_var_3)
+	_
+	_
+	 =  HappyAbsSyn21
+		 (Language.EO.Phi.Syntax.Abs.LambdaBinding happy_var_3
+	)
+happyReduction_29 _ _ _  = notHappyAtAll 
+
+happyReduce_30 = happySpecReduce_1  21 happyReduction_30
+happyReduction_30 (HappyAbsSyn17  happy_var_1)
+	 =  HappyAbsSyn21
+		 (Language.EO.Phi.Syntax.Abs.MetaBindings happy_var_1
+	)
+happyReduction_30 _  = notHappyAtAll 
+
+happyReduce_31 = happySpecReduce_3  21 happyReduction_31
+happyReduction_31 (HappyAbsSyn17  happy_var_3)
+	_
+	_
+	 =  HappyAbsSyn21
+		 (Language.EO.Phi.Syntax.Abs.MetaDeltaBinding happy_var_3
+	)
+happyReduction_31 _ _ _  = notHappyAtAll 
+
+happyReduce_32 = happySpecReduce_0  22 happyReduction_32
+happyReduction_32  =  HappyAbsSyn22
+		 ([]
+	)
+
+happyReduce_33 = happySpecReduce_1  22 happyReduction_33
+happyReduction_33 (HappyAbsSyn21  happy_var_1)
+	 =  HappyAbsSyn22
+		 ((:[]) happy_var_1
+	)
+happyReduction_33 _  = notHappyAtAll 
+
+happyReduce_34 = happySpecReduce_3  22 happyReduction_34
+happyReduction_34 (HappyAbsSyn22  happy_var_3)
+	_
+	(HappyAbsSyn21  happy_var_1)
+	 =  HappyAbsSyn22
+		 ((:) happy_var_1 happy_var_3
+	)
+happyReduction_34 _ _ _  = notHappyAtAll 
+
+happyReduce_35 = happySpecReduce_1  23 happyReduction_35
+happyReduction_35 _
+	 =  HappyAbsSyn23
+		 (Language.EO.Phi.Syntax.Abs.Phi
+	)
+
+happyReduce_36 = happySpecReduce_1  23 happyReduction_36
+happyReduction_36 _
+	 =  HappyAbsSyn23
+		 (Language.EO.Phi.Syntax.Abs.Rho
+	)
+
+happyReduce_37 = happySpecReduce_1  23 happyReduction_37
+happyReduction_37 _
+	 =  HappyAbsSyn23
+		 (Language.EO.Phi.Syntax.Abs.Sigma
+	)
+
+happyReduce_38 = happySpecReduce_1  23 happyReduction_38
+happyReduction_38 _
+	 =  HappyAbsSyn23
+		 (Language.EO.Phi.Syntax.Abs.VTX
+	)
+
+happyReduce_39 = happySpecReduce_1  23 happyReduction_39
+happyReduction_39 (HappyAbsSyn15  happy_var_1)
+	 =  HappyAbsSyn23
+		 (Language.EO.Phi.Syntax.Abs.Label happy_var_1
+	)
+happyReduction_39 _  = notHappyAtAll 
+
+happyReduce_40 = happySpecReduce_1  23 happyReduction_40
+happyReduction_40 (HappyAbsSyn16  happy_var_1)
+	 =  HappyAbsSyn23
+		 (Language.EO.Phi.Syntax.Abs.Alpha happy_var_1
+	)
+happyReduction_40 _  = notHappyAtAll 
+
+happyReduce_41 = happySpecReduce_1  23 happyReduction_41
+happyReduction_41 (HappyAbsSyn17  happy_var_1)
+	 =  HappyAbsSyn23
+		 (Language.EO.Phi.Syntax.Abs.MetaAttr happy_var_1
+	)
+happyReduction_41 _  = notHappyAtAll 
+
+happyReduce_42 = happySpecReduce_1  24 happyReduction_42
+happyReduction_42 (HappyAbsSyn23  happy_var_1)
+	 =  HappyAbsSyn24
+		 (Language.EO.Phi.Syntax.Abs.ObjectAttr happy_var_1
+	)
+happyReduction_42 _  = notHappyAtAll 
+
+happyReduce_43 = happySpecReduce_1  24 happyReduction_43
+happyReduction_43 _
+	 =  HappyAbsSyn24
+		 (Language.EO.Phi.Syntax.Abs.DeltaAttr
+	)
+
+happyReduce_44 = happySpecReduce_1  24 happyReduction_44
+happyReduction_44 _
+	 =  HappyAbsSyn24
+		 (Language.EO.Phi.Syntax.Abs.LambdaAttr
+	)
+
+happyReduce_45 = happySpecReduce_2  25 happyReduction_45
+happyReduction_45 (HappyAbsSyn28  happy_var_2)
+	(HappyAbsSyn26  happy_var_1)
+	 =  HappyAbsSyn25
+		 (Language.EO.Phi.Syntax.Abs.PeeledObject happy_var_1 happy_var_2
+	)
+happyReduction_45 _ _  = notHappyAtAll 
+
+happyReduce_46 = happySpecReduce_3  26 happyReduction_46
+happyReduction_46 _
+	(HappyAbsSyn22  happy_var_2)
+	_
+	 =  HappyAbsSyn26
+		 (Language.EO.Phi.Syntax.Abs.HeadFormation happy_var_2
+	)
+happyReduction_46 _ _ _  = notHappyAtAll 
+
+happyReduce_47 = happySpecReduce_1  26 happyReduction_47
+happyReduction_47 _
+	 =  HappyAbsSyn26
+		 (Language.EO.Phi.Syntax.Abs.HeadGlobal
+	)
+
+happyReduce_48 = happySpecReduce_1  26 happyReduction_48
+happyReduction_48 _
+	 =  HappyAbsSyn26
+		 (Language.EO.Phi.Syntax.Abs.HeadThis
+	)
+
+happyReduce_49 = happySpecReduce_1  26 happyReduction_49
+happyReduction_49 _
+	 =  HappyAbsSyn26
+		 (Language.EO.Phi.Syntax.Abs.HeadTermination
+	)
+
+happyReduce_50 = happySpecReduce_3  27 happyReduction_50
+happyReduction_50 _
+	(HappyAbsSyn22  happy_var_2)
+	_
+	 =  HappyAbsSyn27
+		 (Language.EO.Phi.Syntax.Abs.ActionApplication happy_var_2
+	)
+happyReduction_50 _ _ _  = notHappyAtAll 
+
+happyReduce_51 = happySpecReduce_2  27 happyReduction_51
+happyReduction_51 (HappyAbsSyn23  happy_var_2)
+	_
+	 =  HappyAbsSyn27
+		 (Language.EO.Phi.Syntax.Abs.ActionDispatch happy_var_2
+	)
+happyReduction_51 _ _  = notHappyAtAll 
+
+happyReduce_52 = happySpecReduce_0  28 happyReduction_52
+happyReduction_52  =  HappyAbsSyn28
+		 ([]
+	)
+
+happyReduce_53 = happySpecReduce_2  28 happyReduction_53
+happyReduction_53 (HappyAbsSyn28  happy_var_2)
+	(HappyAbsSyn27  happy_var_1)
+	 =  HappyAbsSyn28
+		 ((:) happy_var_1 happy_var_2
+	)
+happyReduction_53 _ _  = notHappyAtAll 
+
+happyNewToken action sts stk [] =
+	action 55 55 notHappyAtAll (HappyState action) sts stk []
+
+happyNewToken action sts stk (tk:tks) =
+	let cont i = action i i tk (HappyState action) sts stk tks in
+	case tk of {
+	PT _ (TS _ 1) -> cont 29;
+	PT _ (TS _ 2) -> cont 30;
+	PT _ (TS _ 3) -> cont 31;
+	PT _ (TS _ 4) -> cont 32;
+	PT _ (TS _ 5) -> cont 33;
+	PT _ (TS _ 6) -> cont 34;
+	PT _ (TS _ 7) -> cont 35;
+	PT _ (TS _ 8) -> cont 36;
+	PT _ (TS _ 9) -> cont 37;
+	PT _ (TS _ 10) -> cont 38;
+	PT _ (TS _ 11) -> cont 39;
+	PT _ (TS _ 12) -> cont 40;
+	PT _ (TS _ 13) -> cont 41;
+	PT _ (TS _ 14) -> cont 42;
+	PT _ (TS _ 15) -> cont 43;
+	PT _ (TS _ 16) -> cont 44;
+	PT _ (TS _ 17) -> cont 45;
+	PT _ (TS _ 18) -> cont 46;
+	PT _ (TS _ 19) -> cont 47;
+	PT _ (TS _ 20) -> cont 48;
+	PT _ (T_Bytes happy_dollar_dollar) -> cont 49;
+	PT _ (T_Function happy_dollar_dollar) -> cont 50;
+	PT _ (T_LabelId happy_dollar_dollar) -> cont 51;
+	PT _ (T_AlphaIndex happy_dollar_dollar) -> cont 52;
+	PT _ (T_MetaId happy_dollar_dollar) -> cont 53;
+	PT _ (T_MetaFunctionName happy_dollar_dollar) -> cont 54;
+	_ -> happyError' ((tk:tks), [])
+	}
+
+happyError_ explist 55 tk tks = happyError' (tks, explist)
+happyError_ explist _ tk tks = happyError' ((tk:tks), explist)
+
+happyThen :: () => Err a -> (a -> Err b) -> Err b
+happyThen = ((>>=))
+happyReturn :: () => a -> Err a
+happyReturn = (return)
+happyThen1 m k tks = ((>>=)) m (\a -> k a tks)
+happyReturn1 :: () => a -> b -> Err a
+happyReturn1 = \a tks -> (return) a
+happyError' :: () => ([(Token)], [Prelude.String]) -> Err a
+happyError' = (\(tokens, _) -> happyError tokens)
+pProgram tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_0 tks) (\x -> case x of {HappyAbsSyn19 z -> happyReturn z; _other -> notHappyAtAll })
+
+pObject tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_1 tks) (\x -> case x of {HappyAbsSyn20 z -> happyReturn z; _other -> notHappyAtAll })
+
+pBinding tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_2 tks) (\x -> case x of {HappyAbsSyn21 z -> happyReturn z; _other -> notHappyAtAll })
+
+pListBinding tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_3 tks) (\x -> case x of {HappyAbsSyn22 z -> happyReturn z; _other -> notHappyAtAll })
+
+pAttribute tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_4 tks) (\x -> case x of {HappyAbsSyn23 z -> happyReturn z; _other -> notHappyAtAll })
+
+pRuleAttribute tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_5 tks) (\x -> case x of {HappyAbsSyn24 z -> happyReturn z; _other -> notHappyAtAll })
+
+pPeeledObject tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_6 tks) (\x -> case x of {HappyAbsSyn25 z -> happyReturn z; _other -> notHappyAtAll })
+
+pObjectHead tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_7 tks) (\x -> case x of {HappyAbsSyn26 z -> happyReturn z; _other -> notHappyAtAll })
+
+pObjectAction tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_8 tks) (\x -> case x of {HappyAbsSyn27 z -> happyReturn z; _other -> notHappyAtAll })
+
+pListObjectAction tks = happySomeParser where
+ happySomeParser = happyThen (happyParse action_9 tks) (\x -> case x of {HappyAbsSyn28 z -> happyReturn z; _other -> notHappyAtAll })
+
+happySeq = happyDontSeq
+
+
+type Err = Either String
+
+happyError :: [Token] -> Err a
+happyError ts = Left $
+  "syntax error at " ++ tokenPos ts ++
+  case ts of
+    []      -> []
+    [Err _] -> " due to lexer error"
+    t:_     -> " before `" ++ (prToken t) ++ "'"
+
+myLexer :: String -> [Token]
+myLexer = tokens
+{-# LINE 1 "templates/GenericTemplate.hs" #-}
+-- $Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp $
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+data Happy_IntList = HappyCons Prelude.Int Happy_IntList
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+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 ERROR_TOK, 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 (1) tk st sts (_ `HappyStk` ans `HappyStk` _) =
+        happyReturn1 ans
+happyAccept j tk st sts (HappyStk ans _) = 
+         (happyReturn1 ans)
+
+-----------------------------------------------------------------------------
+-- Arrays only: do the next action
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+indexShortOffAddr arr off = arr Happy_Data_Array.! off
+
+
+{-# INLINE happyLt #-}
+happyLt x y = (x Prelude.< y)
+
+
+
+
+
+
+readArrayBit arr bit =
+    Bits.testBit (indexShortOffAddr arr (bit `Prelude.div` 16)) (bit `Prelude.mod` 16)
+
+
+
+
+
+
+-----------------------------------------------------------------------------
+-- HappyState data type (not arrays)
+
+
+
+newtype HappyState b c = HappyState
+        (Prelude.Int ->                    -- token number
+         Prelude.Int ->                    -- token number (yes, again)
+         b ->                           -- token semantic value
+         HappyState b c ->              -- current state
+         [HappyState b c] ->            -- state stack
+         c)
+
+
+
+-----------------------------------------------------------------------------
+-- Shifting a token
+
+happyShift new_state (1) tk st sts stk@(x `HappyStk` _) =
+     let i = (case x of { HappyErrorToken (i) -> i }) in
+--     trace "shifting the error token" $
+     new_state i i tk (HappyState (new_state)) ((st):(sts)) (stk)
+
+happyShift new_state i tk st sts stk =
+     happyNewToken new_state ((st):(sts)) ((HappyTerminal (tk))`HappyStk`stk)
+
+-- happyReduce is specialised for the common cases.
+
+happySpecReduce_0 i fn (1) tk st sts stk
+     = happyFail [] (1) tk st sts stk
+happySpecReduce_0 nt fn j tk st@((HappyState (action))) sts stk
+     = action nt j tk st ((st):(sts)) (fn `HappyStk` stk)
+
+happySpecReduce_1 i fn (1) tk st sts stk
+     = happyFail [] (1) tk st sts stk
+happySpecReduce_1 nt fn j tk _ sts@(((st@(HappyState (action))):(_))) (v1`HappyStk`stk')
+     = let r = fn v1 in
+       happySeq r (action nt j tk st sts (r `HappyStk` stk'))
+
+happySpecReduce_2 i fn (1) tk st sts stk
+     = happyFail [] (1) tk st sts stk
+happySpecReduce_2 nt fn j tk _ ((_):(sts@(((st@(HappyState (action))):(_))))) (v1`HappyStk`v2`HappyStk`stk')
+     = let r = fn v1 v2 in
+       happySeq r (action nt j tk st sts (r `HappyStk` stk'))
+
+happySpecReduce_3 i fn (1) tk st sts stk
+     = happyFail [] (1) tk st sts stk
+happySpecReduce_3 nt fn j tk _ ((_):(((_):(sts@(((st@(HappyState (action))):(_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')
+     = let r = fn v1 v2 v3 in
+       happySeq r (action nt j tk st sts (r `HappyStk` stk'))
+
+happyReduce k i fn (1) tk st sts stk
+     = happyFail [] (1) tk st sts stk
+happyReduce k nt fn j tk st sts stk
+     = case happyDrop (k Prelude.- ((1) :: Prelude.Int)) sts of
+         sts1@(((st1@(HappyState (action))):(_))) ->
+                let r = fn stk in  -- it doesn't hurt to always seq here...
+                happyDoSeq r (action nt j tk st1 sts1 r)
+
+happyMonadReduce k nt fn (1) tk st sts stk
+     = happyFail [] (1) tk st sts stk
+happyMonadReduce k nt fn j tk st sts stk =
+      case happyDrop k ((st):(sts)) of
+        sts1@(((st1@(HappyState (action))):(_))) ->
+          let drop_stk = happyDropStk k stk in
+          happyThen1 (fn stk tk) (\r -> action nt j tk st1 sts1 (r `HappyStk` drop_stk))
+
+happyMonad2Reduce k nt fn (1) tk st sts stk
+     = happyFail [] (1) tk st sts stk
+happyMonad2Reduce k nt fn j tk st sts stk =
+      case happyDrop k ((st):(sts)) of
+        sts1@(((st1@(HappyState (action))):(_))) ->
+         let drop_stk = happyDropStk k stk
+
+
+
+
+
+             _ = nt :: Prelude.Int
+             new_state = action
+
+          in
+          happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))
+
+happyDrop (0) l = l
+happyDrop n ((_):(t)) = happyDrop (n Prelude.- ((1) :: Prelude.Int)) t
+
+happyDropStk (0) l = l
+happyDropStk n (x `HappyStk` xs) = happyDropStk (n Prelude.- ((1)::Prelude.Int)) xs
+
+-----------------------------------------------------------------------------
+-- Moving to a new state after a reduction
+
+
+
+
+
+
+
+
+
+happyGoto action j tk st = action j j tk (HappyState action)
+
+
+-----------------------------------------------------------------------------
+-- Error recovery (ERROR_TOK is the error token)
+
+-- parse error if we are in recovery and we fail again
+happyFail explist (1) tk old_st _ stk@(x `HappyStk` _) =
+     let i = (case x of { HappyErrorToken (i) -> i }) in
+--      trace "failing" $ 
+        happyError_ explist 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  ERROR_TOK tk old_st CONS(HAPPYSTATE(action),sts) 
+                                                (saved_tok `HappyStk` _ `HappyStk` stk) =
+--      trace ("discarding state, depth " ++ show (length stk))  $
+        DO_ACTION(action,ERROR_TOK,tk,sts,(saved_tok`HappyStk`stk))
+-}
+
+-- Enter error recovery: generate an error token,
+--                       save the old token and carry on.
+happyFail explist i tk (HappyState (action)) sts stk =
+--      trace "entering error recovery" $
+        action (1) (1) tk (HappyState (action)) sts ((HappyErrorToken (i)) `HappyStk` stk)
+
+-- Internal happy errors:
+
+notHappyAtAll :: a
+notHappyAtAll = Prelude.error "Internal Happy error\n"
+
+-----------------------------------------------------------------------------
+-- Hack to get the typechecker to accept our action functions
+
+
+
+
+
+
+
+-----------------------------------------------------------------------------
+-- 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 `Prelude.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 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.
diff --git a/src/Language/EO/Phi/Syntax/Skel.hs b/src/Language/EO/Phi/Syntax/Skel.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/EO/Phi/Syntax/Skel.hs
@@ -0,0 +1,97 @@
+-- File generated by the BNF Converter (bnfc 2.9.5).
+
+-- Templates for pattern matching on abstract syntax
+
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+module Language.EO.Phi.Syntax.Skel where
+
+import Prelude (($), Either(..), String, (++), Show, show)
+import qualified Language.EO.Phi.Syntax.Abs
+
+type Err = Either String
+type Result = Err String
+
+failure :: Show a => a -> Result
+failure x = Left $ "Undefined case: " ++ show x
+
+transBytes :: Language.EO.Phi.Syntax.Abs.Bytes -> Result
+transBytes x = case x of
+  Language.EO.Phi.Syntax.Abs.Bytes string -> failure x
+
+transFunction :: Language.EO.Phi.Syntax.Abs.Function -> Result
+transFunction x = case x of
+  Language.EO.Phi.Syntax.Abs.Function string -> failure x
+
+transLabelId :: Language.EO.Phi.Syntax.Abs.LabelId -> Result
+transLabelId x = case x of
+  Language.EO.Phi.Syntax.Abs.LabelId string -> failure x
+
+transAlphaIndex :: Language.EO.Phi.Syntax.Abs.AlphaIndex -> Result
+transAlphaIndex x = case x of
+  Language.EO.Phi.Syntax.Abs.AlphaIndex string -> failure x
+
+transMetaId :: Language.EO.Phi.Syntax.Abs.MetaId -> Result
+transMetaId x = case x of
+  Language.EO.Phi.Syntax.Abs.MetaId string -> failure x
+
+transMetaFunctionName :: Language.EO.Phi.Syntax.Abs.MetaFunctionName -> Result
+transMetaFunctionName x = case x of
+  Language.EO.Phi.Syntax.Abs.MetaFunctionName string -> failure x
+
+transProgram :: Language.EO.Phi.Syntax.Abs.Program -> Result
+transProgram x = case x of
+  Language.EO.Phi.Syntax.Abs.Program bindings -> failure x
+
+transObject :: Language.EO.Phi.Syntax.Abs.Object -> Result
+transObject x = case x of
+  Language.EO.Phi.Syntax.Abs.Formation bindings -> failure x
+  Language.EO.Phi.Syntax.Abs.Application object bindings -> failure x
+  Language.EO.Phi.Syntax.Abs.ObjectDispatch object attribute -> failure x
+  Language.EO.Phi.Syntax.Abs.GlobalObject -> failure x
+  Language.EO.Phi.Syntax.Abs.ThisObject -> failure x
+  Language.EO.Phi.Syntax.Abs.Termination -> failure x
+  Language.EO.Phi.Syntax.Abs.MetaObject metaid -> failure x
+  Language.EO.Phi.Syntax.Abs.MetaFunction metafunctionname object -> failure x
+
+transBinding :: Language.EO.Phi.Syntax.Abs.Binding -> Result
+transBinding x = case x of
+  Language.EO.Phi.Syntax.Abs.AlphaBinding attribute object -> failure x
+  Language.EO.Phi.Syntax.Abs.EmptyBinding attribute -> failure x
+  Language.EO.Phi.Syntax.Abs.DeltaBinding bytes -> failure x
+  Language.EO.Phi.Syntax.Abs.DeltaEmptyBinding -> failure x
+  Language.EO.Phi.Syntax.Abs.LambdaBinding function -> failure x
+  Language.EO.Phi.Syntax.Abs.MetaBindings metaid -> failure x
+  Language.EO.Phi.Syntax.Abs.MetaDeltaBinding metaid -> failure x
+
+transAttribute :: Language.EO.Phi.Syntax.Abs.Attribute -> Result
+transAttribute x = case x of
+  Language.EO.Phi.Syntax.Abs.Phi -> failure x
+  Language.EO.Phi.Syntax.Abs.Rho -> failure x
+  Language.EO.Phi.Syntax.Abs.Sigma -> failure x
+  Language.EO.Phi.Syntax.Abs.VTX -> failure x
+  Language.EO.Phi.Syntax.Abs.Label labelid -> failure x
+  Language.EO.Phi.Syntax.Abs.Alpha alphaindex -> failure x
+  Language.EO.Phi.Syntax.Abs.MetaAttr metaid -> failure x
+
+transRuleAttribute :: Language.EO.Phi.Syntax.Abs.RuleAttribute -> Result
+transRuleAttribute x = case x of
+  Language.EO.Phi.Syntax.Abs.ObjectAttr attribute -> failure x
+  Language.EO.Phi.Syntax.Abs.DeltaAttr -> failure x
+  Language.EO.Phi.Syntax.Abs.LambdaAttr -> failure x
+
+transPeeledObject :: Language.EO.Phi.Syntax.Abs.PeeledObject -> Result
+transPeeledObject x = case x of
+  Language.EO.Phi.Syntax.Abs.PeeledObject objecthead objectactions -> failure x
+
+transObjectHead :: Language.EO.Phi.Syntax.Abs.ObjectHead -> Result
+transObjectHead x = case x of
+  Language.EO.Phi.Syntax.Abs.HeadFormation bindings -> failure x
+  Language.EO.Phi.Syntax.Abs.HeadGlobal -> failure x
+  Language.EO.Phi.Syntax.Abs.HeadThis -> failure x
+  Language.EO.Phi.Syntax.Abs.HeadTermination -> failure x
+
+transObjectAction :: Language.EO.Phi.Syntax.Abs.ObjectAction -> Result
+transObjectAction x = case x of
+  Language.EO.Phi.Syntax.Abs.ActionApplication bindings -> failure x
+  Language.EO.Phi.Syntax.Abs.ActionDispatch attribute -> failure x
diff --git a/test/Language/EO/Phi/DataizeSpec.hs b/test/Language/EO/Phi/DataizeSpec.hs
--- a/test/Language/EO/Phi/DataizeSpec.hs
+++ b/test/Language/EO/Phi/DataizeSpec.hs
@@ -9,10 +9,13 @@
 
 import Language.EO.Phi qualified as Phi
 import Language.EO.Phi.Dataize (dataizeRecursively)
-import Language.EO.Phi.Rules.Common (defaultContext)
+import Language.EO.Phi.Rules.Common (defaultContext, equalObject)
 import Language.EO.Phi.Rules.Yaml (convertRuleNamed, parseRuleSetFromFile, rules)
-import Test.EO.Phi (DataizeTest (..), DataizeTestGroup (..), dataizationTests)
+import Test.EO.Phi (DataizationResult (Bytes, Object), DataizeTest (..), DataizeTestGroup (..), dataizationTests)
 
+shouldDataizeTo :: Either Phi.Object Phi.Bytes -> Either Phi.Object Phi.Bytes -> Expectation
+shouldDataizeTo lhs = flip shouldSatisfy $ either (either equalObject (const (const False)) lhs) (either (const (const False)) (==) lhs)
+
 spec :: Spec
 spec = do
   DataizeTestGroup{..} <- runIO (dataizationTests "test/eo/phi/dataization.yaml")
@@ -22,7 +25,11 @@
     forM_ tests $
       \test -> do
         let inputObj = progToObj test.input
-        it test.name $ dataizeRecursively (defaultContext rules inputObj) inputObj `shouldBe` Right test.output
+        let expectedResult = case test.output of
+              Object obj -> Left obj
+              Bytes bytes -> Right bytes
+        it test.name $
+          dataizeRecursively (defaultContext rules inputObj) inputObj `shouldDataizeTo` expectedResult
 
 progToObj :: Phi.Program -> Phi.Object
 progToObj (Phi.Program bindings) = Phi.Formation bindings
diff --git a/test/Language/EO/Rules/PhiPaperSpec.hs b/test/Language/EO/Rules/PhiPaperSpec.hs
--- a/test/Language/EO/Rules/PhiPaperSpec.hs
+++ b/test/Language/EO/Rules/PhiPaperSpec.hs
@@ -86,7 +86,7 @@
         arbitraryBindings = List.nubBy sameAttr <$> listOf arbitraryBinding
         arbitraryAlphaLabelBinding =
           resize (n `div` 2) $
-            AlphaBinding <$> (Label <$> arbitrary) <*> arbitrary
+            (AlphaBinding . Label <$> arbitrary) <*> arbitrary
         arbitraryAlphaLabelBindings = List.nubBy sameAttr <$> listOf arbitraryAlphaLabelBinding
     if n > 0
       then
diff --git a/test/Language/EO/YamlSpec.hs b/test/Language/EO/YamlSpec.hs
--- a/test/Language/EO/YamlSpec.hs
+++ b/test/Language/EO/YamlSpec.hs
@@ -22,4 +22,4 @@
                 resultOneStep = applyOneRule (defaultContext [rule'] ruleTest.input) ruleTest.input
                 expected = ruleTest.output
                 sameObjs objs1 objs2 = and ((length objs1 == length objs2) : zipWith equalObject objs2 objs1)
-             in (map snd resultOneStep) `shouldSatisfy` sameObjs expected
+             in map snd resultOneStep `shouldSatisfy` sameObjs expected
diff --git a/test/Test/EO/Phi.hs b/test/Test/EO/Phi.hs
--- a/test/Test/EO/Phi.hs
+++ b/test/Test/EO/Phi.hs
@@ -6,18 +6,19 @@
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE StandaloneDeriving #-}
 {-# OPTIONS_GHC -Wno-orphans #-}
+{-# OPTIONS_GHC -Wno-partial-fields #-}
 
 module Test.EO.Phi where
 
 import Control.Monad (forM)
-import Data.Aeson (FromJSON (..))
+import Data.Aeson (FromJSON (..), SumEncoding (UntaggedValue), defaultOptions, genericParseJSON, sumEncoding)
 import Data.Yaml qualified as Yaml
 import GHC.Generics (Generic)
 import System.Directory (listDirectory)
 import System.FilePath ((</>))
 
 import Data.List (sort)
-import Language.EO.Phi (unsafeParseProgram)
+import Language.EO.Phi (unsafeParseObject, unsafeParseProgram)
 import Language.EO.Phi qualified as Phi
 
 data PhiTestGroup = PhiTestGroup
@@ -43,9 +44,15 @@
 data DataizeTest = DataizeTest
   { name :: String
   , input :: Phi.Program
-  , output :: Phi.Bytes
+  , output :: DataizationResult
   }
   deriving (Generic, FromJSON)
+data DataizationResult
+  = Bytes {bytes :: Phi.Bytes}
+  | Object {object :: Phi.Object}
+  deriving (Generic, Show)
+instance FromJSON DataizationResult where
+  parseJSON = genericParseJSON defaultOptions{sumEncoding = UntaggedValue}
 
 fileTests :: FilePath -> IO PhiTestGroup
 fileTests = Yaml.decodeFileThrow
@@ -64,5 +71,9 @@
 -- | Parsing a $\varphi$-program from a JSON string.
 instance FromJSON Phi.Program where
   parseJSON = fmap unsafeParseProgram . parseJSON
+
+-- | Parsing a $\varphi$-object from a JSON string.
+instance FromJSON Phi.Object where
+  parseJSON = fmap unsafeParseObject . parseJSON
 
 deriving newtype instance FromJSON Phi.Bytes
diff --git a/test/doctests/Main.hs b/test/doctests/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/doctests/Main.hs
@@ -0,0 +1,7 @@
+module Main where
+
+import System.Environment (getArgs)
+import Test.DocTest (mainFromCabal)
+
+main :: IO ()
+main = mainFromCabal "eo-phi-normalizer" =<< getArgs
