rzk 0.5.7 → 0.6.0
raw patch · 13 files changed
+729/−499 lines, 13 filesdep +filepathdep +lensdep +lsp
Dependencies added: filepath, lens, lsp, lsp-types, stm, yaml
Files
- ChangeLog.md +8/−0
- rzk.cabal +27/−3
- src/Language/Rzk/Syntax/Abs.hs +4/−2
- src/Language/Rzk/Syntax/Par.hs +210/−207
- src/Language/Rzk/Syntax/Print.hs +32/−28
- src/Language/Rzk/VSCode/Env.hs +45/−0
- src/Language/Rzk/VSCode/Handlers.hs +137/−0
- src/Language/Rzk/VSCode/Lsp.hs +101/−0
- src/Language/Rzk/VSCode/State.hs +20/−0
- src/Language/Rzk/VSCode/Tokenize.hs +61/−57
- src/Language/Rzk/VSCode/Tokens.hs +0/−169
- src/Rzk/Main.hs +20/−15
- src/Rzk/TypeCheck.hs +64/−18
ChangeLog.md view
@@ -6,6 +6,14 @@ and this project adheres to the [Haskell Package Versioning Policy](https://pvp.haskell.org/). +## v0.6.0 — 2023-09-23++This version introduces a proper LSP server with basic support for incremental typechecking+and some minor improvements:++1. LSP server with incremental typechecking (see [#95](https://github.com/rzk-lang/rzk/pull/95));+2. Improve error messages for unclosed `#section` and extra `#end` (see [#91](https://github.com/rzk-lang/rzk/pull/91)).+ ## v0.5.7 — 2023-09-21 This version contains two fixes (see [#88](https://github.com/rzk-lang/rzk/pull/88)) for issues discovered in [rzk-lang/sHoTT#30](https://github.com/rzk-lang/sHoTT/pull/30#issuecomment-1729212862):
rzk.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: rzk-version: 0.5.7+version: 0.6.0 synopsis: An experimental proof assistant for synthetic ∞-categories description: Please see the README on GitHub at <https://github.com/rzk-lang/rzk#readme> category: Dependent Types@@ -36,8 +36,6 @@ Language.Rzk.Syntax.Lex Language.Rzk.Syntax.Par Language.Rzk.Syntax.Print- Language.Rzk.VSCode.Tokenize- Language.Rzk.VSCode.Tokens Rzk Rzk.Main Rzk.TypeCheck@@ -56,11 +54,25 @@ , base >=4.7 && <5 , bifunctors , bytestring+ , filepath+ , lens , mtl , optparse-generic+ , stm , template-haskell , text+ , yaml default-language: Haskell2010+ if !impl(ghcjs)+ exposed-modules:+ Language.Rzk.VSCode.Env+ Language.Rzk.VSCode.Handlers+ Language.Rzk.VSCode.Lsp+ Language.Rzk.VSCode.State+ Language.Rzk.VSCode.Tokenize+ build-depends:+ lsp+ , lsp-types executable rzk main-is: Main.hs@@ -79,11 +91,15 @@ , base >=4.7 && <5 , bifunctors , bytestring+ , filepath+ , lens , mtl , optparse-generic , rzk+ , stm , template-haskell , text+ , yaml default-language: Haskell2010 if !impl(ghcjs) build-depends:@@ -107,10 +123,14 @@ , bifunctors , bytestring , doctest+ , filepath+ , lens , mtl , optparse-generic+ , stm , template-haskell , text+ , yaml default-language: Haskell2010 test-suite rzk-test@@ -131,9 +151,13 @@ , base >=4.7 && <5 , bifunctors , bytestring+ , filepath+ , lens , mtl , optparse-generic , rzk+ , stm , template-haskell , text+ , yaml default-language: Haskell2010
src/Language/Rzk/Syntax/Abs.hs view
@@ -53,7 +53,8 @@ | CommandComputeNF a (Term' a) | CommandPostulate a (VarIdent' a) (DeclUsedVars' a) [Param' a] (Term' a) | CommandAssume a [VarIdent' a] (Term' a)- | CommandSection a (SectionName' a) [Command' a] (SectionName' a)+ | CommandSection a (SectionName' a)+ | CommandSectionEnd a (SectionName' a) | CommandDefine a (VarIdent' a) (DeclUsedVars' a) [Param' a] (Term' a) (Term' a) deriving (C.Eq, C.Ord, C.Show, C.Read, C.Functor, C.Foldable, C.Traversable, C.Data, C.Typeable, C.Generic) @@ -234,7 +235,8 @@ CommandComputeNF p _ -> p CommandPostulate p _ _ _ _ -> p CommandAssume p _ _ -> p- CommandSection p _ _ _ -> p+ CommandSection p _ -> p+ CommandSectionEnd p _ -> p CommandDefine p _ _ _ _ _ -> p instance HasPosition DeclUsedVars where
src/Language/Rzk/Syntax/Par.hs view
@@ -267,7 +267,7 @@ happyExpList :: HappyAddr-happyExpList = HappyA# "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\xcf\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x3f\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x80\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x02\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x28\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\xa0\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xd8\x83\xdf\x82\x01\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xf6\xc0\x27\x00\xc0\x06\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xd8\x83\xdf\x80\x01\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\x60\x0f\x7e\x03\x06\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\x3d\xf8\x0d\x18\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xf6\xe0\x37\x60\xc0\x06\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\x60\x0f\x7e\x03\x06\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x01\x00\x00\x20\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\x60\x1f\x7c\x02\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\x60\x0f\x7e\x0b\x06\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x0a\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\x3d\xf0\x09\x00\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xd8\x03\x9f\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x08\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xd8\x03\x9f\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\x60\x0f\x7c\x02\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xd8\x07\x9f\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\x60\x1f\x7c\x02\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xf6\xc1\x27\x00\xc0\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x28\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x80\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x08\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x80\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x08\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x3f\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfe\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x00\x00\x00\x00\x20\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xf6\xe0\x37\x60\xc0\x06\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xd8\x83\xdf\x80\x01\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\x60\x0f\x7e\x03\x06\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x80\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x20\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x02\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x80\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x22\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\x60\x0f\x7e\x03\x06\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\x3d\xf8\x0d\x18\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xf6\xe0\x37\x60\xc0\x06\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xd8\x83\xdf\x80\x01\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\x60\x0f\x7e\x03\x06\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\x3d\xf8\x0d\x18\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xf6\xe0\x37\x60\xc0\x06\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xd8\x83\xdf\x80\x01\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x20\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\x7d\xf0\x09\x00\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xf6\xc1\x27\x00\xc0\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x02\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x01\x00\x00\xa0\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x04\x00\x00\x80\x02\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x10\x00\x00\x00\x0a\x00\x20\x00\x00\x00\x00\x00\x00\x00\xfe\xfc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xd8\x83\xdf\x80\x01\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#+happyExpList = HappyA# "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\xdf\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x7f\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x80\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x02\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x28\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\xa0\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xd8\x83\xdf\x82\x01\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xf6\xc0\x27\x00\xc0\x06\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xd8\x83\xdf\x80\x01\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\x60\x0f\x7e\x03\x06\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\x3d\xf8\x0d\x18\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xf6\xe0\x37\x60\xc0\x06\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\x60\x0f\x7e\x03\x06\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x40\x01\x00\x00\x20\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\x60\x1f\x7c\x02\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\x60\x0f\x7e\x0b\x06\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x0a\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\x3d\xf0\x09\x00\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xd8\x03\x9f\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x08\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xd8\x03\x9f\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\x60\x0f\x7c\x02\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xd8\x07\x9f\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\x60\x1f\x7c\x02\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xf6\xc1\x27\x00\xc0\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x28\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x80\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x08\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x80\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x08\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfe\xfd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\xdf\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x08\x00\x00\x00\x00\x02\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\x60\x0f\x7e\x03\x06\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\x3d\xf8\x0d\x18\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xf6\xe0\x37\x60\xc0\x06\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x80\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x08\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x02\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x20\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x08\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x02\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xf6\xe0\x37\x60\xc0\x06\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xd8\x83\xdf\x80\x01\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\x60\x0f\x7e\x03\x06\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\x3d\xf8\x0d\x18\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xf6\xe0\x37\x60\xc0\x06\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xd8\x83\xdf\x80\x01\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\x60\x0f\x7e\x03\x06\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\x3d\xf8\x0d\x18\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xd8\x07\x9f\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\x60\x1f\x7c\x02\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x20\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x10\x00\x00\x00\x0a\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x40\x00\x00\x00\x28\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x01\x00\x00\xa0\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xd8\x83\xdf\x80\x01\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xc6\x8f\xe0\x2f\x7e\x0b\x27\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\xfc\x08\xfe\xe2\xb7\x70\xc2\x06\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x3f\x82\xbf\xf8\x2d\x9c\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xf1\x23\xf8\x8b\xdf\xc2\x09\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# {-# NOINLINE happyExpListPerState #-} happyExpListPerState st =@@ -283,24 +283,24 @@ f (Prelude.True, nr) = [token_strs Prelude.!! nr] happyActOffsets :: HappyAddr-happyActOffsets = HappyA# "\x06\x00\xc5\xff\xdb\xff\xdb\xff\x4e\x00\x2a\x00\x7d\x07\x7d\x07\x20\x00\x4b\x00\x23\x00\x23\x00\x2c\x00\x2c\x00\x5c\x00\x1e\x00\x1e\x00\x40\x01\x9a\x00\x9a\x00\x9a\x00\x9a\x00\x1e\x00\x9a\x00\x1e\x00\x1e\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\x00\x00\x4d\x01\xfc\xff\xd7\xff\xb3\x00\x00\x00\xd8\x00\x8c\x00\x6e\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\x00\x00\x00\x00\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x40\x01\xb9\x00\x00\x00\xc3\x00\x00\x00\x1e\x00\x40\x01\x00\x00\x24\x00\xdd\x00\x40\x01\x40\x01\xdf\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x00\xf1\xff\x1e\x00\x0a\x00\xa6\x00\xa6\x00\x16\x01\xa6\x00\xa6\x00\x54\x00\xa6\x00\xe7\x00\xad\x00\xd1\xff\xad\x00\xad\x00\x16\x01\x00\x00\x00\x00\x2c\x00\xad\x00\xa9\x00\x00\x00\xa9\x00\xad\x00\xa9\x00\xad\x00\xa9\x00\xad\x00\x00\x00\xad\x00\xad\x00\x01\x01\xf7\x00\xd1\x00\xde\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\xde\x00\xde\x00\xde\x00\xde\x00\xe6\x00\xe6\x00\xeb\x00\xeb\x00\xfe\x00\xfe\x00\x00\x00\xfe\x00\x03\x01\x08\x01\x04\x01\x04\x01\x04\x01\x04\x01\x7d\x07\x00\x00\x00\x00\x26\x01\x4b\x01\x52\x01\x00\x00\x50\x01\x59\x01\x43\x01\x43\x01\x43\x01\x00\x00\x00\x00\x00\x00\x67\x01\x6a\x01\x7d\x07\x3c\x01\x92\x01\x00\x00\x8a\x01\x88\x00\xb4\x01\x00\x00\x00\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x9a\x00\x9a\x00\x9a\x00\x1e\x00\x53\x00\xa9\x00\x00\x00\x00\x00\xa9\x00\xb5\x01\xa9\x00\x00\x00\xe4\xff\x1e\x00\x1e\x00\x00\x00\xfe\xff\xa9\x00\x0b\x00\x31\x02\x1e\x00\x1e\x00\x9a\x00\x9a\x00\x9a\x00\x9a\x00\x9a\x00\x9a\x00\x9a\x00\x9a\x00\x1e\x00\x1e\x00\x00\x00\x00\x00\x19\x00\x19\x00\x19\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\xda\x01\x1e\x00\x1e\x00\xe4\x01\xae\x01\x9c\x00\x1e\x00\x00\x00\xf3\xff\x1e\x00\xff\x01\x00\x02\xce\x01\x00\x00\x16\x01\x16\x01\x00\x00\x00\x00\x00\x00\xe8\x01\x1e\x00\xa9\x00\x1e\x00\x0e\x02\x00\x00\x1e\x00\x1e\x00\x3f\x00\x61\x00\x7d\x00\x7d\x07\xd3\x01\x1e\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x02\x15\x02\x1e\x00\x25\x02\x1e\x00\x26\x02\x1e\x00\x00\x00\x00\x00\x00\x00\xf6\x01\x2e\x02\xf2\xff\x00\x00\x9a\x00\x1e\x00\x1e\x00\x0e\x00\x1e\x00\x05\x02\x1e\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x1e\x00\x24\x02\x28\x02\x71\x00\x36\x02\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x48\x02\x45\x02\x50\x02\x00\x00\x59\x02\x1e\x00\x00\x00\x5a\x02\x5f\x02\x00\x00\x00\x00\x1e\x00\x00\x00\x1e\x00\x60\x02\x1e\x00\x61\x02\x1e\x00\x00\x00\x1e\x00\x41\x02\x00\x00\x00\x00\x6c\x02\x1e\x00\x72\x02\x1e\x00\x56\x02\x94\x02\x91\x02\x9c\x02\x76\x02\x79\x02\x1e\x00\x1e\x00\xa7\x02\xba\x02\x00\x00\x1e\x00\xb7\x02\xc2\x02\x1e\x00\x00\x00\x1e\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x02\x1e\x00\x1e\x00\x00\x00\xc6\x02\xcb\x02\x00\x00\x00\x00\x1e\x00\xc8\x02\x1e\x00\xcd\x02\x00\x00\x00\x00"#+happyActOffsets = HappyA# "\x06\x00\xc5\xff\xdb\xff\xdb\xff\x4e\x00\x2a\x00\x7d\x07\x7d\x07\x20\x00\x4b\x00\x23\x00\x23\x00\x2c\x00\x2c\x00\x5c\x00\x1e\x00\x1e\x00\x40\x01\x9a\x00\x9a\x00\x9a\x00\x9a\x00\x1e\x00\x9a\x00\x1e\x00\x1e\x00\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\x00\x00\x4d\x01\xfc\xff\xd7\xff\xb3\x00\x00\x00\xd8\x00\x8c\x00\x6e\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\x00\x00\x00\x00\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x40\x01\xb9\x00\x00\x00\xc3\x00\x00\x00\x1e\x00\x40\x01\x00\x00\x24\x00\xdd\x00\x40\x01\x40\x01\xdf\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x00\xf1\xff\x1e\x00\x0a\x00\xa6\x00\xa6\x00\x16\x01\xa6\x00\xa6\x00\x54\x00\xa6\x00\xe7\x00\xad\x00\xd1\xff\xad\x00\xad\x00\x16\x01\x00\x00\x00\x00\x2c\x00\xad\x00\xa9\x00\x00\x00\xa9\x00\xad\x00\xa9\x00\xad\x00\xa9\x00\xad\x00\x00\x00\xad\x00\xad\x00\x01\x01\xf7\x00\xd1\x00\xde\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\xde\x00\xde\x00\xde\x00\xde\x00\xde\x00\xe6\x00\xe6\x00\xeb\x00\xeb\x00\xda\x00\xda\x00\x00\x00\xda\x00\xf3\x00\xed\x00\xfe\x00\xfe\x00\xfe\x00\xfe\x00\x7d\x07\x00\x00\x00\x00\x26\x01\x37\x01\x39\x01\x00\x00\x46\x01\x00\x00\x3d\x01\x00\x00\x3d\x01\x3d\x01\x00\x00\x00\x00\x00\x00\x52\x01\x55\x01\x7d\x07\x30\x01\x70\x01\x00\x00\x6a\x01\x88\x00\x89\x01\x00\x00\x00\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x9a\x00\x9a\x00\x9a\x00\x1e\x00\x53\x00\xa9\x00\x00\x00\x00\x00\xa9\x00\x8a\x01\xa9\x00\x00\x00\xe4\xff\x1e\x00\x1e\x00\x00\x00\xfe\xff\xa9\x00\x0b\x00\x31\x02\x1e\x00\x1e\x00\x9a\x00\x9a\x00\x9a\x00\x9a\x00\x9a\x00\x9a\x00\x9a\x00\x9a\x00\x1e\x00\x1e\x00\x00\x00\x00\x00\x19\x00\x19\x00\x19\x00\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\xb4\x01\x1e\x00\x1e\x00\x76\x01\xae\x01\x9c\x00\x1e\x00\x00\x00\xf3\xff\x1e\x00\xb5\x01\xda\x01\xb9\x01\x00\x00\x16\x01\x16\x01\x00\x00\x00\x00\x00\x00\xdd\x01\x1e\x00\xa9\x00\x1e\x00\x08\x02\x00\x00\x1e\x00\x1e\x00\x3f\x00\x61\x00\x7d\x00\xd0\x01\x1e\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x01\x1e\x00\x01\x02\x1e\x00\x03\x02\x1e\x00\x00\x00\x00\x00\x00\x00\xe6\x01\x22\x02\xf2\xff\x00\x00\x9a\x00\x1e\x00\x1e\x00\x0e\x00\x1e\x00\xf4\x01\x1e\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x1e\x00\x19\x02\x1d\x02\x71\x00\x33\x02\x00\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x34\x02\x32\x02\x35\x02\x00\x00\x3d\x02\x1e\x00\x00\x00\x48\x02\x49\x02\x00\x00\x00\x00\x1e\x00\x00\x00\x1e\x00\x46\x02\x1e\x00\x4b\x02\x1e\x00\x00\x00\x1e\x00\x00\x00\x4c\x02\x1e\x00\x51\x02\x1e\x00\x3f\x02\x6f\x02\x76\x02\x7b\x02\x56\x02\x53\x02\x1e\x00\x1e\x00\x90\x02\x95\x02\x00\x00\x1e\x00\x9c\x02\xa1\x02\x1e\x00\x00\x00\x1e\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\x02\x1e\x00\x1e\x00\x00\x00\xa7\x02\xba\x02\x00\x00\x00\x00\x1e\x00\xb7\x02\x1e\x00\xc6\x02\x00\x00\x00\x00"# happyGotoOffsets :: HappyAddr-happyGotoOffsets = HappyA# "\xdc\x00\x7c\x00\x13\x01\xa1\x00\xd8\x02\xda\x02\xdd\x02\x81\x00\xdc\x02\x80\x00\xfc\x00\x15\x00\x14\x01\xbb\x00\xdc\x06\xfb\x01\xaf\x01\x34\x01\xf0\x06\x06\x01\xb7\x06\x81\x06\xd7\x05\x90\x01\x16\x02\x85\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x01\x00\x00\x00\x00\x21\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x01\xaa\x01\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x02\x40\x07\x00\x00\x3a\x01\x00\x00\x46\x07\x4d\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x07\x47\x02\x00\x00\x00\x00\x00\x00\x54\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x07\x00\x00\x00\x00\x56\x07\x00\x00\x11\x01\x00\x00\x51\x01\x00\x00\x1b\x02\x00\x00\x67\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x00\x62\x02\x6d\x02\x88\x02\x93\x02\x44\x01\x5f\x01\x7d\x01\xcc\x01\xf1\x02\xf2\x02\xa8\x01\xf5\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf5\x02\xcf\x01\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x02\xf7\x02\xf8\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x00\xf5\x01\x00\x00\x00\x00\x00\x00\x1b\x02\x00\x00\x00\x00\x00\x00\xca\x01\xae\x02\xb9\x02\xd5\x01\x2c\x07\x39\x07\x88\x06\xd4\x02\x00\x00\x68\x02\x00\x00\x00\x00\x8d\x02\x00\x00\x8e\x02\x00\x00\x00\x00\xf0\x01\xdf\x02\x00\x00\x00\x00\xb3\x02\x00\x00\x00\x00\xa1\x01\xf1\x05\x8f\x06\xa9\x06\xce\x06\xd5\x06\xfe\x06\x0b\x07\x15\x07\x22\x07\xfb\x05\x15\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfa\x02\x05\x03\x20\x03\x2b\x03\x00\x00\x1f\x06\x39\x06\x00\x00\x00\x00\x00\x00\x46\x03\x00\x00\x00\x00\x51\x03\x00\x00\x00\x00\x00\x00\x00\x00\x54\x07\x54\x07\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x03\xb4\x02\x77\x03\x00\x00\x00\x00\x92\x03\x9d\x03\x5d\x07\x66\x07\x6d\x07\x22\x01\x00\x03\xb8\x03\xc3\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\x03\x00\x00\xe9\x03\x00\x00\x04\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x06\x0f\x04\x2a\x04\x00\x00\x35\x04\x00\x00\x50\x04\x00\x00\x5b\x04\x00\x00\x00\x00\x76\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9c\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x04\x00\x00\xc2\x04\x00\x00\xcd\x04\x00\x00\xe8\x04\x00\x00\xf3\x04\xf2\x01\x00\x00\x00\x00\x00\x00\x0e\x05\x00\x00\x19\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x05\x3f\x05\x00\x00\x00\x00\x00\x00\x43\x06\x00\x00\x00\x00\x5a\x05\x00\x00\x5d\x06\x67\x06\x00\x00\x00\x00\x00\x00\x65\x05\x00\x00\x80\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x05\xa6\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x05\x00\x00\xcc\x05\x00\x00\x00\x00\x00\x00"#+happyGotoOffsets = HappyA# "\xdc\x00\x7c\x00\x13\x01\xa1\x00\xd3\x02\xd5\x02\xd2\x02\x81\x00\xd1\x02\x80\x00\xfc\x00\x15\x00\x14\x01\xbb\x00\xdc\x06\xfb\x01\xaf\x01\x34\x01\xf0\x06\x06\x01\xb7\x06\x81\x06\xd7\x05\x90\x01\x16\x02\x85\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x01\x00\x00\x00\x00\x21\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x01\xaa\x01\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x02\x40\x07\x00\x00\x3a\x01\x00\x00\x46\x07\x4d\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x07\x47\x02\x00\x00\x00\x00\x00\x00\x54\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x07\x00\x00\x00\x00\x56\x07\x00\x00\x11\x01\x00\x00\x51\x01\x00\x00\x1b\x02\x00\x00\x67\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x00\x62\x02\x6d\x02\x88\x02\x93\x02\x44\x01\x5f\x01\xcc\x01\x7d\x01\xf2\x01\xde\x02\xe2\x02\xa8\x01\xf5\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd7\x02\xcf\x01\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x02\x00\x00\xdc\x02\xe6\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x00\xf5\x01\x00\x00\x00\x00\x00\x00\x1b\x02\x00\x00\x00\x00\x00\x00\xca\x01\xae\x02\xb9\x02\xd5\x01\x2c\x07\x39\x07\x88\x06\xd4\x02\x00\x00\x68\x02\x00\x00\x00\x00\x8d\x02\x00\x00\x8e\x02\x00\x00\x00\x00\xf0\x01\xdf\x02\x00\x00\x00\x00\xb3\x02\x00\x00\x00\x00\xa1\x01\xf1\x05\x8f\x06\xa9\x06\xce\x06\xd5\x06\xfe\x06\x0b\x07\x15\x07\x22\x07\xfb\x05\x15\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfa\x02\x05\x03\x20\x03\x2b\x03\x00\x00\x1f\x06\x39\x06\x00\x00\x00\x00\x00\x00\x46\x03\x00\x00\x00\x00\x51\x03\x00\x00\x00\x00\x00\x00\x00\x00\x54\x07\x54\x07\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x03\xb4\x02\x77\x03\x00\x00\x00\x00\x92\x03\x9d\x03\x5d\x07\x66\x07\x6d\x07\xf2\x02\xb8\x03\xc3\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\x03\x00\x00\xe9\x03\x00\x00\x04\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x06\x0f\x04\x2a\x04\x00\x00\x35\x04\x00\x00\x50\x04\x00\x00\x5b\x04\x00\x00\x00\x00\x76\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9c\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x04\x00\x00\xc2\x04\x00\x00\xcd\x04\x00\x00\xe8\x04\x00\x00\xf3\x04\x00\x00\x00\x00\x0e\x05\x00\x00\x19\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x05\x3f\x05\x00\x00\x00\x00\x00\x00\x43\x06\x00\x00\x00\x00\x5a\x05\x00\x00\x5d\x06\x67\x06\x00\x00\x00\x00\x00\x00\x65\x05\x00\x00\x80\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x05\xa6\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x05\x00\x00\xcc\x05\x00\x00\x00\x00\x00\x00"# happyAdjustOffset :: Happy_GHC_Exts.Int# -> Happy_GHC_Exts.Int# happyAdjustOffset off = off happyDefActions :: HappyAddr-happyDefActions = HappyA# "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcb\xff\xc8\xff\xc7\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\xff\xe0\xff\xe1\xff\x9b\xff\x9a\xff\x00\x00\x76\xff\x8d\xff\x89\xff\x86\xff\x7f\xff\x72\xff\x91\xff\x71\xff\x00\x00\x00\x00\x98\xff\xac\xff\x97\xff\xaa\xff\xad\xff\x96\xff\xa9\xff\xab\xff\x00\x00\x94\xff\xaf\xff\x00\x00\x95\xff\xae\xff\xb0\xff\xa3\xff\x00\x00\x00\x00\x00\x00\xa6\xff\x00\x00\x9f\xff\x00\x00\x00\x00\xa0\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\xff\xa7\xff\xe4\xff\xe3\xff\x00\x00\x00\x00\x00\x00\x7f\xff\x00\x00\x00\x00\x91\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb2\xff\x00\x00\x00\x00\x00\x00\x00\x00\xba\xff\xc4\xff\xc0\xff\xbc\xff\x00\x00\x00\x00\xc5\xff\x00\x00\x00\x00\xc2\xff\x00\x00\x00\x00\x00\x00\xc6\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc7\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\xff\x00\x00\x00\x00\xdf\xff\x00\x00\x00\x00\x00\x00\x00\x00\xcb\xff\xe2\xff\xde\xff\x00\x00\x00\x00\x00\x00\xda\xff\x00\x00\x00\x00\xc8\xff\xc8\xff\xc8\xff\xd7\xff\xd6\xff\xd8\xff\x00\x00\x00\x00\xcb\xff\x00\x00\x00\x00\xc1\xff\x00\x00\xc2\xff\x00\x00\xbb\xff\x79\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\xff\x78\xff\x00\x00\x00\x00\x00\x00\x74\xff\x00\x00\x00\x00\x00\x00\x75\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\xff\x7e\xff\x8e\xff\x8f\xff\x8c\xff\x8b\xff\x8a\xff\x88\xff\x87\xff\x85\xff\x73\xff\x70\xff\x99\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\xff\x92\xff\x90\xff\xb1\xff\xb4\xff\xb3\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcb\xff\x00\x00\x00\x00\x00\x00\xdd\xff\xd1\xff\xd2\xff\xdb\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\xff\xd3\xff\xc9\xff\x00\x00\x00\x00\x00\x00\x7a\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa5\xff\x00\x00\x80\xff\x7c\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\xff\xb9\xff\x00\x00\x93\xff\xa2\xff\x00\x00\x00\x00\x00\x00\x9d\xff\x00\x00\x00\x00\xb7\xff\x00\x00\x00\x00\x82\xff\xbf\xff\x00\x00\xc3\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\xff\x00\x00\xc7\xff\xd0\xff\xd5\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb5\xff\x00\x00\x00\x00\xbe\xff\xbd\xff\xcc\xff\x00\x00\xce\xff\x00\x00\xcf\xff\xcd\xff\x7b\xff\x83\xff\x00\x00\x00\x00\x00\x00\x7d\xff\x00\x00\x00\x00\xb6\xff\xa4\xff\x00\x00\x00\x00\x00\x00\x00\x00\x9c\xff"#+happyDefActions = HappyA# "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\xff\xc7\xff\xc6\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\xff\xe0\xff\xe1\xff\x9a\xff\x99\xff\x00\x00\x75\xff\x8c\xff\x88\xff\x85\xff\x7e\xff\x71\xff\x90\xff\x70\xff\x00\x00\x00\x00\x97\xff\xab\xff\x96\xff\xa9\xff\xac\xff\x95\xff\xa8\xff\xaa\xff\x00\x00\x93\xff\xae\xff\x00\x00\x94\xff\xad\xff\xaf\xff\xa2\xff\x00\x00\x00\x00\x00\x00\xa5\xff\x00\x00\x9e\xff\x00\x00\x00\x00\x9f\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\xff\xa6\xff\xe4\xff\xe3\xff\x00\x00\x00\x00\x00\x00\x7e\xff\x00\x00\x00\x00\x90\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb1\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb9\xff\xc3\xff\xbf\xff\xbb\xff\x00\x00\x00\x00\xc4\xff\x00\x00\x00\x00\xc1\xff\x00\x00\x00\x00\x00\x00\xc5\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\xff\x00\x00\xc6\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\xff\x00\x00\x00\x00\xdf\xff\x00\x00\x00\x00\x00\x00\x00\x00\xca\xff\xe2\xff\xde\xff\x00\x00\x00\x00\x00\x00\xda\xff\x00\x00\xd0\xff\xc7\xff\xcf\xff\xc7\xff\xc7\xff\xd7\xff\xd6\xff\xd8\xff\x00\x00\x00\x00\xca\xff\x00\x00\x00\x00\xc0\xff\x00\x00\xc1\xff\x00\x00\xba\xff\x78\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\xff\x77\xff\x00\x00\x00\x00\x00\x00\x73\xff\x00\x00\x00\x00\x00\x00\x74\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\xff\x7d\xff\x8d\xff\x8e\xff\x8b\xff\x8a\xff\x89\xff\x87\xff\x86\xff\x84\xff\x72\xff\x6f\xff\x98\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xff\x91\xff\x8f\xff\xb0\xff\xb3\xff\xb2\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc9\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\xff\xd1\xff\xd2\xff\xdb\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\xff\xd3\xff\xc8\xff\x00\x00\x00\x00\x00\x00\x79\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\xff\x00\x00\x7f\xff\x7b\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\xff\xb8\xff\x00\x00\x92\xff\xa1\xff\x00\x00\x00\x00\x00\x00\x9c\xff\x00\x00\x00\x00\xb6\xff\x00\x00\x00\x00\x81\xff\xbe\xff\x00\x00\xc2\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\xff\x00\x00\xd5\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb4\xff\x00\x00\x00\x00\xbd\xff\xbc\xff\xcb\xff\x00\x00\xcd\xff\x00\x00\xce\xff\xcc\xff\x7a\xff\x82\xff\x00\x00\x00\x00\x00\x00\x7c\xff\x00\x00\x00\x00\xb5\xff\xa3\xff\x00\x00\x00\x00\x00\x00\x00\x00\x9b\xff"# happyCheck :: HappyAddr-happyCheck = HappyA# "\xff\xff\x10\x00\x1e\x00\x11\x00\x13\x00\x14\x00\x16\x00\x30\x00\x15\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x09\x00\x3f\x00\x1e\x00\x21\x00\x17\x00\x16\x00\x50\x00\x01\x00\x46\x00\x27\x00\x28\x00\x05\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x49\x00\x16\x00\x0d\x00\x0e\x00\x40\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x4f\x00\x12\x00\x3b\x00\x23\x00\x10\x00\x25\x00\x3e\x00\x13\x00\x14\x00\x10\x00\x10\x00\x45\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x10\x00\x4c\x00\x4d\x00\x21\x00\x4f\x00\x50\x00\x51\x00\x45\x00\x48\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x3e\x00\x2f\x00\x40\x00\x10\x00\x45\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x09\x00\x3a\x00\x3b\x00\x41\x00\x3d\x00\x3c\x00\x1e\x00\x3b\x00\x3b\x00\x42\x00\x43\x00\x44\x00\x39\x00\x11\x00\x47\x00\x12\x00\x3b\x00\x15\x00\x3d\x00\x4c\x00\x4d\x00\x10\x00\x4f\x00\x50\x00\x13\x00\x14\x00\x10\x00\x4f\x00\x4f\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x3b\x00\x4f\x00\x3d\x00\x21\x00\x02\x00\x1e\x00\x04\x00\x01\x00\x11\x00\x27\x00\x28\x00\x05\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x09\x00\x0a\x00\x0c\x00\x10\x00\x4f\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x41\x00\x3a\x00\x3b\x00\x10\x00\x3d\x00\x4f\x00\x1e\x00\x3b\x00\x15\x00\x3d\x00\x43\x00\x44\x00\x15\x00\x01\x00\x4e\x00\x10\x00\x51\x00\x05\x00\x06\x00\x4c\x00\x4d\x00\x10\x00\x4f\x00\x50\x00\x13\x00\x14\x00\x3e\x00\x4f\x00\x15\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x3b\x00\x10\x00\x3d\x00\x21\x00\x01\x00\x09\x00\x0a\x00\x51\x00\x05\x00\x27\x00\x28\x00\x3b\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x0d\x00\x10\x00\x0f\x00\x10\x00\x4f\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x10\x00\x3a\x00\x3b\x00\x23\x00\x4f\x00\x25\x00\x09\x00\x0a\x00\x3f\x00\x01\x00\x43\x00\x44\x00\x03\x00\x05\x00\x06\x00\x46\x00\x07\x00\x3b\x00\x32\x00\x4c\x00\x4d\x00\x10\x00\x4f\x00\x50\x00\x13\x00\x14\x00\x10\x00\x16\x00\x10\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x01\x00\x51\x00\x4f\x00\x21\x00\x05\x00\x06\x00\x15\x00\x01\x00\x51\x00\x27\x00\x28\x00\x05\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x01\x00\x02\x00\x0d\x00\x04\x00\x05\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x10\x00\x01\x00\x3b\x00\x01\x00\x01\x00\x05\x00\x20\x00\x05\x00\x05\x00\x14\x00\x15\x00\x16\x00\x45\x00\x0d\x00\x0e\x00\x1a\x00\x0d\x00\x51\x00\x0f\x00\x4c\x00\x4d\x00\x10\x00\x4f\x00\x50\x00\x13\x00\x14\x00\x09\x00\x0a\x00\x4f\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x4e\x00\x01\x00\x02\x00\x21\x00\x04\x00\x05\x00\x4f\x00\x01\x00\x39\x00\x27\x00\x28\x00\x05\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x01\x00\x20\x00\x0d\x00\x14\x00\x05\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x51\x00\x10\x00\x3b\x00\x01\x00\x13\x00\x14\x00\x51\x00\x05\x00\x4f\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x0d\x00\x12\x00\x01\x00\x21\x00\x4c\x00\x4d\x00\x05\x00\x4f\x00\x50\x00\x27\x00\x28\x00\x1e\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x01\x00\x22\x00\x1e\x00\x24\x00\x05\x00\x23\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x20\x00\x0d\x00\x3b\x00\x0f\x00\x10\x00\x01\x00\x3c\x00\x01\x00\x02\x00\x05\x00\x04\x00\x05\x00\x1e\x00\x01\x00\x02\x00\x1e\x00\x04\x00\x05\x00\x4f\x00\x4c\x00\x4d\x00\x41\x00\x4f\x00\x50\x00\x01\x00\x02\x00\x14\x00\x04\x00\x05\x00\x11\x00\x4a\x00\x4b\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x01\x00\x02\x00\x14\x00\x04\x00\x05\x00\x15\x00\x1e\x00\x01\x00\x1a\x00\x01\x00\x02\x00\x05\x00\x04\x00\x05\x00\x01\x00\x02\x00\x11\x00\x04\x00\x05\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x14\x00\x11\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\x01\x00\x04\x00\x05\x00\x01\x00\x05\x00\x1e\x00\x1e\x00\x05\x00\x06\x00\x01\x00\x02\x00\x0c\x00\x04\x00\x05\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\x01\x00\x04\x00\x05\x00\x01\x00\x05\x00\x1e\x00\x15\x00\x05\x00\x06\x00\x01\x00\x02\x00\x0c\x00\x04\x00\x05\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\x12\x00\x40\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\x31\x00\x04\x00\x05\x00\x01\x00\x1e\x00\x1e\x00\x11\x00\x05\x00\x4e\x00\x01\x00\x02\x00\x08\x00\x04\x00\x05\x00\x11\x00\x0d\x00\x0e\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\x1e\x00\x3e\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\x11\x00\x04\x00\x05\x00\x11\x00\x1e\x00\x1e\x00\x40\x00\x15\x00\x11\x00\x01\x00\x02\x00\x26\x00\x04\x00\x05\x00\x11\x00\x26\x00\x1e\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\x11\x00\x15\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\x15\x00\x04\x00\x05\x00\x01\x00\x01\x00\x11\x00\x11\x00\x05\x00\x05\x00\x01\x00\x02\x00\x11\x00\x04\x00\x05\x00\x11\x00\x0d\x00\x0d\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\x1f\x00\x1f\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\x1f\x00\x04\x00\x05\x00\x01\x00\x01\x00\x4f\x00\x1f\x00\x05\x00\x05\x00\x01\x00\x02\x00\x40\x00\x04\x00\x05\x00\x11\x00\x0d\x00\x0d\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\x11\x00\x15\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\x15\x00\x04\x00\x05\x00\x01\x00\x01\x00\x40\x00\x3e\x00\x05\x00\x05\x00\x01\x00\x02\x00\x15\x00\x04\x00\x05\x00\x11\x00\x0d\x00\x0d\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\x11\x00\x15\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\x15\x00\x04\x00\x05\x00\x40\x00\x15\x00\x11\x00\x15\x00\x11\x00\x07\x00\x01\x00\x02\x00\x08\x00\x04\x00\x05\x00\x11\x00\x09\x00\x0b\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\x00\x00\x00\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\x08\x00\x04\x00\x05\x00\x00\x00\x0b\x00\x0b\x00\x0b\x00\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xff\xff\x1a\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xff\xff\x1a\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xff\xff\x1a\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xff\xff\x1a\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xff\xff\x1a\x00\x14\x00\x15\x00\x16\x00\x17\x00\x01\x00\x02\x00\x1a\x00\x04\x00\x05\x00\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x14\x00\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x1a\x00\x14\x00\x15\x00\x16\x00\x17\x00\x11\x00\xff\xff\x1a\x00\x14\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x1a\x00\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x14\x00\x15\x00\xff\xff\xff\xff\x11\x00\xff\xff\x1a\x00\x14\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x1a\x00\x14\x00\x15\x00\xff\xff\xff\xff\x01\x00\x02\x00\x1a\x00\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\xff\xff\xff\xff\x01\x00\x02\x00\x1a\x00\x04\x00\x05\x00\xff\xff\x14\x00\x15\x00\xff\xff\xff\xff\x01\x00\x02\x00\x1a\x00\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\xff\xff\xff\xff\x01\x00\x02\x00\x1a\x00\x04\x00\x05\x00\xff\xff\x14\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x1a\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\x14\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x1a\x00\x14\x00\x01\x00\x02\x00\x01\x00\x04\x00\x05\x00\x14\x00\x05\x00\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\x14\x00\x05\x00\x0d\x00\xff\xff\x0f\x00\x10\x00\x01\x00\x14\x00\xff\xff\x0d\x00\x05\x00\x0f\x00\x10\x00\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\x0d\x00\xff\xff\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\x0d\x00\xff\xff\x0f\x00\x10\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#+happyCheck = HappyA# "\xff\xff\x10\x00\x1e\x00\x11\x00\x13\x00\x14\x00\x16\x00\x30\x00\x15\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x09\x00\x3f\x00\x1e\x00\x21\x00\x17\x00\x16\x00\x50\x00\x01\x00\x46\x00\x27\x00\x28\x00\x05\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x49\x00\x16\x00\x0d\x00\x0e\x00\x40\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x4f\x00\x12\x00\x3b\x00\x23\x00\x10\x00\x25\x00\x3e\x00\x13\x00\x14\x00\x10\x00\x10\x00\x45\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x10\x00\x4c\x00\x4d\x00\x21\x00\x4f\x00\x50\x00\x51\x00\x45\x00\x48\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x3e\x00\x2f\x00\x40\x00\x10\x00\x45\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x09\x00\x3a\x00\x3b\x00\x41\x00\x3d\x00\x3c\x00\x1e\x00\x3b\x00\x3b\x00\x42\x00\x43\x00\x44\x00\x39\x00\x11\x00\x47\x00\x12\x00\x3b\x00\x15\x00\x3d\x00\x4c\x00\x4d\x00\x10\x00\x4f\x00\x50\x00\x13\x00\x14\x00\x10\x00\x4f\x00\x4f\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x3b\x00\x4f\x00\x3d\x00\x21\x00\x02\x00\x1e\x00\x04\x00\x01\x00\x11\x00\x27\x00\x28\x00\x05\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x09\x00\x0a\x00\x0c\x00\x10\x00\x4f\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x41\x00\x3a\x00\x3b\x00\x10\x00\x3d\x00\x4f\x00\x1e\x00\x3b\x00\x15\x00\x3d\x00\x43\x00\x44\x00\x15\x00\x01\x00\x4e\x00\x10\x00\x51\x00\x05\x00\x06\x00\x4c\x00\x4d\x00\x10\x00\x4f\x00\x50\x00\x13\x00\x14\x00\x3e\x00\x4f\x00\x15\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x3b\x00\x10\x00\x3d\x00\x21\x00\x01\x00\x09\x00\x0a\x00\x51\x00\x05\x00\x27\x00\x28\x00\x3b\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x0d\x00\x10\x00\x0f\x00\x10\x00\x4f\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x10\x00\x3a\x00\x3b\x00\x23\x00\x4f\x00\x25\x00\x09\x00\x0a\x00\x3f\x00\x01\x00\x43\x00\x44\x00\x03\x00\x05\x00\x06\x00\x46\x00\x07\x00\x3b\x00\x32\x00\x4c\x00\x4d\x00\x10\x00\x4f\x00\x50\x00\x13\x00\x14\x00\x10\x00\x16\x00\x10\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x01\x00\x51\x00\x4f\x00\x21\x00\x05\x00\x06\x00\x15\x00\x01\x00\x51\x00\x27\x00\x28\x00\x05\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x01\x00\x02\x00\x0d\x00\x04\x00\x05\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x10\x00\x01\x00\x3b\x00\x01\x00\x01\x00\x05\x00\x20\x00\x05\x00\x05\x00\x14\x00\x15\x00\x16\x00\x45\x00\x0d\x00\x0e\x00\x1a\x00\x0d\x00\x51\x00\x0f\x00\x4c\x00\x4d\x00\x10\x00\x4f\x00\x50\x00\x13\x00\x14\x00\x51\x00\x39\x00\x4f\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x4e\x00\x01\x00\x02\x00\x21\x00\x04\x00\x05\x00\x4f\x00\x01\x00\x4f\x00\x27\x00\x28\x00\x05\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x01\x00\x20\x00\x0d\x00\x14\x00\x05\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x51\x00\x10\x00\x3b\x00\x01\x00\x13\x00\x14\x00\x1e\x00\x05\x00\x1e\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x0d\x00\x12\x00\x01\x00\x21\x00\x4c\x00\x4d\x00\x05\x00\x4f\x00\x50\x00\x27\x00\x28\x00\x23\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x01\x00\x22\x00\x1e\x00\x24\x00\x05\x00\x1e\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x3c\x00\x0d\x00\x3b\x00\x0f\x00\x10\x00\x01\x00\x4f\x00\x01\x00\x02\x00\x05\x00\x04\x00\x05\x00\x15\x00\x01\x00\x02\x00\x1e\x00\x04\x00\x05\x00\x15\x00\x4c\x00\x4d\x00\x41\x00\x4f\x00\x50\x00\x01\x00\x02\x00\x14\x00\x04\x00\x05\x00\x11\x00\x4a\x00\x4b\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x01\x00\x02\x00\x14\x00\x04\x00\x05\x00\x1e\x00\x1e\x00\x01\x00\x1a\x00\x01\x00\x02\x00\x05\x00\x04\x00\x05\x00\x01\x00\x02\x00\x11\x00\x04\x00\x05\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x14\x00\x11\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\x01\x00\x04\x00\x05\x00\x01\x00\x05\x00\x1e\x00\x1e\x00\x05\x00\x06\x00\x01\x00\x02\x00\x0c\x00\x04\x00\x05\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\x01\x00\x04\x00\x05\x00\x01\x00\x05\x00\x1e\x00\x40\x00\x05\x00\x06\x00\x01\x00\x02\x00\x0c\x00\x04\x00\x05\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\x12\x00\x31\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\x11\x00\x04\x00\x05\x00\x01\x00\x1e\x00\x4e\x00\x1e\x00\x05\x00\x1e\x00\x01\x00\x02\x00\x3e\x00\x04\x00\x05\x00\x11\x00\x0d\x00\x0e\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\x11\x00\x40\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\x26\x00\x04\x00\x05\x00\x11\x00\x26\x00\x11\x00\x11\x00\x15\x00\x15\x00\x01\x00\x02\x00\x15\x00\x04\x00\x05\x00\x11\x00\x11\x00\x1e\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\x11\x00\x11\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\x1f\x00\x04\x00\x05\x00\x01\x00\x01\x00\x1f\x00\x1f\x00\x05\x00\x05\x00\x01\x00\x02\x00\x1f\x00\x04\x00\x05\x00\x11\x00\x0d\x00\x0d\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\x40\x00\x11\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\x15\x00\x04\x00\x05\x00\x01\x00\x01\x00\x15\x00\x3e\x00\x05\x00\x05\x00\x01\x00\x02\x00\x40\x00\x04\x00\x05\x00\x11\x00\x0d\x00\x0d\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\x15\x00\x11\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\x15\x00\x04\x00\x05\x00\x01\x00\x01\x00\x15\x00\x40\x00\x05\x00\x05\x00\x01\x00\x02\x00\x15\x00\x04\x00\x05\x00\x11\x00\x0d\x00\x0d\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\x11\x00\x15\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\x11\x00\x04\x00\x05\x00\x07\x00\x09\x00\x0b\x00\x08\x00\x00\x00\x08\x00\x01\x00\x02\x00\x00\x00\x04\x00\x05\x00\x11\x00\x0b\x00\x0b\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\x0b\x00\x00\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xff\xff\x1a\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xff\xff\x1a\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xff\xff\x1a\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xff\xff\x1a\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xff\xff\x1a\x00\x14\x00\x15\x00\x16\x00\x17\x00\x01\x00\x02\x00\x1a\x00\x04\x00\x05\x00\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x14\x00\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x1a\x00\x14\x00\x15\x00\x16\x00\x17\x00\x11\x00\xff\xff\x1a\x00\x14\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x1a\x00\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x14\x00\x15\x00\xff\xff\xff\xff\x11\x00\xff\xff\x1a\x00\x14\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x1a\x00\x14\x00\x15\x00\xff\xff\xff\xff\x01\x00\x02\x00\x1a\x00\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\xff\xff\xff\xff\x01\x00\x02\x00\x1a\x00\x04\x00\x05\x00\xff\xff\x14\x00\x15\x00\xff\xff\xff\xff\x01\x00\x02\x00\x1a\x00\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\xff\xff\x14\x00\x15\x00\xff\xff\xff\xff\x01\x00\x02\x00\x1a\x00\x04\x00\x05\x00\xff\xff\x14\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x1a\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\xff\xff\x14\x00\x01\x00\x02\x00\xff\xff\x04\x00\x05\x00\x1a\x00\x14\x00\x01\x00\x02\x00\x01\x00\x04\x00\x05\x00\x14\x00\x05\x00\xff\xff\xff\xff\x01\x00\xff\xff\xff\xff\x14\x00\x05\x00\x0d\x00\xff\xff\x0f\x00\x10\x00\x01\x00\x14\x00\xff\xff\x0d\x00\x05\x00\x0f\x00\x10\x00\x01\x00\xff\xff\xff\xff\xff\xff\x05\x00\x0d\x00\xff\xff\x0f\x00\x10\x00\xff\xff\xff\xff\xff\xff\x0d\x00\xff\xff\x0f\x00\x10\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"# happyTable :: HappyAddr-happyTable = HappyA# "\x00\x00\x50\x00\xdd\x00\x2a\x01\x2c\x00\x2d\x00\xc4\x00\xbc\x00\xec\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x82\x00\xa3\x00\x0f\x01\x34\x00\xbe\x00\xd8\x00\x4d\x00\x1c\x00\xa4\x00\x35\x00\x36\x00\x5e\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xa2\x00\xbd\x00\xd5\x00\x66\x00\x67\x00\xde\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x4c\x00\xa6\x00\x44\x00\xa8\x00\x2b\x00\xa9\x00\x2b\x01\x2c\x00\x2d\x00\x69\x00\xb0\x00\xc5\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x63\x00\x4a\x00\x4b\x00\x34\x00\x4c\x00\x4d\x00\xff\xff\xd9\x00\xbf\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x25\x01\x3c\x00\x26\x01\x63\x00\xd6\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x82\x00\x43\x00\x44\x00\xa7\x00\x45\x00\x6e\x00\x03\x01\x64\x00\x64\x00\x46\x00\x47\x00\x48\x00\x80\x00\xd2\x00\x49\x00\xa6\x00\x64\x00\xd3\x00\x65\x00\x4a\x00\x4b\x00\x2b\x00\x4c\x00\x4d\x00\x2c\x00\x2d\x00\x63\x00\x4c\x00\x4c\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x64\x00\x4c\x00\x65\x00\x34\x00\x1d\x00\x01\x01\x85\x00\x1c\x00\x1c\x01\x35\x00\x36\x00\x6a\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x6e\x00\x6f\x00\x6b\x00\x63\x00\x4c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\xa7\x00\x43\x00\x44\x00\x69\x00\x45\x00\x4c\x00\xff\x00\x64\x00\xec\x00\x65\x00\x47\x00\x48\x00\xba\x00\x1c\x00\x1c\x00\xb7\x00\xff\xff\x82\x00\x83\x00\x4a\x00\x4b\x00\x50\x00\x4c\x00\x4d\x00\x2c\x00\x2d\x00\x1d\x01\x4c\x00\x11\x01\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x64\x00\x69\x00\x65\x00\x34\x00\x1c\x00\x6e\x00\x88\x00\xff\xff\x5e\x00\x35\x00\x36\x00\x64\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x5f\x00\xb4\x00\x60\x00\x61\x00\x4c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\xb3\x00\x43\x00\x44\x00\xa8\x00\x4c\x00\xa9\x00\x6e\x00\xee\x00\xa3\x00\x1c\x00\x47\x00\x48\x00\x86\x00\x82\x00\x97\x00\xa4\x00\x87\x00\x64\x00\xbb\x00\x4a\x00\x4b\x00\x50\x00\x4c\x00\x4d\x00\x2c\x00\x2d\x00\xae\x00\xba\xff\xab\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x1c\x00\xff\xff\x4c\x00\x34\x00\x82\x00\x8b\x00\xa5\x00\x1c\x00\xff\xff\x35\x00\x36\x00\x5e\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xa2\x00\x1c\x00\x1d\x00\x69\x00\x1e\x00\x1f\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x9a\x00\x1c\x00\x44\x00\x1c\x00\x1c\x00\x5e\x00\x99\x00\x84\x00\x5e\x00\x21\x00\x22\x00\x55\x00\xba\xff\x9d\x00\x9e\x00\x53\x00\x5f\x00\xff\xff\x65\x00\x4a\x00\x4b\x00\x50\x00\x4c\x00\x4d\x00\x2c\x00\x2d\x00\x6e\x00\xfc\x00\x4c\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x1c\x00\x1c\x00\x1d\x00\x34\x00\x1e\x00\x1f\x00\x4c\x00\x1c\x00\x80\x00\x35\x00\x36\x00\x5e\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xa2\x00\x1c\x00\xf9\x00\xae\x00\x57\x00\x92\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\xff\xff\x50\x00\x44\x00\x1c\x00\x2c\x00\x2d\x00\xff\xff\x5e\x00\x4c\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x9c\x00\xa6\x00\x1c\x00\x34\x00\x4a\x00\x4b\x00\x91\x00\x4c\x00\x4d\x00\x35\x00\x36\x00\xf8\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x1c\x00\xc0\x00\xf7\x00\xc1\x00\x5e\x00\xf6\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\xf5\x00\x5f\x00\x44\x00\x60\x00\xb5\x00\x1c\x00\x6e\x00\x1c\x00\x1d\x00\x90\x00\x1e\x00\x1f\x00\xf1\x00\x1c\x00\x1d\x00\xf0\x00\x1e\x00\x1f\x00\x4c\x00\x4a\x00\x4b\x00\xa7\x00\x4c\x00\x4d\x00\x1c\x00\x1d\x00\xa0\x00\x1e\x00\x1f\x00\x20\x00\xc2\x00\xc3\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x1c\x00\x1d\x00\x21\x00\x1e\x00\x1f\x00\xec\x00\xed\x00\x1c\x00\x4e\x00\x1c\x00\x1d\x00\x8c\x00\x1e\x00\x1f\x00\x1c\x00\x1d\x00\x20\x00\x1e\x00\x1f\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xd0\x00\xb4\x00\x12\x01\x20\x00\x58\x00\x59\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x5a\x00\x1c\x00\x1d\x00\x1c\x00\x1e\x00\x1f\x00\x1c\x00\x6a\x00\xeb\x00\xe0\x00\x82\x00\x89\x00\x1c\x00\x1d\x00\x8f\x00\x1e\x00\x1f\x00\x20\x00\x58\x00\xe9\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x5a\x00\x20\x00\x58\x00\xe6\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x5a\x00\x1c\x00\x1d\x00\x1c\x00\x1e\x00\x1f\x00\x1c\x00\x6a\x00\x16\x01\x13\x01\x82\x00\xed\x00\x1c\x00\x1d\x00\x34\x01\x1e\x00\x1f\x00\x20\x00\x58\x00\xda\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xdb\x00\x20\x00\x5b\x00\x0b\x01\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x5a\x00\x1c\x00\x1d\x00\x0a\x01\x1e\x00\x1f\x00\x1c\x00\x0d\x01\x0c\x01\x06\x01\x5e\x00\x1c\x00\x1c\x00\x1d\x00\x34\x01\x1e\x00\x1f\x00\x20\x00\x66\x00\x9b\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x4d\x00\x20\x00\x33\x01\x2d\x01\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xb8\x00\x1c\x00\x1d\x00\x2c\x01\x1e\x00\x1f\x00\xd2\x00\x31\x01\x2f\x01\x23\x01\xd3\x00\x1b\x01\x1c\x00\x1d\x00\x1f\x01\x1e\x00\x1f\x00\x20\x00\x1e\x01\xd4\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xb1\x00\x20\x00\x43\x01\x42\x01\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xa9\x00\x1c\x00\x1d\x00\x41\x01\x1e\x00\x1f\x00\x1c\x00\x1c\x00\x40\x01\x3e\x01\x5e\x00\x5e\x00\x1c\x00\x1d\x00\x3d\x01\x1e\x00\x1f\x00\x20\x00\x9a\x00\xe1\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x96\x00\x20\x00\x3a\x01\x38\x01\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x95\x00\x1c\x00\x1d\x00\x52\x01\x1e\x00\x1f\x00\x1c\x00\x1c\x00\x4c\x00\x50\x01\x5e\x00\x5e\x00\x1c\x00\x1d\x00\x4e\x01\x1e\x00\x1f\x00\x20\x00\xe0\x00\xde\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x94\x00\x20\x00\x4d\x01\x4c\x01\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x93\x00\x1c\x00\x1d\x00\x4b\x01\x1e\x00\x1f\x00\x1c\x00\x1c\x00\x4a\x01\x49\x01\x5e\x00\x5e\x00\x1c\x00\x1d\x00\x46\x01\x1e\x00\x1f\x00\x20\x00\xd6\x00\x07\x01\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe8\x00\x20\x00\x45\x01\x59\x01\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe7\x00\x1c\x00\x1d\x00\x58\x01\x1e\x00\x1f\x00\x5d\x01\x5f\x01\x5e\x01\x61\x01\x63\x01\x80\x00\x1c\x00\x1d\x00\x7e\x00\x1e\x00\x1f\x00\x20\x00\x7d\x00\x6c\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe2\x00\x20\x00\x8e\x00\x8d\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xd9\x00\x1c\x00\x1d\x00\x8a\x00\x1e\x00\x1f\x00\xfb\x00\xf3\x00\xf2\x00\xf1\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x19\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x18\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x17\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x16\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x0d\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x08\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x06\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x04\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x03\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xfa\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xf9\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x31\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x2f\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x2d\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x27\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x26\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x23\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x21\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x20\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x1f\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x43\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x3e\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x3b\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x3a\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x38\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x36\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x35\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x50\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x4e\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x47\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x46\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x56\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x53\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x52\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x5b\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x5a\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x5f\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x61\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x50\x00\x51\x00\x27\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x50\x00\xcf\x00\x27\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x50\x00\xc6\x00\x27\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x50\x00\xc5\x00\x27\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x50\x00\x14\x01\x27\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x50\x00\x13\x01\x27\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x50\x00\x59\x01\x27\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x50\x00\x55\x01\x27\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x50\x00\x54\x01\x27\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x21\x00\x22\x00\x23\x00\x24\x00\x52\x00\x00\x00\x53\x00\x21\x00\x22\x00\x23\x00\x24\x00\xe3\x00\x00\x00\x53\x00\x21\x00\x22\x00\x23\x00\x24\x00\xce\x00\x00\x00\x53\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x21\x00\x22\x00\x23\x00\x24\x00\xcd\x00\x00\x00\x53\x00\x21\x00\x22\x00\x23\x00\x24\x00\x28\x01\x00\x00\x53\x00\x21\x00\x22\x00\x23\x00\x54\x00\x1c\x00\x1d\x00\x53\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x21\x00\x22\x00\x23\x00\xcc\x00\x00\x00\x00\x00\x53\x00\x21\x00\x22\x00\x23\x00\xcb\x00\x5c\x00\x00\x00\x53\x00\x21\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x5d\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x21\x00\x56\x00\x00\x00\x00\x00\xb7\x00\x00\x00\x53\x00\x21\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x5d\x00\x21\x00\xca\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x53\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\xc9\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x53\x00\x1e\x00\x1f\x00\x00\x00\x21\x00\xc8\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x53\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\xc7\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x53\x00\x1e\x00\x1f\x00\x00\x00\x21\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\xe5\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x21\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\xe4\x00\xb0\x00\x1c\x00\x1d\x00\x1c\x00\x1e\x00\x1f\x00\xac\x00\x5e\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00\xab\x00\x5e\x00\x5f\x00\x00\x00\x60\x00\x9f\x00\x1c\x00\xa0\x00\x00\x00\x5f\x00\x5e\x00\x60\x00\x01\x01\x1c\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5f\x00\x00\x00\x60\x00\xff\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x60\x00\xfd\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x00\x00\x00\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#+happyTable = HappyA# "\x00\x00\x50\x00\xdf\x00\x2a\x01\x2c\x00\x2d\x00\xc6\x00\xbe\x00\xee\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x83\x00\xa5\x00\x0f\x01\x34\x00\xc0\x00\xda\x00\x4d\x00\x1c\x00\xa6\x00\x35\x00\x36\x00\x5e\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xa4\x00\xbf\x00\xd7\x00\x66\x00\x67\x00\xe0\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x4c\x00\xa8\x00\x44\x00\xaa\x00\x2b\x00\xab\x00\x2b\x01\x2c\x00\x2d\x00\x69\x00\xb2\x00\xc7\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x63\x00\x4a\x00\x4b\x00\x34\x00\x4c\x00\x4d\x00\xff\xff\xdb\x00\xc1\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x25\x01\x3c\x00\x26\x01\x63\x00\xd8\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x83\x00\x43\x00\x44\x00\xa9\x00\x45\x00\x6e\x00\x03\x01\x64\x00\x64\x00\x46\x00\x47\x00\x48\x00\x81\x00\xd4\x00\x49\x00\xa8\x00\x64\x00\xd5\x00\x65\x00\x4a\x00\x4b\x00\x2b\x00\x4c\x00\x4d\x00\x2c\x00\x2d\x00\x63\x00\x4c\x00\x4c\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x64\x00\x4c\x00\x65\x00\x34\x00\x1d\x00\x01\x01\x86\x00\x1c\x00\x1c\x01\x35\x00\x36\x00\x6a\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x6e\x00\x6f\x00\x6b\x00\x63\x00\x4c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\xa9\x00\x43\x00\x44\x00\x69\x00\x45\x00\x4c\x00\xff\x00\x64\x00\xee\x00\x65\x00\x47\x00\x48\x00\xbc\x00\x1c\x00\x1c\x00\xb9\x00\xff\xff\x83\x00\x84\x00\x4a\x00\x4b\x00\x50\x00\x4c\x00\x4d\x00\x2c\x00\x2d\x00\x1d\x01\x4c\x00\x11\x01\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x64\x00\x69\x00\x65\x00\x34\x00\x1c\x00\x6e\x00\x89\x00\xff\xff\x5e\x00\x35\x00\x36\x00\x64\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x5f\x00\xb6\x00\x60\x00\x61\x00\x4c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\xb5\x00\x43\x00\x44\x00\xaa\x00\x4c\x00\xab\x00\x6e\x00\xf0\x00\xa5\x00\x1c\x00\x47\x00\x48\x00\x87\x00\x83\x00\x99\x00\xa6\x00\x88\x00\x64\x00\xbd\x00\x4a\x00\x4b\x00\x50\x00\x4c\x00\x4d\x00\x2c\x00\x2d\x00\xb0\x00\xb9\xff\xad\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x1c\x00\xff\xff\x4c\x00\x34\x00\x83\x00\x8c\x00\xa7\x00\x1c\x00\xff\xff\x35\x00\x36\x00\x5e\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xa4\x00\x1c\x00\x1d\x00\x69\x00\x1e\x00\x1f\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x9c\x00\x1c\x00\x44\x00\x1c\x00\x1c\x00\x5e\x00\x9b\x00\x85\x00\x5e\x00\x21\x00\x22\x00\x55\x00\xb9\xff\x9f\x00\xa0\x00\x53\x00\x5f\x00\xff\xff\x65\x00\x4a\x00\x4b\x00\x50\x00\x4c\x00\x4d\x00\x2c\x00\x2d\x00\xff\xff\x81\x00\x4c\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x1c\x00\x1c\x00\x1d\x00\x34\x00\x1e\x00\x1f\x00\x4c\x00\x1c\x00\x4c\x00\x35\x00\x36\x00\x5e\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\xa4\x00\x1c\x00\xfa\x00\xb0\x00\x57\x00\x94\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\xff\xff\x50\x00\x44\x00\x1c\x00\x2c\x00\x2d\x00\xf9\x00\x5e\x00\xf8\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x9e\x00\xa8\x00\x1c\x00\x34\x00\x4a\x00\x4b\x00\x93\x00\x4c\x00\x4d\x00\x35\x00\x36\x00\xf7\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x1c\x00\xc2\x00\xf3\x00\xc3\x00\x5e\x00\xf2\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x6e\x00\x5f\x00\x44\x00\x60\x00\xb7\x00\x1c\x00\x4c\x00\x1c\x00\x1d\x00\x91\x00\x1e\x00\x1f\x00\xee\x00\x1c\x00\x1d\x00\xef\x00\x1e\x00\x1f\x00\x13\x01\x4a\x00\x4b\x00\xa9\x00\x4c\x00\x4d\x00\x1c\x00\x1d\x00\xa2\x00\x1e\x00\x1f\x00\x20\x00\xc4\x00\xc5\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x1c\x00\x1d\x00\x21\x00\x1e\x00\x1f\x00\xed\x00\xe2\x00\x1c\x00\x4e\x00\x1c\x00\x1d\x00\x8d\x00\x1e\x00\x1f\x00\x1c\x00\x1d\x00\x20\x00\x1e\x00\x1f\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xd2\x00\xb6\x00\x12\x01\x20\x00\x58\x00\x59\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x5a\x00\x1c\x00\x1d\x00\x1c\x00\x1e\x00\x1f\x00\x1c\x00\x6a\x00\x16\x01\x0d\x01\x83\x00\x8a\x00\x1c\x00\x1d\x00\x92\x00\x1e\x00\x1f\x00\x20\x00\x58\x00\xeb\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x5a\x00\x20\x00\x58\x00\xe8\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x5a\x00\x1c\x00\x1d\x00\x1c\x00\x1e\x00\x1f\x00\x1c\x00\x6a\x00\x0c\x01\x0b\x01\x83\x00\xef\x00\x1c\x00\x1d\x00\x90\x00\x1e\x00\x1f\x00\x20\x00\x58\x00\xdc\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xdd\x00\x20\x00\x5b\x00\x0a\x01\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x5a\x00\x1c\x00\x1d\x00\x06\x01\x1e\x00\x1f\x00\x1c\x00\x33\x01\x1c\x00\x31\x01\x5e\x00\x2f\x01\x1c\x00\x1d\x00\x2d\x01\x1e\x00\x1f\x00\x20\x00\x66\x00\x9d\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x4d\x00\x20\x00\x2c\x01\x23\x01\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xba\x00\x1c\x00\x1d\x00\x1f\x01\x1e\x00\x1f\x00\xd4\x00\x1e\x01\x1b\x01\x41\x01\xd5\x00\x40\x01\x1c\x00\x1d\x00\x3f\x01\x1e\x00\x1f\x00\x20\x00\x3e\x01\xd6\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xb3\x00\x20\x00\x3c\x01\x3b\x01\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xab\x00\x1c\x00\x1d\x00\x38\x01\x1e\x00\x1f\x00\x1c\x00\x1c\x00\x36\x01\x50\x01\x5e\x00\x5e\x00\x1c\x00\x1d\x00\x4e\x01\x1e\x00\x1f\x00\x20\x00\x9c\x00\xe3\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x98\x00\x20\x00\x4c\x01\x4b\x01\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x97\x00\x1c\x00\x1d\x00\x4a\x01\x1e\x00\x1f\x00\x1c\x00\x1c\x00\x49\x01\x47\x01\x5e\x00\x5e\x00\x1c\x00\x1d\x00\x48\x01\x1e\x00\x1f\x00\x20\x00\xe2\x00\xe0\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x96\x00\x20\x00\x44\x01\x43\x01\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x95\x00\x1c\x00\x1d\x00\x57\x01\x1e\x00\x1f\x00\x1c\x00\x1c\x00\x56\x01\x5b\x01\x5e\x00\x5e\x00\x1c\x00\x1d\x00\x5d\x01\x1e\x00\x1f\x00\x20\x00\xd8\x00\x07\x01\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xea\x00\x20\x00\x5c\x01\x5f\x01\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe9\x00\x1c\x00\x1d\x00\x61\x01\x1e\x00\x1f\x00\x81\x00\x7e\x00\x6c\x00\x7f\x00\x8f\x00\x8b\x00\x1c\x00\x1d\x00\x8e\x00\x1e\x00\x1f\x00\x20\x00\xf5\x00\xf4\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xe4\x00\x20\x00\xf3\x00\xfc\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xdb\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x19\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x18\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x17\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x16\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x0d\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x08\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x06\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x04\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x03\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xfb\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xfa\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x31\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x2f\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x2d\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x27\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x26\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x23\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x21\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x20\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x1f\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x41\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x3c\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x39\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x38\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x36\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x34\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x33\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x4e\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x4c\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x45\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x44\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x54\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x51\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x50\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x59\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x58\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x5d\x01\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x5f\x01\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x50\x00\x51\x00\x27\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x50\x00\xd1\x00\x27\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x50\x00\xc8\x00\x27\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x50\x00\xc7\x00\x27\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x50\x00\x14\x01\x27\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x50\x00\x13\x01\x27\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x50\x00\x57\x01\x27\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x50\x00\x53\x01\x27\x00\x20\x00\x00\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x50\x00\x52\x01\x27\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x21\x00\x22\x00\x23\x00\x24\x00\x52\x00\x00\x00\x53\x00\x21\x00\x22\x00\x23\x00\x24\x00\xe5\x00\x00\x00\x53\x00\x21\x00\x22\x00\x23\x00\x24\x00\xd0\x00\x00\x00\x53\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x21\x00\x22\x00\x23\x00\x24\x00\xcf\x00\x00\x00\x53\x00\x21\x00\x22\x00\x23\x00\x24\x00\x28\x01\x00\x00\x53\x00\x21\x00\x22\x00\x23\x00\x54\x00\x1c\x00\x1d\x00\x53\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x21\x00\x22\x00\x23\x00\xce\x00\x00\x00\x00\x00\x53\x00\x21\x00\x22\x00\x23\x00\xcd\x00\x5c\x00\x00\x00\x53\x00\x21\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x5d\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x21\x00\x56\x00\x00\x00\x00\x00\xb9\x00\x00\x00\x53\x00\x21\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x5d\x00\x21\x00\xcc\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x53\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\xcb\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x53\x00\x1e\x00\x1f\x00\x00\x00\x21\x00\xca\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x53\x00\x1e\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\xc9\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x53\x00\x1e\x00\x1f\x00\x00\x00\x21\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\xe7\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\x00\x00\x21\x00\x1c\x00\x1d\x00\x00\x00\x1e\x00\x1f\x00\xe6\x00\xb2\x00\x1c\x00\x1d\x00\x1c\x00\x1e\x00\x1f\x00\xae\x00\x5e\x00\x00\x00\x00\x00\x1c\x00\x00\x00\x00\x00\xad\x00\x5e\x00\x5f\x00\x00\x00\x60\x00\xa1\x00\x1c\x00\xa2\x00\x00\x00\x5f\x00\x5e\x00\x60\x00\x01\x01\x1c\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x5f\x00\x00\x00\x60\x00\xff\x00\x00\x00\x00\x00\x00\x00\x5f\x00\x00\x00\x60\x00\xfd\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x00\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# -happyReduceArr = Happy_Data_Array.array (26, 143) [+happyReduceArr = Happy_Data_Array.array (26, 144) [ (26 , happyReduce_26), (27 , happyReduce_27), (28 , happyReduce_28),@@ -418,7 +418,8 @@ (140 , happyReduce_140), (141 , happyReduce_141), (142 , happyReduce_142),- (143 , happyReduce_143)+ (143 , happyReduce_143),+ (144 , happyReduce_144) ] happy_n_terms = 82 :: Prelude.Int@@ -634,24 +635,26 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandVariables (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4)) ) `HappyStk` happyRest}}} -happyReduce_47 = happyReduce 6# 9# happyReduction_47-happyReduction_47 (happy_x_6 `HappyStk`- happy_x_5 `HappyStk`- happy_x_4 `HappyStk`- happy_x_3 `HappyStk`- happy_x_2 `HappyStk`- happy_x_1 `HappyStk`- happyRest)- = case happyOutTok happy_x_1 of { happy_var_1 -> +happyReduce_47 = happySpecReduce_2 9# happyReduction_47+happyReduction_47 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> case happyOut41 happy_x_2 of { (HappyWrap41 happy_var_2) -> - case happyOut39 happy_x_4 of { (HappyWrap39 happy_var_4) -> - case happyOut41 happy_x_6 of { (HappyWrap41 happy_var_6) -> happyIn38- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandSection (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6))- ) `HappyStk` happyRest}}}}+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandSection (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+ )}} -happyReduce_48 = happyReduce 8# 9# happyReduction_48-happyReduction_48 (happy_x_8 `HappyStk`+happyReduce_48 = happySpecReduce_2 9# happyReduction_48+happyReduction_48 happy_x_2+ happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + case happyOut41 happy_x_2 of { (HappyWrap41 happy_var_2) -> + happyIn38+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandSectionEnd (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2))+ )}}++happyReduce_49 = happyReduce 8# 9# happyReduction_49+happyReduction_49 (happy_x_8 `HappyStk` happy_x_7 `HappyStk` happy_x_6 `HappyStk` happy_x_5 `HappyStk`@@ -670,8 +673,8 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CommandDefine (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_4) (snd happy_var_6) (snd happy_var_8)) ) `HappyStk` happyRest}}}}}} -happyReduce_49 = happyReduce 7# 9# happyReduction_49-happyReduction_49 (happy_x_7 `HappyStk`+happyReduce_50 = happyReduce 7# 9# happyReduction_50+happyReduction_50 (happy_x_7 `HappyStk` happy_x_6 `HappyStk` happy_x_5 `HappyStk` happy_x_4 `HappyStk`@@ -688,8 +691,8 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandDefineNoParams (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_5) (snd happy_var_7)) ) `HappyStk` happyRest}}}}} -happyReduce_50 = happyReduce 8# 9# happyReduction_50-happyReduction_50 (happy_x_8 `HappyStk`+happyReduce_51 = happyReduce 8# 9# happyReduction_51+happyReduction_51 (happy_x_8 `HappyStk` happy_x_7 `HappyStk` happy_x_6 `HappyStk` happy_x_5 `HappyStk`@@ -708,8 +711,8 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandDef (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_4) (snd happy_var_6) (snd happy_var_8)) ) `HappyStk` happyRest}}}}}} -happyReduce_51 = happyReduce 7# 9# happyReduction_51-happyReduction_51 (happy_x_7 `HappyStk`+happyReduce_52 = happyReduce 7# 9# happyReduction_52+happyReduction_52 (happy_x_7 `HappyStk` happy_x_6 `HappyStk` happy_x_5 `HappyStk` happy_x_4 `HappyStk`@@ -726,13 +729,13 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.commandDefNoParams (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_3) (snd happy_var_5) (snd happy_var_7)) ) `HappyStk` happyRest}}}}} -happyReduce_52 = happySpecReduce_0 10# happyReduction_52-happyReduction_52 = happyIn39+happyReduce_53 = happySpecReduce_0 10# happyReduction_53+happyReduction_53 = happyIn39 ((Language.Rzk.Syntax.Abs.BNFC'NoPosition, []) ) -happyReduce_53 = happySpecReduce_3 10# happyReduction_53-happyReduction_53 happy_x_3+happyReduce_54 = happySpecReduce_3 10# happyReduction_54+happyReduction_54 happy_x_3 happy_x_2 happy_x_1 = case happyOut38 happy_x_1 of { (HappyWrap38 happy_var_1) -> @@ -741,8 +744,8 @@ ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_3)) )}} -happyReduce_54 = happyReduce 4# 11# happyReduction_54-happyReduction_54 (happy_x_4 `HappyStk`+happyReduce_55 = happyReduce 4# 11# happyReduction_55+happyReduction_55 (happy_x_4 `HappyStk` happy_x_3 `HappyStk` happy_x_2 `HappyStk` happy_x_1 `HappyStk`@@ -753,39 +756,39 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.DeclUsedVars (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3)) ) `HappyStk` happyRest}} -happyReduce_55 = happySpecReduce_0 11# happyReduction_55-happyReduction_55 = happyIn40+happyReduce_56 = happySpecReduce_0 11# happyReduction_56+happyReduction_56 = happyIn40 ((Language.Rzk.Syntax.Abs.BNFC'NoPosition, Language.Rzk.Syntax.Abs.noDeclUsedVars Language.Rzk.Syntax.Abs.BNFC'NoPosition) ) -happyReduce_56 = happySpecReduce_0 12# happyReduction_56-happyReduction_56 = happyIn41+happyReduce_57 = happySpecReduce_0 12# happyReduction_57+happyReduction_57 = happyIn41 ((Language.Rzk.Syntax.Abs.BNFC'NoPosition, Language.Rzk.Syntax.Abs.NoSectionName Language.Rzk.Syntax.Abs.BNFC'NoPosition) ) -happyReduce_57 = happySpecReduce_1 12# happyReduction_57-happyReduction_57 happy_x_1+happyReduce_58 = happySpecReduce_1 12# happyReduction_58+happyReduction_58 happy_x_1 = case happyOut34 happy_x_1 of { (HappyWrap34 happy_var_1) -> happyIn41 ((fst happy_var_1, Language.Rzk.Syntax.Abs.SomeSectionName (fst happy_var_1) (snd happy_var_1)) )} -happyReduce_58 = happySpecReduce_1 13# happyReduction_58-happyReduction_58 happy_x_1+happyReduce_59 = happySpecReduce_1 13# happyReduction_59+happyReduction_59 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn42 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.PatternUnit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1))) )} -happyReduce_59 = happySpecReduce_1 13# happyReduction_59-happyReduction_59 happy_x_1+happyReduce_60 = happySpecReduce_1 13# happyReduction_60+happyReduction_60 happy_x_1 = case happyOut34 happy_x_1 of { (HappyWrap34 happy_var_1) -> happyIn42 ((fst happy_var_1, Language.Rzk.Syntax.Abs.PatternVar (fst happy_var_1) (snd happy_var_1)) )} -happyReduce_60 = happyReduce 5# 13# happyReduction_60-happyReduction_60 (happy_x_5 `HappyStk`+happyReduce_61 = happyReduce 5# 13# happyReduction_61+happyReduction_61 (happy_x_5 `HappyStk` happy_x_4 `HappyStk` happy_x_3 `HappyStk` happy_x_2 `HappyStk`@@ -798,15 +801,15 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.PatternPair (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4)) ) `HappyStk` happyRest}}} -happyReduce_61 = happySpecReduce_1 14# happyReduction_61-happyReduction_61 happy_x_1+happyReduce_62 = happySpecReduce_1 14# happyReduction_62+happyReduction_62 happy_x_1 = case happyOut42 happy_x_1 of { (HappyWrap42 happy_var_1) -> happyIn43 ((fst happy_var_1, (:[]) (snd happy_var_1)) )} -happyReduce_62 = happySpecReduce_2 14# happyReduction_62-happyReduction_62 happy_x_2+happyReduce_63 = happySpecReduce_2 14# happyReduction_63+happyReduction_63 happy_x_2 happy_x_1 = case happyOut42 happy_x_1 of { (HappyWrap42 happy_var_1) -> case happyOut43 happy_x_2 of { (HappyWrap43 happy_var_2) -> @@ -814,15 +817,15 @@ ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_2)) )}} -happyReduce_63 = happySpecReduce_1 15# happyReduction_63-happyReduction_63 happy_x_1+happyReduce_64 = happySpecReduce_1 15# happyReduction_64+happyReduction_64 happy_x_1 = case happyOut42 happy_x_1 of { (HappyWrap42 happy_var_1) -> happyIn44 ((fst happy_var_1, Language.Rzk.Syntax.Abs.ParamPattern (fst happy_var_1) (snd happy_var_1)) )} -happyReduce_64 = happyReduce 5# 15# happyReduction_64-happyReduction_64 (happy_x_5 `HappyStk`+happyReduce_65 = happyReduce 5# 15# happyReduction_65+happyReduction_65 (happy_x_5 `HappyStk` happy_x_4 `HappyStk` happy_x_3 `HappyStk` happy_x_2 `HappyStk`@@ -835,8 +838,8 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamPatternType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4)) ) `HappyStk` happyRest}}} -happyReduce_65 = happyReduce 7# 15# happyReduction_65-happyReduction_65 (happy_x_7 `HappyStk`+happyReduce_66 = happyReduce 7# 15# happyReduction_66+happyReduction_66 (happy_x_7 `HappyStk` happy_x_6 `HappyStk` happy_x_5 `HappyStk` happy_x_4 `HappyStk`@@ -852,8 +855,8 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamPatternShape (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6)) ) `HappyStk` happyRest}}}} -happyReduce_66 = happyReduce 7# 15# happyReduction_66-happyReduction_66 (happy_x_7 `HappyStk`+happyReduce_67 = happyReduce 7# 15# happyReduction_67+happyReduction_67 (happy_x_7 `HappyStk` happy_x_6 `HappyStk` happy_x_5 `HappyStk` happy_x_4 `HappyStk`@@ -869,15 +872,15 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamPatternShapeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6)) ) `HappyStk` happyRest}}}} -happyReduce_67 = happySpecReduce_1 16# happyReduction_67-happyReduction_67 happy_x_1+happyReduce_68 = happySpecReduce_1 16# happyReduction_68+happyReduction_68 happy_x_1 = case happyOut44 happy_x_1 of { (HappyWrap44 happy_var_1) -> happyIn45 ((fst happy_var_1, (:[]) (snd happy_var_1)) )} -happyReduce_68 = happySpecReduce_2 16# happyReduction_68-happyReduction_68 happy_x_2+happyReduce_69 = happySpecReduce_2 16# happyReduction_69+happyReduction_69 happy_x_2 happy_x_1 = case happyOut44 happy_x_1 of { (HappyWrap44 happy_var_1) -> case happyOut45 happy_x_2 of { (HappyWrap45 happy_var_2) -> @@ -885,15 +888,15 @@ ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_2)) )}} -happyReduce_69 = happySpecReduce_1 17# happyReduction_69-happyReduction_69 happy_x_1+happyReduce_70 = happySpecReduce_1 17# happyReduction_70+happyReduction_70 happy_x_1 = case happyOut55 happy_x_1 of { (HappyWrap55 happy_var_1) -> happyIn46 ((fst happy_var_1, Language.Rzk.Syntax.Abs.ParamType (fst happy_var_1) (snd happy_var_1)) )} -happyReduce_70 = happyReduce 5# 17# happyReduction_70-happyReduction_70 (happy_x_5 `HappyStk`+happyReduce_71 = happyReduce 5# 17# happyReduction_71+happyReduction_71 (happy_x_5 `HappyStk` happy_x_4 `HappyStk` happy_x_3 `HappyStk` happy_x_2 `HappyStk`@@ -906,8 +909,8 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamTermType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4)) ) `HappyStk` happyRest}}} -happyReduce_71 = happyReduce 7# 17# happyReduction_71-happyReduction_71 (happy_x_7 `HappyStk`+happyReduce_72 = happyReduce 7# 17# happyReduction_72+happyReduction_72 (happy_x_7 `HappyStk` happy_x_6 `HappyStk` happy_x_5 `HappyStk` happy_x_4 `HappyStk`@@ -923,8 +926,8 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamTermShape (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6)) ) `HappyStk` happyRest}}}} -happyReduce_72 = happyReduce 5# 17# happyReduction_72-happyReduction_72 (happy_x_5 `HappyStk`+happyReduce_73 = happyReduce 5# 17# happyReduction_73+happyReduction_73 (happy_x_5 `HappyStk` happy_x_4 `HappyStk` happy_x_3 `HappyStk` happy_x_2 `HappyStk`@@ -937,8 +940,8 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamTermTypeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4)) ) `HappyStk` happyRest}}} -happyReduce_73 = happyReduce 9# 17# happyReduction_73-happyReduction_73 (happy_x_9 `HappyStk`+happyReduce_74 = happyReduce 9# 17# happyReduction_74+happyReduction_74 (happy_x_9 `HappyStk` happy_x_8 `HappyStk` happy_x_7 `HappyStk` happy_x_6 `HappyStk`@@ -956,8 +959,8 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ParamVarShapeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8)) ) `HappyStk` happyRest}}}} -happyReduce_74 = happyReduce 7# 17# happyReduction_74-happyReduction_74 (happy_x_7 `HappyStk`+happyReduce_75 = happyReduce 7# 17# happyReduction_75+happyReduction_75 (happy_x_7 `HappyStk` happy_x_6 `HappyStk` happy_x_5 `HappyStk` happy_x_4 `HappyStk`@@ -973,8 +976,8 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.paramVarShapeDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4) (snd happy_var_6)) ) `HappyStk` happyRest}}}} -happyReduce_75 = happySpecReduce_3 18# happyReduction_75-happyReduction_75 happy_x_3+happyReduce_76 = happySpecReduce_3 18# happyReduction_76+happyReduction_76 happy_x_3 happy_x_2 happy_x_1 = case happyOut56 happy_x_1 of { (HappyWrap56 happy_var_1) -> @@ -983,8 +986,8 @@ ((fst happy_var_1, Language.Rzk.Syntax.Abs.Restriction (fst happy_var_1) (snd happy_var_1) (snd happy_var_3)) )}} -happyReduce_76 = happySpecReduce_3 18# happyReduction_76-happyReduction_76 happy_x_3+happyReduce_77 = happySpecReduce_3 18# happyReduction_77+happyReduction_77 happy_x_3 happy_x_2 happy_x_1 = case happyOut56 happy_x_1 of { (HappyWrap56 happy_var_1) -> @@ -993,15 +996,15 @@ ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_Restriction (fst happy_var_1) (snd happy_var_1) (snd happy_var_3)) )}} -happyReduce_77 = happySpecReduce_1 19# happyReduction_77-happyReduction_77 happy_x_1+happyReduce_78 = happySpecReduce_1 19# happyReduction_78+happyReduction_78 happy_x_1 = case happyOut47 happy_x_1 of { (HappyWrap47 happy_var_1) -> happyIn48 ((fst happy_var_1, (:[]) (snd happy_var_1)) )} -happyReduce_78 = happySpecReduce_3 19# happyReduction_78-happyReduction_78 happy_x_3+happyReduce_79 = happySpecReduce_3 19# happyReduction_79+happyReduction_79 happy_x_3 happy_x_2 happy_x_1 = case happyOut47 happy_x_1 of { (HappyWrap47 happy_var_1) -> @@ -1010,85 +1013,85 @@ ((fst happy_var_1, (:) (snd happy_var_1) (snd happy_var_3)) )}} -happyReduce_79 = happySpecReduce_1 20# happyReduction_79-happyReduction_79 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn49- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Universe (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}- happyReduce_80 = happySpecReduce_1 20# happyReduction_80 happyReduction_80 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn49- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.UniverseCube (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Universe (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1))) )} happyReduce_81 = happySpecReduce_1 20# happyReduction_81 happyReduction_81 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn49- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.UniverseTope (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.UniverseCube (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1))) )} happyReduce_82 = happySpecReduce_1 20# happyReduction_82 happyReduction_82 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn49- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeUnit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.UniverseTope (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1))) )} happyReduce_83 = happySpecReduce_1 20# happyReduction_83 happyReduction_83 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn49- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeUnitStar (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeUnit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1))) )} happyReduce_84 = happySpecReduce_1 20# happyReduction_84 happyReduction_84 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn49- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Cube2 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.CubeUnitStar (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1))) )} happyReduce_85 = happySpecReduce_1 20# happyReduction_85 happyReduction_85 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn49- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Cube2_0 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Cube2 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1))) )} happyReduce_86 = happySpecReduce_1 20# happyReduction_86 happyReduction_86 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn49- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Cube2_1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Cube2_0 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1))) )} happyReduce_87 = happySpecReduce_1 20# happyReduction_87 happyReduction_87 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn49- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TopeTop (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Cube2_1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1))) )} happyReduce_88 = happySpecReduce_1 20# happyReduction_88 happyReduction_88 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn49- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TopeBottom (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TopeTop (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1))) )} happyReduce_89 = happySpecReduce_1 20# happyReduction_89 happyReduction_89 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn49+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TopeBottom (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_90 = happySpecReduce_1 20# happyReduction_90+happyReduction_90 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn49 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.RecBottom (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1))) )} -happyReduce_90 = happyReduce 4# 20# happyReduction_90-happyReduction_90 (happy_x_4 `HappyStk`+happyReduce_91 = happyReduce 4# 20# happyReduction_91+happyReduction_91 (happy_x_4 `HappyStk` happy_x_3 `HappyStk` happy_x_2 `HappyStk` happy_x_1 `HappyStk`@@ -1099,8 +1102,8 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.RecOr (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3)) ) `HappyStk` happyRest}} -happyReduce_91 = happyReduce 10# 20# happyReduction_91-happyReduction_91 (happy_x_10 `HappyStk`+happyReduce_92 = happyReduce 10# 20# happyReduction_92+happyReduction_92 (happy_x_10 `HappyStk` happy_x_9 `HappyStk` happy_x_8 `HappyStk` happy_x_7 `HappyStk`@@ -1120,15 +1123,15 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.RecOrDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_7) (snd happy_var_9)) ) `HappyStk` happyRest}}}}} -happyReduce_92 = happySpecReduce_1 20# happyReduction_92-happyReduction_92 happy_x_1+happyReduce_93 = happySpecReduce_1 20# happyReduction_93+happyReduction_93 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn49 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeUnit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1))) )} -happyReduce_93 = happyReduce 5# 20# happyReduction_93-happyReduction_93 (happy_x_5 `HappyStk`+happyReduce_94 = happyReduce 5# 20# happyReduction_94+happyReduction_94 (happy_x_5 `HappyStk` happy_x_4 `HappyStk` happy_x_3 `HappyStk` happy_x_2 `HappyStk`@@ -1141,8 +1144,8 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeExtensionDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4)) ) `HappyStk` happyRest}}} -happyReduce_94 = happyReduce 5# 20# happyReduction_94-happyReduction_94 (happy_x_5 `HappyStk`+happyReduce_95 = happyReduce 5# 20# happyReduction_95+happyReduction_95 (happy_x_5 `HappyStk` happy_x_4 `HappyStk` happy_x_3 `HappyStk` happy_x_2 `HappyStk`@@ -1155,22 +1158,22 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Pair (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4)) ) `HappyStk` happyRest}}} -happyReduce_95 = happySpecReduce_1 20# happyReduction_95-happyReduction_95 happy_x_1+happyReduce_96 = happySpecReduce_1 20# happyReduction_96+happyReduction_96 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn49 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Unit (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1))) )} -happyReduce_96 = happySpecReduce_1 20# happyReduction_96-happyReduction_96 happy_x_1+happyReduce_97 = happySpecReduce_1 20# happyReduction_97+happyReduction_97 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn49 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Refl (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1))) )} -happyReduce_97 = happySpecReduce_3 20# happyReduction_97-happyReduction_97 happy_x_3+happyReduce_98 = happySpecReduce_3 20# happyReduction_98+happyReduction_98 happy_x_3 happy_x_2 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> @@ -1179,8 +1182,8 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ReflTerm (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2)) )}} -happyReduce_98 = happyReduce 5# 20# happyReduction_98-happyReduction_98 (happy_x_5 `HappyStk`+happyReduce_99 = happyReduce 5# 20# happyReduction_99+happyReduction_99 (happy_x_5 `HappyStk` happy_x_4 `HappyStk` happy_x_3 `HappyStk` happy_x_2 `HappyStk`@@ -1193,8 +1196,8 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ReflTermType (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4)) ) `HappyStk` happyRest}}} -happyReduce_99 = happyReduce 14# 20# happyReduction_99-happyReduction_99 (happy_x_14 `HappyStk`+happyReduce_100 = happyReduce 14# 20# happyReduction_100+happyReduction_100 (happy_x_14 `HappyStk` happy_x_13 `HappyStk` happy_x_12 `HappyStk` happy_x_11 `HappyStk`@@ -1220,22 +1223,22 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.IdJ (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_7) (snd happy_var_9) (snd happy_var_11) (snd happy_var_13)) ) `HappyStk` happyRest}}}}}}} -happyReduce_100 = happySpecReduce_1 20# happyReduction_100-happyReduction_100 happy_x_1+happyReduce_101 = happySpecReduce_1 20# happyReduction_101+happyReduction_101 happy_x_1 = case happyOut33 happy_x_1 of { (HappyWrap33 happy_var_1) -> happyIn49 ((fst happy_var_1, Language.Rzk.Syntax.Abs.Hole (fst happy_var_1) (snd happy_var_1)) )} -happyReduce_101 = happySpecReduce_1 20# happyReduction_101-happyReduction_101 happy_x_1+happyReduce_102 = happySpecReduce_1 20# happyReduction_102+happyReduction_102 happy_x_1 = case happyOut34 happy_x_1 of { (HappyWrap34 happy_var_1) -> happyIn49 ((fst happy_var_1, Language.Rzk.Syntax.Abs.Var (fst happy_var_1) (snd happy_var_1)) )} -happyReduce_102 = happySpecReduce_3 20# happyReduction_102-happyReduction_102 happy_x_3+happyReduce_103 = happySpecReduce_3 20# happyReduction_103+happyReduction_103 happy_x_3 happy_x_2 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> @@ -1244,43 +1247,43 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), (snd happy_var_2)) )}} -happyReduce_103 = happySpecReduce_1 20# happyReduction_103-happyReduction_103 happy_x_1- = case happyOutTok happy_x_1 of { happy_var_1 -> - happyIn49- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_CubeUnitStar (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))- )}- happyReduce_104 = happySpecReduce_1 20# happyReduction_104 happyReduction_104 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn49- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Cube2_0 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_CubeUnitStar (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1))) )} happyReduce_105 = happySpecReduce_1 20# happyReduction_105 happyReduction_105 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn49- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Cube2_1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Cube2_0 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1))) )} happyReduce_106 = happySpecReduce_1 20# happyReduction_106 happyReduction_106 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn49- ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TopeTop (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Cube2_1 (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1))) )} happyReduce_107 = happySpecReduce_1 20# happyReduction_107 happyReduction_107 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> happyIn49+ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TopeTop (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)))+ )}++happyReduce_108 = happySpecReduce_1 20# happyReduction_108+happyReduction_108 happy_x_1+ = case happyOutTok happy_x_1 of { happy_var_1 -> + happyIn49 ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TopeBottom (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1))) )} -happyReduce_108 = happyReduce 5# 20# happyReduction_108-happyReduction_108 (happy_x_5 `HappyStk`+happyReduce_109 = happyReduce 5# 20# happyReduction_109+happyReduction_109 (happy_x_5 `HappyStk` happy_x_4 `HappyStk` happy_x_3 `HappyStk` happy_x_2 `HappyStk`@@ -1293,8 +1296,8 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TypeExtensionDeprecated (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4)) ) `HappyStk` happyRest}}} -happyReduce_109 = happySpecReduce_3 21# happyReduction_109-happyReduction_109 happy_x_3+happyReduce_110 = happySpecReduce_3 21# happyReduction_110+happyReduction_110 happy_x_3 happy_x_2 happy_x_1 = case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> @@ -1303,15 +1306,15 @@ ((fst happy_var_1, Language.Rzk.Syntax.Abs.CubeProduct (fst happy_var_1) (snd happy_var_1) (snd happy_var_3)) )}} -happyReduce_110 = happySpecReduce_1 21# happyReduction_110-happyReduction_110 happy_x_1+happyReduce_111 = happySpecReduce_1 21# happyReduction_111+happyReduction_111 happy_x_1 = case happyOut55 happy_x_1 of { (HappyWrap55 happy_var_1) -> happyIn50 ((fst happy_var_1, (snd happy_var_1)) )} -happyReduce_111 = happySpecReduce_3 21# happyReduction_111-happyReduction_111 happy_x_3+happyReduce_112 = happySpecReduce_3 21# happyReduction_112+happyReduction_112 happy_x_3 happy_x_2 happy_x_1 = case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> @@ -1320,8 +1323,8 @@ ((fst happy_var_1, Language.Rzk.Syntax.Abs.ascii_CubeProduct (fst happy_var_1) (snd happy_var_1) (snd happy_var_3)) )}} -happyReduce_112 = happySpecReduce_3 22# happyReduction_112-happyReduction_112 happy_x_3+happyReduce_113 = happySpecReduce_3 22# happyReduction_113+happyReduction_113 happy_x_3 happy_x_2 happy_x_1 = case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> @@ -1330,8 +1333,8 @@ ((fst happy_var_1, Language.Rzk.Syntax.Abs.TopeEQ (fst happy_var_1) (snd happy_var_1) (snd happy_var_3)) )}} -happyReduce_113 = happySpecReduce_3 22# happyReduction_113-happyReduction_113 happy_x_3+happyReduce_114 = happySpecReduce_3 22# happyReduction_114+happyReduction_114 happy_x_3 happy_x_2 happy_x_1 = case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> @@ -1340,15 +1343,15 @@ ((fst happy_var_1, Language.Rzk.Syntax.Abs.TopeLEQ (fst happy_var_1) (snd happy_var_1) (snd happy_var_3)) )}} -happyReduce_114 = happySpecReduce_1 22# happyReduction_114-happyReduction_114 happy_x_1+happyReduce_115 = happySpecReduce_1 22# happyReduction_115+happyReduction_115 happy_x_1 = case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> happyIn51 ((fst happy_var_1, (snd happy_var_1)) )} -happyReduce_115 = happySpecReduce_3 22# happyReduction_115-happyReduction_115 happy_x_3+happyReduce_116 = happySpecReduce_3 22# happyReduction_116+happyReduction_116 happy_x_3 happy_x_2 happy_x_1 = case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> @@ -1357,8 +1360,8 @@ ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TopeEQ (fst happy_var_1) (snd happy_var_1) (snd happy_var_3)) )}} -happyReduce_116 = happySpecReduce_3 22# happyReduction_116-happyReduction_116 happy_x_3+happyReduce_117 = happySpecReduce_3 22# happyReduction_117+happyReduction_117 happy_x_3 happy_x_2 happy_x_1 = case happyOut50 happy_x_1 of { (HappyWrap50 happy_var_1) -> @@ -1367,8 +1370,8 @@ ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TopeLEQ (fst happy_var_1) (snd happy_var_1) (snd happy_var_3)) )}} -happyReduce_117 = happySpecReduce_3 23# happyReduction_117-happyReduction_117 happy_x_3+happyReduce_118 = happySpecReduce_3 23# happyReduction_118+happyReduction_118 happy_x_3 happy_x_2 happy_x_1 = case happyOut51 happy_x_1 of { (HappyWrap51 happy_var_1) -> @@ -1377,15 +1380,15 @@ ((fst happy_var_1, Language.Rzk.Syntax.Abs.TopeAnd (fst happy_var_1) (snd happy_var_1) (snd happy_var_3)) )}} -happyReduce_118 = happySpecReduce_1 23# happyReduction_118-happyReduction_118 happy_x_1+happyReduce_119 = happySpecReduce_1 23# happyReduction_119+happyReduction_119 happy_x_1 = case happyOut51 happy_x_1 of { (HappyWrap51 happy_var_1) -> happyIn52 ((fst happy_var_1, (snd happy_var_1)) )} -happyReduce_119 = happySpecReduce_3 23# happyReduction_119-happyReduction_119 happy_x_3+happyReduce_120 = happySpecReduce_3 23# happyReduction_120+happyReduction_120 happy_x_3 happy_x_2 happy_x_1 = case happyOut51 happy_x_1 of { (HappyWrap51 happy_var_1) -> @@ -1394,8 +1397,8 @@ ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TopeAnd (fst happy_var_1) (snd happy_var_1) (snd happy_var_3)) )}} -happyReduce_120 = happySpecReduce_3 24# happyReduction_120-happyReduction_120 happy_x_3+happyReduce_121 = happySpecReduce_3 24# happyReduction_121+happyReduction_121 happy_x_3 happy_x_2 happy_x_1 = case happyOut52 happy_x_1 of { (HappyWrap52 happy_var_1) -> @@ -1404,15 +1407,15 @@ ((fst happy_var_1, Language.Rzk.Syntax.Abs.TopeOr (fst happy_var_1) (snd happy_var_1) (snd happy_var_3)) )}} -happyReduce_121 = happySpecReduce_1 24# happyReduction_121-happyReduction_121 happy_x_1+happyReduce_122 = happySpecReduce_1 24# happyReduction_122+happyReduction_122 happy_x_1 = case happyOut52 happy_x_1 of { (HappyWrap52 happy_var_1) -> happyIn53 ((fst happy_var_1, (snd happy_var_1)) )} -happyReduce_122 = happySpecReduce_3 24# happyReduction_122-happyReduction_122 happy_x_3+happyReduce_123 = happySpecReduce_3 24# happyReduction_123+happyReduction_123 happy_x_3 happy_x_2 happy_x_1 = case happyOut52 happy_x_1 of { (HappyWrap52 happy_var_1) -> @@ -1421,8 +1424,8 @@ ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TopeOr (fst happy_var_1) (snd happy_var_1) (snd happy_var_3)) )}} -happyReduce_123 = happySpecReduce_3 25# happyReduction_123-happyReduction_123 happy_x_3+happyReduce_124 = happySpecReduce_3 25# happyReduction_124+happyReduction_124 happy_x_3 happy_x_2 happy_x_1 = case happyOut46 happy_x_1 of { (HappyWrap46 happy_var_1) -> @@ -1431,8 +1434,8 @@ ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeFun (fst happy_var_1) (snd happy_var_1) (snd happy_var_3)) )}} -happyReduce_124 = happyReduce 8# 25# happyReduction_124-happyReduction_124 (happy_x_8 `HappyStk`+happyReduce_125 = happyReduce 8# 25# happyReduction_125+happyReduction_125 (happy_x_8 `HappyStk` happy_x_7 `HappyStk` happy_x_6 `HappyStk` happy_x_5 `HappyStk`@@ -1449,8 +1452,8 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.TypeSigma (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8)) ) `HappyStk` happyRest}}}} -happyReduce_125 = happyReduce 5# 25# happyReduction_125-happyReduction_125 (happy_x_5 `HappyStk`+happyReduce_126 = happyReduce 5# 25# happyReduction_126+happyReduction_126 (happy_x_5 `HappyStk` happy_x_4 `HappyStk` happy_x_3 `HappyStk` happy_x_2 `HappyStk`@@ -1463,8 +1466,8 @@ ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeId (fst happy_var_1) (snd happy_var_1) (snd happy_var_3) (snd happy_var_5)) ) `HappyStk` happyRest}}} -happyReduce_126 = happySpecReduce_3 25# happyReduction_126-happyReduction_126 happy_x_3+happyReduce_127 = happySpecReduce_3 25# happyReduction_127+happyReduction_127 happy_x_3 happy_x_2 happy_x_1 = case happyOut53 happy_x_1 of { (HappyWrap53 happy_var_1) -> @@ -1473,8 +1476,8 @@ ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeIdSimple (fst happy_var_1) (snd happy_var_1) (snd happy_var_3)) )}} -happyReduce_127 = happyReduce 4# 25# happyReduction_127-happyReduction_127 (happy_x_4 `HappyStk`+happyReduce_128 = happyReduce 4# 25# happyReduction_128+happyReduction_128 (happy_x_4 `HappyStk` happy_x_3 `HappyStk` happy_x_2 `HappyStk` happy_x_1 `HappyStk`@@ -1486,15 +1489,15 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Lambda (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4)) ) `HappyStk` happyRest}}} -happyReduce_128 = happySpecReduce_1 25# happyReduction_128-happyReduction_128 happy_x_1+happyReduce_129 = happySpecReduce_1 25# happyReduction_129+happyReduction_129 happy_x_1 = case happyOut53 happy_x_1 of { (HappyWrap53 happy_var_1) -> happyIn54 ((fst happy_var_1, (snd happy_var_1)) )} -happyReduce_129 = happySpecReduce_3 25# happyReduction_129-happyReduction_129 happy_x_3+happyReduce_130 = happySpecReduce_3 25# happyReduction_130+happyReduction_130 happy_x_3 happy_x_2 happy_x_1 = case happyOut46 happy_x_1 of { (HappyWrap46 happy_var_1) -> @@ -1503,8 +1506,8 @@ ((fst happy_var_1, Language.Rzk.Syntax.Abs.ASCII_TypeFun (fst happy_var_1) (snd happy_var_1) (snd happy_var_3)) )}} -happyReduce_130 = happyReduce 8# 25# happyReduction_130-happyReduction_130 (happy_x_8 `HappyStk`+happyReduce_131 = happyReduce 8# 25# happyReduction_131+happyReduction_131 (happy_x_8 `HappyStk` happy_x_7 `HappyStk` happy_x_6 `HappyStk` happy_x_5 `HappyStk`@@ -1521,8 +1524,8 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_TypeSigma (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8)) ) `HappyStk` happyRest}}}} -happyReduce_131 = happyReduce 4# 25# happyReduction_131-happyReduction_131 (happy_x_4 `HappyStk`+happyReduce_132 = happyReduce 4# 25# happyReduction_132+happyReduction_132 (happy_x_4 `HappyStk` happy_x_3 `HappyStk` happy_x_2 `HappyStk` happy_x_1 `HappyStk`@@ -1534,8 +1537,8 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Lambda (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2) (snd happy_var_4)) ) `HappyStk` happyRest}}} -happyReduce_132 = happyReduce 8# 25# happyReduction_132-happyReduction_132 (happy_x_8 `HappyStk`+happyReduce_133 = happyReduce 8# 25# happyReduction_133+happyReduction_133 (happy_x_8 `HappyStk` happy_x_7 `HappyStk` happy_x_6 `HappyStk` happy_x_5 `HappyStk`@@ -1552,8 +1555,8 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.unicode_TypeSigmaAlt (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_3) (snd happy_var_5) (snd happy_var_8)) ) `HappyStk` happyRest}}}} -happyReduce_133 = happyReduce 4# 26# happyReduction_133-happyReduction_133 (happy_x_4 `HappyStk`+happyReduce_134 = happyReduce 4# 26# happyReduction_134+happyReduction_134 (happy_x_4 `HappyStk` happy_x_3 `HappyStk` happy_x_2 `HappyStk` happy_x_1 `HappyStk`@@ -1564,8 +1567,8 @@ ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeRestricted (fst happy_var_1) (snd happy_var_1) (snd happy_var_3)) ) `HappyStk` happyRest}} -happyReduce_134 = happySpecReduce_2 26# happyReduction_134-happyReduction_134 happy_x_2+happyReduce_135 = happySpecReduce_2 26# happyReduction_135+happyReduction_135 happy_x_2 happy_x_1 = case happyOut55 happy_x_1 of { (HappyWrap55 happy_var_1) -> case happyOut49 happy_x_2 of { (HappyWrap49 happy_var_2) -> @@ -1573,8 +1576,8 @@ ((fst happy_var_1, Language.Rzk.Syntax.Abs.App (fst happy_var_1) (snd happy_var_1) (snd happy_var_2)) )}} -happyReduce_135 = happySpecReduce_2 26# happyReduction_135-happyReduction_135 happy_x_2+happyReduce_136 = happySpecReduce_2 26# happyReduction_136+happyReduction_136 happy_x_2 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> case happyOut49 happy_x_2 of { (HappyWrap49 happy_var_2) -> @@ -1582,8 +1585,8 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.First (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2)) )}} -happyReduce_136 = happySpecReduce_2 26# happyReduction_136-happyReduction_136 happy_x_2+happyReduce_137 = happySpecReduce_2 26# happyReduction_137+happyReduction_137 happy_x_2 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> case happyOut49 happy_x_2 of { (HappyWrap49 happy_var_2) -> @@ -1591,15 +1594,15 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.Second (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2)) )}} -happyReduce_137 = happySpecReduce_1 26# happyReduction_137-happyReduction_137 happy_x_1+happyReduce_138 = happySpecReduce_1 26# happyReduction_138+happyReduction_138 happy_x_1 = case happyOut49 happy_x_1 of { (HappyWrap49 happy_var_1) -> happyIn55 ((fst happy_var_1, (snd happy_var_1)) )} -happyReduce_138 = happySpecReduce_2 26# happyReduction_138-happyReduction_138 happy_x_2+happyReduce_139 = happySpecReduce_2 26# happyReduction_139+happyReduction_139 happy_x_2 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> case happyOut49 happy_x_2 of { (HappyWrap49 happy_var_2) -> @@ -1607,8 +1610,8 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_First (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2)) )}} -happyReduce_139 = happySpecReduce_2 26# happyReduction_139-happyReduction_139 happy_x_2+happyReduce_140 = happySpecReduce_2 26# happyReduction_140+happyReduction_140 happy_x_2 happy_x_1 = case happyOutTok happy_x_1 of { happy_var_1 -> case happyOut49 happy_x_2 of { (HappyWrap49 happy_var_2) -> @@ -1616,8 +1619,8 @@ ((uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1), Language.Rzk.Syntax.Abs.ASCII_Second (uncurry Language.Rzk.Syntax.Abs.BNFC'Position (tokenLineCol happy_var_1)) (snd happy_var_2)) )}} -happyReduce_140 = happySpecReduce_3 27# happyReduction_140-happyReduction_140 happy_x_3+happyReduce_141 = happySpecReduce_3 27# happyReduction_141+happyReduction_141 happy_x_3 happy_x_2 happy_x_1 = case happyOut53 happy_x_1 of { (HappyWrap53 happy_var_1) -> @@ -1626,22 +1629,22 @@ ((fst happy_var_1, Language.Rzk.Syntax.Abs.TypeAsc (fst happy_var_1) (snd happy_var_1) (snd happy_var_3)) )}} -happyReduce_141 = happySpecReduce_1 27# happyReduction_141-happyReduction_141 happy_x_1+happyReduce_142 = happySpecReduce_1 27# happyReduction_142+happyReduction_142 happy_x_1 = case happyOut54 happy_x_1 of { (HappyWrap54 happy_var_1) -> happyIn56 ((fst happy_var_1, (snd happy_var_1)) )} -happyReduce_142 = happySpecReduce_1 28# happyReduction_142-happyReduction_142 happy_x_1+happyReduce_143 = happySpecReduce_1 28# happyReduction_143+happyReduction_143 happy_x_1 = case happyOut56 happy_x_1 of { (HappyWrap56 happy_var_1) -> happyIn57 ((fst happy_var_1, (:[]) (snd happy_var_1)) )} -happyReduce_143 = happySpecReduce_3 28# happyReduction_143-happyReduction_143 happy_x_3+happyReduce_144 = happySpecReduce_3 28# happyReduction_144+happyReduction_144 happy_x_3 happy_x_2 happy_x_1 = case happyOut56 happy_x_1 of { (HappyWrap56 happy_var_1) ->
src/Language/Rzk/Syntax/Print.hs view
@@ -1,8 +1,8 @@ -- File generated by the BNF Converter (bnfc 2.9.4.1). -{-# LANGUAGE CPP #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE LambdaCase #-} #if __GLASGOW_HASKELL__ <= 708 {-# LANGUAGE OverlappingInstances #-} #endif@@ -11,13 +11,16 @@ module Language.Rzk.Syntax.Print where -import Data.Char (Char, isSpace)+import Prelude+ ( ($), (.)+ , Bool(..), (==), (<)+ , Int, Integer, Double, (+), (-), (*)+ , String, (++)+ , ShowS, showChar, showString+ , all, elem, foldr, id, map, null, replicate, shows, span+ )+import Data.Char ( Char, isSpace ) import qualified Language.Rzk.Syntax.Abs-import Prelude (Bool (..), Double, Int, Integer,- ShowS, String, all, elem, foldr, id,- map, null, replicate, showChar,- showString, shows, span, ($), (*),- (+), (++), (-), (.), (<), (==)) -- | The top-level printing method. @@ -40,9 +43,9 @@ rend i p = \case "[" :ts -> char '[' . rend i False ts "(" :ts -> char '(' . rend i False ts--- "{" :ts -> onNewLine i p . showChar '{' . new (i+1) ts--- "}" : ";":ts -> onNewLine (i-1) p . showString "};" . new (i-1) ts--- "}" :ts -> onNewLine (i-1) p . showChar '}' . new (i-1) ts+ "{" :ts -> onNewLine i p . showChar '{' . new (i+1) ts+ "}" : ";":ts -> onNewLine (i-1) p . showString "};" . new (i-1) ts+ "}" :ts -> onNewLine (i-1) p . showChar '}' . new (i-1) ts [";"] -> char ';' ";" :ts -> char ';' . new i ts t : ts@(s:_) | closingOrPunctuation s@@ -121,10 +124,10 @@ mkEsc :: Char -> Char -> ShowS mkEsc q = \case s | s == q -> showChar '\\' . showChar s- '\\' -> showString "\\\\"- '\n' -> showString "\\n"- '\t' -> showString "\\t"- s -> showChar s+ '\\' -> showString "\\\\"+ '\n' -> showString "\\n"+ '\t' -> showString "\\t"+ s -> showChar s prPrec :: Int -> Int -> Doc -> Doc prPrec i j = if j < i then parenth else id@@ -152,8 +155,8 @@ Language.Rzk.Syntax.Abs.VarIdent _ varidenttoken -> prPrec i 0 (concatD [prt 0 varidenttoken]) instance Print [Language.Rzk.Syntax.Abs.VarIdent' a] where- prt _ [] = concatD []- prt _ [x] = concatD [prt 0 x]+ prt _ [] = concatD []+ prt _ [x] = concatD [prt 0 x] prt _ (x:xs) = concatD [prt 0 x, prt 0 xs] instance Print (Language.Rzk.Syntax.Abs.LanguageDecl' a) where@@ -174,11 +177,12 @@ Language.Rzk.Syntax.Abs.CommandComputeNF _ term -> prPrec i 0 (concatD [doc (showString "#compute-nf"), prt 0 term]) Language.Rzk.Syntax.Abs.CommandPostulate _ varident declusedvars params term -> prPrec i 0 (concatD [doc (showString "#postulate"), prt 0 varident, prt 0 declusedvars, prt 0 params, doc (showString ":"), prt 0 term]) Language.Rzk.Syntax.Abs.CommandAssume _ varidents term -> prPrec i 0 (concatD [doc (showString "#assume"), prt 0 varidents, doc (showString ":"), prt 0 term])- Language.Rzk.Syntax.Abs.CommandSection _ sectionname1 commands sectionname2 -> prPrec i 0 (concatD [doc (showString "#section"), prt 0 sectionname1, doc (showString ";"), prt 0 commands, doc (showString "#end"), prt 0 sectionname2])+ Language.Rzk.Syntax.Abs.CommandSection _ sectionname -> prPrec i 0 (concatD [doc (showString "#section"), prt 0 sectionname])+ Language.Rzk.Syntax.Abs.CommandSectionEnd _ sectionname -> prPrec i 0 (concatD [doc (showString "#end"), prt 0 sectionname]) Language.Rzk.Syntax.Abs.CommandDefine _ varident declusedvars params term1 term2 -> prPrec i 0 (concatD [doc (showString "#define"), prt 0 varident, prt 0 declusedvars, prt 0 params, doc (showString ":"), prt 0 term1, doc (showString ":="), prt 0 term2]) instance Print [Language.Rzk.Syntax.Abs.Command' a] where- prt _ [] = concatD []+ prt _ [] = concatD [] prt _ (x:xs) = concatD [prt 0 x, doc (showString ";"), prt 0 xs] instance Print (Language.Rzk.Syntax.Abs.DeclUsedVars' a) where@@ -197,8 +201,8 @@ Language.Rzk.Syntax.Abs.PatternPair _ pattern_1 pattern_2 -> prPrec i 0 (concatD [doc (showString "("), prt 0 pattern_1, doc (showString ","), prt 0 pattern_2, doc (showString ")")]) instance Print [Language.Rzk.Syntax.Abs.Pattern' a] where- prt _ [] = concatD []- prt _ [x] = concatD [prt 0 x]+ prt _ [] = concatD []+ prt _ [x] = concatD [prt 0 x] prt _ (x:xs) = concatD [prt 0 x, prt 0 xs] instance Print (Language.Rzk.Syntax.Abs.Param' a) where@@ -209,8 +213,8 @@ Language.Rzk.Syntax.Abs.ParamPatternShapeDeprecated _ pattern_ term1 term2 -> prPrec i 0 (concatD [doc (showString "{"), prt 0 pattern_, doc (showString ":"), prt 0 term1, doc (showString "|"), prt 0 term2, doc (showString "}")]) instance Print [Language.Rzk.Syntax.Abs.Param' a] where- prt _ [] = concatD []- prt _ [x] = concatD [prt 0 x]+ prt _ [] = concatD []+ prt _ [x] = concatD [prt 0 x] prt _ (x:xs) = concatD [prt 0 x, prt 0 xs] instance Print (Language.Rzk.Syntax.Abs.ParamDecl' a) where@@ -227,8 +231,8 @@ Language.Rzk.Syntax.Abs.ASCII_Restriction _ term1 term2 -> prPrec i 0 (concatD [prt 0 term1, doc (showString "|->"), prt 0 term2]) instance Print [Language.Rzk.Syntax.Abs.Restriction' a] where- prt _ [] = concatD []- prt _ [x] = concatD [prt 0 x]+ prt _ [] = concatD []+ prt _ [x] = concatD [prt 0 x] prt _ (x:xs) = concatD [prt 0 x, doc (showString ","), prt 0 xs] instance Print (Language.Rzk.Syntax.Abs.Term' a) where@@ -288,6 +292,6 @@ Language.Rzk.Syntax.Abs.ASCII_Second _ term -> prPrec i 6 (concatD [doc (showString "second"), prt 7 term]) instance Print [Language.Rzk.Syntax.Abs.Term' a] where- prt _ [] = concatD []- prt _ [x] = concatD [prt 0 x]+ prt _ [] = concatD []+ prt _ [x] = concatD [prt 0 x] prt _ (x:xs) = concatD [prt 0 x, doc (showString ","), prt 0 xs]
+ src/Language/Rzk/VSCode/Env.hs view
@@ -0,0 +1,45 @@+module Language.Rzk.VSCode.Env where++import Control.Concurrent.STM+import Control.Monad.Reader+import Language.LSP.Server+import Rzk.TypeCheck (Decl')++type RzkTypecheckCache = [(FilePath, [Decl'])]++data RzkEnv = RzkEnv+ { rzkEnvTypecheckCache :: TVar RzkTypecheckCache+ }++defaultRzkEnv :: IO RzkEnv+defaultRzkEnv = do+ typecheckCache <- newTVarIO []+ return RzkEnv+ { rzkEnvTypecheckCache = typecheckCache }+++type LSP = LspT () (ReaderT RzkEnv IO)++-- | Override the cache with given typechecked modules.+cacheTypecheckedModules :: RzkTypecheckCache -> LSP ()+cacheTypecheckedModules cache = lift $ do+ typecheckCache <- asks rzkEnvTypecheckCache+ liftIO $ atomically $ do+ writeTVar typecheckCache cache++-- | Completely invalidate the cache of typechecked files.+resetCacheForAllFiles :: LSP ()+resetCacheForAllFiles = cacheTypecheckedModules []++-- | Invalidate the cache for a list of file paths.+resetCacheForFiles :: [FilePath] -> LSP ()+resetCacheForFiles paths = lift $ do+ typecheckCache <- asks rzkEnvTypecheckCache+ liftIO $ atomically $ do+ modifyTVar typecheckCache (takeWhile ((`notElem` paths) . fst))++-- | Get the current state of the cache.+getCachedTypecheckedModules :: LSP RzkTypecheckCache+getCachedTypecheckedModules = lift $ do+ typecheckCache <- asks rzkEnvTypecheckCache+ liftIO $ readTVarIO typecheckCache
+ src/Language/Rzk/VSCode/Handlers.hs view
@@ -0,0 +1,137 @@+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE TypeApplications #-}++module Language.Rzk.VSCode.Handlers where++import Control.Monad.Cont (MonadIO (liftIO), forM_)+import Data.List (sort, (\\))+import qualified Data.Text as T+import qualified Data.Yaml as Yaml+import Language.LSP.Diagnostics (partitionBySource)+import Language.LSP.Protocol.Message+import Language.LSP.Protocol.Types+import Language.LSP.Server+import System.FilePath ((</>))+import System.FilePath.Glob (compile, globDir)++import Data.Maybe (fromMaybe)+import Language.Rzk.Free.Syntax (VarIdent)+import Language.Rzk.Syntax (Module, parseModuleFile)+import Language.Rzk.VSCode.Env+import Language.Rzk.VSCode.State (ProjectConfig (include))+import Rzk.TypeCheck++-- | Given a list of file paths, reads them and parses them as Rzk modules,+-- returning the same list of file paths but with the parsed module (or parse error)+parseFiles :: [FilePath] -> IO [(FilePath, Either String Module)]+parseFiles [] = pure []+parseFiles (x:xs) = do+ errOrMod <- parseModuleFile x+ rest <- parseFiles xs+ return $ (x, errOrMod) : rest++-- | Given the list of possible modules returned by `parseFiles`, this segregates the errors+-- from the successfully parsed modules and returns them in separate lists so the errors+-- can be reported and the modules can be typechecked.+collectErrors :: [(FilePath, Either String Module)] -> ([(FilePath, String)], [(FilePath, Module)])+collectErrors [] = ([], [])+collectErrors ((path, result) : paths) =+ case result of+ Left err -> ((path, err) : errors, modules)+ Right module_ -> (errors, (path, module_) : modules)+ where+ (errors, modules) = collectErrors paths++-- | The maximum number of diagnostic messages to send to the client+maxDiagnosticCount :: Int+maxDiagnosticCount = 100++filePathToNormalizedUri :: FilePath -> NormalizedUri+filePathToNormalizedUri = toNormalizedUri . filePathToUri+++typecheckFromConfigFile :: LSP ()+typecheckFromConfigFile = do+ root <- getRootPath+ case root of+ Nothing -> do+ sendNotification SMethod_WindowShowMessage (ShowMessageParams MessageType_Warning "Cannot find the workspace root")+ Just rootPath -> do+ let rzkYamlPath = rootPath </> "rzk.yaml"+ eitherConfig <- liftIO $ Yaml.decodeFileEither @ProjectConfig rzkYamlPath+ case eitherConfig of+ Right config -> do+ rawPaths <- liftIO $ globDir (map compile (include config)) rootPath+ let paths = concatMap sort rawPaths++ cachedModules <- getCachedTypecheckedModules+ let cachedPaths = map fst cachedModules+ modifiedFiles = paths \\ cachedPaths++ (parseErrors, parsedModules) <- liftIO $ collectErrors <$> parseFiles modifiedFiles+ (typeErrors, _checkedModules) <- case defaultTypeCheck (typecheckModulesWithLocationIncremental cachedModules parsedModules) of+ Left err -> return ([err], []) -- sort of impossible+ Right (checkedModules, errors) -> do+ -- cache well-typed modules+ cacheTypecheckedModules checkedModules+ return (errors, checkedModules)++ -- Reset all published diags+ -- TODO: remove this after properly grouping by path below, after which there can be an empty list of errors+ forM_ paths $ \path -> do+ publishDiagnostics 0 (filePathToNormalizedUri path) Nothing (partitionBySource [])++ -- Report parse errors to the client+ forM_ parseErrors $ \(path, err) -> do+ publishDiagnostics maxDiagnosticCount (filePathToNormalizedUri path) Nothing (partitionBySource [diagnosticOfParseError err])++ -- TODO: collect all errors for one file in one list++ -- Report typechecking errors to the client+ forM_ typeErrors $ \err -> do+ let errPath = filepathOfTypeError err+ errDiagnostic = diagnosticOfTypeError err+ publishDiagnostics maxDiagnosticCount (filePathToNormalizedUri errPath) Nothing (partitionBySource [errDiagnostic])+ Left err -> do+ sendNotification SMethod_WindowShowMessage (ShowMessageParams MessageType_Warning (T.pack $ "Invalid or missing rzk.yaml: " ++ Yaml.prettyPrintParseException err))+ where+ filepathOfTypeError :: TypeErrorInScopedContext var -> FilePath+ filepathOfTypeError (PlainTypeError err) =+ case location (typeErrorContext err) >>= locationFilePath of+ Just path -> path+ _ -> error "the impossible happened! Please contact Abdelrahman immediately!!!"+ filepathOfTypeError (ScopedTypeError _orig err) = filepathOfTypeError err++ diagnosticOfTypeError :: TypeErrorInScopedContext VarIdent -> Diagnostic+ diagnosticOfTypeError err = Diagnostic+ (Range (Position line 0) (Position line 99)) -- 99 to reach end of line and be visible until we actually have information about it+ (Just DiagnosticSeverity_Error)+ (Just $ InR "type-error") -- diagnostic code+ Nothing -- diagonstic description+ (Just "rzk") -- A human-readable string describing the source of this diagnostic+ (T.pack msg)+ Nothing -- tags+ (Just []) -- related information+ Nothing -- data that is preserved between different calls+ where+ msg = ppTypeErrorInScopedContext' err++ extractLineNumber :: TypeErrorInScopedContext var -> Maybe Int+ extractLineNumber (PlainTypeError e) = do+ loc <- location (typeErrorContext e)+ lineNo <- locationLine loc+ return (lineNo - 1) -- VS Code indexes lines from 0, but locationLine starts with 1+ extractLineNumber (ScopedTypeError _ e) = extractLineNumber e++ line = fromIntegral $ fromMaybe 0 $ extractLineNumber err++ diagnosticOfParseError :: String -> Diagnostic+ diagnosticOfParseError err = Diagnostic (Range (Position 0 0) (Position 0 0))+ (Just DiagnosticSeverity_Error)+ (Just $ InR "parse-error")+ Nothing+ (Just "rzk")+ (T.pack err)+ Nothing+ (Just [])+ Nothing
+ src/Language/Rzk/VSCode/Lsp.hs view
@@ -0,0 +1,101 @@+{-# LANGUAGE DuplicateRecordFields #-}+{-# LANGUAGE OverloadedStrings #-}++module Language.Rzk.VSCode.Lsp where++import Control.Lens (_Just, to, (^.), (^..))+import Control.Monad.IO.Class+import Control.Monad.Reader+import Data.List (isSuffixOf)+import qualified Data.Text as T+import Language.LSP.Protocol.Lens (HasParams (params),+ HasTextDocument (textDocument),+ HasUri (uri), changes, uri)+import Language.LSP.Protocol.Message+import Language.LSP.Protocol.Types+import Language.LSP.Server+import Language.LSP.VFS (virtualFileText)++import Language.Rzk.Syntax (parseModule)+import Language.Rzk.VSCode.Env+import Language.Rzk.VSCode.Handlers+import Language.Rzk.VSCode.Tokenize (tokenizeModule)++-- | The maximum number of diagnostic messages to send to the client+maxDiagnosticCount :: Int+maxDiagnosticCount = 100++handlers :: Handlers LSP+handlers =+ mconcat+ [ notificationHandler SMethod_Initialized $ const typecheckFromConfigFile+ -- TODO: add logging+ -- Empty handlers to silence the errors+ , notificationHandler SMethod_TextDocumentDidOpen $ \_msg -> pure ()+ -- , requestHandler SMethod_TextDocumentFormatting $ \_req _res -> pure ()+ , notificationHandler SMethod_TextDocumentDidChange $ \_msg -> pure ()+ , notificationHandler SMethod_TextDocumentDidClose $ \_msg -> pure ()+ , notificationHandler SMethod_WorkspaceDidChangeWatchedFiles $ \msg -> do+ let modifiedPaths = msg ^.. params . changes . traverse . uri . to uriToFilePath . _Just+ if any ("rzk.yaml" `isSuffixOf`) modifiedPaths+ then resetCacheForAllFiles+ else resetCacheForFiles modifiedPaths+ -- TODO: see what files changed and typecheck them again+ -- Need to handle 3 events: added, changed, and deleted++ -- Currently, this is only sent for changes in `rzk.yaml`, so it makes sense to typecheck again (unconditionally)+ typecheckFromConfigFile+ , notificationHandler SMethod_TextDocumentDidSave $ \_msg -> do+ -- TODO: check if the file is included in the config's `include` list.+ -- If not (and not in `exclude`) either, issue a warning.+ return () -- FIXME: typecheck standalone files (if they are not a part of the project)+ -- , requestHandler SMethod_TextDocumentHover $ \req responder -> do+ -- TODO: Read from the list of symbols that is supposed to be cached by the typechecker+ -- let TRequestMessage _ _ _ (HoverParams _doc pos _workDone) = req+ -- Position _l _c' = pos+ -- rsp = Hover (InL ms) (Just range')+ -- ms = mkMarkdown "Hello world"+ -- range' = Range pos pos+ -- responder (Right $ InL rsp)+ , requestHandler SMethod_TextDocumentSemanticTokensFull $ \req responder -> do+ let doc = req ^. params . textDocument . uri . to toNormalizedUri+ mdoc <- getVirtualFile doc+ let possibleTokens = case virtualFileText <$> mdoc of+ Nothing -> Left "Failed to get file content"+ Just sourceCode -> tokenizeModule <$> parseModule (T.unpack sourceCode)+ case possibleTokens of+ Left _err -> do+ -- Failed to open the file or to tokenize+ return ()+ Right tokens -> do+ let encoded = encodeTokens defaultSemanticTokensLegend $ relativizeTokens tokens+ case encoded of+ Left _err -> do+ -- Failed to encode the tokens+ return ()+ Right list ->+ responder (Right (InL SemanticTokens { _resultId = Nothing, _data_ = list }))+ ]+++syncOptions :: TextDocumentSyncOptions+syncOptions = TextDocumentSyncOptions+ { _openClose = Just True+ , _change = Just TextDocumentSyncKind_Full+ , _willSave = Just False+ , _willSaveWaitUntil = Just False+ , _save = Just $ InR $ SaveOptions { _includeText = Just True }+ }++runLsp :: IO Int+runLsp = do+ rzkEnv <- defaultRzkEnv+ runServer $+ ServerDefinition+ { onConfigurationChange = const $ pure $ Right (),+ doInitialize = const . pure . Right,+ staticHandlers = const handlers,+ interpretHandler = \env -> Iso (flip runReaderT rzkEnv . runLspT env) liftIO,+ options = defaultOptions { optTextDocumentSync = Just syncOptions },+ defaultConfig = ()+ }
+ src/Language/Rzk/VSCode/State.hs view
@@ -0,0 +1,20 @@+{-# LANGUAGE OverloadedStrings #-}++module Language.Rzk.VSCode.State where++import Data.Yaml (FromJSON (..), (.!=), (.:), (.:?))+import qualified Data.Yaml as Y++data ProjectConfig = ProjectConfig+ { include :: [FilePath]+ , exclude :: [FilePath]+ } deriving (Eq, Show)++instance FromJSON ProjectConfig where+ parseJSON (Y.Object v) =+ ProjectConfig <$>+ v .: "include" <*>+ v .:? "exclude" .!= []+ parseJSON _ = fail "Expected config value to be an object"++-- TODO: Add a "ServerState" data structure for holding the typechecking cache
src/Language/Rzk/VSCode/Tokenize.hs view
@@ -1,22 +1,23 @@ {-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE RecordWildCards #-} module Language.Rzk.VSCode.Tokenize where +import Language.LSP.Protocol.Types (SemanticTokenAbsolute (..),+ SemanticTokenModifiers (..),+ SemanticTokenTypes (..)) import Language.Rzk.Syntax import Language.Rzk.Syntax.Print-import Language.Rzk.VSCode.Tokens -tokenizeModule :: Module -> [VSToken]+tokenizeModule :: Module -> [SemanticTokenAbsolute] tokenizeModule (Module _loc langDecl commands) = concat [ tokenizeLanguageDecl langDecl , foldMap tokenizeCommand commands ] -tokenizeLanguageDecl :: LanguageDecl -> [VSToken]+tokenizeLanguageDecl :: LanguageDecl -> [SemanticTokenAbsolute] tokenizeLanguageDecl _ = [] -tokenizeCommand :: Command -> [VSToken]+tokenizeCommand :: Command -> [SemanticTokenAbsolute] tokenizeCommand command = case command of CommandSetOption{} -> [] -- NOTE: fallback to TextMate CommandUnsetOption{} -> [] -- NOTE: fallback to TextMate@@ -26,24 +27,24 @@ CommandComputeWHNF _loc term -> tokenizeTerm term CommandPostulate _loc name _declUsedVars params type_ -> concat- [ mkToken name vs_function [vs_declaration]+ [ mkToken name SemanticTokenTypes_Function [SemanticTokenModifiers_Declaration] , foldMap tokenizeParam params , tokenizeTerm type_ ] CommandDefine _loc name _declUsedVars params type_ term -> concat- [ mkToken name vs_function [vs_declaration]+ [ mkToken name SemanticTokenTypes_Function [SemanticTokenModifiers_Declaration] , foldMap tokenizeParam params , foldMap tokenizeTerm [type_, term] ] CommandAssume _loc vars type_ -> concat- [ foldMap (\var -> mkToken var vs_parameter [vs_declaration]) vars+ [ foldMap (\var -> mkToken var SemanticTokenTypes_Parameter [SemanticTokenModifiers_Declaration]) vars , tokenizeTerm type_ ]- CommandSection _loc _nameStart commands _nameEnd ->- foldMap tokenizeCommand commands+ CommandSection _loc _nameStart -> []+ CommandSectionEnd _loc _nameEnd -> [] -tokenizeParam :: Param -> [VSToken]+tokenizeParam :: Param -> [SemanticTokenAbsolute] tokenizeParam = \case ParamPattern _loc pat -> tokenizePattern pat ParamPatternType _loc pats type_ -> concat@@ -58,19 +59,19 @@ , tokenizeTerm cube , tokenizeTope tope ] -tokenizePattern :: Pattern -> [VSToken]+tokenizePattern :: Pattern -> [SemanticTokenAbsolute] tokenizePattern = \case- PatternVar _loc var -> mkToken var vs_parameter [vs_declaration]+ PatternVar _loc var -> mkToken var SemanticTokenTypes_Parameter [SemanticTokenModifiers_Declaration] PatternPair _loc l r -> foldMap tokenizePattern [l, r]- pat@(PatternUnit _loc) -> mkToken pat vs_enumMember [vs_declaration]+ pat@(PatternUnit _loc) -> mkToken pat SemanticTokenTypes_EnumMember [SemanticTokenModifiers_Declaration] -tokenizeTope :: Term -> [VSToken]-tokenizeTope = tokenizeTerm' (Just vs_string)+tokenizeTope :: Term -> [SemanticTokenAbsolute]+tokenizeTope = tokenizeTerm' (Just SemanticTokenTypes_String) -tokenizeTerm :: Term -> [VSToken]+tokenizeTerm :: Term -> [SemanticTokenAbsolute] tokenizeTerm = tokenizeTerm' Nothing -tokenizeTerm' :: Maybe VSTokenType -> Term -> [VSToken]+tokenizeTerm' :: Maybe SemanticTokenTypes -> Term -> [SemanticTokenAbsolute] tokenizeTerm' varTokenType = go where go term = case term of@@ -79,26 +80,26 @@ Nothing -> [] Just token_type -> mkToken term token_type [] - Universe{} -> mkToken term vs_class [vs_defaultLibrary]- UniverseCube{} -> mkToken term vs_class [vs_defaultLibrary]- UniverseTope{} -> mkToken term vs_class [vs_defaultLibrary]+ Universe{} -> mkToken term SemanticTokenTypes_Class [SemanticTokenModifiers_DefaultLibrary]+ UniverseCube{} -> mkToken term SemanticTokenTypes_Class [SemanticTokenModifiers_DefaultLibrary]+ UniverseTope{} -> mkToken term SemanticTokenTypes_Class [SemanticTokenModifiers_DefaultLibrary] - CubeUnit{} -> mkToken term vs_enum [vs_defaultLibrary]- CubeUnitStar{} -> mkToken term vs_enumMember [vs_defaultLibrary]- ASCII_CubeUnitStar{} -> mkToken term vs_enumMember [vs_defaultLibrary]+ CubeUnit{} -> mkToken term SemanticTokenTypes_Enum [SemanticTokenModifiers_DefaultLibrary]+ CubeUnitStar{} -> mkToken term SemanticTokenTypes_EnumMember [SemanticTokenModifiers_DefaultLibrary]+ ASCII_CubeUnitStar{} -> mkToken term SemanticTokenTypes_EnumMember [SemanticTokenModifiers_DefaultLibrary] - Cube2{} -> mkToken term vs_enum [vs_defaultLibrary]- Cube2_0{} -> mkToken term vs_enumMember [vs_defaultLibrary]- ASCII_Cube2_0{} -> mkToken term vs_enumMember [vs_defaultLibrary]- Cube2_1{} -> mkToken term vs_enumMember [vs_defaultLibrary]- ASCII_Cube2_1{} -> mkToken term vs_enumMember [vs_defaultLibrary]+ Cube2{} -> mkToken term SemanticTokenTypes_Enum [SemanticTokenModifiers_DefaultLibrary]+ Cube2_0{} -> mkToken term SemanticTokenTypes_EnumMember [SemanticTokenModifiers_DefaultLibrary]+ ASCII_Cube2_0{} -> mkToken term SemanticTokenTypes_EnumMember [SemanticTokenModifiers_DefaultLibrary]+ Cube2_1{} -> mkToken term SemanticTokenTypes_EnumMember [SemanticTokenModifiers_DefaultLibrary]+ ASCII_Cube2_1{} -> mkToken term SemanticTokenTypes_EnumMember [SemanticTokenModifiers_DefaultLibrary] CubeProduct _loc l r -> foldMap go [l, r] - TopeTop{} -> mkToken term vs_string [vs_defaultLibrary]- ASCII_TopeTop{} -> mkToken term vs_string [vs_defaultLibrary]- TopeBottom{} -> mkToken term vs_string [vs_defaultLibrary]- ASCII_TopeBottom{} -> mkToken term vs_string [vs_defaultLibrary]+ TopeTop{} -> mkToken term SemanticTokenTypes_String [SemanticTokenModifiers_DefaultLibrary]+ ASCII_TopeTop{} -> mkToken term SemanticTokenTypes_String [SemanticTokenModifiers_DefaultLibrary]+ TopeBottom{} -> mkToken term SemanticTokenTypes_String [SemanticTokenModifiers_DefaultLibrary]+ ASCII_TopeBottom{} -> mkToken term SemanticTokenTypes_String [SemanticTokenModifiers_DefaultLibrary] TopeAnd _loc l r -> foldMap tokenizeTope [l, r] ASCII_TopeAnd _loc l r -> foldMap tokenizeTope [l, r] TopeOr _loc l r -> foldMap tokenizeTope [l, r]@@ -108,7 +109,7 @@ TopeLEQ _loc l r -> foldMap tokenizeTope [l, r] ASCII_TopeLEQ _loc l r -> foldMap tokenizeTope [l, r] - RecBottom{} -> mkToken term vs_function [vs_defaultLibrary]+ RecBottom{} -> mkToken term SemanticTokenTypes_Function [SemanticTokenModifiers_DefaultLibrary] RecOr _loc rs -> foldMap tokenizeRestriction rs TypeFun _loc paramDecl ret -> concat@@ -118,11 +119,11 @@ [ tokenizeParamDecl paramDecl , go ret ] TypeSigma loc pat a b -> concat- [ mkToken (VarIdent loc "∑") vs_class [vs_defaultLibrary]+ [ mkToken (VarIdent loc "∑") SemanticTokenTypes_Class [SemanticTokenModifiers_DefaultLibrary] , tokenizePattern pat , foldMap go [a, b] ] ASCII_TypeSigma loc pat a b -> concat- [ mkToken (VarIdent loc "Sigma") vs_class [vs_defaultLibrary]+ [ mkToken (VarIdent loc "Sigma") SemanticTokenTypes_Class [SemanticTokenModifiers_DefaultLibrary] , tokenizePattern pat , foldMap go [a, b] ] TypeId _loc x a y -> foldMap go [x, a, y]@@ -140,40 +141,40 @@ Pair _loc l r -> foldMap go [l, r] First loc t -> concat- [ mkToken (VarIdent loc "π₁") vs_function [vs_defaultLibrary]+ [ mkToken (VarIdent loc "π₁") SemanticTokenTypes_Function [SemanticTokenModifiers_DefaultLibrary] , go t ] ASCII_First loc t -> concat- [ mkToken (VarIdent loc "first") vs_function [vs_defaultLibrary]+ [ mkToken (VarIdent loc "first") SemanticTokenTypes_Function [SemanticTokenModifiers_DefaultLibrary] , go t ] Second loc t -> concat- [ mkToken (VarIdent loc "π₂") vs_function [vs_defaultLibrary]+ [ mkToken (VarIdent loc "π₂") SemanticTokenTypes_Function [SemanticTokenModifiers_DefaultLibrary] , go t ] ASCII_Second loc t -> concat- [ mkToken (VarIdent loc "second") vs_function [vs_defaultLibrary]+ [ mkToken (VarIdent loc "second") SemanticTokenTypes_Function [SemanticTokenModifiers_DefaultLibrary] , go t ] - TypeUnit _loc -> mkToken term vs_enum [vs_defaultLibrary]- Unit _loc -> mkToken term vs_enumMember [vs_defaultLibrary]+ TypeUnit _loc -> mkToken term SemanticTokenTypes_Enum [SemanticTokenModifiers_DefaultLibrary]+ Unit _loc -> mkToken term SemanticTokenTypes_EnumMember [SemanticTokenModifiers_DefaultLibrary] - Refl{} -> mkToken term vs_function [vs_defaultLibrary]+ Refl{} -> mkToken term SemanticTokenTypes_Function [SemanticTokenModifiers_DefaultLibrary] ReflTerm loc x -> concat- [ mkToken (VarIdent loc "refl") vs_function [vs_defaultLibrary]+ [ mkToken (VarIdent loc "refl") SemanticTokenTypes_Function [SemanticTokenModifiers_DefaultLibrary] , go x ] ReflTermType loc x a -> concat- [ mkToken (VarIdent loc "refl") vs_function [vs_defaultLibrary]+ [ mkToken (VarIdent loc "refl") SemanticTokenTypes_Function [SemanticTokenModifiers_DefaultLibrary] , foldMap go [x, a] ] IdJ loc a b c d e f -> concat- [ mkToken (VarIdent loc "J") vs_function [vs_defaultLibrary]+ [ mkToken (VarIdent loc "J") SemanticTokenTypes_Function [SemanticTokenModifiers_DefaultLibrary] , foldMap go [a, b, c, d, e, f] ] TypeAsc _loc t type_ -> foldMap go [t, type_] - RecOrDeprecated{} -> mkToken term vs_regexp [vs_deprecated]- TypeExtensionDeprecated{} -> mkToken term vs_regexp [vs_deprecated]- ASCII_TypeExtensionDeprecated{} -> mkToken term vs_regexp [vs_deprecated]+ RecOrDeprecated{} -> mkToken term SemanticTokenTypes_Regexp [SemanticTokenModifiers_Deprecated]+ TypeExtensionDeprecated{} -> mkToken term SemanticTokenTypes_Regexp [SemanticTokenModifiers_Deprecated]+ ASCII_TypeExtensionDeprecated{} -> mkToken term SemanticTokenTypes_Regexp [SemanticTokenModifiers_Deprecated] -tokenizeRestriction :: Restriction -> [VSToken]+tokenizeRestriction :: Restriction -> [SemanticTokenAbsolute] tokenizeRestriction (Restriction _loc tope term) = concat [ tokenizeTope tope , tokenizeTerm term ]@@ -181,7 +182,7 @@ [ tokenizeTope tope , tokenizeTerm term ] -tokenizeParamDecl :: ParamDecl -> [VSToken]+tokenizeParamDecl :: ParamDecl -> [SemanticTokenAbsolute] tokenizeParamDecl = \case ParamType _loc type_ -> tokenizeTerm type_ ParamTermType _loc pat type_ -> concat@@ -201,13 +202,16 @@ , tokenizeTope tope ] -mkToken :: (HasPosition a, Print a) => a -> VSTokenType -> [VSTokenModifier] -> [VSToken]+mkToken :: (HasPosition a, Print a) => a -> SemanticTokenTypes -> [SemanticTokenModifiers] -> [SemanticTokenAbsolute] mkToken x tokenType tokenModifiers = case hasPosition x of Nothing -> [] Just (line, col) -> do- [ VSToken- { startCharacter = col - 1 -- NOTE: 0-indexed output for VS Code- , line = line - 1 -- NOTE: 0-indexed output for VS Code- , length = Prelude.length (printTree x)- , .. } ]+ [ SemanticTokenAbsolute+ { _tokenType = tokenType+ , _tokenModifiers = tokenModifiers+ , _startChar = fromIntegral col - 1 -- NOTE: 0-indexed output for VS Code+ , _line = fromIntegral line - 1 -- NOTE: 0-indexed output for VS Code+ , _length = fromIntegral $ Prelude.length (printTree x)+ }+ ]
− src/Language/Rzk/VSCode/Tokens.hs
@@ -1,169 +0,0 @@-{-# OPTIONS_GHC -fno-warn-missing-pattern-synonym-signatures #-}-{-# LANGUAGE DeriveAnyClass #-}-{-# LANGUAGE DeriveGeneric #-}-{-# LANGUAGE DerivingStrategies #-}-{-# LANGUAGE GeneralizedNewtypeDeriving #-}-{-# LANGUAGE LambdaCase #-}-{-# LANGUAGE OverloadedStrings #-}-{-# LANGUAGE PatternSynonyms #-}-{-# LANGUAGE RecordWildCards #-}-module Language.Rzk.VSCode.Tokens where--import Data.Aeson-import Data.String (IsString)-import Data.Text (Text)-import GHC.Generics (Generic)---- | VS Code token.-data VSToken = VSToken- { line :: !Int- , startCharacter :: !Int- , length :: !Int- , tokenType :: VSTokenType- , tokenModifiers :: [VSTokenModifier]- } deriving (Generic, ToJSON)---- | VS Code token types. See https://code.visualstudio.com/api/language-extensions/semantic-highlight-guide#standard-token-types-and-modifiers.-newtype VSTokenType = VSTokenType Text- deriving newtype (ToJSON, IsString)---- | VS Code token modifiers. See https://code.visualstudio.com/api/language-extensions/semantic-highlight-guide#standard-token-types-and-modifiers.-newtype VSTokenModifier = VSTokenModifier Text- deriving newtype (ToJSON, IsString)---- * Standard token types---- | For identifiers that declare or reference a namespace, module, or package.-vs_namespace :: VSTokenType-vs_namespace = VSTokenType "namespace"---- | For identifiers that declare or reference a class type.-vs_class :: VSTokenType-vs_class = VSTokenType "class"---- | For identifiers that declare or reference an enumeration type.-vs_enum :: VSTokenType-vs_enum = VSTokenType "enum"---- | For identifiers that declare or reference an interface type.-vs_interface :: VSTokenType-vs_interface = VSTokenType "interface"---- | For identifiers that declare or reference a struct type.-vs_struct :: VSTokenType-vs_struct = VSTokenType "struct"---- | For identifiers that declare or reference a type parameter.-vs_typeParameter :: VSTokenType-vs_typeParameter = VSTokenType "typeParameter"---- | For identifiers that declare or reference a type that is not covered above.-vs_type :: VSTokenType-vs_type = VSTokenType "type"---- | For identifiers that declare or reference a function or method parameters.-vs_parameter :: VSTokenType-vs_parameter = VSTokenType "parameter"---- | For identifiers that declare or reference a local or global variable.-vs_variable :: VSTokenType-vs_variable = VSTokenType "variable"---- | For identifiers that declare or reference a member property, member field, or member variable.-vs_property :: VSTokenType-vs_property = VSTokenType "property"---- | For identifiers that declare or reference an enumeration property, constant, or member.-vs_enumMember :: VSTokenType-vs_enumMember = VSTokenType "enumMember"---- | For identifiers that declare or reference decorators and annotations.-vs_decorator :: VSTokenType-vs_decorator = VSTokenType "decorator"---- | For identifiers that declare an event property.-vs_event :: VSTokenType-vs_event = VSTokenType "event"---- | For identifiers that declare a function.-vs_function :: VSTokenType-vs_function = VSTokenType "function"---- | For identifiers that declare a member function or method.-vs_method :: VSTokenType-vs_method = VSTokenType "method"---- | For identifiers that declare a macro.-vs_macro :: VSTokenType-vs_macro = VSTokenType "macro"---- | For identifiers that declare a label.-vs_label :: VSTokenType-vs_label = VSTokenType "label"---- | For tokens that represent a comment.-vs_comment :: VSTokenType-vs_comment = VSTokenType "comment"---- | For tokens that represent a string literal.-vs_string :: VSTokenType-vs_string = VSTokenType "string"---- | For tokens that represent a language keyword.-vs_keyword :: VSTokenType-vs_keyword = VSTokenType "keyword"---- | For tokens that represent a number literal.-vs_number :: VSTokenType-vs_number = VSTokenType "number"---- | For tokens that represent a regular expression literal.-vs_regexp :: VSTokenType-vs_regexp = VSTokenType "regexp"---- | For tokens that represent an operator.-vs_operator :: VSTokenType-vs_operator = VSTokenType "operator"---- * Standard token modifiers---- | For declarations of symbols.-vs_declaration :: VSTokenModifier-vs_declaration = VSTokenModifier "declaration"---- | For definitions of symbols, for example, in header files.-vs_definition :: VSTokenModifier-vs_definition = VSTokenModifier "definition"---- | For readonly variables and member fields (constants).-vs_readonly :: VSTokenModifier-vs_readonly = VSTokenModifier "readonly"---- | For class members (static members).-vs_static :: VSTokenModifier-vs_static = VSTokenModifier "static"---- | For symbols that should no longer be used.-vs_deprecated :: VSTokenModifier-vs_deprecated = VSTokenModifier "deprecated"---- | For types and member functions that are abstract.-vs_abstract :: VSTokenModifier-vs_abstract = VSTokenModifier "abstract"---- | For functions that are marked async.-vs_async :: VSTokenModifier-vs_async = VSTokenModifier "async"---- | For variable references where the variable is assigned to.-vs_modification :: VSTokenModifier-vs_modification = VSTokenModifier "modification"---- | For occurrences of symbols in documentation.-vs_documentation :: VSTokenModifier-vs_documentation = VSTokenModifier "documentation"---- | For symbols that are part of the standard library.-vs_defaultLibrary :: VSTokenModifier-vs_defaultLibrary = VSTokenModifier "defaultLibrary"-
src/Rzk/Main.hs view
@@ -1,26 +1,28 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-}+ module Rzk.Main where -import Control.Monad (forM)-import qualified Data.Aeson as JSON-import qualified Data.ByteString.Lazy.Char8 as ByteString-import Data.List (sort)-import Data.Version (showVersion)+import Control.Monad (forM, void)+import Data.List (sort)+import Data.Version (showVersion)+#ifndef __GHCJS__+import Language.Rzk.VSCode.Lsp (runLsp)+#endif import Options.Generic-import System.Exit (exitFailure)-import System.FilePath.Glob (glob)+import System.Exit (exitFailure)+import System.FilePath.Glob (glob) -import qualified Language.Rzk.Syntax as Rzk-import Language.Rzk.VSCode.Tokenize (tokenizeModule)-import Paths_rzk (version)+import qualified Language.Rzk.Syntax as Rzk+import Paths_rzk (version) import Rzk.TypeCheck data Command = Typecheck [FilePath]- | Tokenize+ | Lsp | Version deriving (Generic, Show, ParseRecord) @@ -36,11 +38,14 @@ , ppTypeErrorInScopedContext' err ] exitFailure- Right () -> putStrLn "Everything is ok!"+ Right _declsByPath -> putStrLn "Everything is ok!" - Tokenize -> do- rzkModule <- parseStdin- ByteString.putStrLn (JSON.encode (tokenizeModule rzkModule))+ Lsp ->+#ifndef __GHCJS__+ void runLsp+#else+ error "rzk lsp is not supported with a GHCJS build"+#endif Version -> putStrLn (showVersion version)
src/Rzk/TypeCheck.hs view
@@ -49,21 +49,43 @@ type Decl' = Decl VarIdent -typecheckModulesWithLocation :: [(FilePath, Rzk.Module)] -> TypeCheck VarIdent ()+typecheckModulesWithLocationIncremental+ :: [(FilePath, [Decl'])] -- ^ Cached declarations (only those that do not need rechecking).+ -> [(FilePath, Rzk.Module)] -- ^ New modules to check+ -> TypeCheck VarIdent ([(FilePath, [Decl'])], [TypeErrorInScopedContext VarIdent])+typecheckModulesWithLocationIncremental cached modulesToTypecheck = do+ let decls = foldMap snd cached+ localDeclsPrepared decls $ do+ (checked, errors) <- typecheckModulesWithLocation' modulesToTypecheck+ return (cached <> checked, errors)++typecheckModulesWithLocation' :: [(FilePath, Rzk.Module)] -> TypeCheck VarIdent ([(FilePath, [Decl'])], [TypeErrorInScopedContext VarIdent])+typecheckModulesWithLocation' = \case+ [] -> return ([], [])+ m@(path, _) : ms -> do+ declsE <- (Right <$> typecheckModuleWithLocation m) `catchError` (return . Left)+ case declsE of+ Left err -> return ([], [err])+ Right decls -> do+ localDeclsPrepared decls $ do+ (decls', errors) <- typecheckModulesWithLocation' ms+ return ((path, decls) : decls', errors)++typecheckModulesWithLocation :: [(FilePath, Rzk.Module)] -> TypeCheck VarIdent [(FilePath, [Decl'])] typecheckModulesWithLocation = \case- [] -> return ()- m : ms -> do+ [] -> return []+ m@(path, _) : ms -> do decls <- typecheckModuleWithLocation m localDeclsPrepared decls $- typecheckModulesWithLocation ms+ ((path, decls) :) <$> typecheckModulesWithLocation ms -typecheckModules :: [Rzk.Module] -> TypeCheck VarIdent ()+typecheckModules :: [Rzk.Module] -> TypeCheck VarIdent [Decl'] typecheckModules = \case- [] -> return ()+ [] -> return [] m : ms -> do decls <- typecheckModule Nothing m localDeclsPrepared decls $- typecheckModules ms+ (decls <>) <$> typecheckModules ms typecheckModuleWithLocation :: (FilePath, Rzk.Module) -> TypeCheck VarIdent [Decl'] typecheckModuleWithLocation (path, module_) = do@@ -72,10 +94,7 @@ typecheckModule (Just path) module_ countCommands :: Integral a => [Rzk.Command] -> a-countCommands [] = 0-countCommands (Rzk.CommandSection _loc _name sectionCommands _name2 : commands) =- countCommands sectionCommands + countCommands commands-countCommands (_ : commands) = 1 + countCommands commands+countCommands = fromIntegral . length typecheckModule :: Maybe FilePath -> Rzk.Module -> TypeCheck VarIdent [Decl'] typecheckModule path (Rzk.Module _moduleLoc _lang commands) =@@ -170,14 +189,34 @@ localDeclsPrepared decls $ go (i + 1) moreCommands - go i (command@(Rzk.CommandSection _loc name sectionCommands endName) : moreCommands) = do+ go i (command@(Rzk.CommandSection _loc name) : moreCommands) = do withCommand command $ do- when (Rzk.printTree name /= Rzk.printTree endName) $- issueTypeError $ TypeErrorOther $- "unexpected #end " <> Rzk.printTree endName <> ", expecting #end " <> Rzk.printTree name+ (sectionCommands, moreCommands') <- splitSectionCommands name moreCommands withSection (Just name) (go i sectionCommands) $ do- go (i + countCommands sectionCommands) moreCommands+ go (i + countCommands sectionCommands) moreCommands' + go _i (command@(Rzk.CommandSectionEnd _loc endName) : _moreCommands) = do+ withCommand command $+ issueTypeError $ TypeErrorOther $+ "unexpected #end " <> Rzk.printTree endName <> ", no section was declared!"+++splitSectionCommands :: Rzk.SectionName -> [Rzk.Command] -> TypeCheck var ([Rzk.Command], [Rzk.Command])+splitSectionCommands name [] =+ issueTypeError (TypeErrorOther $ "Section " <> Rzk.printTree name <> " is not closed with an #end")+splitSectionCommands name (Rzk.CommandSection _loc name' : moreCommands) = do+ (cs1, cs2) <- splitSectionCommands name' moreCommands+ (cs3, cs4) <- splitSectionCommands name cs2+ return (cs1 <> cs3, cs4)+splitSectionCommands name (Rzk.CommandSectionEnd _loc endName : moreCommands) = do+ when (Rzk.printTree name /= Rzk.printTree endName) $+ issueTypeError $ TypeErrorOther $+ "unexpected #end " <> Rzk.printTree endName <> ", expecting #end " <> Rzk.printTree name+ return ([], moreCommands)+splitSectionCommands name (command : moreCommands) = do+ (cs1, cs2) <- splitSectionCommands name moreCommands+ return (command : cs1, cs2)+ setOption :: String -> String -> TypeCheck var a -> TypeCheck var a setOption "verbosity" = \case "debug" -> localVerbosity Debug@@ -784,8 +823,10 @@ " Error occurred when trying to unset option\n " <> Rzk.printTree command Just command@Rzk.CommandAssume{} -> " Error occurred when checking assumption\n " <> Rzk.printTree command- Just (Rzk.CommandSection _loc name _commands _endName) ->+ Just (Rzk.CommandSection _loc name) -> " Error occurred when checking\n #section " <> Rzk.printTree name+ Just (Rzk.CommandSectionEnd _loc name) ->+ " Error occurred when checking\n #end " <> Rzk.printTree name Nothing -> " Error occurred" -- , "Local tope context (expanded):" -- , intercalate "\n" (map ((" " <>) . show . untyped) (intercalate [TopeAndT topeT topeBottomT topeBottomT] (saturateTopes [] <$> simplifyLHS localTopes)))@@ -818,7 +859,12 @@ withLocation loc = local $ \Context{..} -> Context { location = Just loc, .. } withCommand :: Rzk.Command -> TypeCheck var a -> TypeCheck var a-withCommand command = local $ \Context{..} -> Context { currentCommand = Just command, .. }+withCommand command = local $ \Context{..} -> Context+ { currentCommand = Just command+ , location = updatePosition (Rzk.hasPosition command) <$> location+ , .. }+ where+ updatePosition pos loc = loc { locationLine = fst <$> pos } localDecls :: [Decl VarIdent] -> TypeCheck VarIdent a -> TypeCheck VarIdent a localDecls [] = id