packages feed

language-javascript (empty) → 0.0.1

raw patch · 20 files changed

+5561/−0 lines, 20 filesdep +HUnitdep +QuickCheckdep +arraysetup-changed

Dependencies added: HUnit, QuickCheck, array, base, containers, mtl, test-framework, test-framework-hunit

Files

+ .ghci view
@@ -0,0 +1,5 @@+-- Startup commands for the GHC interpreter+:set -hide-package monads-tf +:set -hide-package monads-fd+:set -i./src+:set -i./dist/build
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright (c)2010, Alan Zimmerman++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++    * Redistributions of source code must retain the above copyright+      notice, this list of conditions and the following disclaimer.++    * Redistributions in binary form must reproduce the above+      copyright notice, this list of conditions and the following+      disclaimer in the documentation and/or other materials provided+      with the distribution.++    * Neither the name of Alan Zimmerman nor the names of other+      contributors may be used to endorse or promote products derived+      from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ README view
@@ -0,0 +1,29 @@+Parser for JavaScript+---------------------++Based (loosely) on language-python++How to build+------------++Library:++cabal clean && cabal configure && cabal build++Tests:++cabal clean && cabal configure -fbuildtests && cabal build++Running the tests++./dist/build/runtests/runtests+++To debug the grammar++happy -iparse.txt -g -a  -d src/Language/JavaScript/Parser/Grammar.y ++This generates src/Language/JavaScript/Parser/Grammar.hs, delete this+when done with the debug version++
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ buildall.sh view
@@ -0,0 +1,6 @@+#!/bin/sh++# do a clean build of all, including the tests+cabal clean && cabal configure -fbuildtests && cabal build && cabal haddock++
+ dist/build/Language/JavaScript/Parser/Grammar.hs view
@@ -0,0 +1,2850 @@+{-# OPTIONS_GHC -w #-}+{-# OPTIONS -fglasgow-exts -cpp #-}+module Language.JavaScript.Parser.Grammar (+    parseProgram+  , parseLiteral+  , parsePrimaryExpression+  , parseStatement+  ) where++import Control.Monad.Error.Class (throwError)+import Data.Char+import Language.JavaScript.Parser.Lexer+import Language.JavaScript.Parser.ParserMonad+import Language.JavaScript.Parser.SrcLocation+import qualified Language.JavaScript.Parser.AST as AST+import qualified Data.Array as Happy_Data_Array+import qualified GHC.Exts as Happy_GHC_Exts++-- parser produced by Happy Version 1.18.6++newtype HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78 = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = Happy_GHC_Exts.Any+#else+type HappyAny = forall a . a+#endif+happyIn7 :: t7 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn7 #-}+happyOut7 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t7+happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut7 #-}+happyIn8 :: t8 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn8 #-}+happyOut8 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t8+happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut8 #-}+happyIn9 :: t9 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn9 #-}+happyOut9 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t9+happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut9 #-}+happyIn10 :: t10 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn10 #-}+happyOut10 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t10+happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut10 #-}+happyIn11 :: t11 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn11 #-}+happyOut11 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t11+happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut11 #-}+happyIn12 :: t12 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn12 #-}+happyOut12 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t12+happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut12 #-}+happyIn13 :: t13 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn13 #-}+happyOut13 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t13+happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut13 #-}+happyIn14 :: (AST.JSNode) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn14 #-}+happyOut14 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> (AST.JSNode)+happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut14 #-}+happyIn15 :: t15 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn15 #-}+happyOut15 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t15+happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut15 #-}+happyIn16 :: t16 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn16 #-}+happyOut16 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t16+happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut16 #-}+happyIn17 :: t17 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn17 #-}+happyOut17 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t17+happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut17 #-}+happyIn18 :: t18 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn18 #-}+happyOut18 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t18+happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut18 #-}+happyIn19 :: (AST.JSNode) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn19 #-}+happyOut19 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> (AST.JSNode)+happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut19 #-}+happyIn20 :: ([ AST.JSNode ]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn20 #-}+happyOut20 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([ AST.JSNode ])+happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut20 #-}+happyIn21 :: t21 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn21 #-}+happyOut21 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t21+happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut21 #-}+happyIn22 :: ([AST.JSNode]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn22 #-}+happyOut22 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([AST.JSNode])+happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut22 #-}+happyIn23 :: t23 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn23 #-}+happyOut23 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t23+happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut23 #-}+happyIn24 :: ([AST.JSNode]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn24 #-}+happyOut24 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([AST.JSNode])+happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut24 #-}+happyIn25 :: t25 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn25 #-}+happyOut25 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t25+happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut25 #-}+happyIn26 :: ([[AST.JSNode]]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn26 #-}+happyOut26 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([[AST.JSNode]])+happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut26 #-}+happyIn27 :: t27 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn27 #-}+happyOut27 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t27+happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut27 #-}+happyIn28 :: t28 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn28 #-}+happyOut28 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t28+happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut28 #-}+happyIn29 :: ([AST.JSNode]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn29 #-}+happyOut29 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([AST.JSNode])+happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut29 #-}+happyIn30 :: ([AST.JSNode]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn30 #-}+happyOut30 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([AST.JSNode])+happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut30 #-}+happyIn31 :: ([AST.JSNode]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn31 #-}+happyOut31 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([AST.JSNode])+happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut31 #-}+happyIn32 :: ([AST.JSNode]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn32 #-}+happyOut32 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([AST.JSNode])+happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut32 #-}+happyIn33 :: ([AST.JSNode]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn33 #-}+happyOut33 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([AST.JSNode])+happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut33 #-}+happyIn34 :: ([AST.JSNode]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn34 #-}+happyOut34 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([AST.JSNode])+happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut34 #-}+happyIn35 :: ([AST.JSNode]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn35 #-}+happyOut35 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([AST.JSNode])+happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut35 #-}+happyIn36 :: ([AST.JSNode]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn36 #-}+happyOut36 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([AST.JSNode])+happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut36 #-}+happyIn37 :: ([AST.JSNode]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn37 #-}+happyOut37 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([AST.JSNode])+happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut37 #-}+happyIn38 :: ([AST.JSNode]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn38 #-}+happyOut38 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([AST.JSNode])+happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut38 #-}+happyIn39 :: ([AST.JSNode]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn39 #-}+happyOut39 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([AST.JSNode])+happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut39 #-}+happyIn40 :: ([AST.JSNode]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn40 #-}+happyOut40 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([AST.JSNode])+happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut40 #-}+happyIn41 :: ([AST.JSNode]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn41 #-}+happyOut41 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([AST.JSNode])+happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut41 #-}+happyIn42 :: (AST.JSNode) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn42 #-}+happyOut42 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> (AST.JSNode)+happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut42 #-}+happyIn43 :: (AST.JSNode) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn43 #-}+happyOut43 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> (AST.JSNode)+happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut43 #-}+happyIn44 :: ([AST.JSNode]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn44 #-}+happyOut44 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([AST.JSNode])+happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut44 #-}+happyIn45 :: (AST.JSNode) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn45 #-}+happyOut45 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> (AST.JSNode)+happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut45 #-}+happyIn46 :: (AST.JSNode) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn46 #-}+happyOut46 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> (AST.JSNode)+happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut46 #-}+happyIn47 :: t47 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn47 #-}+happyOut47 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t47+happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut47 #-}+happyIn48 :: t48 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn48 #-}+happyOut48 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t48+happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut48 #-}+happyIn49 :: (AST.JSNode) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn49 #-}+happyOut49 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> (AST.JSNode)+happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut49 #-}+happyIn50 :: t50 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn50 #-}+happyOut50 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t50+happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut50 #-}+happyIn51 :: ([AST.JSNode]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn51 #-}+happyOut51 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([AST.JSNode])+happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut51 #-}+happyIn52 :: (AST.JSNode) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn52 #-}+happyOut52 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> (AST.JSNode)+happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut52 #-}+happyIn53 :: t53 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn53 #-}+happyOut53 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t53+happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut53 #-}+happyIn54 :: t54 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn54 #-}+happyOut54 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t54+happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut54 #-}+happyIn55 :: (AST.JSNode) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn55 #-}+happyOut55 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> (AST.JSNode)+happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut55 #-}+happyIn56 :: ([AST.JSNode]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn56 #-}+happyOut56 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([AST.JSNode])+happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut56 #-}+happyIn57 :: t57 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn57 #-}+happyOut57 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t57+happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut57 #-}+happyIn58 :: (AST.JSNode) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn58 #-}+happyOut58 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> (AST.JSNode)+happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut58 #-}+happyIn59 :: t59 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn59 #-}+happyOut59 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t59+happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut59 #-}+happyIn60 :: t60 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn60 #-}+happyOut60 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t60+happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut60 #-}+happyIn61 :: t61 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn61 #-}+happyOut61 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t61+happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut61 #-}+happyIn62 :: t62 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn62 #-}+happyOut62 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t62+happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut62 #-}+happyIn63 :: t63 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn63 #-}+happyOut63 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t63+happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut63 #-}+happyIn64 :: ([AST.JSNode]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn64 #-}+happyOut64 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([AST.JSNode])+happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut64 #-}+happyIn65 :: ([AST.JSNode]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn65 #-}+happyOut65 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([AST.JSNode])+happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut65 #-}+happyIn66 :: (AST.JSNode) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn66 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn66 #-}+happyOut66 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> (AST.JSNode)+happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut66 #-}+happyIn67 :: (AST.JSNode) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn67 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn67 #-}+happyOut67 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> (AST.JSNode)+happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut67 #-}+happyIn68 :: t68 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn68 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn68 #-}+happyOut68 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t68+happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut68 #-}+happyIn69 :: t69 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn69 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn69 #-}+happyOut69 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t69+happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut69 #-}+happyIn70 :: t70 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn70 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn70 #-}+happyOut70 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t70+happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut70 #-}+happyIn71 :: ([AST.JSNode]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn71 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn71 #-}+happyOut71 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([AST.JSNode])+happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut71 #-}+happyIn72 :: t72 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn72 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn72 #-}+happyOut72 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t72+happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut72 #-}+happyIn73 :: t73 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn73 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn73 #-}+happyOut73 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t73+happyOut73 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut73 #-}+happyIn74 :: (AST.JSNode) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn74 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn74 #-}+happyOut74 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> (AST.JSNode)+happyOut74 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut74 #-}+happyIn75 :: (AST.JSNode) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn75 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn75 #-}+happyOut75 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> (AST.JSNode)+happyOut75 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut75 #-}+happyIn76 :: ([AST.JSNode]) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn76 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn76 #-}+happyOut76 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> ([AST.JSNode])+happyOut76 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut76 #-}+happyIn77 :: (AST.JSNode) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn77 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn77 #-}+happyOut77 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> (AST.JSNode)+happyOut77 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut77 #-}+happyIn78 :: t78 -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn78 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn78 #-}+happyOut78 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> t78+happyOut78 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut78 #-}+happyIn79 :: (AST.JSNode) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn79 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn79 #-}+happyOut79 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> (AST.JSNode)+happyOut79 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut79 #-}+happyIn80 :: (AST.JSNode) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn80 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn80 #-}+happyOut80 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> (AST.JSNode)+happyOut80 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut80 #-}+happyIn81 :: (AST.JSNode) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyIn81 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn81 #-}+happyOut81 :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> (AST.JSNode)+happyOut81 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut81 #-}+happyInTok :: (Token) -> (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78)+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn t7 t8 t9 t10 t11 t12 t13 t15 t16 t17 t18 t21 t23 t25 t27 t28 t47 t48 t50 t53 t54 t57 t59 t60 t61 t62 t63 t68 t69 t70 t72 t73 t78) -> (Token)+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOutTok #-}+++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\x75\x04\x66\x01\xd7\x15\x3f\x04\xe0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\x02\x00\x00\x00\x00\x33\x01\x00\x00\x9f\x00\xff\xff\xb9\x01\x26\x05\x00\x00\x01\x02\x5c\x01\x68\x00\xdc\x01\xd6\x02\xd2\x02\xc0\x02\xbc\x02\x06\x01\x00\x00\x00\x00\xba\x02\x74\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\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x4a\x05\x8f\x02\x9f\x15\x12\x00\x79\x02\x12\x00\x9f\x15\x3f\x04\x00\x00\x97\x02\x94\x02\x93\x02\xbb\x15\x00\x00\xab\x04\x91\x02\x00\x00\x9f\x15\x00\x00\x92\x02\x9f\x15\x68\x02\x9f\x15\x8c\x02\x87\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5d\x02\x00\x00\xb0\x01\x5d\x02\x00\x00\x00\x00\x5d\x02\x09\x04\x00\x00\x4a\x00\x86\x02\x3f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x32\x01\xa0\x02\x9f\x15\x9f\x15\x00\x00\x00\x00\x85\x02\xc9\x01\x00\x00\x00\x00\x8f\x00\x59\x02\x8a\x02\x9f\x15\x00\x00\xc6\x01\x67\x00\x00\x00\x9f\x15\x96\x14\x46\x02\x00\x00\x00\x00\x88\x02\x9b\x01\x00\x00\x88\x02\x17\x01\x82\x02\x81\x02\x7e\x02\x00\x00\x23\x02\x00\x00\x15\x05\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x9f\x15\x00\x00\x00\x00\x9f\x15\x00\x00\x00\x00\x00\x00\x39\x02\x9f\x15\x61\x14\x00\x00\x39\x02\x9f\x15\xd3\x03\x00\x00\x22\x00\x00\x00\x16\x01\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x01\x68\x01\x68\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x5c\x01\x68\x00\x68\x00\x68\x00\x68\x00\xdc\x01\x78\x02\x76\x02\x73\x02\x72\x02\x70\x02\x00\x00\x7f\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x02\x00\x00\x4f\x02\x8f\x04\x6c\x02\x5a\x02\x10\x02\xe8\x00\x00\x00\x00\x00\xe7\x00\xed\x01\x00\x00\x8f\x00\x00\x00\x00\x00\x30\x02\x31\x02\x00\x00\x00\x00\x9f\x15\xcd\x00\xcc\x00\x6a\x15\xb0\x01\x00\x00\x00\x00\x83\x00\x2e\x02\x17\x00\x82\x00\x2d\x02\x9d\x03\x06\x02\x29\x02\x45\x02\x00\x00\x00\x00\x67\x03\x67\x03\x00\x00\x00\x00\x02\x02\x00\x00\x00\x00\x00\x00\x20\x02\x31\x03\x7c\x01\x0d\x02\x35\x15\x35\x15\x35\x15\x00\x00\xe0\x04\x00\x00\x35\x15\x00\x00\x35\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x0d\x00\x37\x02\x35\x15\x35\x15\x1f\x02\xf5\x01\x00\x00\x00\x00\xf7\x00\x23\x00\x00\x00\x1c\x02\x00\x15\xfb\x02\x00\x00\xfb\x01\xfb\x02\x00\x00\xfb\x02\xf1\x01\xfb\x02\xf3\x01\x00\x00\x00\x00\xf2\x01\x00\x00\x00\x00\x00\x00\xf0\x01\xcb\x14\xad\x00\x00\x00\xb4\x00\x00\x00\xcb\x14\x0a\x02\x00\x00\xc5\x02\x00\x00\x0b\x02\x0a\x00\xcb\x14\xc5\x02\x08\x02\x00\x00\x00\x00\xd8\x01\xc5\x02\xcb\x14\x00\x00\xc5\x02\x00\x01\x6a\x00\x00\x00\x00\x00\x1e\x00\x00\x00\xca\x01\x00\x00\x00\x00\x00\x00\xc8\x01\x00\x00\xc0\x01\x1a\x00\x00\x00\x00\x00\xc5\x02\xc5\x02\xbb\x01\x00\x00\xc5\x02\x00\x00\xc5\x02\xc5\x02\x00\x00\x00\x00\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\x29\x01\xb7\x01\x04\x05\x7f\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x01\x00\x00\x92\x01\x7e\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\x5f\x14\x46\x14\x2e\x14\x15\x14\xfd\x13\xe4\x13\xfc\x0b\xfb\x05\x0d\x0f\xd6\x00\x2e\x01\x8c\x00\xcc\x13\x3b\x0a\x00\x00\x00\x00\x00\x00\x00\x00\xcf\x04\x00\x00\xca\x05\x00\x00\x00\x00\xdc\x0e\x00\x00\x76\x01\xb3\x13\xe4\x00\x9b\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x05\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x01\x00\x00\x8e\x01\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xab\x0e\x7a\x0e\x00\x00\x00\x00\x58\x01\x71\x01\x00\x00\x00\x00\xfd\x01\xc7\x06\x00\x00\x49\x0e\x00\x00\x65\x01\x44\x01\x00\x00\x18\x0e\xcb\x0b\x00\x00\x00\x00\x00\x00\x4e\x01\x4c\x01\x00\x00\x08\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\x09\x00\x00\x95\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x10\x33\x10\xd9\x10\xfb\x10\x1d\x11\x3f\x11\x61\x11\xe9\x11\xc7\x11\xa5\x11\x83\x11\xb5\x12\x93\x12\x71\x12\x4f\x12\x2d\x12\x0b\x12\x08\x13\xef\x12\xd7\x12\x82\x13\x6a\x13\x51\x13\x39\x13\x20\x13\x00\x00\x00\x00\x02\x10\x00\x00\x00\x00\x00\x00\x2f\x01\xe7\x0d\xb6\x0d\x00\x00\x2b\x01\x84\x0d\xb3\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\xff\x00\x00\x00\x00\x05\x01\x00\x00\x00\x00\x9a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x09\x00\x00\x28\x01\x00\x00\x00\x00\x00\x00\xfd\x00\x00\x00\x00\x00\xd1\x0f\x00\x00\x00\x00\x22\x0d\xfa\x01\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x00\x00\xdf\x00\x13\x01\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x09\xe7\x08\x00\x00\x00\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x98\x00\xc3\x0a\x00\x00\x00\x00\x9a\x0b\xf1\x0c\xc0\x0c\x00\x00\xa0\x0f\x00\x00\x6f\x0f\x00\x00\x3e\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x0c\x69\x0b\x00\x00\x90\x00\x00\x00\x00\x00\x79\x01\x00\x00\x00\x00\xba\x00\x5e\x0c\x95\x00\x00\x00\x00\x00\x73\x01\x00\x00\x4b\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7a\x00\xb7\x10\x27\x01\x00\x00\xe6\x00\x00\x00\x2d\x0c\x00\x00\x00\x00\xa3\x08\x00\x00\x00\x00\x00\x00\x38\x0b\x5f\x08\x75\x00\x00\x00\x00\x00\x00\x00\x1b\x08\x07\x0b\x00\x00\x83\x06\x00\x00\x1b\x00\x00\x00\x00\x00\xf0\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\xd9\xff\x00\x00\x00\x00\x3f\x06\xd7\x07\x00\x00\x00\x00\x93\x07\x00\x00\x4f\x07\x0b\x07\x00\x00\x00\x00\x00\x00\x00\x00"#++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfb\xff\xec\xff\xf9\xff\xf8\xff\xf7\xff\xf6\xff\xe8\xff\xd3\xff\xed\xff\xeb\xff\xea\xff\xce\xff\xc4\xff\xc3\xff\xc2\xff\xbf\xff\xb5\xff\xaf\xff\xab\xff\xaa\xff\xa3\xff\x9e\xff\x9c\xff\x9a\xff\x98\xff\x96\xff\x94\xff\x92\xff\x8e\xff\x7c\xff\x00\x00\x8a\xff\x88\xff\x87\xff\x89\xff\x86\xff\x85\xff\x84\xff\x83\xff\x82\xff\x81\xff\x7f\xff\x80\xff\x7e\xff\x7d\xff\xd2\xff\x6e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd7\xff\x00\x00\xfa\xff\x00\x00\xfa\xff\x00\x00\x00\x00\xf3\xff\x00\x00\x00\x00\x00\x00\x00\x00\xf5\xff\xfa\xff\x00\x00\xee\xff\x00\x00\xf4\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe7\xff\xf2\xff\xf1\xff\xf0\xff\xef\xff\x00\x00\xed\xff\xd7\xff\x00\x00\x36\xff\x35\xff\x00\x00\x3b\xff\x38\xff\x00\x00\x00\x00\x00\x00\x37\xff\xd4\xff\xd5\xff\xd6\xff\x00\x00\x00\x00\x00\x00\x00\x00\xc2\xff\xbd\xff\x71\xff\xfa\xff\x73\xff\xbc\xff\x00\x00\x00\x00\x4c\xff\x00\x00\x5d\xff\xfa\xff\xce\xff\xcd\xff\x00\x00\x8b\xff\x00\x00\xbe\xff\x61\xff\xfa\xff\xfa\xff\x5f\xff\xfa\xff\x00\x00\xf7\xff\xf6\xff\xed\xff\x77\xff\x00\x00\x7b\xff\x00\x00\x00\x00\xdd\xff\xe2\xff\xe6\xff\xb7\xff\xb6\xff\xb8\xff\xb9\xff\xba\xff\xbb\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc1\xff\xc0\xff\x00\x00\x8f\xff\x90\xff\xcb\xff\x00\x00\x00\x00\x00\x00\xcc\xff\x00\x00\x00\x00\x00\x00\x4d\xff\x00\x00\xd0\xff\x00\x00\xc6\xff\xc8\xff\x00\x00\xc9\xff\x91\xff\xb2\xff\xb3\xff\xb4\xff\xb0\xff\xb1\xff\xad\xff\xac\xff\xae\xff\xa5\xff\xa4\xff\xa8\xff\xa6\xff\xa9\xff\xa7\xff\xa1\xff\x9f\xff\xa2\xff\xa0\xff\x9d\xff\x9b\xff\x99\xff\x97\xff\x95\xff\x00\x00\x8d\xff\x00\x00\xe4\xff\xe0\xff\xe1\xff\xe5\xff\x76\xff\x7a\xff\xe9\xff\x5e\xff\x74\xff\x00\x00\x60\xff\x00\x00\xc2\xff\x8c\xff\x00\x00\x00\x00\x00\x00\xcf\xff\x5c\xff\x00\x00\x00\x00\x79\xff\x4b\xff\x48\xff\x4a\xff\x00\x00\x00\x00\x75\xff\x70\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdc\xff\x3f\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3c\xff\x00\x00\x00\x00\x00\x00\xdb\xff\xda\xff\x00\x00\x00\x00\x6f\xff\x44\xff\x00\x00\x47\xff\x49\xff\x78\xff\x00\x00\x00\x00\x00\x00\x73\xff\x8b\xff\x00\x00\x00\x00\x72\xff\x00\x00\xde\xff\x00\x00\xca\xff\x00\x00\xc7\xff\xd1\xff\xc5\xff\x93\xff\xdf\xff\xe3\xff\x00\x00\x00\x00\x00\x00\x00\x00\x8b\xff\x69\xff\x6b\xff\x68\xff\x5a\xff\x00\x00\x00\x00\x66\xff\xfa\xff\x00\x00\x3c\xff\x3e\xff\x00\x00\x3d\xff\x3a\xff\x3c\xff\x00\x00\x3c\xff\x00\x00\x39\xff\x41\xff\x00\x00\xd9\xff\xd8\xff\x5b\xff\x00\x00\x00\x00\x00\x00\x53\xff\x00\x00\x59\xff\x00\x00\x00\x00\x6d\xff\x00\x00\x6a\xff\x00\x00\x00\x00\x8b\xff\x00\x00\xfa\xff\x67\xff\x63\xff\x00\x00\x00\x00\x8b\xff\x6c\xff\x4f\xff\x00\x00\x00\x00\x54\xff\x52\xff\x00\x00\x58\xff\x00\x00\x46\xff\x40\xff\x42\xff\x00\x00\x43\xff\x00\x00\x00\x00\x57\xff\x55\xff\x50\xff\x4e\xff\x00\x00\x62\xff\x00\x00\x65\xff\x00\x00\x51\xff\x56\xff\x45\xff\x64\xff"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x08\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0c\x00\x02\x00\x0c\x00\x02\x00\x02\x00\x0f\x00\x10\x00\x11\x00\x01\x00\x3b\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x02\x00\x24\x00\x2d\x00\x26\x00\x27\x00\x28\x00\x3a\x00\x3b\x00\x2b\x00\x21\x00\x29\x00\x25\x00\x2f\x00\x30\x00\x25\x00\x08\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x08\x00\x02\x00\x25\x00\x23\x00\x3d\x00\x3e\x00\x3f\x00\x23\x00\x28\x00\x21\x00\x43\x00\x44\x00\x28\x00\x46\x00\x25\x00\x48\x00\x4b\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x02\x00\x3b\x00\x0c\x00\x46\x00\x36\x00\x0f\x00\x10\x00\x11\x00\x46\x00\x25\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x24\x00\x24\x00\x45\x00\x26\x00\x27\x00\x28\x00\x21\x00\x00\x00\x2b\x00\x45\x00\x10\x00\x11\x00\x2f\x00\x30\x00\x14\x00\x15\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x02\x00\x02\x00\x1f\x00\x20\x00\x3d\x00\x3e\x00\x3f\x00\x24\x00\x00\x00\x23\x00\x43\x00\x44\x00\x46\x00\x46\x00\x28\x00\x48\x00\x08\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x37\x00\x38\x00\x0c\x00\x08\x00\x29\x00\x0f\x00\x10\x00\x11\x00\x25\x00\x25\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x29\x00\x24\x00\x00\x00\x26\x00\x27\x00\x28\x00\x1f\x00\x20\x00\x2b\x00\x31\x00\x33\x00\x24\x00\x2f\x00\x30\x00\x2c\x00\x2d\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x02\x00\x02\x00\x23\x00\x39\x00\x3d\x00\x3e\x00\x3f\x00\x28\x00\x00\x00\x23\x00\x43\x00\x44\x00\x2d\x00\x46\x00\x28\x00\x48\x00\x08\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x02\x00\x02\x00\x0c\x00\x08\x00\x08\x00\x0f\x00\x10\x00\x11\x00\x25\x00\x25\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x02\x00\x24\x00\x04\x00\x26\x00\x27\x00\x28\x00\x00\x00\x03\x00\x2b\x00\x05\x00\x25\x00\x25\x00\x2f\x00\x30\x00\x2c\x00\x2d\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x02\x00\x02\x00\x23\x00\x08\x00\x3d\x00\x3e\x00\x3f\x00\x28\x00\x3a\x00\x3b\x00\x43\x00\x44\x00\x2d\x00\x46\x00\x29\x00\x48\x00\x23\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x08\x00\x02\x00\x0c\x00\x08\x00\x08\x00\x0f\x00\x10\x00\x11\x00\x25\x00\x25\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x00\x00\x24\x00\x00\x00\x26\x00\x27\x00\x28\x00\x1f\x00\x20\x00\x2b\x00\x23\x00\x12\x00\x24\x00\x2f\x00\x30\x00\x2c\x00\x2d\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x3b\x00\x3c\x00\x25\x00\x00\x00\x3d\x00\x3e\x00\x3f\x00\x41\x00\x42\x00\x0f\x00\x43\x00\x44\x00\x12\x00\x13\x00\x47\x00\x00\x00\x49\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x01\x00\x02\x00\x0c\x00\x18\x00\x19\x00\x0f\x00\x10\x00\x11\x00\x46\x00\x2e\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x08\x00\x24\x00\x32\x00\x26\x00\x27\x00\x28\x00\x01\x00\x02\x00\x2b\x00\x29\x00\x3a\x00\x23\x00\x2f\x00\x30\x00\x12\x00\x3f\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x12\x00\x47\x00\x48\x00\x49\x00\x3d\x00\x3e\x00\x3f\x00\x3a\x00\x3b\x00\x3c\x00\x43\x00\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x4a\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x01\x00\x02\x00\x0c\x00\x01\x00\x02\x00\x0f\x00\x10\x00\x11\x00\x16\x00\x17\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x25\x00\x24\x00\x22\x00\x26\x00\x27\x00\x28\x00\x0a\x00\x0b\x00\x2b\x00\x0d\x00\x0e\x00\x23\x00\x2f\x00\x30\x00\x01\x00\x25\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x46\x00\x47\x00\x48\x00\x49\x00\x3d\x00\x3e\x00\x3f\x00\x25\x00\x04\x00\x05\x00\x43\x00\x44\x00\x08\x00\x16\x00\x17\x00\x18\x00\x19\x00\x4a\x00\x0e\x00\x01\x00\x1d\x00\x1e\x00\x01\x00\x20\x00\x04\x00\x22\x00\x23\x00\x24\x00\x22\x00\x22\x00\x27\x00\x23\x00\x23\x00\x2a\x00\x2b\x00\x18\x00\x19\x00\x2e\x00\x2f\x00\x01\x00\x23\x00\x32\x00\x01\x00\x34\x00\x35\x00\x36\x00\x01\x00\x30\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x01\x00\x16\x00\x17\x00\x18\x00\x19\x00\x40\x00\x41\x00\x42\x00\x1d\x00\x1e\x00\x22\x00\x20\x00\x37\x00\x22\x00\x23\x00\x24\x00\x46\x00\x04\x00\x27\x00\x22\x00\x46\x00\x2a\x00\x2b\x00\x22\x00\x22\x00\x2e\x00\x2f\x00\x22\x00\x24\x00\x32\x00\x46\x00\x34\x00\x35\x00\x36\x00\x01\x00\x01\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x02\x00\x16\x00\x17\x00\x18\x00\x19\x00\x24\x00\x04\x00\x46\x00\x1d\x00\x1e\x00\x06\x00\x20\x00\x07\x00\x22\x00\x23\x00\x24\x00\x08\x00\x46\x00\x27\x00\x09\x00\x04\x00\x2a\x00\x2b\x00\x04\x00\x04\x00\x2e\x00\x2f\x00\x01\x00\x44\x00\x32\x00\x02\x00\x34\x00\x35\x00\x36\x00\x01\x00\x0c\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x04\x00\x16\x00\x17\x00\x18\x00\x19\x00\x4c\x00\x24\x00\x24\x00\x1d\x00\x1e\x00\x46\x00\x20\x00\x24\x00\x22\x00\x23\x00\x24\x00\x22\x00\x24\x00\x27\x00\x24\x00\x24\x00\x2a\x00\x2b\x00\x24\x00\x02\x00\x2e\x00\x2f\x00\x46\x00\x4c\x00\x32\x00\x06\x00\x34\x00\x35\x00\x36\x00\x01\x00\x07\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x08\x00\x16\x00\x17\x00\x18\x00\x19\x00\x09\x00\x04\x00\x01\x00\x1d\x00\x1e\x00\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\x24\x00\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\xff\xff\x2e\x00\x2f\x00\xff\xff\xff\xff\x32\x00\xff\xff\x34\x00\x35\x00\x36\x00\x01\x00\xff\xff\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\x24\x00\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\xff\xff\x2e\x00\x2f\x00\xff\xff\xff\xff\x32\x00\xff\xff\x34\x00\x35\x00\x36\x00\x01\x00\xff\xff\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\x24\x00\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\xff\xff\x2e\x00\x2f\x00\xff\xff\xff\xff\x32\x00\xff\xff\x34\x00\x35\x00\x36\x00\x01\x00\xff\xff\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\x24\x00\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\xff\xff\x2e\x00\x2f\x00\xff\xff\xff\xff\x32\x00\xff\xff\x34\x00\x35\x00\x36\x00\x01\x00\xff\xff\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\x24\x00\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\xff\xff\x2e\x00\x2f\x00\xff\xff\xff\xff\x32\x00\xff\xff\x34\x00\x35\x00\x36\x00\x01\x00\xff\xff\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\x24\x00\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\xff\xff\x2e\x00\x2f\x00\xff\xff\xff\xff\x32\x00\xff\xff\x34\x00\x35\x00\x36\x00\x01\x00\xff\xff\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\x24\x00\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\xff\xff\x2e\x00\x2f\x00\xff\xff\xff\xff\x32\x00\xff\xff\x34\x00\x35\x00\x36\x00\x01\x00\xff\xff\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\x24\x00\xff\xff\xff\xff\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\xff\xff\x2e\x00\x2f\x00\xff\xff\xff\xff\x32\x00\xff\xff\x34\x00\x35\x00\x36\x00\x01\x00\xff\xff\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\x24\x00\xff\xff\x0c\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\xff\xff\x2e\x00\x2f\x00\xff\xff\xff\xff\x32\x00\xff\xff\x34\x00\x35\x00\x36\x00\x01\x00\xff\xff\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\x37\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\x24\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x2e\x00\x4b\x00\x0c\x00\xff\xff\x32\x00\x0f\x00\x10\x00\x35\x00\xff\xff\x02\x00\xff\xff\x39\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\xff\xff\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x2e\x00\xff\xff\x0c\x00\xff\xff\x32\x00\x44\x00\xff\xff\x35\x00\xff\xff\x02\x00\xff\xff\x39\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\xff\xff\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\x08\x00\x1a\x00\x1b\x00\x1c\x00\x2e\x00\x0d\x00\x0e\x00\xff\xff\x32\x00\xff\xff\xff\xff\x35\x00\xff\xff\x02\x00\xff\xff\x39\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\xff\xff\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\x35\x00\xff\xff\x02\x00\xff\xff\x39\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\xff\xff\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\x39\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\xff\xff\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\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\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\xff\xff\xff\xff\x2f\x00\x30\x00\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\xff\xff\xff\xff\x2f\x00\x30\x00\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\xff\xff\xff\xff\x2f\x00\x30\x00\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\x2a\x00\x2b\x00\xff\xff\xff\xff\xff\xff\x2f\x00\x30\x00\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\xff\xff\xff\xff\x2f\x00\x30\x00\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\xff\xff\xff\xff\x2f\x00\x30\x00\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\xff\xff\xff\xff\x2f\x00\x30\x00\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\xff\xff\xff\xff\x2f\x00\x30\x00\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\xff\xff\xff\xff\x2f\x00\x30\x00\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\xff\xff\xff\xff\x2f\x00\x30\x00\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\xff\xff\xff\xff\x2f\x00\x30\x00\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\xff\xff\xff\xff\x2f\x00\x30\x00\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\xff\xff\xff\xff\x2f\x00\x30\x00\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\xff\xff\xff\xff\x2f\x00\x30\x00\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\xff\xff\xff\xff\x2f\x00\x30\x00\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\xff\xff\xff\xff\x2f\x00\x30\x00\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\xff\xff\xff\xff\x2f\x00\x30\x00\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\xff\xff\x26\x00\x27\x00\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\xff\xff\xff\xff\x2f\x00\x30\x00\xff\xff\xff\xff\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\xff\xff\xff\xff\x27\x00\x28\x00\xff\xff\xff\xff\x2b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\xff\xff\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\x25\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\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\x25\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\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\x25\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\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\x25\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\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\x00\x25\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\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\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\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\x43\x00\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\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\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\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\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\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\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\x43\x00\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\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\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\x44\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\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\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\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\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\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\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\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\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\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\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\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\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\x24\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\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x44\x00\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\xff\xff\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\x17\x00\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\xff\xff\xff\xff\xff\xff\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x0f\x00\x10\x00\x11\x00\xff\xff\x44\x00\x14\x00\x15\x00\x16\x00\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\x24\x00\x25\x00\xff\xff\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\x39\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x44\x00\x43\x00\xff\xff\xff\xff\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\x39\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\xff\xff\xff\xff\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\x39\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\xff\xff\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\x39\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\xff\xff\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\x39\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\xff\xff\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\x39\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x43\x00\xff\xff\xff\xff\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x16\x00\x17\x00\x18\x00\x19\x00\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\x20\x00\xff\xff\x22\x00\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\x39\x00\x3a\x00\xff\xff\x20\x00\x3d\x00\x22\x00\x3f\x00\x24\x00\x41\x00\xff\xff\x43\x00\xff\xff\xff\xff\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\x35\x00\xff\xff\xff\xff\xff\xff\x39\x00\x3a\x00\xff\xff\x20\x00\x3d\x00\x22\x00\x3f\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\xff\xff\xff\xff\x32\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\xff\xff\xff\xff\xff\xff\xff\xff"#++happyTable :: HappyAddr+happyTable = HappyA# "\x00\x00\x6e\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xb2\x00\x96\x00\x0f\x00\x96\x00\x96\x00\x10\x00\x11\x00\x12\x00\x06\x00\x5f\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x96\x00\x22\x00\x1c\x01\x5c\x00\x24\x00\x25\x00\x69\x01\x48\x01\x26\x00\x21\x01\x75\x01\x59\x01\x27\x00\x28\x00\x54\x01\x01\x01\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x01\x01\x96\x00\x07\x01\x75\x01\x2f\x00\x30\x00\x31\x00\x6b\x01\x4c\x01\x24\x01\x5d\x00\x32\x00\x4c\x01\x66\x01\x46\x01\x39\x01\xb3\x00\x3a\x01\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xde\x00\x5f\x01\x0f\x00\x54\x00\x47\x01\x10\x00\x11\x00\x12\x00\x54\x00\x55\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x64\x00\x22\x00\x05\x01\x5c\x00\x24\x00\x25\x00\xdf\x00\x55\x01\x26\x00\x02\x01\xa1\x00\xa2\x00\x27\x00\x28\x00\xa3\x00\xa4\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x09\x01\x09\x01\xb9\x00\xba\x00\x2f\x00\x30\x00\x31\x00\xb7\x00\x7e\x00\x6c\x01\x5d\x00\x32\x00\x54\x00\x3e\x01\x4c\x01\x39\x01\x7f\x00\x3a\x01\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xa5\x00\xa6\x00\x0f\x00\x6e\x00\x63\x01\x10\x00\x11\x00\x12\x00\x3d\x01\x0a\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xf8\x00\x22\x00\x44\x01\x5c\x00\x24\x00\x25\x00\xb5\x00\xb6\x00\x26\x00\x4d\x01\xf9\x00\xb7\x00\x27\x00\x28\x00\x17\x01\x18\x01\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x96\x00\x96\x00\x62\x01\x30\x01\x2f\x00\x30\x00\x31\x00\x4c\x01\x81\x00\x5f\x01\x5d\x00\x32\x00\x4d\x01\x41\x01\x4c\x01\x39\x01\x82\x00\x3a\x01\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x96\x00\x96\x00\x0f\x00\x6e\x00\x32\x01\x10\x00\x11\x00\x12\x00\x0e\x01\x0f\x01\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x96\x00\x22\x00\x6d\x01\x5c\x00\x24\x00\x25\x00\xe5\x00\x97\x00\x26\x00\x98\x00\x16\x01\x17\x01\x27\x00\x28\x00\x6f\x00\x70\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x22\x01\x96\x00\x4b\x01\x37\x01\x2f\x00\x30\x00\x31\x00\x4c\x01\x5d\x01\x48\x01\x5d\x00\x32\x00\x4d\x01\x38\x01\x10\x01\x39\x01\xb0\x00\x3a\x01\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\xbd\x00\x00\x01\x0f\x00\x6e\x00\xc2\x00\x10\x00\x11\x00\x12\x00\x23\x01\xe5\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\xe6\x00\x22\x00\xe8\x00\x5c\x00\x24\x00\x25\x00\xb9\x00\xba\x00\x26\x00\x01\x01\xef\x00\xb7\x00\x27\x00\x28\x00\x80\x00\x70\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x5f\x01\x60\x01\x04\x01\xf0\x00\x2f\x00\x30\x00\x31\x00\x12\x01\x13\x01\xa7\x00\x5d\x00\x32\x00\xa8\x00\xa9\x00\x5e\x00\xf9\x00\x5f\x00\x60\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x2d\x01\xe8\x00\x0f\x00\xaa\x00\xab\x00\x10\x00\x11\x00\x12\x00\x54\x00\xfa\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x62\x00\x22\x00\x43\x00\x5c\x00\x24\x00\x25\x00\x06\x00\xe8\x00\x26\x00\x72\x00\x48\x00\xb0\x00\x27\x00\x28\x00\xb3\x00\x4d\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xb7\x00\x55\x00\x56\x00\x57\x00\x2f\x00\x30\x00\x31\x00\x47\x01\x48\x01\x49\x01\x5d\x00\x32\x00\x5b\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x3f\x01\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x06\x00\x96\x00\x0f\x00\x06\x00\xe8\x00\x10\x00\x11\x00\x12\x00\xaf\x00\xb0\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x73\x01\x22\x00\x74\x00\x5c\x00\x24\x00\x25\x00\x9d\x00\x9e\x00\x26\x00\x9f\x00\xa0\x00\x68\x01\x27\x00\x28\x00\x34\x00\x69\x01\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x54\x00\x55\x00\x56\x00\x57\x00\x2f\x00\x30\x00\x31\x00\x71\x01\x65\x00\x66\x00\x5d\x00\x32\x00\x67\x00\x35\x00\x36\x00\x37\x00\x38\x00\x64\x00\x0a\x01\x06\x00\x39\x00\x3a\x00\x5a\x01\x3b\x00\x5c\x01\x3c\x00\x15\x01\x3d\x00\x74\x00\x3e\x01\x3e\x00\x65\x01\x66\x01\x3f\x00\x40\x00\xaa\x00\xab\x00\x41\x00\x42\x00\x06\x00\x41\x01\x43\x00\x50\x01\x44\x00\x45\x00\x46\x00\x34\x00\x4f\x01\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x53\x01\x35\x00\x36\x00\x37\x00\x38\x00\xf4\x00\xf5\x00\xf6\x00\x39\x00\x3a\x00\x32\x01\x3b\x00\x2c\x01\x3c\x00\xe4\x00\x3d\x00\x54\x00\x36\x01\x3e\x00\x37\x01\x54\x00\x3f\x00\x40\x00\x3c\x01\x08\x01\x41\x00\x42\x00\x74\x00\x12\x01\x43\x00\x54\x00\x44\x00\x45\x00\x46\x00\x34\x00\x1a\x01\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x96\x00\x35\x00\x36\x00\x37\x00\x38\x00\x1c\x01\x20\x01\x54\x00\x39\x00\x3a\x00\x99\x00\x3b\x00\x9a\x00\x3c\x00\xf4\x00\x3d\x00\x9b\x00\x54\x00\x3e\x00\x9c\x00\xbb\x00\x3f\x00\x40\x00\xd5\xff\xd4\xff\x41\x00\x42\x00\x06\x00\xea\x00\x43\x00\x96\x00\x44\x00\x45\x00\x46\x00\x34\x00\xfc\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\xff\x00\x35\x00\x36\x00\x37\x00\x38\x00\xff\xff\x05\x01\x6b\x00\x39\x00\x3a\x00\x54\x00\x3b\x00\x6c\x00\x3c\x00\x8a\x00\x3d\x00\x74\x00\x76\x00\x3e\x00\x7b\x00\x64\x00\x3f\x00\x40\x00\x7c\x00\x96\x00\x41\x00\x42\x00\x54\x00\xff\xff\x43\x00\x99\x00\x44\x00\x45\x00\x46\x00\x34\x00\x9a\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x9b\x00\x35\x00\x36\x00\x37\x00\x38\x00\x9c\x00\xbb\x00\x06\x00\x39\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x00\x00\x41\x00\x42\x00\x00\x00\x00\x00\x43\x00\x00\x00\x44\x00\x45\x00\x46\x00\x34\x00\x00\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x00\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x00\x00\x41\x00\x42\x00\x00\x00\x00\x00\x43\x00\x00\x00\x44\x00\x62\x00\x46\x00\x30\x01\x00\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x00\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x00\x00\x41\x00\x42\x00\x00\x00\x00\x00\x43\x00\x00\x00\x44\x00\x45\x00\x46\x00\x34\x00\x00\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x00\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x00\x00\x41\x00\x42\x00\x00\x00\x00\x00\x43\x00\x00\x00\x44\x00\x45\x00\x46\x00\x34\x00\x00\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x00\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x00\x00\x41\x00\x42\x00\x00\x00\x00\x00\x43\x00\x00\x00\x44\x00\x62\x00\x46\x00\x34\x00\x00\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x00\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x00\x00\x41\x00\x42\x00\x00\x00\x00\x00\x43\x00\x00\x00\x44\x00\x45\x00\x46\x00\x34\x00\x00\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x00\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x00\x00\x41\x00\x42\x00\x00\x00\x00\x00\x43\x00\x00\x00\x44\x00\x62\x00\x46\x00\x34\x00\x00\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x00\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x00\x00\x41\x00\x42\x00\x00\x00\x00\x00\x43\x00\x00\x00\x44\x00\x45\x00\x46\x00\x34\x00\x00\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x00\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\x3d\x00\x00\x00\xb2\x00\x3e\x00\x00\x00\x00\x00\x3f\x00\x40\x00\x00\x00\x00\x00\x41\x00\x42\x00\x00\x00\x00\x00\x43\x00\x00\x00\x44\x00\x62\x00\x46\x00\x06\x00\x00\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x00\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x1b\x01\x00\x00\x39\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x5b\x00\x00\x00\x3d\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x41\x00\xb3\x00\x0f\x00\x00\x00\x43\x00\x78\x00\x79\x00\x45\x00\x00\x00\xe1\x00\x00\x00\x47\x00\x48\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x4d\x00\x00\x00\x4f\x00\x00\x00\x51\x00\x00\x00\x00\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3a\x00\x00\x00\x3b\x00\x28\x01\x5b\x00\x00\x00\x3d\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x58\x00\x59\x00\x0e\x00\x41\x00\x00\x00\x0f\x00\x00\x00\x43\x00\x32\x00\x00\x00\x45\x00\x00\x00\xe1\x00\x00\x00\x47\x00\x48\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x4d\x00\x00\x00\x4f\x00\x00\x00\x51\x00\x00\x00\x00\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3a\x00\x00\x00\x3b\x00\xe2\x00\x5b\x00\x00\x00\x3d\x00\x00\x00\x65\x00\x66\x00\x00\x00\x00\x00\x67\x00\xac\x00\xad\x00\xae\x00\x41\x00\x68\x00\x69\x00\x00\x00\x43\x00\x00\x00\x00\x00\x45\x00\x00\x00\x8e\x00\x00\x00\x47\x00\x48\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x4d\x00\x00\x00\x4f\x00\x00\x00\x51\x00\x00\x00\x00\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3a\x00\x00\x00\x3b\x00\x8f\x00\x5b\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x43\x00\x00\x00\x00\x00\x45\x00\x00\x00\x8e\x00\x00\x00\x47\x00\x48\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x4d\x00\x00\x00\x4f\x00\x00\x00\x51\x00\x00\x00\x00\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x5b\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x43\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x47\x00\x48\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x4d\x00\x00\x00\x4f\x00\x00\x00\x51\x00\x00\x00\x00\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x76\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x77\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x84\x00\x85\x00\x0b\x00\x0c\x00\x86\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x68\x00\x69\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x22\x00\x00\x00\x87\x00\x24\x00\x25\x00\x00\x00\x88\x00\x26\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x00\x00\x00\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x30\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x22\x00\x00\x00\x87\x00\x24\x00\x25\x00\x00\x00\x73\x01\x26\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x00\x00\x00\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x30\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x22\x00\x00\x00\x87\x00\x24\x00\x25\x00\x00\x00\x6d\x01\x26\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x00\x00\x00\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x30\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x22\x00\x00\x00\x87\x00\x24\x00\x25\x00\x00\x00\xf2\x00\x26\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x00\x00\x00\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x30\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x22\x00\x00\x00\xe2\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x00\x00\x00\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x30\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x22\x00\x00\x00\x76\x01\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x00\x00\x00\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x30\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x22\x00\x00\x00\x71\x01\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x00\x00\x00\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x30\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x22\x00\x00\x00\xe2\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x00\x00\x00\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x30\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x22\x00\x00\x00\x6f\x01\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x00\x00\x00\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x30\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x22\x00\x00\x00\x56\x01\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x00\x00\x00\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x30\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x22\x00\x00\x00\x5a\x01\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x00\x00\x00\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x30\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x22\x00\x00\x00\x33\x01\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x00\x00\x00\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x30\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x22\x00\x00\x00\x34\x01\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x00\x00\x00\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x30\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x22\x00\x00\x00\xe2\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x00\x00\x00\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x30\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x22\x00\x00\x00\xbb\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x00\x00\x00\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x30\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x22\x00\x00\x00\xe2\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x00\x00\x00\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x30\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x22\x00\x00\x00\x7c\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x00\x00\x00\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x30\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x22\x00\x00\x00\x23\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x00\x00\x00\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x30\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x22\x00\x00\x00\x00\x00\x2d\x01\x25\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x2e\x01\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x00\x30\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\xeb\x00\x6e\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\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\xeb\x00\x57\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\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\xeb\x00\x50\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\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\xeb\x00\x2a\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\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\xea\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\xeb\x00\xec\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x8a\x00\x8b\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x8c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x5c\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\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x42\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\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x43\x01\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x51\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\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x28\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\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x29\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\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x0b\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\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x1d\x01\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x0c\x01\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x1e\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\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x32\x00\xbe\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xbf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\xc1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\xee\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\xf1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\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\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\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\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x24\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\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x25\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\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x26\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\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x0f\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\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xc3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xdc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\xdf\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x6c\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x62\x01\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x6c\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\xda\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x6c\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xd9\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x6c\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\xd8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x6c\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\xd7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x6c\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\xd6\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x6c\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xd2\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x6c\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xd3\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x6c\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xd4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x6c\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xd5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x6c\x00\x14\x00\x15\x00\x16\x00\x17\x00\xcc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x6c\x00\x14\x00\x15\x00\x16\x00\x17\x00\xcd\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x6c\x00\x14\x00\x15\x00\x16\x00\x17\x00\xce\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x6c\x00\x14\x00\x15\x00\x16\x00\x17\x00\xcf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x6c\x00\x14\x00\x15\x00\x16\x00\x17\x00\xd0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x6c\x00\x14\x00\x15\x00\x16\x00\x17\x00\xd1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x6c\x00\x14\x00\x15\x00\x16\x00\xc9\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x32\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x6c\x00\x14\x00\x15\x00\x16\x00\xca\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x6c\x00\x14\x00\x15\x00\x16\x00\xcb\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x6c\x00\x14\x00\x15\x00\xc4\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x6c\x00\x14\x00\x15\x00\xc5\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x6c\x00\x14\x00\x15\x00\xc6\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x6c\x00\x14\x00\x15\x00\xc7\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x6c\x00\x14\x00\x15\x00\xc8\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x6c\x00\x14\x00\x6d\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x6c\x00\x14\x00\x71\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x6c\x00\x14\x00\x7d\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x6c\x00\x14\x00\x8f\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x6c\x00\x14\x00\x90\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x6c\x00\x14\x00\x91\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x6c\x00\x14\x00\x92\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x6c\x00\x14\x00\x93\x00\x00\x00\x00\x00\x00\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x59\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x00\x00\x10\x00\x11\x00\x12\x00\x00\x00\x32\x00\x6c\x00\x14\x00\x94\x00\x00\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x5b\x00\x00\x00\x3d\x00\xc1\x00\x00\x00\x00\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x43\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x47\x00\x48\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x4d\x00\x00\x00\x4f\x00\x32\x00\x51\x00\x00\x00\x00\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x5b\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x43\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x47\x00\x48\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x4d\x00\x00\x00\x4f\x00\xee\x00\x51\x00\x00\x00\x00\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x5b\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x43\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x47\x00\x48\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x4d\x00\x00\x00\x4f\x00\x00\x00\x51\x00\x00\x00\x00\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x5b\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x43\x00\x00\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x47\x00\x48\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x4d\x00\x00\x00\x4f\x00\x00\x00\x51\x00\x00\x00\x00\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x5b\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x43\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x47\x00\x48\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x4d\x00\x00\x00\x4f\x00\x00\x00\x51\x00\x00\x00\x00\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x5b\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x43\x00\x00\x00\x00\x00\x62\x00\x00\x00\x00\x00\x00\x00\x47\x00\x48\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x4d\x00\x00\x00\x4f\x00\x00\x00\x51\x00\x00\x00\x00\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x35\x00\x36\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x39\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x5b\x00\x00\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x00\x00\x43\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x47\x00\x48\x00\x00\x00\x3b\x00\x4b\x00\x5b\x00\x4d\x00\x3d\x00\x4f\x00\x00\x00\x51\x00\x00\x00\x00\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x00\x00\x00\x00\x00\x00\x43\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x47\x00\x48\x00\x00\x00\x3b\x00\x4b\x00\x5b\x00\x4d\x00\x3d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x00\x00\x00\x00\x00\x00\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x00\x00\x00\x00\x00\x4b\x00\x00\x00\x4d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyReduceArr = Happy_Data_Array.array (4, 202) [+	(4 , happyReduce_4),+	(5 , happyReduce_5),+	(6 , happyReduce_6),+	(7 , happyReduce_7),+	(8 , happyReduce_8),+	(9 , happyReduce_9),+	(10 , happyReduce_10),+	(11 , happyReduce_11),+	(12 , happyReduce_12),+	(13 , happyReduce_13),+	(14 , happyReduce_14),+	(15 , happyReduce_15),+	(16 , happyReduce_16),+	(17 , happyReduce_17),+	(18 , happyReduce_18),+	(19 , happyReduce_19),+	(20 , happyReduce_20),+	(21 , happyReduce_21),+	(22 , happyReduce_22),+	(23 , happyReduce_23),+	(24 , happyReduce_24),+	(25 , happyReduce_25),+	(26 , happyReduce_26),+	(27 , happyReduce_27),+	(28 , happyReduce_28),+	(29 , happyReduce_29),+	(30 , happyReduce_30),+	(31 , happyReduce_31),+	(32 , happyReduce_32),+	(33 , happyReduce_33),+	(34 , happyReduce_34),+	(35 , happyReduce_35),+	(36 , happyReduce_36),+	(37 , happyReduce_37),+	(38 , happyReduce_38),+	(39 , happyReduce_39),+	(40 , happyReduce_40),+	(41 , happyReduce_41),+	(42 , happyReduce_42),+	(43 , happyReduce_43),+	(44 , happyReduce_44),+	(45 , happyReduce_45),+	(46 , happyReduce_46),+	(47 , happyReduce_47),+	(48 , happyReduce_48),+	(49 , happyReduce_49),+	(50 , happyReduce_50),+	(51 , happyReduce_51),+	(52 , happyReduce_52),+	(53 , happyReduce_53),+	(54 , happyReduce_54),+	(55 , happyReduce_55),+	(56 , happyReduce_56),+	(57 , happyReduce_57),+	(58 , happyReduce_58),+	(59 , happyReduce_59),+	(60 , happyReduce_60),+	(61 , happyReduce_61),+	(62 , happyReduce_62),+	(63 , happyReduce_63),+	(64 , happyReduce_64),+	(65 , happyReduce_65),+	(66 , happyReduce_66),+	(67 , happyReduce_67),+	(68 , happyReduce_68),+	(69 , happyReduce_69),+	(70 , happyReduce_70),+	(71 , happyReduce_71),+	(72 , happyReduce_72),+	(73 , happyReduce_73),+	(74 , happyReduce_74),+	(75 , happyReduce_75),+	(76 , happyReduce_76),+	(77 , happyReduce_77),+	(78 , happyReduce_78),+	(79 , happyReduce_79),+	(80 , happyReduce_80),+	(81 , happyReduce_81),+	(82 , happyReduce_82),+	(83 , happyReduce_83),+	(84 , happyReduce_84),+	(85 , happyReduce_85),+	(86 , happyReduce_86),+	(87 , happyReduce_87),+	(88 , happyReduce_88),+	(89 , happyReduce_89),+	(90 , happyReduce_90),+	(91 , happyReduce_91),+	(92 , happyReduce_92),+	(93 , happyReduce_93),+	(94 , happyReduce_94),+	(95 , happyReduce_95),+	(96 , happyReduce_96),+	(97 , happyReduce_97),+	(98 , happyReduce_98),+	(99 , happyReduce_99),+	(100 , happyReduce_100),+	(101 , happyReduce_101),+	(102 , happyReduce_102),+	(103 , happyReduce_103),+	(104 , happyReduce_104),+	(105 , happyReduce_105),+	(106 , happyReduce_106),+	(107 , happyReduce_107),+	(108 , happyReduce_108),+	(109 , happyReduce_109),+	(110 , happyReduce_110),+	(111 , happyReduce_111),+	(112 , happyReduce_112),+	(113 , happyReduce_113),+	(114 , happyReduce_114),+	(115 , happyReduce_115),+	(116 , happyReduce_116),+	(117 , happyReduce_117),+	(118 , happyReduce_118),+	(119 , happyReduce_119),+	(120 , happyReduce_120),+	(121 , happyReduce_121),+	(122 , happyReduce_122),+	(123 , happyReduce_123),+	(124 , happyReduce_124),+	(125 , happyReduce_125),+	(126 , happyReduce_126),+	(127 , happyReduce_127),+	(128 , happyReduce_128),+	(129 , happyReduce_129),+	(130 , happyReduce_130),+	(131 , happyReduce_131),+	(132 , happyReduce_132),+	(133 , happyReduce_133),+	(134 , happyReduce_134),+	(135 , happyReduce_135),+	(136 , happyReduce_136),+	(137 , happyReduce_137),+	(138 , happyReduce_138),+	(139 , happyReduce_139),+	(140 , happyReduce_140),+	(141 , happyReduce_141),+	(142 , happyReduce_142),+	(143 , happyReduce_143),+	(144 , happyReduce_144),+	(145 , happyReduce_145),+	(146 , happyReduce_146),+	(147 , happyReduce_147),+	(148 , happyReduce_148),+	(149 , happyReduce_149),+	(150 , happyReduce_150),+	(151 , happyReduce_151),+	(152 , happyReduce_152),+	(153 , happyReduce_153),+	(154 , happyReduce_154),+	(155 , happyReduce_155),+	(156 , happyReduce_156),+	(157 , happyReduce_157),+	(158 , happyReduce_158),+	(159 , happyReduce_159),+	(160 , happyReduce_160),+	(161 , happyReduce_161),+	(162 , happyReduce_162),+	(163 , happyReduce_163),+	(164 , happyReduce_164),+	(165 , happyReduce_165),+	(166 , happyReduce_166),+	(167 , happyReduce_167),+	(168 , happyReduce_168),+	(169 , happyReduce_169),+	(170 , happyReduce_170),+	(171 , happyReduce_171),+	(172 , happyReduce_172),+	(173 , happyReduce_173),+	(174 , happyReduce_174),+	(175 , happyReduce_175),+	(176 , happyReduce_176),+	(177 , happyReduce_177),+	(178 , happyReduce_178),+	(179 , happyReduce_179),+	(180 , happyReduce_180),+	(181 , happyReduce_181),+	(182 , happyReduce_182),+	(183 , happyReduce_183),+	(184 , happyReduce_184),+	(185 , happyReduce_185),+	(186 , happyReduce_186),+	(187 , happyReduce_187),+	(188 , happyReduce_188),+	(189 , happyReduce_189),+	(190 , happyReduce_190),+	(191 , happyReduce_191),+	(192 , happyReduce_192),+	(193 , happyReduce_193),+	(194 , happyReduce_194),+	(195 , happyReduce_195),+	(196 , happyReduce_196),+	(197 , happyReduce_197),+	(198 , happyReduce_198),+	(199 , happyReduce_199),+	(200 , happyReduce_200),+	(201 , happyReduce_201),+	(202 , happyReduce_202)+	]++happy_n_terms = 77 :: Int+happy_n_nonterms = 75 :: Int++happyReduce_4 = happySpecReduce_1  0# happyReduction_4+happyReduction_4 happy_x_1+	 =  happyIn7+		 (AST.JSLiteral ";"+	)++happyReduce_5 = happySpecReduce_0  0# happyReduction_5+happyReduction_5  =  happyIn7+		 (AST.JSLiteral ""+	)++happyReduce_6 = happySpecReduce_1  1# happyReduction_6+happyReduction_6 happy_x_1+	 =  case happyOut9 happy_x_1 of { happy_var_1 -> +	happyIn8+		 (happy_var_1+	)}++happyReduce_7 = happySpecReduce_1  1# happyReduction_7+happyReduction_7 happy_x_1+	 =  case happyOut10 happy_x_1 of { happy_var_1 -> +	happyIn8+		 (happy_var_1+	)}++happyReduce_8 = happySpecReduce_1  1# happyReduction_8+happyReduction_8 happy_x_1+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> +	happyIn8+		 (happy_var_1+	)}++happyReduce_9 = happySpecReduce_1  1# happyReduction_9+happyReduction_9 happy_x_1+	 =  case happyOut12 happy_x_1 of { happy_var_1 -> +	happyIn8+		 (happy_var_1+	)}++happyReduce_10 = happySpecReduce_1  2# happyReduction_10+happyReduction_10 happy_x_1+	 =  happyIn9+		 (AST.JSLiteral "null"+	)++happyReduce_11 = happySpecReduce_1  3# happyReduction_11+happyReduction_11 happy_x_1+	 =  happyIn10+		 (AST.JSLiteral "true"+	)++happyReduce_12 = happySpecReduce_1  3# happyReduction_12+happyReduction_12 happy_x_1+	 =  happyIn10+		 (AST.JSLiteral "false"+	)++happyReduce_13 = happySpecReduce_1  4# happyReduction_13+happyReduction_13 happy_x_1+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> +	happyIn11+		 (AST.JSDecimal (token_literal happy_var_1)+	)}++happyReduce_14 = happySpecReduce_1  4# happyReduction_14+happyReduction_14 happy_x_1+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> +	happyIn11+		 (AST.JSHexInteger (token_literal happy_var_1)+	)}++happyReduce_15 = happySpecReduce_1  5# happyReduction_15+happyReduction_15 happy_x_1+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> +	happyIn12+		 (AST.JSStringLiteral (token_delimiter happy_var_1) (token_literal happy_var_1)+	)}++happyReduce_16 = happySpecReduce_1  6# happyReduction_16+happyReduction_16 happy_x_1+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> +	happyIn13+		 (AST.JSRegEx (token_literal happy_var_1)+	)}++happyReduce_17 = happySpecReduce_1  7# happyReduction_17+happyReduction_17 happy_x_1+	 =  happyIn14+		 (AST.JSLiteral "this"+	)++happyReduce_18 = happySpecReduce_1  7# happyReduction_18+happyReduction_18 happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	happyIn14+		 (happy_var_1 {- PrimaryExpression1 -}+	)}++happyReduce_19 = happySpecReduce_1  7# happyReduction_19+happyReduction_19 happy_x_1+	 =  case happyOut8 happy_x_1 of { happy_var_1 -> +	happyIn14+		 (happy_var_1 {- PrimaryExpression2 -}+	)}++happyReduce_20 = happySpecReduce_1  7# happyReduction_20+happyReduction_20 happy_x_1+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> +	happyIn14+		 (happy_var_1 {- PrimaryExpression3 -}+	)}++happyReduce_21 = happySpecReduce_1  7# happyReduction_21+happyReduction_21 happy_x_1+	 =  case happyOut19 happy_x_1 of { happy_var_1 -> +	happyIn14+		 (happy_var_1 {- PrimaryExpression4 -}+	)}++happyReduce_22 = happySpecReduce_3  7# happyReduction_22+happyReduction_22 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut43 happy_x_2 of { happy_var_2 -> +	happyIn14+		 (AST.JSExpressionParen happy_var_2+	)}++happyReduce_23 = happySpecReduce_1  7# happyReduction_23+happyReduction_23 happy_x_1+	 =  case happyOut13 happy_x_1 of { happy_var_1 -> +	happyIn14+		 (happy_var_1 {- PrimaryExpression5 -}+	)}++happyReduce_24 = happySpecReduce_1  8# happyReduction_24+happyReduction_24 happy_x_1+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> +	happyIn15+		 (AST.JSIdentifier (token_literal happy_var_1)+	)}++happyReduce_25 = happySpecReduce_2  9# happyReduction_25+happyReduction_25 happy_x_2+	happy_x_1+	 =  happyIn16+		 (AST.JSArrayLiteral []+	)++happyReduce_26 = happySpecReduce_3  9# happyReduction_26+happyReduction_26 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut17 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (AST.JSArrayLiteral happy_var_2+	)}++happyReduce_27 = happySpecReduce_3  9# happyReduction_27+happyReduction_27 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut18 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (AST.JSArrayLiteral happy_var_2+	)}++happyReduce_28 = happyReduce 5# 9# happyReduction_28+happyReduction_28 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut18 happy_x_2 of { happy_var_2 -> +	case happyOut17 happy_x_4 of { happy_var_4 -> +	happyIn16+		 (AST.JSArrayLiteral (happy_var_2++happy_var_4)+	) `HappyStk` happyRest}}++happyReduce_29 = happySpecReduce_1  10# happyReduction_29+happyReduction_29 happy_x_1+	 =  happyIn17+		 ([(AST.JSElision [])]+	)++happyReduce_30 = happySpecReduce_2  10# happyReduction_30+happyReduction_30 happy_x_2+	happy_x_1+	 =  case happyOut17 happy_x_1 of { happy_var_1 -> +	happyIn17+		 (happy_var_1 ++ [(AST.JSElision [])]+	)}++happyReduce_31 = happySpecReduce_2  11# happyReduction_31+happyReduction_31 happy_x_2+	happy_x_1+	 =  case happyOut17 happy_x_1 of { happy_var_1 -> +	case happyOut41 happy_x_2 of { happy_var_2 -> +	happyIn18+		 ([(AST.JSElementList (happy_var_1++happy_var_2)) ]+	)}}++happyReduce_32 = happyReduce 4# 11# happyReduction_32+happyReduction_32 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut18 happy_x_1 of { happy_var_1 -> +	case happyOut17 happy_x_3 of { happy_var_3 -> +	case happyOut41 happy_x_4 of { happy_var_4 -> +	happyIn18+		 ([(AST.JSElementList (happy_var_1++[(AST.JSElision [])]++happy_var_3++happy_var_4))]+	) `HappyStk` happyRest}}}++happyReduce_33 = happySpecReduce_3  11# happyReduction_33+happyReduction_33 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut18 happy_x_1 of { happy_var_1 -> +	case happyOut41 happy_x_3 of { happy_var_3 -> +	happyIn18+		 ([(AST.JSElementList (happy_var_1++[(AST.JSElision [])]++happy_var_3))]+	)}}++happyReduce_34 = happySpecReduce_1  11# happyReduction_34+happyReduction_34 happy_x_1+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> +	happyIn18+		 (happy_var_1 {- ElementList -}+	)}++happyReduce_35 = happySpecReduce_3  12# happyReduction_35+happyReduction_35 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut20 happy_x_2 of { happy_var_2 -> +	happyIn19+		 (AST.JSObjectLiteral happy_var_2+	)}++happyReduce_36 = happySpecReduce_3  13# happyReduction_36+happyReduction_36 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut21 happy_x_1 of { happy_var_1 -> +	case happyOut41 happy_x_3 of { happy_var_3 -> +	happyIn20+		 ([(AST.JSPropertyNameandValue happy_var_1 happy_var_3)]+	)}}++happyReduce_37 = happySpecReduce_3  13# happyReduction_37+happyReduction_37 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut21 happy_x_1 of { happy_var_1 -> +	case happyOut74 happy_x_3 of { happy_var_3 -> +	happyIn20+		 ([(AST.JSPropertyNameandValue happy_var_1 [happy_var_3])]+	)}}++happyReduce_38 = happyReduce 5# 13# happyReduction_38+happyReduction_38 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut20 happy_x_1 of { happy_var_1 -> +	case happyOut21 happy_x_3 of { happy_var_3 -> +	case happyOut41 happy_x_5 of { happy_var_5 -> +	happyIn20+		 ((happy_var_1 ++ [(AST.JSPropertyNameandValue happy_var_3 happy_var_5)])+	) `HappyStk` happyRest}}}++happyReduce_39 = happyReduce 5# 13# happyReduction_39+happyReduction_39 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut20 happy_x_1 of { happy_var_1 -> +	case happyOut21 happy_x_3 of { happy_var_3 -> +	case happyOut74 happy_x_5 of { happy_var_5 -> +	happyIn20+		 ((happy_var_1 ++ [(AST.JSPropertyNameandValue happy_var_3 [happy_var_5])])+	) `HappyStk` happyRest}}}++happyReduce_40 = happySpecReduce_0  13# happyReduction_40+happyReduction_40  =  happyIn20+		 ([]+	)++happyReduce_41 = happySpecReduce_1  14# happyReduction_41+happyReduction_41 happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	happyIn21+		 (happy_var_1 {- PropertyName1 -}+	)}++happyReduce_42 = happySpecReduce_1  14# happyReduction_42+happyReduction_42 happy_x_1+	 =  case happyOut12 happy_x_1 of { happy_var_1 -> +	happyIn21+		 (happy_var_1 {- PropertyName2 -}+	)}++happyReduce_43 = happySpecReduce_1  14# happyReduction_43+happyReduction_43 happy_x_1+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> +	happyIn21+		 (happy_var_1 {- PropertyName3 -}+	)}++happyReduce_44 = happySpecReduce_1  15# happyReduction_44+happyReduction_44 happy_x_1+	 =  case happyOut14 happy_x_1 of { happy_var_1 -> +	happyIn22+		 ([happy_var_1] {- MemberExpression -}+	)}++happyReduce_45 = happySpecReduce_1  15# happyReduction_45+happyReduction_45 happy_x_1+	 =  case happyOut75 happy_x_1 of { happy_var_1 -> +	happyIn22+		 ([happy_var_1] {- MemberExpression -}+	)}++happyReduce_46 = happyReduce 4# 15# happyReduction_46+happyReduction_46 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut22 happy_x_1 of { happy_var_1 -> +	case happyOut43 happy_x_3 of { happy_var_3 -> +	happyIn22+		 ([AST.JSMemberSquare happy_var_1 happy_var_3]+	) `HappyStk` happyRest}}++happyReduce_47 = happySpecReduce_3  15# happyReduction_47+happyReduction_47 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut22 happy_x_1 of { happy_var_1 -> +	case happyOut15 happy_x_3 of { happy_var_3 -> +	happyIn22+		 ([AST.JSMemberDot happy_var_1 happy_var_3]+	)}}++happyReduce_48 = happySpecReduce_3  15# happyReduction_48+happyReduction_48 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut22 happy_x_2 of { happy_var_2 -> +	case happyOut25 happy_x_3 of { happy_var_3 -> +	happyIn22+		 ((((AST.JSLiteral "new "):happy_var_2)++[happy_var_3])+	)}}++happyReduce_49 = happySpecReduce_1  16# happyReduction_49+happyReduction_49 happy_x_1+	 =  case happyOut22 happy_x_1 of { happy_var_1 -> +	happyIn23+		 (happy_var_1 {- NewExpression -}+	)}++happyReduce_50 = happySpecReduce_2  16# happyReduction_50+happyReduction_50 happy_x_2+	happy_x_1+	 =  case happyOut23 happy_x_2 of { happy_var_2 -> +	happyIn23+		 ((AST.JSLiteral "new "):happy_var_2+	)}++happyReduce_51 = happySpecReduce_2  17# happyReduction_51+happyReduction_51 happy_x_2+	happy_x_1+	 =  case happyOut22 happy_x_1 of { happy_var_1 -> +	case happyOut25 happy_x_2 of { happy_var_2 -> +	happyIn24+		 (happy_var_1++[happy_var_2] {- CallExpression -}+	)}}++happyReduce_52 = happySpecReduce_2  17# happyReduction_52+happyReduction_52 happy_x_2+	happy_x_1+	 =  case happyOut24 happy_x_1 of { happy_var_1 -> +	case happyOut25 happy_x_2 of { happy_var_2 -> +	happyIn24+		 ((happy_var_1++[(AST.JSCallExpression "()" [happy_var_2])])+	)}}++happyReduce_53 = happyReduce 4# 17# happyReduction_53+happyReduction_53 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut24 happy_x_1 of { happy_var_1 -> +	case happyOut43 happy_x_3 of { happy_var_3 -> +	happyIn24+		 ((happy_var_1++[(AST.JSCallExpression "[]" [happy_var_3])])+	) `HappyStk` happyRest}}++happyReduce_54 = happySpecReduce_3  17# happyReduction_54+happyReduction_54 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut24 happy_x_1 of { happy_var_1 -> +	case happyOut15 happy_x_3 of { happy_var_3 -> +	happyIn24+		 ((happy_var_1++[(AST.JSCallExpression "."  [happy_var_3])])+	)}}++happyReduce_55 = happySpecReduce_2  18# happyReduction_55+happyReduction_55 happy_x_2+	happy_x_1+	 =  happyIn25+		 ((AST.JSArguments [])+	)++happyReduce_56 = happySpecReduce_3  18# happyReduction_56+happyReduction_56 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut26 happy_x_2 of { happy_var_2 -> +	happyIn25+		 ((AST.JSArguments happy_var_2)+	)}++happyReduce_57 = happySpecReduce_1  19# happyReduction_57+happyReduction_57 happy_x_1+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> +	happyIn26+		 ([happy_var_1] {- ArgumentList -}+	)}++happyReduce_58 = happySpecReduce_3  19# happyReduction_58+happyReduction_58 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut26 happy_x_1 of { happy_var_1 -> +	case happyOut41 happy_x_3 of { happy_var_3 -> +	happyIn26+		 (happy_var_1++[happy_var_3] {- ArgumentList2 -}+	)}}++happyReduce_59 = happySpecReduce_1  20# happyReduction_59+happyReduction_59 happy_x_1+	 =  case happyOut23 happy_x_1 of { happy_var_1 -> +	happyIn27+		 (happy_var_1 {- LeftHandSideExpression1 -}+	)}++happyReduce_60 = happySpecReduce_1  20# happyReduction_60+happyReduction_60 happy_x_1+	 =  case happyOut24 happy_x_1 of { happy_var_1 -> +	happyIn27+		 (happy_var_1 {- LeftHandSideExpression12 -}+	)}++happyReduce_61 = happySpecReduce_1  21# happyReduction_61+happyReduction_61 happy_x_1+	 =  case happyOut27 happy_x_1 of { happy_var_1 -> +	happyIn28+		 (happy_var_1 {- PostfixExpression -}+	)}++happyReduce_62 = happySpecReduce_2  21# happyReduction_62+happyReduction_62 happy_x_2+	happy_x_1+	 =  case happyOut28 happy_x_1 of { happy_var_1 -> +	happyIn28+		 ([(AST.JSExpressionPostfix "++" happy_var_1)]+	)}++happyReduce_63 = happySpecReduce_2  21# happyReduction_63+happyReduction_63 happy_x_2+	happy_x_1+	 =  case happyOut28 happy_x_1 of { happy_var_1 -> +	happyIn28+		 ([(AST.JSExpressionPostfix "--" happy_var_1)]+	)}++happyReduce_64 = happySpecReduce_1  22# happyReduction_64+happyReduction_64 happy_x_1+	 =  case happyOut28 happy_x_1 of { happy_var_1 -> +	happyIn29+		 (happy_var_1 {- UnaryExpression -}+	)}++happyReduce_65 = happySpecReduce_2  22# happyReduction_65+happyReduction_65 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn29+		 (((AST.JSUnary "delete "):happy_var_2)+	)}++happyReduce_66 = happySpecReduce_2  22# happyReduction_66+happyReduction_66 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn29+		 (((AST.JSUnary "void "):happy_var_2)+	)}++happyReduce_67 = happySpecReduce_2  22# happyReduction_67+happyReduction_67 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn29+		 (((AST.JSUnary "typeof "):happy_var_2)+	)}++happyReduce_68 = happySpecReduce_2  22# happyReduction_68+happyReduction_68 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn29+		 (((AST.JSUnary "++"):happy_var_2)+	)}++happyReduce_69 = happySpecReduce_2  22# happyReduction_69+happyReduction_69 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn29+		 (((AST.JSUnary "--"):happy_var_2)+	)}++happyReduce_70 = happySpecReduce_2  22# happyReduction_70+happyReduction_70 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn29+		 (((AST.JSUnary "+"):happy_var_2)+	)}++happyReduce_71 = happySpecReduce_2  22# happyReduction_71+happyReduction_71 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn29+		 (((AST.JSUnary "-"):happy_var_2)+	)}++happyReduce_72 = happySpecReduce_2  22# happyReduction_72+happyReduction_72 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn29+		 (((AST.JSUnary "~"):happy_var_2)+	)}++happyReduce_73 = happySpecReduce_2  22# happyReduction_73+happyReduction_73 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn29+		 (((AST.JSUnary "!"):happy_var_2)+	)}++happyReduce_74 = happySpecReduce_1  23# happyReduction_74+happyReduction_74 happy_x_1+	 =  case happyOut29 happy_x_1 of { happy_var_1 -> +	happyIn30+		 (happy_var_1 {- MultiplicativeExpression -}+	)}++happyReduce_75 = happySpecReduce_3  23# happyReduction_75+happyReduction_75 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_1 of { happy_var_1 -> +	case happyOut30 happy_x_3 of { happy_var_3 -> +	happyIn30+		 ([(AST.JSExpressionBinary "*" happy_var_1 happy_var_3)]+	)}}++happyReduce_76 = happySpecReduce_3  23# happyReduction_76+happyReduction_76 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_1 of { happy_var_1 -> +	case happyOut30 happy_x_3 of { happy_var_3 -> +	happyIn30+		 ([(AST.JSExpressionBinary "/" happy_var_1 happy_var_3)]+	)}}++happyReduce_77 = happySpecReduce_3  23# happyReduction_77+happyReduction_77 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_1 of { happy_var_1 -> +	case happyOut30 happy_x_3 of { happy_var_3 -> +	happyIn30+		 ([(AST.JSExpressionBinary "%" happy_var_1 happy_var_3)]+	)}}++happyReduce_78 = happySpecReduce_3  24# happyReduction_78+happyReduction_78 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut31 happy_x_1 of { happy_var_1 -> +	case happyOut30 happy_x_3 of { happy_var_3 -> +	happyIn31+		 ([(AST.JSExpressionBinary "+" happy_var_1 happy_var_3)]+	)}}++happyReduce_79 = happySpecReduce_3  24# happyReduction_79+happyReduction_79 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut31 happy_x_1 of { happy_var_1 -> +	case happyOut30 happy_x_3 of { happy_var_3 -> +	happyIn31+		 ([(AST.JSExpressionBinary "-" happy_var_1 happy_var_3)]+	)}}++happyReduce_80 = happySpecReduce_1  24# happyReduction_80+happyReduction_80 happy_x_1+	 =  case happyOut30 happy_x_1 of { happy_var_1 -> +	happyIn31+		 (happy_var_1 {- (goRegExp happy_var_1)-} {- AdditiveExpression -}+	)}++happyReduce_81 = happySpecReduce_3  25# happyReduction_81+happyReduction_81 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut32 happy_x_1 of { happy_var_1 -> +	case happyOut31 happy_x_3 of { happy_var_3 -> +	happyIn32+		 ([(AST.JSExpressionBinary "<<" happy_var_1 happy_var_3)]+	)}}++happyReduce_82 = happySpecReduce_3  25# happyReduction_82+happyReduction_82 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut32 happy_x_1 of { happy_var_1 -> +	case happyOut31 happy_x_3 of { happy_var_3 -> +	happyIn32+		 ([(AST.JSExpressionBinary ">>" happy_var_1 happy_var_3)]+	)}}++happyReduce_83 = happySpecReduce_3  25# happyReduction_83+happyReduction_83 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut32 happy_x_1 of { happy_var_1 -> +	case happyOut31 happy_x_3 of { happy_var_3 -> +	happyIn32+		 ([(AST.JSExpressionBinary ">>>" happy_var_1 happy_var_3)]+	)}}++happyReduce_84 = happySpecReduce_1  25# happyReduction_84+happyReduction_84 happy_x_1+	 =  case happyOut31 happy_x_1 of { happy_var_1 -> +	happyIn32+		 (happy_var_1 {- ShiftExpression -}+	)}++happyReduce_85 = happySpecReduce_1  26# happyReduction_85+happyReduction_85 happy_x_1+	 =  case happyOut32 happy_x_1 of { happy_var_1 -> +	happyIn33+		 (happy_var_1 {- RelationalExpression -}+	)}++happyReduce_86 = happySpecReduce_3  26# happyReduction_86+happyReduction_86 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> +	case happyOut32 happy_x_3 of { happy_var_3 -> +	happyIn33+		 ([(AST.JSExpressionBinary "<" happy_var_1 happy_var_3)]+	)}}++happyReduce_87 = happySpecReduce_3  26# happyReduction_87+happyReduction_87 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> +	case happyOut32 happy_x_3 of { happy_var_3 -> +	happyIn33+		 ([(AST.JSExpressionBinary ">" happy_var_1 happy_var_3)]+	)}}++happyReduce_88 = happySpecReduce_3  26# happyReduction_88+happyReduction_88 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> +	case happyOut32 happy_x_3 of { happy_var_3 -> +	happyIn33+		 ([(AST.JSExpressionBinary "<=" happy_var_1 happy_var_3)]+	)}}++happyReduce_89 = happySpecReduce_3  26# happyReduction_89+happyReduction_89 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> +	case happyOut32 happy_x_3 of { happy_var_3 -> +	happyIn33+		 ([(AST.JSExpressionBinary ">=" happy_var_1 happy_var_3)]+	)}}++happyReduce_90 = happySpecReduce_3  26# happyReduction_90+happyReduction_90 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> +	case happyOut32 happy_x_3 of { happy_var_3 -> +	happyIn33+		 ([(AST.JSExpressionBinary " instanceof " happy_var_1 happy_var_3)]+	)}}++happyReduce_91 = happySpecReduce_3  26# happyReduction_91+happyReduction_91 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> +	case happyOut32 happy_x_3 of { happy_var_3 -> +	happyIn33+		 ([(AST.JSExpressionBinary " in " happy_var_1 happy_var_3)]+	)}}++happyReduce_92 = happySpecReduce_1  27# happyReduction_92+happyReduction_92 happy_x_1+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> +	happyIn34+		 (happy_var_1 {- EqualityExpression -}+	)}++happyReduce_93 = happySpecReduce_3  27# happyReduction_93+happyReduction_93 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> +	case happyOut33 happy_x_3 of { happy_var_3 -> +	happyIn34+		 ([(AST.JSExpressionBinary "==" happy_var_1 happy_var_3)]+	)}}++happyReduce_94 = happySpecReduce_3  27# happyReduction_94+happyReduction_94 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> +	case happyOut33 happy_x_3 of { happy_var_3 -> +	happyIn34+		 ([(AST.JSExpressionBinary "!=" happy_var_1 happy_var_3)]+	)}}++happyReduce_95 = happySpecReduce_3  27# happyReduction_95+happyReduction_95 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> +	case happyOut33 happy_x_3 of { happy_var_3 -> +	happyIn34+		 ([(AST.JSExpressionBinary "===" happy_var_1 happy_var_3)]+	)}}++happyReduce_96 = happySpecReduce_3  27# happyReduction_96+happyReduction_96 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> +	case happyOut33 happy_x_3 of { happy_var_3 -> +	happyIn34+		 ([(AST.JSExpressionBinary "!==" happy_var_1 happy_var_3)]+	)}}++happyReduce_97 = happySpecReduce_1  28# happyReduction_97+happyReduction_97 happy_x_1+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> +	happyIn35+		 (happy_var_1 {- BitwiseAndExpression -}+	)}++happyReduce_98 = happySpecReduce_3  28# happyReduction_98+happyReduction_98 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> +	case happyOut34 happy_x_3 of { happy_var_3 -> +	happyIn35+		 ([(AST.JSExpressionBinary "&" happy_var_1 happy_var_3)]+	)}}++happyReduce_99 = happySpecReduce_1  29# happyReduction_99+happyReduction_99 happy_x_1+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> +	happyIn36+		 (happy_var_1 {- BitwiseXOrExpression -}+	)}++happyReduce_100 = happySpecReduce_3  29# happyReduction_100+happyReduction_100 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> +	case happyOut35 happy_x_3 of { happy_var_3 -> +	happyIn36+		 ([(AST.JSExpressionBinary "^" happy_var_1 happy_var_3)]+	)}}++happyReduce_101 = happySpecReduce_1  30# happyReduction_101+happyReduction_101 happy_x_1+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> +	happyIn37+		 (happy_var_1 {- BitwiseOrExpression -}+	)}++happyReduce_102 = happySpecReduce_3  30# happyReduction_102+happyReduction_102 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> +	case happyOut36 happy_x_3 of { happy_var_3 -> +	happyIn37+		 ([(AST.JSExpressionBinary "|" happy_var_1 happy_var_3)]+	)}}++happyReduce_103 = happySpecReduce_1  31# happyReduction_103+happyReduction_103 happy_x_1+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> +	happyIn38+		 (happy_var_1 {- LogicalAndExpression -}+	)}++happyReduce_104 = happySpecReduce_3  31# happyReduction_104+happyReduction_104 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> +	case happyOut37 happy_x_3 of { happy_var_3 -> +	happyIn38+		 ([(AST.JSExpressionBinary "&&" happy_var_1 happy_var_3)]+	)}}++happyReduce_105 = happySpecReduce_1  32# happyReduction_105+happyReduction_105 happy_x_1+	 =  case happyOut38 happy_x_1 of { happy_var_1 -> +	happyIn39+		 (happy_var_1 {- LogicalOrExpression -}+	)}++happyReduce_106 = happySpecReduce_3  32# happyReduction_106+happyReduction_106 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> +	case happyOut38 happy_x_3 of { happy_var_3 -> +	happyIn39+		 ([(AST.JSExpressionBinary "||" happy_var_1 happy_var_3)]+	)}}++happyReduce_107 = happySpecReduce_1  33# happyReduction_107+happyReduction_107 happy_x_1+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> +	happyIn40+		 (happy_var_1 {- ConditionalExpression -}+	)}++happyReduce_108 = happyReduce 5# 33# happyReduction_108+happyReduction_108 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut39 happy_x_1 of { happy_var_1 -> +	case happyOut41 happy_x_3 of { happy_var_3 -> +	case happyOut41 happy_x_5 of { happy_var_5 -> +	happyIn40+		 ([AST.JSExpressionTernary happy_var_1 happy_var_3 happy_var_5]+	) `HappyStk` happyRest}}}++happyReduce_109 = happySpecReduce_1  34# happyReduction_109+happyReduction_109 happy_x_1+	 =  case happyOut40 happy_x_1 of { happy_var_1 -> +	happyIn41+		 (happy_var_1 {- AssignmentExpression -}+	)}++happyReduce_110 = happySpecReduce_3  34# happyReduction_110+happyReduction_110 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut27 happy_x_1 of { happy_var_1 -> +	case happyOut42 happy_x_2 of { happy_var_2 -> +	case happyOut41 happy_x_3 of { happy_var_3 -> +	happyIn41+		 ([(AST.JSElement "assignmentExpression" (happy_var_1++[happy_var_2]++happy_var_3))]+	)}}}++happyReduce_111 = happySpecReduce_1  35# happyReduction_111+happyReduction_111 happy_x_1+	 =  case happyOutTok happy_x_1 of { happy_var_1 -> +	happyIn42+		 (AST.JSOperator (token_literal happy_var_1)+	)}++happyReduce_112 = happySpecReduce_1  35# happyReduction_112+happyReduction_112 happy_x_1+	 =  happyIn42+		 (AST.JSOperator "="+	)++happyReduce_113 = happySpecReduce_1  36# happyReduction_113+happyReduction_113 happy_x_1+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> +	happyIn43+		 (AST.JSExpression happy_var_1 {- Expression -}+	)}++happyReduce_114 = happySpecReduce_3  36# happyReduction_114+happyReduction_114 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut43 happy_x_1 of { happy_var_1 -> +	case happyOut41 happy_x_3 of { happy_var_3 -> +	happyIn43+		 (flattenExpression happy_var_1 happy_var_3+	)}}++happyReduce_115 = happySpecReduce_1  37# happyReduction_115+happyReduction_115 happy_x_1+	 =  case happyOut43 happy_x_1 of { happy_var_1 -> +	happyIn44+		 ([happy_var_1] {- ExpressionOpt -}+	)}++happyReduce_116 = happySpecReduce_0  37# happyReduction_116+happyReduction_116  =  happyIn44+		 ([]   {- ExpressionOpt -}+	)++happyReduce_117 = happySpecReduce_1  38# happyReduction_117+happyReduction_117 happy_x_1+	 =  case happyOut46 happy_x_1 of { happy_var_1 -> +	happyIn45+		 (happy_var_1 {- Statement1 -}+	)}++happyReduce_118 = happySpecReduce_1  38# happyReduction_118+happyReduction_118 happy_x_1+	 =  case happyOut54 happy_x_1 of { happy_var_1 -> +	happyIn45+		 (happy_var_1 {- Statement3 -}+	)}++happyReduce_119 = happySpecReduce_1  39# happyReduction_119+happyReduction_119 happy_x_1+	 =  case happyOut47 happy_x_1 of { happy_var_1 -> +	happyIn46+		 (happy_var_1 {- StatementNoEmpty1 -}+	)}++happyReduce_120 = happySpecReduce_1  39# happyReduction_120+happyReduction_120 happy_x_1+	 =  case happyOut50 happy_x_1 of { happy_var_1 -> +	happyIn46+		 (happy_var_1 {- StatementNoEmpty2 -}+	)}++happyReduce_121 = happySpecReduce_1  39# happyReduction_121+happyReduction_121 happy_x_1+	 =  case happyOut55 happy_x_1 of { happy_var_1 -> +	happyIn46+		 (happy_var_1 {- StatementNoEmpty5 -}+	)}++happyReduce_122 = happySpecReduce_1  39# happyReduction_122+happyReduction_122 happy_x_1+	 =  case happyOut58 happy_x_1 of { happy_var_1 -> +	happyIn46+		 (happy_var_1 {- StatementNoEmpty6 -}+	)}++happyReduce_123 = happySpecReduce_1  39# happyReduction_123+happyReduction_123 happy_x_1+	 =  case happyOut59 happy_x_1 of { happy_var_1 -> +	happyIn46+		 (happy_var_1 {- StatementNoEmpty7 -}+	)}++happyReduce_124 = happySpecReduce_1  39# happyReduction_124+happyReduction_124 happy_x_1+	 =  case happyOut60 happy_x_1 of { happy_var_1 -> +	happyIn46+		 (happy_var_1 {- StatementNoEmpty8 -}+	)}++happyReduce_125 = happySpecReduce_1  39# happyReduction_125+happyReduction_125 happy_x_1+	 =  case happyOut61 happy_x_1 of { happy_var_1 -> +	happyIn46+		 (happy_var_1 {- StatementNoEmpty9 -}+	)}++happyReduce_126 = happySpecReduce_1  39# happyReduction_126+happyReduction_126 happy_x_1+	 =  case happyOut62 happy_x_1 of { happy_var_1 -> +	happyIn46+		 (happy_var_1 {- StatementNoEmpty10 -}+	)}++happyReduce_127 = happySpecReduce_1  39# happyReduction_127+happyReduction_127 happy_x_1+	 =  case happyOut68 happy_x_1 of { happy_var_1 -> +	happyIn46+		 (happy_var_1 {- StatementNoEmpty11 -}+	)}++happyReduce_128 = happySpecReduce_1  39# happyReduction_128+happyReduction_128 happy_x_1+	 =  case happyOut63 happy_x_1 of { happy_var_1 -> +	happyIn46+		 (happy_var_1 {- StatementNoEmpty12 -}+	)}++happyReduce_129 = happySpecReduce_1  39# happyReduction_129+happyReduction_129 happy_x_1+	 =  case happyOut69 happy_x_1 of { happy_var_1 -> +	happyIn46+		 (happy_var_1 {- StatementNoEmpty13 -}+	)}++happyReduce_130 = happySpecReduce_1  39# happyReduction_130+happyReduction_130 happy_x_1+	 =  case happyOut70 happy_x_1 of { happy_var_1 -> +	happyIn46+		 (happy_var_1 {- StatementNoEmpty14 -}+	)}++happyReduce_131 = happySpecReduce_1  39# happyReduction_131+happyReduction_131 happy_x_1+	 =  case happyOut43 happy_x_1 of { happy_var_1 -> +	happyIn46+		 (happy_var_1 {- StatementNoEmpty15 -}+	)}++happyReduce_132 = happySpecReduce_2  40# happyReduction_132+happyReduction_132 happy_x_2+	happy_x_1+	 =  happyIn47+		 ((AST.JSLiteral ";")+	)++happyReduce_133 = happySpecReduce_3  40# happyReduction_133+happyReduction_133 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut49 happy_x_2 of { happy_var_2 -> +	happyIn47+		 ((if (happy_var_2 == AST.JSStatementList [AST.JSLiteral ";"]) then (AST.JSLiteral ";") else (AST.JSBlock happy_var_2))+	)}++happyReduce_134 = happySpecReduce_2  41# happyReduction_134+happyReduction_134 happy_x_2+	happy_x_1+	 =  happyIn48+		 ((AST.JSBlock (AST.JSStatementList []))+	)++happyReduce_135 = happySpecReduce_3  41# happyReduction_135+happyReduction_135 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut49 happy_x_2 of { happy_var_2 -> +	happyIn48+		 ((AST.JSBlock happy_var_2)+	)}++happyReduce_136 = happySpecReduce_1  42# happyReduction_136+happyReduction_136 happy_x_1+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> +	happyIn49+		 ((AST.JSStatementList [happy_var_1])+	)}++happyReduce_137 = happySpecReduce_2  42# happyReduction_137+happyReduction_137 happy_x_2+	happy_x_1+	 =  case happyOut49 happy_x_1 of { happy_var_1 -> +	case happyOut45 happy_x_2 of { happy_var_2 -> +	happyIn49+		 ((combineStatements happy_var_1 happy_var_2)+	)}}++happyReduce_138 = happySpecReduce_3  43# happyReduction_138+happyReduction_138 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut51 happy_x_2 of { happy_var_2 -> +	happyIn50+		 (AST.JSVariables "var" happy_var_2+	)}++happyReduce_139 = happySpecReduce_3  43# happyReduction_139+happyReduction_139 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut51 happy_x_2 of { happy_var_2 -> +	happyIn50+		 (AST.JSVariables "const" happy_var_2+	)}++happyReduce_140 = happySpecReduce_1  44# happyReduction_140+happyReduction_140 happy_x_1+	 =  case happyOut52 happy_x_1 of { happy_var_1 -> +	happyIn51+		 ([happy_var_1] {- VariableDeclarationList -}+	)}++happyReduce_141 = happySpecReduce_3  44# happyReduction_141+happyReduction_141 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut51 happy_x_1 of { happy_var_1 -> +	case happyOut52 happy_x_3 of { happy_var_3 -> +	happyIn51+		 ((happy_var_1 ++ [happy_var_3]) {- VariableDeclarationList -}+	)}}++happyReduce_142 = happySpecReduce_1  45# happyReduction_142+happyReduction_142 happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	happyIn52+		 ((AST.JSVarDecl happy_var_1 [])+	)}++happyReduce_143 = happySpecReduce_2  45# happyReduction_143+happyReduction_143 happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	case happyOut53 happy_x_2 of { happy_var_2 -> +	happyIn52+		 ((AST.JSVarDecl happy_var_1 happy_var_2)+	)}}++happyReduce_144 = happySpecReduce_2  46# happyReduction_144+happyReduction_144 happy_x_2+	happy_x_1+	 =  case happyOut41 happy_x_2 of { happy_var_2 -> +	happyIn53+		 (happy_var_2 {- Initializer -}+	)}++happyReduce_145 = happySpecReduce_1  47# happyReduction_145+happyReduction_145 happy_x_1+	 =  happyIn54+		 ((AST.JSLiteral ";")+	)++happyReduce_146 = happyReduce 6# 48# happyReduction_146+happyReduction_146 (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 happyOut43 happy_x_3 of { happy_var_3 -> +	case happyOut57 happy_x_5 of { happy_var_5 -> +	case happyOut56 happy_x_6 of { happy_var_6 -> +	happyIn55+		 ((if (happy_var_6 /= []) then  +                       (if (length happy_var_6 == 1) then (AST.JSIfElse happy_var_3 happy_var_5 (head happy_var_6)) +                                            else (AST.JSIfElse happy_var_3 (AST.JSBlock (AST.JSStatementList [happy_var_5])) (last happy_var_6))) +                     else (AST.JSIf happy_var_3 happy_var_5))+	) `HappyStk` happyRest}}}++happyReduce_147 = happySpecReduce_2  49# happyReduction_147+happyReduction_147 happy_x_2+	happy_x_1+	 =  case happyOut45 happy_x_2 of { happy_var_2 -> +	happyIn56+		 ([happy_var_2]+	)}++happyReduce_148 = happySpecReduce_0  49# happyReduction_148+happyReduction_148  =  happyIn56+		 ([]+	)++happyReduce_149 = happySpecReduce_2  50# happyReduction_149+happyReduction_149 happy_x_2+	happy_x_1+	 =  case happyOut46 happy_x_1 of { happy_var_1 -> +	happyIn57+		 ((AST.JSBlock (AST.JSStatementList [happy_var_1]))+	)}++happyReduce_150 = happySpecReduce_1  50# happyReduction_150+happyReduction_150 happy_x_1+	 =  case happyOut46 happy_x_1 of { happy_var_1 -> +	happyIn57+		 (happy_var_1 {- StatementSemi -}+	)}++happyReduce_151 = happySpecReduce_1  50# happyReduction_151+happyReduction_151 happy_x_1+	 =  happyIn57+		 (AST.JSLiteral ";"+	)++happyReduce_152 = happyReduce 7# 51# happyReduction_152+happyReduction_152 (happy_x_7 `HappyStk`+	happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut45 happy_x_2 of { happy_var_2 -> +	case happyOut43 happy_x_5 of { happy_var_5 -> +	case happyOut7 happy_x_7 of { happy_var_7 -> +	happyIn58+		 ((AST.JSDoWhile happy_var_2 happy_var_5 happy_var_7)+	) `HappyStk` happyRest}}}++happyReduce_153 = happyReduce 5# 51# happyReduction_153+happyReduction_153 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut43 happy_x_3 of { happy_var_3 -> +	case happyOut45 happy_x_5 of { happy_var_5 -> +	happyIn58+		 ((AST.JSWhile happy_var_3 happy_var_5)+	) `HappyStk` happyRest}}++happyReduce_154 = happyReduce 9# 51# happyReduction_154+happyReduction_154 (happy_x_9 `HappyStk`+	happy_x_8 `HappyStk`+	happy_x_7 `HappyStk`+	happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut44 happy_x_3 of { happy_var_3 -> +	case happyOut44 happy_x_5 of { happy_var_5 -> +	case happyOut44 happy_x_7 of { happy_var_7 -> +	case happyOut45 happy_x_9 of { happy_var_9 -> +	happyIn58+		 ((AST.JSFor happy_var_3 happy_var_5 happy_var_7 happy_var_9)+	) `HappyStk` happyRest}}}}++happyReduce_155 = happyReduce 10# 51# happyReduction_155+happyReduction_155 (happy_x_10 `HappyStk`+	happy_x_9 `HappyStk`+	happy_x_8 `HappyStk`+	happy_x_7 `HappyStk`+	happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut51 happy_x_4 of { happy_var_4 -> +	case happyOut44 happy_x_6 of { happy_var_6 -> +	case happyOut44 happy_x_8 of { happy_var_8 -> +	case happyOut45 happy_x_10 of { happy_var_10 -> +	happyIn58+		 ((AST.JSForVar happy_var_4 happy_var_6 happy_var_8 happy_var_10)+	) `HappyStk` happyRest}}}}++happyReduce_156 = happyReduce 7# 51# happyReduction_156+happyReduction_156 (happy_x_7 `HappyStk`+	happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut27 happy_x_3 of { happy_var_3 -> +	case happyOut43 happy_x_5 of { happy_var_5 -> +	case happyOut45 happy_x_7 of { happy_var_7 -> +	happyIn58+		 ((AST.JSForIn happy_var_3 happy_var_5 happy_var_7)+	) `HappyStk` happyRest}}}++happyReduce_157 = happyReduce 8# 51# happyReduction_157+happyReduction_157 (happy_x_8 `HappyStk`+	happy_x_7 `HappyStk`+	happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut52 happy_x_4 of { happy_var_4 -> +	case happyOut43 happy_x_6 of { happy_var_6 -> +	case happyOut45 happy_x_8 of { happy_var_8 -> +	happyIn58+		 ((AST.JSForVarIn happy_var_4 happy_var_6 happy_var_8)+	) `HappyStk` happyRest}}}++happyReduce_158 = happySpecReduce_2  52# happyReduction_158+happyReduction_158 happy_x_2+	happy_x_1+	 =  case happyOut7 happy_x_2 of { happy_var_2 -> +	happyIn59+		 ((AST.JSContinue [happy_var_2])+	)}++happyReduce_159 = happySpecReduce_3  52# happyReduction_159+happyReduction_159 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut7 happy_x_3 of { happy_var_3 -> +	happyIn59+		 ((AST.JSContinue [happy_var_2,happy_var_3])+	)}}++happyReduce_160 = happySpecReduce_2  53# happyReduction_160+happyReduction_160 happy_x_2+	happy_x_1+	 =  case happyOut7 happy_x_2 of { happy_var_2 -> +	happyIn60+		 ((AST.JSBreak [] [happy_var_2])+	)}++happyReduce_161 = happySpecReduce_3  53# happyReduction_161+happyReduction_161 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut7 happy_x_3 of { happy_var_3 -> +	happyIn60+		 ((AST.JSBreak [happy_var_2] [happy_var_3])+	)}}++happyReduce_162 = happySpecReduce_2  54# happyReduction_162+happyReduction_162 happy_x_2+	happy_x_1+	 =  case happyOut7 happy_x_2 of { happy_var_2 -> +	happyIn61+		 ((AST.JSReturn [happy_var_2])+	)}++happyReduce_163 = happySpecReduce_3  54# happyReduction_163+happyReduction_163 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut43 happy_x_2 of { happy_var_2 -> +	case happyOut7 happy_x_3 of { happy_var_3 -> +	happyIn61+		 ((AST.JSReturn [happy_var_2,happy_var_3])+	)}}++happyReduce_164 = happyReduce 6# 55# happyReduction_164+happyReduction_164 (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 happyOut43 happy_x_3 of { happy_var_3 -> +	case happyOut45 happy_x_5 of { happy_var_5 -> +	case happyOut7 happy_x_6 of { happy_var_6 -> +	happyIn62+		 ((AST.JSWith happy_var_3 [happy_var_5,happy_var_6])+	) `HappyStk` happyRest}}}++happyReduce_165 = happyReduce 5# 56# happyReduction_165+happyReduction_165 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut43 happy_x_3 of { happy_var_3 -> +	case happyOut64 happy_x_5 of { happy_var_5 -> +	happyIn63+		 ((AST.JSSwitch happy_var_3 happy_var_5)+	) `HappyStk` happyRest}}++happyReduce_166 = happySpecReduce_2  57# happyReduction_166+happyReduction_166 happy_x_2+	happy_x_1+	 =  happyIn64+		 ([]+	)++happyReduce_167 = happySpecReduce_3  57# happyReduction_167+happyReduction_167 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut65 happy_x_2 of { happy_var_2 -> +	happyIn64+		 (happy_var_2            {- CaseBlock2 -}+	)}++happyReduce_168 = happyReduce 4# 57# happyReduction_168+happyReduction_168 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut65 happy_x_2 of { happy_var_2 -> +	case happyOut67 happy_x_3 of { happy_var_3 -> +	happyIn64+		 ((happy_var_2++[happy_var_3])    {- CaseBlock3 -}+	) `HappyStk` happyRest}}++happyReduce_169 = happyReduce 5# 57# happyReduction_169+happyReduction_169 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut65 happy_x_2 of { happy_var_2 -> +	case happyOut67 happy_x_3 of { happy_var_3 -> +	case happyOut65 happy_x_4 of { happy_var_4 -> +	happyIn64+		 ((happy_var_2++(happy_var_3:happy_var_4)) {- CaseBlock4 -}+	) `HappyStk` happyRest}}}++happyReduce_170 = happyReduce 4# 57# happyReduction_170+happyReduction_170 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut67 happy_x_2 of { happy_var_2 -> +	case happyOut65 happy_x_3 of { happy_var_3 -> +	happyIn64+		 ((happy_var_2:happy_var_3)       {- CaseBlock5 -}+	) `HappyStk` happyRest}}++happyReduce_171 = happySpecReduce_3  57# happyReduction_171+happyReduction_171 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut67 happy_x_2 of { happy_var_2 -> +	happyIn64+		 ([happy_var_2]          {- CaseBlock6 -}+	)}++happyReduce_172 = happySpecReduce_1  58# happyReduction_172+happyReduction_172 happy_x_1+	 =  case happyOut66 happy_x_1 of { happy_var_1 -> +	happyIn65+		 ([happy_var_1] {- CaseClauses1 -}+	)}++happyReduce_173 = happySpecReduce_2  58# happyReduction_173+happyReduction_173 happy_x_2+	happy_x_1+	 =  case happyOut65 happy_x_1 of { happy_var_1 -> +	case happyOut66 happy_x_2 of { happy_var_2 -> +	happyIn65+		 ((happy_var_1++[happy_var_2]) {- CaseClauses2 -}+	)}}++happyReduce_174 = happyReduce 4# 59# happyReduction_174+happyReduction_174 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut43 happy_x_2 of { happy_var_2 -> +	case happyOut49 happy_x_4 of { happy_var_4 -> +	happyIn66+		 ((AST.JSCase happy_var_2 happy_var_4)+	) `HappyStk` happyRest}}++happyReduce_175 = happySpecReduce_3  59# happyReduction_175+happyReduction_175 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut43 happy_x_2 of { happy_var_2 -> +	happyIn66+		 ((AST.JSCase happy_var_2 (AST.JSStatementList []))+	)}++happyReduce_176 = happySpecReduce_2  60# happyReduction_176+happyReduction_176 happy_x_2+	happy_x_1+	 =  happyIn67+		 ((AST.JSDefault (AST.JSStatementList []))+	)++happyReduce_177 = happySpecReduce_3  60# happyReduction_177+happyReduction_177 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut49 happy_x_3 of { happy_var_3 -> +	happyIn67+		 ((AST.JSDefault happy_var_3)+	)}++happyReduce_178 = happySpecReduce_3  61# happyReduction_178+happyReduction_178 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	case happyOut45 happy_x_3 of { happy_var_3 -> +	happyIn68+		 ((AST.JSLabelled happy_var_1 happy_var_3)+	)}}++happyReduce_179 = happySpecReduce_2  62# happyReduction_179+happyReduction_179 happy_x_2+	happy_x_1+	 =  case happyOut43 happy_x_2 of { happy_var_2 -> +	happyIn69+		 ((AST.JSThrow happy_var_2)+	)}++happyReduce_180 = happySpecReduce_3  63# happyReduction_180+happyReduction_180 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut48 happy_x_2 of { happy_var_2 -> +	case happyOut71 happy_x_3 of { happy_var_3 -> +	happyIn70+		 ((AST.JSTry happy_var_2 happy_var_3)         {- TryStatement1 -}+	)}}++happyReduce_181 = happySpecReduce_3  63# happyReduction_181+happyReduction_181 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut48 happy_x_2 of { happy_var_2 -> +	case happyOut73 happy_x_3 of { happy_var_3 -> +	happyIn70+		 ((AST.JSTry happy_var_2 [happy_var_3])       {- TryStatement2 -}+	)}}++happyReduce_182 = happyReduce 4# 63# happyReduction_182+happyReduction_182 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut48 happy_x_2 of { happy_var_2 -> +	case happyOut71 happy_x_3 of { happy_var_3 -> +	case happyOut73 happy_x_4 of { happy_var_4 -> +	happyIn70+		 ((AST.JSTry happy_var_2 (happy_var_3++[happy_var_4])) {- TryStatement3 -}+	) `HappyStk` happyRest}}}++happyReduce_183 = happySpecReduce_1  64# happyReduction_183+happyReduction_183 happy_x_1+	 =  case happyOut72 happy_x_1 of { happy_var_1 -> +	happyIn71+		 ([happy_var_1]       {- Catches 1 -}+	)}++happyReduce_184 = happySpecReduce_2  64# happyReduction_184+happyReduction_184 happy_x_2+	happy_x_1+	 =  case happyOut71 happy_x_1 of { happy_var_1 -> +	case happyOut72 happy_x_2 of { happy_var_2 -> +	happyIn71+		 ((happy_var_1++[happy_var_2]) {- Catches 2 -}+	)}}++happyReduce_185 = happyReduce 5# 65# happyReduction_185+happyReduction_185 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut15 happy_x_3 of { happy_var_3 -> +	case happyOut48 happy_x_5 of { happy_var_5 -> +	happyIn72+		 ((AST.JSCatch happy_var_3 [] happy_var_5)+	) `HappyStk` happyRest}}++happyReduce_186 = happyReduce 7# 65# happyReduction_186+happyReduction_186 (happy_x_7 `HappyStk`+	happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut15 happy_x_3 of { happy_var_3 -> +	case happyOut40 happy_x_5 of { happy_var_5 -> +	case happyOut48 happy_x_7 of { happy_var_7 -> +	happyIn72+		 ((AST.JSCatch happy_var_3 happy_var_5 happy_var_7)+	) `HappyStk` happyRest}}}++happyReduce_187 = happySpecReduce_2  66# happyReduction_187+happyReduction_187 happy_x_2+	happy_x_1+	 =  case happyOut48 happy_x_2 of { happy_var_2 -> +	happyIn73+		 ((AST.JSFinally happy_var_2)+	)}++happyReduce_188 = happyReduce 8# 67# happyReduction_188+happyReduction_188 (happy_x_8 `HappyStk`+	happy_x_7 `HappyStk`+	happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut76 happy_x_4 of { happy_var_4 -> +	case happyOut77 happy_x_7 of { happy_var_7 -> +	happyIn74+		 ((AST.JSFunction happy_var_2 happy_var_4 happy_var_7)+	) `HappyStk` happyRest}}}++happyReduce_189 = happyReduce 7# 67# happyReduction_189+happyReduction_189 (happy_x_7 `HappyStk`+	happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut77 happy_x_6 of { happy_var_6 -> +	happyIn74+		 ((AST.JSFunction happy_var_2 [] happy_var_6)+	) `HappyStk` happyRest}}++happyReduce_190 = happyReduce 6# 68# happyReduction_190+happyReduction_190 (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 happyOut77 happy_x_5 of { happy_var_5 -> +	happyIn75+		 ((AST.JSFunctionExpression [] happy_var_5)+	) `HappyStk` happyRest}++happyReduce_191 = happyReduce 7# 68# happyReduction_191+happyReduction_191 (happy_x_7 `HappyStk`+	happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut76 happy_x_3 of { happy_var_3 -> +	case happyOut77 happy_x_6 of { happy_var_6 -> +	happyIn75+		 ((AST.JSFunctionExpression happy_var_3 happy_var_6)+	) `HappyStk` happyRest}}++happyReduce_192 = happySpecReduce_1  69# happyReduction_192+happyReduction_192 happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1] {- FormalParameterList -}+	)}++happyReduce_193 = happySpecReduce_3  69# happyReduction_193+happyReduction_193 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut76 happy_x_1 of { happy_var_1 -> +	case happyOut15 happy_x_3 of { happy_var_3 -> +	happyIn76+		 ((happy_var_1++[happy_var_3])+	)}}++happyReduce_194 = happySpecReduce_1  70# happyReduction_194+happyReduction_194 happy_x_1+	 =  case happyOut79 happy_x_1 of { happy_var_1 -> +	happyIn77+		 ((AST.JSFunctionBody [happy_var_1])+	)}++happyReduce_195 = happySpecReduce_0  70# happyReduction_195+happyReduction_195  =  happyIn77+		 ((AST.JSFunctionBody [])+	)++happyReduce_196 = happySpecReduce_1  71# happyReduction_196+happyReduction_196 happy_x_1+	 =  case happyOut80 happy_x_1 of { happy_var_1 -> +	happyIn78+		 (happy_var_1 {- Program -}+	)}++happyReduce_197 = happySpecReduce_1  72# happyReduction_197+happyReduction_197 happy_x_1+	 =  case happyOut81 happy_x_1 of { happy_var_1 -> +	happyIn79+		 ((AST.JSSourceElements [happy_var_1])+	)}++happyReduce_198 = happySpecReduce_2  72# happyReduction_198+happyReduction_198 happy_x_2+	happy_x_1+	 =  case happyOut79 happy_x_1 of { happy_var_1 -> +	case happyOut81 happy_x_2 of { happy_var_2 -> +	happyIn79+		 ((combineSourceElements happy_var_1 happy_var_2)+	)}}++happyReduce_199 = happySpecReduce_1  73# happyReduction_199+happyReduction_199 happy_x_1+	 =  case happyOut81 happy_x_1 of { happy_var_1 -> +	happyIn80+		 ((AST.JSSourceElementsTop [happy_var_1])+	)}++happyReduce_200 = happySpecReduce_2  73# happyReduction_200+happyReduction_200 happy_x_2+	happy_x_1+	 =  case happyOut80 happy_x_1 of { happy_var_1 -> +	case happyOut81 happy_x_2 of { happy_var_2 -> +	happyIn80+		 ((combineSourceElementsTop happy_var_1 happy_var_2)+	)}}++happyReduce_201 = happySpecReduce_1  74# happyReduction_201+happyReduction_201 happy_x_1+	 =  case happyOut45 happy_x_1 of { happy_var_1 -> +	happyIn81+		 (happy_var_1 {- SourceElement1 -}+	)}++happyReduce_202 = happySpecReduce_1  74# happyReduction_202+happyReduction_202 happy_x_1+	 =  case happyOut74 happy_x_1 of { happy_var_1 -> +	happyIn81+		 (happy_var_1 {- SourceElement2 -}+	)}++happyNewToken action sts stk+	= lexCont(\tk -> +	let cont i = happyDoAction i tk action sts stk in+	case tk of {+	EOFToken {} -> happyDoAction 76# tk action sts stk;+	SemiColonToken {} -> cont 1#;+	CommaToken {} -> cont 2#;+	HookToken {} -> cont 3#;+	ColonToken {} -> cont 4#;+	OrToken {} -> cont 5#;+	AndToken {} -> cont 6#;+	BitwiseOrToken {} -> cont 7#;+	BitwiseXorToken {} -> cont 8#;+	BitwiseAndToken {} -> cont 9#;+	StrictEqToken {} -> cont 10#;+	EqToken {} -> cont 11#;+	SimpleAssignToken {} -> cont 12#;+	StrictNeToken {} -> cont 13#;+	NeToken {} -> cont 14#;+	LshToken {} -> cont 15#;+	LeToken {} -> cont 16#;+	LtToken {} -> cont 17#;+	UrshToken {} -> cont 18#;+	RshToken {} -> cont 19#;+	GeToken {} -> cont 20#;+	GtToken {} -> cont 21#;+	IncrementToken {} -> cont 22#;+	DecrementToken {} -> cont 23#;+	PlusToken {} -> cont 24#;+	MinusToken {} -> cont 25#;+	MulToken {} -> cont 26#;+	DivToken {} -> cont 27#;+	ModToken {} -> cont 28#;+	NotToken {} -> cont 29#;+	BitwiseNotToken {} -> cont 30#;+	DotToken {} -> cont 31#;+	LeftBracketToken {} -> cont 32#;+	RightBracketToken {} -> cont 33#;+	LeftCurlyToken {} -> cont 34#;+	RightCurlyToken {} -> cont 35#;+	LeftParenToken {} -> cont 36#;+	RightParenToken {} -> cont 37#;+	CondcommentEndToken {} -> cont 38#;+	BreakToken {} -> cont 39#;+	CaseToken {} -> cont 40#;+	CatchToken {} -> cont 41#;+	ConstToken {} -> cont 42#;+	ContinueToken {} -> cont 43#;+	DebuggerToken {} -> cont 44#;+	DefaultToken {} -> cont 45#;+	DeleteToken {} -> cont 46#;+	DoToken {} -> cont 47#;+	ElseToken {} -> cont 48#;+	EnumToken {} -> cont 49#;+	FalseToken {} -> cont 50#;+	FinallyToken {} -> cont 51#;+	ForToken {} -> cont 52#;+	FunctionToken {} -> cont 53#;+	IfToken {} -> cont 54#;+	InToken {} -> cont 55#;+	InstanceofToken {} -> cont 56#;+	NewToken {} -> cont 57#;+	NullToken {} -> cont 58#;+	ReturnToken {} -> cont 59#;+	SwitchToken {} -> cont 60#;+	ThisToken {} -> cont 61#;+	ThrowToken {} -> cont 62#;+	TrueToken {} -> cont 63#;+	TryToken {} -> cont 64#;+	TypeofToken {} -> cont 65#;+	VarToken {} -> cont 66#;+	VoidToken {} -> cont 67#;+	WhileToken {} -> cont 68#;+	WithToken {} -> cont 69#;+	IdentifierToken {} -> cont 70#;+	DecimalToken {} -> cont 71#;+	HexIntegerToken {} -> cont 72#;+	StringToken {} -> cont 73#;+	RegExToken {} -> cont 74#;+	AssignToken {} -> cont 75#;+	_ -> happyError' tk+	})++happyError_ tk = happyError' tk++happyThen :: () => P a -> (a -> P b) -> P b+happyThen = (thenP)+happyReturn :: () => a -> P a+happyReturn = (returnP)+happyThen1 = happyThen+happyReturn1 :: () => a -> P a+happyReturn1 = happyReturn+happyError' :: () => (Token) -> P a+happyError' tk = parseError tk++parseProgram = happySomeParser where+  happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut78 x))++parseLiteral = happySomeParser where+  happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut8 x))++parsePrimaryExpression = happySomeParser where+  happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut14 x))++parseStatement = happySomeParser where+  happySomeParser = happyThen (happyParse 3#) (\x -> happyReturn (happyOut45 x))++happySeq = happyDontSeq+++combineSourceElements :: AST.JSNode -> AST.JSNode -> AST.JSNode+combineSourceElements (AST.JSSourceElements xs) x = (AST.JSSourceElements (xs++[x]) )++combineSourceElementsTop :: AST.JSNode -> AST.JSNode -> AST.JSNode+combineSourceElementsTop (AST.JSSourceElementsTop xs) x = (AST.JSSourceElementsTop (xs++[x]) )++combineStatements :: AST.JSNode -> AST.JSNode -> AST.JSNode+combineStatements (AST.JSStatementList xs) (AST.JSStatementList ys) = (AST.JSStatementList (xs++ys) )+combineStatements (AST.JSStatementList xs) y = (AST.JSStatementList (xs++[y]) )++parseError :: Token -> P a +parseError = throwError . UnexpectedToken ++flattenExpression :: AST.JSNode -> [AST.JSNode] -> AST.JSNode+flattenExpression (AST.JSExpression xs) e = AST.JSExpression (xs++litComma++e)+                        where+                          litComma :: [AST.JSNode]+                          litComma = [(AST.JSLiteral ",")]+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "<built-in>" #-}+{-# LINE 1 "<command-line>" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+-- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp ++{-# LINE 30 "templates/GenericTemplate.hs" #-}+++data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList++++++{-# LINE 51 "templates/GenericTemplate.hs" #-}++{-# LINE 61 "templates/GenericTemplate.hs" #-}++{-# LINE 70 "templates/GenericTemplate.hs" #-}++infixr 9 `HappyStk`+data HappyStk a = HappyStk a (HappyStk a)++-----------------------------------------------------------------------------+-- starting the parse++happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll++-----------------------------------------------------------------------------+-- Accepting the parse++-- If the current token is 0#, it means we've just accepted a partial+-- parse (a %partial parser).  We must ignore the saved token on the top of+-- the stack in this case.+happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =+	happyReturn1 ans+happyAccept j tk st sts (HappyStk ans _) = +	(happyTcHack j (happyTcHack st)) (happyReturn1 ans)++-----------------------------------------------------------------------------+-- Arrays only: do the next action++++happyDoAction i tk st+	= {- nothing -}+++	  case action of+		0#		  -> {- nothing -}+				     happyFail i tk st+		-1# 	  -> {- nothing -}+				     happyAccept i tk st+		n | (n Happy_GHC_Exts.<# (0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}++				     (happyReduceArr Happy_Data_Array.! rule) i tk st+				     where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))+		n		  -> {- nothing -}+++				     happyShift new_state i tk st+				     where (new_state) = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))+   where (off)    = indexShortOffAddr happyActOffsets st+         (off_i)  = (off Happy_GHC_Exts.+# i)+	 check  = if (off_i Happy_GHC_Exts.>=# (0# :: Happy_GHC_Exts.Int#))+			then (indexShortOffAddr happyCheck off_i Happy_GHC_Exts.==#  i)+			else False+         (action)+          | check     = indexShortOffAddr happyTable off_i+          | otherwise = indexShortOffAddr happyDefActions st++{-# LINE 130 "templates/GenericTemplate.hs" #-}+++indexShortOffAddr (HappyA# arr) off =+	Happy_GHC_Exts.narrow16Int# i+  where+        i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)+        high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))+        low  = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))+        off' = off Happy_GHC_Exts.*# 2#++++++data HappyAddr = HappyA# Happy_GHC_Exts.Addr#+++++-----------------------------------------------------------------------------+-- HappyState data type (not arrays)++{-# LINE 163 "templates/GenericTemplate.hs" #-}++-----------------------------------------------------------------------------+-- Shifting a token++happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =+     let (i) = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in+--     trace "shifting the error token" $+     happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)++happyShift new_state i tk st sts stk =+     happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)++-- happyReduce is specialised for the common cases.++happySpecReduce_0 i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happySpecReduce_0 nt fn j tk st@((action)) sts stk+     = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)++happySpecReduce_1 i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')+     = let r = fn v1 in+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_2 i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')+     = let r = fn v1 v2 in+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_3 i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')+     = let r = fn v1 v2 v3 in+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happyReduce k i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happyReduce k nt fn j tk st sts stk+     = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of+	 sts1@((HappyCons (st1@(action)) (_))) ->+        	let r = fn stk in  -- it doesn't hurt to always seq here...+       		happyDoSeq r (happyGoto nt j tk st1 sts1 r)++happyMonadReduce k nt fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happyMonadReduce k nt fn j tk st sts stk =+        happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))+       where (sts1@((HappyCons (st1@(action)) (_)))) = happyDrop k (HappyCons (st) (sts))+             drop_stk = happyDropStk k stk++happyMonad2Reduce k nt fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happyMonad2Reduce k nt fn j tk st sts stk =+       happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))+       where (sts1@((HappyCons (st1@(action)) (_)))) = happyDrop k (HappyCons (st) (sts))+             drop_stk = happyDropStk k stk++             (off) = indexShortOffAddr happyGotoOffsets st1+             (off_i) = (off Happy_GHC_Exts.+# nt)+             (new_state) = indexShortOffAddr happyTable off_i+++++happyDrop 0# l = l+happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t++happyDropStk 0# l = l+happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs++-----------------------------------------------------------------------------+-- Moving to a new state after a reduction+++happyGoto nt j tk st = +   {- nothing -}+   happyDoAction j tk new_state+   where (off) = indexShortOffAddr happyGotoOffsets st+         (off_i) = (off Happy_GHC_Exts.+# nt)+         (new_state) = indexShortOffAddr happyTable off_i+++++-----------------------------------------------------------------------------+-- Error recovery (0# is the error token)++-- parse error if we are in recovery and we fail again+happyFail  0# tk old_st _ stk =+--	trace "failing" $ +    	happyError_ tk++{-  We don't need state discarding for our restricted implementation of+    "error".  In fact, it can cause some bogus parses, so I've disabled it+    for now --SDM++-- discard a state+happyFail  0# tk old_st (HappyCons ((action)) (sts)) +						(saved_tok `HappyStk` _ `HappyStk` stk) =+--	trace ("discarding state, depth " ++ show (length stk))  $+	happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk))+-}++-- Enter error recovery: generate an error token,+--                       save the old token and carry on.+happyFail  i tk (action) sts stk =+--      trace "entering error recovery" $+	happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)++-- Internal happy errors:++notHappyAtAll :: a+notHappyAtAll = error "Internal Happy error\n"++-----------------------------------------------------------------------------+-- Hack to get the typechecker to accept our action functions+++happyTcHack :: Happy_GHC_Exts.Int# -> a -> a+happyTcHack x y = y+{-# INLINE happyTcHack #-}+++-----------------------------------------------------------------------------+-- Seq-ing.  If the --strict flag is given, then Happy emits +--	happySeq = happyDoSeq+-- otherwise it emits+-- 	happySeq = happyDontSeq++happyDoSeq, happyDontSeq :: a -> b -> b+happyDoSeq   a b = a `seq` b+happyDontSeq a b = b++-----------------------------------------------------------------------------+-- Don't inline any functions from the template.  GHC has a nasty habit+-- of deciding to inline happyGoto everywhere, which increases the size of+-- the generated parser quite a bit.+++{-# NOINLINE happyDoAction #-}+{-# NOINLINE happyTable #-}+{-# NOINLINE happyCheck #-}+{-# NOINLINE happyActOffsets #-}+{-# NOINLINE happyGotoOffsets #-}+{-# NOINLINE happyDefActions #-}++{-# NOINLINE happyShift #-}+{-# NOINLINE happySpecReduce_0 #-}+{-# NOINLINE happySpecReduce_1 #-}+{-# NOINLINE happySpecReduce_2 #-}+{-# NOINLINE happySpecReduce_3 #-}+{-# NOINLINE happyReduce #-}+{-# NOINLINE happyMonadReduce #-}+{-# NOINLINE happyGoto #-}+{-# NOINLINE happyFail #-}++-- end of Happy Template.
+ dist/build/Language/JavaScript/Parser/Lexer.hs view
@@ -0,0 +1,390 @@+{-# LANGUAGE CPP,MagicHash #-}+{-# LINE 1 "src/Language/JavaScript/Parser/Lexer.x" #-}++  +module Language.JavaScript.Parser.Lexer (+    Token(..)+    , lexCont +    ) where+  +import Control.Monad+import Language.JavaScript.Parser.LexerUtils+import Language.JavaScript.Parser.ParserMonad hiding (location,input)+import Language.JavaScript.Parser.SrcLocation+import Language.JavaScript.Parser.Token+import qualified Data.Map as Map+++#if __GLASGOW_HASKELL__ >= 603+#include "ghcconfig.h"+#elif defined(__GLASGOW_HASKELL__)+#include "config.h"+#endif+#if __GLASGOW_HASKELL__ >= 503+import Data.Array+import Data.Char (ord)+import Data.Array.Base (unsafeAt)+#else+import Array+import Char (ord)+#endif+#if __GLASGOW_HASKELL__ >= 503+import GHC.Exts+#else+import GlaExts+#endif+alex_base :: AlexAddr+alex_base = AlexA# "\x00\x00\x00\x00\xf7\xff\xff\xff\xfc\xff\xff\xff\x72\x00\x00\x00\xe8\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\xe9\x00\x00\x00\x58\x00\x00\x00\xd8\xff\xff\xff\xd9\xff\xff\xff\xe0\xff\xff\xff\xe3\xff\xff\xff\x44\x01\x00\x00\x9b\x01\x00\x00\x00\x00\x00\x00\x0d\x02\x00\x00\x83\x02\x00\x00\xe2\x02\x00\x00\x58\x03\x00\x00\xce\x03\x00\x00\x2d\x04\x00\x00\x7c\x04\x00\x00\x93\x04\x00\x00\x56\x00\x00\x00\xaa\xff\xff\xff\xad\xff\xff\xff\xb2\xff\xff\xff\x1c\x00\x00\x00\xda\x04\x00\x00\x39\x05\x00\x00\x98\x05\x00\x00\xf7\x05\x00\x00\xc6\x00\x00\x00\x3a\x01\x00\x00\x91\x01\x00\x00\xe9\x01\x00\x00\xf3\x01\x00\x00\x5d\x02\x00\x00\x46\x06\x00\x00\x67\x02\x00\x00\x32\x03\x00\x00\x3b\x03\x00\x00\xa7\x03\x00\x00\xb0\x03\x00\x00\xb2\x04\x00\x00\x50\x06\x00\x00\x00\x00\x00\x00\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\x9c\x01\x00\x00\x00\x00\x00\x00\x43\x01\x00\x00\xdb\xff\xff\xff\x00\x00\x00\x00\x1b\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x90\x04\x00\x00\xaf\x04\x00\x00\x4e\x00\x00\x00\x49\x00\x00\x00\x4f\x00\x00\x00\x51\x00\x00\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x53\x00\x00\x00\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xeb\xff\xff\xff\xa3\x00\x00\x00"#++alex_table :: AlexAddr+alex_table = AlexA# "\x00\x00\x2f\x00\x0c\x00\x0c\x00\x30\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x0c\x00\xff\xff\xff\xff\x0c\x00\xff\xff\xff\xff\x2f\x00\x1a\x00\x09\x00\x1b\x00\x1a\x00\x62\x00\x1b\x00\x1c\x00\x46\x00\x1a\x00\x1c\x00\x1b\x00\x04\x00\x52\x00\x10\x00\x1c\x00\x0d\x00\x49\x00\x39\x00\x13\x00\x5e\x00\x5f\x00\x48\x00\x4a\x00\x33\x00\x4b\x00\x59\x00\x08\x00\x18\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x35\x00\x32\x00\x4c\x00\x3c\x00\x4e\x00\x34\x00\x61\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x5a\x00\x3d\x00\x5b\x00\x3a\x00\x0d\x00\x3b\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x5c\x00\x37\x00\x5d\x00\x58\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x3e\x00\x3f\x00\x0a\x00\x1a\x00\x2e\x00\x1b\x00\x42\x00\x05\x00\x44\x00\x1c\x00\x4d\x00\x54\x00\x55\x00\x4f\x00\x43\x00\x50\x00\x53\x00\x51\x00\x04\x00\x52\x00\x10\x00\x31\x00\x0d\x00\x49\x00\x39\x00\x13\x00\x5e\x00\x5f\x00\x48\x00\x4a\x00\x33\x00\x4b\x00\x59\x00\x07\x00\x18\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x35\x00\x32\x00\x4c\x00\x3c\x00\x4e\x00\x34\x00\x61\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x5a\x00\x17\x00\x5b\x00\x3a\x00\x0d\x00\x60\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x5c\x00\x37\x00\x5d\x00\x58\x00\x04\x00\x04\x00\x04\x00\x04\x00\x04\x00\x25\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x0a\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x05\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1f\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x0e\x00\x38\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x00\x00\x2b\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x00\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x23\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x00\x00\x2b\x00\x00\x00\x00\x00\x47\x00\x00\x00\x00\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x11\x00\x22\x00\x36\x00\x29\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x24\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x25\x00\x11\x00\x11\x00\x0f\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x12\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x28\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x00\x00\x00\x00\x11\x00\x11\x00\x0f\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x12\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x11\x00\x14\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x29\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x00\x00\x00\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x0f\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x21\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x0f\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x15\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x14\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x00\x00\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x00\x00\x00\x00\x57\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x26\x00\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x16\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x19\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x20\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x19\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x20\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1d\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x1e\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x27\x00\x00\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++alex_check :: AlexAddr+alex_check = AlexA# "\xff\xff\x0a\x00\x2a\x00\x2a\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x2a\x00\x0a\x00\x0a\x00\x2a\x00\x0d\x00\x0d\x00\x0a\x00\x67\x00\x2f\x00\x69\x00\x67\x00\x2a\x00\x69\x00\x6d\x00\x3d\x00\x67\x00\x6d\x00\x69\x00\x20\x00\x21\x00\x22\x00\x6d\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x3d\x00\x5d\x00\x5e\x00\x5f\x00\x3d\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x3d\x00\x3d\x00\x2a\x00\x67\x00\x2e\x00\x69\x00\x3d\x00\x2f\x00\x3d\x00\x6d\x00\x3c\x00\x3d\x00\x3d\x00\x3e\x00\x3d\x00\x3e\x00\x3d\x00\x3d\x00\x20\x00\x21\x00\x22\x00\x3d\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x78\x00\x5d\x00\x5e\x00\x5f\x00\x2f\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x24\x00\x26\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x45\x00\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x65\x00\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x24\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x45\x00\xff\xff\xff\xff\x3d\x00\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x65\x00\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x09\x00\x2e\x00\x7c\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x09\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x09\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x09\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\xff\xff\xff\xff\x2d\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x45\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\x65\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++alex_deflt :: AlexAddr+alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x06\x00\x06\x00\xff\xff\xff\xff\x0b\x00\x0b\x00\x0b\x00\x0b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++alex_accept = listArray (0::Int,98) [[(AlexAccSkip)],[],[],[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccSkip)],[],[(AlexAcc (alex_action_11))],[(AlexAccSkip)],[],[],[],[(AlexAcc (alex_action_4))],[(AlexAcc (alex_action_4))],[(AlexAcc (alex_action_5))],[],[],[],[],[],[],[(AlexAcc (alex_action_6))],[],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_7))],[(AlexAcc (alex_action_7))],[(AlexAcc (alex_action_7))],[(AlexAcc (alex_action_7))],[],[],[],[],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_8))],[],[],[],[],[],[(AlexAcc (alex_action_9))],[],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_21))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_22))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_38))],[(AlexAcc (alex_action_39))],[(AlexAcc (alex_action_36))],[(AlexAcc (alex_action_37))],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_27))],[(AlexAcc (alex_action_33))],[(AlexAcc (alex_action_31))],[(AlexAcc (alex_action_30))],[(AlexAcc (alex_action_25))],[(AlexAcc (alex_action_40))],[(AlexAcc (alex_action_26))],[(AlexAcc (alex_action_28))],[(AlexAcc (alex_action_32))],[(AlexAcc (alex_action_34))],[(AlexAcc (alex_action_35))],[(AlexAcc (alex_action_41))],[(AlexAcc (alex_action_42))],[(AlexAcc (alex_action_43))],[(AlexAcc (alex_action_44))],[(AlexAcc (alex_action_45))],[(AlexAcc (alex_action_46))],[(AlexAcc (alex_action_47))],[(AlexAcc (alex_action_48))],[(AlexAcc (alex_action_49))],[],[]]+{-# LINE 189 "src/Language/JavaScript/Parser/Lexer.x" #-}+++{-   +-- The next function select between the two lex input states, as called for in+-- secion 7 of ECMAScript Language Specification, Edition 3, 24 March 2000.   ++The method is inspired by the lexer in http://jint.codeplex.com/++-}+--classifyToken :: Token -> Int+classifyToken token = +   case token of+      IdentifierToken {} -> divide+      NullToken {} -> divide+      TrueToken {} -> divide+      FalseToken {} -> divide+      ThisToken {} -> divide+      -- OctalToken {} -> divide -- May have to extend parser to cope with these+      DecimalToken {} -> divide+      HexIntegerToken {} -> divide+      StringToken {} -> divide+      RightCurlyToken {} -> divide+      RightParenToken {} -> divide+      _other      -> reg+++-- Each right-hand side has type :: String -> Token++lexToken :: P Token+lexToken = do+  location <- getLocation+  input <- getInput+  -- startCode <- getStartCode+  lt <- getLastToken+  case alexScan (location, input) (classifyToken lt) of+  --vcase alexScan (location, input) startCode of+    AlexEOF -> return endOfFileToken+    AlexError _ -> lexicalError+    AlexSkip (nextLocation, rest) _len -> do+       setLocation nextLocation +       setInput rest +       lexToken+    AlexToken (nextLocation, rest) len action -> do+       setLocation nextLocation +       setInput rest +       token <- action (mkSrcSpan location $ decColumn 1 nextLocation) len input +       setLastToken token+       return token++-- This is called by the Happy parser.+lexCont :: (Token -> P a) -> P a+lexCont cont = do+   lexLoop+   where+   -- lexLoop :: P a+   lexLoop = do+      tok <- lexToken+      case tok of+         {-+         CommentToken {} -> do+            addComment tok+            lexLoop+         LineJoinToken {} -> lexLoop+         -}+         _other -> cont tok+++-- ---------------------------------------------------------------------+         +-- a keyword or an identifier (the syntax overlaps)+keywordOrIdent :: String -> SrcSpan -> P Token+keywordOrIdent str location+   = return $ case Map.lookup str keywords of+         Just symbol -> symbol location+         Nothing -> IdentifierToken location str  ++-- mapping from strings to keywords+keywords :: Map.Map String (SrcSpan -> Token) +keywords = Map.fromList keywordNames ++keywordNames :: [(String, SrcSpan -> Token)]+keywordNames =+   [ +    ("break",BreakToken),("case",CaseToken),("catch",CatchToken),("const",ConstToken),+    ("continue",ContinueToken),("debugger",DebuggerToken),("default",DefaultToken),+    ("delete",DeleteToken),("do",DoToken),("else",ElseToken),("enum",EnumToken),+    ("false",FalseToken),("finally",FinallyToken),("for",ForToken),+    ("function",FunctionToken),("if",IfToken),("in",InToken),+    ("instanceof",InstanceofToken),("new",NewToken),("null",NullToken),+    ("return",ReturnToken),("switch",SwitchToken),("this",ThisToken),+    ("throw",ThrowToken),("true",TrueToken),("try",TryToken),+    ("typeof",TypeofToken),("var",VarToken),("void",VoidToken),+    ("while",WhileToken),("with",WithToken)+   ]++++bof,divide,reg :: Int+bof = 1+divide = 2+reg = 3+alex_action_4 =  \loc len str -> keywordOrIdent (take len str) loc +alex_action_5 =  mkString stringToken +alex_action_6 =  mkString hexIntegerToken +alex_action_7 =  mkString regExToken +alex_action_8 =  mkString decimalToken +alex_action_9 =  endOfLine lexToken +alex_action_10 =  mkString assignToken+alex_action_11 =  symbolToken  DivToken+alex_action_12 =  symbolToken  SemiColonToken+alex_action_13 =  symbolToken  CommaToken+alex_action_14 =  symbolToken  HookToken+alex_action_15 =  symbolToken  ColonToken+alex_action_16 =  symbolToken  OrToken+alex_action_17 =  symbolToken  AndToken+alex_action_18 =  symbolToken  BitwiseOrToken+alex_action_19 =  symbolToken  BitwiseXorToken+alex_action_20 =  symbolToken  BitwiseAndToken+alex_action_21 =  symbolToken  StrictEqToken+alex_action_22 =  symbolToken  EqToken+alex_action_23 =  mkString assignToken+alex_action_24 =  symbolToken  SimpleAssignToken+alex_action_25 =  symbolToken  StrictNeToken+alex_action_26 =  symbolToken  NeToken+alex_action_27 =  symbolToken  LshToken+alex_action_28 =  symbolToken  LeToken+alex_action_29 =  symbolToken  LtToken+alex_action_30 =  symbolToken  UrshToken+alex_action_31 =  symbolToken  RshToken+alex_action_32 =  symbolToken  GeToken+alex_action_33 =  symbolToken  GtToken+alex_action_34 =  symbolToken  IncrementToken+alex_action_35 =  symbolToken  DecrementToken+alex_action_36 =  symbolToken  PlusToken+alex_action_37 =  symbolToken  MinusToken+alex_action_38 =  symbolToken  MulToken+alex_action_39 =  symbolToken  ModToken+alex_action_40 =  symbolToken  NotToken+alex_action_41 =  symbolToken  BitwiseNotToken+alex_action_42 =  symbolToken  DotToken+alex_action_43 =  symbolToken  LeftBracketToken+alex_action_44 =  symbolToken  RightBracketToken+alex_action_45 =  symbolToken  LeftCurlyToken+alex_action_46 =  symbolToken  RightCurlyToken+alex_action_47 =  symbolToken  LeftParenToken+alex_action_48 =  symbolToken  RightParenToken+alex_action_49 =  symbolToken  CondcommentEndToken+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "<built-in>" #-}+{-# LINE 1 "<command-line>" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+-- -----------------------------------------------------------------------------+-- ALEX TEMPLATE+--+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use+-- it for any purpose whatsoever.++-- -----------------------------------------------------------------------------+-- INTERNALS and main scanner engine++{-# LINE 37 "templates/GenericTemplate.hs" #-}++{-# LINE 47 "templates/GenericTemplate.hs" #-}+++data AlexAddr = AlexA# Addr#++#if __GLASGOW_HASKELL__ < 503+uncheckedShiftL# = shiftL#+#endif++{-# INLINE alexIndexInt16OffAddr #-}+alexIndexInt16OffAddr (AlexA# arr) off =+#ifdef WORDS_BIGENDIAN+  narrow16Int# i+  where+        i    = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)+        high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))+        low  = int2Word# (ord# (indexCharOffAddr# arr off'))+        off' = off *# 2#+#else+  indexInt16OffAddr# arr off+#endif++++++{-# INLINE alexIndexInt32OffAddr #-}+alexIndexInt32OffAddr (AlexA# arr) off = +#ifdef WORDS_BIGENDIAN+  narrow32Int# i+  where+   i    = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`+		     (b2 `uncheckedShiftL#` 16#) `or#`+		     (b1 `uncheckedShiftL#` 8#) `or#` b0)+   b3   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))+   b2   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))+   b1   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))+   b0   = int2Word# (ord# (indexCharOffAddr# arr off'))+   off' = off *# 4#+#else+  indexInt32OffAddr# arr off+#endif++++++#if __GLASGOW_HASKELL__ < 503+quickIndex arr i = arr ! i+#else+-- GHC >= 503, unsafeAt is available from Data.Array.Base.+quickIndex = unsafeAt+#endif+++++-- -----------------------------------------------------------------------------+-- Main lexing routines++data AlexReturn a+  = AlexEOF+  | AlexError  !AlexInput+  | AlexSkip   !AlexInput !Int+  | AlexToken  !AlexInput !Int a++-- alexScan :: AlexInput -> StartCode -> AlexReturn a+alexScan input (I# (sc))+  = alexScanUser undefined input (I# (sc))++alexScanUser user input (I# (sc))+  = case alex_scan_tkn user input 0# input sc AlexNone of+	(AlexNone, input') ->+		case alexGetChar input of+			Nothing -> ++++				   AlexEOF+			Just _ ->++++				   AlexError input'++	(AlexLastSkip input'' len, _) ->++++		AlexSkip input'' len++	(AlexLastAcc k input''' len, _) ->++++		AlexToken input''' len k+++-- Push the input through the DFA, remembering the most recent accepting+-- state it encountered.++alex_scan_tkn user orig_input len input s last_acc =+  input `seq` -- strict in the input+  let +	new_acc = check_accs (alex_accept `quickIndex` (I# (s)))+  in+  new_acc `seq`+  case alexGetChar input of+     Nothing -> (new_acc, input)+     Just (c, new_input) -> ++++	let+		(base) = alexIndexInt32OffAddr alex_base s+		((I# (ord_c))) = ord c+		(offset) = (base +# ord_c)+		(check)  = alexIndexInt16OffAddr alex_check offset+		+		(new_s) = if (offset >=# 0#) && (check ==# ord_c)+			  then alexIndexInt16OffAddr alex_table offset+			  else alexIndexInt16OffAddr alex_deflt s+	in+	case new_s of +	    -1# -> (new_acc, input)+		-- on an error, we want to keep the input *before* the+		-- character that failed, not after.+    	    _ -> alex_scan_tkn user orig_input (len +# 1#) +			new_input new_s new_acc++  where+	check_accs [] = last_acc+	check_accs (AlexAcc a : _) = AlexLastAcc a input (I# (len))+	check_accs (AlexAccSkip : _)  = AlexLastSkip  input (I# (len))+	check_accs (AlexAccPred a predx : rest)+	   | predx user orig_input (I# (len)) input+	   = AlexLastAcc a input (I# (len))+	check_accs (AlexAccSkipPred predx : rest)+	   | predx user orig_input (I# (len)) input+	   = AlexLastSkip input (I# (len))+	check_accs (_ : rest) = check_accs rest++data AlexLastAcc a+  = AlexNone+  | AlexLastAcc a !AlexInput !Int+  | AlexLastSkip  !AlexInput !Int++data AlexAcc a user+  = AlexAcc a+  | AlexAccSkip+  | AlexAccPred a (AlexAccPred user)+  | AlexAccSkipPred (AlexAccPred user)++type AlexAccPred user = user -> AlexInput -> Int -> AlexInput -> Bool++-- -----------------------------------------------------------------------------+-- Predicates on a rule++alexAndPred p1 p2 user in1 len in2+  = p1 user in1 len in2 && p2 user in1 len in2++--alexPrevCharIsPred :: Char -> AlexAccPred _ +alexPrevCharIs c _ input _ _ = c == alexInputPrevChar input++--alexPrevCharIsOneOfPred :: Array Char Bool -> AlexAccPred _ +alexPrevCharIsOneOf arr _ input _ _ = arr ! alexInputPrevChar input++--alexRightContext :: Int -> AlexAccPred _+alexRightContext (I# (sc)) user _ _ input = +     case alex_scan_tkn user input 0# input sc AlexNone of+	  (AlexNone, _) -> False+	  _ -> True+	-- TODO: there's no need to find the longest+	-- match when checking the right context, just+	-- the first match will do.++-- used by wrappers+iUnbox (I# (i)) = i
+ language-javascript.cabal view
@@ -0,0 +1,61 @@+Name:                language-javascript+Version:             0.0.1+Synopsis:            Parser for JavaScript+Description:         Parses Javascript into an Abstract Syntax Tree (AST).  Initially intended as frontend to hjsmin.+Homepage:            https://github.com/alanz/language-javascript+License:             BSD3+License-file:        LICENSE+Author:              Alan Zimmerman+Maintainer:          alan.zimm@gmail.com+Copyright:           (c) 2010 Alan Zimmerman+Category:            Language+Build-type:          Simple+homepage:            http://github.com/alanz/language-javascript+bug-reports:         http://github.com/alanz//language-javascript/issues+Extra-source-files:  README+                     .ghci+                     buildall.sh++Cabal-version:   >= 1.6+++flag buildtests+  description: Build the executable to run unit tests+  default: False++Library+  Build-depends:     base             >= 4       && < 5+                   , array            >= 0.3     && < 0.5+                   , mtl              >= 1.1     && < 2+                   , containers       >= 0.2     && < 0.5+  hs-source-dirs: src+  Exposed-modules:     Language.JavaScript.Parser+                       Language.JavaScript.Parser.Parser+                       Language.JavaScript.Parser.Lexer+                       Language.JavaScript.Parser.Grammar+                       Language.JavaScript.Parser.AST+  Other-modules:       Language.JavaScript.Parser.LexerUtils+                       Language.JavaScript.Parser.ParseError+                       Language.JavaScript.Parser.ParserMonad+                       Language.JavaScript.Parser.SrcLocation+                       Language.JavaScript.Parser.StringEscape+                       Language.JavaScript.Parser.Token+  Build-tools:         happy, alex+  -- ghc-options:         -Wall++executable             runtests+    if flag(buildtests)+        Buildable: True+        cpp-options:   -DTEST+        build-depends: QuickCheck >= 2 && < 3,+                       HUnit,+                       test-framework-hunit,+                       test-framework+        hs-source-dirs: . src ./dist/build+    else+        Buildable: False+    main-is:         runtests.hs++source-repository head+  type:     git+  location: git://github.com/alanz/language-javascript.git
+ runtests.hs view
@@ -0,0 +1,248 @@++import Test.Framework (defaultMain, testGroup, Test)+import Test.Framework.Providers.HUnit+import Test.HUnit hiding (Test)+++import Language.JavaScript.Parser.Parser+import Language.JavaScript.Parser.Grammar++main :: IO ()+main = defaultMain [testSuite]++testSuite :: Test+testSuite = testGroup "Parser"+    [ +      testCase "helloWorld"        caseHelloWorld  +    , testCase "LiteralNull"       (testLiteral "null"     "Right (JSLiteral \"null\")")+    , testCase "LiteralFalse"      (testLiteral "false"    "Right (JSLiteral \"false\")")+    , testCase "LiteralTrue"       (testLiteral "true"     "Right (JSLiteral \"true\")")+    , testCase "LiteralHexInteger" (testLiteral "0x1234fF" "Right (JSHexInteger \"0x1234fF\")")+    , testCase "LiteralDecimal1"   (testLiteral "1.0e4"    "Right (JSDecimal \"1.0e4\")")+    , testCase "LiteralDecimal2"   (testLiteral "2.3E6"    "Right (JSDecimal \"2.3E6\")")+    , testCase "LiteralDecimal3"   (testLiteral "4.5"      "Right (JSDecimal \"4.5\")")+    , testCase "LiteralDecimal3"   (testLiteral "0.7e8"    "Right (JSDecimal \"0.7e8\")")+    , testCase "LiteralDecimal4"   (testLiteral "0.7E8"    "Right (JSDecimal \"0.7E8\")")+    , testCase "LiteralDecimal5"   (testLiteral "10"       "Right (JSDecimal \"10\")")+    , testCase "LiteralDecimal6"   (testLiteral "0"        "Right (JSDecimal \"0\")")+    , testCase "LiteralDecimaly"   (testLiteral "0.03"     "Right (JSDecimal \"0.03\")")+      +    , testCase "LiteralString1"    (testLiteral "\"hello\\nworld\"" "Right (JSStringLiteral '\"' \"hello\\\\nworld\")")  +    , testCase "LiteralString2"    (testLiteral "'hello\\nworld'"  "Right (JSStringLiteral '\\'' \"hello\\\\nworld\")")+      +    , testCase "LiteralThis"       (testPE "this"  "Right (JSLiteral \"this\")")+      +    , testCase "LiteralRegex1"     (testPE "/blah/"  "Right (JSRegEx \"/blah/\")")+    , testCase "LiteralRegex2"     (testPE "/$/g"    "Right (JSRegEx \"/$/g\")")+    , testCase "LiteralRegex3"     (testPE "/\\n/g"  "Right (JSRegEx \"/\\\\n/g\")")+    , testCase "LiteralRegex4"     (testPE "/^\"(?:\\.|[^\"])*\"|^'(?:[^']|\\.)*'/" "Right (JSRegEx \"/^\\\"(?:\\\\.|[^\\\"])*\\\"|^'(?:[^']|\\\\.)*'/\")")+      ++    , testCase "Identifier1"       (testPE "_$"      "Right (JSIdentifier \"_$\")")+    , testCase "Identifier2"       (testPE "this_"   "Right (JSIdentifier \"this_\")")+      +    , testCase "ArrayLiteral1"     (testPE "[]"      "Right (JSArrayLiteral [])")+    , testCase "ArrayLiteral2"     (testPE "[,]"     "Right (JSArrayLiteral [JSElision []])")+    , testCase "ArrayLiteral3"     (testPE "[,,]"    "Right (JSArrayLiteral [JSElision [],JSElision []])")+    , testCase "ArrayLiteral4"     (testPE "[,,x]"   "Right (JSArrayLiteral [JSElementList [JSElision [],JSElision [],JSIdentifier \"x\"]])")+    , testCase "ArrayLiteral5"     (testPE "[,,x]"   "Right (JSArrayLiteral [JSElementList [JSElision [],JSElision [],JSIdentifier \"x\"]])")+    , testCase "ArrayLiteral6"     (testPE "[,x,,x]" "Right (JSArrayLiteral [JSElementList [JSElementList [JSElision [],JSIdentifier \"x\"],JSElision [],JSElision [],JSIdentifier \"x\"]])")+    , testCase "ArrayLiteral7"     (testPE "[x]"     "Right (JSArrayLiteral [JSIdentifier \"x\"])")+      +    , testCase "ObjectLiteral1"    (testPE "{}"       "Right (JSObjectLiteral [])")+    , testCase "ObjectLiteral2"    (testPE "{x:1}"    "Right (JSObjectLiteral [JSPropertyNameandValue (JSIdentifier \"x\") [JSDecimal \"1\"]])")+    , testCase "ObjectLiteral3"    (testPE "{x:1,y:2}"     "Right (JSObjectLiteral [JSPropertyNameandValue (JSIdentifier \"x\") [JSDecimal \"1\"],JSPropertyNameandValue (JSIdentifier \"y\") [JSDecimal \"2\"]])")+      +    , testCase "ObjectLiteral4"    (testPE "{evaluate:evaluate,load:function load(s){if(x)return s;1}}" "Right (JSObjectLiteral [JSPropertyNameandValue (JSIdentifier \"evaluate\") [JSIdentifier \"evaluate\"],JSPropertyNameandValue (JSIdentifier \"load\") [JSFunction (JSIdentifier \"load\") [JSIdentifier \"s\"] (JSFunctionBody [JSSourceElements [JSIf (JSExpression [JSIdentifier \"x\"]) (JSReturn [JSExpression [JSIdentifier \"s\"],JSLiteral \";\"]),JSExpression [JSDecimal \"1\"]]])]])")++    , testCase "ExpressionParen"   (testPE "(56)"     "Right (JSExpressionParen (JSExpression [JSDecimal \"56\"]))")+      +    , testCase "Statement1"        (testStmt "x"        "Right (JSExpression [JSIdentifier \"x\"])")+    , testCase "Statement2"        (testStmt "null"     "Right (JSExpression [JSLiteral \"null\"])")+    , testCase "Statement3"        (testStmt "true?1:2" "Right (JSExpression [JSExpressionTernary [JSLiteral \"true\"] [JSDecimal \"1\"] [JSDecimal \"2\"]])")++    , testCase "Statement4"        (testStmt "x||y"     "Right (JSExpression [JSExpressionBinary \"||\" [JSIdentifier \"x\"] [JSIdentifier \"y\"]])")+    , testCase "Statement5"        (testStmt "x&&y"     "Right (JSExpression [JSExpressionBinary \"&&\" [JSIdentifier \"x\"] [JSIdentifier \"y\"]])")      +    , testCase "Statement6"        (testStmt "x|y"     "Right (JSExpression [JSExpressionBinary \"|\" [JSIdentifier \"x\"] [JSIdentifier \"y\"]])")+    , testCase "Statement6"        (testStmt "x^y"     "Right (JSExpression [JSExpressionBinary \"^\" [JSIdentifier \"x\"] [JSIdentifier \"y\"]])")+    , testCase "Statement7"        (testStmt "x&y"     "Right (JSExpression [JSExpressionBinary \"&\" [JSIdentifier \"x\"] [JSIdentifier \"y\"]])")+      +    , testCase "Statement8"        (testStmt "x==y"     "Right (JSExpression [JSExpressionBinary \"==\" [JSIdentifier \"x\"] [JSIdentifier \"y\"]])")+    , testCase "Statement9"        (testStmt "x!=y"     "Right (JSExpression [JSExpressionBinary \"!=\" [JSIdentifier \"x\"] [JSIdentifier \"y\"]])")      +    , testCase "Statement10"       (testStmt "x===y"     "Right (JSExpression [JSExpressionBinary \"===\" [JSIdentifier \"x\"] [JSIdentifier \"y\"]])")+    , testCase "Statement11"       (testStmt "x!==y"     "Right (JSExpression [JSExpressionBinary \"!==\" [JSIdentifier \"x\"] [JSIdentifier \"y\"]])")      +      +    , testCase "Statement12"       (testStmt "x<y"     "Right (JSExpression [JSExpressionBinary \"<\" [JSIdentifier \"x\"] [JSIdentifier \"y\"]])")+    , testCase "Statement12"       (testStmt "x>y"     "Right (JSExpression [JSExpressionBinary \">\" [JSIdentifier \"x\"] [JSIdentifier \"y\"]])")+    , testCase "Statement12"       (testStmt "x<=y"     "Right (JSExpression [JSExpressionBinary \"<=\" [JSIdentifier \"x\"] [JSIdentifier \"y\"]])")+    , testCase "Statement12"       (testStmt "x>=y"     "Right (JSExpression [JSExpressionBinary \">=\" [JSIdentifier \"x\"] [JSIdentifier \"y\"]])")+    -- , testCase "Statement12"       (testStmt "x instanceof y"     "") -- TODO: restore test case+      +    , testCase "Statement13"       (testStmt "x<<y"     "Right (JSExpression [JSExpressionBinary \"<<\" [JSIdentifier \"x\"] [JSIdentifier \"y\"]])") +    , testCase "Statement13"       (testStmt "x>>y"     "Right (JSExpression [JSExpressionBinary \">>\" [JSIdentifier \"x\"] [JSIdentifier \"y\"]])") +    , testCase "Statement13"       (testStmt "x>>>y"     "Right (JSExpression [JSExpressionBinary \">>>\" [JSIdentifier \"x\"] [JSIdentifier \"y\"]])") +      +    , testCase "Statement14"       (testStmt "x+y"     "Right (JSExpression [JSExpressionBinary \"+\" [JSIdentifier \"x\"] [JSIdentifier \"y\"]])")+    , testCase "Statement14"       (testStmt "x-y"     "Right (JSExpression [JSExpressionBinary \"-\" [JSIdentifier \"x\"] [JSIdentifier \"y\"]])")+      +    , testCase "Statement15"       (testStmt "x*y"     "Right (JSExpression [JSExpressionBinary \"*\" [JSIdentifier \"x\"] [JSIdentifier \"y\"]])")+    , testCase "Statement16"       (testStmt "x/y"     "Right (JSExpression [JSExpressionBinary \"/\" [JSIdentifier \"x\"] [JSIdentifier \"y\"]])")+    , testCase "Statement17"       (testStmt "x%y"     "Right (JSExpression [JSExpressionBinary \"%\" [JSIdentifier \"x\"] [JSIdentifier \"y\"]])")+      +    , testCase "Statement18"       (testStmt "delete y"  "Right (JSExpression [JSUnary \"delete \",JSIdentifier \"y\"])")      +    , testCase "Statement19"       (testStmt "void y"    "Right (JSExpression [JSUnary \"void \",JSIdentifier \"y\"])")      +    , testCase "Statement20"       (testStmt "typeof y"  "Right (JSExpression [JSUnary \"typeof \",JSIdentifier \"y\"])")    +    , testCase "Statement21"       (testStmt "++y"    "Right (JSExpression [JSUnary \"++\",JSIdentifier \"y\"])")      +    , testCase "Statement22"       (testStmt "--y"    "Right (JSExpression [JSUnary \"--\",JSIdentifier \"y\"])")      +    , testCase "Statement23"       (testStmt "+y"     "Right (JSExpression [JSUnary \"+\",JSIdentifier \"y\"])")      +    , testCase "Statement24"       (testStmt "-y"     "Right (JSExpression [JSUnary \"-\",JSIdentifier \"y\"])")      +    , testCase "Statement25"       (testStmt "~y"     "Right (JSExpression [JSUnary \"~\",JSIdentifier \"y\"])")      +    , testCase "Statement26"       (testStmt "!y"     "Right (JSExpression [JSUnary \"!\",JSIdentifier \"y\"])")      +      +    , testCase "Statement27"       (testStmt "y++"     "Right (JSExpression [JSExpressionPostfix \"++\" [JSIdentifier \"y\"]])")+    , testCase "Statement28"       (testStmt "y--"     "Right (JSExpression [JSExpressionPostfix \"--\" [JSIdentifier \"y\"]])")      +      +      -- Member Expressions+    , testCase "MemberExpression1" (testStmt "function(){}"    "Right (JSExpression [JSFunctionExpression [] (JSFunctionBody [])])")+    , testCase "MemberExpression1" (testStmt "function(a){}"    "Right (JSExpression [JSFunctionExpression [JSIdentifier \"a\"] (JSFunctionBody [])])")+    , testCase "MemberExpression1" (testStmt "function(a,b){}"  "Right (JSExpression [JSFunctionExpression [JSIdentifier \"a\",JSIdentifier \"b\"] (JSFunctionBody [])])")+      +    , testCase "MemberExpression1" (testStmt "x[y]"     "Right (JSExpression [JSMemberSquare [JSIdentifier \"x\"] (JSExpression [JSIdentifier \"y\"])])")+    , testCase "MemberExpression1" (testStmt "x[y][z]"  "Right (JSExpression [JSMemberSquare [JSMemberSquare [JSIdentifier \"x\"] (JSExpression [JSIdentifier \"y\"])] (JSExpression [JSIdentifier \"z\"])])")+    , testCase "MemberExpression1" (testStmt "x.y"      "Right (JSExpression [JSMemberDot [JSIdentifier \"x\"] (JSIdentifier \"y\")])")+    , testCase "MemberExpression1" (testStmt "x.y.z"    "Right (JSExpression [JSMemberDot [JSMemberDot [JSIdentifier \"x\"] (JSIdentifier \"y\")] (JSIdentifier \"z\")])")+      +    , testCase "MemberExpression1" (testStmt "new x()"  "Right (JSExpression [JSLiteral \"new \",JSIdentifier \"x\",JSArguments []])")+      +    , testCase "NewExpression1" (testStmt "new x.y"  "Right (JSExpression [JSLiteral \"new \",JSMemberDot [JSIdentifier \"x\"] (JSIdentifier \"y\")])")+      +    , testCase "CallExpression1" (testStmt "x()"     "Right (JSExpression [JSIdentifier \"x\",JSArguments []])")+    , testCase "CallExpression2" (testStmt "x()()"   "Right (JSExpression [JSIdentifier \"x\",JSArguments [],JSCallExpression \"()\" [JSArguments []]])")+    , testCase "CallExpression3" (testStmt "x()[4]"  "Right (JSExpression [JSIdentifier \"x\",JSArguments [],JSCallExpression \"[]\" [JSExpression [JSDecimal \"4\"]]])")+    , testCase "CallExpression4" (testStmt "x().x"   "Right (JSExpression [JSIdentifier \"x\",JSArguments [],JSCallExpression \".\" [JSIdentifier \"x\"]])")+    , testCase "CallExpression5" (testStmt "x(a,b=2).x"   "Right (JSExpression [JSIdentifier \"x\",JSArguments [[JSIdentifier \"a\"],[JSElement \"assignmentExpression\" [JSIdentifier \"b\",JSOperator \"=\",JSDecimal \"2\"]]],JSCallExpression \".\" [JSIdentifier \"x\"]])")+          +    , testCase "AssignExpression1" (testStmt "x=1"   "Right (JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"=\",JSDecimal \"1\"]])")+    , testCase "AssignExpression1" (testStmt "x*=1"   "Right (JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"*=\",JSDecimal \"1\"]])")      +    , testCase "AssignExpression1" (testStmt "x/=1"   "Right (JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"/=\",JSDecimal \"1\"]])")      +    , testCase "AssignExpression1" (testStmt "x%=1"   "Right (JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"%=\",JSDecimal \"1\"]])")      +    , testCase "AssignExpression1" (testStmt "x+=1"   "Right (JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"+=\",JSDecimal \"1\"]])")      +    , testCase "AssignExpression1" (testStmt "x-=1"   "Right (JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"-=\",JSDecimal \"1\"]])")      +    , testCase "AssignExpression1" (testStmt "x<<=1"   "Right (JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"<<=\",JSDecimal \"1\"]])")      +    , testCase "AssignExpression1" (testStmt "x>>=1"   "Right (JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \">>=\",JSDecimal \"1\"]])")      +    , testCase "AssignExpression1" (testStmt "x>>>=1"   "Right (JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \">>>=\",JSDecimal \"1\"]])")      +    , testCase "AssignExpression1" (testStmt "x&=1"   "Right (JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"&=\",JSDecimal \"1\"]])")      +    , testCase "AssignExpression1" (testStmt "x^=1"   "Right (JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"^=\",JSDecimal \"1\"]])")      +    , testCase "AssignExpression1" (testStmt "x|=1"   "Right (JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"|=\",JSDecimal \"1\"]])")      +    +      +    , testCase "Block1" (testStmt "{}"     "Right (JSLiteral \";\")")+    , testCase "Block2" (testStmt "{x=1}"  "Right (JSBlock (JSStatementList [JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"=\",JSDecimal \"1\"]]]))")+    , testCase "Block3" (testStmt "{x=1;y=2}"   "Right (JSBlock (JSStatementList [JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"=\",JSDecimal \"1\"]],JSLiteral \";\",JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"y\",JSOperator \"=\",JSDecimal \"2\"]]]))")+    , testCase "Block4" (testStmt "{{}}"     "Right (JSLiteral \";\")")+    , testCase "Block5" (testStmt "{{{}}}"     "Right (JSLiteral \";\")")      +      +    , testCase "If1" (testStmt "if (1) {}"   "Right (JSIf (JSExpression [JSDecimal \"1\"]) (JSLiteral \";\"))")      +      +    , testCase "IfElse1" (testStmt "if (1) {} else {}"   "Right (JSIfElse (JSExpression [JSDecimal \"1\"]) (JSLiteral \";\") (JSLiteral \";\"))")+    , testCase "IfElse2" (testStmt "if (1) x=1; else {}" "Right (JSIfElse (JSExpression [JSDecimal \"1\"]) (JSBlock (JSStatementList [JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"=\",JSDecimal \"1\"]]])) (JSLiteral \";\"))")+      +    , testCase "DoWhile1" (testStmt "do {x=1} while (true);"   "Right (JSDoWhile (JSBlock (JSStatementList [JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"=\",JSDecimal \"1\"]]])) (JSExpression [JSLiteral \"true\"]) (JSLiteral \";\"))")+    , testCase "While1"   (testStmt "while(true);"             "Right (JSWhile (JSExpression [JSLiteral \"true\"]) (JSLiteral \";\"))")+      +    , testCase "For1"   (testStmt "for(;;);"             "Right (JSFor [] [] [] (JSLiteral \";\"))")+    , testCase "For2"   (testStmt "for(x=1;x<10;x++);"   "Right (JSFor [JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"=\",JSDecimal \"1\"]]] [JSExpression [JSExpressionBinary \"<\" [JSIdentifier \"x\"] [JSDecimal \"10\"]]] [JSExpression [JSExpressionPostfix \"++\" [JSIdentifier \"x\"]]] (JSLiteral \";\"))")+      +    , testCase "ForVar1"   (testStmt "for(var x;;);"            "Right (JSForVar [JSVarDecl (JSIdentifier \"x\") []] [] [] (JSLiteral \";\"))")+    , testCase "ForVar2"   (testStmt "for(var x=1;;);"          "Right (JSForVar [JSVarDecl (JSIdentifier \"x\") [JSDecimal \"1\"]] [] [] (JSLiteral \";\"))")      +    , testCase "ForVar2"   (testStmt "for(var x;y;z){}"         "Right (JSForVar [JSVarDecl (JSIdentifier \"x\") []] [JSExpression [JSIdentifier \"y\"]] [JSExpression [JSIdentifier \"z\"]] (JSLiteral \";\"))")      +      +    , testCase "ForIn1"   (testStmt "for(x in 5){}"         "Right (JSForIn [JSIdentifier \"x\"] (JSExpression [JSDecimal \"5\"]) (JSLiteral \";\"))")+    +    , testCase "ForVarIn1" (testStmt "for(var x in 5){}"    "Right (JSForVarIn (JSVarDecl (JSIdentifier \"x\") []) (JSExpression [JSDecimal \"5\"]) (JSLiteral \";\"))")+      +    , testCase "Var1" (testStmt "var x=1;"        "Right (JSVariables \"var\" [JSVarDecl (JSIdentifier \"x\") [JSDecimal \"1\"]])")+    , testCase "Var2" (testStmt "const x=1,y=2;"  "Right (JSVariables \"const\" [JSVarDecl (JSIdentifier \"x\") [JSDecimal \"1\"],JSVarDecl (JSIdentifier \"y\") [JSDecimal \"2\"]])")+      +    , testCase "Continue1" (testStmt "continue;"       "Right (JSContinue [JSLiteral \";\"])")+    , testCase "Continue2" (testStmt "continue x;"     "Right (JSContinue [JSIdentifier \"x\",JSLiteral \";\"])")+      +    , testCase "Break1" (testStmt "break;"       "Right (JSBreak [] [JSLiteral \";\"])")+    , testCase "Break2" (testStmt "break x;"     "Right (JSBreak [JSIdentifier \"x\"] [JSLiteral \";\"])")+    +    , testCase "Return1" (testStmt "return;"       "Right (JSReturn [JSLiteral \";\"])")+    , testCase "Return2" (testStmt "return x;"     "Right (JSReturn [JSExpression [JSIdentifier \"x\"],JSLiteral \";\"])")+    +    , testCase "With1" (testStmt "with (x) {};"    "Right (JSWith (JSExpression [JSIdentifier \"x\"]) [JSLiteral \";\",JSLiteral \";\"])")+      +    , testCase "Labelled1" (testStmt "abc:x=1"    "Right (JSLabelled (JSIdentifier \"abc\") (JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"=\",JSDecimal \"1\"]]))")+      +    , testCase "Switch1" (testStmt "switch (x) {}" "Right (JSSwitch (JSExpression [JSIdentifier \"x\"]) [])")+    , testCase "Switch2" (testStmt "switch (x) {case 1:break;}"          "Right (JSSwitch (JSExpression [JSIdentifier \"x\"]) [JSCase (JSExpression [JSDecimal \"1\"]) (JSStatementList [JSBreak [] [JSLiteral \";\"]])])")+    , testCase "Switch3" (testStmt "switch (x) {case 0:\ncase 1:break;}"  "Right (JSSwitch (JSExpression [JSIdentifier \"x\"]) [JSCase (JSExpression [JSDecimal \"0\"]) (JSStatementList []),JSCase (JSExpression [JSDecimal \"1\"]) (JSStatementList [JSBreak [] [JSLiteral \";\"]])])")                          +    , testCase "Switch4" (testStmt "switch (x) {default:break;}"          "Right (JSSwitch (JSExpression [JSIdentifier \"x\"]) [JSDefault (JSStatementList [JSBreak [] [JSLiteral \";\"]])])")+    , testCase "Switch5" (testStmt "switch (x) {default:\ncase 1:break;}"   "Right (JSSwitch (JSExpression [JSIdentifier \"x\"]) [JSDefault (JSStatementList []),JSCase (JSExpression [JSDecimal \"1\"]) (JSStatementList [JSBreak [] [JSLiteral \";\"]])])")+      +    , testCase "Throw1" (testStmt "throw 1"   "Right (JSThrow (JSExpression [JSDecimal \"1\"]))")+      +    , testCase "Try1" (testStmt "try{}catch(a){}"            "Right (JSTry (JSBlock (JSStatementList [])) [JSCatch (JSIdentifier \"a\") [] (JSBlock (JSStatementList []))])")+    , testCase "Try2" (testStmt "try{}finally{}"             "Right (JSTry (JSBlock (JSStatementList [])) [JSFinally (JSBlock (JSStatementList []))])")+    , testCase "Try3" (testStmt "try{}catch(a){}finally{}"   "Right (JSTry (JSBlock (JSStatementList [])) [JSCatch (JSIdentifier \"a\") [] (JSBlock (JSStatementList [])),JSFinally (JSBlock (JSStatementList []))])")++    , testCase "Try4" (testStmt "try{}catch(a){}catch(b){}finally{}"   "Right (JSTry (JSBlock (JSStatementList [])) [JSCatch (JSIdentifier \"a\") [] (JSBlock (JSStatementList [])),JSCatch (JSIdentifier \"b\") [] (JSBlock (JSStatementList [])),JSFinally (JSBlock (JSStatementList []))])")+    , testCase "Try5" (testStmt "try{}catch(a){}catch(b){}"            "Right (JSTry (JSBlock (JSStatementList [])) [JSCatch (JSIdentifier \"a\") [] (JSBlock (JSStatementList [])),JSCatch (JSIdentifier \"b\") [] (JSBlock (JSStatementList []))])")+    , testCase "Try6" (testStmt "try{}catch(a if true){}catch(b){}"     "Right (JSTry (JSBlock (JSStatementList [])) [JSCatch (JSIdentifier \"a\") [JSLiteral \"true\"] (JSBlock (JSStatementList [])),JSCatch (JSIdentifier \"b\") [] (JSBlock (JSStatementList []))])")+      +    , testCase "Function1" (testProg "function a(){}"      "Right (JSSourceElementsTop [JSFunction (JSIdentifier \"a\") [] (JSFunctionBody [])])")+    , testCase "Function2" (testProg "function a(b,c){}"   "Right (JSSourceElementsTop [JSFunction (JSIdentifier \"a\") [JSIdentifier \"b\",JSIdentifier \"c\"] (JSFunctionBody [])])")+      +    , testCase "Comment1" (testProg "//blah\nx=1;//foo\na"   "Right (JSSourceElementsTop [JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"=\",JSDecimal \"1\"]],JSLiteral \";\",JSExpression [JSIdentifier \"a\"]])")+      +    , testCase "Comment2" (testProg "/*x=1\ny=2\n*/z=2;//foo\na"   "Right (JSSourceElementsTop [JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"z\",JSOperator \"=\",JSDecimal \"2\"]],JSLiteral \";\",JSExpression [JSIdentifier \"a\"]])")+      +    , testCase "min_100_animals1" (testProg "function Animal(name){if(!name)throw new Error('Must specify an animal name');this.name=name};Animal.prototype.toString=function(){return this.name};o=new Animal(\"bob\");o.toString()==\"bob\"" "Right (JSSourceElementsTop [JSFunction (JSIdentifier \"Animal\") [JSIdentifier \"name\"] (JSFunctionBody [JSSourceElements [JSIf (JSExpression [JSUnary \"!\",JSIdentifier \"name\"]) (JSBlock (JSStatementList [JSThrow (JSExpression [JSLiteral \"new \",JSIdentifier \"Error\",JSArguments [[JSStringLiteral '\\'' \"Must specify an animal name\"]]])])),JSExpression [JSElement \"assignmentExpression\" [JSMemberDot [JSLiteral \"this\"] (JSIdentifier \"name\"),JSOperator \"=\",JSIdentifier \"name\"]]]]),JSLiteral \";\",JSExpression [JSElement \"assignmentExpression\" [JSMemberDot [JSMemberDot [JSIdentifier \"Animal\"] (JSIdentifier \"prototype\")] (JSIdentifier \"toString\"),JSOperator \"=\",JSFunctionExpression [] (JSFunctionBody [JSSourceElements [JSReturn [JSExpression [JSMemberDot [JSLiteral \"this\"] (JSIdentifier \"name\")],JSLiteral \"\"]]])]],JSLiteral \";\",JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"o\",JSOperator \"=\",JSLiteral \"new \",JSIdentifier \"Animal\",JSArguments [[JSStringLiteral '\"' \"bob\"]]]],JSLiteral \";\",JSExpression [JSExpressionBinary \"==\" [JSMemberDot [JSIdentifier \"o\"] (JSIdentifier \"toString\"),JSArguments []] [JSStringLiteral '\"' \"bob\"]]])")+      +    , testCase "min_100_animals2" (testProg "Animal=function(){return this.name};" "Right (JSSourceElementsTop [JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"Animal\",JSOperator \"=\",JSFunctionExpression [] (JSFunctionBody [JSSourceElements [JSReturn [JSExpression [JSMemberDot [JSLiteral \"this\"] (JSIdentifier \"name\")],JSLiteral \"\"]]])]],JSLiteral \";\"])")+      +    , testCase "min_100_animals3" (testProg "if(a)x=1;y=2" "Right (JSSourceElementsTop [JSIf (JSExpression [JSIdentifier \"a\"]) (JSBlock (JSStatementList [JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"=\",JSDecimal \"1\"]]])),JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"y\",JSOperator \"=\",JSDecimal \"2\"]]])")+      +    , testCase "min_100_animals4" (testProg "if(a)x=a()y=2" "Right (JSSourceElementsTop [JSIf (JSExpression [JSIdentifier \"a\"]) (JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"=\",JSIdentifier \"a\",JSArguments []]]),JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"y\",JSOperator \"=\",JSDecimal \"2\"]]])")+      +    , testCase "05_regex"  (testProg "newlines=spaces.match(/\\n/g)" "Right (JSSourceElementsTop [JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"newlines\",JSOperator \"=\",JSMemberDot [JSIdentifier \"spaces\"] (JSIdentifier \"match\"),JSArguments [[JSRegEx \"/\\\\n/g\"]]]]])")+      +    , testCase "05_regex2" (testProg "x=/\\n/g" "Right (JSSourceElementsTop [JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"=\",JSRegEx \"/\\\\n/g\"]]])")      +      +    , testCase "05_regex3" (testProg "x=i(/[?|^&(){}\\[\\]+\\-*\\/\\.]/g,\"\\\\$&\")" "Right (JSSourceElementsTop [JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"=\",JSIdentifier \"i\",JSArguments [[JSRegEx \"/[?|^&(){}\\\\[\\\\]+\\\\-*\\\\/\\\\.]/g\"],[JSStringLiteral '\"' \"\\\\\\\\$&\"]]]]])")+      +    , testCase "05_regex4" (testProg "x=i(/^$/g,\"\\\\$&\")" "Right (JSSourceElementsTop [JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"=\",JSIdentifier \"i\",JSArguments [[JSRegEx \"/^$/g\"],[JSStringLiteral '\"' \"\\\\\\\\$&\"]]]]])")+      +   , testCase "05_regex5" (testProg "if(/^[a-z]/.test(t)){consts+=t.toUpperCase();keywords[t]=i}else consts+=(/^\\W/.test(t)?opTypeNames[t]:t);" "Right (JSSourceElementsTop [JSIfElse (JSExpression [JSMemberDot [JSRegEx \"/^[a-z]/\"] (JSIdentifier \"test\"),JSArguments [[JSIdentifier \"t\"]]]) (JSBlock (JSStatementList [JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"consts\",JSOperator \"+=\",JSMemberDot [JSIdentifier \"t\"] (JSIdentifier \"toUpperCase\"),JSArguments []]],JSLiteral \";\",JSExpression [JSElement \"assignmentExpression\" [JSMemberSquare [JSIdentifier \"keywords\"] (JSExpression [JSIdentifier \"t\"]),JSOperator \"=\",JSIdentifier \"i\"]]])) (JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"consts\",JSOperator \"+=\",JSExpressionParen (JSExpression [JSExpressionTernary [JSMemberDot [JSRegEx \"/^\\\\W/\"] (JSIdentifier \"test\"),JSArguments [[JSIdentifier \"t\"]]] [JSMemberSquare [JSIdentifier \"opTypeNames\"] (JSExpression [JSIdentifier \"t\"])] [JSIdentifier \"t\"]])]]),JSLiteral \";\"])")+     +   , testCase "if_semi" (testProg "if(x);x=1" "Right (JSSourceElementsTop [JSIf (JSExpression [JSIdentifier \"x\"]) (JSLiteral \";\"),JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"x\",JSOperator \"=\",JSDecimal \"1\"]]])")+     +   , testCase "67_bob" (testProg "(match = /^\"(?:\\\\.|[^\"])*\"|^'(?:[^']|\\\\.)*'/(input))" "Right (JSSourceElementsTop [JSExpression [JSExpressionParen (JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"match\",JSOperator \"=\",JSRegEx \"/^\\\"(?:\\\\\\\\.|[^\\\"])*\\\"|^'(?:[^']|\\\\\\\\.)*'/\",JSArguments [[JSIdentifier \"input\"]]]])]])")+     +   , testCase "122_jsexec" (testProg "v = getValue(execute(n[0], x)) in getValue(execute(n[1], x));" "Right (JSSourceElementsTop [JSExpression [JSElement \"assignmentExpression\" [JSIdentifier \"v\",JSOperator \"=\",JSExpressionBinary \" in \" [JSIdentifier \"getValue\",JSArguments [[JSIdentifier \"execute\",JSArguments [[JSMemberSquare [JSIdentifier \"n\"] (JSExpression [JSDecimal \"0\"])],[JSIdentifier \"x\"]]]]] [JSIdentifier \"getValue\",JSArguments [[JSIdentifier \"execute\",JSArguments [[JSMemberSquare [JSIdentifier \"n\"] (JSExpression [JSDecimal \"1\"])],[JSIdentifier \"x\"]]]]]]],JSLiteral \";\"])")+     +    ]++srcHelloWorld = "Hello"+caseHelloWorld =  +  "JSSourceElementsTop [JSExpression [JSIdentifier \"Hello\"]]"+  -- @=? (show $ parse srcHelloWorld "src")+  @=? (show $ readJs srcHelloWorld)+  ++-- ---------------------------------------------------------------------+-- Test utilities++testLiteral literal expected = expected @=? (show $ parseUsing parseLiteral literal "src")++testPE str expected = expected @=? (show $ parseUsing parsePrimaryExpression str "src")++testStmt str expected = expected @=? (show $ parseUsing parseStatement str "src")++testProg str expected = expected @=? (show $ parseUsing parseProgram str "src")+++-- EOF
+ src/Language/JavaScript/Parser.hs view
@@ -0,0 +1,27 @@+module Language.JavaScript.Parser +       (+         parse+       , readJs  +       , parseFile  +       , JSNode(..)  +       , ParseError(..)  +       -- Source locations  +       , SrcLocation (..)+       , SrcSpan (..)+       , Span (..)+       -- ParserMonad  +       , P  +       , ParseState (..)  +       ) where+++import Language.JavaScript.Parser.AST+import Language.JavaScript.Parser.ParseError+import Language.JavaScript.Parser.Parser+import Language.JavaScript.Parser.ParserMonad+import Language.JavaScript.Parser.SrcLocation++-- EOF+++  
+ src/Language/JavaScript/Parser/AST.hs view
@@ -0,0 +1,62 @@+{-# LANGUAGE DeriveDataTypeable #-}+module Language.JavaScript.Parser.AST (JSNode(..)) where++import Data.Data++-- ---------------------------------------------------------------------++data JSNode = JSArguments [[JSNode]]  +              | JSArrayLiteral [JSNode]+              | JSBlock JSNode+              | JSBreak [JSNode] [JSNode]+              | JSCallExpression String [JSNode] -- type : ., (), []; rest  +              | JSCase JSNode JSNode+              | JSCatch JSNode [JSNode] JSNode+              | JSContinue [JSNode]+              | JSDecimal String -- Was Integer   +              | JSDefault JSNode+              | JSDoWhile JSNode JSNode JSNode+              | JSElement String [JSNode]+              | JSElementList [JSNode]  +              | JSElision [JSNode]  +              | JSEmpty JSNode+              | JSExpression [JSNode]+              | JSExpressionBinary String [JSNode] [JSNode]+              | JSExpressionParen JSNode+              | JSExpressionPostfix String [JSNode]+              | JSExpressionTernary [JSNode] [JSNode] [JSNode]+              | JSFinally JSNode  +              | JSFor [JSNode] [JSNode] [JSNode] JSNode                +              | JSForIn [JSNode] JSNode JSNode+              | JSForVar [JSNode] [JSNode] [JSNode] JSNode                +              | JSForVarIn JSNode JSNode JSNode +              | JSFunction JSNode [JSNode] JSNode -- name, parameter list, body+              | JSFunctionBody [JSNode]+              | JSFunctionExpression [JSNode] JSNode -- name, parameter list, body                +              | JSHexInteger String -- Was Integer  +              | JSIdentifier String+              | JSIf JSNode JSNode  +              | JSIfElse JSNode JSNode JSNode +              | JSLabelled JSNode JSNode  +              | JSLiteral String  +              | JSMemberDot [JSNode] JSNode+              | JSMemberSquare [JSNode] JSNode+              | JSObjectLiteral [JSNode]  +              | JSOperator String  +              | JSPropertyNameandValue JSNode [JSNode]+              | JSRegEx String+              | JSReturn [JSNode]+              | JSSourceElements [JSNode]+              | JSSourceElementsTop [JSNode]+              | JSStatementList [JSNode]+              | JSStringLiteral Char [Char]+              | JSSwitch JSNode [JSNode]+              | JSThrow JSNode  +              | JSTry JSNode [JSNode]  +              | JSUnary String  +              | JSVarDecl JSNode [JSNode]+              | JSVariables String [JSNode]  +              | JSWhile JSNode JSNode+              | JSWith JSNode [JSNode]+    deriving (Show, Eq, Read, Data, Typeable)+
+ src/Language/JavaScript/Parser/Grammar.y view
@@ -0,0 +1,732 @@+{+module Language.JavaScript.Parser.Grammar (+    parseProgram+  , parseLiteral+  , parsePrimaryExpression+  , parseStatement+  ) where++import Control.Monad.Error.Class (throwError)+import Data.Char+import Language.JavaScript.Parser.Lexer+import Language.JavaScript.Parser.ParserMonad+import Language.JavaScript.Parser.SrcLocation+import qualified Language.JavaScript.Parser.AST as AST++}++-- The name of the generated function to be exported from the module+%name parseProgram           Program+%name parseLiteral           Literal+%name parsePrimaryExpression PrimaryExpression+%name parseStatement         Statement++%tokentype { Token }+%error { parseError }+%monad { P } { thenP } { returnP }+%lexer { lexCont } { EOFToken {} }+++%token ++     ';'	{ SemiColonToken {} }+     ','	{ CommaToken {} }+     '?'	{ HookToken {} }+     ':'	{ ColonToken {} }+     '||'	{ OrToken {} }+     '&&'	{ AndToken {} }+     '|'	{ BitwiseOrToken {} }+     '^'	{ BitwiseXorToken {} }+     '&'	{ BitwiseAndToken {} }+     '==='	{ StrictEqToken {} }+     '=='	{ EqToken {} }+     '='	{ SimpleAssignToken {} }+     '!=='	{ StrictNeToken {} }+     '!='	{ NeToken {} }+     '<<'	{ LshToken {} }+     '<='	{ LeToken {} }+     '<'	{ LtToken {} }+     '>>>'	{ UrshToken {} }+     '>>'	{ RshToken {} }+     '>='	{ GeToken {} }+     '>'	{ GtToken {} }+     '++'	{ IncrementToken {} }+     '--'	{ DecrementToken {} }+     '+'	{ PlusToken {} }+     '-'	{ MinusToken {} }+     '*'	{ MulToken {} }+     '/'	{ DivToken {} }+     '%'	{ ModToken {} }+     '!'	{ NotToken {} }+     '~'	{ BitwiseNotToken {} }+     '.'	{ DotToken {} }+     '['	{ LeftBracketToken {} }+     ']'	{ RightBracketToken {} }+     '{'	{ LeftCurlyToken {} }+     '}'	{ RightCurlyToken {} }+     '('	{ LeftParenToken {} }+     ')'	{ RightParenToken {} }+     '@*/'	{ CondcommentEndToken {} }+  +     'break'      { BreakToken {} }+     'case'       { CaseToken {} }+     'catch'      { CatchToken {} }+     'const'      { ConstToken {} }+     'continue'   { ContinueToken {} }+     'debugger'   { DebuggerToken {} }+     'default'    { DefaultToken {} }+     'delete'     { DeleteToken {} }+     'do'         { DoToken {} }+     'else'       { ElseToken {} }+     'enum'       { EnumToken {} }+     'false'      { FalseToken {} }+     'finally'    { FinallyToken {} }+     'for'        { ForToken {} }+     'function'   { FunctionToken {} }+     'if'         { IfToken {} }+     'in'         { InToken {} }+     'instanceof' { InstanceofToken {} }+     'new'        { NewToken {} }+     'null'       { NullToken {} }+     'return'     { ReturnToken {} }+     'switch'     { SwitchToken {} }+     'this'       { ThisToken {} }+     'throw'      { ThrowToken {} }+     'true'       { TrueToken {} }+     'try'        { TryToken {} }+     'typeof'     { TypeofToken {} }+     'var'        { VarToken {} }+     'void'       { VoidToken {} }+     'while'      { WhileToken {} }+     'with'       { WithToken {} }+     +     +     'ident'      { IdentifierToken {} }+     'decimal'    { DecimalToken {} }+     'hexinteger' { HexIntegerToken {} }+     'string'     { StringToken {} }+     'regex'      { RegExToken {} }+     'assign'     { AssignToken {} }+++%%+++-- --------------------------------------------------------------------+-- Start of GOLD Grammar for Javascript, used as a base+-- --------------------------------------------------------------------++-- "Name"     = 'JavaScript Grammar'+-- "Author"   = 'M.Schnoor-Matriciani'+-- "Version"  = '0.9'+-- "About"    = 'JavaScript Grammar, Subset of ECMA Edition 3'++-- "Start Symbol" = <Program>+-- "Case Sensitive" = 'True'+ +-- ! ------------------------------------------------- Sets++-- {ID Head}      = {Letter} + [_] + [$]+-- {ID Tail}      = {Alphanumeric} + [_] + [$]+-- {String Chars1} = {Printable} + {HT} - ["\] +-- {String Chars2} = {Printable} + {HT} - [\''] +-- {Hex Digit}    = {Digit} + [ABCDEF] + [abcdef]+-- {RegExp Chars} = {Letter}+{Digit}+['^']+['$']+['*']+['+']+['?']+['{']+['}']+['|']+['-']+['.']+[',']+['#']+['[']+[']']+['_']+['<']+['>']+-- {Non Terminator} = {String Chars1} - {CR} - {LF}+-- {Non Zero Digits}={Digit}-[0]++-- ! ------------------------------------------------- Terminals++-- Identifier    = {ID Head}{ID Tail}*+-- StringLiteral = '"' ( {String Chars1} | '\' {Printable} )* '"' | '' ( {String Chars2} | '\' {Printable} )* ''++-- HexIntegerLiteral = '0x' {Hex Digit}+++-- RegExp         = '/' ({RegExp Chars} | '\' {Non Terminator})+ '/' ( 'g' | 'i' | 'm' )*+-- DecimalLiteral= {Non Zero Digits}+ '.' {Digit}* ('e' | 'E' ) {Non Zero Digits}+ {Digit}* |  {Non Zero Digits}+ '.' {Digit}* | '0' '.' {Digit}+ ('e' | 'E' ) {Non Zero Digits}+ {Digit}* | {Non Zero Digits}+ {Digit}* | '0' | '0' '.' {Digit}+++-- Comment Start = '/*'+-- Comment End   = '*/'+-- Comment Line  = '//'++-- ! ------------------------------------------------- Rules+++++-- ---------------------------------------------------------------------+-- Sort out automatically inserted semi-colons++AutoSemi : ';' { AST.JSLiteral ";"}+         |     { AST.JSLiteral ""}+           +-- ---------------------------------------------------------------------++-- <Literal> ::= <Null Literal>+--             | <Boolean Literal>+--             | <Numeric Literal>+--             | StringLiteral+Literal : NullLiteral     {$1}+        | BooleanLiteral  {$1}+        | NumericLiteral  {$1}+        | StringLiteral   {$1}+++NullLiteral : 'null' { AST.JSLiteral "null" }++BooleanLiteral : 'true' { AST.JSLiteral "true" }+               | 'false' { AST.JSLiteral "false" }++-- <Numeric Literal> ::= DecimalLiteral+--                     | HexIntegerLiteral+NumericLiteral : 'decimal'    { AST.JSDecimal (token_literal $1)}+               | 'hexinteger' { AST.JSHexInteger (token_literal $1)}++StringLiteral : 'string'  {AST.JSStringLiteral (token_delimiter $1) (token_literal $1)}++-- <Regular Expression Literal> ::= RegExp +RegularExpressionLiteral : 'regex' {AST.JSRegEx (token_literal $1)}++-- <Primary Expression> ::= 'this'+--                        | Identifier+--                        | <Literal> +--                        | <Array Literal>+--                        | <Object Literal>+--                        | '(' <Expression> ')'+--                        | <Regular Expression Literal>+PrimaryExpression :: { AST.JSNode }+PrimaryExpression : 'this'                   { AST.JSLiteral "this" }+                  | Identifier               { $1 {- PrimaryExpression1 -}}+                  | Literal                  { $1 {- PrimaryExpression2 -}}+                  | ArrayLiteral             { $1 {- PrimaryExpression3 -}}+                  | ObjectLiteral            { $1 {- PrimaryExpression4 -}}+                  | '(' Expression ')'       { AST.JSExpressionParen $2 }+                  | RegularExpressionLiteral { $1 {- PrimaryExpression5 -}}+                  +Identifier : 'ident' { AST.JSIdentifier (token_literal $1) }++-- <Array Literal> ::= '[' ']'+--                   | '[' <Elision> ']'+--                   | '[' <Element List> ']'+--                   | '[' <Element List> ',' <Elision> ']'+ArrayLiteral : '[' ']'                         { AST.JSArrayLiteral [] }+             | '[' Elision ']'                 { AST.JSArrayLiteral $2 }+             | '[' ElementList ']'             { AST.JSArrayLiteral $2 }+             | '[' ElementList ',' Elision ']' { AST.JSArrayLiteral ($2++$4) }++-- <Elision> ::= ','+--             | <Elision> ','+Elision :  ','        { [(AST.JSElision [])] }+        | Elision ',' { $1 ++ [(AST.JSElision [])] }+++-- <Element List> ::= <Elision> <Assignment Expression>+--                  | <Element List> ',' <Elision>  <Assignment Expression>+--                  | <Element List> ',' <Assignment Expression>+--                  | <Assignment Expression>+ElementList : Elision AssignmentExpression                     { [(AST.JSElementList ($1++$2)) ] }+            | ElementList ',' Elision AssignmentExpression { [(AST.JSElementList ($1++[(AST.JSElision [])]++$3++$4))] }+            | ElementList ',' AssignmentExpression         { [(AST.JSElementList ($1++[(AST.JSElision [])]++$3))] }+            | AssignmentExpression                             { $1 {- ElementList -}}++-- <Object Literal> ::= '{' <Property Name and Value List> '}'+ObjectLiteral :: { AST.JSNode }+ObjectLiteral : '{' PropertyNameandValueList '}' { AST.JSObjectLiteral $2 }++-- <Property Name and Value List> ::= <Property Name> ':' <Assignment Expression>+--                                  | <Property Name and Value List> ',' <Property Name> ':' <Assignment Expression>++-- Seems we can have function declarations in the value part too                           +PropertyNameandValueList :: { [ AST.JSNode ] }+PropertyNameandValueList : PropertyName ':' AssignmentExpression { [(AST.JSPropertyNameandValue $1 $3)] }+                         | PropertyName ':' FunctionDeclaration { [(AST.JSPropertyNameandValue $1 [$3])] }+                         | PropertyNameandValueList ',' PropertyName ':' AssignmentExpression +                           { ($1 ++ [(AST.JSPropertyNameandValue $3 $5)])  } +                         | PropertyNameandValueList ',' PropertyName ':' FunctionDeclaration +                           { ($1 ++ [(AST.JSPropertyNameandValue $3 [$5])])  } +                         |    { [] }  +++-- <Property Name> ::= Identifier+--                   | StringLiteral+--                   | <Numeric Literal>+PropertyName : Identifier     { $1 {- PropertyName1 -}}+             | StringLiteral  { $1 {- PropertyName2 -}}+             | NumericLiteral { $1 {- PropertyName3 -}}++-- <Member Expression > ::= <Primary Expression>+--                        | <Function Expression>+--                        | <Member Expression> '[' <Expression> ']'+--                        | <Member Expression> '.' Identifier+--                        | 'new' <Member Expression> <Arguments>+MemberExpression :: { [AST.JSNode] }+MemberExpression : PrimaryExpression   { [$1] {- MemberExpression -}} +                 | FunctionExpression  { [$1] {- MemberExpression -}}+                 | MemberExpression '[' Expression ']' { [AST.JSMemberSquare $1 $3] }+                 | MemberExpression '.' Identifier { [AST.JSMemberDot $1 $3] } +                 | 'new' MemberExpression Arguments { (((AST.JSLiteral "new "):$2)++[$3])}++-- <New Expression> ::= <Member Expression>+--                    | new <New Expression>+NewExpression : MemberExpression {$1 {- NewExpression -}} +              | 'new' NewExpression { (AST.JSLiteral "new "):$2 }++-- <Call Expression> ::= <Member Expression> <Arguments>+--                     | <Call Expression> <Arguments> +--                     | <Call Expression> '[' <Expression> ']'+--                     | <Call Expression> '.' Identifier+CallExpression :: { [AST.JSNode] }+CallExpression : MemberExpression Arguments        { $1++[$2] {- CallExpression -} } +               | CallExpression Arguments          { ($1++[(AST.JSCallExpression "()" [$2])]) }+               | CallExpression '[' Expression ']' { ($1++[(AST.JSCallExpression "[]" [$3])]) }+               | CallExpression '.' Identifier     { ($1++[(AST.JSCallExpression "."  [$3])]) }+++-- <Arguments> ::= '(' ')'+--               | '(' <Argument List> ')'+Arguments : '(' ')'               { (AST.JSArguments []) } +          | '(' ArgumentList ')'  { (AST.JSArguments $2) }++-- <Argument List> ::= <Assignment Expression>+--                   | <Argument List> ',' <Assignment Expression>+ArgumentList :: { [[AST.JSNode]] }+ArgumentList : AssignmentExpression { [$1] {- ArgumentList -}}+             | ArgumentList ',' AssignmentExpression { $1++[$3] {- ArgumentList2 -} }+++-- <Left Hand Side Expression> ::= <New Expression> +--                               | <Call Expression>+LeftHandSideExpression : NewExpression  { $1 {- LeftHandSideExpression1 -}}+                       | CallExpression { $1 {- LeftHandSideExpression12 -}} ++-- <Postfix Expression> ::= <Left Hand Side Expression>+--                        | <Postfix Expression> '++'+--                        | <Postfix Expression> '--'+PostfixExpression : LeftHandSideExpression { $1 {- PostfixExpression -} } +                  | PostfixExpression '++' {[(AST.JSExpressionPostfix "++" $1)]}+                  | PostfixExpression '--' {[(AST.JSExpressionPostfix "--" $1)]}++-- <Unary Expression> ::= <Postfix Expression>+--                      | 'delete' <Unary Expression>+--                      | 'void' <Unary Expression>+--                      | 'typeof' <Unary Expression>+--                      | '++' <Unary Expression>+--                      | '--' <Unary Expression>+--                      | '+' <Unary Expression>+--                      | '-' <Unary Expression>+--                      | '~' <Unary Expression>+--                      | '!' <Unary Expression>+UnaryExpression :: { [AST.JSNode] }+UnaryExpression : PostfixExpression { $1 {- UnaryExpression -} } +                | 'delete' UnaryExpression { ((AST.JSUnary "delete "):$2)}+                | 'void'   UnaryExpression { ((AST.JSUnary "void "):$2)}+                | 'typeof' UnaryExpression { ((AST.JSUnary "typeof "):$2)}+                | '++'     UnaryExpression { ((AST.JSUnary "++"):$2) } +                | '--'     UnaryExpression { ((AST.JSUnary "--"):$2)}+                | '+'      UnaryExpression { ((AST.JSUnary "+"):$2)}+                | '-'      UnaryExpression { ((AST.JSUnary "-"):$2)}+                | '~'      UnaryExpression { ((AST.JSUnary "~"):$2)}+                | '!'      UnaryExpression { ((AST.JSUnary "!"):$2)}+++-- <Multiplicative Expression> ::= <Unary Expression>+--                               | <Unary Expression> '*' <Multiplicative Expression> +--                               | <Unary Expression> '/' <Multiplicative Expression>                               +--                               | <Unary Expression> '%' <Multiplicative Expression> +MultiplicativeExpression :: { [AST.JSNode] }+MultiplicativeExpression : UnaryExpression { $1 {- MultiplicativeExpression -}} +                         | UnaryExpression '*' MultiplicativeExpression { [(AST.JSExpressionBinary "*" $1 $3)]}+                         | UnaryExpression '/' MultiplicativeExpression { [(AST.JSExpressionBinary "/" $1 $3)]}+                         | UnaryExpression '%' MultiplicativeExpression { [(AST.JSExpressionBinary "%" $1 $3)]}++-- <Additive Expression> ::= <Additive Expression>'+'<Multiplicative Expression> +--                         | <Additive Expression>'-'<Multiplicative Expression>  +--                         | <Multiplicative Expression> +AdditiveExpression :: { [AST.JSNode] }+AdditiveExpression : AdditiveExpression '+' MultiplicativeExpression { [(AST.JSExpressionBinary "+" $1 $3)]}+                   | AdditiveExpression '-' MultiplicativeExpression { [(AST.JSExpressionBinary "-" $1 $3)]}+                   | MultiplicativeExpression { $1 {- (goRegExp $1)-} {- AdditiveExpression -} } ++++-- <Shift Expression> ::= <Shift Expression> '<<' <Additive Expression>+--                      | <Shift Expression> '>>' <Additive Expression>+--                      | <Shift Expression> '>>>' <Additive Expression>+--                      | <Additive Expression>+ShiftExpression :: { [AST.JSNode] }+ShiftExpression : ShiftExpression '<<'  AdditiveExpression { [(AST.JSExpressionBinary "<<" $1 $3)]}+                | ShiftExpression '>>'  AdditiveExpression { [(AST.JSExpressionBinary ">>" $1 $3)]}+                | ShiftExpression '>>>' AdditiveExpression { [(AST.JSExpressionBinary ">>>" $1 $3)]}+                | AdditiveExpression { $1 {- ShiftExpression -}} ++-- <Relational Expression>::= <Shift Expression> +--                          | <Relational Expression> '<' <Shift Expression> +--                          | <Relational Expression> '>' <Shift Expression> +--                          | <Relational Expression> '<=' <Shift Expression> +--                          | <Relational Expression> '>=' <Shift Expression> +--                          | <Relational Expression> 'instanceof' <Shift Expression> +RelationalExpression :: { [AST.JSNode] }+RelationalExpression : ShiftExpression { $1 {- RelationalExpression -}} +                     | RelationalExpression '<'  ShiftExpression { [(AST.JSExpressionBinary "<" $1 $3)]}+                     | RelationalExpression '>'  ShiftExpression { [(AST.JSExpressionBinary ">" $1 $3)]}+                     | RelationalExpression '<=' ShiftExpression { [(AST.JSExpressionBinary "<=" $1 $3)]}+                     | RelationalExpression '>=' ShiftExpression { [(AST.JSExpressionBinary ">=" $1 $3)]}+                     | RelationalExpression 'instanceof' ShiftExpression { [(AST.JSExpressionBinary " instanceof " $1 $3)]}+                       -- Strictly speaking should have all the NoIn variants of expressions,    +                       -- but we assume syntax is checked so no problem. Cross fingers.    +                     | RelationalExpression 'in' ShiftExpression { [(AST.JSExpressionBinary " in " $1 $3)]}+                       ++-- <Equality Expression> ::= <Relational Expression>+--                         | <Equality Expression> '==' <Relational Expression>+--                         | <Equality Expression> '!=' <Relational Expression>+--                         | <Equality Expression> '===' <Relational Expression>+--                         | <Equality Expression> '!==' <Relational Expression>+EqualityExpression :: { [AST.JSNode] }+EqualityExpression : RelationalExpression { $1 {- EqualityExpression -} } +                   | EqualityExpression '=='  RelationalExpression { [(AST.JSExpressionBinary "==" $1 $3)]}+                   | EqualityExpression '!='  RelationalExpression { [(AST.JSExpressionBinary "!=" $1 $3)]}+                   | EqualityExpression '===' RelationalExpression { [(AST.JSExpressionBinary "===" $1 $3)]}+                   | EqualityExpression '!==' RelationalExpression { [(AST.JSExpressionBinary "!==" $1 $3)]}+++-- <Bitwise And Expression> ::= <Equality Expression>+--                            | <Bitwise And Expression> '&' <Equality Expression>+BitwiseAndExpression :: { [AST.JSNode] }+BitwiseAndExpression : EqualityExpression { $1 {- BitwiseAndExpression -} } +                     | BitwiseAndExpression '&' EqualityExpression { [(AST.JSExpressionBinary "&" $1 $3)]}++-- <Bitwise XOr Expression> ::= <Bitwise And Expression>+--                            | <Bitwise XOr Expression> '^' <Bitwise And Expression>+BitwiseXOrExpression :: { [AST.JSNode] }+BitwiseXOrExpression : BitwiseAndExpression { $1 {- BitwiseXOrExpression -} } +                     | BitwiseXOrExpression '^' BitwiseAndExpression { [(AST.JSExpressionBinary "^" $1 $3)]}++-- <Bitwise Or Expression> ::= <Bitwise XOr Expression>+--                           | <Bitwise Or Expression> '|' <Bitwise XOr Expression>+BitwiseOrExpression :: { [AST.JSNode] }+BitwiseOrExpression : BitwiseXOrExpression { $1 {- BitwiseOrExpression -} } +                    | BitwiseOrExpression '|' BitwiseXOrExpression { [(AST.JSExpressionBinary "|" $1 $3)]}++-- <Logical And Expression> ::= <Bitwise Or Expression>+--                            | <Logical And Expression> '&&' <Bitwise Or Expression>+LogicalAndExpression :: { [AST.JSNode] }+LogicalAndExpression : BitwiseOrExpression { $1 {- LogicalAndExpression -} } +                     | LogicalAndExpression '&&' BitwiseOrExpression { [(AST.JSExpressionBinary "&&" $1 $3)]}++-- <Logical Or Expression> ::= <Logical And Expression>+--                           | <Logical Or Expression> '||' <Logical And Expression>+LogicalOrExpression :: { [AST.JSNode] }+LogicalOrExpression : LogicalAndExpression { $1 {- LogicalOrExpression -} } +                    | LogicalOrExpression '||' LogicalAndExpression { [(AST.JSExpressionBinary "||" $1 $3)]}++-- <Conditional Expression> ::= <Logical Or Expression> +--                            | <Logical Or Expression> '?' <Assignment Expression> ':' <Assignment Expression>+ConditionalExpression :: { [AST.JSNode] }+ConditionalExpression : LogicalOrExpression { $1 {- ConditionalExpression -} }+                    | LogicalOrExpression '?' AssignmentExpression ':' AssignmentExpression +                      { [AST.JSExpressionTernary $1 $3 $5] } +                    +  +-- <Assignment Expression> ::= <Conditional Expression>+--                           | <Left Hand Side Expression> <Assignment Operator> <Assignment Expression> +AssignmentExpression :: { [AST.JSNode] }+AssignmentExpression : ConditionalExpression { $1 {- AssignmentExpression -}} +                     | LeftHandSideExpression AssignmentOperator AssignmentExpression +                       { [(AST.JSElement "assignmentExpression" ($1++[$2]++$3))] }+                       +-- <Assignment Operator> ::= '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<=' | '>>=' | '>>>=' | '&=' | '^=' | '|='+AssignmentOperator :: { AST.JSNode }+AssignmentOperator : 'assign' { AST.JSOperator (token_literal $1) }+                   | '='      { AST.JSOperator "=" }++-- <Expression> ::= <Assignment Expression>+--                | <Expression> ',' <Assignment Expression>+Expression :: { AST.JSNode }+Expression : AssignmentExpression { AST.JSExpression $1 {- Expression -} } +           | Expression ',' AssignmentExpression  { flattenExpression $1 $3 }++ExpressionOpt :: { [AST.JSNode] }+ExpressionOpt : Expression { [$1] {- ExpressionOpt -}}+              |            { []   {- ExpressionOpt -}}+                           +-- <Statement> ::= <Block>+--               | <Variable Statement>+--               | <Empty Statement>+--               | <If Statement>+--               | <If Else Statement>+--               | <Iteration Statement>+--               | <Continue Statement>+--               | <Break Statement>+--               | <Return Statement>+--               | <With Statement>+--               | <Labelled Statement>+--               | <Switch Statement>+--               | <Throw Statement>+--               | <Try Statement>+--               | <Expression> +Statement :: { AST.JSNode }+Statement : StatementNoEmpty   { $1 {- Statement1 -}}+          | EmptyStatement     { $1 {- Statement3 -}}++StatementNoEmpty :: { AST.JSNode }+StatementNoEmpty : StatementBlock     { $1 {- StatementNoEmpty1 -}}+                 | VariableStatement     { $1 {- StatementNoEmpty2 -}}+                   -- | EmptyStatement     { $1 {- StatementNoEmpty3 -}}+                   -- | IfStatement        { $1 {- StatementNoEmpty4 -}}+                 | IfElseStatement    { $1 {- StatementNoEmpty5 -}}+                 | IterationStatement { $1 {- StatementNoEmpty6 -}}+                 | ContinueStatement  { $1 {- StatementNoEmpty7 -}}+                 | BreakStatement     { $1 {- StatementNoEmpty8 -}}+                 | ReturnStatement    { $1 {- StatementNoEmpty9 -}}+                 | WithStatement      { $1 {- StatementNoEmpty10 -}}+                 | LabelledStatement  { $1 {- StatementNoEmpty11 -}}+                 | SwitchStatement    { $1 {- StatementNoEmpty12 -}}+                 | ThrowStatement     { $1 {- StatementNoEmpty13 -}}+                 | TryStatement       { $1 {- StatementNoEmpty14 -}}+                 | Expression         { $1 {- StatementNoEmpty15 -}}++StatementBlock : '{' '}'               { (AST.JSLiteral ";") }+               | '{' StatementList '}' { (if ($2 == AST.JSStatementList [AST.JSLiteral ";"]) then (AST.JSLiteral ";") else (AST.JSBlock $2)) }++Block : '{' '}'               { (AST.JSBlock (AST.JSStatementList [])) }+      | '{' StatementList '}' { (AST.JSBlock $2) }++StatementList :: { AST.JSNode }+StatementList : Statement               { (AST.JSStatementList [$1]) }+              | StatementList Statement { (combineStatements $1 $2) }++-- <Variable Statement> ::= var <Variable Declaration List> ';'+VariableStatement : 'var'   VariableDeclarationList AutoSemi { AST.JSVariables "var" $2 }+                  | 'const' VariableDeclarationList AutoSemi { AST.JSVariables "const" $2 }++-- <Variable Declaration List> ::= <Variable Declaration>+--                               | <Variable Declaration List> ',' <Variable Declaration>+VariableDeclarationList :: { [AST.JSNode] }+VariableDeclarationList : VariableDeclaration { [$1] {- VariableDeclarationList -}}+                        | VariableDeclarationList ',' VariableDeclaration { ($1 ++ [$3]) {- VariableDeclarationList -}}++VariableDeclaration :: { AST.JSNode }+VariableDeclaration : Identifier              { (AST.JSVarDecl $1 [])}+                    | Identifier Initializer  { (AST.JSVarDecl $1 $2)}++-- <Initializer> ::= '=' <Assignment Expression>+Initializer : '=' AssignmentExpression { $2 {- Initializer -}}++EmptyStatement : ';' { (AST.JSLiteral ";") }+++{-+-- <If Statement> ::= 'if' '(' <Expression> ')' <Statement> +IfStatement : 'if' '(' Expression ')' Statement { (AST.JSIf $3 $5) }++-- <If Else Statement> ::= 'if' '(' <Expression> ')' <Statement> 'else' <Statement>+IfElseStatement : 'if' '(' Expression ')' StatementSemi 'else' Statement { (AST.JSIfElse $3 $5 $7) }+-}++{-+IfElseStatement : 'if' '(' Expression ')' Statement  ';' 'else' Statement  +                  { (AST.JSIfElse $3 (AST.JSBlock (AST.JSStatementList [$5])) $8) }+                | 'if' '(' Expression ')' Statement  'else' Statement    +                   { (AST.JSIfElse $3 $5 $7) }+                | 'if' '(' Expression ')' Statement { (AST.JSIf $3 $5) }+-}                  +++IfElseStatement :: { AST.JSNode }+IfElseStatement : 'if' '(' Expression ')' StatementSemi  IfElseRest +                  { (if ($6 /= []) then  +                       (if (length $6 == 1) then (AST.JSIfElse $3 $5 (head $6)) +                                            else (AST.JSIfElse $3 (AST.JSBlock (AST.JSStatementList [$5])) (last $6))) +                     else (AST.JSIf $3 $5)) }++                  +IfElseRest :: { [AST.JSNode] }                  +IfElseRest : -- ';' 'else' Statement { [$3,$3] } -- Horrible, but a type-compliant signal nevertheless+           {- | -} 'else' Statement     { [$2] }+           |                      { [] } ++{-+ElsePart : 'else'      { 1 }+         | ';' 'else'  { 2 }+-}+StatementSemi : StatementNoEmpty ';' { (AST.JSBlock (AST.JSStatementList [$1])) } +              | StatementNoEmpty     { $1 {- StatementSemi -}}+              | ';'                  { AST.JSLiteral ";" }  +++-- <Iteration Statement> ::= 'do' <Statement> 'while' '(' <Expression> ')' ';'+--                         | 'while' '(' <Expression> ')' <Statement> +--                         | 'for' '(' <Expression> ';' <Expression> ';' <Expression> ')' <Statement> +--                         | 'for' '(' 'var' <Variable Declaration List> ';' <Expression> ';' <Expression> ')' <Statement> +--                         | 'for' '(' <Left Hand Side Expression> in <Expression> ')' <Statement> +--                         | 'for' '(' 'var' <Variable Declaration> in <Expression> ')' <Statement> +IterationStatement :: { AST.JSNode }+IterationStatement : 'do' Statement 'while' '(' Expression ')' AutoSemi { (AST.JSDoWhile $2 $5 $7) } +                   | 'while' '(' Expression ')' Statement { (AST.JSWhile $3 $5) }+                   | 'for' '(' ExpressionOpt ';' ExpressionOpt ';' ExpressionOpt ')' Statement { (AST.JSFor $3 $5 $7 $9) }+                   | 'for' '(' 'var' VariableDeclarationList ';' ExpressionOpt ';' ExpressionOpt ')' Statement +                     { (AST.JSForVar $4 $6 $8 $10) }+                   | 'for' '(' LeftHandSideExpression 'in' Expression ')' Statement +                     { (AST.JSForIn $3 $5 $7) }+                   | 'for' '(' 'var' VariableDeclaration 'in' Expression ')' Statement+                     { (AST.JSForVarIn $4 $6 $8) }++-- <Continue Statement> ::= 'continue' ';'+--                        | 'continue' Identifier ';'+ContinueStatement : 'continue' AutoSemi             { (AST.JSContinue [$2]) } +                  | 'continue' Identifier AutoSemi  { (AST.JSContinue [$2,$3]) } ++-- <Break Statement> ::= 'break' ';'+--                        | 'break' Identifier ';'+BreakStatement : 'break' AutoSemi             { (AST.JSBreak [] [$2]) } +               | 'break' Identifier AutoSemi  { (AST.JSBreak [$2] [$3]) } ++-- <Return Statement> ::= 'return' ';'+--                        | 'return' <Expression> ';'+ReturnStatement : 'return' AutoSemi             { (AST.JSReturn [$2]) } +                | 'return' Expression AutoSemi  { (AST.JSReturn [$2,$3]) } ++-- <With Statement> ::= 'with' '(' <Expression> ')' <Statement> ';'+WithStatement : 'with' '(' Expression ')' Statement AutoSemi  { (AST.JSWith $3 [$5,$6]) }++-- <Switch Statement> ::= 'switch' '(' <Expression> ')' <Case Block>  +SwitchStatement : 'switch' '(' Expression ')' CaseBlock { (AST.JSSwitch $3 $5) } ++-- <Case Block> ::= '{' '}'+--                | '{' <Case Clauses> '}'+--                | '{' <Case Clauses> <Default Clause> '}'+--                | '{' <Case Clauses> <Default Clause> <Case Clauses> '}'+--                | '{' <Default Clause> <Case Clauses> '}'+--                | '{' <Default Clause> '}'+CaseBlock :: { [AST.JSNode] }+CaseBlock : '{' '}'                                       { [] }+          | '{' CaseClauses '}'                           { $2            {- CaseBlock2 -}}+          | '{' CaseClauses DefaultClause '}'             { ($2++[$3])    {- CaseBlock3 -}}+          | '{' CaseClauses DefaultClause CaseClauses '}' { ($2++($3:$4)) {- CaseBlock4 -}}+          | '{' DefaultClause CaseClauses '}'             { ($2:$3)       {- CaseBlock5 -}}+          | '{' DefaultClause '}'                         { [$2]          {- CaseBlock6 -}}++-- <Case Clauses> ::= <Case Clause>+--                  | <Case Clauses> <Case Clause>+CaseClauses :: { [AST.JSNode] }+CaseClauses : CaseClause               { [$1] {- CaseClauses1 -}}+            | CaseClauses CaseClause   { ($1++[$2]) {- CaseClauses2 -}}++-- <Case Clause> ::= 'case' <Expression> ':' <Statement List>+--                 | 'case' <Expression> ':'+CaseClause :: { AST.JSNode }+CaseClause : 'case' Expression ':' StatementList  { (AST.JSCase $2 $4) }+           | 'case' Expression ':'                { (AST.JSCase $2 (AST.JSStatementList [])) }++-- <Default Clause> ::= 'default' ':' +--                    | 'default' ':' <Statement List>+DefaultClause :: { AST.JSNode }+DefaultClause : 'default' ':'                { (AST.JSDefault (AST.JSStatementList [])) }+              | 'default' ':' StatementList  { (AST.JSDefault $3) }++-- <Labelled Statement> ::= Identifier ':' <Statement> +LabelledStatement : Identifier ':' Statement { (AST.JSLabelled $1 $3) }++-- <Throw Statement> ::= 'throw' <Expression>+ThrowStatement : 'throw' Expression { (AST.JSThrow $2) }++-- Note: worked in updated syntax as per https://developer.mozilla.org/en/JavaScript/Reference/Statements/try...catch+--   i.e., 0 or more catches, then an optional finally+-- <Try Statement> ::= 'try' <Block> <Catch>+--                   | 'try' <Block> <Finally>+--                   | 'try' <Block> <Catch> <Finally>+TryStatement : 'try' Block Catches         { (AST.JSTry $2 $3)         {- TryStatement1 -} }+             | 'try' Block Finally         { (AST.JSTry $2 [$3])       {- TryStatement2 -} }+             | 'try' Block Catches Finally { (AST.JSTry $2 ($3++[$4])) {- TryStatement3 -} }++Catches :: { [AST.JSNode] }+Catches : Catch         { [$1]       {- Catches 1 -} }+        | Catches Catch { ($1++[$2]) {- Catches 2 -} }++-- Note: worked in updated syntax as per https://developer.mozilla.org/en/JavaScript/Reference/Statements/try...catch+-- <Catch> ::= 'catch' '(' Identifier ')' <Block>+--   becomes+-- <Catch> ::= 'catch' '(' Identifier ')' <Block>+--           | 'catch' '(' Identifier 'if' ConditionalExpression ')' <Block>+Catch : 'catch' '(' Identifier ')' Block                 { (AST.JSCatch $3 [] $5) }+      | 'catch' '(' Identifier 'if' ConditionalExpression ')' Block  { (AST.JSCatch $3 $5 $7) }++-- <Finally> ::= 'finally' <Block>+Finally : 'finally' Block { (AST.JSFinally $2) }++-- <Function Declaration> ::= 'function' Identifier '(' <Formal Parameter List> ')' '{' <Function Body> '}'+--                          | 'function' Identifier '(' ')' '{' <Function Body> '}'+FunctionDeclaration :: { AST.JSNode }+FunctionDeclaration : 'function' Identifier '(' FormalParameterList ')' '{' FunctionBody '}'+                      { (AST.JSFunction $2 $4 $7) }+                    | 'function' Identifier '(' ')' '{' FunctionBody '}'+                      { (AST.JSFunction $2 [] $6) }++-- <Function Expression> ::= 'function' '(' ')' '{' <Function Body> '}'+--                         | 'function' '(' <Formal Parameter List> ')' '{' <Function Body> '}'+FunctionExpression :: { AST.JSNode }+FunctionExpression : 'function' '(' ')' '{' FunctionBody '}'                      { (AST.JSFunctionExpression [] $5) }+                   | 'function' '(' FormalParameterList ')' '{' FunctionBody '}'  { (AST.JSFunctionExpression $3 $6) }+++-- <Formal Parameter List> ::= Identifier+--                           | <Formal Parameter List> ',' Identifier+FormalParameterList :: { [AST.JSNode] }+FormalParameterList : Identifier                          { [$1] {- FormalParameterList -}}+                    | FormalParameterList ',' Identifier  { ($1++[$3]) }++-- <Function Body> ::= <Source Elements>+--                   | +FunctionBody :: { AST.JSNode }+FunctionBody : SourceElements { (AST.JSFunctionBody [$1]) }+             |                { (AST.JSFunctionBody []) } ++-- <Program> ::= <Source Elements>+Program : SourceElementsTop { $1 {- Program -}}++-- <Source Elements> ::= <Source Element>+--                     | <Source Elements>  <Source Element>+SourceElements :: { AST.JSNode }+SourceElements : SourceElement                { (AST.JSSourceElements [$1]) }+               | SourceElements SourceElement { (combineSourceElements $1 $2) }++SourceElementsTop :: { AST.JSNode }+SourceElementsTop : SourceElement                   { (AST.JSSourceElementsTop [$1]) }+                  | SourceElementsTop SourceElement { (combineSourceElementsTop $1 $2) }+++-- <Source Element> ::= <Statement>+--                    | <Function Declaration>+SourceElement :: { AST.JSNode }+SourceElement : Statement            { $1 {- SourceElement1 -} }+              | FunctionDeclaration  { $1 {- SourceElement2 -} } ++{++combineSourceElements :: AST.JSNode -> AST.JSNode -> AST.JSNode+combineSourceElements (AST.JSSourceElements xs) x = (AST.JSSourceElements (xs++[x]) )++combineSourceElementsTop :: AST.JSNode -> AST.JSNode -> AST.JSNode+combineSourceElementsTop (AST.JSSourceElementsTop xs) x = (AST.JSSourceElementsTop (xs++[x]) )++combineStatements :: AST.JSNode -> AST.JSNode -> AST.JSNode+combineStatements (AST.JSStatementList xs) (AST.JSStatementList ys) = (AST.JSStatementList (xs++ys) )+combineStatements (AST.JSStatementList xs) y = (AST.JSStatementList (xs++[y]) )++parseError :: Token -> P a +parseError = throwError . UnexpectedToken ++flattenExpression :: AST.JSNode -> [AST.JSNode] -> AST.JSNode+flattenExpression (AST.JSExpression xs) e = AST.JSExpression (xs++litComma++e)+                        where+                          litComma :: [AST.JSNode]+                          litComma = [(AST.JSLiteral ",")]+++}++-- Set emacs mode+-- Local Variables: +-- mode:haskell+-- End:             
+ src/Language/JavaScript/Parser/Lexer.x view
@@ -0,0 +1,291 @@+{+  +module Language.JavaScript.Parser.Lexer (+    Token(..)+    , lexCont +    ) where+  +import Control.Monad+import Language.JavaScript.Parser.LexerUtils+import Language.JavaScript.Parser.ParserMonad hiding (location,input)+import Language.JavaScript.Parser.SrcLocation+import Language.JavaScript.Parser.Token+import qualified Data.Map as Map++}++-- Not using a wrapper, rolling own below.+--%wrapper "basic"+-- %wrapper "monad" +-- %wrapper "monad-bytestring" ++-- character sets+$lf = \n  -- line feed+$cr = \r  -- carriage return+$ht = \t  -- horizontal tab+$sq = '   -- single quote+$dq = \"  -- double quote+$digit = 0-9			-- digits+$alpha = [a-zA-Z]		-- alphabetic characters+$digit    = 0-9+$non_zero_digit = 1-9+$ident_letter = [a-zA-Z_]+@eol_pattern = $lf | $cr $lf | $cr $lf  ++$any_char = [\x00-\xff]++$eol_char = [$lf $cr] -- any end of line character+$not_eol_char = ~$eol_char -- anything but an end of line character+++-- From GOLD Parser+-- {ID Head}      = {Letter} + [_] + [$]+@IDHead = $alpha | [_] | [\$]++-- {ID Tail}      = {Alphanumeric} + [_] + [$]+@IDTail = $alpha | $digit | [_] | [\$]++-- {String Chars1} = {Printable} + {HT} - ["\] +-- {String Chars2} = {Printable} + {HT} - [\''] +$StringChars1 = [$printable $ht] # [$dq \\] +$StringChars2 = [$printable $ht] # [$sq \\] +$short_str_char = [^ \n \r ' \" \\]++-- {Hex Digit}    = {Digit} + [ABCDEF] + [abcdef]+@HexDigit = $digit | [a-fA-F]+-- {RegExp Chars} = {Letter}+{Digit}+['^']+['$']+['*']+['+']+['?']+['{']+['}']+['|']+['-']+['.']+[',']+['#']+['[']+[']']+['_']+['<']+['>']+--$RegExpChars = [$alpha $digit \^\$\*\+\?\{\}\|\-\.\,\#\[\]\_\<\>]+--$RegExpChars = [$printable] # [\\]+-- {Non Terminator} = {String Chars1} - {CR} - {LF}+--$NonTerminator = $StringChars1 # [$cr $lf]+$NonTerminator = [$printable] # [$cr $lf]+-- {Non Zero Digits}={Digit}-[0]++-- ~ (LineTerminator | MUL | BSLASH | DIV)+$RegExpFirstChar = [$printable] # [ $cr $lf \* \\ \/]+-- ~ ( LineTerminator | BSLASH | DIV )+$RegExpChars = [$printable] # [ $cr $lf \\ \/]++-- WhiteSpace ::+--      <TAB>+--      <VT>+--      <FF>+--      <SP>+--      <NBSP>+--      <USP>+-- TODO: bring in NBSP and USP+$white_char   = [\ \f\v\t\r\n]++-- ! ------------------------------------------------- Terminals+tokens :-++-- State: 0 is regex allowed, 1 is / or /= allowed++<0> () ; -- { registerStates lexToken reg divide }++-- Skip Whitespace+<reg,divide> $white_char+   ;++-- Skip one line comment+<reg,divide> "//"($not_eol_char)*   ;++-- Skip multi-line comments. Note: may not nest+<reg,divide> "/*"($any_char)*"*/"  ;	+++-- Identifier    = {ID Head}{ID Tail}*+<reg,divide> @IDHead(@IDTail)*  { \loc len str -> keywordOrIdent (take len str) loc }++-- StringLiteral = '"' ( {String Chars1} | '\' {Printable} )* '"' +--                | '' ( {String Chars2} | '\' {Printable} )* ''+<reg,divide>  $dq ( $StringChars1 | \\ $printable )* $dq+     | $sq ( $StringChars2 | \\ $printable )* $sq { mkString stringToken }++-- HexIntegerLiteral = '0x' {Hex Digit}++<reg,divide> "0x" @HexDigit+ { mkString hexIntegerToken }++-- RegExp         = '/' ({RegExp Chars} | '\' {Non Terminator})+ '/' ( 'g' | 'i' | 'm' )*+-- <reg> "/" ($RegExpChars | "\" $NonTerminator)+ "/" ("g"|"i"|"m")* { mkString regExToken }++-- Based on the Jint version+<reg> "/" ($RegExpFirstChar | "\" $NonTerminator)  ($RegExpChars | "\" $NonTerminator)* "/" ("g"|"i"|"m")* { mkString regExToken }+++++-- DecimalLiteral= {Non Zero Digits}+ '.' {Digit}* ('e' | 'E' ) {Non Zero Digits}+ {Digit}* +--              |  {Non Zero Digits}+ '.' {Digit}* +--              | '0' '.' {Digit}+ ('e' | 'E' ) {Non Zero Digits}+ {Digit}* +--              | {Non Zero Digits}+ {Digit}* +--              | '0' +--              | '0' '.' {Digit}++<reg,divide> $non_zero_digit+ "." $digit* ("e"|"E") $non_zero_digit+ $digit* +    | $non_zero_digit+ "." $digit*       +    | "0." $digit+  ("e"|"E") $non_zero_digit+ $digit* +    | $non_zero_digit+ $digit*+    | "0"+    | "0." $digit+                    { mkString decimalToken }+++-- beginning of file+<bof> {+   -- @eol_pattern                         ;+   @eol_pattern                         { endOfLine lexToken }+   -- ()                                   { indentation lexToken dedent BOF }+}++-- / or /= only allowed in state 1+<divide> {+     "/="       { mkString assignToken}+     "/"	{ symbolToken  DivToken}+    }++<reg,divide> {+      \;	{ symbolToken  SemiColonToken}+      ","	{ symbolToken  CommaToken}+     "?"	{ symbolToken  HookToken}+     ":"	{ symbolToken  ColonToken}+     "||"	{ symbolToken  OrToken}+     "&&"	{ symbolToken  AndToken}+     "|"	{ symbolToken  BitwiseOrToken}+     "^"	{ symbolToken  BitwiseXorToken}+     "&"	{ symbolToken  BitwiseAndToken}+     "==="	{ symbolToken  StrictEqToken}+     "=="	{ symbolToken  EqToken}+     "*=" | "%=" | "+=" | "-=" | "<<=" | ">>=" | ">>>=" | "&=" | "^=" | "|="+      	        { mkString assignToken}+     "="        { symbolToken  SimpleAssignToken}+     "!=="	{ symbolToken  StrictNeToken}+     "!="	{ symbolToken  NeToken}+     "<<"	{ symbolToken  LshToken}+     "<="	{ symbolToken  LeToken}+     "<"	{ symbolToken  LtToken}+     ">>>"	{ symbolToken  UrshToken}+     ">>"	{ symbolToken  RshToken}+     ">="	{ symbolToken  GeToken}+     ">"	{ symbolToken  GtToken}+     "++"	{ symbolToken  IncrementToken}+     "--"	{ symbolToken  DecrementToken}+     "+"	{ symbolToken  PlusToken}+     "-"	{ symbolToken  MinusToken}+     "*"	{ symbolToken  MulToken}+     "%"	{ symbolToken  ModToken}+     "!"	{ symbolToken  NotToken}+     "~"	{ symbolToken  BitwiseNotToken}+     "."	{ symbolToken  DotToken}+     "["	{ symbolToken  LeftBracketToken}+     "]"	{ symbolToken  RightBracketToken}+     "{"	{ symbolToken  LeftCurlyToken}+     "}"	{ symbolToken  RightCurlyToken}+     "("	{ symbolToken  LeftParenToken}+     ")"	{ symbolToken  RightParenToken}+     "@*/"	{ symbolToken  CondcommentEndToken}+}++++++{++{-   +-- The next function select between the two lex input states, as called for in+-- secion 7 of ECMAScript Language Specification, Edition 3, 24 March 2000.   ++The method is inspired by the lexer in http://jint.codeplex.com/++-}+--classifyToken :: Token -> Int+classifyToken token = +   case token of+      IdentifierToken {} -> divide+      NullToken {} -> divide+      TrueToken {} -> divide+      FalseToken {} -> divide+      ThisToken {} -> divide+      -- OctalToken {} -> divide -- May have to extend parser to cope with these+      DecimalToken {} -> divide+      HexIntegerToken {} -> divide+      StringToken {} -> divide+      RightCurlyToken {} -> divide+      RightParenToken {} -> divide+      _other      -> reg+++-- Each right-hand side has type :: String -> Token++lexToken :: P Token+lexToken = do+  location <- getLocation+  input <- getInput+  -- startCode <- getStartCode+  lt <- getLastToken+  case alexScan (location, input) (classifyToken lt) of+  --vcase alexScan (location, input) startCode of+    AlexEOF -> return endOfFileToken+    AlexError _ -> lexicalError+    AlexSkip (nextLocation, rest) _len -> do+       setLocation nextLocation +       setInput rest +       lexToken+    AlexToken (nextLocation, rest) len action -> do+       setLocation nextLocation +       setInput rest +       token <- action (mkSrcSpan location $ decColumn 1 nextLocation) len input +       setLastToken token+       return token++-- This is called by the Happy parser.+lexCont :: (Token -> P a) -> P a+lexCont cont = do+   lexLoop+   where+   -- lexLoop :: P a+   lexLoop = do+      tok <- lexToken+      case tok of+         {-+         CommentToken {} -> do+            addComment tok+            lexLoop+         LineJoinToken {} -> lexLoop+         -}+         _other -> cont tok+++-- ---------------------------------------------------------------------+         +-- a keyword or an identifier (the syntax overlaps)+keywordOrIdent :: String -> SrcSpan -> P Token+keywordOrIdent str location+   = return $ case Map.lookup str keywords of+         Just symbol -> symbol location+         Nothing -> IdentifierToken location str  ++-- mapping from strings to keywords+keywords :: Map.Map String (SrcSpan -> Token) +keywords = Map.fromList keywordNames ++keywordNames :: [(String, SrcSpan -> Token)]+keywordNames =+   [ +    ("break",BreakToken),("case",CaseToken),("catch",CatchToken),("const",ConstToken),+    ("continue",ContinueToken),("debugger",DebuggerToken),("default",DefaultToken),+    ("delete",DeleteToken),("do",DoToken),("else",ElseToken),("enum",EnumToken),+    ("false",FalseToken),("finally",FinallyToken),("for",ForToken),+    ("function",FunctionToken),("if",IfToken),("in",InToken),+    ("instanceof",InstanceofToken),("new",NewToken),("null",NullToken),+    ("return",ReturnToken),("switch",SwitchToken),("this",ThisToken),+    ("throw",ThrowToken),("true",TrueToken),("try",TryToken),+    ("typeof",TypeofToken),("var",VarToken),("void",VoidToken),+    ("while",WhileToken),("with",WithToken)+   ]++}++++-- Set emacs mode+-- Local Variables: +-- mode:haskell+-- End:             
+ src/Language/JavaScript/Parser/LexerUtils.hs view
@@ -0,0 +1,115 @@+-----------------------------------------------------------------------------+-- |+-- Module      : Language.JavaScript.LexerUtils +-- Based on language-python version by Bernie Pope+-- Copyright   : (c) 2009 Bernie Pope +-- License     : BSD-style+-- Stability   : experimental+-- Portability : ghc+--+-- Various utilities to support the JavaScript lexer. +-----------------------------------------------------------------------------++module Language.JavaScript.Parser.LexerUtils (+  StartCode+  , Action+  , AlexInput  +  , alexGetChar  +  , alexInputPrevChar  +  , symbolToken  +  , mkString  +  , regExToken  +  , decimalToken  +  , endOfLine  +  , endOfFileToken  +  , assignToken  +  , hexIntegerToken  +  , stringToken  +  , lexicalError  +  ) where++import Control.Monad (liftM)+import Control.Monad.Error.Class (throwError)+import Language.JavaScript.Parser.Token as Token +import Language.JavaScript.Parser.ParserMonad hiding (location,input)+import Language.JavaScript.Parser.SrcLocation +import Prelude hiding (span)++-- Functions for building tokens ++type StartCode = Int+type Action = SrcSpan -> Int -> String -> P Token +++endOfLine :: P Token -> Action+endOfLine lexToken span _len _str = do+   setLastEOL $ spanStartPoint span+   lexToken+++symbolToken :: (SrcSpan -> Token) -> Action +symbolToken mkToken location _ _ = return (mkToken location)++-- special tokens for the end of file and end of line+endOfFileToken :: Token+endOfFileToken = EOFToken SpanEmpty+-- dedentToken = DedentToken SpanEmpty +++mkString :: (SrcSpan -> String -> Token) -> Action+mkString toToken loc len str = do+   return $ toToken loc (take len str)++decimalToken :: SrcSpan -> String -> Token+decimalToken loc str = DecimalToken loc str++hexIntegerToken :: SrcSpan -> String -> Token+hexIntegerToken loc str = HexIntegerToken loc str++assignToken :: SrcSpan -> String -> Token+assignToken loc str = AssignToken loc str++regExToken :: SrcSpan -> String -> Token+regExToken loc str = RegExToken loc str++stringToken :: SrcSpan -> String -> Token+stringToken loc str = StringToken loc str1 delimiter +  where+    str1 = init $ tail str+    delimiter = head str++-- -----------------------------------------------------------------------------+-- Functionality required by Alex ++type AlexInput = (SrcLocation, String)++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar _ = error "alexInputPrevChar not used"++alexGetChar :: AlexInput -> Maybe (Char, AlexInput)+alexGetChar (loc, input) +   | null input  = Nothing+   | otherwise = Just (nextChar, (nextLoc, rest))+   where+   nextChar = head input+   rest = tail input +   nextLoc = moveChar nextChar loc++moveChar :: Char -> SrcLocation -> SrcLocation +moveChar '\n' = incLine 1 +moveChar '\t' = incTab +moveChar '\r' = id +moveChar _    = incColumn 1 ++lexicalError :: P a+lexicalError = do+  location <- getLocation+  c <- liftM head getInput+  throwError $ UnexpectedChar c location++{-+readOctNoO :: String -> Integer+readOctNoO (zero:rest) = read (zero:'O':rest)+-}++-- EOF
+ src/Language/JavaScript/Parser/ParseError.hs view
@@ -0,0 +1,33 @@+-----------------------------------------------------------------------------+-- |+-- Module      : Language.JavaScript.ParseError+-- Based on language-python version by Bernie Pope+-- Copyright   : (c) 2009 Bernie Pope +-- License     : BSD-style+-- Stability   : experimental+-- Portability : ghc+--+-- Error values for the lexer and parser. +-----------------------------------------------------------------------------++module Language.JavaScript.Parser.ParseError ( ParseError (..) ) where++--import Language.JavaScript.Parser.Pretty+import Language.JavaScript.Parser.SrcLocation (SrcLocation)+import Language.JavaScript.Parser.Token (Token)+import Control.Monad.Error.Class++data ParseError  +   = UnexpectedToken Token           +     -- ^ An error from the parser. Token found where it should not be. +     --   Note: tokens contain their own source span.+   | UnexpectedChar Char SrcLocation +     -- ^ An error from the lexer. Character found where it should not be.+   | StrError String                 +     -- ^ A generic error containing a string message. No source location.+   deriving (Eq, Ord, Show)++instance Error ParseError where+   noMsg = StrError ""+   strMsg = StrError +
+ src/Language/JavaScript/Parser/Parser.hs view
@@ -0,0 +1,72 @@+module Language.JavaScript.Parser.Parser (+   -- * Parsing +     parse+   , readJs+   , parseFile  +   -- * Parsing expressions+   -- parseExpr+   , parseUsing+   ) where++import Language.JavaScript.Parser.ParseError+import Language.JavaScript.Parser.Grammar+import Language.JavaScript.Parser.Lexer+import Language.JavaScript.Parser.ParserMonad hiding (input)+import Language.JavaScript.Parser.SrcLocation+import qualified Language.JavaScript.Parser.AST as AST++-- | Parse one compound statement, or a sequence of simple statements. +-- Generally used for interactive input, such as from the command line of an interpreter. +-- Return comments in addition to the parsed statements.+parseStmtKeepComments :: String -- ^ The input stream (Javascript source code). +      -> String -- ^ The name of the Javascript source (filename or input device). +      -> Either ParseError (AST.JSNode, [Token]) +         -- ^ An error or maybe the abstract syntax tree (AST) of zero or more Javascript statements, plus comments.+parseStmtKeepComments input srcName = +   execParserKeepComments parseProgram state +   where+     initLoc = initialSrcLocation srcName+     state = initialState initLoc input [0] -- initStartCodeStack+++-- | Parse one compound statement, or a sequence of simple statements. +-- Generally used for interactive input, such as from the command line of an interpreter. +-- Return comments in addition to the parsed statements.+parse :: String -- ^ The input stream (Javascript source code). +      -> String -- ^ The name of the Javascript source (filename or input device). +      -> Either ParseError AST.JSNode +         -- ^ An error or maybe the abstract syntax tree (AST) of zero or more Javascript statements, plus comments.+parse input srcName = +   execParser parseProgram state +   where+     initLoc = initialSrcLocation srcName+     state = initialState initLoc input [0] -- initStartCodeStack++readJs :: String -> AST.JSNode+readJs input = do+  case (parse input "src") of+    Left msg -> error (show msg)+    Right p -> p  ++parseFile :: FilePath -> IO AST.JSNode+parseFile filename =+  do +     x <- readFile (filename)+     return $ readJs x+++-- | Parse one compound statement, or a sequence of simple statements. +-- Generally used for interactive input, such as from the command line of an interpreter. +-- Return comments in addition to the parsed statements.+parseUsing :: +      P AST.JSNode+      -> String -- ^ The input stream (Javascript source code). +      -> String -- ^ The name of the Javascript source (filename or input device). +      -> Either ParseError AST.JSNode +         -- ^ An error or maybe the abstract syntax tree (AST) of zero or more Javascript statements, plus comments.+parseUsing p input srcName = +   execParser p state +   where+     initLoc = initialSrcLocation srcName+     state = initialState initLoc input [0] -- initStartCodeStack+
+ src/Language/JavaScript/Parser/ParserMonad.hs view
@@ -0,0 +1,135 @@+{-# OPTIONS  #-}+-----------------------------------------------------------------------------+-- |+-- Module      : Language.JavaScript.ParserMonad +-- Based on language-python version by Bernie Pope+-- Copyright   : (c) 2009 Bernie Pope +-- License     : BSD-style+-- Stability   : experimental+-- Portability : ghc+--+-- Monad support for JavaScript parser and lexer. +-----------------------------------------------------------------------------++module Language.JavaScript.Parser.ParserMonad +   ( P+   , execParser+   , execParserKeepComments+   , runParser+   , thenP+   , returnP+   , setLocation+   , getLocation+   , getInput+   , setInput+   , getLastToken+   , setLastToken+   , setLastEOL+   , getLastEOL+   , ParseError (..)+   , ParseState (..)+   , initialState+   , addComment+   , getComments+   , spanError+   ) where++import Control.Applicative ((<$>))+import Control.Monad.Error as Error+import Control.Monad.State.Class+import Control.Monad.State.Strict as State+import Language.JavaScript.Parser.ParseError (ParseError (..))+import Language.JavaScript.Parser.SrcLocation (SrcLocation (..), SrcSpan (..), Span (..))+import Language.JavaScript.Parser.Token (Token (..))+import Prelude hiding (span)++internalError :: String -> P a +internalError = throwError . StrError ++spanError :: Span a => a -> String -> P b +--spanError x str = throwError $ StrError $ unwords [prettyText $ getSpan x, str]+spanError x str = throwError $ StrError $ show ([show (getSpan x), str])++data ParseState = +   ParseState +   { location :: !SrcLocation -- position at current input location+   , input :: !String         -- the current input+   , previousToken :: !Token  -- the previous token+   , lastEOL :: !SrcSpan      -- location of the most recent end-of-line encountered+   , comments :: [Token]      -- accumulated comments +   }+   deriving Show++initToken :: Token+--initToken = NewlineToken SpanEmpty +initToken = CommentToken SpanEmpty ""++initialState :: SrcLocation -> String -> [Int] -> ParseState+initialState initLoc inp scStack+   = ParseState +   { location = initLoc +   , input = inp+   , previousToken = initToken+   -- , startCodeStack = scStack+   , lastEOL = SpanEmpty +   , comments = []+   -- , divideId = 0 +   -- , regId = 0         +   }++type P a = StateT ParseState (Either ParseError) a++execParser :: P a -> ParseState -> Either ParseError a+execParser = evalStateT ++execParserKeepComments :: P a -> ParseState -> Either ParseError (a, [Token])+execParserKeepComments parser state = +   evalStateT (parser >>= \x -> getComments >>= \c -> return (x, c)) state++runParser :: P a -> ParseState -> Either ParseError (a, ParseState)+runParser = runStateT ++{-# INLINE returnP #-}+returnP :: a -> P a+returnP = return ++{-# INLINE thenP #-}+thenP :: P a -> (a -> P b) -> P b+thenP = (>>=)++{-+failP :: SrcSpan -> [String] -> P a+failP span strs = throwError (prettyText span ++ ": " ++ unwords strs) +-}++setLastEOL :: SrcSpan -> P ()+setLastEOL span = modify $ \s -> s { lastEOL = span }++getLastEOL :: P SrcSpan+getLastEOL = gets lastEOL++setLocation :: SrcLocation -> P ()+setLocation loc = modify $ \s -> s { location = loc } ++getLocation :: P SrcLocation+getLocation = gets location ++getInput :: P String +getInput = gets input ++setInput :: String -> P ()+setInput inp = modify $ \s -> s { input = inp }++getLastToken :: P Token+getLastToken = gets previousToken ++setLastToken :: Token -> P ()+setLastToken tok = modify $ \s -> s { previousToken = tok } ++addComment :: Token -> P ()+addComment c = do+   oldComments <- gets comments+   modify $ \s -> s { comments = c : oldComments }++getComments :: P [Token]+getComments = reverse <$> gets comments
+ src/Language/JavaScript/Parser/SrcLocation.hs view
@@ -0,0 +1,236 @@+{-# LANGUAGE CPP, DeriveDataTypeable #-}+-----------------------------------------------------------------------------+-- |+-- Module      : Language.Python.Common.SrcLocation +-- Copyright   : (c) 2009 Bernie Pope +-- License     : BSD-style+-- Maintainer  : bjpop@csse.unimelb.edu.au+-- Stability   : experimental+-- Portability : ghc+--+-- Source location information for the Python lexer and parser. This module+-- provides single-point locations and spans, and conversions between them.+-----------------------------------------------------------------------------++module Language.JavaScript.Parser.SrcLocation (+  -- * Construction +  SrcLocation (..),+  SrcSpan (..),+  Span (..),+  spanning,+  mkSrcSpan,+  combineSrcSpans,+  initialSrcLocation,+  spanStartPoint,+  -- * Modification+  incColumn, +  decColumn,+  incLine,+  incTab,+  endCol,+  -- * Projection of components of a span+  endRow,+  startCol,+  startRow+) where++import Data.Data+import Prelude hiding (span)++-- | A location for a syntactic entity from the source code.+-- The location is specified by its filename, and starting row+-- and column. +data SrcLocation = +   Sloc { sloc_filename :: !String+        , sloc_row :: {-# UNPACK #-} !Int+        , sloc_column :: {-# UNPACK #-} !Int +        } +   | NoLocation+   deriving (Eq,Ord,Show,Typeable,Data)+{-+instance Pretty SrcLocation where+   pretty = pretty . getSpan+-}++-- | Types which have a span.+class Span a where+   getSpan :: a -> SrcSpan+   getSpan _x = SpanEmpty++-- | Create a new span which encloses two spanned things.+spanning :: (Span a, Span b) => a -> b -> SrcSpan+spanning x y = combineSrcSpans (getSpan x) (getSpan y)++instance Span a => Span [a] where+   getSpan [] = SpanEmpty+   getSpan [x] = getSpan x +   getSpan list@(x:_xs) = combineSrcSpans (getSpan x) (getSpan (last list))++instance Span a => Span (Maybe a) where+   getSpan Nothing = SpanEmpty+   getSpan (Just x) = getSpan x++instance (Span a, Span b) => Span (Either a b) where+   getSpan (Left x) = getSpan x+   getSpan (Right x) = getSpan x++instance (Span a, Span b) => Span (a, b) where+   getSpan (x,y) = spanning x y++instance Span SrcSpan where+   getSpan = id++-- | Construct the initial source location for a file.+initialSrcLocation :: String -> SrcLocation+initialSrcLocation filename +    = Sloc +      { sloc_filename = filename+      , sloc_row = 1+      , sloc_column = 1+      }++-- | Decrement the column of a location, only if they are on the same row.+decColumn :: Int -> SrcLocation -> SrcLocation+decColumn n loc+   | n < col = loc { sloc_column = col - n }+   | otherwise = loc +   where+   col = sloc_column loc++-- | Increment the column of a location. +incColumn :: Int -> SrcLocation -> SrcLocation+incColumn n loc@(Sloc { sloc_column = col })+   = loc { sloc_column = col + n }+incColumn _ NoLocation = NoLocation     ++-- | Increment the column of a location by one tab stop.+incTab :: SrcLocation -> SrcLocation+incTab loc@(Sloc { sloc_column = col })+   = loc { sloc_column = newCol } +   where+   newCol = col + 8 - (col - 1) `mod` 8+incTab NoLocation = NoLocation++-- | Increment the line number (row) of a location by one.+incLine :: Int -> SrcLocation -> SrcLocation+incLine n loc@(Sloc { sloc_row = row }) +   = loc { sloc_column = 1, sloc_row = row + n }+incLine _ NoLocation = NoLocation+{-+Inspired heavily by compiler/basicTypes/SrcLoc.lhs +A SrcSpan delimits a portion of a text file.  +-}++-- | Source location spanning a contiguous section of a file.+data SrcSpan+    -- | A span which starts and ends on the same line.+  = SpanCoLinear+    { span_filename     :: !String+    , span_row          :: {-# UNPACK #-} !Int+    , span_start_column :: {-# UNPACK #-} !Int+    , span_end_column   :: {-# UNPACK #-} !Int+    }+    -- | A span which starts and ends on different lines.+  | SpanMultiLine+    { span_filename     :: !String+    , span_start_row    :: {-# UNPACK #-} !Int+    , span_start_column :: {-# UNPACK #-} !Int+    , span_end_row      :: {-# UNPACK #-} !Int+    , span_end_column   :: {-# UNPACK #-} !Int+    }+    -- | A span which is actually just one point in the file.+  | SpanPoint+    { span_filename :: !String+    , span_row      :: {-# UNPACK #-} !Int+    , span_column   :: {-# UNPACK #-} !Int+    }+    -- | No span information.+  | SpanEmpty +   deriving (Eq,Ord,Show,Typeable,Data)+++instance Span SrcLocation where+   getSpan loc@(Sloc {})+      = SpanPoint +        { span_filename = sloc_filename loc+        , span_row = sloc_row loc+        , span_column = sloc_column loc+        }+   getSpan NoLocation = SpanEmpty ++-- | Make a point span from the start of a span+spanStartPoint :: SrcSpan -> SrcSpan+spanStartPoint SpanEmpty = SpanEmpty+spanStartPoint span = +   SpanPoint +   { span_filename = span_filename span+   , span_row = startRow span+   , span_column = startCol span+   }++-- | Make a span from two locations. Assumption: either the+-- arguments are the same, or the left one preceeds the right one.+mkSrcSpan :: SrcLocation -> SrcLocation -> SrcSpan+mkSrcSpan NoLocation _ = SpanEmpty+mkSrcSpan _ NoLocation = SpanEmpty +mkSrcSpan loc1 loc2+  | line1 == line2 = +       if col2 <= col1 +          then SpanPoint file line1 col1+          else SpanCoLinear file line1 col1 col2+  | otherwise = +       SpanMultiLine file line1 col1 line2 col2+  where+  line1 = sloc_row loc1+  line2 = sloc_row loc2+  col1 = sloc_column loc1+  col2 = sloc_column loc2+  file = sloc_filename loc1++-- | Combines two 'SrcSpan' into one that spans at least all the characters+-- within both spans. Assumes the "file" part is the same in both inputs+combineSrcSpans :: SrcSpan -> SrcSpan -> SrcSpan+combineSrcSpans SpanEmpty r = r -- this seems more useful+combineSrcSpans l SpanEmpty = l+combineSrcSpans start end+ = case row1 `compare` row2 of+     EQ -> case col1 `compare` col2 of+                EQ -> SpanPoint file row1 col1+                LT -> SpanCoLinear file row1 col1 col2+                GT -> SpanCoLinear file row1 col2 col1+     LT -> SpanMultiLine file row1 col1 row2 col2+     GT -> SpanMultiLine file row2 col2 row1 col1+  where+  row1 = startRow start+  col1 = startCol start+  row2 = endRow end+  col2 = endCol end+  file = span_filename start++-- | Get the row of the start of a span.+startRow :: SrcSpan -> Int+startRow (SpanCoLinear { span_row = row }) = row+startRow (SpanMultiLine { span_start_row = row }) = row+startRow (SpanPoint { span_row = row }) = row+startRow SpanEmpty = error "startRow called on empty span"++-- | Get the row of the end of a span.+endRow :: SrcSpan -> Int+endRow (SpanCoLinear { span_row = row }) = row+endRow (SpanMultiLine { span_end_row = row }) = row+endRow (SpanPoint { span_row = row }) = row+endRow SpanEmpty = error "endRow called on empty span"++-- | Get the column of the start of a span.+startCol :: SrcSpan -> Int+startCol (SpanCoLinear { span_start_column = col }) = col +startCol (SpanMultiLine { span_start_column = col }) = col +startCol (SpanPoint { span_column = col }) = col +startCol SpanEmpty = error "startCol called on empty span"++-- | Get the column of the end of a span.+endCol :: SrcSpan -> Int+endCol (SpanCoLinear { span_end_column = col }) = col +endCol (SpanMultiLine { span_end_column = col }) = col +endCol (SpanPoint { span_column = col }) = col +endCol SpanEmpty = error "endCol called on empty span"
+ src/Language/JavaScript/Parser/StringEscape.hs view
@@ -0,0 +1,82 @@+{-# OPTIONS  #-}+-----------------------------------------------------------------------------+-- |+-- Module      : Language.Python.Common.StringEscape+-- Copyright   : (c) 2009 Bernie Pope +-- License     : BSD-style+-- Maintainer  : bjpop@csse.unimelb.edu.au+-- Stability   : experimental+-- Portability : ghc+--+-- Conversion to/from escaped characters in strings. Note: currently does not+-- support escaped Unicode character names.+-- +-- See:+-- +--    * Version 2.6 <http://www.python.org/doc/2.6/reference/lexical_analysis.html#string-literals>+--  +--    * Version 3.1 <http://www.python.org/doc/3.1/reference/lexical_analysis.html#string-and-bytes-literals> +-----------------------------------------------------------------------------++module Language.JavaScript.Parser.StringEscape ( +   -- * String conversion. +   unescapeString, +   unescapeRawString,+   -- * Digits allowed in octal and hex representation.+   octalDigits,+   hexDigits) where++import Numeric (readHex, readOct)++-- | Convert escaped sequences of characters into /real/ characters in a normal Python string.+unescapeString :: String -> String+unescapeString ('\\':'\\':cs) = '\\' : unescapeString cs -- Backslash (\)+unescapeString ('\\':'\'':cs) = '\'' : unescapeString cs -- Single quote (')+unescapeString ('\\':'"':cs) = '"' : unescapeString cs   -- Double quote (")+unescapeString ('\\':'a':cs) = '\a' : unescapeString cs  -- ASCII Bell (BEL)+unescapeString ('\\':'b':cs) = '\b' : unescapeString cs  -- ASCII Backspace (BS)+unescapeString ('\\':'f':cs) = '\f' : unescapeString cs  -- ASCII Formfeed (FF)+unescapeString ('\\':'n':cs) = '\n' : unescapeString cs  -- ASCII Linefeed (LF)+unescapeString ('\\':'r':cs) = '\r' : unescapeString cs  -- ASCII Carriage Return (CR)+unescapeString ('\\':'t':cs) = '\t' : unescapeString cs  -- ASCII Horizontal Tab (TAB)+unescapeString ('\\':'v':cs) = '\v' : unescapeString cs  -- ASCII Vertical Tab (VT)+unescapeString ('\\':'\n':cs) = unescapeString cs        -- line continuation+unescapeString ('\\':rest@(o:_))+   | o `elem` octalDigits = unescapeNumeric 3 octalDigits (fst . head . readOct) rest +unescapeString ('\\':'x':rest@(h:_))+   | h `elem` hexDigits = unescapeNumeric 2 hexDigits (fst . head . readHex) rest +unescapeString (c:cs) = c : unescapeString cs +unescapeString [] = []++-- | Convert escaped sequences of characters into /real/ characters in a raw Python string.+-- Note: despite their name, Python raw strings do allow a small set of character escapings,+-- namely the single and double quote characters and the line continuation marker.+unescapeRawString :: String -> String+unescapeRawString ('\\':'\'':cs) = '\'' : unescapeRawString cs -- Single quote (')+unescapeRawString ('\\':'"':cs) = '"' : unescapeRawString cs -- Double quote (")+unescapeRawString ('\\':'\n':cs) = unescapeRawString cs -- line continuation+unescapeRawString (c:cs) = c : unescapeRawString cs+unescapeRawString [] = []++{- +   This is a bit complicated because Python allows between 1 and 3 octal+   characters after the \, and 1 and 2 hex characters after a \x.+-}+unescapeNumeric :: Int -> String -> (String -> Int) -> String -> String+unescapeNumeric n numericDigits readNumeric str+   = loop n [] str +   where+   loop _ acc [] = [numericToChar acc]+   loop 0 acc rest+      = numericToChar acc : unescapeString rest+   loop n1 acc (c:cs)+      | c `elem` numericDigits = loop (n1-1) (c:acc) cs+      | otherwise = numericToChar acc : unescapeString (c:cs)+   numericToChar :: String -> Char+   numericToChar = toEnum . readNumeric . reverse++octalDigits, hexDigits :: String+-- | The set of valid octal digits in Python.+octalDigits = "01234567"+-- | The set of valid hex digits in Python.+hexDigits = "0123456789abcdef"
+ src/Language/JavaScript/Parser/Token.hs view
@@ -0,0 +1,155 @@+{-# LANGUAGE CPP, DeriveDataTypeable #-}+-----------------------------------------------------------------------------+-- |+-- Module      : Language.Python.Common.Token +-- Copyright   : (c) 2009 Bernie Pope +-- License     : BSD-style+-- Maintainer  : bjpop@csse.unimelb.edu.au+-- Stability   : experimental+-- Portability : ghc+--+-- Lexical tokens for the Python lexer. Contains the superset of tokens from+-- version 2 and version 3 of Python (they are mostly the same).+-----------------------------------------------------------------------------++module Language.JavaScript.Parser.Token ( +   -- * The tokens +   Token (..),+   -- * String conversion+   debugTokenString,+   -- tokenString,+   -- * Classification+   -- TokenClass (..),+   ) where++--import Language.JavaScript.Parser.Pretty+import Language.JavaScript.Parser.SrcLocation (SrcSpan (..), Span(getSpan))+import Data.Data++-- | Lexical tokens.+data Token +   -- Comment+   = CommentToken { token_span :: !SrcSpan, token_literal :: !String } -- ^ Single line comment.++   -- Identifiers +   | IdentifierToken { token_span :: !SrcSpan, token_literal :: !String }            -- ^ Identifier.++   -- Javascript Literals  +     +   | DecimalToken { token_span :: !SrcSpan, token_literal :: !String  }+     -- ^ Literal: Decimal +   | HexIntegerToken { token_span :: !SrcSpan, token_literal :: !String  }+     -- ^ Literal: Hexadecimal Integer+   | StringToken { token_span :: !SrcSpan, token_literal :: !String, token_delimiter :: !Char }                   +     -- ^ Literal: string, delimited by either single or double quotes+   | RegExToken { token_span :: !SrcSpan, token_literal :: !String  }+     -- ^ Literal: Regular Expression++   -- Keywords+   | BreakToken { token_span :: !SrcSpan }+   | CaseToken { token_span :: !SrcSpan }+   | CatchToken { token_span :: !SrcSpan }+   | ConstToken { token_span :: !SrcSpan }+   | ContinueToken { token_span :: !SrcSpan }+   | DebuggerToken { token_span :: !SrcSpan }+   | DefaultToken { token_span :: !SrcSpan }+   | DeleteToken { token_span :: !SrcSpan }+   | DoToken { token_span :: !SrcSpan }+   | ElseToken { token_span :: !SrcSpan }+   | EnumToken { token_span :: !SrcSpan }+   | FalseToken { token_span :: !SrcSpan }+   | FinallyToken { token_span :: !SrcSpan }+   | ForToken { token_span :: !SrcSpan }+   | FunctionToken { token_span :: !SrcSpan }+   | IfToken { token_span :: !SrcSpan }+   | InToken { token_span :: !SrcSpan }+   | InstanceofToken { token_span :: !SrcSpan }+   | NewToken { token_span :: !SrcSpan }+   | NullToken { token_span :: !SrcSpan }+   | ReturnToken { token_span :: !SrcSpan }+   | SwitchToken { token_span :: !SrcSpan }+   | ThisToken { token_span :: !SrcSpan }+   | ThrowToken { token_span :: !SrcSpan }+   | TrueToken { token_span :: !SrcSpan }+   | TryToken { token_span :: !SrcSpan }+   | TypeofToken { token_span :: !SrcSpan }+   | VarToken { token_span :: !SrcSpan }+   | VoidToken { token_span :: !SrcSpan }+   | WhileToken { token_span :: !SrcSpan }+   | WithToken { token_span :: !SrcSpan }++   -- Delimiters+   -- Operators+   | SemiColonToken { token_span :: !SrcSpan }+   | CommaToken { token_span :: !SrcSpan }+   | HookToken { token_span :: !SrcSpan }+   | ColonToken { token_span :: !SrcSpan }+   | OrToken { token_span :: !SrcSpan }+   | AndToken { token_span :: !SrcSpan }+   | BitwiseOrToken { token_span :: !SrcSpan }+   | BitwiseXorToken { token_span :: !SrcSpan }+   | BitwiseAndToken { token_span :: !SrcSpan }+   | StrictEqToken { token_span :: !SrcSpan }+   | EqToken { token_span :: !SrcSpan }+   | AssignToken { token_span :: !SrcSpan, token_literal :: !String }+   | SimpleAssignToken { token_span :: !SrcSpan }+   | StrictNeToken { token_span :: !SrcSpan }+   | NeToken { token_span :: !SrcSpan }+   | LshToken { token_span :: !SrcSpan }+   | LeToken { token_span :: !SrcSpan }+   | LtToken { token_span :: !SrcSpan }+   | UrshToken { token_span :: !SrcSpan }+   | RshToken { token_span :: !SrcSpan }+   | GeToken { token_span :: !SrcSpan }+   | GtToken { token_span :: !SrcSpan }+   | IncrementToken { token_span :: !SrcSpan }+   | DecrementToken { token_span :: !SrcSpan }+   | PlusToken { token_span :: !SrcSpan }+   | MinusToken { token_span :: !SrcSpan }+   | MulToken { token_span :: !SrcSpan }+   | DivToken { token_span :: !SrcSpan }+   | ModToken { token_span :: !SrcSpan }+   | NotToken { token_span :: !SrcSpan }+   | BitwiseNotToken { token_span :: !SrcSpan }+   | DotToken { token_span :: !SrcSpan }+   | LeftBracketToken { token_span :: !SrcSpan }+   | RightBracketToken { token_span :: !SrcSpan }+   | LeftCurlyToken { token_span :: !SrcSpan }+   | RightCurlyToken { token_span :: !SrcSpan }+   | LeftParenToken { token_span :: !SrcSpan }+   | RightParenToken { token_span :: !SrcSpan }+   | CondcommentEndToken { token_span :: !SrcSpan }++   -- Special cases+   | EOFToken { token_span :: !SrcSpan }                          -- ^ End of file +   deriving (Eq,Ord,Show,Typeable,Data)++instance Span Token where+  getSpan = token_span +   +-- | Produce a string from a token containing detailed information. Mainly intended for debugging. +debugTokenString :: Token -> String+debugTokenString token = +  "blah"+  {-+   render (text (show $ toConstr token) <+> pretty (token_span token) <+>+          if hasLiteral token then text (token_literal token) else empty)+   -}++{-+-- | Classification of tokens+data TokenClass+   = Comment+   | Number+   | Identifier+   | Punctuation+   | Bracket+   | Layout +   | Keyword+   | String+   | Operator+   | Assignment+   deriving (Show, Eq, Ord)+-}++-- EOF