Agda 2.4.2.4 → 2.4.2.5
raw patch · 67 files changed
+3764/−2964 lines, 67 filesdep +voiddep ~Agdadep ~haskell-src-extsdep ~transformers-compatPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: void
Dependency ranges changed: Agda, haskell-src-exts, transformers-compat, zlib
API changes (from Hackage documentation)
- Agda.Interaction.MakeCase: ExtendedLambda :: Int -> Int -> CaseContext
- Agda.Interaction.MakeCase: FunctionDef :: CaseContext
- Agda.Interaction.MakeCase: data CaseContext
- Agda.Interaction.MakeCase: instance GHC.Classes.Eq Agda.Interaction.MakeCase.CaseContext
- Agda.Syntax.Concrete.Definitions: WrongContentPostulateBlock :: Range -> DeclarationException
- Agda.Syntax.Internal: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Internal.MetaId
- Agda.Syntax.Internal: instance GHC.Classes.Eq Agda.Syntax.Internal.MetaId
- Agda.Syntax.Internal: instance GHC.Classes.Ord Agda.Syntax.Internal.MetaId
- Agda.Syntax.Internal: instance GHC.Enum.Enum Agda.Syntax.Internal.MetaId
- Agda.Syntax.Internal: instance GHC.Num.Num Agda.Syntax.Internal.MetaId
- Agda.Syntax.Internal: instance GHC.Real.Integral Agda.Syntax.Internal.MetaId
- Agda.Syntax.Internal: instance GHC.Real.Real Agda.Syntax.Internal.MetaId
- Agda.Syntax.Internal: instance GHC.Show.Show Agda.Syntax.Internal.MetaId
- Agda.Syntax.Internal.Defs: instance Agda.Syntax.Internal.Defs.GetDefs Agda.Syntax.Internal.MetaId
- Agda.Syntax.Translation.InternalToAbstract: instance Agda.Syntax.Translation.InternalToAbstract.Reify Agda.Syntax.Internal.MetaId Agda.Syntax.Abstract.Expr
- Agda.TypeChecking.CompiledClause.Compile: type Cl = ([Arg Pattern], ClauseBody)
- Agda.TypeChecking.Monad.Base: [secFreeVars] :: Section -> Nat
- Agda.TypeChecking.Monad.Base: [secTelescope] :: Section -> Telescope
- Agda.TypeChecking.Monad.Base: [sigDefinitions] :: Signature -> Definitions
- Agda.TypeChecking.Monad.Base: [sigRewriteRules] :: Signature -> RewriteRuleMap
- Agda.TypeChecking.Monad.Base: [sigSections] :: Signature -> Sections
- Agda.TypeChecking.Monad.Base: instance Agda.TypeChecking.Monad.Base.HasFresh Agda.Syntax.Internal.MetaId
- Agda.TypeChecking.Monad.MetaVars: instance Agda.TypeChecking.Monad.MetaVars.IsInstantiatedMeta Agda.Syntax.Internal.MetaId
- Agda.TypeChecking.Monad.MetaVars: instance Agda.TypeChecking.Monad.MetaVars.UnFreezeMeta Agda.Syntax.Internal.MetaId
- Agda.TypeChecking.Monad.Signature: getModuleFreeVars :: ModuleName -> TCM Nat
- Agda.TypeChecking.Monad.Signature: getSecFreeVars :: ModuleName -> TCM Nat
- Agda.TypeChecking.Monad.State: mapRewriteRules :: (RewriteRuleMap -> RewriteRuleMap) -> Signature -> Signature
- Agda.TypeChecking.Pretty: instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Internal.MetaId
- Agda.TypeChecking.Serialise: instance (Agda.TypeChecking.Serialise.EmbPrj a, Agda.TypeChecking.Serialise.EmbPrj b) => Agda.TypeChecking.Serialise.EmbPrj (a, b)
- Agda.TypeChecking.Serialise: instance (Agda.TypeChecking.Serialise.EmbPrj a, Agda.TypeChecking.Serialise.EmbPrj b, Agda.TypeChecking.Serialise.EmbPrj c) => Agda.TypeChecking.Serialise.EmbPrj (a, b, c)
- Agda.TypeChecking.Serialise: instance (Agda.TypeChecking.Serialise.EmbPrj a, Agda.TypeChecking.Serialise.EmbPrj c) => Agda.TypeChecking.Serialise.EmbPrj (Agda.Syntax.Common.Arg c a)
- Agda.TypeChecking.Serialise: instance (Agda.TypeChecking.Serialise.EmbPrj a, Agda.TypeChecking.Serialise.EmbPrj c) => Agda.TypeChecking.Serialise.EmbPrj (Agda.Syntax.Common.Dom c a)
- Agda.TypeChecking.Serialise: instance (Agda.TypeChecking.Serialise.EmbPrj s, Agda.TypeChecking.Serialise.EmbPrj t) => Agda.TypeChecking.Serialise.EmbPrj (Agda.Syntax.Common.Named s t)
- Agda.TypeChecking.Serialise: instance (GHC.Classes.Eq k, Data.Hashable.Class.Hashable k, Agda.TypeChecking.Serialise.EmbPrj k, Agda.TypeChecking.Serialise.EmbPrj v) => Agda.TypeChecking.Serialise.EmbPrj (Data.HashMap.Base.HashMap k v)
- Agda.TypeChecking.Serialise: instance (GHC.Classes.Ord a, Agda.TypeChecking.Serialise.EmbPrj a) => Agda.TypeChecking.Serialise.EmbPrj (Data.Set.Base.Set a)
- Agda.TypeChecking.Serialise: instance (GHC.Classes.Ord a, Agda.TypeChecking.Serialise.EmbPrj a, Agda.TypeChecking.Serialise.EmbPrj b) => Agda.TypeChecking.Serialise.EmbPrj (Data.Map.Base.Map a b)
- Agda.TypeChecking.Serialise: instance (GHC.Classes.Ord a, GHC.Classes.Ord b, Agda.TypeChecking.Serialise.EmbPrj a, Agda.TypeChecking.Serialise.EmbPrj b) => Agda.TypeChecking.Serialise.EmbPrj (Agda.Utils.BiMap.BiMap a b)
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj ()
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Compiler.Epic.Interface.EInterface
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Compiler.Epic.Interface.Forced
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Compiler.Epic.Interface.InjectiveFun
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Compiler.Epic.Interface.Relevance
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Compiler.Epic.Interface.Tag
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Compiler.JS.Syntax.Exp
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Compiler.JS.Syntax.GlobalId
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Compiler.JS.Syntax.LocalId
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Compiler.JS.Syntax.MemberId
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Interaction.Highlighting.Precise.Aspect
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Interaction.Highlighting.Precise.Aspects
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Interaction.Highlighting.Precise.CompressedFile
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Interaction.Highlighting.Precise.NameKind
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Interaction.Highlighting.Precise.OtherAspect
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Interaction.Highlighting.Range.Range
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Abstract.Expr
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Abstract.LamBinding
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Abstract.LetBinding
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Abstract.Name.AmbiguousQName
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Abstract.Name.ModuleName
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Abstract.Name.Name
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Abstract.Name.QName
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Abstract.Pattern
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Abstract.TypedBinding
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Abstract.TypedBindings
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Common.Access
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Common.ConPOrigin
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Common.Delayed
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Common.Hiding
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Common.Induction
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Common.IsAbstract
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Common.NameId
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Common.Relevance
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Concrete.Name.Name
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Concrete.Name.NamePart
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Concrete.Name.QName
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Concrete.Name.TopLevelModuleName
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Fixity.Associativity
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Fixity.Fixity
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Fixity.Fixity'
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Fixity.Precedence
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Info.ConPatInfo
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Internal.Clause
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Internal.ClauseBody
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Internal.ConHead
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Internal.ConPatternInfo
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Internal.Level
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Internal.LevelAtom
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Internal.Pattern
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Internal.PlusLevel
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Internal.Sort
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Internal.Telescope
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Internal.Term
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Literal.Literal
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Notation.GenPart
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Position.Interval
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Position.Position
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Position.Range
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Scope.Base.AbstractModule
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Scope.Base.AbstractName
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Scope.Base.KindOfName
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Scope.Base.LocalVar
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Scope.Base.NameSpace
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Scope.Base.NameSpaceId
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Scope.Base.Scope
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Scope.Base.ScopeInfo
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Syntax.Scope.Base.WhyInScope
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.TypeChecking.CompiledClause.CompiledClauses
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.TypeChecking.Monad.Base.CompiledRepresentation
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.TypeChecking.Monad.Base.CtxId
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.TypeChecking.Monad.Base.Definition
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.TypeChecking.Monad.Base.Defn
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.TypeChecking.Monad.Base.DisplayForm
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.TypeChecking.Monad.Base.DisplayTerm
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.TypeChecking.Monad.Base.FunctionInverse
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.TypeChecking.Monad.Base.HaskellExport
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.TypeChecking.Monad.Base.HaskellRepresentation
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.TypeChecking.Monad.Base.Interface
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.TypeChecking.Monad.Base.MutualId
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.TypeChecking.Monad.Base.NLPat
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.TypeChecking.Monad.Base.Polarity
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.TypeChecking.Monad.Base.Projection
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.TypeChecking.Monad.Base.RewriteRule
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.TypeChecking.Monad.Base.Section
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.TypeChecking.Monad.Base.Signature
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.TypeChecking.Monad.Base.TermHead
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.TypeChecking.Positivity.Occurrence.Occurrence
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Utils.FileName.AbsolutePath
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj Agda.Utils.Permutation.Permutation
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj GHC.Base.String
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj GHC.Int.Int32
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj GHC.Integer.Type.Integer
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj GHC.Types.Bool
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj GHC.Types.Char
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj GHC.Types.Double
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj GHC.Types.Int
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj GHC.Word.Word64
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj a => Agda.TypeChecking.Serialise.EmbPrj (Agda.Syntax.Common.Ranged a)
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj a => Agda.TypeChecking.Serialise.EmbPrj (Agda.Syntax.Common.WithHiding a)
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj a => Agda.TypeChecking.Serialise.EmbPrj (Agda.Syntax.Internal.Abs a)
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj a => Agda.TypeChecking.Serialise.EmbPrj (Agda.Syntax.Internal.Elim' a)
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj a => Agda.TypeChecking.Serialise.EmbPrj (Agda.Syntax.Internal.Type' a)
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj a => Agda.TypeChecking.Serialise.EmbPrj (Agda.TypeChecking.CompiledClause.Case a)
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj a => Agda.TypeChecking.Serialise.EmbPrj (Agda.TypeChecking.CompiledClause.WithArity a)
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj a => Agda.TypeChecking.Serialise.EmbPrj (Agda.TypeChecking.Monad.Base.Builtin a)
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj a => Agda.TypeChecking.Serialise.EmbPrj (Agda.TypeChecking.Monad.Base.Open a)
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj a => Agda.TypeChecking.Serialise.EmbPrj (Agda.Utils.Permutation.Drop a)
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj a => Agda.TypeChecking.Serialise.EmbPrj (GHC.Base.Maybe a)
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj a => Agda.TypeChecking.Serialise.EmbPrj [a]
- Agda.TypeChecking.Serialise: instance Agda.TypeChecking.Serialise.EmbPrj c => Agda.TypeChecking.Serialise.EmbPrj (Agda.Syntax.Common.ArgInfo c)
+ Agda.Compiler.MAlonzo.Misc: emptyBinds :: Binds
+ Agda.Interaction.MakeCase: type CaseContext = Maybe ExtLamInfo
+ Agda.Syntax.Abstract.Name: commonParentModule :: ModuleName -> ModuleName -> ModuleName
+ Agda.Syntax.Common: MetaId :: Nat -> MetaId
+ Agda.Syntax.Common: [metaId] :: MetaId -> Nat
+ Agda.Syntax.Common: instance Agda.Utils.Pretty.Pretty Agda.Syntax.Common.MetaId
+ Agda.Syntax.Common: instance GHC.Classes.Eq Agda.Syntax.Common.MetaId
+ Agda.Syntax.Common: instance GHC.Classes.Ord Agda.Syntax.Common.MetaId
+ Agda.Syntax.Common: instance GHC.Enum.Enum Agda.Syntax.Common.MetaId
+ Agda.Syntax.Common: instance GHC.Num.Num Agda.Syntax.Common.MetaId
+ Agda.Syntax.Common: instance GHC.Real.Integral Agda.Syntax.Common.MetaId
+ Agda.Syntax.Common: instance GHC.Real.Real Agda.Syntax.Common.MetaId
+ Agda.Syntax.Common: instance GHC.Show.Show Agda.Syntax.Common.MetaId
+ Agda.Syntax.Common: newtype MetaId
+ Agda.Syntax.Concrete.Definitions: WrongContentBlock :: KindOfBlock -> Range -> DeclarationException
+ Agda.Syntax.Concrete.Definitions: instance GHC.Classes.Eq Agda.Syntax.Concrete.Definitions.KindOfBlock
+ Agda.Syntax.Concrete.Definitions: instance GHC.Classes.Ord Agda.Syntax.Concrete.Definitions.KindOfBlock
+ Agda.Syntax.Concrete.Definitions: instance GHC.Show.Show Agda.Syntax.Concrete.Definitions.KindOfBlock
+ Agda.Syntax.Concrete.Definitions: niceHasAbstract :: NiceDeclaration -> Maybe IsAbstract
+ Agda.Syntax.Internal: instance Agda.Utils.Pretty.Pretty a => Agda.Utils.Pretty.Pretty (Agda.Syntax.Internal.ClauseBodyF a)
+ Agda.Syntax.Internal: instance Agda.Utils.Pretty.Pretty a => Agda.Utils.Pretty.Pretty (Agda.Syntax.Internal.Pattern' a)
+ Agda.Syntax.Internal.Defs: instance Agda.Syntax.Internal.Defs.GetDefs Agda.Syntax.Common.MetaId
+ Agda.Syntax.Scope.Base: modifyNameSpace :: NameSpaceId -> (NameSpace -> NameSpace) -> Scope -> Scope
+ Agda.Syntax.Translation.InternalToAbstract: instance Agda.Syntax.Translation.InternalToAbstract.Reify Agda.Syntax.Common.MetaId Agda.Syntax.Abstract.Expr
+ Agda.TypeChecking.CompiledClause.Compile: Cl :: [Arg Pattern] -> ClauseBody -> Cl
+ Agda.TypeChecking.CompiledClause.Compile: [clBody] :: Cl -> ClauseBody
+ Agda.TypeChecking.CompiledClause.Compile: [clPats] :: Cl -> [Arg Pattern]
+ Agda.TypeChecking.CompiledClause.Compile: data Cl
+ Agda.TypeChecking.CompiledClause.Compile: instance Agda.Utils.Pretty.Pretty Agda.TypeChecking.CompiledClause.Compile.Cl
+ Agda.TypeChecking.CompiledClause.Compile: instance GHC.Show.Show Agda.TypeChecking.CompiledClause.Compile.Cl
+ Agda.TypeChecking.Monad.Base: ExtLamInfo :: Int -> Int -> ExtLamInfo
+ Agda.TypeChecking.Monad.Base: [_secTelescope] :: Section -> Telescope
+ Agda.TypeChecking.Monad.Base: [_sigDefinitions] :: Signature -> Definitions
+ Agda.TypeChecking.Monad.Base: [_sigRewriteRules] :: Signature -> RewriteRuleMap
+ Agda.TypeChecking.Monad.Base: [_sigSections] :: Signature -> Sections
+ Agda.TypeChecking.Monad.Base: [extLamNumHidden] :: ExtLamInfo -> Int
+ Agda.TypeChecking.Monad.Base: [extLamNumNonHid] :: ExtLamInfo -> Int
+ Agda.TypeChecking.Monad.Base: data ExtLamInfo
+ Agda.TypeChecking.Monad.Base: instance Agda.Syntax.Position.KillRange Agda.TypeChecking.Monad.Base.ExtLamInfo
+ Agda.TypeChecking.Monad.Base: instance Agda.TypeChecking.Monad.Base.HasFresh Agda.Syntax.Common.MetaId
+ Agda.TypeChecking.Monad.Base: instance GHC.Classes.Eq Agda.TypeChecking.Monad.Base.ExtLamInfo
+ Agda.TypeChecking.Monad.Base: instance GHC.Classes.Ord Agda.TypeChecking.Monad.Base.ExtLamInfo
+ Agda.TypeChecking.Monad.Base: instance GHC.Show.Show Agda.TypeChecking.Monad.Base.ExtLamInfo
+ Agda.TypeChecking.Monad.Base: secTelescope :: Lens' Telescope Section
+ Agda.TypeChecking.Monad.Base: sigDefinitions :: Lens' Definitions Signature
+ Agda.TypeChecking.Monad.Base: sigRewriteRules :: Lens' RewriteRuleMap Signature
+ Agda.TypeChecking.Monad.Base: sigSections :: Lens' Sections Signature
+ Agda.TypeChecking.Monad.MetaVars: instance Agda.TypeChecking.Monad.MetaVars.IsInstantiatedMeta Agda.Syntax.Common.MetaId
+ Agda.TypeChecking.Monad.MetaVars: instance Agda.TypeChecking.Monad.MetaVars.UnFreezeMeta Agda.Syntax.Common.MetaId
+ Agda.TypeChecking.Monad.Signature: applySection' :: ModuleName -> Telescope -> ModuleName -> Args -> Ren QName -> Ren ModuleName -> TCM ()
+ Agda.TypeChecking.Monad.Signature: getCurrentModuleFreeVars :: TCM Nat
+ Agda.TypeChecking.Pretty: instance Agda.TypeChecking.Pretty.PrettyTCM Agda.Syntax.Common.MetaId
+ Agda.TypeChecking.Rules.Def: checkRHS :: LHSInfo -> QName -> [NamedArg Pattern] -> Type -> LHSResult -> RHS -> TCM (ClauseBody, WithFunctionProblem)
+ Agda.TypeChecking.Rules.Def: mkBody :: Permutation -> Term -> ClauseBody
+ Agda.TypeChecking.Serialise.Base: Dict :: !(HashTable Node Int32) -> !(HashTable String Int32) -> !(HashTable Integer Int32) -> !(HashTable Double Int32) -> !(HashTable (Ptr Term) Int32) -> !(HashTable NameId Int32) -> !(HashTable QNameId Int32) -> !(IORef FreshAndReuse) -> !(IORef FreshAndReuse) -> !(IORef FreshAndReuse) -> !(IORef FreshAndReuse) -> !(IORef FreshAndReuse) -> !(IORef FreshAndReuse) -> !(IORef FreshAndReuse) -> !(HashTable String Int) -> Bool -> !(HashTable AbsolutePath Int32) -> Dict
+ Agda.TypeChecking.Serialise.Base: FreshAndReuse :: !Int32 -> !Int32 -> FreshAndReuse
+ Agda.TypeChecking.Serialise.Base: St :: !(Array Int32 Node) -> !(Array Int32 String) -> !(Array Int32 Integer) -> !(Array Int32 Double) -> !Memo -> !ModuleToSource -> [AbsolutePath] -> St
+ Agda.TypeChecking.Serialise.Base: U :: !a -> U
+ Agda.TypeChecking.Serialise.Base: [absPathD] :: Dict -> !(HashTable AbsolutePath Int32)
+ Agda.TypeChecking.Serialise.Base: [collectStats] :: Dict -> Bool
+ Agda.TypeChecking.Serialise.Base: [doubleC] :: Dict -> !(IORef FreshAndReuse)
+ Agda.TypeChecking.Serialise.Base: [doubleD] :: Dict -> !(HashTable Double Int32)
+ Agda.TypeChecking.Serialise.Base: [doubleE] :: St -> !(Array Int32 Double)
+ Agda.TypeChecking.Serialise.Base: [farFresh] :: FreshAndReuse -> !Int32
+ Agda.TypeChecking.Serialise.Base: [farReuse] :: FreshAndReuse -> !Int32
+ Agda.TypeChecking.Serialise.Base: [includes] :: St -> [AbsolutePath]
+ Agda.TypeChecking.Serialise.Base: [integerC] :: Dict -> !(IORef FreshAndReuse)
+ Agda.TypeChecking.Serialise.Base: [integerD] :: Dict -> !(HashTable Integer Int32)
+ Agda.TypeChecking.Serialise.Base: [integerE] :: St -> !(Array Int32 Integer)
+ Agda.TypeChecking.Serialise.Base: [modFile] :: St -> !ModuleToSource
+ Agda.TypeChecking.Serialise.Base: [nameC] :: Dict -> !(IORef FreshAndReuse)
+ Agda.TypeChecking.Serialise.Base: [nameD] :: Dict -> !(HashTable NameId Int32)
+ Agda.TypeChecking.Serialise.Base: [nodeC] :: Dict -> !(IORef FreshAndReuse)
+ Agda.TypeChecking.Serialise.Base: [nodeD] :: Dict -> !(HashTable Node Int32)
+ Agda.TypeChecking.Serialise.Base: [nodeE] :: St -> !(Array Int32 Node)
+ Agda.TypeChecking.Serialise.Base: [nodeMemo] :: St -> !Memo
+ Agda.TypeChecking.Serialise.Base: [qnameC] :: Dict -> !(IORef FreshAndReuse)
+ Agda.TypeChecking.Serialise.Base: [qnameD] :: Dict -> !(HashTable QNameId Int32)
+ Agda.TypeChecking.Serialise.Base: [stats] :: Dict -> !(HashTable String Int)
+ Agda.TypeChecking.Serialise.Base: [stringC] :: Dict -> !(IORef FreshAndReuse)
+ Agda.TypeChecking.Serialise.Base: [stringD] :: Dict -> !(HashTable String Int32)
+ Agda.TypeChecking.Serialise.Base: [stringE] :: St -> !(Array Int32 String)
+ Agda.TypeChecking.Serialise.Base: [termC] :: Dict -> !(IORef FreshAndReuse)
+ Agda.TypeChecking.Serialise.Base: [termD] :: Dict -> !(HashTable (Ptr Term) Int32)
+ Agda.TypeChecking.Serialise.Base: class Typeable a => EmbPrj a where icode a = do { tickICode a; icod_ a }
+ Agda.TypeChecking.Serialise.Base: data Dict
+ Agda.TypeChecking.Serialise.Base: data FreshAndReuse
+ Agda.TypeChecking.Serialise.Base: data St
+ Agda.TypeChecking.Serialise.Base: data U
+ Agda.TypeChecking.Serialise.Base: emptyDict :: Bool -> IO Dict
+ Agda.TypeChecking.Serialise.Base: farEmpty :: FreshAndReuse
+ Agda.TypeChecking.Serialise.Base: icod_ :: EmbPrj a => a -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode :: EmbPrj a => a -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode0 :: Int32 -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode0' :: S Int32
+ Agda.TypeChecking.Serialise.Base: icode1 :: EmbPrj a => Int32 -> a -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode1' :: EmbPrj a => a -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode10 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j) => Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode10' :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j) => a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode11 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k) => Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode11' :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k) => a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode12 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l) => Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode12' :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l) => a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode13 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l, EmbPrj m) => Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode13' :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l, EmbPrj m) => a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode14 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l, EmbPrj m, EmbPrj n) => Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> n -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode14' :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l, EmbPrj m, EmbPrj n) => a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> n -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode2 :: (EmbPrj a, EmbPrj b) => Int32 -> a -> b -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode2' :: (EmbPrj a, EmbPrj b) => a -> b -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode3 :: (EmbPrj a, EmbPrj b, EmbPrj c) => Int32 -> a -> b -> c -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode3' :: (EmbPrj a, EmbPrj b, EmbPrj c) => a -> b -> c -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode4 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d) => Int32 -> a -> b -> c -> d -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode4' :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d) => a -> b -> c -> d -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode5 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e) => Int32 -> a -> b -> c -> d -> e -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode5' :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e) => a -> b -> c -> d -> e -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode6 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f) => Int32 -> a -> b -> c -> d -> e -> f -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode6' :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f) => a -> b -> c -> d -> e -> f -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode7 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g) => Int32 -> a -> b -> c -> d -> e -> f -> g -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode7' :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g) => a -> b -> c -> d -> e -> f -> g -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode8 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h) => Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode8' :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h) => a -> b -> c -> d -> e -> f -> g -> h -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode9 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h, EmbPrj i) => Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i -> S Int32
+ Agda.TypeChecking.Serialise.Base: icode9' :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h, EmbPrj i) => a -> b -> c -> d -> e -> f -> g -> h -> i -> S Int32
+ Agda.TypeChecking.Serialise.Base: icodeDouble :: Double -> S Int32
+ Agda.TypeChecking.Serialise.Base: icodeInteger :: Integer -> S Int32
+ Agda.TypeChecking.Serialise.Base: icodeMemo :: (Eq a, Ord a, Hashable a) => (Dict -> HashTable a Int32) -> (Dict -> IORef FreshAndReuse) -> a -> S Int32 -> S Int32
+ Agda.TypeChecking.Serialise.Base: icodeN :: Node -> S Int32
+ Agda.TypeChecking.Serialise.Base: icodeString :: String -> S Int32
+ Agda.TypeChecking.Serialise.Base: icodeX :: (Eq k, Hashable k) => (Dict -> HashTable k Int32) -> (Dict -> IORef FreshAndReuse) -> k -> S Int32
+ Agda.TypeChecking.Serialise.Base: lensFresh :: Lens' Int32 FreshAndReuse
+ Agda.TypeChecking.Serialise.Base: lensReuse :: Lens' Int32 FreshAndReuse
+ Agda.TypeChecking.Serialise.Base: malformed :: R a
+ Agda.TypeChecking.Serialise.Base: qnameId :: QName -> QNameId
+ Agda.TypeChecking.Serialise.Base: runGetState :: Get a -> ByteString -> ByteOffset -> (a, ByteString, ByteOffset)
+ Agda.TypeChecking.Serialise.Base: tickICode :: Typeable a => a -> S ()
+ Agda.TypeChecking.Serialise.Base: type HashTable k v = BasicHashTable k v
+ Agda.TypeChecking.Serialise.Base: type Memo = HashTable (Int32, TypeRep) U
+ Agda.TypeChecking.Serialise.Base: type Node = [Int32]
+ Agda.TypeChecking.Serialise.Base: type QNameId = [NameId]
+ Agda.TypeChecking.Serialise.Base: type R a = ExceptT TypeError (StateT St IO) a
+ Agda.TypeChecking.Serialise.Base: type S a = ReaderT Dict IO a
+ Agda.TypeChecking.Serialise.Base: valu0 :: a -> R a
+ Agda.TypeChecking.Serialise.Base: valu1 :: EmbPrj a => (a -> b) -> Int32 -> R b
+ Agda.TypeChecking.Serialise.Base: valu10 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j) => (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k) -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> R k
+ Agda.TypeChecking.Serialise.Base: valu11 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k) => (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l) -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> R l
+ Agda.TypeChecking.Serialise.Base: valu12 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l) => (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m) -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> R m
+ Agda.TypeChecking.Serialise.Base: valu13 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l, EmbPrj m) => (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> n) -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> R n
+ Agda.TypeChecking.Serialise.Base: valu14 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l, EmbPrj m, EmbPrj n) => (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> n -> o) -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> R o
+ Agda.TypeChecking.Serialise.Base: valu2 :: (EmbPrj a, EmbPrj b) => (a -> b -> c) -> Int32 -> Int32 -> R c
+ Agda.TypeChecking.Serialise.Base: valu3 :: (EmbPrj a, EmbPrj b, EmbPrj c) => (a -> b -> c -> d) -> Int32 -> Int32 -> Int32 -> R d
+ Agda.TypeChecking.Serialise.Base: valu4 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d) => (a -> b -> c -> d -> e) -> Int32 -> Int32 -> Int32 -> Int32 -> R e
+ Agda.TypeChecking.Serialise.Base: valu5 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e) => (a -> b -> c -> d -> e -> f) -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> R f
+ Agda.TypeChecking.Serialise.Base: valu6 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f) => (a -> b -> c -> d -> e -> f -> g) -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> R g
+ Agda.TypeChecking.Serialise.Base: valu7 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g) => (a -> b -> c -> d -> e -> f -> g -> h) -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> R h
+ Agda.TypeChecking.Serialise.Base: valu8 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h) => (a -> b -> c -> d -> e -> f -> g -> h -> i) -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> R i
+ Agda.TypeChecking.Serialise.Base: valu9 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f, EmbPrj g, EmbPrj h, EmbPrj i) => (a -> b -> c -> d -> e -> f -> g -> h -> i -> j) -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> R j
+ Agda.TypeChecking.Serialise.Base: value :: EmbPrj a => Int32 -> R a
+ Agda.TypeChecking.Serialise.Base: vcase :: EmbPrj a => (Node -> R a) -> Int32 -> R a
+ Agda.TypeChecking.Serialise.Instances: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.Interface
+ Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.Expr
+ Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.LamBinding
+ Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.LetBinding
+ Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.Pattern
+ Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.TypedBinding
+ Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.TypedBindings
+ Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Access
+ Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Fixity.Precedence
+ Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Info.ConPatInfo
+ Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Scope.Base.AbstractModule
+ Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Scope.Base.AbstractName
+ Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Scope.Base.KindOfName
+ Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Scope.Base.LocalVar
+ Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Scope.Base.NameSpace
+ Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Scope.Base.NameSpaceId
+ Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Scope.Base.Scope
+ Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Scope.Base.ScopeInfo
+ Agda.TypeChecking.Serialise.Instances.Abstract: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Scope.Base.WhyInScope
+ Agda.TypeChecking.Serialise.Instances.Common: instance (Agda.TypeChecking.Serialise.Base.EmbPrj a, Agda.TypeChecking.Serialise.Base.EmbPrj b) => Agda.TypeChecking.Serialise.Base.EmbPrj (a, b)
+ Agda.TypeChecking.Serialise.Instances.Common: instance (Agda.TypeChecking.Serialise.Base.EmbPrj a, Agda.TypeChecking.Serialise.Base.EmbPrj b, Agda.TypeChecking.Serialise.Base.EmbPrj c) => Agda.TypeChecking.Serialise.Base.EmbPrj (a, b, c)
+ Agda.TypeChecking.Serialise.Instances.Common: instance (Agda.TypeChecking.Serialise.Base.EmbPrj a, Agda.TypeChecking.Serialise.Base.EmbPrj c) => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Common.Arg c a)
+ Agda.TypeChecking.Serialise.Instances.Common: instance (Agda.TypeChecking.Serialise.Base.EmbPrj a, Agda.TypeChecking.Serialise.Base.EmbPrj c) => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Common.Dom c a)
+ Agda.TypeChecking.Serialise.Instances.Common: instance (Agda.TypeChecking.Serialise.Base.EmbPrj s, Agda.TypeChecking.Serialise.Base.EmbPrj t) => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Common.Named s t)
+ Agda.TypeChecking.Serialise.Instances.Common: instance (GHC.Classes.Eq k, Data.Hashable.Class.Hashable k, Agda.TypeChecking.Serialise.Base.EmbPrj k, Agda.TypeChecking.Serialise.Base.EmbPrj v) => Agda.TypeChecking.Serialise.Base.EmbPrj (Data.HashMap.Base.HashMap k v)
+ Agda.TypeChecking.Serialise.Instances.Common: instance (GHC.Classes.Ord a, Agda.TypeChecking.Serialise.Base.EmbPrj a) => Agda.TypeChecking.Serialise.Base.EmbPrj (Data.Set.Base.Set a)
+ Agda.TypeChecking.Serialise.Instances.Common: instance (GHC.Classes.Ord a, Agda.TypeChecking.Serialise.Base.EmbPrj a, Agda.TypeChecking.Serialise.Base.EmbPrj b) => Agda.TypeChecking.Serialise.Base.EmbPrj (Data.Map.Base.Map a b)
+ Agda.TypeChecking.Serialise.Instances.Common: instance (GHC.Classes.Ord a, GHC.Classes.Ord b, Agda.TypeChecking.Serialise.Base.EmbPrj a, Agda.TypeChecking.Serialise.Base.EmbPrj b) => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Utils.BiMap.BiMap a b)
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj ()
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.Name.AmbiguousQName
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.Name.ModuleName
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.Name.Name
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Abstract.Name.QName
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.ConPOrigin
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Delayed
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Hiding
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Induction
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.IsAbstract
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.NameId
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Common.Relevance
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Concrete.Name.Name
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Concrete.Name.NamePart
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Concrete.Name.QName
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Concrete.Name.TopLevelModuleName
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Fixity.Associativity
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Fixity.Fixity
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Fixity.Fixity'
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Literal.Literal
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Notation.GenPart
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Position.Interval
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Position.Position
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Position.Range
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Utils.FileName.AbsolutePath
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj GHC.Base.String
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj GHC.Int.Int32
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj GHC.Integer.Type.Integer
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj GHC.Types.Bool
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj GHC.Types.Char
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj GHC.Types.Double
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj GHC.Types.Int
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj GHC.Word.Word64
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Common.Ranged a)
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Common.WithHiding a)
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (GHC.Base.Maybe a)
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj [a]
+ Agda.TypeChecking.Serialise.Instances.Common: instance Agda.TypeChecking.Serialise.Base.EmbPrj c => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Common.ArgInfo c)
+ Agda.TypeChecking.Serialise.Instances.Compilers: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Compiler.Epic.Interface.EInterface
+ Agda.TypeChecking.Serialise.Instances.Compilers: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Compiler.Epic.Interface.Forced
+ Agda.TypeChecking.Serialise.Instances.Compilers: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Compiler.Epic.Interface.InjectiveFun
+ Agda.TypeChecking.Serialise.Instances.Compilers: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Compiler.Epic.Interface.Relevance
+ Agda.TypeChecking.Serialise.Instances.Compilers: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Compiler.Epic.Interface.Tag
+ Agda.TypeChecking.Serialise.Instances.Compilers: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Compiler.JS.Syntax.Exp
+ Agda.TypeChecking.Serialise.Instances.Compilers: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Compiler.JS.Syntax.GlobalId
+ Agda.TypeChecking.Serialise.Instances.Compilers: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Compiler.JS.Syntax.LocalId
+ Agda.TypeChecking.Serialise.Instances.Compilers: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Compiler.JS.Syntax.MemberId
+ Agda.TypeChecking.Serialise.Instances.Compilers: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.CompiledRepresentation
+ Agda.TypeChecking.Serialise.Instances.Compilers: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.HaskellExport
+ Agda.TypeChecking.Serialise.Instances.Compilers: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.HaskellRepresentation
+ Agda.TypeChecking.Serialise.Instances.Highlighting: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Interaction.Highlighting.Precise.Aspect
+ Agda.TypeChecking.Serialise.Instances.Highlighting: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Interaction.Highlighting.Precise.Aspects
+ Agda.TypeChecking.Serialise.Instances.Highlighting: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Interaction.Highlighting.Precise.CompressedFile
+ Agda.TypeChecking.Serialise.Instances.Highlighting: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Interaction.Highlighting.Precise.NameKind
+ Agda.TypeChecking.Serialise.Instances.Highlighting: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Interaction.Highlighting.Precise.OtherAspect
+ Agda.TypeChecking.Serialise.Instances.Highlighting: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Interaction.Highlighting.Range.Range
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.Clause
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.ConHead
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.ConPatternInfo
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.Level
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.LevelAtom
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.PlusLevel
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.Sort
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Syntax.Internal.Term
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.CompiledClause.CompiledClauses
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.CtxId
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.Definition
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.Defn
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.DisplayForm
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.DisplayTerm
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.ExtLamInfo
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.MutualId
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.NLPat
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.Polarity
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.Projection
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.RewriteRule
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.Section
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.Signature
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Monad.Base.TermHead
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.TypeChecking.Positivity.Occurrence.Occurrence
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj Agda.Utils.Permutation.Permutation
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Internal.Abs a)
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Internal.ClauseBodyF a)
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Internal.Elim' a)
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Internal.Pattern' a)
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Internal.Tele a)
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Syntax.Internal.Type' a)
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.TypeChecking.CompiledClause.Case a)
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.TypeChecking.CompiledClause.WithArity a)
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.TypeChecking.Monad.Base.Builtin a)
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.TypeChecking.Monad.Base.FunctionInverse' a)
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.TypeChecking.Monad.Base.Open a)
+ Agda.TypeChecking.Serialise.Instances.Internal: instance Agda.TypeChecking.Serialise.Base.EmbPrj a => Agda.TypeChecking.Serialise.Base.EmbPrj (Agda.Utils.Permutation.Drop a)
+ Agda.TypeChecking.Substitute: instance GHC.Classes.Eq Agda.TypeChecking.Monad.Base.Section
+ Agda.TypeChecking.Substitute: strengthenS :: Empty -> Int -> Substitution
+ Agda.TypeChecking.Substitute: telView'UpTo :: Int -> Type -> TelView
+ Agda.TypeChecking.With: splitTelForWith :: Telescope -> Type -> [Type] -> [Term] -> (Telescope, Telescope, Permutation, Type, [Type], [Term])
+ Agda.Utils.Pretty: prettyList :: Pretty a => [a] -> Doc
- Agda.Syntax.Info: MetaInfo :: Range -> ScopeInfo -> Maybe Nat -> String -> MetaInfo
+ Agda.Syntax.Info: MetaInfo :: Range -> ScopeInfo -> Maybe MetaId -> String -> MetaInfo
- Agda.Syntax.Info: [metaNumber] :: MetaInfo -> Maybe Nat
+ Agda.Syntax.Info: [metaNumber] :: MetaInfo -> Maybe MetaId
- Agda.TypeChecking.Monad.Base: Function :: [Clause] -> Maybe CompiledClauses -> FunctionInverse -> [QName] -> IsAbstract -> Delayed -> Maybe Projection -> Bool -> Bool -> Maybe Bool -> Maybe (Int, Int) -> Maybe QName -> Bool -> Defn
+ Agda.TypeChecking.Monad.Base: Function :: [Clause] -> Maybe CompiledClauses -> FunctionInverse -> [QName] -> IsAbstract -> Delayed -> Maybe Projection -> Bool -> Bool -> Maybe Bool -> Maybe ExtLamInfo -> Maybe QName -> Bool -> Defn
- Agda.TypeChecking.Monad.Base: Section :: Telescope -> Nat -> Section
+ Agda.TypeChecking.Monad.Base: Section :: Telescope -> Section
- Agda.TypeChecking.Monad.Base: [funExtLam] :: Defn -> Maybe (Int, Int)
+ Agda.TypeChecking.Monad.Base: [funExtLam] :: Defn -> Maybe ExtLamInfo
- Agda.TypeChecking.Monad.Signature: addSection :: ModuleName -> Nat -> TCM ()
+ Agda.TypeChecking.Monad.Signature: addSection :: ModuleName -> TCM ()
- Agda.TypeChecking.Rules.Def: checkFunDef' :: Type -> ArgInfo -> Delayed -> Maybe (Int, Int) -> Maybe QName -> DefInfo -> QName -> [Clause] -> TCM ()
+ Agda.TypeChecking.Rules.Def: checkFunDef' :: Type -> ArgInfo -> Delayed -> Maybe ExtLamInfo -> Maybe QName -> DefInfo -> QName -> [Clause] -> TCM ()
- Agda.TypeChecking.Rules.Def: checkWhere :: Nat -> [Declaration] -> TCM a -> TCM a
+ Agda.TypeChecking.Rules.Def: checkWhere :: Type -> [Declaration] -> TCM a -> TCM a
- Agda.TypeChecking.Rules.Term: checkArguments_ :: ExpandHidden -> Range -> [NamedArg Expr] -> Telescope -> TCM Args
+ Agda.TypeChecking.Rules.Term: checkArguments_ :: ExpandHidden -> Range -> [NamedArg Expr] -> Telescope -> TCM (Args, Telescope)
- Agda.TypeChecking.With: buildWithFunction :: QName -> Type -> [NamedArg Pattern] -> Permutation -> Nat -> Nat -> [SpineClause] -> TCM [SpineClause]
+ Agda.TypeChecking.With: buildWithFunction :: QName -> QName -> Type -> [NamedArg Pattern] -> Permutation -> Nat -> Nat -> [SpineClause] -> TCM [SpineClause]
- Agda.TypeChecking.With: stripWithClausePatterns :: QName -> Type -> [NamedArg Pattern] -> Permutation -> [NamedArg Pattern] -> TCM [NamedArg Pattern]
+ Agda.TypeChecking.With: stripWithClausePatterns :: QName -> QName -> Type -> [NamedArg Pattern] -> Permutation -> [NamedArg Pattern] -> TCM [NamedArg Pattern]
Files
- Agda.cabal +21/−7
- CHANGELOG +73/−2
- README.md +1/−1
- dist/build/Agda/Syntax/Parser/Lexer.hs +46/−49
- dist/build/Agda/Syntax/Parser/Parser.hs +175/−175
- src/data/agda.sty +1/−0
- src/data/emacs-mode/agda2-mode.el +2/−1
- src/full/Agda/Auto/Auto.hs +2/−2
- src/full/Agda/Auto/Convert.hs +2/−1
- src/full/Agda/Compiler/Epic/CompileState.hs +3/−3
- src/full/Agda/Compiler/Epic/Compiler.hs +3/−2
- src/full/Agda/Compiler/Epic/Forcing.hs +2/−2
- src/full/Agda/Compiler/Epic/NatDetection.hs +2/−2
- src/full/Agda/Compiler/Epic/Smashing.hs +4/−4
- src/full/Agda/Compiler/Epic/Static.hs +2/−2
- src/full/Agda/Compiler/MAlonzo/Compiler.hs +26/−18
- src/full/Agda/Compiler/MAlonzo/Misc.hs +15/−3
- src/full/Agda/Compiler/MAlonzo/Pretty.hs +3/−3
- src/full/Agda/Compiler/MAlonzo/Primitives.hs +1/−1
- src/full/Agda/Interaction/BasicOps.hs +2/−8
- src/full/Agda/Interaction/Highlighting/Generate.hs +1/−1
- src/full/Agda/Interaction/Highlighting/LaTeX.hs +1/−1
- src/full/Agda/Interaction/InteractionTop.hs +7/−7
- src/full/Agda/Interaction/MakeCase.hs +7/−10
- src/full/Agda/Syntax/Abstract/Name.hs +5/−0
- src/full/Agda/Syntax/Common.hs +13/−0
- src/full/Agda/Syntax/Concrete/Definitions.hs +62/−21
- src/full/Agda/Syntax/Concrete/Operators.hs +0/−10
- src/full/Agda/Syntax/Info.hs +1/−1
- src/full/Agda/Syntax/Internal.hs +24/−14
- src/full/Agda/Syntax/Parser/Parser.y +179/−177
- src/full/Agda/Syntax/Scope/Base.hs +5/−1
- src/full/Agda/Syntax/Translation/AbstractToConcrete.hs +1/−1
- src/full/Agda/Syntax/Translation/ConcreteToAbstract.hs +40/−11
- src/full/Agda/Syntax/Translation/InternalToAbstract.hs +3/−3
- src/full/Agda/Termination/Inlining.hs +15/−0
- src/full/Agda/TypeChecking/Abstract.hs +1/−1
- src/full/Agda/TypeChecking/CompiledClause.hs +1/−1
- src/full/Agda/TypeChecking/CompiledClause/Compile.hs +46/−43
- src/full/Agda/TypeChecking/Coverage.hs +1/−1
- src/full/Agda/TypeChecking/Errors.hs +9/−3
- src/full/Agda/TypeChecking/Monad/Base.hs +35/−14
- src/full/Agda/TypeChecking/Monad/Builtin.hs +7/−14
- src/full/Agda/TypeChecking/Monad/Signature.hs +84/−48
- src/full/Agda/TypeChecking/Monad/State.hs +4/−8
- src/full/Agda/TypeChecking/Pretty.hs +1/−1
- src/full/Agda/TypeChecking/Quote.hs +1/−1
- src/full/Agda/TypeChecking/Records.hs +3/−2
- src/full/Agda/TypeChecking/Reduce.hs +1/−1
- src/full/Agda/TypeChecking/Reduce/Monad.hs +2/−2
- src/full/Agda/TypeChecking/Rules/Data.hs +1/−1
- src/full/Agda/TypeChecking/Rules/Decl.hs +7/−4
- src/full/Agda/TypeChecking/Rules/Def.hs +251/−226
- src/full/Agda/TypeChecking/Rules/Def.hs-boot +1/−1
- src/full/Agda/TypeChecking/Rules/Record.hs +1/−1
- src/full/Agda/TypeChecking/Rules/Term.hs +39/−18
- src/full/Agda/TypeChecking/Serialise.hs +231/−1966
- src/full/Agda/TypeChecking/Serialise/Base.hs +640/−0
- src/full/Agda/TypeChecking/Serialise/Instances.hs +19/−0
- src/full/Agda/TypeChecking/Serialise/Instances/Abstract.hs +279/−0
- src/full/Agda/TypeChecking/Serialise/Instances/Common.hs +437/−0
- src/full/Agda/TypeChecking/Serialise/Instances/Compilers.hs +126/−0
- src/full/Agda/TypeChecking/Serialise/Instances/Highlighting.hs +93/−0
- src/full/Agda/TypeChecking/Serialise/Instances/Internal.hs +418/−0
- src/full/Agda/TypeChecking/Substitute.hs +25/−4
- src/full/Agda/TypeChecking/With.hs +245/−59
- src/full/Agda/Utils/Pretty.hs +5/−0
Agda.cabal view
@@ -1,5 +1,5 @@ name: Agda-version: 2.4.2.4+version: 2.4.2.5 cabal-version: >= 1.8 build-type: Custom license: OtherLicense@@ -34,7 +34,7 @@ packages. tested-with: GHC == 7.6.3 GHC == 7.8.4- GHC == 7.10.2+ GHC == 7.10.3 extra-source-files: src/full/undefined.h README.md CHANGELOG@@ -55,7 +55,7 @@ source-repository this type: git location: https://github.com/agda/agda- tag: 2.4.2.4+ tag: 2.4.2.5 flag cpphs default: True@@ -97,7 +97,7 @@ -- much slower (infinitely slower?) in some cases. , hashtables >= 1.0.1.8 && < 1.2 || >= 1.2.0.2 && < 1.3 , haskeline >= 0.7.1.3 && < 0.8- , haskell-src-exts >= 1.16.0.1 && < 1.17+ , haskell-src-exts >= 1.16.0.1 && < 1.18 -- mtl-2.1 contains a severe bug. -- -- mtl >= 2.2 && < 2.2.1 doesn't export Control.Monad.Except.@@ -119,12 +119,19 @@ , transformers-compat >= 0.3.3.3 && < 0.5 , unordered-containers >= 0.2.5.0 && < 0.3 , xhtml >= 3000.2.1 && < 3000.3- -- zlib >= 0.6.1 is broken. See Issue 1518.- , zlib >= 0.4.0.1 && < 0.6.1 if impl(ghc < 7.8) build-depends: base-orphans >= 0.3.1 && < 0.5 + if impl(ghc < 7.10)+ build-depends: void >= 0.5.4 && < 0.9++ -- zlib >= 0.6.1 is broken with GHC < 7.10.3. See Issue 1518.+ if impl(ghc < 7.10.3)+ build-depends: zlib >= 0.4.0.1 && < 0.6.1+ else+ build-depends: zlib >= 0.4.0.1 && < 0.7+ build-tools: alex >= 3.1.0 && < 3.2 , happy >= 1.19.4 && < 2@@ -325,6 +332,13 @@ Agda.TypeChecking.Rules.Record Agda.TypeChecking.Rules.Term Agda.TypeChecking.Serialise+ Agda.TypeChecking.Serialise.Base+ Agda.TypeChecking.Serialise.Instances+ Agda.TypeChecking.Serialise.Instances.Abstract+ Agda.TypeChecking.Serialise.Instances.Common+ Agda.TypeChecking.Serialise.Instances.Compilers+ Agda.TypeChecking.Serialise.Instances.Highlighting+ Agda.TypeChecking.Serialise.Instances.Internal Agda.TypeChecking.SizedTypes Agda.TypeChecking.SizedTypes.Solve Agda.TypeChecking.SizedTypes.Syntax@@ -436,7 +450,7 @@ hs-source-dirs: src/main main-is: Main.hs build-depends:- Agda == 2.4.2.4+ Agda == 2.4.2.5 -- Nothing is used from the following package, except for the -- prelude. , base >= 4.6.0.1 && < 6
CHANGELOG view
@@ -1,4 +1,77 @@ ------------------------------------------------------------------------+-- Release notes for Agda version 2.4.2.5+------------------------------------------------------------------------++Important changes since 2.4.2.4:++Installation and infrastructure+===============================++* Added support for GHC 7.10.3.++* Added `cpphs` Cabal flag++ Turn on/off this flag to choose cpphs/cpp as the C preprocessor.++ This flag is turn on by default.++ (This flag was added in Agda 2.4.2.1 but it was not documented)++Pragmas and options+===================++* Termination pragmas are not allowed inside `where` clauses+ [Issue 1137].++Type checking+=============++* `with`-abstraction is more agressive, abstracts also in types of+ variables that are used in the `with`-expressions, unless they are+ also used in the types of the `with`-expressions. [Issue 1692]++ Example:++ ```agda+ test : (f : (x : A) → a ≡ x) (b : A) → b ≡ a+ test f b with a | f b+ test f b | .b | refl = f b+ ```++ Previously, `with` would not abstract in types of variables that+ appear in the `with`-expressions, in this case, both `f` and `b`,+ leaving their types unchanged.+ Now, it tries to abstract in `f`, as only `b` appears in the types of+ the `with`-expressions which are `A` (of `a`) and `a ≡ b` (of `f b`).+ As a result, the type of `f` changes to `(x : A) → b ≡ x` and the+ type of the goal to `b ≡ b` (as previously).++ This also affects `rewrite`, which is implemented in terms of+ `with`.++ ```agda+ test : (f : (x : A) → a ≡ x) (b : A) → b ≡ a+ test f b rewrite f b = f b+ ```++ As the new `with` is not fully backwards-compatible, some parts of+ your Agda developments using `with` or `rewrite` might need+ maintenance.++Fixed issues+============++See https://github.com/agda/agda/issues+* 1407+* 1518+* 1670+* 1677+* 1698+* 1701+* 1710+* 1718++------------------------------------------------------------------------ -- Release notes for Agda version 2.4.2.4 ------------------------------------------------------------------------ @@ -6,8 +79,6 @@ Installation and infrastructure ===============================--* Added support for GHC 7.10.2. * Removed support for GHC 7.4.2.
README.md view
@@ -1,4 +1,4 @@-[](https://travis-ci.org/agda/agda)+[](https://travis-ci.org/agda/agda) Agda 2 ======
dist/build/Agda/Syntax/Parser/Lexer.hs view
@@ -1,3 +1,4 @@+{-# OPTIONS_GHC -fno-warn-unused-binds -fno-warn-missing-signatures #-} {-# LANGUAGE CPP,MagicHash #-} {-# LINE 1 "src/full/Agda/Syntax/Parser/Lexer.x" #-} @@ -43,17 +44,17 @@ #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_tab_size :: Int+alex_tab_size = 8 alex_base :: AlexAddr alex_base = AlexA# "\xf7\xff\xff\xff\x6c\x00\x00\x00\xe1\x00\x00\x00\x55\x01\x00\x00\xca\x01\x00\x00\x3f\x02\x00\x00\xb5\x02\x00\x00\xab\x03\x00\x00\x88\xff\xff\xff\xd9\xff\xff\xff\x8a\x04\x00\x00\xe8\x04\x00\x00\x46\x05\x00\x00\xb6\x02\x00\x00\xa2\x05\x00\x00\x9d\x03\x00\x00\xfe\x05\x00\x00\xfd\x05\x00\x00\x7d\x06\x00\x00\xa2\xff\xff\xff\xfd\x06\x00\x00\xdc\x07\x00\x00\xdb\x07\x00\x00\x5b\x08\x00\x00\xdb\x08\x00\x00\x5b\x09\x00\x00\x3a\x0a\x00\x00\x96\x0a\x00\x00\xf2\x0a\x00\x00\xf1\x0a\x00\x00\x99\xff\xff\xff\xa6\xff\xff\xff\x8f\xff\xff\xff\x9d\xff\xff\xff\xa8\xff\xff\xff\x00\x00\x00\x00\x62\x0b\x00\x00\x00\x00\x00\x00\xd3\x0b\x00\x00\xa9\xff\xff\xff\x00\x00\x00\x00\x44\x0c\x00\x00\x00\x00\x00\x00\xb5\x0c\x00\x00\x00\x00\x00\x00\xf6\x0c\x00\x00\x00\x00\x00\x00\x37\x0d\x00\x00\x00\x00\x00\x00\x78\x0d\x00\x00\x00\x00\x00\x00\xb9\x0d\x00\x00\x98\x0e\x00\x00\x17\x0f\x00\x00\xd7\x0e\x00\x00\x00\x00\x00\x00\xd7\x0f\x00\x00\x97\x0f\x00\x00\x00\x00\x00\x00\x97\x10\x00\x00\x57\x10\x00\x00\x00\x00\x00\x00\x57\x11\x00\x00\x04\x00\x00\x00\xcd\x11\x00\x00\x2f\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x12\x00\x00\xb9\x13\x00\x00\xaf\x14\x00\x00\xa5\x15\x00\x00\x9b\x16\x00\x00\x91\x17\x00\x00\x87\x18\x00\x00\x7d\x19\x00\x00\x73\x1a\x00\x00\x69\x1b\x00\x00\x5f\x1c\x00\x00\x55\x1d\x00\x00\x4b\x1e\x00\x00\x41\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x20\x00\x00\x2f\x21\x00\x00\x26\x22\x00\x00\x1d\x23\x00\x00\x14\x24\x00\x00\x0b\x25\x00\x00\x02\x26\x00\x00\xf9\x26\x00\x00\xf0\x27\x00\x00\xe7\x28\x00\x00\xde\x29\x00\x00\xd5\x2a\x00\x00\xcc\x2b\x00\x00\xc3\x2c\x00\x00\xba\x2d\x00\x00\xb1\x2e\x00\x00\xa8\x2f\x00\x00\x9f\x30\x00\x00\x96\x31\x00\x00\x8d\x32\x00\x00\x84\x33\x00\x00\x7b\x34\x00\x00\x72\x35\x00\x00\x69\x36\x00\x00\x60\x37\x00\x00\x57\x38\x00\x00\x4e\x39\x00\x00\x45\x3a\x00\x00\x3c\x3b\x00\x00\x33\x3c\x00\x00\x2a\x3d\x00\x00\x21\x3e\x00\x00\x18\x3f\x00\x00\x0f\x40\x00\x00\x06\x41\x00\x00\xfd\x41\x00\x00\xf4\x42\x00\x00\xeb\x43\x00\x00\xe2\x44\x00\x00\xd9\x45\x00\x00\xd0\x46\x00\x00\xc7\x47\x00\x00\xbe\x48\x00\x00\xb5\x49\x00\x00\xac\x4a\x00\x00\xa3\x4b\x00\x00\x9a\x4c\x00\x00\x91\x4d\x00\x00\x88\x4e\x00\x00\x7f\x4f\x00\x00\x76\x50\x00\x00\x6d\x51\x00\x00\x64\x52\x00\x00\x5b\x53\x00\x00\x52\x54\x00\x00\x49\x55\x00\x00\x40\x56\x00\x00\x37\x57\x00\x00\x2e\x58\x00\x00\x25\x59\x00\x00\x1c\x5a\x00\x00\x13\x5b\x00\x00\x0a\x5c\x00\x00\x01\x5d\x00\x00\xf8\x5d\x00\x00\xef\x5e\x00\x00\xe6\x5f\x00\x00\xdd\x60\x00\x00\xd4\x61\x00\x00\xcb\x62\x00\x00\xc2\x63\x00\x00\xb9\x64\x00\x00\xb0\x65\x00\x00\xa7\x66\x00\x00\x9e\x67\x00\x00\x95\x68\x00\x00\x8c\x69\x00\x00\x83\x6a\x00\x00\x7a\x6b\x00\x00\x71\x6c\x00\x00\x68\x6d\x00\x00\x5f\x6e\x00\x00\x56\x6f\x00\x00\x4d\x70\x00\x00\x44\x71\x00\x00\x3b\x72\x00\x00\x32\x73\x00\x00\x29\x74\x00\x00\x20\x75\x00\x00\x17\x76\x00\x00\x0e\x77\x00\x00\x05\x78\x00\x00\xfc\x78\x00\x00\xf3\x79\x00\x00\xea\x7a\x00\x00\xe1\x7b\x00\x00\xd8\x7c\x00\x00\xcf\x7d\x00\x00\xc6\x7e\x00\x00\xbd\x7f\x00\x00\xb4\x80\x00\x00\xab\x81\x00\x00\xa2\x82\x00\x00\x99\x83\x00\x00\x90\x84\x00\x00\x87\x85\x00\x00\x7e\x86\x00\x00\x75\x87\x00\x00\x6c\x88\x00\x00\x63\x89\x00\x00\x5a\x8a\x00\x00\x51\x8b\x00\x00\x48\x8c\x00\x00\x3f\x8d\x00\x00\x36\x8e\x00\x00\x2d\x8f\x00\x00\x24\x90\x00\x00\x1b\x91\x00\x00\x12\x92\x00\x00\x09\x93\x00\x00\x00\x94\x00\x00\xf7\x94\x00\x00\xee\x95\x00\x00\xe5\x96\x00\x00\xdc\x97\x00\x00\xd3\x98\x00\x00\xca\x99\x00\x00\xc1\x9a\x00\x00\xb8\x9b\x00\x00\xaf\x9c\x00\x00\xa6\x9d\x00\x00\x9d\x9e\x00\x00\xec\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x9f\x00\x00\x93\xa0\x00\x00\x93\xa1\x00\x00\x89\xa2\x00\x00\x89\xa3\x00\x00\x7f\xa4\x00\x00\x7f\xa5\x00\x00\x7f\xa6\x00\x00\x7f\xa7\x00\x00\x7f\xa8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x12\x00\x00\xa3\x13\x00\x00\x99\x14\x00\x00\x8f\x15\x00\x00\x7b\x17\x00\x00\x71\x18\x00\x00\x67\x19\x00\x00\x5d\x1a\x00\x00\x53\x1b\x00\x00\x35\x1e\x00\x00\x2f\x20\x00\x00\x26\x21\x00\x00\x1d\x22\x00\x00\x14\x23\x00\x00\x0b\x24\x00\x00\x02\x25\x00\x00\xf9\x25\x00\x00\xe7\x27\x00\x00\xde\x28\x00\x00\xd5\x29\x00\x00\xcc\x2a\x00\x00\xc3\x2b\x00\x00\xba\x2c\x00\x00\xb1\x2d\x00\x00\xa8\x2e\x00\x00\x9f\x2f\x00\x00\x96\x30\x00\x00\x8d\x31\x00\x00\x84\x32\x00\x00\x85\x33\x00\x00\x72\x34\x00\x00\x61\x37\x00\x00\x2b\x3d\x00\x00\xa4\x4b\x00\x00\x41\x56\x00\x00\xf9\x5d\x00\x00\xf0\x5e\x00\x00\xe7\x5f\x00\x00\x60\x6e\x00\x00\x20\x74\x00\x00\x7d\x9f\x00\x00\x73\xa2\x00\x00\x5e\xa9\x00\x00\xba\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\xff\xff\xff\xe3\xff\xff\xff\x00\x00\x00\x00\x16\xaa\x00\x00\x72\xaa\x00\x00\xe6\x42\x00\x00\xce\xaa\x00\x00\x2a\xab\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x86\xab\x00\x00\x85\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\xab\x00\x00\x3e\xac\x00\x00\x9a\xac\x00\x00\xf6\xac\x00\x00\x52\xad\x00\x00\xae\xad\x00\x00\x0a\xae\x00\x00\x66\xae\x00\x00\xc2\xae\x00\x00\x1e\xaf\x00\x00\x7a\xaf\x00\x00\xd6\xaf\x00\x00\x32\xb0\x00\x00\x8e\xb0\x00\x00\xea\xb0\x00\x00\x46\xb1\x00\x00\xa2\xb1\x00\x00\x00\xb2\x00\x00\x5e\xb2\x00\x00\xbc\xb2\x00\x00\x1a\xb3\x00\x00\x76\xb3\x00\x00\xd2\xb3\x00\x00\x2e\xb4\x00\x00\x8a\xb4\x00\x00\xe6\xb4\x00\x00\x42\xb5\x00\x00\x9e\xb5\x00\x00\xfa\xb5\x00\x00\x56\xb6\x00\x00\xb2\xb6\x00\x00\x0e\xb7\x00\x00\x6a\xb7\x00\x00\xc6\xb7\x00\x00\x22\xb8\x00\x00\x7e\xb8\x00\x00\xda\xb8\x00\x00\x36\xb9\x00\x00\x92\xb9\x00\x00\xee\xb9\x00\x00\x4a\xba\x00\x00\xa6\xba\x00\x00\x02\xbb\x00\x00\x5e\xbb\x00\x00\xba\xbb\x00\x00\x16\xbc\x00\x00\x72\xbc\x00\x00\xce\xbc\x00\x00\x2a\xbd\x00\x00\x86\xbd\x00\x00\xe2\xbd\x00\x00\x3e\xbe\x00\x00\x9a\xbe\x00\x00\xf6\xbe\x00\x00\x52\xbf\x00\x00\xae\xbf\x00\x00\x0a\xc0\x00\x00\x66\xc0\x00\x00\xc2\xc0\x00\x00\x1e\xc1\x00\x00\x7a\xc1\x00\x00\xd6\xc1\x00\x00\x32\xc2\x00\x00\x8e\xc2\x00\x00\xea\xc2\x00\x00\x46\xc3\x00\x00\xa2\xc3\x00\x00\xfe\xc3\x00\x00\x5a\xc4\x00\x00\xb6\xc4\x00\x00\x12\xc5\x00\x00\x6e\xc5\x00\x00\xca\xc5\x00\x00\x26\xc6\x00\x00\x82\xc6\x00\x00\xde\xc6\x00\x00\x3a\xc7\x00\x00\x96\xc7\x00\x00\xf2\xc7\x00\x00\x4e\xc8\x00\x00\xaa\xc8\x00\x00\x06\xc9\x00\x00\x62\xc9\x00\x00\xbe\xc9\x00\x00\x1a\xca\x00\x00\x76\xca\x00\x00\xd2\xca\x00\x00\x2e\xcb\x00\x00\x8a\xcb\x00\x00\xe6\xcb\x00\x00\x42\xcc\x00\x00\x9e\xcc\x00\x00\xfa\xcc\x00\x00\x56\xcd\x00\x00\xb2\xcd\x00\x00\x0e\xce\x00\x00\x6a\xce\x00\x00\xc6\xce\x00\x00\x22\xcf\x00\x00\x7e\xcf\x00\x00\xda\xcf\x00\x00\x36\xd0\x00\x00\x92\xd0\x00\x00\xee\xd0\x00\x00\x4a\xd1\x00\x00\xa6\xd1\x00\x00\x02\xd2\x00\x00\x5e\xd2\x00\x00\xba\xd2\x00\x00\x16\xd3\x00\x00\x72\xd3\x00\x00\xce\xd3\x00\x00\x2a\xd4\x00\x00\x86\xd4\x00\x00\xe2\xd4\x00\x00\x3e\xd5\x00\x00\x9a\xd5\x00\x00\xf6\xd5\x00\x00\x52\xd6\x00\x00\xae\xd6\x00\x00\x0a\xd7\x00\x00\x66\xd7\x00\x00\xc2\xd7\x00\x00\x1e\xd8\x00\x00\x7a\xd8\x00\x00\xd6\xd8\x00\x00\x32\xd9\x00\x00\x8e\xd9\x00\x00\xea\xd9\x00\x00\x46\xda\x00\x00\xa2\xda\x00\x00\xfe\xda\x00\x00\x5a\xdb\x00\x00\xb6\xdb\x00\x00\x12\xdc\x00\x00\x6e\xdc\x00\x00\xca\xdc\x00\x00\x26\xdd\x00\x00\x82\xdd\x00\x00\xde\xdd\x00\x00\x3a\xde\x00\x00\x96\xde\x00\x00\xf2\xde\x00\x00\x4e\xdf\x00\x00\xaa\xdf\x00\x00\x06\xe0\x00\x00\x62\xe0\x00\x00\xbe\xe0\x00\x00\x1a\xe1\x00\x00\x76\xe1\x00\x00\xd2\xe1\x00\x00\x2e\xe2\x00\x00\x8a\xe2\x00\x00\xe6\xe2\x00\x00\x42\xe3\x00\x00\x9e\xe3\x00\x00\xfa\xe3\x00\x00\x56\xe4\x00\x00\xb2\xe4\x00\x00\x0e\xe5\x00\x00\x6a\xe5\x00\x00\xc6\xe5\x00\x00\x22\xe6\x00\x00\x7e\xe6\x00\x00\xda\xe6\x00\x00\x36\xe7\x00\x00\x92\xe7\x00\x00\xee\xe7\x00\x00\x4a\xe8\x00\x00\xa6\xe8\x00\x00\x02\xe9\x00\x00\x5e\xe9\x00\x00\xba\xe9\x00\x00\x16\xea\x00\x00\x72\xea\x00\x00\xce\xea\x00\x00\x2a\xeb\x00\x00\x86\xeb\x00\x00\xe2\xeb\x00\x00\x3e\xec\x00\x00\x9a\xec\x00\x00\xf6\xec\x00\x00\x52\xed\x00\x00\xae\xed\x00\x00\x0a\xee\x00\x00\x66\xee\x00\x00\xc2\xee\x00\x00\x1e\xef\x00\x00\x7a\xef\x00\x00\xd6\xef\x00\x00\x32\xf0\x00\x00\x8e\xf0\x00\x00\xea\xf0\x00\x00\x46\xf1\x00\x00\xa2\xf1\x00\x00\xfe\xf1\x00\x00\x5a\xf2\x00\x00\xb6\xf2\x00\x00"# @@ -255,7 +256,7 @@ {-# LINE 1 "<built-in>" #-} {-# LINE 1 "<command-line>" #-} {-# LINE 9 "<command-line>" #-}-{-# LINE 1 "/usr/local/stow/ghc-7.10.2/lib/ghc-7.10.2/include/ghcversion.h" #-}+{-# LINE 1 "/usr/local/stow/ghc-7.10.3/lib/ghc-7.10.3/include/ghcversion.h" #-} @@ -330,8 +331,8 @@ narrow32Int# i where i = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`- (b2 `uncheckedShiftL#` 16#) `or#`- (b1 `uncheckedShiftL#` 8#) `or#` b0)+ (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#)))@@ -371,30 +372,30 @@ alexScanUser user input (I# (sc)) = case alex_scan_tkn user input 0# input sc AlexNone of- (AlexNone, input') ->- case alexGetByte input of- Nothing -> + (AlexNone, input') ->+ case alexGetByte input of+ Nothing -> - AlexEOF- Just _ ->+ AlexEOF+ Just _ -> - AlexError input'+ AlexError input' - (AlexLastSkip input'' len, _) ->+ (AlexLastSkip input'' len, _) -> - AlexSkip input'' len+ AlexSkip input'' len - (AlexLastAcc k input''' len, _) ->+ (AlexLastAcc k input''' len, _) -> - AlexToken input''' len k+ AlexToken input''' len k -- Push the input through the DFA, remembering the most recent accepting@@ -403,7 +404,7 @@ 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))))+ new_acc = (check_accs (alex_accept `quickIndex` (I# (s)))) in new_acc `seq` case alexGetByte input of@@ -417,34 +418,34 @@ base = alexIndexInt32OffAddr alex_base s offset = (base +# ord_c) check = alexIndexInt16OffAddr alex_check offset- + new_s = if GTE(offset,0#) && EQ(check,ord_c)- then alexIndexInt16OffAddr alex_table offset- else alexIndexInt16OffAddr alex_deflt s- in+ then alexIndexInt16OffAddr alex_table offset+ else alexIndexInt16OffAddr alex_deflt s+ in case new_s of- -1# -> (new_acc, input)- -- on an error, we want to keep the input *before* the- -- character that failed, not after.- _ -> alex_scan_tkn user orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)+ -1# -> (new_acc, input)+ -- on an error, we want to keep the input *before* the+ -- character that failed, not after.+ _ -> alex_scan_tkn user orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len) -- note that the length is increased ONLY if this is the 1st byte in a char encoding)- new_input new_s new_acc+ new_input new_s new_acc } where- check_accs (AlexAccNone) = last_acc- check_accs (AlexAcc a ) = AlexLastAcc a input (I# (len))- check_accs (AlexAccSkip) = AlexLastSkip input (I# (len))+ check_accs (AlexAccNone) = 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))- | otherwise- = check_accs rest- check_accs (AlexAccSkipPred predx rest)- | predx user orig_input (I# (len)) input- = AlexLastSkip input (I# (len))- | otherwise- = check_accs rest+ check_accs (AlexAccPred a predx rest)+ | predx user orig_input (I# (len)) input+ = AlexLastAcc a input (I# (len))+ | otherwise+ = check_accs rest+ check_accs (AlexAccSkipPred predx rest)+ | predx user orig_input (I# (len)) input+ = AlexLastSkip input (I# (len))+ | otherwise+ = check_accs rest data AlexLastAcc a@@ -453,9 +454,9 @@ | AlexLastSkip !AlexInput !Int instance Functor AlexLastAcc where- fmap f AlexNone = AlexNone+ fmap _ AlexNone = AlexNone fmap f (AlexLastAcc x y z) = AlexLastAcc (f x) y z- fmap f (AlexLastSkip x y) = AlexLastSkip x y+ fmap _ (AlexLastSkip x y) = AlexLastSkip x y data AlexAcc a user = AlexAccNone@@ -484,12 +485,8 @@ --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+ (AlexNone, _) -> False+ _ -> True+ -- TODO: there's no need to find the longest+ -- match when checking the right context, just+ -- the first match will do.
dist/build/Agda/Syntax/Parser/Parser.hs view
@@ -915,19 +915,19 @@ happyActOffsets :: HappyAddr-happyActOffsets = HappyA# "\x00\x00\xfc\x09\xee\x05\x20\x04\x00\x00\xd2\x04\x00\x00\x00\x00\xe7\x05\x00\x00\x00\x00\xe7\x05\x79\x04\xf4\x05\x00\x00\xdd\x05\xf5\x05\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x02\x00\x00\x00\x00\x87\x08\xfc\x09\xef\x05\x00\x00\xb6\x02\xde\x05\x83\x0b\x00\x00\x00\x00\x9a\x0f\xdb\x05\xdb\x05\x00\x00\x00\x00\x5b\x0b\x00\x00\x00\x00\xe6\x02\x38\x0b\x00\x00\x00\x00\x5a\x0b\x65\x06\x25\x06\x4c\x08\x00\x00\xd4\x05\xe9\x05\x00\x00\xd9\x05\x1f\x02\xd8\x05\x00\x00\x00\x00\xef\x00\xef\x00\x00\x00\xd3\x05\xd5\x05\xd6\x05\x31\x01\xcd\x05\x06\x06\xc8\x05\xbe\x05\x20\x04\x00\x00\x00\x00\x00\x00\x8a\x0f\xfc\x09\x00\x00\xc6\x05\x00\x00\x37\x0b\x87\x0f\x39\x04\xd3\x00\x00\x00\x1b\x08\xdd\x07\xc1\x09\x00\x00\x10\x0b\xac\x07\x25\x06\x71\x07\x2d\x0a\x2d\x0a\x2d\x0a\xc4\x05\x10\x0b\x40\x07\x25\x06\x05\x07\x09\x06\x08\x06\x0f\x0b\x90\x09\xc3\x05\x0f\x0b\x00\x00\x5f\x09\x2d\x0a\x2d\x0a\xb9\x05\xb1\x05\xff\x05\x74\x05\x00\x00\xb7\x02\x2d\x0a\x2d\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x24\x09\x2d\x0a\x24\x09\x10\x0b\xfb\x05\xb6\x05\x2c\x04\x3c\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\xa4\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x05\xa9\x05\x82\x00\xd0\x00\xa3\x05\xa3\x05\xed\x0a\xa6\x05\x88\x02\x88\x02\x88\x02\x9b\x05\x9b\x05\x9b\x05\x9b\x05\x98\x05\x98\x05\x98\x05\x8c\x05\xcd\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x99\x05\xe4\xff\x97\x05\x8b\x05\x94\x05\x8a\x05\x93\x05\x83\x05\x82\x05\x88\x05\x81\x05\x81\x05\x81\x05\x81\x05\x81\x05\x81\x05\x81\x05\xce\x05\xc5\x0a\x8f\x05\xec\x0a\x7f\x01\x00\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00\x00\x00\xff\x00\xff\x00\x00\x00\xca\x03\xc4\x0a\xa1\x0a\xa1\x0a\xa1\x0a\xa1\x0a\x00\x00\xa2\x0a\x7f\x05\x00\x00\x7f\x05\x00\x00\x00\x00\x00\x00\x74\x05\x00\x00\x00\x00\xd6\x00\x24\x09\x24\x09\xcc\x05\x2d\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x0a\x2d\x0a\x2d\x0a\x2d\x0a\x10\x00\x24\x09\x8e\x05\x80\x05\x00\x00\x8d\x05\x65\x05\x7e\x05\x62\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x09\x24\x09\x2d\x0a\x7c\x05\xef\x00\x7d\x05\x72\x05\xef\x00\x7b\x05\x30\x01\x79\x05\x00\x00\xe2\x00\x3d\x01\x77\x05\x76\x05\x70\x05\x00\x00\x2d\x0a\x2d\x0a\x00\x00\x2d\x0a\x2d\x0a\x79\x0a\x6f\x05\x79\x0a\xd4\x06\x96\x06\xe9\x08\x00\x00\x00\x00\x6b\x05\x35\x00\x00\x00\x12\x04\x00\x00\x00\x00\xb8\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x08\x00\x00\x00\x00\x7a\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\x00\x62\x01\x66\x00\x62\x01\x2d\x0a\x00\x00\x2d\x0a\xb8\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x05\x5b\x05\x00\x00\xb8\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x08\x00\x00\x00\x00\x00\x00\x57\x05\xde\x00\x00\x00\x50\x05\x62\x05\x00\x00\x3d\x00\x56\x0a\x7a\x0a\x0d\x03\xe5\x05\x56\x0a\xa0\x05\x56\x0a\x1d\x00\xb9\x00\x9f\x00\x9a\x00\x2d\x0a\x00\x00\xca\x03\x60\x05\x00\x00\x3d\x00\x34\x01\x5e\x01\xd5\xff\xd5\xff\xf2\xff\x00\x00\x00\x00\x00\x00\x29\x03\x00\x00\x00\x00\x00\x00\x5a\x05\xed\xff\xed\xff\x00\x00\x00\x00\x5d\x05\xb8\x08\x52\x05\x96\x05\x4b\x05\x00\x00\x47\x05\x47\x05\x47\x05\x46\x05\x45\x05\x42\x05\x44\x05\x00\x00\x00\x00\x00\x00\x00\x00\x43\x05\x00\x00\x35\x05\x34\x05\x30\x05\x30\x05\x2d\x05\x27\x05\x00\x00\x00\x00\x25\x05\x23\x05\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x05\x1e\x05\x00\x00\x16\x05\x1c\x05\x18\x05\x17\x05\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x08\x1a\x05\x24\x05\x11\x05\x10\x05\x19\x05\x05\x05\x00\x00\x05\x05\x00\x00\xd5\xff\x0c\x05\x04\x05\x60\x00\x00\x00\x04\x05\x04\x05\x04\x05\x04\x05\x00\x00\xca\x03\xb8\x08\x00\x00\x48\x00\x08\x05\xb8\x08\x07\x05\xb8\x08\x07\x05\xb8\x08\x06\x05\x12\x04\x00\x00\x06\x05\x00\x00\x60\x00\x00\x00\x00\x00\x0d\x03\x00\x00\x00\x00\x0b\x05\x0a\x05\x09\x05\x00\x00\x00\x00\x0f\x05\x00\x00\xfc\x04\xb8\x08\x00\x00\x4d\x05\x4c\x05\x00\x00\x00\x00\x26\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x03\x00\x00\x00\x00\xfe\x04\xfe\x04\x00\x00\x00\x00\x12\x04\x90\x00\x2d\x00\x2d\x00\x00\x00\x0d\x03\x00\x00\x57\x0a\x0d\x03\x00\x00\x4a\x05\x00\x00\x00\x00\x0a\x00\x3c\x05\x00\x00\x3b\x05\x00\x00\xcd\x03\x00\x00\x00\x00\xe9\x04\x60\x00\xe7\x04\x60\x00\xca\x03\xca\x03\x00\x00\xe2\x04\x00\x00\xef\x04\xed\xff\x00\x00\xee\x04\xed\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x04\x00\x00\xda\x04\xe1\x04\xd8\x04\x00\x00\x00\x00\x00\x00\xca\x03\xca\x03\xca\x03\xca\x03\x00\x00\x3d\x00\x3d\x00\x10\x00\x74\x04\x00\x00\x00\x00\xdc\x04\x7d\x04\x00\x00\x7d\x04\x00\x00\x00\x00\xa5\x05\x00\x00\x00\x00\x83\x04\x80\x04\x00\x00\x73\x04\x77\x04\x71\x04\x76\x04\x7e\x04\xaf\x04\x00\x00\x00\x00\x0d\x03\x00\x00\x00\x00\x00\x00\x63\x04\x63\x04\xac\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x05\x00\x00\x74\x05\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x04\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x3d\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x05\x00\x00\x10\x00\x00\x00\x00\x00"#+happyActOffsets = HappyA# "\x00\x00\xdf\x09\xa6\x06\x0a\x04\x00\x00\xd4\x04\x00\x00\x00\x00\x98\x06\x00\x00\x00\x00\x98\x06\x7b\x04\x9d\x06\x00\x00\x96\x06\xa7\x06\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x01\x00\x00\x00\x00\x92\x08\xdf\x09\xa2\x06\x00\x00\x0f\x04\x6b\x0f\x92\x06\x00\x00\x00\x00\x8c\x06\x8c\x06\x00\x00\xfa\x0a\x00\x00\xe3\x0a\x00\x00\x00\x00\x50\x02\xa4\x0a\x00\x00\x00\x00\x68\x0f\x86\x06\x45\x06\x79\x08\x00\x00\x7e\x06\x97\x06\x00\x00\x91\x06\xc9\x01\x8e\x06\x00\x00\x00\x00\x44\x02\x44\x02\x00\x00\x89\x06\x94\x06\x8a\x06\x59\x01\x88\x06\xc5\x06\x84\x06\x7c\x06\x0a\x04\x00\x00\x00\x00\x00\x00\x16\x05\xdf\x09\x00\x00\x83\x06\x00\x00\xe2\x0a\x65\x04\x3a\x03\xc2\x02\x00\x00\x3a\x08\xf9\x07\x9e\x09\x00\x00\x8d\x0a\xe0\x07\x45\x06\x9f\x07\xf8\x09\xf8\x09\xf8\x09\x7f\x06\x8d\x0a\x60\x07\x45\x06\x1f\x07\x79\x06\x6e\x06\xb5\x06\xb4\x06\xae\x06\x84\x05\xc7\x0a\x85\x09\x70\x06\xc7\x0a\x00\x00\x46\x09\xf8\x09\xf8\x09\x00\x00\x18\x02\xf8\x09\xf8\x09\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x09\xf8\x09\x2d\x09\x8d\x0a\x95\x06\x68\x06\x64\x04\x3c\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\x54\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x06\x5e\x06\x5e\x06\x62\x06\x5e\x01\x5e\x01\x5e\x01\x60\x06\x5b\x00\x60\x06\xb2\x00\x59\x06\x5d\x06\x5a\x06\x58\x06\x4e\x0a\x57\x06\x57\x06\x53\x06\x97\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xda\xff\x48\x06\x48\x06\x48\x06\x48\x06\x48\x06\x48\x06\x48\x06\x41\x06\x43\x06\x3e\x06\x3c\x06\x3a\x06\x34\x06\x2c\x06\x2c\x06\x2e\x06\x61\x06\x37\x0a\x38\x06\x7f\x01\x8c\x0a\x00\x00\x00\x00\x25\x06\x00\x00\x71\x0a\x3b\x03\x25\x06\x00\x00\x36\x0a\x36\x0a\x00\x00\x00\x00\xff\x00\x00\x00\x00\x00\xff\x00\xff\x00\x00\x00\xc7\x03\x36\x0a\x36\x0a\x00\x00\x00\x00\x00\x00\x84\x05\x00\x00\x00\x00\x0f\x00\x2d\x09\x2d\x09\x50\x06\xf8\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x09\xf8\x09\xf8\x09\xf8\x09\x22\x06\x31\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x2d\x09\x2d\x09\x2d\x09\x2d\x06\x1a\x06\x00\x00\x26\x06\x03\x06\xf8\x09\x0c\x06\x44\x02\x0b\x06\x08\x06\x44\x02\xff\x05\x30\x01\x0e\x06\x00\x00\xe2\x00\xd3\x00\x09\x06\x07\x06\xfb\x05\x00\x00\xf8\x09\xf8\x09\x00\x00\xf8\x09\xf8\x09\x1b\x0a\xfa\x05\x1b\x0a\xe0\x06\x9f\x06\xec\x08\x00\x00\x00\x00\xf4\x05\xfa\xff\x00\x00\x02\x04\x00\x00\x00\x00\xd3\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd3\x08\x00\x00\x00\x00\xc3\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\x00\x31\x01\x4e\x00\x31\x01\xf8\x09\x00\x00\xf8\x09\xd3\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xea\x05\xe3\x05\x00\x00\xd3\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd3\x08\x00\x00\x00\x00\x00\x00\xd2\x00\xe0\x05\x00\x00\x2d\x08\xb9\x00\x2d\x08\xa3\x00\x00\x00\xc7\x03\xe6\x05\x00\x00\x3d\x00\x7e\x01\x07\x01\xd5\xff\xd5\xff\xd1\x00\x00\x00\x00\x00\x00\x00\xfe\x05\xeb\xff\x2d\x08\xc3\x02\x1b\x00\x04\x06\x00\x00\xd7\x05\xc2\x05\xd4\x05\x00\x00\x3d\x00\x69\x00\xf8\x09\x4a\x02\x00\x00\x00\x00\x00\x00\xce\x05\xb5\x00\xb5\x00\x00\x00\xd3\x08\xca\x05\xaf\x05\x00\x00\xba\x05\x00\x00\xb8\x05\xb5\x05\xad\x05\x00\x00\x00\x00\xb1\x05\x00\x00\x00\x00\xac\x05\xab\x05\xa3\x05\xa3\x05\x9f\x05\x9e\x05\x90\x05\x8e\x05\x8b\x05\x8b\x05\x82\x05\x81\x05\x80\x05\x7a\x05\x7b\x05\x79\x05\x00\x00\x78\x05\x6f\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x72\x05\x7d\x05\x69\x05\x6b\x05\x71\x05\x57\x05\x00\x00\x57\x05\x1d\x00\x5b\x05\xd3\x08\x00\x00\x4f\x05\xd3\x08\x00\x00\xd3\x08\xef\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x00\x00\x59\x05\x00\x00\x53\x05\x44\x05\x00\x00\x4a\x05\x3c\x05\x02\x04\x3c\x05\x00\x00\xd5\xff\x39\x05\x2e\x05\xef\x00\x00\x00\x2e\x05\x2e\x05\x2e\x05\x2e\x05\x00\x00\xc7\x03\xd3\x08\x00\x00\x30\x05\xd3\x08\x00\x00\x30\x05\xd3\x08\x00\x00\x00\x00\x00\x00\x23\x04\x56\x05\x55\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x00\x00\x00\x29\x05\x29\x05\x00\x00\x4d\x05\x00\x00\x00\x00\x0a\x00\x47\x05\x00\x00\x00\x00\x00\x00\x28\x05\xef\x00\x25\x05\xef\x00\xc7\x03\xc7\x03\x00\x00\x00\x00\x4b\x02\x1b\x00\x00\x00\x02\x04\xf2\xff\xf8\xff\xf2\xff\x00\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x41\x05\x00\x00\xca\x03\x19\x05\x00\x00\x22\x05\xb5\x00\x00\x00\x20\x05\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x05\x00\x00\x00\x00\x00\x00\x00\x00\x14\x05\x00\x00\x0c\x05\x0e\x05\x04\x05\x00\x00\x00\x00\x3d\x00\x3d\x00\x10\x00\x00\x00\x03\x05\x00\x00\x07\x05\x00\x00\x00\x00\x12\x05\x00\x05\x00\x00\xf0\x04\xf0\x04\xeb\x04\xf4\x04\x10\x05\x00\x00\x00\x00\x87\x04\x1b\x00\x00\x00\x00\x00\xc3\x05\x00\x00\x00\x00\xc7\x03\xc7\x03\xc7\x03\xc7\x03\x7d\x04\x00\x00\x7d\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xef\x00\x00\x00\x00\x00\x7a\x04\x7a\x04\xb5\x04\x00\x00\x00\x00\x00\x00\x00\x00\xf2\xff\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x05\x00\x00\x84\x05\x78\x04\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x3d\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\x05\x00\x00\x10\x00\x00\x00\x00\x00"# happyGotoOffsets :: HappyAddr-happyGotoOffsets = HappyA# "\x4a\x04\x9b\x0f\xb3\x04\xeb\x02\xb4\x04\xa9\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x06\x7f\x0f\x00\x00\x00\x00\x08\x04\x24\x04\xa5\x01\x00\x00\x00\x00\xe3\x01\xa0\x04\x84\x04\x00\x00\x00\x00\x4d\x03\x00\x00\x00\x00\x00\x00\x2b\x04\x00\x00\x00\x00\x70\x01\x0f\x01\xff\x0b\x39\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x04\x7b\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\x03\x06\x02\x00\x00\x00\x00\x00\x00\x2a\x04\x63\x0f\x00\x00\x00\x00\x00\x00\x4c\x03\x00\x00\x81\x00\x03\x00\x00\x00\x84\x01\x5c\x0c\xc1\x0b\x00\x00\x2b\x04\x47\x07\xdc\x0b\x1c\x0c\xd8\x06\x34\x0d\x17\x0d\x00\x00\xef\x02\x47\x0f\x4f\x0d\x2b\x0f\x00\x00\x00\x00\x1f\x04\x0f\x0f\x00\x00\xc6\x03\x00\x00\x84\x01\x10\x0d\xf3\x0c\x00\x00\x1a\x00\x00\x00\x48\x03\x00\x00\x00\x00\xec\x0c\xcf\x0c\x00\x00\x00\x00\x00\x00\x00\x00\xf3\x0e\x60\x02\xd7\x0e\x87\x03\x3a\x04\x00\x00\x25\x04\x72\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x03\xe8\x03\x06\x02\x1c\x00\x5c\x04\x4d\x04\xfa\x00\xb6\x03\x23\x04\x1c\x04\x19\x04\x92\x03\x8d\x03\x8b\x03\x88\x03\x03\x04\xf7\x03\xf4\x03\xb5\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\x03\x00\x00\x94\x03\x00\x00\x00\x00\x82\x03\x00\x00\x00\x00\x00\x00\x7b\x03\x78\x03\x70\x03\x58\x03\x49\x03\x45\x03\x3b\x03\x1f\x03\xed\x02\x7e\x02\x00\x00\x7b\x00\x45\x04\x00\x00\x00\x00\x00\x00\x00\x00\x3b\x02\x00\x00\x00\x00\xe4\x01\xbf\x01\x00\x00\x18\x00\x4a\x03\x28\x03\xd5\x02\xd2\x02\xb0\x02\x00\x00\x9d\x00\x2a\x03\x00\x00\x1e\x00\x00\x00\x00\x00\x00\x00\xd0\x02\x00\x00\x00\x00\xda\x02\xbb\x0e\x9f\x0e\xe8\x02\x25\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x02\xf3\x05\xc8\x0c\xab\x0c\x19\x03\x83\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x11\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x0e\x4b\x0e\xe8\x01\x00\x00\x0b\x03\x00\x00\x00\x00\xf2\x02\x00\x00\x00\x00\x00\x00\x00\x00\x02\x03\xf3\x02\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x0c\x87\x0c\x00\x00\x80\x0c\x63\x0c\x5f\x02\x00\x00\x5c\x02\x84\x01\xa3\x0b\x69\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xea\x01\x00\x00\x00\x00\x2f\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x0e\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xec\x02\x00\x00\xdf\x02\x70\x06\x00\x00\x30\x06\xf7\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\xdb\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbf\x0d\x00\x00\x00\x00\x00\x00\xa1\x03\x19\x00\x00\x00\x13\x04\x00\x00\x00\x00\x09\x04\x5a\x02\x95\x00\x67\x04\x4f\x0d\x09\x02\x00\x00\xe7\x01\x00\x00\x00\x00\x00\x00\x00\x00\x64\x09\x00\x00\xaf\x02\x00\x00\x00\x00\xd5\x03\x00\x00\xdc\x02\x83\x02\x3c\x02\xa0\x00\x00\x00\x00\x00\x00\x00\x41\x02\x00\x00\x00\x00\x00\x00\x00\x00\x74\x03\x6c\x03\x00\x00\x00\x00\x00\x00\xa3\x0d\x96\x02\x79\x02\x00\x00\x00\x00\x95\x02\x86\x02\x84\x02\x00\x00\x4f\x02\x4e\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x02\x26\x02\x00\x00\x15\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x87\x0d\x00\x00\x00\x00\xb8\x01\x00\x00\x00\x00\x89\x01\x00\x00\xad\xff\x00\x00\x8f\x01\x00\x00\xcc\x01\xc1\x01\x00\x00\xab\x03\xa7\x03\xa2\x03\x4f\x03\x00\x00\xb8\x00\x6b\x0d\x00\x00\x00\x00\x44\x01\x03\x0a\x92\x01\x2b\x09\x8b\x01\x8e\x08\x06\x03\x20\x00\x00\x00\xf7\x02\x00\x00\xab\x01\x00\x00\x00\x00\x8e\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfa\xff\xb3\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x04\x00\x00\x00\x00\xf1\x02\x8b\x02\x00\x00\x00\x00\xff\xff\x55\x01\x0d\x01\xd7\x00\x00\x00\x15\x04\x00\x00\x3b\x00\xbc\x03\x00\x00\x00\x00\x00\x00\x00\x00\xfd\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\x00\x00\x00\x00\x00\x00\xa0\x01\x00\x00\x1c\x01\xae\x02\x8d\x02\x00\x00\x32\x01\x00\x00\x00\x00\xd8\x02\x00\x00\x00\x00\xa2\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\x13\x01\x00\x00\x0e\x01\x00\x00\x00\x00\x00\x00\x7c\x02\x20\x02\xa2\x00\x2c\x00\x00\x00\xbf\x02\x6c\x02\x1b\x01\xfe\x00\x00\x00\x00\x00\x57\x00\xd4\x00\x00\x00\x85\x00\x00\x00\x00\x00\x4f\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x00\x00\x00\xf1\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x00\x00\xb7\x03\x00\x00\x00\x00\x00\x00\xc2\x00\x84\x00\x51\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xba\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x01\x00\x00\x58\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x4d\x01\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01\x00\x00\x0e\x00\x00\x00\x00\x00"#+happyGotoOffsets = HappyA# "\x52\x04\x7c\x0f\xc1\x04\x41\x04\xc0\x04\xbc\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x03\x60\x0f\x00\x00\x00\x00\xe3\x03\x03\x00\x35\x04\x00\x00\x00\x00\xaf\x04\xae\x04\x00\x00\xa5\x01\x00\x00\xf0\x06\x00\x00\x00\x00\x00\x00\xa4\x05\x00\x00\x00\x00\x70\x01\x0f\x01\x98\x0b\xd2\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\x04\xa9\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x04\x39\x02\x00\x00\x00\x00\x00\x00\x43\x05\x44\x0f\x00\x00\x00\x00\x00\x00\x4b\x04\x00\x00\x17\x01\xf5\x00\x00\x00\x84\x01\x77\x07\x38\x0b\x00\x00\xa4\x05\x53\x0b\x75\x0b\xb5\x0b\xf7\x06\xc1\x0c\xa4\x0c\x00\x00\x5c\x06\x28\x0f\xdc\x0c\x0c\x0f\x00\x00\xb3\x00\x00\x00\x00\x00\x00\x00\x48\x03\x92\x04\xf0\x0e\x00\x00\x3a\x04\x00\x00\x84\x01\x9d\x0c\x80\x0c\x00\x00\x00\x00\x79\x0c\x5c\x0c\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x0e\xda\x02\xb8\x0e\x73\x01\x68\x04\x00\x00\x5c\x04\xa2\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9e\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x04\x8b\x04\x7c\x04\xfc\x03\x6f\x04\x66\x04\x5a\x04\xe4\x03\x1c\x00\xdd\x03\x39\x02\x51\x04\xc5\x03\xc1\x03\xa5\x03\xfa\x00\x22\x04\x1e\x04\xf6\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x04\x05\x04\xfe\x03\xf9\x03\xf0\x03\xe7\x03\xbb\x03\x00\x00\x00\x00\xb1\x03\x00\x00\x00\x00\x97\x03\x8e\x03\x7d\x03\x00\x00\x4c\x03\x1b\x06\x00\x00\xb1\x02\x7e\x05\x00\x00\x00\x00\x1e\x00\x00\x00\x7b\x00\x9d\x00\x81\x03\x00\x00\x26\x05\x75\x04\x00\x00\x00\x00\xe4\x01\x00\x00\x00\x00\xbf\x01\x86\x01\x00\x00\x18\x00\x71\x03\xf9\x02\x00\x00\x00\x00\x00\x00\xd0\x02\x00\x00\x00\x00\x38\x03\x9c\x0e\x80\x0e\x3c\x03\x62\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x02\xda\x05\x55\x0c\x38\x0c\x00\x00\x6e\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x03\x64\x0e\x48\x0e\x2c\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x89\x00\xe8\x01\x00\x00\x57\x03\x00\x00\x00\x00\x54\x03\x00\x00\x00\x00\x00\x00\x00\x00\x50\x03\x4e\x03\x00\x00\x00\x00\x00\x00\x00\x00\x31\x0c\x14\x0c\x00\x00\x0d\x0c\x51\x08\x1d\x04\x00\x00\xe1\x03\x84\x01\x36\x07\xb6\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xea\x01\x00\x00\x00\x00\x10\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x0d\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x03\x00\x00\x11\x03\x55\x06\x00\x00\x14\x06\xd8\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\xbc\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x0d\x00\x00\x00\x00\x00\x00\x19\x00\x76\x03\x00\x00\x81\x02\x00\x00\xe7\x01\x00\x00\x00\x00\x5d\x04\x00\x00\x00\x00\xaf\x03\x00\x00\x26\x03\x2c\x03\xf8\x02\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe3\x01\x95\x00\xf1\x05\xdc\x0c\x00\x00\x00\x00\xa7\x03\x00\x00\x00\x00\xa6\x03\x00\x00\xef\x0b\x29\x03\x00\x00\x00\x00\x00\x00\x00\x00\x18\x03\x13\x03\x00\x00\x84\x0d\xc5\x02\xd7\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf3\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4\x02\xd1\x02\xc7\x02\xc6\x02\x00\x00\xc4\x02\x9e\x02\x8d\x02\x00\x00\x00\x00\x00\x00\x8e\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x02\x00\x00\x00\x00\x08\x02\x00\x00\xb2\x01\x00\x00\xf6\x01\x68\x0d\x00\x00\x35\x00\x4c\x0d\x00\x00\x30\x0d\x64\x02\x00\x00\x00\x00\x31\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x02\x20\x00\xd5\x02\x00\x00\xb4\x02\x00\x00\x22\x02\x34\x02\x00\x00\x33\x03\x2a\x03\xf6\x02\xeb\x02\x00\x00\xb8\x00\x14\x0d\x00\x00\xed\x01\xf8\x0c\x00\x00\x98\x01\xda\x03\x00\x00\x00\x00\x00\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x05\x00\x00\x5d\x02\x3c\x02\x00\x00\x00\x00\x00\x00\x00\x00\xfd\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x02\x00\x00\xca\x01\xe5\x03\x80\x02\x00\x00\x00\x00\x3b\x00\xb0\x05\x00\x00\xff\xff\xd7\x00\x51\x01\x99\x00\x00\x00\x7f\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\xbc\x01\x00\x00\x00\x00\x57\x02\x00\x00\x00\x00\x46\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\xaa\x01\x00\x00\x89\x01\x00\x00\x00\x00\x82\x02\x47\x02\x96\x01\x00\x00\x50\x01\x00\x00\x06\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\x01\x2a\x01\x00\x00\x00\x00\x00\x00\x1a\x01\x00\x00\x00\x00\x74\x05\x00\x00\x00\x00\xdc\x0c\x00\x00\x00\x00\x37\x02\x20\x02\x07\x02\xa3\x01\xf3\x00\x00\x00\x8c\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x00\x00\x00\x00\x00\xf1\x00\x37\x00\x10\x01\x00\x00\x00\x00\x00\x00\x00\x00\xdb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x01\x00\x00\x58\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x00\x30\x00\xa4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01\x00\x00\x88\x00\x00\x00\x00\x00"# happyDefActions :: HappyAddr-happyDefActions = HappyA# "\xf9\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfb\xff\x7e\xff\x7d\xff\x00\x00\x96\xff\x7f\xff\x00\x00\xa3\xfe\x7e\xff\x58\xff\x00\x00\x6d\xff\x6c\xff\x6a\xff\x69\xff\x66\xff\x00\x00\x46\xff\x45\xff\x63\xff\x00\x00\x00\x00\x3e\xff\x3c\xff\x00\x00\x00\x00\x54\xff\x53\xff\x00\x00\x00\x00\x00\x00\x52\xff\x51\xff\x00\x00\x50\xff\x4f\xff\x00\x00\x00\x00\x55\xff\x56\xff\x00\x00\xa3\xfe\x00\x00\x00\x00\x57\xff\x00\x00\x00\x00\x78\xff\x00\x00\x77\xff\x00\x00\x59\xff\x4b\xff\x00\x00\x00\x00\x93\xff\x00\x00\x00\x00\x00\x00\x76\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa4\xfe\x4c\xff\x7c\xff\x0e\xff\x22\xff\x00\x00\x5d\xff\x00\x00\x2d\xff\x2a\xff\x23\xff\x00\x00\x00\x00\x7b\xff\xa3\xfe\x00\x00\x00\x00\x49\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\xff\x5c\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\xff\x00\x00\x00\x00\x14\xff\x0f\xff\xa3\xfe\x00\x00\x00\x00\x00\x00\x44\xff\x00\x00\xa3\xfe\x3d\xff\x00\x00\x00\x00\x00\x00\x3f\xff\x70\xff\x68\xff\x5b\xff\x00\x00\x00\x00\x00\x00\x00\x00\xea\xfe\x00\x00\xcb\xfe\x5b\xfe\xe3\xfe\xe2\xfe\xe1\xfe\xe0\xfe\xdf\xfe\xde\xfe\xe4\xfe\xdd\xfe\xdc\xfe\xdb\xfe\xda\xfe\xd9\xfe\xd8\xfe\xd1\xfe\xd3\xfe\xd2\xfe\xd7\xfe\xd6\xfe\xd5\xfe\x9f\xff\xd4\xfe\x95\xfe\x84\xfe\x94\xfe\x93\xfe\x92\xfe\x91\xfe\x8f\xfe\x90\xfe\x8e\xfe\x8d\xfe\x8c\xfe\x89\xfe\x86\xfe\x87\xfe\x88\xfe\x85\xfe\x8b\xfe\x8a\xfe\x59\xfe\x96\xfe\x00\x00\x00\x00\xa4\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\xfe\x00\x00\xfa\xff\xf8\xff\xf7\xff\xf6\xff\xf5\xff\xf4\xff\xf3\xff\xf2\xff\xf1\xff\xf0\xff\xef\xff\xee\xff\xed\xff\xec\xff\xeb\xff\xea\xff\xe9\xff\xe8\xff\xe7\xff\xe6\xff\xe5\xff\xe4\xff\xe3\xff\xe2\xff\xe1\xff\xe0\xff\xdf\xff\xde\xff\xdd\xff\xdc\xff\xdb\xff\xda\xff\xd9\xff\xd8\xff\xd7\xff\xd6\xff\xd5\xff\xd4\xff\xd3\xff\xcb\xff\xca\xff\xc9\xff\xc8\xff\xc7\xff\xc6\xff\xd2\xff\xd1\xff\xd0\xff\xcf\xff\xce\xff\xcd\xff\xcc\xff\xc5\xff\xc4\xff\xc3\xff\xc2\xff\xc1\xff\xc0\xff\xbf\xff\xbe\xff\xbd\xff\xbc\xff\xbb\xff\xba\xff\xb9\xff\xb8\xff\xb7\xff\xb6\xff\xb5\xff\xb4\xff\xb3\xff\xb2\xff\xb1\xff\xb0\xff\xaf\xff\xae\xff\xad\xff\xac\xff\xab\xff\xaa\xff\xa9\xff\xa8\xff\xa7\xff\xa6\xff\xa5\xff\xa4\xff\xa3\xff\xa2\xff\xa1\xff\x75\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xea\xfe\x00\x00\x00\x00\xb4\xfe\x00\x00\xba\xfe\xbb\xfe\xbc\xfe\xbd\xfe\x00\x00\x97\xff\x98\xff\x00\x00\x00\x00\xbe\xfe\x00\x00\x10\xff\x10\xff\x10\xff\x10\xff\x10\xff\x97\xfe\x9f\xfe\x00\x00\xb8\xfe\x00\x00\xb9\xfe\xa0\xff\x9e\xff\xa3\xfe\x9b\xff\x9a\xff\xe8\xfe\x00\x00\x00\x00\xec\xfe\x00\x00\x4a\xff\x6e\xff\x6b\xff\x6f\xff\x77\xff\x63\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\xff\x42\xff\x44\xff\x78\xff\x00\x00\x76\xff\x16\xff\x17\xff\x65\xff\x15\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\xff\x00\x00\x18\xff\x00\x00\x00\x00\x20\xff\x1f\xff\x21\xff\x0d\xff\x00\x00\x00\x00\x0c\xff\x00\x00\x00\x00\x29\xff\x25\xff\x2a\xff\xa3\xfe\x00\x00\x00\x00\x2e\xff\x67\xff\x24\xff\x00\x00\x32\xff\x00\x00\x35\xff\x4d\xff\x00\x00\x92\xff\x34\xff\x4e\xff\x33\xff\x5a\xff\x00\x00\x30\xff\x2f\xff\x9f\xfe\x31\xff\x27\xff\x26\xff\x28\xff\x2c\xff\x2b\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\xff\x00\x00\x00\x00\x3b\xff\x39\xff\x3a\xff\x38\xff\x36\xff\x37\xff\x5f\xff\x61\xff\x62\xff\x0a\xff\x0b\xff\x00\x00\x00\x00\x48\xff\x00\x00\x64\xff\x5f\xfe\x9c\xff\x9d\xff\xe9\xfe\xf0\xfe\x00\x00\xcd\xfe\xcc\xfe\xce\xfe\x00\x00\x00\x00\x5c\xfe\x94\xff\x00\x00\x6f\xfe\x00\x00\x10\xff\x9f\xfe\x03\xff\x00\x00\x10\xff\x00\x00\x10\xff\x00\x00\x00\x00\x00\x00\x00\x00\x44\xff\x90\xff\x8c\xff\x00\x00\x6c\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\xff\xc1\xfe\xc0\xfe\xbf\xfe\x00\x00\xb0\xfe\xae\xfe\xa9\xfe\x00\x00\x00\x00\x00\x00\xa5\xfe\xb3\xfe\x00\x00\x00\x00\xee\xfe\xec\xfe\x00\x00\x71\xff\x75\xff\x75\xff\x75\xff\x00\x00\x00\x00\x75\xff\x00\x00\x72\xff\x75\xfe\x76\xfe\x77\xfe\x00\x00\x72\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\xff\x74\xff\x83\xfe\x00\x00\x00\x00\x80\xfe\x73\xfe\x78\xfe\x74\xfe\x00\x00\x00\x00\x73\xff\x75\xff\x00\x00\x00\x00\x00\x00\x79\xfe\xef\xfe\xed\xfe\xb7\xfe\x00\x00\x00\x00\xa7\xfe\x00\x00\x00\x00\xa7\xfe\x00\x00\xaf\xfe\x00\x00\x7a\xff\x8e\xff\x00\x00\x00\x00\x00\x00\x91\xff\x00\x00\x00\x00\x00\x00\x00\x00\x6e\xfe\x00\x00\x00\x00\x8d\xff\x7e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\xff\x00\x00\x11\xff\x00\x00\xa1\xfe\x05\xff\x03\xff\x01\xff\x00\xff\x00\x00\x00\x00\x00\x00\x02\xff\x9e\xfe\x00\x00\x71\xfe\x00\x00\x00\x00\x95\xff\x00\x00\x00\x00\x5d\xfe\xe7\xfe\x00\x00\xeb\xfe\x40\xff\x41\xff\x47\xff\x1e\xff\x1d\xff\x1c\xff\x1b\xff\x19\xff\x1a\xff\x08\xff\x09\xff\x06\xff\x07\xff\x03\xff\xa2\xfe\x5e\xfe\x00\x00\x00\x00\xd0\xfe\x70\xfe\x00\x00\x99\xff\xf4\xfe\xf4\xfe\x04\xff\x03\xff\x98\xfe\x9f\xfe\x03\xff\x99\xfe\xc6\xfe\x6a\xfe\xc8\xfe\x00\x00\x00\x00\xc7\xfe\xc3\xfe\xc4\xfe\x00\x00\xcf\xfe\x6d\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xff\x88\xff\x8f\xff\xb6\xfe\xb2\xfe\x00\x00\x00\x00\xac\xfe\x00\x00\x00\x00\xad\xfe\xb5\xfe\x7a\xfe\x7b\xfe\x7d\xfe\x00\x00\x7e\xfe\x7f\xfe\x81\xfe\x82\xfe\x7c\xfe\x00\x00\xa7\xfe\x00\x00\x00\x00\x00\x00\xb1\xfe\x89\xff\x8b\xff\x84\xff\x86\xff\x80\xff\x82\xff\x69\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x61\xfe\x60\xfe\x00\x00\x00\x00\x6b\xfe\x00\x00\x9b\xfe\x9c\xfe\x00\x00\xa0\xfe\xf6\xfe\xf2\xfe\x00\x00\xf3\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xfa\xfe\x00\x00\x99\xff\xfc\xfe\x03\xff\xe6\xfe\xe5\xfe\x9a\xfe\x00\x00\x00\x00\x99\xff\xfd\xfe\xf8\xfe\xfe\xfe\xf5\xfe\xff\xfe\x00\x00\x00\x00\xca\xfe\xc9\xfe\xc5\xfe\xc2\xfe\x66\xfe\x65\xfe\xa3\xfe\x68\xfe\xa3\xfe\x83\xff\x81\xff\x87\xff\x85\xff\x00\x00\xaa\xfe\xa6\xfe\xab\xfe\xa8\xfe\x00\x00\x00\x00\x00\x00\x9d\xfe\xf1\xfe\xfb\xfe\xf9\xfe\xf7\xfe\x62\xfe\x64\xfe\xa3\xfe\x67\xfe\x00\x00\x63\xfe"#+happyDefActions = HappyA# "\xf9\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfb\xff\x7e\xff\x7d\xff\x00\x00\x96\xff\x7f\xff\x00\x00\xa3\xfe\x7e\xff\x58\xff\x00\x00\x6d\xff\x6c\xff\x6a\xff\x69\xff\x66\xff\x00\x00\x46\xff\x45\xff\x63\xff\x00\x00\x00\x00\x3e\xff\x3c\xff\x00\x00\x00\x00\x54\xff\x52\xff\x00\x00\x00\x00\x51\xff\x00\x00\x53\xff\x00\x00\x50\xff\x4f\xff\x00\x00\x00\x00\x55\xff\x56\xff\x00\x00\xa3\xfe\x00\x00\x00\x00\x57\xff\x00\x00\x00\x00\x78\xff\x00\x00\x77\xff\x00\x00\x59\xff\x4b\xff\x00\x00\x00\x00\x93\xff\x00\x00\x00\x00\x00\x00\x76\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa4\xfe\x4c\xff\x7c\xff\x0e\xff\x22\xff\x00\x00\x5d\xff\x00\x00\x2d\xff\x2a\xff\x23\xff\x00\x00\x00\x00\x7b\xff\xa3\xfe\x00\x00\x00\x00\x49\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\xff\x5c\xff\x00\x00\x00\x00\x00\x00\x00\x00\x44\xff\x00\x00\x00\x00\x00\x00\xa3\xfe\x13\xff\x00\x00\x00\x00\x14\xff\x0f\xff\xa3\xfe\x00\x00\x00\x00\x3d\xff\x00\x00\x00\x00\x00\x00\x3f\xff\x70\xff\x68\xff\x5b\xff\x00\x00\x00\x00\x00\x00\x00\x00\xea\xfe\x00\x00\xcb\xfe\x5b\xfe\xe3\xfe\xe2\xfe\xe1\xfe\xe0\xfe\xdf\xfe\xde\xfe\xe4\xfe\xdd\xfe\xdc\xfe\xdb\xfe\xda\xfe\xd9\xfe\xd8\xfe\xd1\xfe\xd3\xfe\xd2\xfe\xd7\xfe\xd6\xfe\xd5\xfe\x9f\xff\xd4\xfe\x95\xfe\x84\xfe\x94\xfe\x93\xfe\x92\xfe\x91\xfe\x8f\xfe\x90\xfe\x8e\xfe\x8d\xfe\x8c\xfe\x89\xfe\x86\xfe\x87\xfe\x88\xfe\x85\xfe\x8b\xfe\x8a\xfe\x59\xfe\x96\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xee\xfe\x00\x00\xfa\xff\xf8\xff\xf7\xff\xf6\xff\xf5\xff\xf4\xff\xf3\xff\xf2\xff\xf1\xff\xf0\xff\xef\xff\xee\xff\xed\xff\xec\xff\xeb\xff\xea\xff\xe9\xff\xe8\xff\xe7\xff\xe6\xff\xe5\xff\xe4\xff\xe3\xff\xe2\xff\xe1\xff\xe0\xff\xdf\xff\xde\xff\xdd\xff\xdc\xff\xdb\xff\xda\xff\xd9\xff\xd8\xff\xd7\xff\xd6\xff\xd5\xff\xd4\xff\xd3\xff\xd2\xff\xd1\xff\xd0\xff\xcf\xff\xce\xff\xcd\xff\xcc\xff\xcb\xff\xca\xff\xc9\xff\xc8\xff\xc7\xff\xc6\xff\xc5\xff\xc4\xff\xc3\xff\xc2\xff\xc1\xff\xc0\xff\xbf\xff\xbe\xff\xbd\xff\xbc\xff\xbb\xff\xba\xff\xb9\xff\xb8\xff\xb7\xff\xb6\xff\xb5\xff\xb4\xff\xb3\xff\xb2\xff\xb1\xff\xb0\xff\xaf\xff\xae\xff\xad\xff\xac\xff\xab\xff\xaa\xff\xa9\xff\xa8\xff\xa7\xff\xa6\xff\xa5\xff\xa4\xff\xa3\xff\xa2\xff\xa1\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\x75\xff\x00\x00\x00\x00\x00\x00\xea\xfe\x00\x00\x00\x00\x00\x00\x10\xff\xbb\xfe\xb8\xfe\x00\x00\xb9\xfe\xb4\xfe\x9f\xfe\x00\x00\xbd\xfe\x10\xff\x10\xff\x97\xfe\xba\xfe\x00\x00\x97\xff\x98\xff\x00\x00\x00\x00\xbe\xfe\x00\x00\x10\xff\x10\xff\xbc\xfe\xa0\xff\x9e\xff\xa3\xfe\x9b\xff\x9a\xff\xe8\xfe\x00\x00\x00\x00\xec\xfe\x00\x00\x4a\xff\x6e\xff\x6b\xff\x6f\xff\x77\xff\x63\xff\x00\x00\x00\x00\x00\x00\x78\xff\x00\x00\x76\xff\x16\xff\x17\xff\x65\xff\x15\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\xff\x42\xff\x44\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\xff\x00\x00\x18\xff\x00\x00\x00\x00\x20\xff\x1f\xff\x21\xff\x0d\xff\x00\x00\x00\x00\x0c\xff\x00\x00\x00\x00\x29\xff\x25\xff\x2a\xff\xa3\xfe\x00\x00\x00\x00\x2e\xff\x67\xff\x24\xff\x00\x00\x32\xff\x00\x00\x35\xff\x4d\xff\x00\x00\x92\xff\x34\xff\x4e\xff\x33\xff\x5a\xff\x00\x00\x30\xff\x2f\xff\x9f\xfe\x31\xff\x27\xff\x26\xff\x28\xff\x2c\xff\x2b\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\xff\x00\x00\x00\x00\x3b\xff\x39\xff\x3a\xff\x38\xff\x36\xff\x37\xff\x5f\xff\x00\x00\x00\x00\x48\xff\x00\x00\x62\xff\x61\xff\x64\xff\x5f\xfe\x9c\xff\x9d\xff\x0a\xff\x0b\xff\xe9\xfe\xf0\xfe\x00\x00\xcd\xfe\xcc\xfe\xce\xfe\x00\x00\x00\x00\x5c\xfe\x10\xff\x00\x00\x10\xff\x00\x00\x90\xff\x8c\xff\x00\x00\x6c\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\xff\xc1\xfe\xc0\xfe\xbf\xfe\x00\x00\x00\x00\x10\xff\x9f\xfe\x03\xff\x00\x00\xb3\xfe\x00\x00\x94\xff\x00\x00\x6f\xfe\x00\x00\x00\x00\x44\xff\x00\x00\xb0\xfe\xae\xfe\xa9\xfe\x00\x00\x00\x00\x00\x00\xa5\xfe\x00\x00\xee\xfe\xec\xfe\x75\xfe\x00\x00\x71\xff\x00\x00\x00\x00\x75\xff\x76\xfe\x77\xfe\x00\x00\x72\xff\x72\xfe\x00\x00\x00\x00\x75\xff\x75\xff\x00\x00\x75\xff\x00\x00\x75\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\xff\x00\x00\x00\x00\x73\xff\x00\x00\x00\x00\x78\xfe\x73\xfe\x74\xfe\x74\xff\x83\xfe\x80\xfe\x79\xfe\xef\xfe\xed\xfe\xb7\xfe\x00\x00\xa7\xfe\x00\x00\x00\x00\xa7\xfe\x00\x00\xaf\xfe\x00\x00\x7e\xff\x00\x00\x00\x00\x71\xfe\x00\x00\x00\x00\x95\xff\x00\x00\x00\x00\xa1\xfe\x05\xff\x03\xff\x01\xff\x00\xff\x00\x00\x02\xff\x00\x00\x00\x00\x9e\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x7a\xff\x8e\xff\x00\x00\x00\x00\x00\x00\x91\xff\x00\x00\x00\x00\x00\x00\x00\x00\x6e\xfe\x00\x00\x00\x00\x8d\xff\x00\x00\x00\x00\x12\xff\x00\x00\x00\x00\x11\xff\x5d\xfe\xe7\xfe\x00\x00\x00\x00\x00\x00\xeb\xfe\x40\xff\x41\xff\x47\xff\x1e\xff\x1d\xff\x1c\xff\x1b\xff\x19\xff\x1a\xff\x08\xff\x09\xff\x06\xff\x07\xff\x03\xff\xa2\xfe\x00\x00\x00\x00\x5e\xfe\x00\x00\x6a\xfe\xc7\xfe\x00\x00\xc6\xfe\xc8\xfe\xcf\xfe\x6d\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x8a\xff\x88\xff\x8f\xff\x98\xfe\x9f\xfe\x03\xff\x99\xfe\x00\x00\xf4\xfe\x99\xff\xf4\xfe\x04\xff\x03\xff\xb5\xfe\xd0\xfe\x70\xfe\xc3\xfe\xc4\xfe\x00\x00\xb6\xfe\xb2\xfe\x00\x00\x00\x00\xac\xfe\x00\x00\x00\x00\xad\xfe\x7d\xfe\x7a\xfe\x7e\xfe\x7b\xfe\x00\x00\x7f\xfe\x81\xfe\x82\xfe\x7c\xfe\x00\x00\xa7\xfe\x00\x00\x00\x00\x00\x00\xb1\xfe\x69\xfe\x00\x00\x00\x00\x00\x00\x60\xfe\x00\x00\x61\xfe\x00\x00\xa0\xfe\xf6\xfe\xf2\xfe\x00\x00\xf3\xfe\x00\x00\x00\x00\x00\x00\xfa\xfe\x00\x00\x99\xff\xfc\xfe\x00\x00\x03\xff\x9b\xfe\x9c\xfe\x00\x00\x89\xff\x8b\xff\x84\xff\x86\xff\x80\xff\x82\xff\x00\x00\x6b\xfe\x00\x00\xe6\xfe\xe5\xfe\xc9\xfe\xca\xfe\x83\xff\x81\xff\x87\xff\x85\xff\x00\x00\x9a\xfe\xff\xfe\x00\x00\x00\x00\x99\xff\xfd\xfe\xf8\xfe\xf5\xfe\xfe\xfe\x00\x00\xc5\xfe\xc2\xfe\x66\xfe\x65\xfe\xa3\xfe\x68\xfe\xa3\xfe\x00\x00\xaa\xfe\xa6\xfe\xab\xfe\xa8\xfe\x00\x00\x00\x00\x00\x00\xf1\xfe\xfb\xfe\xf9\xfe\xf7\xfe\x9d\xfe\x62\xfe\x64\xfe\xa3\xfe\x67\xfe\x00\x00\x63\xfe"# happyCheck :: HappyAddr-happyCheck = HappyA# "\xff\xff\x05\x00\x05\x00\x09\x00\x0a\x00\x09\x00\x09\x00\x0a\x00\x09\x00\x25\x00\x00\x00\x0f\x00\x09\x00\x60\x00\x0f\x00\x10\x00\x00\x00\x09\x00\x65\x00\x05\x00\x11\x00\x40\x00\x09\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x03\x00\x09\x00\x09\x00\x09\x00\x0c\x00\x09\x00\x0e\x00\x09\x00\x0a\x00\x09\x00\x55\x00\x0f\x00\x10\x00\x25\x00\x26\x00\x0f\x00\x10\x00\x24\x00\x25\x00\x26\x00\x47\x00\x09\x00\x44\x00\x02\x00\x0c\x00\x05\x00\x0e\x00\x57\x00\x0f\x00\x00\x00\x24\x00\x25\x00\x26\x00\x45\x00\x55\x00\x05\x00\x09\x00\x4b\x00\x4a\x00\x55\x00\x4b\x00\x4d\x00\x0f\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\x51\x00\x21\x00\x22\x00\x23\x00\x55\x00\x43\x00\x51\x00\x66\x00\x67\x00\x4c\x00\x0b\x00\x6a\x00\x6b\x00\x69\x00\x4b\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x05\x00\x41\x00\x82\x00\x4b\x00\x09\x00\x55\x00\x87\x00\x09\x00\x6c\x00\x8a\x00\x0f\x00\x6c\x00\x69\x00\x09\x00\x43\x00\x11\x00\x09\x00\x51\x00\x52\x00\x48\x00\x0f\x00\x11\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x84\x00\x03\x00\x09\x00\x0f\x00\x82\x00\x09\x00\x03\x00\x68\x00\x0f\x00\x2a\x00\x09\x00\x0f\x00\x42\x00\x09\x00\x2f\x00\x09\x00\x0f\x00\x4d\x00\x0c\x00\x4f\x00\x0e\x00\x11\x00\x12\x00\x38\x00\x39\x00\x4f\x00\x21\x00\x22\x00\x23\x00\x21\x00\x22\x00\x23\x00\x03\x00\x45\x00\x21\x00\x22\x00\x23\x00\x09\x00\x4a\x00\x09\x00\x0c\x00\x4d\x00\x0e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x09\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x55\x00\x56\x00\x03\x00\x5f\x00\x4b\x00\x42\x00\x86\x00\x66\x00\x67\x00\x09\x00\x42\x00\x6a\x00\x6b\x00\x07\x00\x0f\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x09\x00\x09\x00\x42\x00\x42\x00\x68\x00\x44\x00\x0f\x00\x68\x00\x09\x00\x8a\x00\x09\x00\x4c\x00\x68\x00\x81\x00\x09\x00\x42\x00\x0f\x00\x85\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x44\x00\x4f\x00\x09\x00\x44\x00\x09\x00\x42\x00\x43\x00\x44\x00\x22\x00\x4a\x00\x0f\x00\x4c\x00\x05\x00\x4e\x00\x44\x00\x41\x00\x15\x00\x55\x00\x56\x00\x0b\x00\x55\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x55\x00\x52\x00\x45\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x4a\x00\x2c\x00\x4d\x00\x4d\x00\x4f\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x44\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x42\x00\x43\x00\x44\x00\x05\x00\x06\x00\x55\x00\x81\x00\x66\x00\x67\x00\x07\x00\x85\x00\x6a\x00\x6b\x00\x07\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x09\x00\x42\x00\x65\x00\x43\x00\x66\x00\x67\x00\x0f\x00\x65\x00\x09\x00\x8a\x00\x8b\x00\x4b\x00\x41\x00\x41\x00\x4f\x00\x4c\x00\x11\x00\x4e\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x4f\x00\x09\x00\x52\x00\x52\x00\x3f\x00\x40\x00\x41\x00\x0f\x00\x3f\x00\x40\x00\x41\x00\x65\x00\x09\x00\x15\x00\x2a\x00\x0c\x00\x0d\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x1d\x00\x1e\x00\x1f\x00\x42\x00\x21\x00\x22\x00\x23\x00\x38\x00\x39\x00\x4c\x00\x0b\x00\x4e\x00\x45\x00\x09\x00\x4d\x00\x2c\x00\x4f\x00\x4a\x00\x55\x00\x0f\x00\x4d\x00\x0b\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\x22\x00\x09\x00\x4a\x00\x86\x00\x4c\x00\x0b\x00\x4e\x00\x66\x00\x67\x00\x11\x00\x12\x00\x6a\x00\x6b\x00\x55\x00\x09\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x09\x00\x66\x00\x67\x00\x09\x00\x09\x00\x65\x00\x0f\x00\x09\x00\x09\x00\x8a\x00\x09\x00\x11\x00\x11\x00\x12\x00\x0f\x00\x11\x00\x0f\x00\x10\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x81\x00\x2a\x00\x09\x00\x09\x00\x85\x00\x2a\x00\x09\x00\x81\x00\x0f\x00\x0f\x00\x10\x00\x85\x00\x35\x00\x36\x00\x11\x00\x38\x00\x39\x00\x65\x00\x37\x00\x38\x00\x39\x00\x16\x00\x1d\x00\x1e\x00\x1f\x00\x45\x00\x21\x00\x22\x00\x23\x00\x09\x00\x4a\x00\x16\x00\x0c\x00\x4d\x00\x0e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x2a\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x19\x00\x37\x00\x38\x00\x39\x00\x19\x00\x09\x00\x09\x00\x66\x00\x67\x00\x0c\x00\x0d\x00\x6a\x00\x6b\x00\x11\x00\x12\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x09\x00\x43\x00\x09\x00\x16\x00\x09\x00\x17\x00\x0f\x00\x09\x00\x09\x00\x8a\x00\x11\x00\x4d\x00\x11\x00\x4f\x00\x0f\x00\x11\x00\x05\x00\x06\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x2a\x00\x09\x00\x2a\x00\x09\x00\x0c\x00\x2a\x00\x0e\x00\x2f\x00\x09\x00\x0f\x00\x2f\x00\x0c\x00\x0d\x00\x37\x00\x38\x00\x39\x00\x38\x00\x39\x00\x09\x00\x38\x00\x39\x00\x0c\x00\x16\x00\x0e\x00\x16\x00\x45\x00\x20\x00\x21\x00\x22\x00\x23\x00\x4a\x00\x62\x00\x63\x00\x4d\x00\x65\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x16\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x09\x00\x09\x00\x09\x00\x0c\x00\x0c\x00\x0e\x00\x0e\x00\x66\x00\x67\x00\x47\x00\x11\x00\x6a\x00\x6b\x00\x05\x00\x06\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x09\x00\x2a\x00\x09\x00\x46\x00\x55\x00\x09\x00\x0f\x00\x58\x00\x46\x00\x8a\x00\x11\x00\x49\x00\x09\x00\x11\x00\x37\x00\x38\x00\x39\x00\x0b\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x09\x00\x3f\x00\x40\x00\x0b\x00\x09\x00\x06\x00\x0f\x00\x10\x00\x2a\x00\x0b\x00\x0f\x00\x2a\x00\x4a\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\x64\x00\x65\x00\x06\x00\x37\x00\x38\x00\x39\x00\x37\x00\x38\x00\x39\x00\x20\x00\x21\x00\x22\x00\x23\x00\x88\x00\x89\x00\x45\x00\x0b\x00\x0a\x00\x0b\x00\x0c\x00\x4a\x00\x0e\x00\x0b\x00\x4d\x00\x05\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x49\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x47\x00\x4a\x00\x09\x00\x4c\x00\x09\x00\x4e\x00\x48\x00\x66\x00\x67\x00\x19\x00\x11\x00\x6a\x00\x6b\x00\x64\x00\x65\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x09\x00\x2a\x00\x09\x00\x19\x00\x09\x00\x09\x00\x0f\x00\x09\x00\x0a\x00\x8a\x00\x11\x00\x0f\x00\x11\x00\x19\x00\x37\x00\x38\x00\x39\x00\x19\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x43\x00\x20\x00\x21\x00\x22\x00\x23\x00\x19\x00\x09\x00\x4a\x00\x2a\x00\x4c\x00\x2a\x00\x4e\x00\x0f\x00\x88\x00\x89\x00\x2f\x00\x13\x00\x14\x00\x55\x00\x88\x00\x89\x00\x37\x00\x38\x00\x39\x00\x38\x00\x39\x00\x1d\x00\x1e\x00\x1f\x00\x19\x00\x21\x00\x22\x00\x23\x00\x45\x00\x88\x00\x89\x00\x09\x00\x19\x00\x4a\x00\x18\x00\x2b\x00\x4d\x00\x0f\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x19\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x16\x00\x21\x00\x22\x00\x23\x00\x09\x00\x0a\x00\x19\x00\x66\x00\x67\x00\x09\x00\x0a\x00\x6a\x00\x6b\x00\x09\x00\x0a\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x00\x00\x01\x00\x09\x00\x64\x00\x65\x00\x8a\x00\x06\x00\x07\x00\x08\x00\x09\x00\x11\x00\x64\x00\x65\x00\x05\x00\x06\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x2a\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x46\x00\x36\x00\x09\x00\x38\x00\x39\x00\x09\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3f\x00\x40\x00\x3e\x00\x09\x00\x40\x00\x05\x00\x06\x00\x88\x00\x44\x00\x45\x00\x88\x00\x47\x00\x88\x00\x4c\x00\x4a\x00\x4e\x00\x4c\x00\x88\x00\x4e\x00\x09\x00\x0a\x00\x51\x00\x55\x00\x53\x00\x08\x00\x55\x00\x56\x00\x08\x00\x58\x00\x00\x00\x01\x00\x09\x00\x88\x00\x89\x00\x08\x00\x06\x00\x07\x00\x08\x00\x09\x00\x11\x00\x29\x00\x2a\x00\x09\x00\x09\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x83\x00\x0f\x00\x11\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\x2a\x00\x00\x00\x01\x00\x21\x00\x22\x00\x23\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x2a\x00\x36\x00\x09\x00\x38\x00\x39\x00\x2f\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x38\x00\x39\x00\x3e\x00\x09\x00\x40\x00\x55\x00\x56\x00\x81\x00\x44\x00\x45\x00\x88\x00\x47\x00\x42\x00\x43\x00\x4a\x00\x04\x00\x4c\x00\x4e\x00\x4e\x00\x55\x00\x56\x00\x51\x00\x06\x00\x53\x00\x01\x00\x55\x00\x56\x00\x44\x00\x58\x00\x06\x00\x07\x00\x08\x00\x48\x00\x4a\x00\x88\x00\x4c\x00\x0b\x00\x4e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x0b\x00\x09\x00\x55\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\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x61\x00\x62\x00\x63\x00\x09\x00\x65\x00\x02\x00\x88\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x01\x00\x03\x00\x3e\x00\x55\x00\x40\x00\x4b\x00\x0f\x00\x0d\x00\x44\x00\x45\x00\x41\x00\x47\x00\x4b\x00\x4b\x00\x4a\x00\x41\x00\x4c\x00\x55\x00\x4e\x00\x55\x00\x55\x00\x51\x00\x4b\x00\x53\x00\x50\x00\x55\x00\x56\x00\x54\x00\x58\x00\x59\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x01\x00\x50\x00\x55\x00\x4d\x00\x55\x00\x06\x00\x07\x00\x08\x00\x4f\x00\x46\x00\x46\x00\x4f\x00\x55\x00\x4f\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x03\x00\x03\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\x03\x00\x50\x00\x03\x00\x03\x00\x55\x00\x43\x00\x4a\x00\x4a\x00\x4a\x00\x50\x00\x50\x00\x50\x00\x55\x00\x55\x00\x4f\x00\x43\x00\x4d\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x55\x00\x43\x00\x3e\x00\x4f\x00\x40\x00\x54\x00\x54\x00\x57\x00\x44\x00\x45\x00\x54\x00\x47\x00\x54\x00\x54\x00\x4a\x00\x01\x00\x4c\x00\x54\x00\x4e\x00\x54\x00\x06\x00\x07\x00\x08\x00\x53\x00\x57\x00\x55\x00\x56\x00\x54\x00\x58\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x57\x00\x54\x00\x54\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\x54\x00\x54\x00\x57\x00\x04\x00\x49\x00\x57\x00\x57\x00\x57\x00\x54\x00\x43\x00\x47\x00\x42\x00\x03\x00\x42\x00\x55\x00\x01\x00\x50\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x55\x00\x46\x00\x3e\x00\x4f\x00\x40\x00\x46\x00\x46\x00\x12\x00\x44\x00\x45\x00\x55\x00\x47\x00\x46\x00\x46\x00\x4a\x00\x46\x00\x4c\x00\x4f\x00\x4e\x00\x1e\x00\x1f\x00\x20\x00\x4b\x00\x53\x00\x4b\x00\x55\x00\x56\x00\x4f\x00\x58\x00\x4f\x00\x41\x00\x4f\x00\x04\x00\x43\x00\x43\x00\x05\x00\x55\x00\x49\x00\x54\x00\x54\x00\x57\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x57\x00\x3b\x00\x57\x00\x57\x00\x3e\x00\x3f\x00\x40\x00\x01\x00\x54\x00\x54\x00\x44\x00\x45\x00\x50\x00\x47\x00\x55\x00\x57\x00\x4a\x00\x57\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x51\x00\x50\x00\x12\x00\x55\x00\x50\x00\x55\x00\x56\x00\x09\x00\x58\x00\x50\x00\x49\x00\x05\x00\x02\x00\x0f\x00\x1e\x00\x1f\x00\x20\x00\x55\x00\x4e\x00\x15\x00\x46\x00\x02\x00\x02\x00\x46\x00\x49\x00\x50\x00\x09\x00\x1d\x00\x1e\x00\x1f\x00\x4b\x00\x21\x00\x22\x00\x23\x00\x42\x00\x4b\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x2c\x00\x3b\x00\x4b\x00\x4f\x00\x3e\x00\x3f\x00\x40\x00\x01\x00\x4f\x00\x4f\x00\x44\x00\x45\x00\x42\x00\x47\x00\x59\x00\x50\x00\x4a\x00\x55\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x46\x00\x59\x00\x12\x00\x43\x00\x09\x00\x55\x00\x56\x00\x48\x00\x58\x00\x50\x00\x0f\x00\x59\x00\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\x31\x00\x32\x00\x33\x00\x3f\x00\x40\x00\x01\x00\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\x08\x00\xff\xff\x4a\x00\xff\xff\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\xff\xff\x12\x00\xff\xff\x09\x00\x55\x00\x56\x00\xff\xff\x58\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\x31\x00\x32\x00\x33\x00\x3f\x00\x40\x00\xff\xff\xff\xff\x12\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\xff\xff\x4e\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\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\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\x01\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x08\x00\x47\x00\xff\xff\xff\xff\x4a\x00\x09\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x12\x00\x0f\x00\xff\xff\x09\x00\xff\xff\x55\x00\x56\x00\x15\x00\x58\x00\x0f\x00\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x2c\x00\xff\xff\x01\x00\xff\xff\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\x12\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\xff\xff\x4e\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\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\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\x01\x00\xff\xff\xff\xff\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\x09\x00\x4c\x00\x12\x00\x4e\x00\x4f\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\x15\x00\x58\x00\x1e\x00\x1f\x00\x20\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x01\x00\x2c\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\x3f\x00\x40\x00\xff\xff\xff\xff\x12\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\xff\xff\x4e\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\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\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\x01\x00\xff\xff\xff\xff\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\x09\x00\x4c\x00\x12\x00\x4e\x00\x4f\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\x00\x1e\x00\x1f\x00\x20\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x01\x00\xff\xff\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\x3f\x00\x40\x00\xff\xff\xff\xff\x12\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\xff\xff\x4e\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\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\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\x01\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x08\x00\x47\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x12\x00\x09\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\x0f\x00\x58\x00\xff\xff\xff\xff\xff\xff\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\x12\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\xff\xff\x4e\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\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\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\x01\x00\xff\xff\xff\xff\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\x09\x00\x4c\x00\x12\x00\x4e\x00\x4f\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\x00\x1e\x00\x1f\x00\x20\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x01\x00\xff\xff\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\x12\x00\x44\x00\x45\x00\x46\x00\x47\x00\xff\xff\x49\x00\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\x3f\x00\x40\x00\xff\xff\xff\xff\x12\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\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\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\x01\x00\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\x09\x00\x4c\x00\x12\x00\x4e\x00\x4f\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\x00\x1e\x00\x1f\x00\x20\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\xff\xff\xff\xff\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\x01\x00\xff\xff\xff\xff\x3f\x00\x40\x00\xff\xff\xff\xff\x08\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\x09\x00\x4a\x00\xff\xff\x4c\x00\x12\x00\x4e\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\x55\x00\x56\x00\xff\xff\x58\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\xff\xff\x01\x00\xff\xff\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\x12\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\x3f\x00\x40\x00\xff\xff\xff\xff\x12\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\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\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\x01\x00\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\x09\x00\x4c\x00\x12\x00\x4e\x00\x4f\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\x00\x1e\x00\x1f\x00\x20\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x01\x00\xff\xff\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\x3f\x00\x40\x00\xff\xff\xff\xff\x12\x00\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\x1e\x00\x1f\x00\x20\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\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\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\x12\x00\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\x1e\x00\x1f\x00\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\x3b\x00\xff\xff\xff\xff\x3f\x00\x40\x00\x40\x00\x1e\x00\x1f\x00\x44\x00\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\x4a\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x55\x00\x56\x00\xff\xff\x58\x00\x36\x00\x37\x00\xff\xff\x39\x00\x12\x00\x3b\x00\xff\xff\xff\xff\x3f\x00\x40\x00\x40\x00\xff\xff\xff\xff\x44\x00\x44\x00\x45\x00\x1e\x00\x1f\x00\xff\xff\x4a\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x55\x00\x56\x00\xff\xff\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\x3b\x00\xff\xff\xff\xff\x3f\x00\x40\x00\x40\x00\x1e\x00\x1f\x00\x44\x00\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\x4a\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x55\x00\x56\x00\xff\xff\x58\x00\x36\x00\x37\x00\xff\xff\x39\x00\x12\x00\x3b\x00\xff\xff\xff\xff\x3f\x00\x40\x00\x40\x00\xff\xff\xff\xff\x44\x00\x44\x00\x45\x00\x1e\x00\x1f\x00\xff\xff\x4a\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x55\x00\x56\x00\xff\xff\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\x3b\x00\xff\xff\xff\xff\x3f\x00\x40\x00\x40\x00\x1e\x00\x1f\x00\x44\x00\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\x4a\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x55\x00\x56\x00\xff\xff\x58\x00\x36\x00\x37\x00\xff\xff\x39\x00\x12\x00\x3b\x00\xff\xff\xff\xff\x3f\x00\x40\x00\x40\x00\xff\xff\xff\xff\x44\x00\x44\x00\x45\x00\x1e\x00\x1f\x00\xff\xff\x4a\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x55\x00\x56\x00\xff\xff\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\x12\x00\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\x3b\x00\xff\xff\xff\xff\x3f\x00\x40\x00\x40\x00\x1e\x00\x1f\x00\x44\x00\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\x4a\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x55\x00\x56\x00\xff\xff\x58\x00\x36\x00\x37\x00\xff\xff\x39\x00\x12\x00\x3b\x00\xff\xff\xff\xff\x3f\x00\x40\x00\x40\x00\xff\xff\xff\xff\x44\x00\x44\x00\x45\x00\x1e\x00\x1f\x00\xff\xff\x4a\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\xff\xff\xff\xff\x09\x00\xff\xff\x0b\x00\x55\x00\x55\x00\x56\x00\x0f\x00\x58\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x36\x00\x37\x00\xff\xff\x39\x00\xff\xff\x3b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x40\x00\x21\x00\x22\x00\x23\x00\x44\x00\x45\x00\xff\xff\x09\x00\xff\xff\xff\xff\x4a\x00\x2b\x00\x4c\x00\x0f\x00\x4e\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\x00\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x2b\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x31\x00\x32\x00\xff\xff\x34\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\x09\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\x09\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x09\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x2b\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\x0f\x00\x09\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x2b\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\x0f\x00\x09\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x2b\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\x0f\x00\x09\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x2b\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\x0f\x00\x09\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x2b\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\x0f\x00\x09\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x2b\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x2b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x3f\x00\x40\x00\xff\xff\x3f\x00\x40\x00\x44\x00\xff\xff\x46\x00\x44\x00\xff\xff\x46\x00\x4a\x00\xff\xff\x4c\x00\x4a\x00\x4e\x00\x4c\x00\xff\xff\x4e\x00\x3f\x00\x40\x00\xff\xff\x55\x00\xff\xff\x44\x00\x55\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#+happyCheck = HappyA# "\xff\xff\x05\x00\x05\x00\x11\x00\x0a\x00\x09\x00\x09\x00\x0a\x00\x09\x00\x11\x00\x00\x00\x0f\x00\x09\x00\x81\x00\x0f\x00\x10\x00\x00\x00\x85\x00\x38\x00\x28\x00\x11\x00\x40\x00\x09\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x11\x00\x09\x00\x09\x00\x08\x00\x0c\x00\x09\x00\x0e\x00\x09\x00\x0a\x00\x09\x00\x55\x00\x0f\x00\x10\x00\x2a\x00\x43\x00\x0f\x00\x10\x00\x57\x00\x25\x00\x26\x00\x19\x00\x05\x00\x06\x00\x28\x00\x35\x00\x36\x00\x1f\x00\x38\x00\x39\x00\x00\x00\x09\x00\x0a\x00\x09\x00\x45\x00\x27\x00\x4b\x00\x09\x00\x4b\x00\x4a\x00\x55\x00\x4b\x00\x4d\x00\x0f\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\x51\x00\x21\x00\x22\x00\x23\x00\x55\x00\x43\x00\x51\x00\x66\x00\x67\x00\x4c\x00\x48\x00\x6a\x00\x6b\x00\x69\x00\x4b\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x05\x00\x41\x00\x82\x00\x4b\x00\x09\x00\x09\x00\x87\x00\x09\x00\x6c\x00\x8a\x00\x0f\x00\x6c\x00\x69\x00\x11\x00\x12\x00\x11\x00\x05\x00\x51\x00\x52\x00\x42\x00\x28\x00\x09\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x84\x00\x4f\x00\x09\x00\x44\x00\x82\x00\x09\x00\x09\x00\x68\x00\x0f\x00\x2a\x00\x09\x00\x0f\x00\x42\x00\x05\x00\x2f\x00\x42\x00\x0f\x00\x24\x00\x25\x00\x26\x00\x55\x00\x56\x00\x05\x00\x38\x00\x39\x00\x4f\x00\x21\x00\x22\x00\x23\x00\x21\x00\x22\x00\x23\x00\x09\x00\x45\x00\x21\x00\x22\x00\x23\x00\x09\x00\x4a\x00\x11\x00\x0c\x00\x4d\x00\x0e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x28\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x24\x00\x25\x00\x26\x00\x5f\x00\x42\x00\x43\x00\x44\x00\x66\x00\x67\x00\x09\x00\x28\x00\x6a\x00\x6b\x00\x09\x00\x42\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x09\x00\x09\x00\x42\x00\x47\x00\x68\x00\x09\x00\x0f\x00\x68\x00\x0b\x00\x8a\x00\x09\x00\x4c\x00\x68\x00\x11\x00\x55\x00\x56\x00\x0f\x00\x55\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x41\x00\x44\x00\x44\x00\x07\x00\x09\x00\x42\x00\x43\x00\x44\x00\x22\x00\x42\x00\x0f\x00\x44\x00\x09\x00\x07\x00\x4f\x00\x41\x00\x15\x00\x52\x00\x55\x00\x55\x00\x11\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x09\x00\x52\x00\x45\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x4a\x00\x2c\x00\x4d\x00\x4d\x00\x4f\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x44\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x3f\x00\x40\x00\x41\x00\x09\x00\x4c\x00\x55\x00\x4e\x00\x66\x00\x67\x00\x07\x00\x09\x00\x6a\x00\x6b\x00\x55\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x09\x00\x42\x00\x42\x00\x81\x00\x66\x00\x67\x00\x0f\x00\x85\x00\x09\x00\x8a\x00\x8b\x00\x09\x00\x41\x00\x4d\x00\x4f\x00\x4f\x00\x11\x00\x0f\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x86\x00\x09\x00\x52\x00\x09\x00\x3f\x00\x40\x00\x41\x00\x0f\x00\x21\x00\x22\x00\x23\x00\x11\x00\x12\x00\x15\x00\x2a\x00\x05\x00\x43\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x1d\x00\x1e\x00\x1f\x00\x4b\x00\x21\x00\x22\x00\x23\x00\x38\x00\x39\x00\x64\x00\x65\x00\x09\x00\x45\x00\x09\x00\x0c\x00\x2c\x00\x0e\x00\x4a\x00\x55\x00\x0f\x00\x4d\x00\x58\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\x22\x00\x09\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\x66\x00\x67\x00\x11\x00\x12\x00\x6a\x00\x6b\x00\x55\x00\x0b\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x09\x00\x66\x00\x67\x00\x09\x00\x09\x00\x65\x00\x0f\x00\x09\x00\x09\x00\x8a\x00\x09\x00\x11\x00\x11\x00\x12\x00\x0f\x00\x11\x00\x0f\x00\x10\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x43\x00\x2a\x00\x09\x00\x65\x00\x09\x00\x2a\x00\x60\x00\x0c\x00\x0f\x00\x0e\x00\x4d\x00\x65\x00\x4f\x00\x81\x00\x37\x00\x38\x00\x39\x00\x85\x00\x37\x00\x38\x00\x39\x00\x65\x00\x1d\x00\x1e\x00\x1f\x00\x45\x00\x21\x00\x22\x00\x23\x00\x09\x00\x4a\x00\x09\x00\x0c\x00\x4d\x00\x0e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x0b\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x0b\x00\x09\x00\x46\x00\x09\x00\x0c\x00\x49\x00\x0e\x00\x66\x00\x67\x00\x0f\x00\x10\x00\x6a\x00\x6b\x00\x05\x00\x06\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x09\x00\x4a\x00\x18\x00\x4c\x00\x1a\x00\x4e\x00\x0f\x00\x1d\x00\x1e\x00\x8a\x00\x09\x00\x21\x00\x65\x00\x81\x00\x0b\x00\x25\x00\x0f\x00\x85\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x86\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x3b\x00\x05\x00\x06\x00\x09\x00\x09\x00\x40\x00\x0c\x00\x43\x00\x0e\x00\x44\x00\x45\x00\x4d\x00\x11\x00\x4f\x00\x4a\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\x4a\x00\x65\x00\x4c\x00\x45\x00\x4e\x00\x55\x00\x55\x00\x56\x00\x4a\x00\x58\x00\x16\x00\x4d\x00\x19\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x2a\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x19\x00\x37\x00\x38\x00\x39\x00\x64\x00\x65\x00\x09\x00\x66\x00\x67\x00\x0c\x00\x0d\x00\x6a\x00\x6b\x00\x88\x00\x89\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x09\x00\x16\x00\x18\x00\x16\x00\x1a\x00\x17\x00\x0f\x00\x1d\x00\x1e\x00\x8a\x00\x09\x00\x21\x00\x88\x00\x89\x00\x16\x00\x25\x00\x0f\x00\x16\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x09\x00\x0a\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x3b\x00\x09\x00\x0a\x00\x09\x00\x09\x00\x40\x00\x0c\x00\x0d\x00\x44\x00\x44\x00\x45\x00\x16\x00\x11\x00\x46\x00\x4a\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\x61\x00\x62\x00\x63\x00\x45\x00\x65\x00\x55\x00\x55\x00\x56\x00\x4a\x00\x58\x00\x0b\x00\x4d\x00\x47\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x2a\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x09\x00\x37\x00\x38\x00\x39\x00\x09\x00\x0a\x00\x09\x00\x66\x00\x67\x00\x0c\x00\x0d\x00\x6a\x00\x6b\x00\x09\x00\x0a\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x09\x00\x0b\x00\x18\x00\x06\x00\x1a\x00\x06\x00\x0f\x00\x1d\x00\x1e\x00\x8a\x00\x09\x00\x21\x00\x88\x00\x89\x00\x0b\x00\x25\x00\x0f\x00\x0b\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x88\x00\x89\x00\x05\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x3b\x00\x64\x00\x65\x00\x0b\x00\x09\x00\x40\x00\x64\x00\x65\x00\x44\x00\x44\x00\x45\x00\x49\x00\x11\x00\x47\x00\x4a\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\x09\x00\x62\x00\x63\x00\x45\x00\x65\x00\x55\x00\x55\x00\x56\x00\x4a\x00\x58\x00\x48\x00\x4d\x00\x19\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x2a\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x19\x00\x37\x00\x38\x00\x39\x00\x05\x00\x06\x00\x16\x00\x66\x00\x67\x00\x09\x00\x0a\x00\x6a\x00\x6b\x00\x05\x00\x06\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x18\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x8a\x00\x09\x00\x19\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x09\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x09\x00\x21\x00\x22\x00\x23\x00\x09\x00\x25\x00\x26\x00\x0c\x00\x11\x00\x0e\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x88\x00\x89\x00\x19\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x3b\x00\x3f\x00\x40\x00\x3e\x00\x19\x00\x40\x00\x2a\x00\x29\x00\x2a\x00\x44\x00\x45\x00\x2f\x00\x47\x00\x19\x00\x4c\x00\x4a\x00\x4e\x00\x4c\x00\x19\x00\x4e\x00\x38\x00\x39\x00\x51\x00\x55\x00\x53\x00\x19\x00\x55\x00\x56\x00\x19\x00\x58\x00\x00\x00\x01\x00\x02\x00\x09\x00\x09\x00\x05\x00\x06\x00\x07\x00\x09\x00\x09\x00\x88\x00\x11\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x46\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x81\x00\x09\x00\x21\x00\x22\x00\x23\x00\x2a\x00\x25\x00\x26\x00\x09\x00\x11\x00\x2f\x00\x88\x00\x3f\x00\x40\x00\x0f\x00\x10\x00\x00\x00\x01\x00\x09\x00\x38\x00\x39\x00\x55\x00\x56\x00\x4a\x00\x09\x00\x4c\x00\x11\x00\x4e\x00\x3b\x00\x55\x00\x56\x00\x3e\x00\x08\x00\x40\x00\x2a\x00\x88\x00\x09\x00\x44\x00\x45\x00\x0c\x00\x47\x00\x0e\x00\x88\x00\x4a\x00\x08\x00\x4c\x00\x36\x00\x4e\x00\x38\x00\x39\x00\x51\x00\x2a\x00\x53\x00\x08\x00\x55\x00\x56\x00\x2f\x00\x58\x00\x01\x00\x02\x00\x09\x00\x83\x00\x05\x00\x06\x00\x07\x00\x38\x00\x39\x00\x09\x00\x11\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x09\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x88\x00\x09\x00\x21\x00\x22\x00\x23\x00\x2a\x00\x25\x00\x26\x00\x04\x00\x11\x00\x3f\x00\x40\x00\x42\x00\x43\x00\x06\x00\x44\x00\x4e\x00\x46\x00\x37\x00\x38\x00\x39\x00\x4a\x00\x48\x00\x4c\x00\x88\x00\x4e\x00\x0b\x00\x0b\x00\x3b\x00\x09\x00\x09\x00\x3e\x00\x55\x00\x40\x00\x2a\x00\x88\x00\x02\x00\x44\x00\x45\x00\x01\x00\x47\x00\x4b\x00\x03\x00\x4a\x00\x11\x00\x4c\x00\x36\x00\x4e\x00\x38\x00\x39\x00\x51\x00\x50\x00\x53\x00\x55\x00\x55\x00\x56\x00\x4b\x00\x58\x00\x59\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x01\x00\x02\x00\x09\x00\x04\x00\x05\x00\x06\x00\x07\x00\x24\x00\x41\x00\x4b\x00\x11\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x55\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x4b\x00\x09\x00\x21\x00\x22\x00\x23\x00\x2a\x00\x25\x00\x26\x00\x41\x00\x11\x00\x3f\x00\x40\x00\x50\x00\x55\x00\x55\x00\x44\x00\x4d\x00\x46\x00\x37\x00\x38\x00\x39\x00\x4a\x00\x55\x00\x4c\x00\x4f\x00\x4e\x00\x54\x00\x46\x00\x3b\x00\x46\x00\x28\x00\x3e\x00\x55\x00\x40\x00\x2a\x00\x55\x00\x28\x00\x44\x00\x45\x00\x2f\x00\x47\x00\x4f\x00\x28\x00\x4a\x00\x4f\x00\x4c\x00\x50\x00\x4e\x00\x38\x00\x39\x00\x28\x00\x28\x00\x53\x00\x50\x00\x55\x00\x56\x00\x55\x00\x58\x00\x01\x00\x02\x00\x09\x00\x4f\x00\x05\x00\x06\x00\x07\x00\x50\x00\x43\x00\x4a\x00\x11\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x4a\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x4a\x00\x55\x00\x21\x00\x22\x00\x23\x00\x2a\x00\x25\x00\x26\x00\x50\x00\x55\x00\x09\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x0f\x00\x43\x00\x37\x00\x38\x00\x39\x00\x4d\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x55\x00\x3b\x00\x43\x00\x4f\x00\x3e\x00\x54\x00\x40\x00\x21\x00\x22\x00\x23\x00\x44\x00\x45\x00\x07\x00\x47\x00\x54\x00\x54\x00\x4a\x00\x54\x00\x4c\x00\x57\x00\x4e\x00\x10\x00\x54\x00\x54\x00\x54\x00\x53\x00\x29\x00\x55\x00\x56\x00\x18\x00\x58\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x57\x00\x09\x00\x21\x00\x57\x00\x23\x00\x57\x00\x25\x00\x0f\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x15\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x57\x00\x57\x00\x1d\x00\x1e\x00\x1f\x00\x57\x00\x21\x00\x22\x00\x23\x00\x3b\x00\x54\x00\x54\x00\x3e\x00\x3f\x00\x40\x00\x57\x00\x54\x00\x2c\x00\x44\x00\x45\x00\x54\x00\x47\x00\x07\x00\x54\x00\x4a\x00\x54\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x49\x00\x10\x00\x47\x00\x42\x00\x55\x00\x55\x00\x56\x00\x43\x00\x58\x00\x18\x00\x09\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x09\x00\x21\x00\x28\x00\x23\x00\x42\x00\x25\x00\x0f\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x50\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x55\x00\x4f\x00\x46\x00\x20\x00\x21\x00\x22\x00\x23\x00\x3b\x00\x46\x00\x46\x00\x3e\x00\x3f\x00\x40\x00\x31\x00\x32\x00\x33\x00\x44\x00\x45\x00\x4b\x00\x47\x00\x07\x00\x46\x00\x4a\x00\x46\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x46\x00\x10\x00\x4b\x00\x4f\x00\x55\x00\x55\x00\x56\x00\x4f\x00\x58\x00\x18\x00\x09\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x09\x00\x21\x00\x41\x00\x23\x00\x4f\x00\x25\x00\x0f\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x43\x00\x4f\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x29\x00\x55\x00\x43\x00\x20\x00\x21\x00\x22\x00\x23\x00\x3b\x00\x20\x00\x54\x00\x57\x00\x3f\x00\x40\x00\x31\x00\x32\x00\x33\x00\x44\x00\x45\x00\x57\x00\x47\x00\x07\x00\x54\x00\x4a\x00\x54\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x57\x00\x10\x00\x54\x00\x57\x00\x13\x00\x55\x00\x56\x00\x49\x00\x58\x00\x18\x00\x57\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x51\x00\x07\x00\x21\x00\x50\x00\x23\x00\x50\x00\x25\x00\x55\x00\x50\x00\x55\x00\x10\x00\x50\x00\x49\x00\x50\x00\x55\x00\x50\x00\x20\x00\x46\x00\x18\x00\x0a\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0a\x00\x0a\x00\x21\x00\x3b\x00\x23\x00\x55\x00\x25\x00\x3f\x00\x40\x00\x4e\x00\x49\x00\x46\x00\x44\x00\x45\x00\x50\x00\x47\x00\x09\x00\x4b\x00\x4a\x00\x4b\x00\x4c\x00\x4b\x00\x4e\x00\x4b\x00\x42\x00\x59\x00\x4f\x00\x42\x00\x3b\x00\x55\x00\x56\x00\x4f\x00\x58\x00\x40\x00\x4f\x00\x55\x00\x50\x00\x44\x00\x45\x00\x48\x00\x47\x00\x07\x00\x46\x00\x4a\x00\x43\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x59\x00\x10\x00\x59\x00\xff\xff\x13\x00\x55\x00\x56\x00\x50\x00\x58\x00\x18\x00\x09\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x0f\x00\x09\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x15\x00\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\x2c\x00\x44\x00\x45\x00\x07\x00\x47\x00\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\xff\xff\x4e\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\x18\x00\x58\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\x09\x00\x21\x00\x0b\x00\x23\x00\xff\xff\x25\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x3b\x00\xff\xff\xff\xff\xff\xff\x3f\x00\x40\x00\xff\xff\x2b\x00\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\x07\x00\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\x4f\x00\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\x00\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\x09\x00\x21\x00\x0b\x00\x23\x00\xff\xff\x25\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x3b\x00\xff\xff\xff\xff\xff\xff\x3f\x00\x40\x00\xff\xff\x2b\x00\xff\xff\x44\x00\x45\x00\x07\x00\x47\x00\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\xff\xff\x4e\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\x18\x00\x58\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\x09\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x3b\x00\xff\xff\xff\xff\xff\xff\x3f\x00\x40\x00\xff\xff\x2b\x00\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\x07\x00\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\x4f\x00\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\x00\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\x07\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\x3b\x00\x23\x00\xff\xff\x25\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\x4b\x00\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x55\x00\x56\x00\xff\xff\x58\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\x07\x00\xff\xff\x4a\x00\xff\xff\x4c\x00\x4d\x00\x4e\x00\x4f\x00\xff\xff\x10\x00\xff\xff\xff\xff\x13\x00\x55\x00\x56\x00\xff\xff\x58\x00\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\x09\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\x40\x00\x1d\x00\x1e\x00\x1f\x00\x44\x00\x21\x00\x22\x00\x23\x00\x3b\x00\xff\xff\x4a\x00\xff\xff\x4c\x00\x40\x00\x4e\x00\x2b\x00\xff\xff\x44\x00\x45\x00\x07\x00\x47\x00\x55\x00\xff\xff\x4a\x00\x4b\x00\x4c\x00\xff\xff\x4e\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\x18\x00\x58\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\x07\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\x3b\x00\x23\x00\xff\xff\x25\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\x4f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x55\x00\x56\x00\xff\xff\x58\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x46\x00\x47\x00\x07\x00\x49\x00\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\x00\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\x07\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\x3b\x00\x23\x00\xff\xff\x25\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x55\x00\x56\x00\xff\xff\x58\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\x07\x00\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\x4f\x00\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\x00\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\x07\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\x13\x00\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\x3b\x00\x23\x00\xff\xff\x25\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x55\x00\x56\x00\xff\xff\x58\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\x07\x00\x47\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\x18\x00\x58\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\x07\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\x3b\x00\x23\x00\xff\xff\x25\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x55\x00\x56\x00\xff\xff\x58\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\x07\x00\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\x4f\x00\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\x00\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\x07\x00\x21\x00\xff\xff\x23\x00\xff\xff\x25\x00\xff\xff\xff\xff\xff\xff\x10\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x18\x00\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\x3b\x00\x23\x00\xff\xff\x25\x00\x3f\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\x55\x00\x56\x00\xff\xff\x58\x00\x40\x00\xff\xff\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x47\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\x18\x00\x58\x00\x1a\x00\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\x3f\x00\x40\x00\x25\x00\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x18\x00\x4c\x00\x1a\x00\x4e\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\x55\x00\xff\xff\x3b\x00\x25\x00\xff\xff\x3f\x00\x40\x00\x40\x00\xff\xff\xff\xff\x44\x00\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\x4a\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\xff\xff\xff\xff\xff\xff\x3b\x00\xff\xff\x55\x00\x55\x00\x56\x00\x40\x00\x58\x00\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\x18\x00\x58\x00\x1a\x00\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\x3f\x00\x40\x00\x25\x00\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x18\x00\x4c\x00\x1a\x00\x4e\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\x55\x00\xff\xff\x3b\x00\x25\x00\xff\xff\x3f\x00\x40\x00\x40\x00\xff\xff\xff\xff\x44\x00\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\x4a\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\xff\xff\xff\xff\xff\xff\x3b\x00\xff\xff\x55\x00\x55\x00\x56\x00\x40\x00\x58\x00\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x56\x00\x18\x00\x58\x00\x1a\x00\xff\xff\xff\xff\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\xff\xff\x3f\x00\x40\x00\x25\x00\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\x18\x00\x4c\x00\x1a\x00\x4e\x00\xff\xff\x1d\x00\x1e\x00\xff\xff\xff\xff\x21\x00\x55\x00\xff\xff\x3b\x00\x25\x00\xff\xff\x3f\x00\x40\x00\x40\x00\xff\xff\xff\xff\x44\x00\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\x4a\x00\x4a\x00\x4c\x00\x4c\x00\x4e\x00\x4e\x00\xff\xff\xff\xff\xff\xff\x3b\x00\xff\xff\x55\x00\x55\x00\x56\x00\x40\x00\x58\x00\xff\xff\xff\xff\x44\x00\x45\x00\xff\xff\x09\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\x0f\x00\x4e\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x55\x00\x56\x00\xff\xff\x58\x00\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x2b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x15\x00\x31\x00\x32\x00\xff\xff\x34\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x09\x00\x2c\x00\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\x09\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\x09\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\x09\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x09\x00\xff\xff\xff\xff\xff\xff\x2b\x00\xff\xff\x0f\x00\x09\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x2b\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\x0f\x00\x09\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x2b\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\x0f\x00\x09\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x2b\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\x0f\x00\x09\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x2b\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\x0f\x00\x09\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x2b\x00\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2b\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1d\x00\x1e\x00\x1f\x00\xff\xff\x21\x00\x22\x00\x23\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x2b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\x09\x00\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\xff\xff\xff\xff\xff\xff\x27\x00\x28\x00\x29\x00\x2a\x00\x3f\x00\x40\x00\xff\xff\x3f\x00\x40\x00\x44\x00\xff\xff\xff\xff\x44\x00\xff\xff\xff\xff\x4a\x00\xff\xff\x4c\x00\x4a\x00\x4e\x00\x4c\x00\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\x55\x00\xff\xff\xff\xff\x55\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\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"# happyTable :: HappyAddr-happyTable = HappyA# "\x00\x00\x96\x02\x9f\x02\xbd\x01\xbe\x01\x0d\x00\xbd\x01\xbe\x01\x06\x00\xf9\x01\xb3\x01\x0e\x00\x47\x00\x78\x02\x07\x00\x63\x02\xb3\x01\x58\x01\x79\x02\xde\x02\x75\x01\x1c\x02\x58\x01\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\x2e\x02\xcd\x01\x42\x02\x58\x01\xce\x01\x06\x00\xcf\x01\xbd\x01\xbe\x01\x06\x00\x0a\x00\x07\x00\x3b\x01\x49\x02\x5b\x01\x07\x00\x63\x02\xac\x01\x5a\x01\x5b\x01\x13\x02\xcd\x01\x53\x00\x58\x01\xce\x01\xd9\x02\xc8\x02\xfa\x01\xaa\x02\xb3\x01\x59\x01\x5a\x01\x5b\x01\x7f\x00\xe2\x01\xdc\x02\x0d\x00\x5b\x02\x80\x00\x0a\x00\xbf\x01\x81\x00\x0e\x00\x82\x00\x83\x00\x84\x00\x85\x00\x97\x02\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\xb4\x01\x16\x00\x17\x00\xc2\x01\x0a\x00\x2f\x02\xb4\x01\x42\x00\x91\x00\xd0\x01\xd4\x02\x92\x00\x93\x00\xb1\x02\xbf\x01\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x57\x02\x47\x01\xc0\x01\x94\x01\x0d\x00\x0a\x00\x98\x02\x47\x00\x43\x02\x99\x02\x0e\x00\x3c\x01\x64\x02\x47\x00\xb0\x01\x48\x00\xd7\x02\xb4\x01\x48\x01\x7d\x00\x40\x01\x78\x01\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\xd1\x01\x28\x02\x0d\x00\xb0\x02\xc0\x01\x0d\x00\x2a\x02\xa2\x02\x0e\x00\x7b\x01\x0d\x00\x0e\x00\x90\x01\x47\x00\xe2\x01\xcd\x01\x0e\x00\x3d\x00\xce\x01\x3e\x00\xc9\x02\xd6\x01\x18\x02\x7d\x01\x69\x00\x53\x02\x16\x00\x17\x00\xc2\x01\x16\x00\x17\x00\xc2\x01\x2c\x02\x7f\x00\x16\x00\x17\x00\xc2\x01\xcd\x01\x80\x00\xa5\x02\xce\x01\x81\x00\xcf\x01\x82\x00\x83\x00\x84\x00\x85\x00\xd8\x02\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x0a\x00\x0b\x00\xbb\x01\xe3\x01\xb1\x02\x29\x02\xc1\x02\x42\x00\x91\x00\xa5\x02\x2b\x02\x92\x00\x93\x00\xb5\x02\xbc\x01\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x0d\x00\xb9\x02\x2d\x02\xa6\x02\x3c\x02\xd5\x02\x0e\x00\x55\x02\xbb\x02\x56\x01\x0d\x00\x70\x02\xc3\x01\x67\x02\xc2\x02\x90\x01\x0e\x00\xbf\x02\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\x3e\x01\x55\x02\xa5\x02\x53\x00\x0d\x00\xa6\x02\xa7\x02\xa8\x02\x38\x01\x54\x01\x0e\x00\x77\x01\xc3\x02\x78\x01\x3e\x01\x47\x01\x3e\x00\x0a\x00\x0b\x00\x92\x02\x0a\x00\x3f\x00\x10\x00\x11\x00\x40\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x0a\x00\x48\x01\x7f\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x80\x00\x41\x00\x3d\x00\x81\x00\x3e\x00\x82\x00\x83\x00\x84\x00\x85\x00\x53\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\xa6\x02\xaa\x02\xa8\x02\xda\x02\xdb\x02\x0a\x00\x67\x02\x42\x00\x91\x00\xab\x02\xc0\x02\x92\x00\x93\x00\xab\x02\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x0d\x00\x77\xff\xcc\x02\x6a\xff\x42\x00\x43\x00\x0e\x00\xce\x02\x47\x00\xa8\x00\xa9\x00\x6a\xff\x47\x01\x47\x01\x77\xff\x21\x02\x48\x00\x22\x02\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\x9f\x01\x0d\x00\x48\x01\x48\x01\xd6\x02\xad\x02\xae\x02\x0e\x00\xac\x02\xad\x02\xae\x02\x8f\x02\xcd\x01\x3e\x00\x49\x00\x19\x02\x77\x02\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x5f\x01\x13\x00\x14\x00\x90\x01\x16\x00\x17\x00\x52\x01\x4e\x00\x4f\x00\x1f\x02\x94\x02\x20\x02\x7f\x00\x0d\x00\x3d\x00\x41\x00\x3e\x00\x80\x00\x0a\x00\x0e\x00\x81\x00\x61\x02\x82\x00\x83\x00\x84\x00\x85\x00\xd2\x02\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x6d\x00\x47\x00\xdf\x01\x6d\x02\xe0\x01\x75\x02\xe1\x01\x42\x00\x91\x00\xd6\x01\xd7\x01\x92\x00\x93\x00\xe2\x01\x1d\x02\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x0d\x00\x42\x00\x43\x00\x47\x00\x47\x00\x7a\x02\x0e\x00\x47\x00\x0d\x00\xd3\x02\x06\x00\x48\x00\xd6\x01\xd8\x01\x0e\x00\x48\x00\x07\x00\x92\x01\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\xa7\x01\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\x67\x02\x65\x00\x0d\x00\x06\x00\x68\x02\xc5\x01\x47\x00\x67\x02\x0e\x00\x07\x00\x3e\x01\x6b\x02\x66\x00\x67\x00\x48\x00\x68\x00\x69\x00\x7d\x02\x2f\x02\xc7\x01\x69\x00\x84\x02\x77\x00\x13\x00\x14\x00\x7f\x00\x16\x00\x17\x00\x52\x01\xcd\x01\x80\x00\xfc\x01\xce\x01\x81\x00\xca\x02\x82\x00\x83\x00\x84\x00\x85\x00\xc5\x01\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\xfe\x01\x31\x02\xc7\x01\x69\x00\xff\x01\x47\x00\xcd\x01\x42\x00\x91\x00\x19\x02\x1a\x02\x92\x00\x93\x00\xd6\x01\xd9\x01\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x0d\x00\x6a\xff\x47\x00\x04\x02\x47\x00\x05\x02\x0e\x00\x47\x00\x0d\x00\xdd\x02\x48\x00\x6a\xff\x48\x00\x6a\xff\x0e\x00\x48\x00\xc4\x02\xc5\x02\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\x4f\x01\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\xc5\x01\xcd\x01\x7b\x01\x0d\x00\xce\x01\x7b\x01\xcb\x02\x97\x01\xcd\x01\x0e\x00\x98\x01\x19\x02\x1c\x02\x3d\x02\xc7\x01\x69\x00\x7d\x01\x69\x00\xcd\x01\x7d\x01\x69\x00\xce\x01\x08\x02\x90\x02\x09\x02\x7f\x00\xe5\x01\x16\x00\x17\x00\x5f\x00\x80\x00\x16\x02\xdc\x01\x81\x00\xdd\x01\x82\x00\x83\x00\x84\x00\x85\x00\x0a\x02\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\xcd\x01\xcd\x01\x47\x00\xce\x01\xce\x01\x91\x02\x25\x02\x42\x00\x91\x00\x0c\x02\x48\x00\x92\x00\x93\x00\xc6\x02\xc7\x02\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x0d\x00\xc5\x01\x47\x00\x0d\x02\x33\x01\x47\x00\x0e\x00\x34\x01\x7a\x00\xd1\x02\x48\x00\x7b\x00\x1d\x02\x48\x00\xc6\x01\xc7\x01\x69\x00\x51\x02\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\x06\x00\x2a\x00\x73\x00\x53\x02\x0d\x00\x9d\x01\x07\x00\x08\x00\xc5\x01\xa2\x01\x0e\x00\xc5\x01\x6b\x00\x54\x01\x74\x00\x55\x01\x75\x00\x56\x01\x8a\x02\x8b\x02\x9f\x01\xc8\x01\xc7\x01\x69\x00\xc9\x01\xc7\x01\x69\x00\x78\x00\x16\x00\x17\x00\x5f\x00\x44\x02\xb2\x02\x7f\x00\xa5\x01\x39\x02\x3a\x02\x3b\x02\x80\x00\x3c\x02\xaa\x01\x81\x00\xb1\x01\x82\x00\x83\x00\x84\x00\x85\x00\xb9\x01\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\xb5\x01\x5c\x00\x47\x00\x5d\x00\xc1\x01\x5e\x00\xe6\x01\x42\x00\x91\x00\xe7\x01\x48\x00\x92\x00\x93\x00\x8d\x02\x8b\x02\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x0d\x00\xc5\x01\x47\x00\xe9\x01\x47\x00\x0d\x00\x0e\x00\xbd\x01\x71\x02\xbc\x01\x48\x00\x0e\x00\x48\x00\xea\x01\xca\x01\xc7\x01\x69\x00\xeb\x01\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\x18\x02\x5e\x00\x16\x00\x17\x00\x5f\x00\xec\x01\x0d\x00\xdf\x01\xc5\x01\xe0\x01\x7b\x01\xe1\x01\x0e\x00\x44\x02\xb3\x02\x7c\x01\x33\x00\x5d\x01\xe2\x01\x44\x02\x62\x02\xcb\x01\xc7\x01\x69\x00\x7d\x01\x69\x00\x51\x01\x13\x00\x14\x00\xed\x01\x16\x00\x17\x00\x52\x01\x7f\x00\x44\x02\x65\x02\x0d\x00\xee\x01\x80\x00\xef\x01\x37\x00\x81\x00\x0e\x00\x82\x00\x83\x00\x84\x00\x85\x00\xf4\x01\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\xfa\x01\x16\x00\x17\x00\x4d\x01\xbd\x01\x72\x02\xf7\x01\x42\x00\x91\x00\xbd\x01\x73\x02\x92\x00\x93\x00\xbd\x01\x74\x02\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x60\x02\x35\x02\x36\x02\x37\x02\xb3\x01\x1e\x00\x47\x00\x10\x02\x11\x02\x56\x01\xab\x00\xac\x00\xad\x00\xa3\xfe\x48\x00\x13\x02\x14\x02\x22\x02\x23\x02\xae\x00\xaf\x00\xb0\x00\xb1\x00\x9b\x02\x9c\x02\x9d\x02\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\x20\x00\x21\x00\x22\x00\xba\x00\xbb\x00\x65\x00\xb4\x02\x34\x02\x35\x02\x36\x02\x37\x02\xa1\x02\x34\x02\x35\x02\x36\x02\x37\x02\x28\x01\x60\x01\x2a\x01\x68\x00\x69\x00\x2b\x01\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xbc\x00\x29\x00\xd3\x01\xd4\x01\xbd\x00\x2c\x01\x58\x00\x3e\x02\x3f\x02\x2d\x01\x2c\x00\x2d\x00\x2e\x01\x2e\x00\x2f\x01\xd5\x01\x61\x00\xd6\x01\x62\x00\x30\x01\x63\x00\xbd\x01\x41\x02\xb4\x01\x0a\x00\xbe\x00\x31\x01\x0a\x00\x0b\x00\x34\x01\x32\x00\xb3\x01\x1e\x00\x47\x00\x44\x02\x45\x02\x35\x01\xab\x00\xac\x00\xad\x00\xa3\xfe\x48\x00\x71\x00\x1c\x00\x47\x00\x0d\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\x36\x01\x0e\x00\x48\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\x20\x00\x21\x00\x22\x00\xba\x00\xbb\x00\x65\x00\x32\x00\x05\x00\x16\x00\x17\x00\x56\x00\xa4\x02\x34\x02\x35\x02\x36\x02\x37\x02\x7b\x01\x63\x01\x39\x01\x68\x00\x69\x00\x83\x01\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xbc\x00\x29\x00\x7d\x01\x69\x00\xbd\x00\x3a\x01\x58\x00\x0a\x00\x0b\x00\x40\x01\x2c\x00\x2d\x00\x42\x01\x2e\x00\x4a\x01\x4b\x01\x61\x00\x43\x01\x62\x00\x48\x01\x63\x00\x0a\x00\x0b\x00\xb4\x01\x45\x01\xbe\x00\x1e\x00\x0a\x00\x0b\x00\x53\x00\x32\x00\xab\x00\xac\x00\xad\x00\x4b\x01\x5c\x00\x84\x01\x7a\x01\x8b\x01\x7b\x01\xae\x00\xaf\x00\xb0\x00\xb1\x00\x8c\x01\x63\x00\x0a\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\x20\x00\x21\x00\x22\x00\xba\x00\xbb\x00\x56\x02\x34\x02\x35\x02\x36\x02\x37\x02\x33\x02\x34\x02\x35\x02\x36\x02\x37\x02\xda\x01\xdb\x01\xdc\x01\x64\x00\xdd\x01\xbe\x00\x6f\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xbc\x00\x29\x00\x05\x00\x0b\x00\xbd\x00\x0a\x00\x58\x00\xd1\x02\xb0\x02\xb7\x02\x2c\x00\x2d\x00\xb8\x02\x2e\x00\xb9\x02\xbb\x02\x61\x00\xbe\x02\x62\x00\x0a\x00\x63\x00\x0a\x00\x0a\x00\x5a\xfe\xbd\x02\xbe\x00\x6a\x02\x0a\x00\x0b\x00\x8a\x02\x32\x00\x5a\xfe\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\x0d\x01\x0e\x01\x0f\x01\x10\x01\x11\x01\x12\x01\x13\x01\x14\x01\x15\x01\x16\x01\x17\x01\x1e\x00\x6f\x02\xe2\x01\xce\x02\xe2\x01\xab\x00\xac\x00\xad\x00\xd0\x02\x8d\x02\x8f\x02\x94\x02\xe2\x01\x96\x02\xae\x00\xaf\x00\xb0\x00\xb1\x00\x9b\x02\x9e\x02\x9f\x02\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\x20\x00\x21\x00\x22\x00\xba\x00\xbb\x00\xa1\x02\x47\x02\x59\x02\x5a\x02\x0a\x00\x5d\x02\x5e\x02\x5f\x02\x60\x02\x47\x02\x6a\x02\x6f\x02\x0a\x00\xe2\x01\x77\x02\x7c\x02\x7d\x02\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xbc\x00\x29\x00\xe2\x01\x7f\x02\xbd\x00\x80\x02\x58\x00\x82\x02\x83\x02\xfc\x01\x2c\x00\x2d\x00\x84\x02\x2e\x00\x86\x02\x87\x02\x61\x00\x1e\x00\x62\x00\x88\x02\x63\x00\x89\x02\xab\x00\xac\x00\xad\x00\xbe\x00\xfc\x01\x0a\x00\x0b\x00\xfe\x01\x32\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xe9\x01\x01\x02\x02\x02\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\x20\x00\x21\x00\x22\x00\xba\x00\xbb\x00\x03\x02\x04\x02\xfc\x01\xb7\x01\x2a\x01\x07\x02\x08\x02\xfc\x01\x0c\x02\x10\x02\x16\x02\x25\x02\x31\x02\x41\x02\x0a\x00\x1e\x00\x47\x02\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xbc\x00\x29\x00\x0a\x00\x2b\xff\xbd\x00\x4b\x02\x58\x00\x2c\xff\x28\xff\x1f\x00\x2c\x00\x2d\x00\x0a\x00\x2e\x00\x26\xff\x27\xff\x61\x00\xa1\x01\x62\x00\xa4\x01\x63\x00\x20\x00\x21\x00\x22\x00\xa2\x01\xbe\x00\xa5\x01\x0a\x00\x0b\x00\xa7\x01\x32\x00\xac\x01\xae\x01\xaf\x01\xb7\x01\xb0\x01\xe5\x01\x4d\x01\x0a\x00\x2a\x01\xf2\x01\xf3\x01\xe9\x01\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\xf1\x01\x29\x00\xe9\x01\xf7\x01\xbf\x02\x2a\x00\x2b\x00\x1e\x00\xf4\x01\xf6\x01\x2c\x00\x2d\x00\x71\x00\x2e\x00\x0a\x00\xe9\x01\x2f\x00\xfc\x01\x30\x00\x3d\x00\x31\x00\x3e\x00\x45\x01\x38\x01\x1f\x00\x0a\x00\x42\x01\x0a\x00\x0b\x00\x0d\x00\x32\x00\x71\x00\x7b\x00\x4d\x01\x58\x01\x0e\x00\x20\x00\x21\x00\x22\x00\x0a\x00\x5d\x01\x3e\x00\x62\x01\x65\x01\x66\x01\x82\x01\x67\x01\x71\x00\x87\x01\x5f\x01\x13\x00\x14\x00\x86\x01\x16\x00\x17\x00\x52\x01\x8a\x01\x88\x01\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x6c\x01\x29\x00\x89\x01\x8b\x01\x33\x02\x2a\x00\x2b\x00\x1e\x00\x8e\x01\x8f\x01\x2c\x00\x2d\x00\x90\x01\x2e\x00\xff\xff\x71\x00\x2f\x00\x0a\x00\x30\x00\x3d\x00\x31\x00\x3e\x00\x76\x00\xff\xff\x1f\x00\x7c\x00\x0d\x00\x0a\x00\x0b\x00\x7d\x00\x32\x00\x0d\x00\x0e\x00\xff\xff\x00\x00\x00\x00\x20\x00\x21\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x02\x13\x00\x14\x00\x6e\x01\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x29\x00\x4d\x02\x4e\x02\x4f\x02\x2a\x00\x2b\x00\x45\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x46\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x3d\x00\x31\x00\x3e\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x0d\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x20\x00\x21\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x02\x13\x00\x14\x00\x6e\x01\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x29\x00\x4d\x02\x4e\x02\x50\x02\x2a\x00\x2b\x00\x00\x00\x00\x00\x1f\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x47\x00\x30\x00\x00\x00\x31\x00\x20\x00\x21\x00\x22\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x45\x00\x58\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x46\x00\x2e\x00\x00\x00\x00\x00\x61\x00\x0d\x00\x62\x00\x3d\x00\x63\x00\x3e\x00\x1f\x00\x0e\x00\x00\x00\x0d\x00\x00\x00\x0a\x00\x0b\x00\x3e\x00\x32\x00\x0e\x00\x00\x00\x00\x00\x20\x00\x21\x00\x22\x00\x5f\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x00\x00\x77\x00\x13\x00\x14\x00\x78\x00\x16\x00\x17\x00\x18\x00\x69\x01\x00\x00\x1e\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x1f\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x61\x00\x97\x01\x62\x00\x00\x00\x63\x00\x20\x00\x21\x00\x22\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x29\x00\x1e\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x0d\x00\x30\x00\x1f\x00\x31\x00\x39\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x3e\x00\x32\x00\x20\x00\x21\x00\x22\x00\x3f\x00\x10\x00\x11\x00\x40\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1e\x00\x6c\x01\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x00\x00\x1f\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x47\x00\x30\x00\x00\x00\x31\x00\x20\x00\x21\x00\x22\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x29\x00\x1e\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x0d\x00\x30\x00\x1f\x00\x31\x00\x39\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x20\x00\x21\x00\x22\x00\x5a\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1e\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x00\x00\x1f\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x47\x00\x30\x00\x00\x00\x31\x00\x20\x00\x21\x00\x22\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x45\x00\x58\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x46\x00\x2e\x00\x00\x00\x00\x00\x61\x00\x00\x00\x62\x00\x3d\x00\x63\x00\x3e\x00\x1f\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x0e\x00\x32\x00\x00\x00\x00\x00\x00\x00\x20\x00\x21\x00\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x01\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x1f\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x61\x00\x75\x01\x62\x00\x00\x00\x63\x00\x20\x00\x21\x00\x22\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x29\x00\x1e\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x0d\x00\x30\x00\x1f\x00\x31\x00\x39\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x20\x00\x21\x00\x22\x00\x66\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1e\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x1f\x00\x2c\x00\x2d\x00\x5c\xff\x2e\x00\x00\x00\x5c\xff\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x20\x00\x21\x00\x22\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x00\x00\x1f\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x20\x00\x21\x00\x22\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x29\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x61\x00\x0d\x00\x62\x00\x1f\x00\x63\x00\x95\x01\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x20\x00\x21\x00\x22\x00\x6a\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x29\x00\x45\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x00\x00\x46\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x26\x02\x2f\x00\x00\x00\x30\x00\x1f\x00\x31\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x5d\x01\x0a\x00\x0b\x00\x00\x00\x32\x00\x20\x00\x21\x00\x22\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\xac\x01\x5a\x01\x5b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x00\x00\x1e\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x1f\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x20\x00\x21\x00\x22\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1e\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x00\x00\x1f\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x20\x00\x21\x00\x22\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x29\x00\x1e\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x61\x00\x0d\x00\x62\x00\x1f\x00\x63\x00\x73\x01\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x20\x00\x21\x00\x22\x00\x6c\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1e\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x00\x00\x1f\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x20\x00\x21\x00\x22\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x00\x00\x29\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x20\x00\x21\x00\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x25\x00\x26\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x51\x00\x52\x00\x58\x00\x20\x00\x21\x00\x53\x00\x2c\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x61\x00\x6c\x00\xa4\x02\x6d\x00\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x25\x00\x26\x00\x00\x00\x28\x00\x1f\x00\x29\x00\x00\x00\x00\x00\x51\x00\x52\x00\x58\x00\x00\x00\x00\x00\x53\x00\x2c\x00\x2d\x00\x20\x00\x21\x00\x00\x00\x7f\x01\x61\x00\x80\x01\x62\x00\x81\x01\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x25\x00\x26\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x51\x00\x52\x00\x58\x00\x20\x00\x21\x00\x53\x00\x2c\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x61\x00\x6c\x00\xc5\x01\x6d\x00\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x25\x00\x26\x00\x00\x00\x28\x00\x1f\x00\x29\x00\x00\x00\x00\x00\x51\x00\x52\x00\x58\x00\x00\x00\x00\x00\x53\x00\x2c\x00\x2d\x00\x20\x00\x21\x00\x00\x00\x6b\x00\x61\x00\x6c\x00\x62\x00\xcd\x01\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x25\x00\x26\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x51\x00\x52\x00\x58\x00\x20\x00\x21\x00\x53\x00\x2c\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x7f\x01\x61\x00\x80\x01\x62\x00\x81\x01\x6f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x25\x00\x26\x00\x00\x00\x28\x00\x1f\x00\x29\x00\x00\x00\x00\x00\x51\x00\x52\x00\x58\x00\x00\x00\x00\x00\x53\x00\x2c\x00\x2d\x00\x20\x00\x21\x00\x00\x00\x6b\x00\x61\x00\x6c\x00\x62\x00\x6d\x00\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x25\x00\x26\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x00\x00\x51\x00\x52\x00\x58\x00\x20\x00\x21\x00\x53\x00\x2c\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x7f\x01\x59\x00\x80\x01\x5a\x00\x81\x01\x5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x25\x00\x26\x00\x00\x00\x28\x00\x1f\x00\x29\x00\x00\x00\x00\x00\x51\x00\x52\x00\x58\x00\x00\x00\x00\x00\x53\x00\x2c\x00\x2d\x00\x20\x00\x21\x00\x00\x00\x54\x00\x61\x00\x55\x00\x62\x00\x56\x00\x63\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x95\x01\x0a\x00\x0a\x00\x0b\x00\x0e\x00\x32\x00\x00\x00\x00\x00\x5e\x01\x34\x00\x00\x00\x25\x00\x26\x00\x00\x00\x28\x00\x00\x00\x29\x00\x00\x00\x51\x01\x13\x00\x14\x00\x58\x00\x16\x00\x17\x00\x52\x01\x2c\x00\x2d\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x61\x00\x3b\x00\x62\x00\x0e\x00\x6f\x00\x00\x00\x00\x00\x33\x00\x5d\x01\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x00\x00\x00\x00\x6d\x01\x13\x00\x14\x00\x6e\x01\x16\x00\x17\x00\x18\x00\x0d\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x37\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x6f\x01\x70\x01\x00\x00\x71\x01\x3a\x00\x10\x00\x11\x00\x36\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x6b\x01\x0d\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x10\x00\x11\x00\x36\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x0d\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x3b\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x00\x10\x00\x11\x00\x36\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x0d\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x6a\x01\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x00\x10\x00\x11\x00\x36\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x37\x00\x0d\x00\x00\x00\x73\x01\x00\x00\x00\x00\x00\x00\x0e\x00\x0d\x00\x00\x00\x00\x00\x5e\x01\x34\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x99\x01\x34\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x3b\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x01\x0e\x00\x0d\x00\x00\x00\x00\x00\x9a\x01\x34\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x34\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x68\x01\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x01\x0e\x00\x0d\x00\x00\x00\x00\x00\x9c\x01\x34\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x6b\x01\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x01\x0e\x00\x0d\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x6b\x01\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x0e\x00\x0d\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x5d\x01\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x3b\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x0e\x00\x0d\x00\x00\x00\x00\x00\x5e\x01\x34\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x3b\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x01\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x0d\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x68\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x62\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0f\xff\x0f\xff\x00\x00\x51\x00\x52\x00\x0f\xff\x00\x00\x0f\xff\x53\x00\x00\x00\x29\xff\x0f\xff\x00\x00\x0f\xff\x7f\x01\x0f\xff\x80\x01\x00\x00\x81\x01\x51\x00\x52\x00\x00\x00\x0f\xff\x00\x00\x53\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x18\x01\x19\x01\x1a\x01\x1b\x01\x1c\x01\x1d\x01\x1e\x01\x1f\x01\x20\x01\x21\x01\x22\x01\x23\x01\x24\x01\x25\x01\x26\x01\x27\x01\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#+happyTable = HappyA# "\x00\x00\x90\x02\xb0\x02\x9e\x02\x5f\x01\x0d\x00\xd6\x01\xd7\x01\x06\x00\xa3\x02\xb1\x01\x0e\x00\x47\x00\x5b\x02\x07\x00\x6a\x02\xb1\x01\xb4\x02\xfb\x01\x2c\x02\x48\x00\x32\x02\x61\x01\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\xbb\x01\xc1\x01\x45\x02\x26\x02\xc2\x01\x06\x00\xc3\x01\xd6\x01\xd7\x01\x06\x00\x0a\x00\x07\x00\x35\x01\x69\x00\x2d\x02\x07\x00\x6a\x02\xfc\x01\x49\x02\x64\x01\x27\x02\xda\x02\xdb\x02\xbc\x01\x6a\x00\x6b\x00\x28\x02\x6c\x00\x6d\x00\xb1\x01\xd6\x01\xd7\x01\xd6\x02\x7f\x00\x29\x02\xa4\x02\x0d\x00\x94\x01\x80\x00\x0a\x00\xd8\x01\x81\x00\x0e\x00\x82\x00\x83\x00\x84\x00\x85\x00\x91\x02\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\xb2\x01\x16\x00\x17\x00\xd1\x01\x0a\x00\xac\x01\xb2\x01\x42\x00\x91\x00\xc4\x01\x7d\x00\x92\x00\x93\x00\xa5\x02\xd8\x01\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x59\x02\x47\x01\xd9\x01\x75\x02\x0d\x00\x47\x00\x92\x02\x47\x00\x46\x02\x93\x02\x0e\x00\x36\x01\x6b\x02\xca\x01\x2e\x02\x48\x00\xde\x02\xb2\x01\x48\x01\x90\x01\x19\x02\x61\x01\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\xc5\x01\x53\x02\x0d\x00\x38\x01\xd9\x01\x0d\x00\x99\x02\xa7\x02\x0e\x00\x7b\x01\x0d\x00\x0e\x00\x90\x01\xd9\x02\xd4\x01\x1a\x02\x0e\x00\xa8\x01\x63\x01\x64\x01\x0a\x00\x0b\x00\xdc\x02\x7d\x01\x6d\x00\x55\x02\x16\x00\x17\x00\xd1\x01\x16\x00\x17\x00\xd1\x01\x61\x01\x7f\x00\x16\x00\x17\x00\xd1\x01\xc1\x01\x80\x00\x34\x01\xc2\x01\x81\x00\xc3\x01\x82\x00\x83\x00\x84\x00\x85\x00\x3d\x02\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x62\x01\x63\x01\x64\x01\xd5\x01\x9a\x02\x9b\x02\x9c\x02\x42\x00\x91\x00\x99\x02\x40\x02\x92\x00\x93\x00\x99\x02\x3e\x02\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x0d\x00\xd7\x02\x41\x02\x12\x02\x29\x02\x47\x00\x0e\x00\x55\x02\xd8\x02\x5d\x01\x0d\x00\x61\x02\xd2\x01\x75\x01\x0a\x00\x0b\x00\x0e\x00\xe4\x01\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\x47\x01\x53\x00\x38\x01\x9e\x02\x0d\x00\x9a\x02\xa4\x02\x9c\x02\x2c\x01\x9a\x02\x0e\x00\xd4\x02\x47\x00\xbd\x02\x9f\x01\x47\x01\x3e\x00\x48\x01\x0a\x00\x0a\x00\x78\x01\x3f\x00\x10\x00\x11\x00\x40\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\xc1\x02\x48\x01\x7f\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x80\x00\x41\x00\x3d\x00\x81\x00\x3e\x00\x82\x00\x83\x00\x84\x00\x85\x00\x53\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\xd5\x02\xa0\x02\xa1\x02\xc2\x02\x35\x02\x0a\x00\x36\x02\x42\x00\x91\x00\x9e\x02\xc6\x02\x92\x00\x93\x00\x0a\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x0d\x00\x77\xff\x90\x01\x5b\x02\x42\x00\x43\x00\x0e\x00\xb5\x02\x47\x00\xa8\x00\xa9\x00\x0d\x00\x47\x01\x3d\x00\x77\xff\x3e\x00\x48\x00\x0e\x00\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\xc5\x02\x0d\x00\x48\x01\x47\x00\x9f\x02\xa0\x02\xa1\x02\x0e\x00\x16\x00\x17\x00\x4d\x01\xca\x01\xcb\x01\x3e\x00\x49\x00\xc7\x02\x6a\xff\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x58\x01\x13\x00\x14\x00\x6a\xff\x16\x00\x17\x00\x52\x01\x4e\x00\x4f\x00\x8a\x02\x8b\x02\xc1\x01\x7f\x00\x0d\x00\xc2\x01\x41\x00\xb6\x02\x80\x00\x3b\x01\x0e\x00\x81\x00\x3c\x01\x82\x00\x83\x00\x84\x00\x85\x00\xd2\x02\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x63\x00\x47\x00\xe1\x01\x37\x02\xe2\x01\x38\x02\xe3\x01\x42\x00\x91\x00\xca\x01\xcc\x01\x92\x00\x93\x00\xe4\x01\xab\x02\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x0d\x00\x42\x00\x43\x00\x47\x00\x47\x00\xcc\x02\x0e\x00\x47\x00\x0d\x00\xd3\x02\x06\x00\x48\x00\xca\x01\xcd\x01\x0e\x00\x48\x00\x07\x00\x92\x01\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\xa7\x01\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\x6a\xff\xbd\x01\x0d\x00\xce\x02\xc1\x01\xbd\x01\x79\x02\xc2\x01\x0e\x00\xb7\x02\x6a\xff\x7a\x02\x6a\xff\x5b\x02\x2a\x02\xbf\x01\x6d\x00\x5c\x02\x3e\x02\xbf\x01\x6d\x00\x8f\x02\x77\x00\x13\x00\x14\x00\x7f\x00\x16\x00\x17\x00\x52\x01\xc1\x01\x80\x00\x33\x02\xc2\x01\x81\x00\xb8\x02\x82\x00\x83\x00\x84\x00\x85\x00\xad\x02\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x66\x02\xc1\x01\x7a\x00\x06\x00\xc2\x01\x7b\x00\xb9\x02\x42\x00\x91\x00\x07\x00\x32\x01\x92\x00\x93\x00\xc8\x02\xc9\x02\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x0d\x00\x54\x01\x20\x00\x55\x01\x21\x00\x56\x01\x0e\x00\x24\x00\x25\x00\xdd\x02\x0d\x00\x26\x00\x7b\x02\x5b\x02\x72\x02\x28\x00\x0e\x00\x5f\x02\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\x77\x02\xb4\x01\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\x29\x00\xca\x02\xcb\x02\xc1\x01\x47\x00\x58\x00\xc2\x01\x17\x02\xa9\x02\x2c\x00\x2d\x00\x3d\x00\x48\x00\x3e\x00\xe1\x01\x61\x00\xe2\x01\xa9\x02\xe3\x01\x63\x00\x5c\x00\x7e\x02\x5d\x00\x7f\x00\x5e\x00\xe4\x01\x0a\x00\x0b\x00\x80\x00\x32\x00\x85\x02\x81\x00\xfc\x01\x82\x00\x83\x00\x84\x00\x85\x00\xbd\x01\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\xfd\x01\x41\x02\xbf\x01\x6d\x00\x8d\x02\x8b\x02\xc1\x01\x42\x00\x91\x00\x2f\x02\x68\x02\x92\x00\x93\x00\x42\x02\xb2\x02\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x0d\x00\xfe\x01\x20\x00\x00\x02\x21\x00\x01\x02\x0e\x00\x24\x00\x25\x00\xd1\x02\x0d\x00\x26\x00\x42\x02\xb3\x02\x03\x02\x28\x00\x0e\x00\x04\x02\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\xd6\x01\x62\x02\x4f\x01\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\x29\x00\xd6\x01\x63\x02\xc1\x01\x47\x00\x58\x00\x2f\x02\x30\x02\x53\x00\x2c\x00\x2d\x00\x08\x02\x48\x00\x0d\x02\x54\x01\x61\x00\x77\x01\x62\x00\x78\x01\x63\x00\xdc\x01\xdd\x01\xde\x01\x7f\x00\xdf\x01\x0a\x00\x0a\x00\x0b\x00\x80\x00\x32\x00\x51\x02\x81\x00\x0c\x02\x82\x00\x83\x00\x84\x00\x85\x00\xbd\x01\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x33\x02\xbe\x01\xbf\x01\x6d\x00\xd6\x01\x64\x02\xc1\x01\x42\x00\x91\x00\x2f\x02\x32\x02\x92\x00\x93\x00\xd6\x01\x65\x02\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\x0d\x00\x53\x02\x20\x00\x9d\x01\x21\x00\x9f\x01\x0e\x00\x24\x00\x25\x00\xbc\x01\x0d\x00\x26\x00\x42\x02\x69\x02\xa2\x01\x28\x00\x0e\x00\xa5\x01\x7d\x00\x11\x00\x12\x00\x13\x00\x14\x00\x7e\x00\x16\x00\x17\x00\x18\x00\x42\x02\x6c\x02\xaf\x01\x77\x00\x13\x00\x14\x00\x78\x00\x16\x00\x17\x00\x18\x00\x29\x00\x0f\x02\x10\x02\xb2\x01\x47\x00\x58\x00\x12\x02\x13\x02\x53\x00\x2c\x00\x2d\x00\xb9\x01\x48\x00\xb5\x01\x5c\x00\x61\x00\x7a\x01\xd4\x01\x7b\x01\x63\x00\xd0\x01\x15\x02\xde\x01\x7f\x00\xdf\x01\x0a\x00\x0a\x00\x0b\x00\x80\x00\x32\x00\xe6\x01\x81\x00\xe8\x01\x82\x00\x83\x00\x84\x00\x85\x00\xbd\x01\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\xea\x01\xc0\x01\xbf\x01\x6d\x00\x1a\x02\x1b\x02\xeb\x01\x42\x00\x91\x00\xd6\x01\x1d\x02\x92\x00\x93\x00\x38\x02\x39\x02\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xef\x01\xb1\x01\xab\x00\xac\x00\x95\x02\x96\x02\xad\x00\xae\x00\x1e\x00\x5d\x01\xa3\xfe\xf3\x01\x97\x02\xaf\x00\xb0\x00\xb1\x00\xb2\x00\x1f\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\x20\x00\x0d\x00\x21\x00\x22\x00\x23\x00\x24\x00\xba\x00\x0e\x00\x47\x00\x26\x00\xbb\x00\x27\x00\xc1\x01\x28\x00\xbc\x00\xc2\x01\x48\x00\xaa\x02\x5a\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x42\x02\x43\x02\xf4\x01\x19\x00\x1a\x00\x1b\x00\x1c\x00\x29\x00\xc7\x01\xc8\x01\xbd\x00\xf5\x01\x58\x00\x7b\x01\x71\x00\x1c\x00\x2c\x00\x2d\x00\x97\x01\x2e\x00\xf6\x01\xc9\x01\x61\x00\xca\x01\x62\x00\xf7\x01\x63\x00\x7d\x01\x6d\x00\xb2\x01\x0a\x00\xbe\x00\xf8\x01\x0a\x00\x0b\x00\xf9\x01\x32\x00\xb1\x01\xab\x00\xac\x00\x47\x00\x2a\x01\xad\x00\xae\x00\x1e\x00\x2b\x01\xa3\xfe\x2d\x01\x48\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\x1f\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\x20\x00\x28\x01\x21\x00\x22\x00\x23\x00\x24\x00\xba\x00\x2e\x01\x47\x00\x26\x00\xbb\x00\x27\x00\x7b\x01\x28\x00\xbc\x00\x06\x00\x48\x00\x98\x01\x30\x01\x2a\x00\x73\x00\x07\x00\x08\x00\x32\x00\x05\x00\x47\x00\x7d\x01\x6d\x00\x0a\x00\x0b\x00\x6f\x00\x31\x01\x74\x00\x48\x00\x75\x00\x29\x00\x0a\x00\x0b\x00\xbd\x00\x39\x01\x58\x00\x69\x00\x34\x01\xc1\x01\x2c\x00\x2d\x00\xc2\x01\x2e\x00\x3b\x02\x38\x01\x61\x00\x3c\x01\x62\x00\x59\x01\x63\x00\x6c\x00\x6d\x00\xb2\x01\x7b\x01\xbe\x00\x3d\x01\x0a\x00\x0b\x00\x7c\x01\x32\x00\xab\x00\xac\x00\x47\x00\x3e\x01\xad\x00\xae\x00\x1e\x00\x7d\x01\x6d\x00\x40\x01\x48\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\x1f\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\x20\x00\x41\x01\x21\x00\x22\x00\x23\x00\x24\x00\xba\x00\x42\x01\x47\x00\x26\x00\xbb\x00\x27\x00\xbd\x01\x28\x00\xbc\x00\x43\x01\x48\x00\x0f\xff\x0f\xff\x4a\x01\x4b\x01\x45\x01\x0f\xff\x48\x01\x0f\xff\xce\x01\xbf\x01\x6d\x00\x0f\xff\x4b\x01\x0f\xff\x84\x01\x0f\xff\x8b\x01\x8c\x01\x29\x00\x65\x00\x66\x00\xbd\x00\x0f\xff\x58\x00\x69\x00\x67\x00\xbe\x00\x2c\x00\x2d\x00\x05\x00\x2e\x00\xd1\x02\x0b\x00\x61\x00\xa3\x02\x62\x00\x5c\x01\x63\x00\x6c\x00\x6d\x00\x5a\xfe\x5e\x02\xbe\x00\x0a\x00\x0a\x00\x0b\x00\xbd\x02\x32\x00\x5a\xfe\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x01\x01\x01\x02\x01\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\x0d\x01\x0e\x01\x0f\x01\x10\x01\x11\x01\x12\x01\x13\x01\x14\x01\x15\x01\x16\x01\x17\x01\xab\x00\xac\x00\x47\x00\x96\x02\xad\x00\xae\x00\x1e\x00\xbf\x02\xc0\x02\xc1\x02\x48\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\x1f\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\x20\x00\x0a\x00\x21\x00\x22\x00\x23\x00\x24\x00\xba\x00\xc4\x02\x47\x00\x26\x00\xbb\x00\x27\x00\xbd\x01\x28\x00\xbc\x00\xc5\x02\x48\x00\x51\x00\x52\x00\x79\x02\x0a\x00\xe4\x01\x53\x00\xce\x02\x29\xff\xcf\x01\xbf\x01\x6d\x00\x7f\x01\xe4\x01\x80\x01\xd0\x02\x81\x01\x8a\x02\x8d\x02\x29\x00\x8f\x02\x98\x02\xbd\x00\x0a\x00\x58\x00\x7b\x01\xe4\x01\xb0\x02\x2c\x00\x2d\x00\x83\x01\x2e\x00\xad\x02\xb2\x02\x61\x00\xaf\x02\x62\x00\x45\x02\x63\x00\x7d\x01\x6d\x00\x58\x02\x59\x02\xbe\x00\x5e\x02\x0a\x00\x0b\x00\x0a\x00\x32\x00\xab\x00\xac\x00\x47\x00\x68\x02\xad\x00\xae\x00\x1e\x00\x45\x02\x6e\x02\x6f\x02\x48\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\x1f\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\x20\x00\x70\x02\x21\x00\x22\x00\x23\x00\x24\x00\xba\x00\x71\x02\x0a\x00\x26\x00\xbb\x00\x27\x00\xbd\x01\x28\x00\xbc\x00\x79\x02\xe4\x01\x0d\x00\xbb\x02\x21\x02\x22\x02\x23\x02\x24\x02\x0e\x00\x7d\x02\xda\x01\xbf\x01\x6d\x00\x7e\x02\x98\x02\x21\x02\x22\x02\x23\x02\x24\x02\xe4\x01\x29\x00\x80\x02\x81\x02\xbd\x00\x82\x02\x58\x00\x16\x00\x17\x00\x56\x00\x2c\x00\x2d\x00\x1e\x00\x2e\x00\x83\x02\x84\x02\x61\x00\x85\x02\x62\x00\xed\x01\x63\x00\x1f\x00\x87\x02\x88\x02\x89\x02\xbe\x00\xb7\x01\x0a\x00\x0b\x00\x20\x00\x32\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\xea\x01\x0d\x00\x26\x00\xed\x01\x27\x00\x00\x02\x28\x00\x0e\x00\xa6\x02\x21\x02\x22\x02\x23\x02\x24\x02\x3e\x00\x56\x02\x21\x02\x22\x02\x23\x02\x24\x02\xed\x01\x03\x02\x58\x01\x13\x00\x14\x00\xed\x01\x16\x00\x17\x00\x52\x01\x29\x00\x06\x02\x07\x02\xbb\x02\x2a\x00\x2b\x00\xed\x01\x08\x02\x6c\x01\x2c\x00\x2d\x00\x0a\x02\x2e\x00\x1e\x00\x0b\x02\x2f\x00\x0c\x02\x30\x00\x3d\x00\x31\x00\x3e\x00\x2a\x01\x1f\x00\x15\x02\x1d\x02\x0a\x00\x0a\x00\x0b\x00\x1f\x02\x32\x00\x20\x00\x0d\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x0e\x00\x0d\x00\x26\x00\x2e\x02\x27\x00\x3b\x02\x28\x00\x0e\x00\x20\x02\x21\x02\x22\x02\x23\x02\x24\x02\x45\x02\x4c\x02\x13\x00\x14\x00\x6e\x01\x16\x00\x17\x00\x18\x00\x0a\x00\x4b\x02\x2b\xff\xe5\x01\x16\x00\x17\x00\x5f\x00\x29\x00\x2c\xff\x28\xff\x20\x02\x2a\x00\x2b\x00\x4d\x02\x4e\x02\x4f\x02\x2c\x00\x2d\x00\xa2\x01\x2e\x00\x1e\x00\x26\xff\x2f\x00\x27\xff\x30\x00\x3d\x00\x31\x00\x3e\x00\xa1\x01\x1f\x00\xa5\x01\xa4\x01\x0a\x00\x0a\x00\x0b\x00\xa7\x01\x32\x00\x20\x00\x0d\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x0e\x00\x0d\x00\x26\x00\xaa\x01\x27\x00\xab\x01\x28\x00\x0e\x00\x71\x02\x22\x02\x23\x02\x24\x02\xac\x01\xb4\x01\x4c\x02\x13\x00\x14\x00\x6e\x01\x16\x00\x17\x00\x18\x00\xb7\x01\x0a\x00\xe5\x01\x78\x00\x16\x00\x17\x00\x5f\x00\x29\x00\x4d\x01\xe8\x01\xea\x01\x2a\x00\x2b\x00\x4d\x02\x4e\x02\x50\x02\x2c\x00\x2d\x00\xed\x01\x2e\x00\x1e\x00\xee\x01\x2f\x00\xef\x01\x30\x00\x3d\x00\x31\x00\x3e\x00\xf1\x01\x45\x00\xf2\x01\xf3\x01\x46\x00\x0a\x00\x0b\x00\x2a\x01\x32\x00\x20\x00\xea\x01\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x45\x01\x1e\x00\x26\x00\x69\x00\x27\x00\x30\x01\x28\x00\x0a\x00\x69\x00\x0a\x00\x1f\x00\x69\x00\x7b\x00\x40\x01\x0a\x00\x69\x00\x4d\x01\x5b\x01\x20\x00\x5f\x01\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x60\x01\x61\x01\x26\x00\x29\x00\x27\x00\x0a\x00\x28\x00\x2a\x00\x2b\x00\x66\x01\x67\x01\x82\x01\x2c\x00\x2d\x00\x69\x00\x2e\x00\x87\x01\x86\x01\x2f\x00\x47\x00\x30\x00\x88\x01\x31\x00\x89\x01\x8a\x01\xff\xff\x8b\x01\x90\x01\x29\x00\x0a\x00\x0b\x00\x8e\x01\x32\x00\x58\x00\x8f\x01\x0a\x00\x69\x00\x2c\x00\x2d\x00\x7d\x00\x2e\x00\x1e\x00\x76\x00\x61\x00\x7c\x00\x62\x00\x3d\x00\x63\x00\x3e\x00\xff\xff\x45\x00\xff\xff\x00\x00\x46\x00\x0a\x00\x0b\x00\x0d\x00\x32\x00\x20\x00\x0d\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x0e\x00\x0d\x00\x26\x00\x00\x00\x27\x00\x00\x00\x28\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x5e\x00\x16\x00\x17\x00\x5f\x00\x58\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\x00\x00\x00\x00\x69\x01\x2c\x00\x2d\x00\x1e\x00\x2e\x00\x00\x00\x00\x00\x61\x00\x97\x01\x62\x00\x00\x00\x63\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x20\x00\x32\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x0d\x00\x26\x00\x95\x01\x27\x00\x00\x00\x28\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x57\x01\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x29\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x3b\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x1e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x39\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x0d\x00\x26\x00\x73\x01\x27\x00\x00\x00\x28\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x57\x01\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x29\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x3b\x00\x00\x00\x2c\x00\x2d\x00\x1e\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x47\x00\x30\x00\x00\x00\x31\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x20\x00\x32\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x0d\x00\x26\x00\x00\x00\x27\x00\x00\x00\x28\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x56\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x29\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x2b\x00\x00\x00\x37\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x1e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x39\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x1e\x00\x26\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x29\x00\x27\x00\x00\x00\x28\x00\x2a\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x47\x00\x30\x00\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x58\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x1e\x00\x00\x00\x61\x00\x00\x00\x62\x00\x3d\x00\x63\x00\x3e\x00\x00\x00\x45\x00\x00\x00\x00\x00\x46\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x0d\x00\x26\x00\x00\x00\x27\x00\x00\x00\x28\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x99\x01\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x52\x00\x51\x01\x13\x00\x14\x00\x53\x00\x16\x00\x17\x00\x52\x01\x29\x00\x00\x00\x6f\x00\x00\x00\x70\x00\x58\x00\x71\x00\x67\x01\x00\x00\x2c\x00\x2d\x00\x1e\x00\x2e\x00\x0a\x00\x00\x00\x61\x00\x75\x01\x62\x00\x00\x00\x63\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x20\x00\x32\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x1e\x00\x26\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x29\x00\x27\x00\x00\x00\x28\x00\x2a\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x39\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x58\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x5c\xff\x2e\x00\x1e\x00\x5c\xff\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x1e\x00\x26\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x29\x00\x27\x00\x00\x00\x28\x00\x2a\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x58\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x1e\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x95\x01\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x1e\x00\x26\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x45\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x29\x00\x27\x00\x00\x00\x28\x00\x2a\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x58\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x1e\x00\x2e\x00\x00\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x20\x00\x32\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x1e\x00\x26\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x29\x00\x27\x00\x00\x00\x28\x00\x2a\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x58\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x1e\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x73\x01\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x1e\x00\x26\x00\x00\x00\x27\x00\x00\x00\x28\x00\x00\x00\x00\x00\x00\x00\x1f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x29\x00\x27\x00\x00\x00\x28\x00\x2a\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x58\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x20\x00\x32\x00\x21\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x00\x00\x51\x00\x52\x00\x28\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x01\x20\x00\x80\x01\x21\x00\x81\x01\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x0a\x00\x00\x00\x29\x00\x28\x00\x00\x00\x51\x00\x52\x00\x58\x00\x00\x00\x00\x00\x53\x00\x2c\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x6f\x00\x61\x00\x70\x00\x62\x00\x71\x00\x63\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x0a\x00\x0a\x00\x0b\x00\x58\x00\x32\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x20\x00\x32\x00\x21\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x00\x00\x51\x00\x52\x00\x28\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7f\x01\x20\x00\x80\x01\x21\x00\x81\x01\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x0a\x00\x00\x00\x29\x00\x28\x00\x00\x00\x51\x00\x52\x00\x58\x00\x00\x00\x00\x00\x53\x00\x2c\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x6f\x00\x61\x00\x70\x00\x62\x00\xdc\x01\x63\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x0a\x00\x0a\x00\x0b\x00\x58\x00\x32\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x0b\x00\x20\x00\x32\x00\x21\x00\x00\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x00\x00\x51\x00\x52\x00\x28\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x00\x20\x00\x70\x00\x21\x00\x71\x00\x00\x00\x24\x00\x25\x00\x00\x00\x00\x00\x26\x00\x0a\x00\x00\x00\x29\x00\x28\x00\x00\x00\x51\x00\x52\x00\x58\x00\x00\x00\x00\x00\x53\x00\x2c\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x7f\x01\x61\x00\x80\x01\x62\x00\x81\x01\x63\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x0a\x00\x0a\x00\x0b\x00\x58\x00\x32\x00\x00\x00\x00\x00\x2c\x00\x2d\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x61\x00\x00\x00\x62\x00\x0e\x00\x65\x00\x00\x00\x00\x00\x33\x00\x56\x01\x00\x00\x00\x00\x0a\x00\x0b\x00\x00\x00\x32\x00\x00\x00\x00\x00\x6d\x01\x13\x00\x14\x00\x6e\x01\x16\x00\x17\x00\x18\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x00\x6f\x01\x70\x01\x00\x00\x71\x01\x3f\x00\x10\x00\x11\x00\x40\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0d\x00\x6c\x01\x39\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x10\x00\x11\x00\x36\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x6b\x01\x0d\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x10\x00\x11\x00\x36\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x0d\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x3b\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x00\x10\x00\x11\x00\x36\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x0d\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x6a\x01\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x00\x10\x00\x11\x00\x36\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x17\x02\x19\x00\x1a\x00\x1b\x00\x1c\x00\x37\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x56\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\xa8\x01\x63\x01\x64\x01\x0d\x00\x00\x00\x00\x00\x00\x00\x37\x00\x00\x00\x0e\x00\x0d\x00\x00\x00\x00\x00\x9a\x01\x34\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x9b\x01\x34\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x68\x01\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x01\x0e\x00\x0d\x00\x00\x00\x00\x00\x9c\x01\x34\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x6b\x01\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\x01\x0e\x00\x0d\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x6b\x01\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x0e\x00\x0d\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x56\x01\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x3b\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x37\x00\x0e\x00\x0d\x00\x00\x00\x00\x00\x57\x01\x34\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x3b\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x67\x01\x0e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x01\x13\x00\x14\x00\x00\x00\x16\x00\x17\x00\x52\x01\x0d\x00\x00\x00\x39\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x68\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4b\x02\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xad\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xae\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\x01\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x0d\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x00\x00\x00\x00\x00\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x51\x00\x52\x00\x00\x00\x51\x00\x52\x00\x53\x00\x00\x00\x00\x00\x53\x00\x00\x00\x00\x00\x54\x00\x00\x00\x55\x00\x6f\x00\x56\x00\x70\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x0a\x00\x18\x01\x19\x01\x1a\x01\x1b\x01\x1c\x01\x1d\x01\x1e\x01\x1f\x01\x20\x01\x21\x01\x22\x01\x23\x01\x24\x01\x25\x01\x26\x01\x27\x01\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\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"# happyReduceArr = Happy_Data_Array.array (4, 422) [ (4 , happyReduce_4),@@ -1377,58 +1377,58 @@ happyReduce_7 = happySpecReduce_1 2# happyReduction_7 happyReduction_7 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> happyIn9- (TokKeyword KwLet happy_var_1+ (TokKeyword KwAbstract happy_var_1 )} happyReduce_8 = happySpecReduce_1 2# happyReduction_8 happyReduction_8 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwIn happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> happyIn9- (TokKeyword KwIn happy_var_1+ (TokKeyword KwCoData happy_var_1 )} happyReduce_9 = happySpecReduce_1 2# happyReduction_9 happyReduction_9 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwWhere happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwCoInductive happy_var_1) -> happyIn9- (TokKeyword KwWhere happy_var_1+ (TokKeyword KwCoInductive happy_var_1 )} happyReduce_10 = happySpecReduce_1 2# happyReduction_10 happyReduction_10 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwWith happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwConstructor happy_var_1) -> happyIn9- (TokKeyword KwWith happy_var_1+ (TokKeyword KwConstructor happy_var_1 )} happyReduce_11 = happySpecReduce_1 2# happyReduction_11 happyReduction_11 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwRewrite happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> happyIn9- (TokKeyword KwRewrite happy_var_1+ (TokKeyword KwData happy_var_1 )} happyReduce_12 = happySpecReduce_1 2# happyReduction_12 happyReduction_12 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwField happy_var_1) -> happyIn9- (TokKeyword KwPostulate happy_var_1+ (TokKeyword KwField happy_var_1 )} happyReduce_13 = happySpecReduce_1 2# happyReduction_13 happyReduction_13 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwForall happy_var_1) -> happyIn9- (TokKeyword KwPrimitive happy_var_1+ (TokKeyword KwForall happy_var_1 )} happyReduce_14 = happySpecReduce_1 2# happyReduction_14 happyReduction_14 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> happyIn9- (TokKeyword KwOpen happy_var_1+ (TokKeyword KwHiding happy_var_1 )} happyReduce_15 = happySpecReduce_1 2# happyReduction_15@@ -1440,345 +1440,345 @@ happyReduce_16 = happySpecReduce_1 2# happyReduction_16 happyReduction_16 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwIn happy_var_1) -> happyIn9- (TokKeyword KwUsing happy_var_1+ (TokKeyword KwIn happy_var_1 )} happyReduce_17 = happySpecReduce_1 2# happyReduction_17 happyReduction_17 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwInductive happy_var_1) -> happyIn9- (TokKeyword KwHiding happy_var_1+ (TokKeyword KwInductive happy_var_1 )} happyReduce_18 = happySpecReduce_1 2# happyReduction_18 happyReduction_18 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> happyIn9- (TokKeyword KwRenaming happy_var_1+ (TokKeyword KwInfix happy_var_1 )} happyReduce_19 = happySpecReduce_1 2# happyReduction_19 happyReduction_19 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwTo happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> happyIn9- (TokKeyword KwTo happy_var_1+ (TokKeyword KwInfixL happy_var_1 )} happyReduce_20 = happySpecReduce_1 2# happyReduction_20 happyReduction_20 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwPublic happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> happyIn9- (TokKeyword KwPublic happy_var_1+ (TokKeyword KwInfixR happy_var_1 )} happyReduce_21 = happySpecReduce_1 2# happyReduction_21 happyReduction_21 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwInstance happy_var_1) -> happyIn9- (TokKeyword KwModule happy_var_1+ (TokKeyword KwInstance happy_var_1 )} happyReduce_22 = happySpecReduce_1 2# happyReduction_22 happyReduction_22 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> happyIn9- (TokKeyword KwData happy_var_1+ (TokKeyword KwLet happy_var_1 )} happyReduce_23 = happySpecReduce_1 2# happyReduction_23 happyReduction_23 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> happyIn9- (TokKeyword KwCoData happy_var_1+ (TokKeyword KwModule happy_var_1 )} happyReduce_24 = happySpecReduce_1 2# happyReduction_24 happyReduction_24 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> happyIn9- (TokKeyword KwRecord happy_var_1+ (TokKeyword KwMutual happy_var_1 )} happyReduce_25 = happySpecReduce_1 2# happyReduction_25 happyReduction_25 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwConstructor happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> happyIn9- (TokKeyword KwConstructor happy_var_1+ (TokKeyword KwOpen happy_var_1 )} happyReduce_26 = happySpecReduce_1 2# happyReduction_26 happyReduction_26 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwInductive happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwPatternSyn happy_var_1) -> happyIn9- (TokKeyword KwInductive happy_var_1+ (TokKeyword KwPatternSyn happy_var_1 )} happyReduce_27 = happySpecReduce_1 2# happyReduction_27 happyReduction_27 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwCoInductive happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> happyIn9- (TokKeyword KwCoInductive happy_var_1+ (TokKeyword KwPostulate happy_var_1 )} happyReduce_28 = happySpecReduce_1 2# happyReduction_28 happyReduction_28 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwField happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> happyIn9- (TokKeyword KwField happy_var_1+ (TokKeyword KwPrimitive happy_var_1 )} happyReduce_29 = happySpecReduce_1 2# happyReduction_29 happyReduction_29 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> happyIn9- (TokKeyword KwInfix happy_var_1+ (TokKeyword KwPrivate happy_var_1 )} happyReduce_30 = happySpecReduce_1 2# happyReduction_30 happyReduction_30 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> happyIn9- (TokKeyword KwInfixL happy_var_1+ (TokKeyword KwProp happy_var_1 )} happyReduce_31 = happySpecReduce_1 2# happyReduction_31 happyReduction_31 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwPublic happy_var_1) -> happyIn9- (TokKeyword KwInfixR happy_var_1+ (TokKeyword KwPublic happy_var_1 )} happyReduce_32 = happySpecReduce_1 2# happyReduction_32 happyReduction_32 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> happyIn9- (TokKeyword KwMutual happy_var_1+ (TokKeyword KwQuote happy_var_1 )} happyReduce_33 = happySpecReduce_1 2# happyReduction_33 happyReduction_33 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteContext happy_var_1) -> happyIn9- (TokKeyword KwAbstract happy_var_1+ (TokKeyword KwQuoteContext happy_var_1 )} happyReduce_34 = happySpecReduce_1 2# happyReduction_34 happyReduction_34 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteGoal happy_var_1) -> happyIn9- (TokKeyword KwPrivate happy_var_1+ (TokKeyword KwQuoteGoal happy_var_1 )} happyReduce_35 = happySpecReduce_1 2# happyReduction_35 happyReduction_35 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwInstance happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteTerm happy_var_1) -> happyIn9- (TokKeyword KwInstance happy_var_1+ (TokKeyword KwQuoteTerm happy_var_1 )} happyReduce_36 = happySpecReduce_1 2# happyReduction_36 happyReduction_36 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> happyIn9- (TokKeyword KwProp happy_var_1+ (TokKeyword KwRecord happy_var_1 )} happyReduce_37 = happySpecReduce_1 2# happyReduction_37 happyReduction_37 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> happyIn9- (TokKeyword KwSet happy_var_1+ (TokKeyword KwRenaming happy_var_1 )} happyReduce_38 = happySpecReduce_1 2# happyReduction_38 happyReduction_38 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwForall happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwRewrite happy_var_1) -> happyIn9- (TokKeyword KwForall happy_var_1+ (TokKeyword KwRewrite happy_var_1 )} happyReduce_39 = happySpecReduce_1 2# happyReduction_39 happyReduction_39 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwSyntax happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> happyIn9- (TokKeyword KwSyntax happy_var_1+ (TokKeyword KwSet happy_var_1 )} happyReduce_40 = happySpecReduce_1 2# happyReduction_40 happyReduction_40 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwPatternSyn happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwSyntax happy_var_1) -> happyIn9- (TokKeyword KwPatternSyn happy_var_1+ (TokKeyword KwSyntax happy_var_1 )} happyReduce_41 = happySpecReduce_1 2# happyReduction_41 happyReduction_41 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwOPTIONS happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwTactic happy_var_1) -> happyIn9- (TokKeyword KwOPTIONS happy_var_1+ (TokKeyword KwTactic happy_var_1 )} happyReduce_42 = happySpecReduce_1 2# happyReduction_42 happyReduction_42 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwBUILTIN happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwTo happy_var_1) -> happyIn9- (TokKeyword KwBUILTIN happy_var_1+ (TokKeyword KwTo happy_var_1 )} happyReduce_43 = happySpecReduce_1 2# happyReduction_43 happyReduction_43 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwREWRITE happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwUnquote happy_var_1) -> happyIn9- (TokKeyword KwREWRITE happy_var_1+ (TokKeyword KwUnquote happy_var_1 )} happyReduce_44 = happySpecReduce_1 2# happyReduction_44 happyReduction_44 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwIMPORT happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwUnquoteDecl happy_var_1) -> happyIn9- (TokKeyword KwIMPORT happy_var_1+ (TokKeyword KwUnquoteDecl happy_var_1 )} happyReduce_45 = happySpecReduce_1 2# happyReduction_45 happyReduction_45 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> happyIn9- (TokKeyword KwCOMPILED happy_var_1+ (TokKeyword KwUsing happy_var_1 )} happyReduce_46 = happySpecReduce_1 2# happyReduction_46 happyReduction_46 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_EXPORT happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwWhere happy_var_1) -> happyIn9- (TokKeyword KwCOMPILED_EXPORT happy_var_1+ (TokKeyword KwWhere happy_var_1 )} happyReduce_47 = happySpecReduce_1 2# happyReduction_47 happyReduction_47 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_DATA happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwWith happy_var_1) -> happyIn9- (TokKeyword KwCOMPILED_DATA happy_var_1+ (TokKeyword KwWith happy_var_1 )} happyReduce_48 = happySpecReduce_1 2# happyReduction_48 happyReduction_48 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_TYPE happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwBUILTIN happy_var_1) -> happyIn9- (TokKeyword KwCOMPILED_TYPE happy_var_1+ (TokKeyword KwBUILTIN happy_var_1 )} happyReduce_49 = happySpecReduce_1 2# happyReduction_49 happyReduction_49 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_EPIC happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED happy_var_1) -> happyIn9- (TokKeyword KwCOMPILED_EPIC happy_var_1+ (TokKeyword KwCOMPILED happy_var_1 )} happyReduce_50 = happySpecReduce_1 2# happyReduction_50 happyReduction_50 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_JS happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_DATA happy_var_1) -> happyIn9- (TokKeyword KwCOMPILED_JS happy_var_1+ (TokKeyword KwCOMPILED_DATA happy_var_1 )} happyReduce_51 = happySpecReduce_1 2# happyReduction_51 happyReduction_51 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwSTATIC happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_EPIC happy_var_1) -> happyIn9- (TokKeyword KwSTATIC happy_var_1+ (TokKeyword KwCOMPILED_EPIC happy_var_1 )} happyReduce_52 = happySpecReduce_1 2# happyReduction_52 happyReduction_52 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwIMPOSSIBLE happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_EXPORT happy_var_1) -> happyIn9- (TokKeyword KwIMPOSSIBLE happy_var_1+ (TokKeyword KwCOMPILED_EXPORT happy_var_1 )} happyReduce_53 = happySpecReduce_1 2# happyReduction_53 happyReduction_53 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwETA happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_JS happy_var_1) -> happyIn9- (TokKeyword KwETA happy_var_1+ (TokKeyword KwCOMPILED_JS happy_var_1 )} happyReduce_54 = happySpecReduce_1 2# happyReduction_54 happyReduction_54 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwNO_TERMINATION_CHECK happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_TYPE happy_var_1) -> happyIn9- (TokKeyword KwNO_TERMINATION_CHECK happy_var_1+ (TokKeyword KwCOMPILED_TYPE happy_var_1 )} happyReduce_55 = happySpecReduce_1 2# happyReduction_55 happyReduction_55 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwNON_TERMINATING happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwETA happy_var_1) -> happyIn9- (TokKeyword KwNON_TERMINATING happy_var_1+ (TokKeyword KwETA happy_var_1 )} happyReduce_56 = happySpecReduce_1 2# happyReduction_56 happyReduction_56 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwTERMINATING happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwIMPORT happy_var_1) -> happyIn9- (TokKeyword KwTERMINATING happy_var_1+ (TokKeyword KwIMPORT happy_var_1 )} happyReduce_57 = happySpecReduce_1 2# happyReduction_57 happyReduction_57 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwMEASURE happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwIMPOSSIBLE happy_var_1) -> happyIn9- (TokKeyword KwMEASURE happy_var_1+ (TokKeyword KwIMPOSSIBLE happy_var_1 )} happyReduce_58 = happySpecReduce_1 2# happyReduction_58 happyReduction_58 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteGoal happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwMEASURE happy_var_1) -> happyIn9- (TokKeyword KwQuoteGoal happy_var_1+ (TokKeyword KwMEASURE happy_var_1 )} happyReduce_59 = happySpecReduce_1 2# happyReduction_59 happyReduction_59 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteContext happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwNO_TERMINATION_CHECK happy_var_1) -> happyIn9- (TokKeyword KwQuoteContext happy_var_1+ (TokKeyword KwNO_TERMINATION_CHECK happy_var_1 )} happyReduce_60 = happySpecReduce_1 2# happyReduction_60 happyReduction_60 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwNON_TERMINATING happy_var_1) -> happyIn9- (TokKeyword KwQuote happy_var_1+ (TokKeyword KwNON_TERMINATING happy_var_1 )} happyReduce_61 = happySpecReduce_1 2# happyReduction_61 happyReduction_61 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteTerm happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwOPTIONS happy_var_1) -> happyIn9- (TokKeyword KwQuoteTerm happy_var_1+ (TokKeyword KwOPTIONS happy_var_1 )} happyReduce_62 = happySpecReduce_1 2# happyReduction_62 happyReduction_62 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwTactic happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwREWRITE happy_var_1) -> happyIn9- (TokKeyword KwTactic happy_var_1+ (TokKeyword KwREWRITE happy_var_1 )} happyReduce_63 = happySpecReduce_1 2# happyReduction_63 happyReduction_63 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwUnquote happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwSTATIC happy_var_1) -> happyIn9- (TokKeyword KwUnquote happy_var_1+ (TokKeyword KwSTATIC happy_var_1 )} happyReduce_64 = happySpecReduce_1 2# happyReduction_64 happyReduction_64 happy_x_1- = case happyOutTok happy_x_1 of { (TokKeyword KwUnquoteDecl happy_var_1) -> + = case happyOutTok happy_x_1 of { (TokKeyword KwTERMINATING happy_var_1) -> happyIn9- (TokKeyword KwUnquoteDecl happy_var_1+ (TokKeyword KwTERMINATING happy_var_1 )} happyReduce_65 = happySpecReduce_1 2# happyReduction_65@@ -5218,64 +5218,64 @@ let cont i = happyDoAction i tk action sts stk in case tk of { TokEOF -> happyDoAction 89# tk action sts stk;- TokKeyword KwLet happy_dollar_dollar -> cont 1#;- TokKeyword KwIn happy_dollar_dollar -> cont 2#;- TokKeyword KwWhere happy_dollar_dollar -> cont 3#;- TokKeyword KwWith happy_dollar_dollar -> cont 4#;- TokKeyword KwRewrite happy_dollar_dollar -> cont 5#;- TokKeyword KwPostulate happy_dollar_dollar -> cont 6#;- TokKeyword KwPrimitive happy_dollar_dollar -> cont 7#;- TokKeyword KwOpen happy_dollar_dollar -> cont 8#;+ TokKeyword KwAbstract happy_dollar_dollar -> cont 1#;+ TokKeyword KwCoData happy_dollar_dollar -> cont 2#;+ TokKeyword KwCoInductive happy_dollar_dollar -> cont 3#;+ TokKeyword KwConstructor happy_dollar_dollar -> cont 4#;+ TokKeyword KwData happy_dollar_dollar -> cont 5#;+ TokKeyword KwField happy_dollar_dollar -> cont 6#;+ TokKeyword KwForall happy_dollar_dollar -> cont 7#;+ TokKeyword KwHiding happy_dollar_dollar -> cont 8#; TokKeyword KwImport happy_dollar_dollar -> cont 9#;- TokKeyword KwUsing happy_dollar_dollar -> cont 10#;- TokKeyword KwHiding happy_dollar_dollar -> cont 11#;- TokKeyword KwRenaming happy_dollar_dollar -> cont 12#;- TokKeyword KwTo happy_dollar_dollar -> cont 13#;- TokKeyword KwPublic happy_dollar_dollar -> cont 14#;- TokKeyword KwModule happy_dollar_dollar -> cont 15#;- TokKeyword KwData happy_dollar_dollar -> cont 16#;- TokKeyword KwCoData happy_dollar_dollar -> cont 17#;- TokKeyword KwRecord happy_dollar_dollar -> cont 18#;- TokKeyword KwConstructor happy_dollar_dollar -> cont 19#;- TokKeyword KwInductive happy_dollar_dollar -> cont 20#;- TokKeyword KwCoInductive happy_dollar_dollar -> cont 21#;- TokKeyword KwField happy_dollar_dollar -> cont 22#;- TokKeyword KwInfix happy_dollar_dollar -> cont 23#;- TokKeyword KwInfixL happy_dollar_dollar -> cont 24#;- TokKeyword KwInfixR happy_dollar_dollar -> cont 25#;- TokKeyword KwMutual happy_dollar_dollar -> cont 26#;- TokKeyword KwAbstract happy_dollar_dollar -> cont 27#;- TokKeyword KwPrivate happy_dollar_dollar -> cont 28#;- TokKeyword KwInstance happy_dollar_dollar -> cont 29#;- TokKeyword KwProp happy_dollar_dollar -> cont 30#;- TokKeyword KwSet happy_dollar_dollar -> cont 31#;- TokKeyword KwForall happy_dollar_dollar -> cont 32#;- TokKeyword KwSyntax happy_dollar_dollar -> cont 33#;- TokKeyword KwPatternSyn happy_dollar_dollar -> cont 34#;- TokKeyword KwOPTIONS happy_dollar_dollar -> cont 35#;- TokKeyword KwBUILTIN happy_dollar_dollar -> cont 36#;- TokKeyword KwREWRITE happy_dollar_dollar -> cont 37#;- TokKeyword KwIMPORT happy_dollar_dollar -> cont 38#;- TokKeyword KwIMPOSSIBLE happy_dollar_dollar -> cont 39#;- TokKeyword KwETA happy_dollar_dollar -> cont 40#;- TokKeyword KwNO_TERMINATION_CHECK happy_dollar_dollar -> cont 41#;- TokKeyword KwNON_TERMINATING happy_dollar_dollar -> cont 42#;- TokKeyword KwTERMINATING happy_dollar_dollar -> cont 43#;- TokKeyword KwMEASURE happy_dollar_dollar -> cont 44#;- TokKeyword KwCOMPILED happy_dollar_dollar -> cont 45#;+ TokKeyword KwIn happy_dollar_dollar -> cont 10#;+ TokKeyword KwInductive happy_dollar_dollar -> cont 11#;+ TokKeyword KwInfix happy_dollar_dollar -> cont 12#;+ TokKeyword KwInfixL happy_dollar_dollar -> cont 13#;+ TokKeyword KwInfixR happy_dollar_dollar -> cont 14#;+ TokKeyword KwInstance happy_dollar_dollar -> cont 15#;+ TokKeyword KwLet happy_dollar_dollar -> cont 16#;+ TokKeyword KwModule happy_dollar_dollar -> cont 17#;+ TokKeyword KwMutual happy_dollar_dollar -> cont 18#;+ TokKeyword KwOpen happy_dollar_dollar -> cont 19#;+ TokKeyword KwPatternSyn happy_dollar_dollar -> cont 20#;+ TokKeyword KwPostulate happy_dollar_dollar -> cont 21#;+ TokKeyword KwPrimitive happy_dollar_dollar -> cont 22#;+ TokKeyword KwPrivate happy_dollar_dollar -> cont 23#;+ TokKeyword KwProp happy_dollar_dollar -> cont 24#;+ TokKeyword KwPublic happy_dollar_dollar -> cont 25#;+ TokKeyword KwQuote happy_dollar_dollar -> cont 26#;+ TokKeyword KwQuoteContext happy_dollar_dollar -> cont 27#;+ TokKeyword KwQuoteGoal happy_dollar_dollar -> cont 28#;+ TokKeyword KwQuoteTerm happy_dollar_dollar -> cont 29#;+ TokKeyword KwRecord happy_dollar_dollar -> cont 30#;+ TokKeyword KwRenaming happy_dollar_dollar -> cont 31#;+ TokKeyword KwRewrite happy_dollar_dollar -> cont 32#;+ TokKeyword KwSet happy_dollar_dollar -> cont 33#;+ TokKeyword KwSyntax happy_dollar_dollar -> cont 34#;+ TokKeyword KwTactic happy_dollar_dollar -> cont 35#;+ TokKeyword KwTo happy_dollar_dollar -> cont 36#;+ TokKeyword KwUnquote happy_dollar_dollar -> cont 37#;+ TokKeyword KwUnquoteDecl happy_dollar_dollar -> cont 38#;+ TokKeyword KwUsing happy_dollar_dollar -> cont 39#;+ TokKeyword KwWhere happy_dollar_dollar -> cont 40#;+ TokKeyword KwWith happy_dollar_dollar -> cont 41#;+ TokKeyword KwBUILTIN happy_dollar_dollar -> cont 42#;+ TokKeyword KwCOMPILED happy_dollar_dollar -> cont 43#;+ TokKeyword KwCOMPILED_DATA happy_dollar_dollar -> cont 44#;+ TokKeyword KwCOMPILED_EPIC happy_dollar_dollar -> cont 45#; TokKeyword KwCOMPILED_EXPORT happy_dollar_dollar -> cont 46#;- TokKeyword KwCOMPILED_DATA happy_dollar_dollar -> cont 47#;+ TokKeyword KwCOMPILED_JS happy_dollar_dollar -> cont 47#; TokKeyword KwCOMPILED_TYPE happy_dollar_dollar -> cont 48#;- TokKeyword KwCOMPILED_EPIC happy_dollar_dollar -> cont 49#;- TokKeyword KwCOMPILED_JS happy_dollar_dollar -> cont 50#;- TokKeyword KwSTATIC happy_dollar_dollar -> cont 51#;- TokKeyword KwQuoteGoal happy_dollar_dollar -> cont 52#;- TokKeyword KwQuoteContext happy_dollar_dollar -> cont 53#;- TokKeyword KwQuote happy_dollar_dollar -> cont 54#;- TokKeyword KwQuoteTerm happy_dollar_dollar -> cont 55#;- TokKeyword KwTactic happy_dollar_dollar -> cont 56#;- TokKeyword KwUnquote happy_dollar_dollar -> cont 57#;- TokKeyword KwUnquoteDecl happy_dollar_dollar -> cont 58#;+ TokKeyword KwETA happy_dollar_dollar -> cont 49#;+ TokKeyword KwIMPORT happy_dollar_dollar -> cont 50#;+ TokKeyword KwIMPOSSIBLE happy_dollar_dollar -> cont 51#;+ TokKeyword KwMEASURE happy_dollar_dollar -> cont 52#;+ TokKeyword KwNO_TERMINATION_CHECK happy_dollar_dollar -> cont 53#;+ TokKeyword KwNON_TERMINATING happy_dollar_dollar -> cont 54#;+ TokKeyword KwOPTIONS happy_dollar_dollar -> cont 55#;+ TokKeyword KwREWRITE happy_dollar_dollar -> cont 56#;+ TokKeyword KwSTATIC happy_dollar_dollar -> cont 57#;+ TokKeyword KwTERMINATING happy_dollar_dollar -> cont 58#; TokSetN happy_dollar_dollar -> cont 59#; TokTeX happy_dollar_dollar -> cont 60#; TokComment happy_dollar_dollar -> cont 61#;@@ -5634,7 +5634,7 @@ {-# LINE 1 "<built-in>" #-} {-# LINE 1 "<command-line>" #-} {-# LINE 11 "<command-line>" #-}-{-# LINE 1 "/usr/local/stow/ghc-7.10.2/lib/ghc-7.10.2/include/ghcversion.h" #-}+{-# LINE 1 "/usr/local/stow/ghc-7.10.3/lib/ghc-7.10.3/include/ghcversion.h" #-}
src/data/agda.sty view
@@ -313,6 +313,7 @@ {\AgdaNoSpaceMath{\AgdaFontStyle{\textcolor{AgdaArgument}{\AgdaLink{#1}}}}} % Other aspect commands.+\newcommand{\AgdaFixityOp} [1]{\AgdaNoSpaceMath{$#1$}} \newcommand{\AgdaDottedPattern} [1]{\textcolor{AgdaDottedPattern}{#1}} \newcommand{\AgdaUnsolvedMeta} [1] {\AgdaFontStyle{\colorbox{AgdaUnsolvedMeta}{#1}}}
src/data/emacs-mode/agda2-mode.el view
@@ -10,7 +10,7 @@ ;;; Code: -(defvar agda2-version "2.4.2.4"+(defvar agda2-version "2.4.2.5" "The version of the Agda mode. Note that the same version of the Agda executable must be used.") @@ -20,6 +20,7 @@ (require 'time-date) (require 'eri) (require 'annotation)+(require 'fontset) (require 'agda-input) (require 'agda2) (require 'agda2-highlight)
src/full/Agda/Auto/Auto.hs view
@@ -399,8 +399,8 @@ hits <- if elem "-a" hints then do st <- liftTCM $ join $ pureTCM $ \st _ -> return st- let defs = sigDefinitions $ st^.stSignature- idefs = sigDefinitions $ st^.stImports+ let defs = st^.stSignature.sigDefinitions+ idefs = st^.stImports.sigDefinitions alldefs = HMap.keys defs ++ HMap.keys idefs liftM catMaybes $ mapM (\n -> case thisdefinfo of
src/full/Agda/Auto/Convert.hs view
@@ -45,6 +45,7 @@ , ExceptT , MonadError(catchError, throwError) )+import Agda.Utils.Lens import Agda.Utils.Impossible #include "undefined.h"@@ -753,7 +754,7 @@ findClauseDeep m = do sig <- getImportedSignature let res = do- def <- HMap.elems $ MB.sigDefinitions sig+ def <- HMap.elems $ sig ^. MB.sigDefinitions MB.Function{MB.funClauses = cs} <- [MB.theDef def] c <- cs unless (peelbinds False findMeta $ I.clauseBody c) []
src/full/Agda/Compiler/Epic/CompileState.hs view
@@ -67,7 +67,7 @@ -- | Returns the type of a definition given its name getType :: QName -> Compile TCM Type getType q = do- map <- lift (sigDefinitions <$> use stImports)+ map <- lift $ use $ stImports . sigDefinitions return $ maybe __IMPOSSIBLE__ defType (HM.lookup q map) -- | Create a name which can be used in Epic code from a QName.@@ -109,7 +109,7 @@ getConData :: QName -> Compile TCM QName getConData con = do- lmap <- lift (TM.sigDefinitions <$> use TM.stImports)+ lmap <- lift $ use $ TM.stImports . TM.sigDefinitions case HM.lookup con lmap of Just def -> case theDef def of c@(TM.Constructor{}) -> return $ TM.conData c@@ -118,7 +118,7 @@ getDataCon :: QName -> Compile TCM [QName] getDataCon con = do- lmap <- lift (TM.sigDefinitions <$> use TM.stImports)+ lmap <- lift $ use $ TM.stImports . TM.sigDefinitions case HM.lookup con lmap of Just def -> case theDef def of d@(TM.Datatype{}) -> return $ TM.dataCons d
src/full/Agda/Compiler/Epic/Compiler.hs view
@@ -53,6 +53,7 @@ import Agda.Utils.FileName import qualified Agda.Utils.HashMap as HMap+import Agda.Utils.Lens import Agda.Utils.List import Agda.Utils.Pretty ( prettyShow ) @@ -134,7 +135,7 @@ "Compiling: " ++ (prettyShow . iModuleName) i resetNameSupply initialAnalysis i- let defns = HMap.toList $ sigDefinitions $ iSignature i+ let defns = HMap.toList $ iSignature i ^. sigDefinitions -- Epic cannot parse files with no definitions if (not $ null defns) then do code <- compileDefns defns@@ -156,7 +157,7 @@ initialAnalysis inter = do Prim.initialPrims modify $ \s -> s {curModule = mempty}- let defs = HMap.toList $ sigDefinitions $ iSignature inter+ let defs = HMap.toList $ iSignature inter ^. sigDefinitions forM_ defs $ \(q, def) -> do addDefName q case theDef def of
src/full/Agda/Compiler/Epic/Forcing.hs view
@@ -47,7 +47,7 @@ -- | Returns how many parameters a datatype has dataParametersTCM :: QName -> TCM Nat dataParametersTCM name = do- m <- (sigDefinitions <$> use stImports)+ m <- use $ stImports . sigDefinitions return $ maybe __IMPOSSIBLE__ (defnPars . theDef) (HM.lookup name m) where defnPars :: Defn -> Nat@@ -154,7 +154,7 @@ -- | Main function for removing pattern matching on forced variables remForced :: [Fun] -> Compile TCM [Fun] remForced fs = do- defs <- lift (sigDefinitions <$> use stImports)+ defs <- lift $ use $ stImports . sigDefinitions forM fs $ \f -> case f of Fun{} -> case funQName f >>= flip HM.lookup defs of Nothing -> __IMPOSSIBLE__
src/full/Agda/Compiler/Epic/NatDetection.hs view
@@ -31,7 +31,7 @@ -- form [zeroConstr, sucConstr] getNatish :: Compile TCM [(ForcedArgs, [QName])] getNatish = do- sig <- lift (sigDefinitions <$> use stImports)+ sig <- lift $ use $ stImports . sigDefinitions let defs = HM.toList sig fmap catMaybes $ forM defs $ \(q, def) -> case theDef def of@@ -49,7 +49,7 @@ z <- zip constrs <$> mapM getForcedArgs constrs case sortBy (compare `on` nrRel . snd) z of [(cz,fz), (cs,fs)] -> do- sig <- lift (sigDefinitions <$> use stImports)+ sig <- lift $ use $ stImports . sigDefinitions let ts = defType $ sig HM.! cs nr = dataPars d return $ do
src/full/Agda/Compiler/Epic/Smashing.hs view
@@ -41,7 +41,7 @@ -- | Main function, smash as much as possible smash'em :: [Fun] -> Compile TCM [Fun] smash'em funs = do- defs <- lift (sigDefinitions <$> use stImports)+ defs <- lift $ use $ stImports . sigDefinitions funs' <- forM funs $ \f -> case f of AA.Fun{} -> case funQName f >>= flip HM.lookup defs of Nothing -> do@@ -75,7 +75,7 @@ inferable visited dat args | dat `Set.member` visited = return Nothing inferable visited dat args = do lift $ reportSLn "epic.smashing" 10 $ " inferring:" ++ (show dat)- defs <- lift (sigDefinitions <$> use stImports)+ defs <- lift $ use $ stImports . sigDefinitions let def = fromMaybe __IMPOSSIBLE__ $ HM.lookup dat defs case theDef def of d@Datatype{} -> do@@ -91,7 +91,7 @@ return Nothing where inferableArgs c pars = do- defs <- lift (sigDefinitions <$> use stImports)+ defs <- lift $ use $ stImports . sigDefinitions let def = fromMaybe __IMPOSSIBLE__ $ HM.lookup c defs forc <- getForcedArgs c TelV tel _ <- lift $ telView (defType def `apply` genericTake pars args)@@ -120,7 +120,7 @@ -- | Find the only possible value for a certain type. If we fail return Nothing smashable :: Int -> Type -> Compile TCM (Maybe Expr) smashable origArity typ = do- defs <- lift (sigDefinitions <$> use stImports)+ defs <- lift $ use $ stImports . sigDefinitions TelV tele retType <- lift $ telView typ retType' <- return retType -- lift $ reduce retType
src/full/Agda/Compiler/Epic/Static.hs view
@@ -54,7 +54,7 @@ etaExpand :: Term -> Compile TCM Term etaExpand def@(Def n ts) = do- defs <- lift (sigDefinitions <$> use stImports)+ defs <- lift $ use $ stImports . sigDefinitions let f = maybe __IMPOSSIBLE__ theDef (HM.lookup n defs) len = length . clausePats . head . funClauses $ f toEta :: Num a => a@@ -115,7 +115,7 @@ -} isStatic :: QName -> Compile TCM Bool isStatic q = do- defs <- lift (sigDefinitions <$> use stImports)+ defs <- lift $ use $ stImports . sigDefinitions return $ case fmap theDef $ HM.lookup q defs of Nothing -> False Just (f@Function{}) -> funStatic f
src/full/Agda/Compiler/MAlonzo/Compiler.hs view
@@ -1,6 +1,6 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE PatternGuards #-} {-# LANGUAGE ScopedTypeVariables #-} module Agda.Compiler.MAlonzo.Compiler where@@ -197,7 +197,7 @@ , HS.FunBind [HS.Match dummy infV (List.map HS.PVar vars) Nothing (HS.UnGuardedRhs HS.unit_con)- (HS.BDecls [])]+ emptyBinds] ] Constructor{} | Just q == (nameOfSharp <$> kit) -> do let sharp = unqhname "d" q@@ -209,7 +209,7 @@ [HS.PVar x] Nothing (HS.UnGuardedRhs (HS.Var (HS.UnQual x)))- (HS.BDecls [])]+ emptyBinds] ] Function{} | Just q == (nameOfFlat <$> kit) -> do let flat = unqhname "d" q@@ -221,7 +221,7 @@ [HS.PVar x] Nothing (HS.UnGuardedRhs (HS.Var (HS.UnQual x)))- (HS.BDecls [])]+ emptyBinds] ] Axiom{} -> return $ fb axiomErr@@ -264,7 +264,7 @@ tsig = HS.TypeSig dummy [HS.Ident name] (fakeType t) def :: HS.Decl- def = HS.FunBind [HS.Match dummy (HS.Ident name) [] Nothing (HS.UnGuardedRhs (hsVarUQ $ dsubname q 0)) (HS.BDecls [])]+ def = HS.FunBind [HS.Match dummy (HS.Ident name) [] Nothing (HS.UnGuardedRhs (hsVarUQ $ dsubname q 0)) emptyBinds] return ([tsig,def] ++ ccls) functionFromClauses :: [Clause] -> TCM [HS.Decl]@@ -273,7 +273,7 @@ functionFromCaseTree :: QName -> CompiledClauses -> TCM [HS.Decl] functionFromCaseTree q cc = do e <- casetree cc `runReaderT` initCCEnv (Just q)- return $ [HS.FunBind [HS.Match dummy (dsubname q 0) [] Nothing (HS.UnGuardedRhs e) (HS.BDecls [])]]+ return $ [HS.FunBind [HS.Match dummy (dsubname q 0) [] Nothing (HS.UnGuardedRhs e) emptyBinds]] tag :: Nat -> [Clause] -> [(Nat, Bool, Clause)] tag _ [] = []@@ -281,9 +281,17 @@ tag i (cl:cls) = (i, False, cl) : tag (i + 1) cls mkwhere :: [HS.Decl] -> [HS.Decl]- mkwhere (HS.FunBind [m0, HS.Match _ dn ps mt rhs (HS.BDecls [])] :+ mkwhere (HS.FunBind [m0, HS.Match _ dn ps mt rhs emptyBinds] : fbs@(_:_)) =- [HS.FunBind [m0, HS.Match dummy dn ps mt rhs (HS.BDecls fbs)]]+ [HS.FunBind [m0, HS.Match dummy dn ps mt rhs bindsAux]]+ where+#if MIN_VERSION_haskell_src_exts(1,17,0)+ bindsAux :: Maybe HS.Binds+ bindsAux = Just $ HS.BDecls fbs+#else+ bindsAux :: HS.Binds+ bindsAux = HS.BDecls fbs+#endif mkwhere fbs = fbs fbWithType :: HaskellType -> HS.Exp -> [HS.Decl]@@ -292,7 +300,7 @@ fb :: HS.Exp -> [HS.Decl] fb e = [HS.FunBind [HS.Match dummy (unqhname "d" q) [] Nothing- (HS.UnGuardedRhs $ e) (HS.BDecls [])]]+ (HS.UnGuardedRhs $ e) emptyBinds]] axiomErr :: HS.Exp axiomErr = rtmError $ "postulate evaluated: " ++ show (A.qnameToConcrete q)@@ -377,12 +385,12 @@ catchAllAlts (Just cc) = mapM (branch HS.PWildCard) [cc] catchAllAlts Nothing = do q <- fromMaybe __IMPOSSIBLE__ <$> asks ccFunName- return [ HS.Alt dummy HS.PWildCard (HS.UnGuardedRhs $ rtmIncompleteMatch q) (HS.BDecls []) ]+ return [ HS.Alt dummy HS.PWildCard (HS.UnGuardedRhs $ rtmIncompleteMatch q) emptyBinds ] branch :: HS.Pat -> CompiledClauses -> CC HS.Alt branch pat cc = do e <- casetree cc- return $ HS.Alt dummy pat (HS.UnGuardedRhs e) (HS.BDecls [])+ return $ HS.Alt dummy pat (HS.UnGuardedRhs e) emptyBinds -- | Replace de Bruijn Level @x@ by @n@ new variables. replaceVar :: Int -> Int -> ([HS.Name] -> CC a) -> CC a@@ -466,7 +474,7 @@ Just (HsDefn ty hs) <- compiledHaskell . defCompiledRep <$> getConstInfo q return [ HS.TypeSig dummy [unqhname "check" q] $ fakeType ty , HS.FunBind [HS.Match dummy (unqhname "check" q) [] Nothing- (HS.UnGuardedRhs $ fakeExp hs) (HS.BDecls [])]+ (HS.UnGuardedRhs $ fakeExp hs) emptyBinds] ] checkCover :: QName -> HaskellType -> Nat -> [QName] -> TCM [HS.Decl]@@ -476,7 +484,7 @@ (a, _) <- conArityAndPars c Just (HsDefn _ hsc) <- compiledHaskell . defCompiledRep <$> getConstInfo c let pat = HS.PApp (HS.UnQual $ HS.Ident hsc) $ replicate a HS.PWildCard- return $ HS.Alt dummy pat (HS.UnGuardedRhs $ HS.unit_con) (HS.BDecls [])+ return $ HS.Alt dummy pat (HS.UnGuardedRhs $ HS.unit_con) emptyBinds cs <- mapM makeClause cs let rhs = case cs of@@ -485,7 +493,7 @@ return [ HS.TypeSig dummy [unqhname "cover" q] $ fakeType $ unwords (ty : tvs) ++ " -> ()" , HS.FunBind [HS.Match dummy (unqhname "cover" q) [HS.PVar $ HS.Ident "x"]- Nothing (HS.UnGuardedRhs rhs) (HS.BDecls [])]+ Nothing (HS.UnGuardedRhs rhs) emptyBinds] ] -- | Move somewhere else!@@ -509,7 +517,7 @@ failrhs = rtmIncompleteMatch q -- Andreas, 2011-11-16 call to RTE instead of inlined error -- failrhs = rtmError $ "incomplete pattern matching: " ++ show q match hps rhs = HS.Match dummy (maybe (dsubname q i) HS.Ident maybeName) hps Nothing- (HS.UnGuardedRhs rhs) (HS.BDecls [])+ (HS.UnGuardedRhs rhs) emptyBinds bvars (Body _) _ = [] bvars (Bind (Abs _ b')) n = HS.PVar (ihname "v" n) : bvars b' (n + 1) bvars (Bind (NoAbs _ b)) n = HS.PWildCard : bvars b n@@ -676,7 +684,7 @@ -> Nat -> Nat -> [HS.ConDecl] -> Maybe Clause -> [HS.Decl] tvaldecl q ind ntv npar cds cl = HS.FunBind [HS.Match dummy vn pvs Nothing- (HS.UnGuardedRhs HS.unit_con) (HS.BDecls [])] :+ (HS.UnGuardedRhs HS.unit_con) emptyBinds] : maybe [HS.DataDecl dummy kind [] tn tvs (List.map (HS.QualConDecl dummy [] []) cds) []] (const []) cl
src/full/Agda/Compiler/MAlonzo/Misc.hs view
@@ -54,10 +54,10 @@ curHsMod = mazMod <$> curMName curDefs :: TCM Definitions-curDefs = sigDefinitions <$> curSig+curDefs = (^. sigDefinitions) <$> curSig sigMName :: Signature -> ModuleName-sigMName sig = case Map.keys (sigSections sig) of+sigMName sig = case Map.keys (sig ^. sigSections) of [] -> __IMPOSSIBLE__ m : _ -> m @@ -203,7 +203,7 @@ fakeD :: HS.Name -> String -> HS.Decl fakeD v s = HS.FunBind [ HS.Match dummy v [] Nothing (HS.UnGuardedRhs $ hsVarUQ $ HS.Ident $ s)- (HS.BDecls [])+ emptyBinds ] fakeDS :: String -> String -> HS.Decl@@ -220,3 +220,15 @@ dummy :: a dummy = error "MAlonzo : this dummy value should not have been eval'ed."++--------------------------------------------------+-- Auxiliary definitions+--------------------------------------------------++#if MIN_VERSION_haskell_src_exts(1,17,0)+emptyBinds :: Maybe HS.Binds+emptyBinds = Nothing+#else+emptyBinds :: HS.Binds+emptyBinds = HS.BDecls []+#endif
src/full/Agda/Compiler/MAlonzo/Pretty.hs view
@@ -1,7 +1,7 @@-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TemplateHaskell #-} ------------------------------------------------------------------------ -- Pretty-printing of Haskell modules
src/full/Agda/Compiler/MAlonzo/Primitives.hs view
@@ -56,7 +56,7 @@ [prettyTCM io] ++ pwords " A, for some A. The given type is" ++ [prettyTCM ty] typeError $ GenericError $ show err where- mainAlias = HS.FunBind [HS.Match dummy mainLHS [] Nothing mainRHS $ HS.BDecls [] ]+ mainAlias = HS.FunBind [HS.Match dummy mainLHS [] Nothing mainRHS emptyBinds ] mainLHS = HS.Ident "main" mainRHS = HS.UnGuardedRhs $ HS.Var $ HS.UnQual $ unqhname "d" q
src/full/Agda/Interaction/BasicOps.hs view
@@ -510,15 +510,9 @@ -- Remember the arity of a TelV atel _ <- telView a let arity = size atel- fv = allFreeVars (vs, as)- SplitTel delta1 delta2 perm = splitTelescope fv tel- a' = renameP (reverseP perm) a- (vs, as) <- do- let -- We know that as does not depend on Δ₂- rho = compactS __IMPOSSIBLE__ (replicate (size delta2) Nothing)- return $ applySubst rho $ renameP (reverseP perm) (vs, as)+ (delta1, delta2, _, a', as', vs') = splitTelForWith tel a as vs a <- local (\e -> e { envPrintDomainFreePi = True }) $ do- reify =<< cleanupType arity args =<< normalForm norm =<< withFunctionType delta1 vs as delta2 a'+ reify =<< cleanupType arity args =<< normalForm norm =<< withFunctionType delta1 vs' as' delta2 a' return (OfType' h a) where cleanupType arity args t = do
src/full/Agda/Interaction/Highlighting/Generate.hs view
@@ -387,7 +387,7 @@ let merged = HMap.unions [local, imported, syntax] return (\n -> HMap.lookup n merged) where- fix = HMap.map (defnToKind . theDef) . sigDefinitions+ fix = HMap.map (defnToKind . theDef) . (^. sigDefinitions) -- | The 'M.Axiom' constructor is used to represent various things -- which are not really axioms, so when maps are merged 'Postulate's
src/full/Agda/Interaction/Highlighting/LaTeX.hs view
@@ -413,7 +413,7 @@ -- Operations followed by newlines. (ops, nls) | otherwise -> do- output $ escape ops+ output $ (T.pack " " <+>) $ T.unwords $ map ((cmdPrefix <+> T.pack "FixityOp" <+>) . cmdArg . escape) $ T.words ops spaces (T.group nls)
src/full/Agda/Interaction/InteractionTop.hs view
@@ -719,15 +719,15 @@ render = renderStyle (style { mode = OneLineMode }) makeCaseVariant :: CaseContext -> MakeCaseVariant- makeCaseVariant FunctionDef = R.Function- makeCaseVariant (ExtendedLambda _ _) = R.ExtendedLambda+ makeCaseVariant Nothing = R.Function+ makeCaseVariant Just{} = R.ExtendedLambda -- very dirty hack, string manipulation by dropping the function name -- and replacing the last " = " with " -> ". It's important not to replace -- the equal sign in named implicit with an arrow! extlam_dropName :: CaseContext -> String -> String- extlam_dropName FunctionDef x = x- extlam_dropName (ExtendedLambda _ _) x+ extlam_dropName Nothing x = x+ extlam_dropName Just{} x = unwords $ reverse $ replEquals $ reverse $ drop 1 $ words x where replEquals ("=" : ws) = "→" : ws@@ -736,9 +736,9 @@ -- Drops pattern added to extended lambda functions when lambda lifting them extlam_dropLLifted :: CaseContext -> Bool -> A.Clause -> A.Clause- extlam_dropLLifted FunctionDef _ x = x- extlam_dropLLifted (ExtendedLambda h nh) hidden (A.Clause (A.LHS info (A.LHSProj{}) ps) rhs decl) = __IMPOSSIBLE__- extlam_dropLLifted (ExtendedLambda h nh) hidden (A.Clause (A.LHS info (A.LHSHead name nps) ps) rhs decl)+ extlam_dropLLifted Nothing _ x = x+ extlam_dropLLifted (Just (ExtLamInfo h nh)) hidden (A.Clause (A.LHS info A.LHSProj{} ps) rhs decl) = __IMPOSSIBLE__+ extlam_dropLLifted (Just (ExtLamInfo h nh)) hidden (A.Clause (A.LHS info (A.LHSHead name nps) ps) rhs decl) = let n = if hidden then h + nh else nh in (A.Clause (A.LHS info (A.LHSHead name (drop n nps)) ps) rhs decl)
src/full/Agda/Interaction/MakeCase.hs view
@@ -34,6 +34,7 @@ import Agda.Interaction.BasicOps import Agda.Utils.Functor+import Agda.Utils.Lens import Agda.Utils.List import Agda.Utils.Monad import Agda.Utils.Null@@ -45,10 +46,7 @@ #include "undefined.h" import Agda.Utils.Impossible -data CaseContext- = FunctionDef- | ExtendedLambda Int Int- deriving (Eq)+type CaseContext = Maybe ExtLamInfo -- | Find the clause whose right hand side is the given meta -- BY SEARCHING THE WHOLE SIGNATURE. Returns@@ -64,11 +62,11 @@ findClause m = do sig <- getImportedSignature let res = do- def <- HMap.elems $ sigDefinitions sig+ def <- HMap.elems $ sig ^. sigDefinitions Function{funClauses = cs, funExtLam = extlam} <- [theDef def] c <- cs unless (rhsIsm $ clauseBody c) []- return (defName def, c, extlam)+ return (extlam, defName def, c) case res of [] -> do reportSDoc "interaction.case" 10 $ vcat $@@ -76,7 +74,7 @@ , text "expected rhs to be meta var" <+> (text $ show m) , text "but could not find it in the signature" ]- reportSDoc "interaction.case" 100 $ vcat $ map (text . show) (HMap.elems $ sigDefinitions sig) -- you asked for it!+ reportSDoc "interaction.case" 100 $ vcat $ map (text . show) (HMap.elems $ sig ^. sigDefinitions) -- you asked for it! ifM (isInstantiatedMeta m) -- Andreas, 2012-03-22 If the goal has been solved by eta expansion, further -- case splitting is pointless and `smart-ass Agda' will refuse.@@ -84,8 +82,7 @@ -- SUPER UGLY HACK. (typeError $ GenericError "Since goal is solved, further case distinction is not supported; try `Solve constraints' instead") (typeError $ GenericError "Right hand side must be a single hole when making a case distinction")- [(n,c, Just (h, nh))] -> return (ExtendedLambda h nh , n , c)- [(n,c, Nothing)] -> return (FunctionDef , n , c)+ [triple] -> return triple _ -> __IMPOSSIBLE__ where rhsIsm (Bind b) = rhsIsm $ unAbs b@@ -113,7 +110,7 @@ (,i) . P.render <$> prettyTCM (var i) -- Get number of module parameters. These cannot be split on.- fv <- getModuleFreeVars =<< currentModule+ fv <- getCurrentModuleFreeVars let numSplittableVars = n - fv -- Resolve each string to a variable.
src/full/Agda/Syntax/Abstract/Name.hs view
@@ -32,6 +32,7 @@ import Agda.Syntax.Concrete.Name (IsNoName(..)) import qualified Agda.Syntax.Concrete.Name as C +import Agda.Utils.List import Agda.Utils.Monad import Agda.Utils.Pretty import Agda.Utils.Size@@ -122,6 +123,10 @@ noModuleName :: ModuleName noModuleName = mnameFromList []++commonParentModule :: ModuleName -> ModuleName -> ModuleName+commonParentModule m1 m2 =+ mnameFromList $ commonPrefix (mnameToList m1) (mnameToList m2) -- | Make a 'Name' from some kind of string. class MkName a where
src/full/Agda/Syntax/Common.hs view
@@ -720,6 +720,19 @@ instance CoArbitrary NameId +-- | A meta variable identifier is just a natural number.+--+newtype MetaId = MetaId { metaId :: Nat }+ deriving (Eq, Ord, Num, Real, Enum, Integral, Typeable)++instance Pretty MetaId where+ pretty (MetaId n) = text $ "_" ++ show n++-- | Show non-record version of this newtype.+instance Show MetaId where+ showsPrec p (MetaId n) = showParen (p > 0) $+ showString "MetaId " . shows n+ newtype Constr a = Constr a ---------------------------------------------------------------------------
src/full/Agda/Syntax/Concrete/Definitions.hs view
@@ -39,6 +39,7 @@ , Nice, runNice , niceDeclarations , notSoNiceDeclaration+ , niceHasAbstract , Measure ) where @@ -157,7 +158,7 @@ | UselessPrivate Range | UselessAbstract Range | UselessInstance Range- | WrongContentPostulateBlock Range+ | WrongContentBlock KindOfBlock Range | AmbiguousFunClauses LHS [Name] -- ^ in a mutual block, a clause could belong to any of the @[Name]@ type signatures | InvalidTerminationCheckPragma Range | InvalidMeasureMutual Range@@ -168,6 +169,16 @@ -- by {-# TERMINATING #-} and {-# NON_TERMINATING #-}. deriving (Typeable) +-- | Several declarations expect only type signatures as sub-declarations. These are:+data KindOfBlock+ = PostulateBlock -- ^ @postulate@+ | PrimitiveBlock -- ^ @primitive@. Ensured by parser.+ | InstanceBlock -- ^ @instance@. Actually, here all kinds of sub-declarations are allowed a priori.+ | FieldBlock -- ^ @field@. Ensured by parser.+ | DataBlock -- ^ @data ... where@. Here we got a bad error message for Agda-2.4.3 (Issue 1698).+ deriving (Typeable, Eq, Ord, Show)++ instance HasRange DeclarationException where getRange (MultipleFixityDecls xs) = getRange (fst $ head xs) getRange (InvalidName x) = getRange x@@ -186,7 +197,7 @@ getRange (UselessPrivate r) = r getRange (UselessAbstract r) = r getRange (UselessInstance r) = r- getRange (WrongContentPostulateBlock r) = r+ getRange (WrongContentBlock _ r) = r getRange (InvalidTerminationCheckPragma r) = r getRange (InvalidMeasureMutual r) = r getRange (PragmaNoTerminationCheck r) = r@@ -254,7 +265,7 @@ pwords "Using abstract here has no effect. Abstract applies only definitions like data definitions, record type definitions and function clauses." pretty (UselessInstance _) = fsep $ pwords "Using instance here has no effect. Instance applies only to declarations that introduce new identifiers into the module, like type signatures and axioms."- pretty (WrongContentPostulateBlock _) = fsep $+ pretty (WrongContentBlock b _) = fsep $ pwords "A postulate block can only contain type signatures or instance blocks" pretty (PragmaNoTerminationCheck _) = fsep $ pwords "Pragma {-# NO_TERMINATION_CHECK #-} has been removed. To skip the termination check, label your definitions either as {-# TERMINATING #-} or {-# NON_TERMINATING #-}."@@ -561,16 +572,16 @@ case d of TypeSig{} -> niceTypeSig TerminationCheck d ds FunClause{} -> niceFunClause TerminationCheck d ds- Field x t -> (++) <$> niceAxioms [ d ] <*> nice ds+ Field x t -> (++) <$> niceAxioms FieldBlock [ d ] <*> nice ds DataSig r CoInductive x tel t -> throwError (Codata r) Data r CoInductive x tel t cs -> throwError (Codata r) DataSig r Inductive x tel t -> do addLoneSig x (DataName $ parameters tel)- (++) <$> dataOrRec DataDef NiceDataSig niceAxioms r x tel (Just t) Nothing+ (++) <$> dataOrRec DataDef NiceDataSig (niceAxioms DataBlock) r x tel (Just t) Nothing <*> nice ds Data r Inductive x tel t cs -> do t <- defaultTypeSig (DataName $ parameters tel) x t- (++) <$> dataOrRec DataDef NiceDataSig niceAxioms r x tel t (Just cs)+ (++) <$> dataOrRec DataDef NiceDataSig (niceAxioms DataBlock) r x tel t (Just cs) <*> nice ds RecordSig r x tel t -> do addLoneSig x (RecName $ parameters tel)@@ -594,9 +605,9 @@ InstanceB r ds' -> (++) <$> (instanceBlock r =<< nice ds') <*> nice ds - Postulate _ ds' -> (++) <$> niceAxioms ds' <*> nice ds+ Postulate _ ds' -> (++) <$> niceAxioms PostulateBlock ds' <*> nice ds - Primitive _ ds' -> (++) <$> (map toPrim <$> niceAxioms ds') <*> nice ds+ Primitive _ ds' -> (++) <$> (map toPrim <$> niceAxioms PrimitiveBlock ds') <*> nice ds Module r x tel ds' -> (NiceModule r PublicAccess ConcreteDef x tel ds' :) <$> nice ds@@ -702,18 +713,22 @@ dropType b@DomainFree{} = [b] -- Translate axioms- niceAxioms :: [TypeSignatureOrInstanceBlock] -> Nice [NiceDeclaration]- niceAxioms ds = liftM List.concat $ mapM niceAxiom ds+ niceAxioms :: KindOfBlock -> [TypeSignatureOrInstanceBlock] -> Nice [NiceDeclaration]+ niceAxioms b ds = liftM List.concat $ mapM (niceAxiom b) ds - niceAxiom :: TypeSignatureOrInstanceBlock -> Nice [NiceDeclaration]- niceAxiom d@(TypeSig rel x t) = do- fx <- getFixity x- return $ [ Axiom (getRange d) fx PublicAccess NotInstanceDef rel x t ]- niceAxiom d@(Field x argt) = do- fx <- getFixity x- return $ [ NiceField (getRange d) fx PublicAccess ConcreteDef x argt ]- niceAxiom d@(InstanceB r decls) = instanceBlock r =<< niceAxioms decls- niceAxiom d = throwError $ WrongContentPostulateBlock $ getRange d+ niceAxiom :: KindOfBlock -> TypeSignatureOrInstanceBlock -> Nice [NiceDeclaration]+ niceAxiom b d = case d of+ TypeSig rel x t -> do+ fx <- getFixity x+ return [ Axiom (getRange d) fx PublicAccess NotInstanceDef rel x t ]+ Field x argt -> do+ fx <- getFixity x+ return [ NiceField (getRange d) fx PublicAccess ConcreteDef x argt ]+ InstanceB r decls -> do+ instanceBlock r =<< niceAxioms InstanceBlock decls+ Pragma p@(RewritePragma r _) -> do+ return [ NicePragma r p ]+ _ -> throwError $ WrongContentBlock b $ getRange d toPrim :: NiceDeclaration -> NiceDeclaration toPrim (Axiom r f a i rel x t) = PrimitiveFunction r f a ConcreteDef x t@@ -820,8 +835,11 @@ -- isFunClauseOf _ _ = False removeSingletonRawAppP :: Pattern -> Pattern- removeSingletonRawAppP (RawAppP _ [p]) = removeSingletonRawAppP p- removeSingletonRawAppP p = p+ removeSingletonRawAppP p =+ case p of+ RawAppP _ [p'] -> removeSingletonRawAppP p'+ ParenP _ p' -> removeSingletonRawAppP p'+ _ -> p -- Make an old style mutual block from a list of mutual declarations mkOldMutual :: Range -> [NiceDeclaration] -> Nice NiceDeclaration@@ -1092,3 +1110,26 @@ where unThing (ThingWithFixity c _) = c NicePatternSyn r _ n as p -> PatternSyn r n as p NiceUnquoteDecl r _ _ _ _ _ x e -> UnquoteDecl r x e++-- | Has the 'NiceDeclaration' a field of type 'IsAbstract'?+niceHasAbstract :: NiceDeclaration -> Maybe IsAbstract+niceHasAbstract d =+ case d of+ Axiom{} -> Nothing+ NiceField _ _ _ a _ _ -> Just a+ PrimitiveFunction _ _ _ a _ _ -> Just a+ NiceMutual{} -> Nothing+ NiceModule _ _ a _ _ _ -> Just a+ NiceModuleMacro{} -> Nothing+ NiceOpen{} -> Nothing+ NiceImport{} -> Nothing+ NicePragma{} -> Nothing+ NiceRecSig{} -> Nothing+ NiceDataSig{} -> Nothing+ NiceFunClause _ _ a _ _ -> Just a+ FunSig{} -> Nothing+ FunDef _ _ _ a _ _ _ -> Just a+ DataDef _ _ a _ _ _ -> Just a+ RecDef _ _ a _ _ _ _ _ -> Just a+ NicePatternSyn{} -> Nothing+ NiceUnquoteDecl _ _ _ _ a _ _ _ -> Just a
src/full/Agda/Syntax/Concrete/Operators.hs view
@@ -369,11 +369,6 @@ -- | Parses a left-hand side, and makes sure that it defined the expected name.--- TODO: check the arities of constructors. There is a possible ambiguity with--- postfix constructors:--- Assume _ * is a constructor. Then 'true *' can be parsed as either the--- intended _* applied to true, or as true applied to a variable *. If we--- check arities this problem won't appear. parseLHS :: Name -> Pattern -> ScopeM LHSCore parseLHS top p = billToParser $ do res <- parseLHS' IsLHS (Just top) p@@ -382,11 +377,6 @@ _ -> typeError $ NoParseForLHS IsLHS p -- | Parses a pattern.--- TODO: check the arities of constructors. There is a possible ambiguity with--- postfix constructors:--- Assume _ * is a constructor. Then 'true *' can be parsed as either the--- intended _* applied to true, or as true applied to a variable *. If we--- check arities this problem won't appear. parsePattern :: Pattern -> ScopeM Pattern parsePattern = parsePatternOrSyn IsLHS
src/full/Agda/Syntax/Info.hs view
@@ -33,7 +33,7 @@ data MetaInfo = MetaInfo { metaRange :: Range , metaScope :: ScopeInfo- , metaNumber :: Maybe Nat -- ^ The 'MetaId', not the 'InteractionId'.+ , metaNumber :: Maybe MetaId , metaNameSuggestion :: String } deriving (Typeable, Show)
src/full/Agda/Syntax/Internal.hs view
@@ -14,6 +14,7 @@ ( module Agda.Syntax.Internal , module Agda.Syntax.Abstract.Name , module Agda.Utils.Pointer+ , MetaId(..) ) where import Prelude hiding (foldr, mapM, null)@@ -56,11 +57,12 @@ import Agda.Utils.Geniplate import Agda.Utils.Lens import Agda.Utils.List+import Agda.Utils.Maybe import Agda.Utils.Null import Agda.Utils.Permutation import Agda.Utils.Pointer import Agda.Utils.Size-import Agda.Utils.Pretty+import Agda.Utils.Pretty as P #include "undefined.h" import Agda.Utils.Impossible@@ -271,11 +273,6 @@ -- ^ Introduced by 'instantiate', removed by 'reduce'. deriving (Show, Typeable) --- | A meta variable identifier is just a natural number.----newtype MetaId = MetaId { metaId :: Nat }- deriving (Eq, Ord, Num, Real, Enum, Integral, Typeable)- -- | Even if we are not stuck on a meta during reduction -- we can fail to reduce a definition by pattern matching -- for another reason.@@ -909,11 +906,6 @@ showsPrec p (NoAbs x a) = showParen (p > 0) $ showString "NoAbs " . shows x . showString " " . showsPrec 10 a --- | Show non-record version of this newtype.-instance Show MetaId where- showsPrec p (MetaId n) = showParen (p > 0) $- showString "MetaId " . shows n- -- instance Show t => Show (Blocked t) where -- showsPrec p (Blocked m x) = showParen (p > 0) $ -- showString "Blocked " . shows m . showString " " . showsPrec 10 x@@ -1094,9 +1086,6 @@ -- * Simple pretty printing ----------------------------------------------------------------------------- -instance Pretty MetaId where- pretty (MetaId n) = text $ "_" ++ show n- instance Pretty Substitution where prettyPrec p rho = brackets $ pr rho where@@ -1193,3 +1182,24 @@ NotHidden -> prettyPrec p Hidden -> braces . pretty Instance -> braces . braces . pretty++instance Pretty a => Pretty (Pattern' a) where+ prettyPrec n (VarP x) = prettyPrec n x+ prettyPrec _ (DotP t) = text "." P.<> prettyPrec 10 t+ prettyPrec n (ConP c i ps) = mparens (n > 0) $+ text (show $ conName c) <+> fsep (map (pretty . namedArg) ps)+ -- -- Version with printing record type:+ -- prettyPrec _ (ConP c i ps) = (if b then braces else parens) $ prTy $+ -- text (show $ conName c) <+> fsep (map (pretty . namedArg) ps)+ -- where+ -- b = maybe False (== ConPImplicit) $ conPRecord i+ -- prTy d = caseMaybe (conPType i) d $ \ t -> d <+> text ":" <+> pretty t+ prettyPrec _ (LitP l) = text (show l)+ prettyPrec _ (ProjP q) = text (show q)++instance Pretty a => Pretty (ClauseBodyF a) where+ pretty b = case b of+ Bind (NoAbs _ b) -> pretty b+ Bind (Abs x b) -> text (show x ++ ".") <+> pretty b+ Body t -> pretty t+ NoBody -> text "()"
src/full/Agda/Syntax/Parser/Parser.y view
@@ -74,100 +74,101 @@ %nonassoc '->' %token- 'let' { TokKeyword KwLet $$ }- 'in' { TokKeyword KwIn $$ }- 'where' { TokKeyword KwWhere $$ }- 'with' { TokKeyword KwWith $$ }- 'rewrite' { TokKeyword KwRewrite $$ }- 'postulate' { TokKeyword KwPostulate $$ }- 'primitive' { TokKeyword KwPrimitive $$ }- 'open' { TokKeyword KwOpen $$ }- 'import' { TokKeyword KwImport $$ }- 'using' { TokKeyword KwUsing $$ }- 'hiding' { TokKeyword KwHiding $$ }- 'renaming' { TokKeyword KwRenaming $$ }- 'to' { TokKeyword KwTo $$ }- 'public' { TokKeyword KwPublic $$ }- 'module' { TokKeyword KwModule $$ }- 'data' { TokKeyword KwData $$ }- 'codata' { TokKeyword KwCoData $$ }- 'record' { TokKeyword KwRecord $$ }- 'constructor' { TokKeyword KwConstructor $$ }- 'inductive' { TokKeyword KwInductive $$ }- 'coinductive' { TokKeyword KwCoInductive $$ }- 'field' { TokKeyword KwField $$ }- 'infix' { TokKeyword KwInfix $$ }- 'infixl' { TokKeyword KwInfixL $$ }- 'infixr' { TokKeyword KwInfixR $$ }- 'mutual' { TokKeyword KwMutual $$ }- 'abstract' { TokKeyword KwAbstract $$ }- 'private' { TokKeyword KwPrivate $$ }- 'instance' { TokKeyword KwInstance $$ }- 'Prop' { TokKeyword KwProp $$ }- 'Set' { TokKeyword KwSet $$ }- 'forall' { TokKeyword KwForall $$ }- 'syntax' { TokKeyword KwSyntax $$ }- 'pattern' { TokKeyword KwPatternSyn $$ }- 'OPTIONS' { TokKeyword KwOPTIONS $$ }- 'BUILTIN' { TokKeyword KwBUILTIN $$ }- 'REWRITE' { TokKeyword KwREWRITE $$ }- 'IMPORT' { TokKeyword KwIMPORT $$ }- 'IMPOSSIBLE' { TokKeyword KwIMPOSSIBLE $$ }- 'ETA' { TokKeyword KwETA $$ }- 'NO_TERMINATION_CHECK' { TokKeyword KwNO_TERMINATION_CHECK $$ }- 'NON_TERMINATING' { TokKeyword KwNON_TERMINATING $$ }- 'TERMINATING' { TokKeyword KwTERMINATING $$ }- 'MEASURE' { TokKeyword KwMEASURE $$ }- 'COMPILED' { TokKeyword KwCOMPILED $$ }- 'COMPILED_EXPORT' { TokKeyword KwCOMPILED_EXPORT $$ }- 'COMPILED_DATA' { TokKeyword KwCOMPILED_DATA $$ }- 'COMPILED_TYPE' { TokKeyword KwCOMPILED_TYPE $$ }- 'COMPILED_EPIC' { TokKeyword KwCOMPILED_EPIC $$ }- 'COMPILED_JS' { TokKeyword KwCOMPILED_JS $$ }- 'STATIC' { TokKeyword KwSTATIC $$ }- 'quoteGoal' { TokKeyword KwQuoteGoal $$ }- 'quoteContext' { TokKeyword KwQuoteContext $$ }- 'quote' { TokKeyword KwQuote $$ }- 'quoteTerm' { TokKeyword KwQuoteTerm $$ }- 'tactic' { TokKeyword KwTactic $$ }- 'unquote' { TokKeyword KwUnquote $$ }- 'unquoteDecl' { TokKeyword KwUnquoteDecl $$ }+ 'abstract' { TokKeyword KwAbstract $$ }+ 'codata' { TokKeyword KwCoData $$ }+ 'coinductive' { TokKeyword KwCoInductive $$ }+ 'constructor' { TokKeyword KwConstructor $$ }+ 'data' { TokKeyword KwData $$ }+ 'field' { TokKeyword KwField $$ }+ 'forall' { TokKeyword KwForall $$ }+ 'hiding' { TokKeyword KwHiding $$ }+ 'import' { TokKeyword KwImport $$ }+ 'in' { TokKeyword KwIn $$ }+ 'inductive' { TokKeyword KwInductive $$ }+ 'infix' { TokKeyword KwInfix $$ }+ 'infixl' { TokKeyword KwInfixL $$ }+ 'infixr' { TokKeyword KwInfixR $$ }+ 'instance' { TokKeyword KwInstance $$ }+ 'let' { TokKeyword KwLet $$ }+ 'module' { TokKeyword KwModule $$ }+ 'mutual' { TokKeyword KwMutual $$ }+ 'open' { TokKeyword KwOpen $$ }+ 'pattern' { TokKeyword KwPatternSyn $$ }+ 'postulate' { TokKeyword KwPostulate $$ }+ 'primitive' { TokKeyword KwPrimitive $$ }+ 'private' { TokKeyword KwPrivate $$ }+ 'Prop' { TokKeyword KwProp $$ }+ 'public' { TokKeyword KwPublic $$ }+ 'quote' { TokKeyword KwQuote $$ }+ 'quoteContext' { TokKeyword KwQuoteContext $$ }+ 'quoteGoal' { TokKeyword KwQuoteGoal $$ }+ 'quoteTerm' { TokKeyword KwQuoteTerm $$ }+ 'record' { TokKeyword KwRecord $$ }+ 'renaming' { TokKeyword KwRenaming $$ }+ 'rewrite' { TokKeyword KwRewrite $$ }+ 'Set' { TokKeyword KwSet $$ }+ 'syntax' { TokKeyword KwSyntax $$ }+ 'tactic' { TokKeyword KwTactic $$ }+ 'to' { TokKeyword KwTo $$ }+ 'unquote' { TokKeyword KwUnquote $$ }+ 'unquoteDecl' { TokKeyword KwUnquoteDecl $$ }+ 'using' { TokKeyword KwUsing $$ }+ 'where' { TokKeyword KwWhere $$ }+ 'with' { TokKeyword KwWith $$ } - setN { TokSetN $$ }- tex { TokTeX $$ }- comment { TokComment $$ }+ 'BUILTIN' { TokKeyword KwBUILTIN $$ }+ 'COMPILED' { TokKeyword KwCOMPILED $$ }+ 'COMPILED_DATA' { TokKeyword KwCOMPILED_DATA $$ }+ 'COMPILED_EPIC' { TokKeyword KwCOMPILED_EPIC $$ }+ 'COMPILED_EXPORT' { TokKeyword KwCOMPILED_EXPORT $$ }+ 'COMPILED_JS' { TokKeyword KwCOMPILED_JS $$ }+ 'COMPILED_TYPE' { TokKeyword KwCOMPILED_TYPE $$ }+ 'ETA' { TokKeyword KwETA $$ }+ 'IMPORT' { TokKeyword KwIMPORT $$ }+ 'IMPOSSIBLE' { TokKeyword KwIMPOSSIBLE $$ }+ 'MEASURE' { TokKeyword KwMEASURE $$ }+ 'NO_TERMINATION_CHECK' { TokKeyword KwNO_TERMINATION_CHECK $$ }+ 'NON_TERMINATING' { TokKeyword KwNON_TERMINATING $$ }+ 'OPTIONS' { TokKeyword KwOPTIONS $$ }+ 'REWRITE' { TokKeyword KwREWRITE $$ }+ 'STATIC' { TokKeyword KwSTATIC $$ }+ 'TERMINATING' { TokKeyword KwTERMINATING $$ } - '...' { TokSymbol SymEllipsis $$ }- '..' { TokSymbol SymDotDot $$ }- '.' { TokSymbol SymDot $$ }- ';' { TokSymbol SymSemi $$ }- ':' { TokSymbol SymColon $$ }- '=' { TokSymbol SymEqual $$ }- '_' { TokSymbol SymUnderscore $$ }- '?' { TokSymbol SymQuestionMark $$ }- '->' { TokSymbol SymArrow $$ }- '\\' { TokSymbol SymLambda $$ }- '@' { TokSymbol SymAs $$ }- '|' { TokSymbol SymBar $$ }- '(' { TokSymbol SymOpenParen $$ }- ')' { TokSymbol SymCloseParen $$ }- '{{' { TokSymbol SymDoubleOpenBrace $$ }- '}}' { TokSymbol SymDoubleCloseBrace $$ }- '{' { TokSymbol SymOpenBrace $$ }- '}' { TokSymbol SymCloseBrace $$ }--- ':{' { TokSymbol SymColonBrace $$ }- vopen { TokSymbol SymOpenVirtualBrace $$ }- vclose { TokSymbol SymCloseVirtualBrace $$ }- vsemi { TokSymbol SymVirtualSemi $$ }- '{-#' { TokSymbol SymOpenPragma $$ }- '#-}' { TokSymbol SymClosePragma $$ }+ setN { TokSetN $$ }+ tex { TokTeX $$ }+ comment { TokComment $$ } - id { TokId $$ }- q_id { TokQId $$ }+ '...' { TokSymbol SymEllipsis $$ }+ '..' { TokSymbol SymDotDot $$ }+ '.' { TokSymbol SymDot $$ }+ ';' { TokSymbol SymSemi $$ }+ ':' { TokSymbol SymColon $$ }+ '=' { TokSymbol SymEqual $$ }+ '_' { TokSymbol SymUnderscore $$ }+ '?' { TokSymbol SymQuestionMark $$ }+ '->' { TokSymbol SymArrow $$ }+ '\\' { TokSymbol SymLambda $$ }+ '@' { TokSymbol SymAs $$ }+ '|' { TokSymbol SymBar $$ }+ '(' { TokSymbol SymOpenParen $$ }+ ')' { TokSymbol SymCloseParen $$ }+ '{{' { TokSymbol SymDoubleOpenBrace $$ }+ '}}' { TokSymbol SymDoubleCloseBrace $$ }+ '{' { TokSymbol SymOpenBrace $$ }+ '}' { TokSymbol SymCloseBrace $$ }+-- ':{' { TokSymbol SymColonBrace $$ }+ vopen { TokSymbol SymOpenVirtualBrace $$ }+ vclose { TokSymbol SymCloseVirtualBrace $$ }+ vsemi { TokSymbol SymVirtualSemi $$ }+ '{-#' { TokSymbol SymOpenPragma $$ }+ '#-}' { TokSymbol SymClosePragma $$ } - string { TokString $$ }- literal { TokLiteral $$ }+ id { TokId $$ }+ q_id { TokQId $$ } + string { TokString $$ }+ literal { TokLiteral $$ }+ %% {--------------------------------------------------------------------------@@ -187,98 +188,99 @@ -- Parse single token. Token :: { Token } Token- : 'let' { TokKeyword KwLet $1 }- | 'in' { TokKeyword KwIn $1 }- | 'where' { TokKeyword KwWhere $1 }- | 'with' { TokKeyword KwWith $1 }- | 'rewrite' { TokKeyword KwRewrite $1 }- | 'postulate' { TokKeyword KwPostulate $1 }- | 'primitive' { TokKeyword KwPrimitive $1 }- | 'open' { TokKeyword KwOpen $1 }- | 'import' { TokKeyword KwImport $1 }- | 'using' { TokKeyword KwUsing $1 }- | 'hiding' { TokKeyword KwHiding $1 }- | 'renaming' { TokKeyword KwRenaming $1 }- | 'to' { TokKeyword KwTo $1 }- | 'public' { TokKeyword KwPublic $1 }- | 'module' { TokKeyword KwModule $1 }- | 'data' { TokKeyword KwData $1 }- | 'codata' { TokKeyword KwCoData $1 }- | 'record' { TokKeyword KwRecord $1 }- | 'constructor' { TokKeyword KwConstructor $1 }- | 'inductive' { TokKeyword KwInductive $1 }- | 'coinductive' { TokKeyword KwCoInductive $1 }- | 'field' { TokKeyword KwField $1 }- | 'infix' { TokKeyword KwInfix $1 }- | 'infixl' { TokKeyword KwInfixL $1 }- | 'infixr' { TokKeyword KwInfixR $1 }- | 'mutual' { TokKeyword KwMutual $1 }- | 'abstract' { TokKeyword KwAbstract $1 }- | 'private' { TokKeyword KwPrivate $1 }- | 'instance' { TokKeyword KwInstance $1 }- | 'Prop' { TokKeyword KwProp $1 }- | 'Set' { TokKeyword KwSet $1 }- | 'forall' { TokKeyword KwForall $1 }- | 'syntax' { TokKeyword KwSyntax $1 }- | 'pattern' { TokKeyword KwPatternSyn $1 }- | 'OPTIONS' { TokKeyword KwOPTIONS $1 }- | 'BUILTIN' { TokKeyword KwBUILTIN $1 }- | 'REWRITE' { TokKeyword KwREWRITE $1 }- | 'IMPORT' { TokKeyword KwIMPORT $1 }- | 'COMPILED' { TokKeyword KwCOMPILED $1 }- | 'COMPILED_EXPORT' { TokKeyword KwCOMPILED_EXPORT $1 }- | 'COMPILED_DATA'{ TokKeyword KwCOMPILED_DATA $1 }- | 'COMPILED_TYPE'{ TokKeyword KwCOMPILED_TYPE $1 }- | 'COMPILED_EPIC'{ TokKeyword KwCOMPILED_EPIC $1 }- | 'COMPILED_JS' { TokKeyword KwCOMPILED_JS $1 }- | 'STATIC' { TokKeyword KwSTATIC $1 }- | 'IMPOSSIBLE' { TokKeyword KwIMPOSSIBLE $1 }- | 'ETA' { TokKeyword KwETA $1 }- | 'NO_TERMINATION_CHECK' { TokKeyword KwNO_TERMINATION_CHECK $1 }- | 'NON_TERMINATING' { TokKeyword KwNON_TERMINATING $1 }- | 'TERMINATING' { TokKeyword KwTERMINATING $1 }- | 'MEASURE' { TokKeyword KwMEASURE $1 }- | 'quoteGoal' { TokKeyword KwQuoteGoal $1 }- | 'quoteContext' { TokKeyword KwQuoteContext $1 }- | 'quote' { TokKeyword KwQuote $1 }- | 'quoteTerm' { TokKeyword KwQuoteTerm $1 }- | 'tactic' { TokKeyword KwTactic $1 }- | 'unquote' { TokKeyword KwUnquote $1 }- | 'unquoteDecl' { TokKeyword KwUnquoteDecl $1 }+ : 'abstract' { TokKeyword KwAbstract $1 }+ | 'codata' { TokKeyword KwCoData $1 }+ | 'coinductive' { TokKeyword KwCoInductive $1 }+ | 'constructor' { TokKeyword KwConstructor $1 }+ | 'data' { TokKeyword KwData $1 }+ | 'field' { TokKeyword KwField $1 }+ | 'forall' { TokKeyword KwForall $1 }+ | 'hiding' { TokKeyword KwHiding $1 }+ | 'import' { TokKeyword KwImport $1 }+ | 'in' { TokKeyword KwIn $1 }+ | 'inductive' { TokKeyword KwInductive $1 }+ | 'infix' { TokKeyword KwInfix $1 }+ | 'infixl' { TokKeyword KwInfixL $1 }+ | 'infixr' { TokKeyword KwInfixR $1 }+ | 'instance' { TokKeyword KwInstance $1 }+ | 'let' { TokKeyword KwLet $1 }+ | 'module' { TokKeyword KwModule $1 }+ | 'mutual' { TokKeyword KwMutual $1 }+ | 'open' { TokKeyword KwOpen $1 }+ | 'pattern' { TokKeyword KwPatternSyn $1 }+ | 'postulate' { TokKeyword KwPostulate $1 }+ | 'primitive' { TokKeyword KwPrimitive $1 }+ | 'private' { TokKeyword KwPrivate $1 }+ | 'Prop' { TokKeyword KwProp $1 }+ | 'public' { TokKeyword KwPublic $1 }+ | 'quote' { TokKeyword KwQuote $1 }+ | 'quoteContext' { TokKeyword KwQuoteContext $1 }+ | 'quoteGoal' { TokKeyword KwQuoteGoal $1 }+ | 'quoteTerm' { TokKeyword KwQuoteTerm $1 }+ | 'record' { TokKeyword KwRecord $1 }+ | 'renaming' { TokKeyword KwRenaming $1 }+ | 'rewrite' { TokKeyword KwRewrite $1 }+ | 'Set' { TokKeyword KwSet $1 }+ | 'syntax' { TokKeyword KwSyntax $1 }+ | 'tactic' { TokKeyword KwTactic $1 }+ | 'to' { TokKeyword KwTo $1 }+ | 'unquote' { TokKeyword KwUnquote $1 }+ | 'unquoteDecl' { TokKeyword KwUnquoteDecl $1 }+ | 'using' { TokKeyword KwUsing $1 }+ | 'where' { TokKeyword KwWhere $1 }+ | 'with' { TokKeyword KwWith $1 } - | setN { TokSetN $1 }- | tex { TokTeX $1 }- | comment { TokComment $1 }+ | 'BUILTIN' { TokKeyword KwBUILTIN $1 }+ | 'COMPILED' { TokKeyword KwCOMPILED $1 }+ | 'COMPILED_DATA' { TokKeyword KwCOMPILED_DATA $1 }+ | 'COMPILED_EPIC' { TokKeyword KwCOMPILED_EPIC $1 }+ | 'COMPILED_EXPORT' { TokKeyword KwCOMPILED_EXPORT $1 }+ | 'COMPILED_JS' { TokKeyword KwCOMPILED_JS $1 }+ | 'COMPILED_TYPE' { TokKeyword KwCOMPILED_TYPE $1 }+ | 'ETA' { TokKeyword KwETA $1 }+ | 'IMPORT' { TokKeyword KwIMPORT $1 }+ | 'IMPOSSIBLE' { TokKeyword KwIMPOSSIBLE $1 }+ | 'MEASURE' { TokKeyword KwMEASURE $1 }+ | 'NO_TERMINATION_CHECK' { TokKeyword KwNO_TERMINATION_CHECK $1 }+ | 'NON_TERMINATING' { TokKeyword KwNON_TERMINATING $1 }+ | 'OPTIONS' { TokKeyword KwOPTIONS $1 }+ | 'REWRITE' { TokKeyword KwREWRITE $1 }+ | 'STATIC' { TokKeyword KwSTATIC $1 }+ | 'TERMINATING' { TokKeyword KwTERMINATING $1 } - | '...' { TokSymbol SymEllipsis $1 }- | '..' { TokSymbol SymDotDot $1 }- | '.' { TokSymbol SymDot $1 }- | ';' { TokSymbol SymSemi $1 }- | ':' { TokSymbol SymColon $1 }- | '=' { TokSymbol SymEqual $1 }- | '_' { TokSymbol SymUnderscore $1 }- | '?' { TokSymbol SymQuestionMark $1 }- | '->' { TokSymbol SymArrow $1 }- | '\\' { TokSymbol SymLambda $1 }- | '@' { TokSymbol SymAs $1 }- | '|' { TokSymbol SymBar $1 }- | '(' { TokSymbol SymOpenParen $1 }- | ')' { TokSymbol SymCloseParen $1 }- | '{{' { TokSymbol SymDoubleOpenBrace $1 }- | '}}' { TokSymbol SymDoubleCloseBrace $1 }- | '{' { TokSymbol SymOpenBrace $1 }- | '}' { TokSymbol SymCloseBrace $1 }- | vopen { TokSymbol SymOpenVirtualBrace $1 }- | vclose { TokSymbol SymCloseVirtualBrace $1 }- | vsemi { TokSymbol SymVirtualSemi $1 }- | '{-#' { TokSymbol SymOpenPragma $1 }- | '#-}' { TokSymbol SymClosePragma $1 }+ | setN { TokSetN $1 }+ | tex { TokTeX $1 }+ | comment { TokComment $1 } - | id { TokId $1 }- | q_id { TokQId $1 }- | string { TokString $1 }+ | '...' { TokSymbol SymEllipsis $1 }+ | '..' { TokSymbol SymDotDot $1 }+ | '.' { TokSymbol SymDot $1 }+ | ';' { TokSymbol SymSemi $1 }+ | ':' { TokSymbol SymColon $1 }+ | '=' { TokSymbol SymEqual $1 }+ | '_' { TokSymbol SymUnderscore $1 }+ | '?' { TokSymbol SymQuestionMark $1 }+ | '->' { TokSymbol SymArrow $1 }+ | '\\' { TokSymbol SymLambda $1 }+ | '@' { TokSymbol SymAs $1 }+ | '|' { TokSymbol SymBar $1 }+ | '(' { TokSymbol SymOpenParen $1 }+ | ')' { TokSymbol SymCloseParen $1 }+ | '{{' { TokSymbol SymDoubleOpenBrace $1 }+ | '}}' { TokSymbol SymDoubleCloseBrace $1 }+ | '{' { TokSymbol SymOpenBrace $1 }+ | '}' { TokSymbol SymCloseBrace $1 }+ | vopen { TokSymbol SymOpenVirtualBrace $1 }+ | vclose { TokSymbol SymCloseVirtualBrace $1 }+ | vsemi { TokSymbol SymVirtualSemi $1 }+ | '{-#' { TokSymbol SymOpenPragma $1 }+ | '#-}' { TokSymbol SymClosePragma $1 } - | literal { TokLiteral $1 }+ | id { TokId $1 }+ | q_id { TokQId $1 }+ | string { TokString $1 }++ | literal { TokLiteral $1 } {-------------------------------------------------------------------------- Top level
src/full/Agda/Syntax/Scope/Base.hs view
@@ -449,7 +449,11 @@ -- | Update a particular name space. setNameSpace :: NameSpaceId -> NameSpace -> Scope -> Scope-setNameSpace nsid ns = updateScopeNameSpaces $ AssocList.update nsid ns+setNameSpace nsid ns = modifyNameSpace nsid $ const ns++-- | Modify a particular name space.+modifyNameSpace :: NameSpaceId -> (NameSpace -> NameSpace) -> Scope -> Scope+modifyNameSpace nsid f = updateScopeNameSpaces $ AssocList.updateAt nsid f -- | Add names to a scope. addNamesToScope :: NameSpaceId -> C.Name -> [AbstractName] -> Scope -> Scope
src/full/Agda/Syntax/Translation/AbstractToConcrete.hs view
@@ -369,7 +369,7 @@ toConcrete (A.Underscore i) = return $ C.Underscore (getRange i) $- prettyShow . NamedMeta (metaNameSuggestion i) . MetaId <$> metaNumber i+ prettyShow . NamedMeta (metaNameSuggestion i) . MetaId . metaId <$> metaNumber i toConcrete e@(A.App i e1 e2) = tryToRecoverOpApp e
src/full/Agda/Syntax/Translation/ConcreteToAbstract.hs view
@@ -1,12 +1,12 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE DoAndIfThenElse #-}-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE CPP #-}+{-# LANGUAGE DoAndIfThenElse #-}+{-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FunctionalDependencies #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE PatternGuards #-}-{-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TupleSections #-}-{-# LANGUAGE UndecidableInstances #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TupleSections #-}+{-# LANGUAGE UndecidableInstances #-} #if __GLASGOW_HASKELL__ <= 708 {-# LANGUAGE OverlappingInstances #-}@@ -63,6 +63,7 @@ import Agda.TypeChecking.Monad.Base ( TypeError(..) , Call(..) , typeError , genericError , TCErr(..) , fresh , freshName , freshName_ , freshNoName , extendedLambdaName+ , envAbstractMode , AbstractMode(..) ) import qualified Agda.TypeChecking.Monad.Benchmark as Bench import Agda.TypeChecking.Monad.Builtin@@ -596,12 +597,13 @@ bindName PrivateAccess DefName cname qname -- Compose a function definition an scope check it.+ a <- aModeToDef <$> asks envAbstractMode let insertApp (C.RawAppP r es) = C.RawAppP r $ IdentP (C.QName cname) : es insertApp (C.IdentP q ) = C.RawAppP r $ IdentP (C.QName cname) : [C.IdentP q] where r = getRange q insertApp _ = __IMPOSSIBLE__- d = C.FunDef r [] defaultFixity' ConcreteDef TerminationCheck cname $+ d = C.FunDef r [] defaultFixity' {-'-} a __IMPOSSIBLE__ cname $ for cs $ \ (lhs, rhs, wh) -> -- wh == NoWhere, see parser for more info C.Clause cname (mapLhsOriginalPattern insertApp lhs) rhs wh [] scdef <- toAbstract d@@ -643,7 +645,7 @@ let info = MetaInfo { metaRange = r , metaScope = scope- , metaNumber = n+ , metaNumber = Nothing , metaNameSuggestion = "" } return $ A.QuestionMark info ii@@ -842,7 +844,10 @@ yesBind (C.TLet _ ds) = any yes ds yes C.ModuleMacro{} = True yes C.Open{} = True- yes C.Import{} = __IMPOSSIBLE__+ yes C.Import{} = True -- not __IMPOSSIBLE__, see Issue #1718+ -- However, it does not matter what we return here, as this will+ -- become an error later: "Not a valid let-declaration".+ -- (Andreas, 2015-11-17) yes (C.Mutual _ ds) = any yes ds yes (C.Abstract _ ds) = any yes ds yes (C.Private _ ds) = any yes ds@@ -1114,12 +1119,26 @@ instance ToAbstract (Blind a) (Blind a) where toAbstract = return +aDefToMode :: IsAbstract -> AbstractMode+aDefToMode AbstractDef = AbstractMode+aDefToMode ConcreteDef = ConcreteMode++aModeToDef :: AbstractMode -> IsAbstract+aModeToDef AbstractMode = AbstractDef+aModeToDef ConcreteMode = ConcreteDef+aModeToDef _ = __IMPOSSIBLE__+ -- The only reason why we return a list is that open declarations disappears. -- For every other declaration we get a singleton list. instance ToAbstract NiceDeclaration A.Declaration where toAbstract d = annotateDecls $ traceCall (ScopeCheckDeclaration d) $+ -- Andreas, 2015-10-05, Issue 1677:+ -- We record in the environment whether we are scope checking an+ -- abstract definition. This way, we can propagate this attribute+ -- the extended lambdas.+ caseMaybe (niceHasAbstract d) id (\ a -> local $ \ e -> e { envAbstractMode = aDefToMode a }) $ case d of -- Axiom (actual postulate)@@ -1528,11 +1547,21 @@ NoWhere -> (Nothing, []) AnyWhere ds -> (Nothing, ds) SomeWhere m ds -> (Just m, ds)++ let isTerminationPragma :: C.Declaration -> Bool+ isTerminationPragma (C.Pragma (TerminationCheckPragma _ _)) = True+ isTerminationPragma _ = False+ if not (null eqs) then do rhs <- toAbstract =<< toAbstractCtx TopCtx (RightHandSide eqs with wcs' rhs whds) return $ A.Clause lhs' rhs [] else do+ -- ASR (16 November 2015) Issue 1137: We ban termination+ -- pragmas inside `where` clause.+ when (any isTerminationPragma whds) $+ genericError "Termination pragmas are not allowed inside where clauses"+ -- the right hand side is checked inside the module of the local definitions (rhs, ds) <- whereToAbstract (getRange wh) whname whds $ toAbstractCtx TopCtx (RightHandSide eqs with wcs' rhs [])
src/full/Agda/Syntax/Translation/InternalToAbstract.hs view
@@ -150,13 +150,13 @@ let mi' = Info.MetaInfo { metaRange = getRange $ miClosRange mi , metaScope = M.clScope $ miClosRange mi- , metaNumber = Just n+ , metaNumber = Just x , metaNameSuggestion = miNameSuggestion mi } underscore = return $ A.Underscore mi' ifNotM shouldReifyInteractionPoints underscore $ {- else -} caseMaybeM (isInteractionMeta x) underscore $ \ ii@InteractionId{} ->- return $ A.QuestionMark (mi' {metaNumber = Just n}) ii+ return $ A.QuestionMark mi' ii -- Does not print with-applications correctly: -- instance Reify DisplayTerm Expr where@@ -518,7 +518,7 @@ let extLam = case mdefn of Nothing -> Nothing Just defn -> case theDef defn of- Function{ funExtLam = Just (h, nh) } -> Just (h + nh)+ Function{ funExtLam = Just (ExtLamInfo h nh) } -> Just (h + nh) _ -> Nothing case extLam of Just pars | df -> do
src/full/Agda/Termination/Inlining.hs view
@@ -90,15 +90,27 @@ -- The clause body is a with-function call @wf args@. -- @f@ is the function the with-function belongs to. let args = fromMaybe __IMPOSSIBLE__ . allApplyElims $ els++ reportSDoc "term.with.inline" 70 $ sep+ [ text "Found with (raw):", nest 2 $ text $ show cl ] reportSDoc "term.with.inline" 20 $ sep [ text "Found with:", nest 2 $ prettyTCM $ QNamed f cl ]+ t <- defType <$> getConstInfo wf cs1 <- withExprClauses cl t args++ reportSDoc "term.with.inline" 70 $ vcat $+ text "withExprClauses (raw)" : map (nest 2 . text . show) cs1 reportSDoc "term.with.inline" 20 $ vcat $ text "withExprClauses" : map (nest 2 . prettyTCM . QNamed f) cs1+ cs2 <- inlinedClauses f cl t wf++ reportSDoc "term.with.inline" 70 $ vcat $+ text "inlinedClauses (raw)" : map (nest 2 . text . show) cs2 reportSDoc "term.with.inline" 20 $ vcat $ text "inlinedClauses" : map (nest 2 . prettyTCM . QNamed f) cs2+ return $ cs1 ++ cs2 _ -> noInline @@ -156,8 +168,11 @@ -- of the arguments to the parent function. Fortunately we have already -- figured out how to turn an application of the with-function into an -- application of the parent function in the display form.+ reportSDoc "term.with.inline" 70 $ text "inlining (raw) =" <+> text (show wcl) let vs = clauseArgs wcl Just disp <- displayForm wf vs+ reportSDoc "term.with.inline" 70 $ text "display form (raw) =" <+> text (show disp)+ reportSDoc "term.with.inline" 40 $ text "display form =" <+> prettyTCM disp (pats, perm) <- dispToPats disp -- Now we need to sort out the right hand side. We have
src/full/Agda/TypeChecking/Abstract.hs view
@@ -22,7 +22,7 @@ piAbstractTerm :: Term -> Type -> Type -> Type piAbstractTerm v a b = fun a (abstractTerm v b) where- fun a b = El s $ Pi (Common.Dom defaultArgInfo a) $ mkAbs "w" b+ fun a b = El s $ Pi (defaultDom a) $ mkAbs "w" b where s = (sLub `on` getSort) a b -- | @isPrefixOf u v = Just es@ if @v == u `applyE` es@.
src/full/Agda/TypeChecking/CompiledClause.hs view
@@ -133,7 +133,7 @@ | (x, v) <- Map.toList m ] instance Pretty CompiledClauses where- pretty (Done hs t) = text ("done" ++ show hs) <+> text (show t)+ pretty (Done hs t) = text ("done" ++ show hs) <+> pretty t pretty Fail = text "fail" pretty (Case n bs) | projPatterns bs = sep [ text "record"
src/full/Agda/TypeChecking/CompiledClause/Compile.hs view
@@ -21,11 +21,14 @@ import Agda.TypeChecking.Monad import Agda.TypeChecking.RecordPatterns import Agda.TypeChecking.Substitute-import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Pretty (prettyTCM, nest, sep, text) import Agda.Utils.Functor+import Agda.Utils.Maybe import Agda.Utils.Null import Agda.Utils.List+import Agda.Utils.Pretty (Pretty(..), prettyShow)+import qualified Agda.Utils.Pretty as P #include "undefined.h" import Agda.Utils.Impossible@@ -41,7 +44,7 @@ Maybe (QName, Type) -- ^ Translate record patterns and coverage check with given type? -> [Clause] -> TCM CompiledClauses compileClauses mt cs = do- let cls = [(clausePats c, clauseBody c) | c <- cs]+ let cls = [ Cl (clausePats c) (clauseBody c) | c <- cs ] case mt of Nothing -> return $ compile cls Just (q, t) -> do@@ -49,7 +52,7 @@ reportSDoc "tc.cc" 30 $ sep $ do (text "clauses patterns before compilation") : do- map (prettyTCM . map unArg . fst) cls+ map (prettyTCM . map unArg . clPats) cls reportSDoc "tc.cc" 50 $ do sep [ text "clauses before compilation" , (nest 2 . text . show) cs@@ -62,16 +65,21 @@ cc <- translateCompiledClauses cc return cc -type Cl = ([I.Arg Pattern], ClauseBody)+-- | Stripped-down version of 'Agda.Syntax.Internal.Clause'+-- used in clause compiler.+data Cl = Cl+ { clPats :: [I.Arg Pattern]+ , clBody :: ClauseBody+ } deriving (Show)++instance Pretty Cl where+ pretty (Cl ps b) = P.prettyList ps P.<+> P.text "->" P.<+> pretty b+ type Cls = [Cl] compileWithSplitTree :: SplitTree -> Cls -> CompiledClauses compileWithSplitTree t cs = case t of- SplitAt i ts ->- -- the coverage checker does not count dot patterns as variables- -- in case trees however, they count as variable patterns- let n = i -- countInDotPatterns i cs- in Case n $ compiles ts $ splitOn (length ts == 1) n cs+ SplitAt i ts -> Case i $ compiles ts $ splitOn (length ts == 1) i cs -- if there is just one case, we force expansion of catch-alls -- this is needed to generate a sound tree on which we can -- collapse record pattern splits@@ -83,31 +91,25 @@ compiles ts br@Branches{ projPatterns = cop , conBranches = cons , litBranches = lits- , catchAllBranch = Nothing }- | Map.null lits = empty { projPatterns = cop, conBranches = updCons cons }+ , catchAllBranch = catchAll }+ = Branches+ { projPatterns = cop+ , conBranches = updCons cons+ , litBranches = compile <$> lits+ , catchAllBranch = compile <$> catchAll+ } where updCons = Map.mapWithKey $ \ c cl ->- let t = fromMaybe __IMPOSSIBLE__ $ lookup c ts- in compileWithSplitTree t <$> cl- compiles ts br = compile <$> br-- -- increase split index by number of dot patterns we have skipped- countInDotPatterns :: Int -> [Cl] -> Int- countInDotPatterns i [] = __IMPOSSIBLE__- countInDotPatterns i ((ps, _) : _) = i + loop i (map unArg ps) where- loop 0 ps = 0- loop i [] = __IMPOSSIBLE__- loop i (DotP{} : ps) = 1 + loop i ps- loop i (_ : ps) = loop (i - 1) ps-+ caseMaybe (lookup c ts) compile compileWithSplitTree <$> cl+ -- When the split tree is finished, we continue with @compile@. compile :: Cls -> CompiledClauses compile cs = case nextSplit cs of Just (isRecP, n)-> Case n $ fmap compile $ splitOn isRecP n cs- Nothing -> case map (getBody . snd) cs of+ Nothing -> case map (getBody . clBody) cs of -- It's possible to get more than one clause here due to -- catch-all expansion.- Just t : _ -> Done (map (fmap name) $ fst $ head cs) (shared t)+ Just t : _ -> Done (map (fmap name) $ clPats $ head cs) (shared t) Nothing : _ -> Fail [] -> __IMPOSSIBLE__ where@@ -120,8 +122,8 @@ -- | Get the index of the next argument we need to split on. -- This the number of the first pattern that does a match in the first clause. nextSplit :: Cls -> Maybe (Bool, Int)-nextSplit [] = __IMPOSSIBLE__-nextSplit ((ps, _):_) = headMaybe $ catMaybes $+nextSplit [] = __IMPOSSIBLE__+nextSplit (Cl ps _ : _) = headMaybe $ catMaybes $ zipWith (\ p n -> (,n) <$> properSplit (unArg p)) ps [0..] -- | Is is not a variable pattern?@@ -147,16 +149,17 @@ -- if @single@. splitOn :: Bool -> Int -> Cls -> Case Cls splitOn single n cs = mconcat $ map (fmap (:[]) . splitC n) $- -- (\ cs -> trace ("splitting on " ++ show n ++ " after expandCatchAlls " ++ show single ++ ": " ++ show cs) cs) $+ -- (\ cs -> trace ("splitting on " ++ show n ++ " after expandCatchAlls " ++ show single ++ ": " ++ prettyShow (P.prettyList cs)) cs) $ expandCatchAlls single n cs splitC :: Int -> Cl -> Case Cl-splitC n (ps, b) = case unArg p of- ProjP d -> projCase d (ps0 ++ ps1, b)- ConP c _ qs -> conCase (conName c) $ WithArity (length qs) (ps0 ++ map (fmap namedThing) qs ++ ps1, b)- LitP l -> litCase l (ps0 ++ ps1, b)- VarP{} -> catchAll (ps, b)- DotP{} -> catchAll (ps, b)+splitC n (Cl ps b) = case unArg p of+ ProjP d -> projCase d $ Cl (ps0 ++ ps1) b+ ConP c _ qs -> conCase (conName c) $ WithArity (length qs) $+ Cl (ps0 ++ map (fmap namedThing) qs ++ ps1) b+ LitP l -> litCase l $ Cl (ps0 ++ ps1) b+ VarP{} -> catchAll $ Cl ps b+ DotP{} -> catchAll $ Cl ps b where (ps0, p, ps1) = extractNthElement' n ps @@ -204,16 +207,16 @@ -- we force expansion if single then doExpand =<< cs else case cs of- _ | all (isCatchAllNth . fst) cs -> cs- (ps, b) : cs | not (isCatchAllNth ps) -> (ps, b) : expandCatchAlls False n cs- | otherwise -> map (expand ps b) expansions ++ (ps, b) : expandCatchAlls False n cs+ _ | all (isCatchAllNth . clPats) cs -> cs+ Cl ps b : cs | not (isCatchAllNth ps) -> Cl ps b : expandCatchAlls False n cs+ | otherwise -> map (expand ps b) expansions ++ Cl ps b : expandCatchAlls False n cs _ -> __IMPOSSIBLE__ where -- In case there is only one branch in the split tree, we expand all -- catch-alls for this position -- The @expansions@ are collected from all the clauses @cs@ then. -- Note: @expansions@ could be empty, so we keep the orignal clause.- doExpand c@(ps, b)+ doExpand c@(Cl ps b) | isVar $ unArg $ nth ps = map (expand ps b) expansions ++ [c] | otherwise = [c] @@ -230,19 +233,19 @@ -- These are the cases the wildcard needs to be expanded into. expansions = nubBy ((==) `on` (classify . unArg)) . filter (not . isVar . unArg)- . map (nth . fst)+ . map (nth . clPats) $ cs expand ps b q = case unArg q of- ConP c mt qs' -> (ps0 ++ [q $> ConP c mt conPArgs] ++ ps1,- substBody n' m (Con c conArgs) b)+ ConP c mt qs' -> Cl (ps0 ++ [q $> ConP c mt conPArgs] ++ ps1)+ (substBody n' m (Con c conArgs) b) where m = length qs' -- replace all direct subpatterns of q by _ conPArgs = map (fmap ($> VarP underscore)) qs' conArgs = zipWith (\ q n -> q $> var n) qs' $ downFrom m- LitP l -> (ps0 ++ [q $> LitP l] ++ ps1, substBody n' 0 (Lit l) b)+ LitP l -> Cl (ps0 ++ [q $> LitP l] ++ ps1) (substBody n' 0 (Lit l) b) _ -> __IMPOSSIBLE__ where (ps0, rest) = splitAt n ps
src/full/Agda/TypeChecking/Coverage.hs view
@@ -401,7 +401,7 @@ -- let flex = [0..size delta1 + size gamma - 1] let gammaDelta1 = gammal ++ telToList delta1 makeFlex i d = flexibleVarFromHiding (getHiding d) i- flex = zipWith makeFlex [0 .. size gammaDelta1 - 1] gammaDelta1+ flex = zipWith makeFlex [0..] gammaDelta1 -- Unify constructor target and given type (in Δ₁Γ) let conIxs = drop (size pars) cixs
src/full/Agda/TypeChecking/Errors.hs view
@@ -36,6 +36,7 @@ import Agda.TypeChecking.Monad.Closure import Agda.TypeChecking.Monad.Context import Agda.TypeChecking.Monad.Options+import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce (instantiate) @@ -600,9 +601,14 @@ pwords "Duplicate binding for built-in thing" ++ [text b <> comma] ++ pwords "previous binding to" ++ [prettyTCM x] - NoBindingForBuiltin x -> fsep $- pwords "No binding for builtin thing" ++ [text x <> comma] ++- pwords ("use {-# BUILTIN " ++ x ++ " name #-} to bind it to 'name'")+ NoBindingForBuiltin x+ | elem x [builtinZero, builtinSuc] -> fsep $+ pwords "No binding for builtin " ++ [text x <> comma] +++ pwords ("use {-# BUILTIN " ++ builtinNat ++ " name #-} to bind builtin natural " +++ "numbers to the type 'name'")+ | otherwise -> fsep $+ pwords "No binding for builtin thing" ++ [text x <> comma] +++ pwords ("use {-# BUILTIN " ++ x ++ " name #-} to bind it to 'name'") NoSuchPrimitiveFunction x -> fsep $ pwords "There is no primitive function called" ++ [text x]
src/full/Agda/TypeChecking/Monad/Base.hs view
@@ -905,27 +905,39 @@ --------------------------------------------------------------------------- data Signature = Sig- { sigSections :: Sections- , sigDefinitions :: Definitions- , sigRewriteRules:: RewriteRuleMap -- ^ The rewrite rules defined in this file.+ { _sigSections :: Sections+ , _sigDefinitions :: Definitions+ , _sigRewriteRules:: RewriteRuleMap -- ^ The rewrite rules defined in this file. } deriving (Typeable, Show) +sigSections :: Lens' Sections Signature+sigSections f s =+ f (_sigSections s) <&>+ \x -> s {_sigSections = x}++sigDefinitions :: Lens' Definitions Signature+sigDefinitions f s =+ f (_sigDefinitions s) <&>+ \x -> s {_sigDefinitions = x}++sigRewriteRules :: Lens' RewriteRuleMap Signature+sigRewriteRules f s =+ f (_sigRewriteRules s) <&>+ \x -> s {_sigRewriteRules = x}+ type Sections = Map ModuleName Section type Definitions = HashMap QName Definition type RewriteRuleMap = HashMap QName RewriteRules -data Section = Section- { secTelescope :: Telescope- , secFreeVars :: Nat -- ^ This is the number of parameters when- -- we're inside the section and 0- -- outside. It's used to know how much of- -- the context to apply function from the- -- section to when translating from- -- abstract to internal syntax.- }+data Section = Section { _secTelescope :: Telescope } deriving (Typeable, Show) +secTelescope :: Lens' Telescope Section+secTelescope f s =+ f (_secTelescope s) <&>+ \x -> s {_secTelescope = x}+ emptySignature :: Signature emptySignature = Sig Map.empty HMap.empty HMap.empty @@ -1082,6 +1094,12 @@ noCompiledRep :: CompiledRepresentation noCompiledRep = CompiledRep Nothing Nothing Nothing Nothing +-- | Additional information for extended lambdas.+data ExtLamInfo = ExtLamInfo+ { extLamNumHidden :: Int -- Number of hidden args to be dropped when printing.+ , extLamNumNonHid :: Int -- Number of visible args to be dropped when printing.+ } deriving (Typeable, Eq, Ord, Show)+ -- | Additional information for projection 'Function's. data Projection = Projection { projProper :: Maybe QName@@ -1137,7 +1155,7 @@ -- instantiation? , funTerminates :: Maybe Bool -- ^ Has this function been termination checked? Did it pass?- , funExtLam :: Maybe (Int,Int)+ , funExtLam :: Maybe ExtLamInfo -- ^ Is this function generated from an extended lambda? -- If yes, then return the number of hidden and non-hidden lambda-lifted arguments , funWith :: Maybe QName@@ -2389,7 +2407,7 @@ killRange = fmap killRange instance KillRange Section where- killRange (Section tel freeVars) = killRange2 Section tel freeVars+ killRange (Section tel) = killRange1 Section tel instance KillRange Definition where killRange (Defn ai name t pols occs displ mut compiled inst def) =@@ -2410,6 +2428,9 @@ killRange5 RewriteRule q gamma lhs rhs t instance KillRange CompiledRepresentation where+ killRange = id++instance KillRange ExtLamInfo where killRange = id instance KillRange Defn where
src/full/Agda/TypeChecking/Monad/Builtin.hs view
@@ -86,20 +86,13 @@ constructorForm v = constructorForm' primZero primSuc v constructorForm' :: Applicative m => m Term -> m Term -> Term -> m Term-constructorForm' pZero pSuc v = case ignoreSharing v of-{- 2012-04-02 changed semantics of DontCare--- Andreas, 2011-10-03, the following line restores IrrelevantLevel- DontCare v -> constructorForm v--}- Lit (LitInt r n) -> cons (Lit . LitInt r) n--- Level (Max []) -> primLevelZero--- Level (Max [ClosedLevel n]) -> cons primLevelZero primLevelSuc (Level . Max . (:[]) . ClosedLevel) n- _ -> pure v- where- cons lit n- | n == 0 = pZero- | n > 0 = (`apply` [defaultArg $ lit $ n - 1]) <$> pSuc- | otherwise = pure v+constructorForm' pZero pSuc v =+ case ignoreSharing v of+ Lit (LitInt r n)+ | n == 0 -> pZero+ | n > 0 -> (`apply` [defaultArg $ Lit $ LitInt r $ n - 1]) <$> pSuc+ | otherwise -> pure v+ _ -> pure v --------------------------------------------------------------------------- -- * The names of built-in things
src/full/Agda/TypeChecking/Monad/Signature.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE CPP #-}+{-# LANGUAGE DoAndIfThenElse #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE PatternGuards #-}@@ -141,19 +142,36 @@ (HMap.unionWith mappend c c') -- rewrite rules are accumulated -- | Add a section to the signature.-addSection :: ModuleName -> Nat -> TCM ()-addSection m fv = do+--+-- The current context will be stored as the cumulative module parameters+-- for this section.+addSection :: ModuleName -> TCM ()+addSection m = do tel <- getContextTelescope- let sec = Section tel fv- modifySignature $ \sig -> sig { sigSections = Map.insert m sec $ sigSections sig }+ let sec = Section tel+ -- Make sure we do not overwrite an existing section!+ whenJustM (getSection m) $ \ sec' -> do+ -- At least not with different content!+ if (sec == sec') then do+ -- Andreas, 2015-12-02: test/Succeed/Issue1701II.agda+ -- reports a "redundantly adding existing section".+ reportSLn "tc.section" 10 $ "warning: redundantly adding existing section " ++ show m+ reportSLn "tc.section" 60 $ "with content " ++ show sec+ else do+ reportSLn "impossible" 10 $ "overwriting existing section " ++ show m+ reportSLn "impossible" 60 $ "of content " ++ show sec'+ reportSLn "impossible" 60 $ "with content " ++ show sec+ __IMPOSSIBLE__+ -- Add the new section.+ modifySignature $ over sigSections $ Map.insert m sec -- | Lookup a section. If it doesn't exist that just means that the module -- wasn't parameterised. lookupSection :: ModuleName -> TCM Telescope lookupSection m = do- sig <- sigSections <$> getSignature- isig <- sigSections <$> getImportedSignature- return $ maybe EmptyTel secTelescope $ Map.lookup m sig `mplus` Map.lookup m isig+ sig <- use $ stSignature . sigSections+ isig <- use $ stImports . sigSections+ return $ maybe EmptyTel (^. secTelescope) $ Map.lookup m sig `mplus` Map.lookup m isig -- Add display forms to all names @xn@ such that @x = x1 es1@, ... @xn-1 = xn esn@. addDisplayForms :: QName -> TCM ()@@ -212,6 +230,10 @@ -> Ren ModuleName -- ^ Imported modules (given as renaming). -> TCM () applySection new ptel old ts rd rm = do+ applySection' new ptel old ts rd rm++applySection' :: ModuleName -> Telescope -> ModuleName -> Args -> Ren QName -> Ren ModuleName -> TCM ()+applySection' new ptel old ts rd rm = do reportSLn "tc.mod.apply" 10 $ render $ vcat [ text "applySection" , text "new =" <+> text (show new)@@ -236,13 +258,10 @@ -- produce out-of-scope constructors. copyName x = fromMaybe x $ lookup x rd - argsToUse new = do- let m = mnameFromList $ commonPrefix (mnameToList old) (mnameToList new)+ argsToUse x = do+ let m = commonParentModule old x reportSLn "tc.mod.apply" 80 $ "Common prefix: " ++ show m- let ms = tail . map mnameFromList . inits . mnameToList $ m- ps <- mapM (maybe 0 secFreeVars <.> getSection) ms- reportSLn "tc.mod.apply" 80 $ " params: " ++ show (zip ms ps)- return $ sum ps+ size <$> lookupSection m copyDef :: Args -> (QName, QName) -> TCM () copyDef ts (x, y) = do@@ -314,8 +333,8 @@ Record{ recPars = np, recConType = t, recTel = tel } -> return $ oldDef { recPars = np - size ts' , recClause = Just cl- , recConType = apply t ts- , recTel = apply tel ts+ , recConType = apply t ts'+ , recTel = apply tel ts' } _ -> do cc <- compileClauses Nothing [cl] -- Andreas, 2012-10-07 non need for record pattern translation@@ -349,22 +368,47 @@ , clauseType = Just $ defaultArg t } + {- Example++ module Top Θ where+ module A Γ where+ module M Φ where+ module B Δ where+ module N Ψ where+ module O Ψ' where+ open A public -- introduces only M --> A.M into the *scope*+ module C Ξ = Top.B ts++ new section C+ tel = Ξ.(Θ.Δ)[ts]++ calls+ 1. copySec ts (Top.A.M, C.M)+ 2. copySec ts (Top.B.N, C.N)+ 3. copySec ts (Top.B.N.O, C.N.O)+ with+ old = Top.B++ For 1.+ Common prefix is: Top+ totalArgs = |Θ| (section Top)+ tel = Θ.Γ.Φ (section Top.A.M)+ ts' = take totalArgs ts+ Θ₂ = drop totalArgs Θ+ new section C.M+ tel = Θ₂.Γ.Φ[ts']+ -} copySec :: Args -> (ModuleName, ModuleName) -> TCM () copySec ts (x, y) = do totalArgs <- argsToUse x tel <- lookupSection x- ptel <- lookupSection $ mnameFromList $ init $ mnameToList x- let parentParams = size ptel- childParams = size tel - parentParams- argsToChild = max 0 $ totalArgs - parentParams- let fv = childParams - argsToChild+ let sectionTel = apply tel $ take totalArgs ts reportSLn "tc.mod.apply" 80 $ "Copying section " ++ show x ++ " to " ++ show y- reportSLn "tc.mod.apply" 80 $ " free variables: " ++ show fv- reportSLn "tc.mod.apply" 80 $ " ts = " ++ show ts- reportSLn "tc.mod.apply" 80 $ " tel = " ++ show (map (second unEl . unDom) $ telToList tel)- reportSLn "tc.mod.apply" 80 $ " ptel = " ++ show (map (second unEl . unDom) $ telToList ptel)- reportSLn "tc.mod.apply" 80 $ " np = " ++ show totalArgs- addCtxTel (apply tel $ take totalArgs ts) $ addSection y fv+ reportSLn "tc.mod.apply" 80 $ " ts = " ++ intercalate "; " (map prettyShow ts)+ reportSLn "tc.mod.apply" 80 $ " totalArgs = " ++ show totalArgs+ reportSLn "tc.mod.apply" 80 $ " tel = " ++ intercalate " " (map (fst . unDom) $ telToList tel) -- only names+ reportSLn "tc.mod.apply" 80 $ " sectionTel = " ++ intercalate " " (map (fst . unDom) $ telToList ptel) -- only names+ addCtxTel sectionTel $ addSection y -- | Add a display form to a definition (could be in this or imported signature). addDisplayForm :: QName -> DisplayForm -> TCM ()@@ -437,14 +481,14 @@ st <- getTCState let sig = st^.stSignature imp = st^.stImports- look s = HMap.lookup q $ sigRewriteRules s+ look s = HMap.lookup q $ s ^. sigRewriteRules return $ mconcat $ catMaybes [look sig, look imp] instance HasConstInfo (TCMT IO) where getRewriteRulesFor = defaultGetRewriteRulesFor get getConstInfo q = join $ pureTCM $ \st env ->- let defs = sigDefinitions $ st^.stSignature- idefs = sigDefinitions $ st^.stImports+ let defs = st^.(stSignature . sigDefinitions)+ idefs = st^.(stImports . sigDefinitions) in case catMaybes [HMap.lookup q defs, HMap.lookup q idefs] of [] -> fail $ "Unbound name: " ++ show q ++ " " ++ showQNameId q [d] -> mkAbs env d@@ -533,30 +577,22 @@ -- A.B.C say, A and A.B do not exist. getSection :: ModuleName -> TCM (Maybe Section) getSection m = do- sig <- sigSections <$> getSignature- isig <- sigSections <$> getImportedSignature+ sig <- use $ stSignature . sigSections+ isig <- use $ stImports . sigSections return $ Map.lookup m sig <|> Map.lookup m isig --- | Look up the number of free variables of a section. This is equal to the--- number of parameters if we're currently inside the section and 0 otherwise.-getSecFreeVars :: ModuleName -> TCM Nat-getSecFreeVars m = do- top <- currentModule- case top `isSubModuleOf` m || top == m of- True -> maybe 0 secFreeVars <$> getSection m- False -> return 0---- | Compute the number of free variables of a module. This is the sum of--- the free variables of its sections.-getModuleFreeVars :: ModuleName -> TCM Nat-getModuleFreeVars m = sum <$> ((:) <$> getAnonymousVariables m <*> mapM getSecFreeVars ms)- where- ms = map mnameFromList . inits . mnameToList $ m+-- | Get the number of parameters to the current module.+getCurrentModuleFreeVars :: TCM Nat+getCurrentModuleFreeVars = size <$> (lookupSection =<< currentModule) -- | Compute the number of free variables of a defined name. This is the sum of--- the free variables of the sections it's contained in.+-- number of parameters shared with the current module and the number of+-- anonymous variables (if the name comes from a let-bound module). getDefFreeVars :: QName -> TCM Nat-getDefFreeVars q = getModuleFreeVars (qnameModule q)+getDefFreeVars q = do+ let m = qnameModule q+ m0 <- commonParentModule m <$> currentModule+ (+) <$> getAnonymousVariables m <*> (size <$> lookupSection m0) -- | Compute the context variables to apply a definition to. freeVarsToApply :: QName -> TCM Args
src/full/Agda/TypeChecking/Monad/State.hs view
@@ -190,20 +190,16 @@ return r -- ** Modifiers for rewrite rules--mapRewriteRules :: (RewriteRuleMap -> RewriteRuleMap) -> Signature -> Signature-mapRewriteRules f sig = sig { sigRewriteRules = f (sigRewriteRules sig) }- addRewriteRulesFor :: QName -> RewriteRules -> Signature -> Signature-addRewriteRulesFor f rews = mapRewriteRules $ HMap.insertWith mappend f rews+addRewriteRulesFor f rews = over sigRewriteRules $ HMap.insertWith mappend f rews -- ** Modifiers for parts of the signature lookupDefinition :: QName -> Signature -> Maybe Definition-lookupDefinition q sig = HMap.lookup q $ sigDefinitions sig+lookupDefinition q sig = HMap.lookup q $ sig ^. sigDefinitions updateDefinitions :: (Definitions -> Definitions) -> Signature -> Signature-updateDefinitions f sig = sig { sigDefinitions = f (sigDefinitions sig) }+updateDefinitions = over sigDefinitions updateDefinition :: QName -> (Definition -> Definition) -> Signature -> Signature updateDefinition q f = updateDefinitions $ HMap.adjust f q@@ -358,7 +354,7 @@ addSignatureInstances :: Signature -> TCM () addSignatureInstances sig = do let itable = Map.fromListWith (++)- [ (c, [i]) | (i, Defn{ defInstance = Just c }) <- HMap.toList $ sigDefinitions sig ]+ [ (c, [i]) | (i, Defn{ defInstance = Just c }) <- HMap.toList $ sig ^. sigDefinitions ] modifyInstanceDefs $ first $ Map.unionWith (++) itable -- | Lens for 'stInstanceDefs'.
src/full/Agda/TypeChecking/Pretty.hs view
@@ -336,7 +336,7 @@ showPat' showVar = showPat where showPat (VarP x) = showVar x- showPat (DotP t) = text $ ".(" ++ show t ++ ")"+ showPat (DotP t) = text $ ".(" ++ P.prettyShow t ++ ")" showPat (ConP c i ps) = (if b then braces else parens) $ prTy $ prettyTCM c <+> fsep (map (showPat . namedArg) ps) where
src/full/Agda/TypeChecking/Quote.hs view
@@ -194,7 +194,7 @@ qx d @@ quoteArgs ts where ts = fromMaybe __IMPOSSIBLE__ $ allApplyElims es- qx Function{ funExtLam = Just (h, nh), funClauses = cs } =+ qx Function{ funExtLam = Just (ExtLamInfo h nh), funClauses = cs } = extlam !@ list (map (quoteClause . dropArgs (h + nh)) cs) qx Function{ funCompiled = Just Fail, funClauses = [cl] } = extlam !@ list [quoteClause $ dropArgs (length (clausePats cl) - 1) cl]
src/full/Agda/TypeChecking/Records.hs view
@@ -26,8 +26,9 @@ import Agda.TypeChecking.Telescope import Agda.Utils.Either-import Agda.Utils.List import Agda.Utils.Functor (for, ($>))+import Agda.Utils.Lens+import Agda.Utils.List import Agda.Utils.Maybe import Agda.Utils.Monad import Agda.Utils.Null@@ -83,7 +84,7 @@ -- | Find all records with at least the given fields. findPossibleRecords :: [C.Name] -> TCM [QName] findPossibleRecords fields = do- defs <- (HMap.union `on` sigDefinitions) <$> getSignature <*> getImportedSignature+ defs <- (HMap.union `on` (^. sigDefinitions)) <$> getSignature <*> getImportedSignature let possible def = case theDef def of Record{ recFields = fs } -> Set.isSubsetOf given inrecord where inrecord = Set.fromList $ map (nameConcrete . qnameName . unArg) fs
src/full/Agda/TypeChecking/Reduce.hs view
@@ -1080,7 +1080,7 @@ instantiateFull' (Sig a b c) = uncurry3 Sig <$> instantiateFull' (a, b, c) instance InstantiateFull Section where- instantiateFull' (Section tel n) = flip Section n <$> instantiateFull' tel+ instantiateFull' (Section tel) = Section <$> instantiateFull' tel instance (Subst a, InstantiateFull a) => InstantiateFull (Tele a) where instantiateFull' EmptyTel = return EmptyTel
src/full/Agda/TypeChecking/Reduce/Monad.hs view
@@ -169,8 +169,8 @@ instance HasConstInfo ReduceM where getRewriteRulesFor = defaultGetRewriteRulesFor (gets id) getConstInfo q = ReduceM $ ReaderT $ \(ReduceEnv env st) -> Identity $- let defs = sigDefinitions $ st^.stSignature- idefs = sigDefinitions $ st^.stImports+ let defs = st^.(stSignature . sigDefinitions)+ idefs = st^.(stImports . sigDefinitions) in case catMaybes [HMap.lookup q defs, HMap.lookup q idefs] of [] -> trace ("Unbound name: " ++ show q ++ " " ++ showQNameId q) __IMPOSSIBLE__ [d] -> mkAbs env d
src/full/Agda/TypeChecking/Rules/Data.hs view
@@ -59,7 +59,7 @@ npars = sum $ map countPars ps -- Add the datatype module- addSection (qnameToMName name) 0+ addSection (qnameToMName name) -- Look up the type of the datatype. t <- instantiateFull =<< typeOfConst name
src/full/Agda/TypeChecking/Rules/Decl.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE CPP #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE TupleSections #-} #if __GLASGOW_HASKELL__ >= 710@@ -569,7 +570,7 @@ checkSection :: Info.ModuleInfo -> ModuleName -> A.Telescope -> [A.Declaration] -> TCM () checkSection i x tel ds = checkTelescope tel $ \ tel' -> do- addSection x (size tel')+ addSection x verboseS "tc.mod.check" 10 $ do dx <- prettyTCM x dtel <- mapM prettyAs tel@@ -642,7 +643,7 @@ -- Module applications can appear in lets, in which case we treat -- lambda-bound variables as additional parameters to the module. extraParams <- do- mfv <- getModuleFreeVars =<< currentModule+ mfv <- getCurrentModuleFreeVars fv <- size <$> getContextTelescope return (fv - mfv) when (extraParams > 0) $ reportSLn "tc.mod.apply" 30 $ "Extra parameters to " ++ show m1 ++ ": " ++ show extraParams@@ -671,7 +672,9 @@ , nest 2 $ text "eta =" <+> escapeContext (size ptel) (addContext tel'' $ prettyTCM etaTel) ] -- Now, type check arguments.- ts <- noConstraints $ checkArguments_ DontExpandLast (getRange i) args' tel''+ ts <- (noConstraints $ checkArguments_ DontExpandLast (getRange i) args' tel') >>= \case+ (ts, etaTel') | (size etaTel == size etaTel') -> return ts+ _ -> __IMPOSSIBLE__ -- Perform the application of the module parameters. let aTel = tel' `apply` ts reportSDoc "tc.mod.apply" 15 $ vcat@@ -679,7 +682,7 @@ ] -- Andreas, 2014-04-06, Issue 1094: -- Add the section with well-formed telescope.- addCtxTel aTel $ addSection m1 (size ptel + size aTel + extraParams)+ addCtxTel aTel $ addSection m1 reportSDoc "tc.mod.apply" 20 $ vcat [ sep [ text "applySection", prettyTCM m1, text "=", prettyTCM m2, fsep $ map prettyTCM (vs ++ ts) ]
src/full/Agda/TypeChecking/Rules/Def.hs view
@@ -152,7 +152,7 @@ checkFunDef' :: Type -- ^ the type we expect the function to have -> I.ArgInfo -- ^ is it irrelevant (for instance) -> Delayed -- ^ are the clauses delayed (not unfolded willy-nilly)- -> Maybe (Int, Int) -- ^ does the definition come from an extended lambda+ -> Maybe ExtLamInfo -- ^ does the definition come from an extended lambda -- (if so, we need to know some stuff about lambda-lifted args) -> Maybe QName -- ^ is it a with function (if so, what's the name of the parent function) -> Info.DefInfo -- ^ range info@@ -318,247 +318,261 @@ , wfClauses :: [A.Clause] -- ^ The given clauses for the with function } +-- | Create a clause body from a term.+--+-- As we have type checked the term in the clause telescope, but the final+-- body should have bindings in the order of the pattern variables,+-- we need to apply the permutation to the checked term.++mkBody :: Permutation -> Term -> ClauseBody+mkBody perm v = foldr (\ x t -> Bind $ Abs x t) b xs+ where+ b = Body $ applySubst (renamingR perm) v+ xs = [ stringToArgName $ "h" ++ show n | n <- [0 .. permRange perm - 1] ]++ -- | Type check a function clause.-checkClause :: Type -> A.SpineClause -> TCM Clause++checkClause+ :: Type -- ^ Type of function defined by this clause.+ -> A.SpineClause -- ^ Clause.+ -> TCM Clause -- ^ Type-checked clause.+ checkClause t c@(A.Clause (A.SpineLHS i x aps withPats) rhs0 wh) = do+ reportSDoc "tc.with.top" 30 $ text "Checking clause" $$ prettyA c unless (null withPats) $ typeError $ UnexpectedWithPatterns withPats traceCall (CheckClause t c) $ do aps <- expandPatternSynonyms aps- checkLeftHandSide (CheckPatternShadowing c) (Just x) aps t $ \ (LHSResult delta ps trhs perm) -> do+ checkLeftHandSide (CheckPatternShadowing c) (Just x) aps t $ \ lhsResult@(LHSResult delta ps trhs perm) -> do -- Note that we might now be in irrelevant context, -- in case checkLeftHandSide walked over an irrelevant projection pattern.+ (body, with) <- checkWhere (unArg trhs) wh $ checkRHS i x aps t lhsResult rhs0+ escapeContext (size delta) $ checkWithFunction with - -- As we will be type-checking the @rhs@ in @delta@, but the final- -- body should have bindings in the order of the pattern variables,- -- we need to apply the permutation to the checked rhs @v@.- let mkBody v = foldr (\ x t -> Bind $ Abs x t) b xs- where b = Body $ applySubst (renamingR perm) v- xs = [ stringToArgName $ "h" ++ show n- | n <- [0..permRange perm - 1] ]+ reportSDoc "tc.lhs.top" 10 $ escapeContext (size delta) $ vcat+ [ text "Clause before translation:"+ , nest 2 $ vcat+ [ text "delta =" <+> prettyTCM delta+ , text "perm =" <+> text (show perm)+ , text "ps =" <+> text (show ps)+ , text "body =" <+> text (show body)+ , text "body =" <+> prettyTCM body+ ]+ ] - -- introduce trailing implicits for checking the where decls- TelV htel t0 <- telViewUpTo' (-1) (not . visible) $ unArg trhs- let n = size htel- aps' = convColor aps- checkWhere' wh = addCtxTel htel . checkWhere (size delta + n) wh . escapeContext (size htel)- (body, with) <- checkWhere' wh $ let- -- for the body, we remove the implicits again- handleRHS rhs =- case rhs of- A.RHS e- | any (containsAbsurdPattern . namedArg) aps ->- typeError $ AbsurdPatternRequiresNoRHS aps'- | otherwise -> do- v <- checkExpr e $ unArg trhs- return (mkBody v, NoWithFunction)- A.AbsurdRHS- | any (containsAbsurdPattern . namedArg) aps- -> return (NoBody, NoWithFunction)- | otherwise -> typeError $ NoRHSRequiresAbsurdPattern aps'- A.RewriteRHS [] rhs [] -> handleRHS rhs- -- Andreas, 2014-01-17, Issue 1402:- -- If the rewrites are discarded since lhs=rhs, then- -- we can actually have where clauses.- A.RewriteRHS [] rhs wh -> checkWhere' wh $ handleRHS rhs- A.RewriteRHS ((qname,eq):qes) rhs wh -> do+ return $+ Clause { clauseRange = getRange i+ , clauseTel = killRange delta+ , clausePerm = perm+ , namedClausePats = ps+ , clauseBody = body+ , clauseType = Just trhs+ } - -- Action for skipping this rewrite.- -- We do not want to create unsolved metas in case of- -- a futile rewrite with a reflexive equation.- -- Thus, we restore the state in this case,- -- unless the rewrite expression contains questionmarks.- st <- get- let recurse = do- st' <- get- -- Comparing the whole stInteractionPoints maps is a bit- -- wasteful, but we assume- -- 1. rewriting with a reflexive equality to happen rarely,- -- 2. especially with ?-holes in the rewrite expression- -- 3. and a large overall number of ?s.- let sameIP = (==) `on` (^.stInteractionPoints)- when (sameIP st st') $ put st- handleRHS $ A.RewriteRHS qes rhs wh+-- | Type check the @with@ and @rewrite@ lhss and/or the rhs. - -- Get value and type of rewrite-expression.+checkRHS+ :: LHSInfo -- ^ Range of lhs.+ -> QName -- ^ Name of function.+ -> [A.NamedArg A.Pattern] -- ^ Patterns in lhs.+ -> Type -- ^ Type of function.+ -> LHSResult -- ^ Result of type-checking patterns+ -> A.RHS -- ^ Rhs to check.+ -> TCM (ClauseBody, WithFunctionProblem) - (proof,t) <- inferExpr eq+checkRHS i x aps t (LHSResult delta ps trhs perm) rhs0 = handleRHS rhs0+ where+ aps' = convColor aps+ absurdPat = any (containsAbsurdPattern . namedArg) aps+ handleRHS rhs =+ case rhs of - -- Get the names of builtins EQUALITY and REFL.+ -- Case: ordinary RHS+ A.RHS e -> do+ when absurdPat $ typeError $ AbsurdPatternRequiresNoRHS aps'+ v <- checkExpr e $ unArg trhs+ return (mkBody perm v, NoWithFunction) - equality <- primEqualityName- Con reflCon [] <- ignoreSharing <$> primRefl+ -- Case: no RHS+ A.AbsurdRHS -> do+ unless absurdPat $ typeError $ NoRHSRequiresAbsurdPattern aps'+ return (NoBody, NoWithFunction) - -- Check that the type is actually an equality (lhs ≡ rhs)- -- and extract lhs, rhs, and their type.+ -- Case: @rewrite@+ A.RewriteRHS [] rhs [] -> handleRHS rhs+ -- Andreas, 2014-01-17, Issue 1402:+ -- If the rewrites are discarded since lhs=rhs, then+ -- we can actually have where clauses.+ A.RewriteRHS [] rhs wh -> checkWhere (unArg trhs) wh $ handleRHS rhs+ A.RewriteRHS ((qname,eq):qes) rhs wh -> do - t' <- reduce =<< instantiateFull t- (rewriteType,rewriteFrom,rewriteTo) <- do- case ignoreSharing $ unEl t' of- Def equality'- [ _level- , Apply (Arg (ArgInfo Hidden Relevant _) rewriteType)- , Apply (Arg (ArgInfo NotHidden Relevant _) rewriteFrom)- , Apply (Arg (ArgInfo NotHidden Relevant _) rewriteTo)- ] | equality' == equality ->- return (El (getSort t') rewriteType, rewriteFrom, rewriteTo)- _ -> do- err <- text "Cannot rewrite by equation of type" <+> prettyTCM t'- typeError $ GenericDocError err+ -- Action for skipping this rewrite.+ -- We do not want to create unsolved metas in case of+ -- a futile rewrite with a reflexive equation.+ -- Thus, we restore the state in this case,+ -- unless the rewrite expression contains questionmarks.+ st <- get+ let recurse = do+ st' <- get+ -- Comparing the whole stInteractionPoints maps is a bit+ -- wasteful, but we assume+ -- 1. rewriting with a reflexive equality to happen rarely,+ -- 2. especially with ?-holes in the rewrite expression+ -- 3. and a large overall number of ?s.+ let sameIP = (==) `on` (^.stInteractionPoints)+ when (sameIP st st') $ put st+ handleRHS $ A.RewriteRHS qes rhs wh - -- Andreas, 2014-05-17 Issue 1110:- -- Rewriting with a reflexive equation has no effect, but gives an- -- incomprehensible error message about the generated- -- with clause. Thus, we rather do simply nothing if- -- rewriting with @a ≡ a@ is attempted.+ -- Get value and type of rewrite-expression. - let isReflexive = tryConversion $ dontAssignMetas $- equalTerm rewriteType rewriteFrom rewriteTo+ (proof,t) <- inferExpr eq - ifM isReflexive recurse $ {- else -} do+ -- Get the names of builtins EQUALITY and REFL. - -- Transform 'rewrite' clause into a 'with' clause,- -- going back to abstract syntax.+ equality <- primEqualityName+ Con reflCon [] <- ignoreSharing <$> primRefl - let cinfo = ConPatInfo ConPCon patNoRange- underscore = A.Underscore Info.emptyMetaInfo+ -- Check that the type is actually an equality (lhs ≡ rhs)+ -- and extract lhs, rhs, and their type. - -- Andreas, 2015-02-09 Issue 1421: kill ranges- -- as reify puts in ranges that may point to other files.- (rewriteFromExpr,rewriteToExpr,rewriteTypeExpr, proofExpr) <- killRange <$> do- disableDisplayForms $ withShowAllArguments $ reify- (rewriteFrom, rewriteTo, rewriteType , proof)- let (inner, outer) -- the where clauses should go on the inner-most with- | null qes = ([], wh)- | otherwise = (wh, [])- -- Andreas, 2014-03-05 kill range of copied patterns- -- since they really do not have a source location.- newRhs = A.WithRHS qname [rewriteFromExpr, proofExpr]- [A.Clause (A.LHS i (A.LHSHead x (killRange aps)) pats)- -- Note: handleRHS (A.RewriteRHS _ eqs _ _)- -- is defined by induction on eqs.- (A.RewriteRHS qes (insertPatterns pats rhs) inner)- outer]- pats = [ A.DotP patNoRange underscore- , A.ConP cinfo (AmbQ [conName reflCon]) []]- reportSDoc "tc.rewrite.top" 25 $ vcat- [ text "rewrite"- , text " from = " <+> prettyTCM rewriteFromExpr- , text " to = " <+> prettyTCM rewriteToExpr- , text " typ = " <+> prettyTCM rewriteType- , text " proof = " <+> prettyTCM proofExpr- , text " equ = " <+> prettyTCM t'- ]- handleRHS newRhs+ t' <- reduce =<< instantiateFull t+ (rewriteType,rewriteFrom,rewriteTo) <- do+ case ignoreSharing $ unEl t' of+ Def equality'+ [ _level+ , Apply (Arg (ArgInfo Hidden Relevant _) rewriteType)+ , Apply (Arg (ArgInfo NotHidden Relevant _) rewriteFrom)+ , Apply (Arg (ArgInfo NotHidden Relevant _) rewriteTo)+ ] | equality' == equality ->+ return (El (getSort t') rewriteType, rewriteFrom, rewriteTo)+ _ -> do+ err <- text "Cannot rewrite by equation of type" <+> prettyTCM t'+ typeError $ GenericDocError err - A.WithRHS aux es cs -> do- reportSDoc "tc.with.top" 15 $ vcat- [ text "TC.Rules.Def.checkclause reached A.WithRHS"- , sep $ prettyA aux : map (parens . prettyA) es- ]- reportSDoc "tc.with.top" 30 $- prettyA c- reportSDoc "tc.with.top" 20 $ do- m <- currentModule- nfv <- getModuleFreeVars m- sep [ text "with function module:" <+>- prettyList (map prettyTCM $ mnameToList m)- , text $ "free variables: " ++ show nfv- ]+ -- Andreas, 2014-05-17 Issue 1110:+ -- Rewriting with a reflexive equation has no effect, but gives an+ -- incomprehensible error message about the generated+ -- with clause. Thus, we rather do simply nothing if+ -- rewriting with @a ≡ a@ is attempted. - -- Infer the types of the with expressions- (vs0, as) <- unzip <$> mapM inferExprForWith es- (vs, as) <- normalise (vs0, as)+ let isReflexive = tryConversion $ dontAssignMetas $+ equalTerm rewriteType rewriteFrom rewriteTo - -- Split the telescope into the part needed to type the with arguments- -- and all the other stuff- let fv = allFreeVars (vs, as)- SplitTel delta1 delta2 perm' = splitTelescope fv delta- finalPerm = composeP perm' perm+ ifM isReflexive recurse $ {- else -} do - reportSLn "tc.with.top" 75 $ "delta = " ++ show delta+ -- Transform 'rewrite' clause into a 'with' clause,+ -- going back to abstract syntax. - -- Andreas, 2012-09-17: for printing delta,- -- we should remove it from the context first- reportSDoc "tc.with.top" 25 $ escapeContext (size delta) $ vcat- [ text "delta =" <+> prettyTCM delta- , text "delta1 =" <+> prettyTCM delta1- , text "delta2 =" <+> addCtxTel delta1 (prettyTCM delta2)- ]- reportSDoc "tc.with.top" 25 $ vcat- [ text "vs =" <+> prettyTCM vs- , text "as =" <+> prettyTCM as- , text "perm' =" <+> text (show perm')- , text "perm =" <+> text (show perm)- , text "fPerm =" <+> text (show finalPerm)- ]+ -- Andreas, 2015-02-09 Issue 1421: kill ranges+ -- as reify puts in ranges that may point to other files.+ (rewriteFromExpr,rewriteToExpr,rewriteTypeExpr, proofExpr) <- killRange <$> do+ disableDisplayForms $ withShowAllArguments $ reify+ (rewriteFrom, rewriteTo, rewriteType , proof)+ let (inner, outer) -- the where clauses should go on the inner-most with+ | null qes = ([], wh)+ | otherwise = (wh, [])+ -- Andreas, 2014-03-05 kill range of copied patterns+ -- since they really do not have a source location.+ newRhs = A.WithRHS qname [rewriteFromExpr, proofExpr]+ [A.Clause (A.LHS i (A.LHSHead x (killRange aps)) pats)+ -- Note: handleRHS (A.RewriteRHS _ eqs _ _)+ -- is defined by induction on eqs.+ (A.RewriteRHS qes (insertPatterns pats rhs) inner)+ outer]+ cinfo = ConPatInfo ConPCon patNoRange+ pats = [ A.WildP patNoRange+ , A.ConP cinfo (AmbQ [conName reflCon]) []]+ reportSDoc "tc.rewrite.top" 25 $ vcat+ [ text "rewrite"+ , text " from = " <+> prettyTCM rewriteFromExpr+ , text " to = " <+> prettyTCM rewriteToExpr+ , text " typ = " <+> prettyTCM rewriteType+ , text " proof = " <+> prettyTCM proofExpr+ , text " equ = " <+> prettyTCM t'+ ]+ handleRHS newRhs - -- Create the body of the original function+ -- Case: @with@+ A.WithRHS aux es cs -> do+ reportSDoc "tc.with.top" 15 $ vcat+ [ text "TC.Rules.Def.checkclause reached A.WithRHS"+ , sep $ prettyA aux : map (parens . prettyA) es+ ]+ reportSDoc "tc.with.top" 20 $ do+ nfv <- getCurrentModuleFreeVars+ m <- currentModule+ sep [ text "with function module:" <+>+ prettyList (map prettyTCM $ mnameToList m)+ , text $ "free variables: " ++ show nfv+ ] - -- All the context variables- us <- getContextArgs- let n = size us- m = size delta- -- First the variables bound outside this definition- (us0, us1') = genericSplitAt (n - m) us- -- Then permute the rest and grab those needed to for the with arguments- (us1, us2) = genericSplitAt (size delta1) $ permute perm' us1'- -- Now stuff the with arguments in between and finish with the remaining variables- v = Def aux $ map Apply $ us0 ++ us1 ++ (map defaultArg vs0) ++ us2+ -- Infer the types of the with expressions+ (vs0, as) <- unzip <$> mapM inferExprForWith es+ (vs, as) <- normalise (vs0, as) - -- We need Δ₁Δ₂ ⊢ t'- t' <- return $ renameP (reverseP perm') $ unArg trhs- -- and Δ₁ ⊢ vs : as- (vs, as) <- do- let -- We know that as does not depend on Δ₂- rho = compactS __IMPOSSIBLE__ (replicate (size delta2) Nothing)- return $ applySubst rho $ renameP (reverseP perm') (vs, as)+ -- Andreas, 2012-09-17: for printing delta,+ -- we should remove it from the context first+ reportSDoc "tc.with.top" 25 $ escapeContext (size delta) $ vcat+ [ text "delta =" <+> prettyTCM delta+ ]+ reportSDoc "tc.with.top" 25 $ vcat+ [ text "vs =" <+> prettyTCM vs+ , text "as =" <+> prettyTCM as+ , text "perm =" <+> text (show perm)+ ] + -- Split the telescope into the part needed to type the with arguments+ -- and all the other stuff+ (delta1, delta2, perm', t', as, vs) <- return $+ splitTelForWith delta (unArg trhs) as vs+ let finalPerm = composeP perm' perm - -- Andreas, 2013-02-26 add with-name to signature for printing purposes- addConstant aux =<< do- useTerPragma $ Defn defaultArgInfo aux typeDontCare [] [] [] 0 noCompiledRep Nothing emptyFunction+ reportSLn "tc.with.top" 75 $ "delta = " ++ show delta - -- Andreas, 2013-02-26 separate msgs to see which goes wrong- reportSDoc "tc.with.top" 20 $- text " with arguments" <+> do escapeContext (size delta2) $ prettyList (map prettyTCM vs)- reportSDoc "tc.with.top" 20 $- text " types" <+> do escapeContext (size delta2) $ prettyList (map prettyTCM as)- reportSDoc "tc.with.top" 20 $- text "with function call" <+> prettyTCM v- reportSDoc "tc.with.top" 20 $- text " context" <+> (prettyTCM =<< getContextTelescope)- reportSDoc "tc.with.top" 20 $- text " delta" <+> do escapeContext (size delta) $ prettyTCM delta- reportSDoc "tc.with.top" 20 $- text " fv" <+> text (show fv)- reportSDoc "tc.with.top" 20 $- text " body" <+> (addCtxTel delta $ prettyTCM $ mkBody v)+ -- Andreas, 2012-09-17: for printing delta,+ -- we should remove it from the context first+ reportSDoc "tc.with.top" 25 $ escapeContext (size delta) $ vcat+ [ text "delta1 =" <+> prettyTCM delta1+ , text "delta2 =" <+> addCtxTel delta1 (prettyTCM delta2)+ ]+ reportSDoc "tc.with.top" 25 $ vcat+ [ text "perm' =" <+> text (show perm')+ , text "fPerm =" <+> text (show finalPerm)+ ] - return (mkBody v, WithFunction x aux t delta1 delta2 vs as t' ps perm' perm finalPerm cs)- in handleRHS rhs0- escapeContext (size delta) $ checkWithFunction with+ -- Create the body of the original function - reportSDoc "tc.lhs.top" 10 $ escapeContext (size delta) $ vcat- [ text "Clause before translation:"- , nest 2 $ vcat- [ text "delta =" <+> prettyTCM delta- , text "perm =" <+> text (show perm)- , text "ps =" <+> text (show ps)- , text "body =" <+> text (show body)- , text "body =" <+> prettyTCM body- ]- ]+ -- All the context variables+ us <- getContextArgs+ let n = size us+ m = size delta+ -- First the variables bound outside this definition+ (us0, us1') = genericSplitAt (n - m) us+ -- Then permute the rest and grab those needed to for the with arguments+ (us1, us2) = genericSplitAt (size delta1) $ permute perm' us1'+ -- Now stuff the with arguments in between and finish with the remaining variables+ v = Def aux $ map Apply $ us0 ++ us1 ++ (map defaultArg vs0) ++ us2+ body = mkBody perm v+ -- Andreas, 2013-02-26 add with-name to signature for printing purposes+ addConstant aux =<< do+ useTerPragma $ Defn defaultArgInfo aux typeDontCare [] [] [] 0 noCompiledRep Nothing emptyFunction - return $- Clause { clauseRange = getRange i- , clauseTel = killRange delta- , clausePerm = perm- , namedClausePats = ps- , clauseBody = body- , clauseType = Just trhs- }+ -- Andreas, 2013-02-26 separate msgs to see which goes wrong+ reportSDoc "tc.with.top" 20 $+ text " with arguments" <+> do escapeContext (size delta) $ addContext delta1 $ addContext delta2 $ prettyList (map prettyTCM vs)+ reportSDoc "tc.with.top" 20 $+ text " types" <+> do escapeContext (size delta) $ addContext delta1 $ prettyList (map prettyTCM as)+ reportSDoc "tc.with.top" 20 $+ text "with function call" <+> prettyTCM v+ reportSDoc "tc.with.top" 20 $+ text " context" <+> (prettyTCM =<< getContextTelescope)+ reportSDoc "tc.with.top" 20 $+ text " delta" <+> do escapeContext (size delta) $ prettyTCM delta+ reportSDoc "tc.with.top" 20 $+ text " body" <+> (addCtxTel delta $ prettyTCM body) + return (body, WithFunction x aux t delta1 delta2 vs as t' ps perm' perm finalPerm cs) checkWithFunction :: WithFunctionProblem -> TCM () checkWithFunction NoWithFunction = return ()@@ -571,12 +585,12 @@ , text "delta2 =" <+> addCtxTel delta1 (prettyTCM delta2) , text "t =" <+> prettyTCM t , text "as =" <+> addCtxTel delta1 (prettyTCM as)- , text "vs =" <+> addCtxTel delta1 (prettyTCM vs)+ , text "vs =" <+> do addCtxTel delta1 $ addCtxTel delta2 $ prettyTCM vs , text "b =" <+> do addCtxTel delta1 $ addCtxTel delta2 $ prettyTCM b , text "qs =" <+> text (show qs) , text "perm' =" <+> text (show perm') , text "perm =" <+> text (show perm)- , text "fperm =" <+> text (show finalPerm)+ , text "fperm =" <+> text (show finalPerm) ] ] @@ -650,7 +664,7 @@ -- Construct the body for the with function cs <- return $ map (A.lhsToSpine) cs- cs <- buildWithFunction aux t qs finalPerm (size delta1) (size as) cs+ cs <- buildWithFunction f aux t qs finalPerm (size delta1) (size as) cs cs <- return $ map (A.spineToLhs) cs -- Check the with function@@ -659,25 +673,36 @@ where info = Info.mkDefInfo (nameConcrete $ qnameName aux) defaultFixity' PublicAccess ConcreteDef (getRange cs) --- | Type check a where clause. The first argument is the number of variables--- bound in the left hand side.-checkWhere :: Nat -> [A.Declaration] -> TCM a -> TCM a-checkWhere _ [] ret = ret-checkWhere n [A.ScopedDecl scope ds] ret = withScope_ scope $ checkWhere n ds ret-checkWhere n [A.Section _ m tel ds] ret = do- checkTelescope tel $ \ tel' -> do- reportSDoc "tc.def.where" 10 $- text "adding section:" <+> prettyTCM m <+> text (show (size tel')) <+> text (show n)- addSection m (size tel' + n) -- the variables bound in the lhs- -- are also parameters- verboseS "tc.def.where" 10 $ do- dx <- prettyTCM m- dtel <- mapM prettyAs tel- dtel' <- prettyTCM =<< lookupSection m- reportSLn "tc.def.where" 10 $ "checking where section " ++ show dx ++ " " ++ show dtel- reportSLn "tc.def.where" 10 $ " actual tele: " ++ show dtel'- withCurrentModule m $ checkDecls ds >> ret-checkWhere _ _ _ = __IMPOSSIBLE__+-- | Type check a where clause.+checkWhere+ :: Type -- ^ Type of rhs.+ -> [A.Declaration] -- ^ Where-declarations to check.+ -> TCM a -- ^ Continutation.+ -> TCM a+checkWhere trhs ds ret0 = do+ -- Temporarily add trailing hidden arguments to check where-declarartions.+ TelV htel _ <- telViewUpTo' (-1) (not . visible) trhs+ let+ -- Remove htel after checking ds.+ ret = escapeContext (size htel) $ ret0+ loop ds = case ds of+ [] -> ret+ [A.ScopedDecl scope ds] -> withScope_ scope $ loop ds+ [A.Section _ m tel ds] -> do+ checkTelescope tel $ \ tel' -> do+ reportSDoc "tc.def.where" 10 $+ text "adding section:" <+> prettyTCM m <+> text (show (size tel'))+ addSection m+ verboseS "tc.def.where" 10 $ do+ dx <- prettyTCM m+ dtel <- mapM prettyAs tel+ dtel' <- prettyTCM =<< lookupSection m+ reportSLn "tc.def.where" 10 $ "checking where section " ++ show dx ++ " " ++ show dtel+ reportSLn "tc.def.where" 10 $ " actual tele: " ++ show dtel'+ withCurrentModule m $ checkDecls ds >> ret+ _ -> __IMPOSSIBLE__+ -- Add htel to check ds.+ addCtxTel htel $ loop ds -- | Check if a pattern contains an absurd pattern. For instance, @suc ()@ containsAbsurdPattern :: A.Pattern -> Bool
src/full/Agda/TypeChecking/Rules/Def.hs-boot view
@@ -8,6 +8,6 @@ checkFunDef :: Delayed -> DefInfo -> QName -> [Clause] -> TCM () -checkFunDef' :: I.Type -> I.ArgInfo -> Delayed -> Maybe (Int,Int) -> Maybe QName -> DefInfo -> QName -> [Clause] -> TCM ()+checkFunDef' :: I.Type -> I.ArgInfo -> Delayed -> Maybe ExtLamInfo -> Maybe QName -> DefInfo -> QName -> [Clause] -> TCM () useTerPragma :: Definition -> TCM Definition
src/full/Agda/TypeChecking/Rules/Record.hs view
@@ -234,7 +234,7 @@ reportSDoc "tc.rec.def" 15 $ nest 2 $ vcat [ text "field tel =" <+> escapeContext 1 (prettyTCM ftel) ]- addSection m (size tel')+ addSection m -- Check the types of the fields -- Andreas, 2013-09-13 all module telescopes count as parameters to the record projections
src/full/Agda/TypeChecking/Rules/Term.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE LambdaCase #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE NondecreasingIndentation #-} {-# LANGUAGE MultiParamTypeClasses #-}@@ -13,13 +14,15 @@ module Agda.TypeChecking.Rules.Term where -import Control.Applicative+import Prelude hiding (null)++import Control.Applicative hiding (empty) import Control.Monad.Trans import Control.Monad.Reader import Data.Maybe import Data.Monoid (mappend)-import Data.List hiding (sort)+import Data.List hiding (sort, null) import qualified Data.Map as Map import Data.Traversable (sequenceA) @@ -80,6 +83,7 @@ import Agda.Utils.Functor (($>)) import Agda.Utils.Maybe import Agda.Utils.Monad+import Agda.Utils.Null import Agda.Utils.Permutation import Agda.Utils.Size import Agda.Utils.Tuple@@ -480,17 +484,21 @@ addConstant qname =<< do useTerPragma $ (defaultDefn info qname t emptyFunction) { defMutual = j }- reportSDoc "tc.term.exlam" 50 $+ reportSDoc "tc.term.exlam" 20 $+ text (show $ A.defAbstract di) <+> text "extended lambda's implementation \"" <> prettyTCM qname <> text "\" has type: " $$ prettyTCM t -- <+> text " where clauses: " <+> text (show cs) args <- getContextArgs- top <- currentModule- freevars <- getModuleFreeVars top- -- freevars <- getSecFreeVars top --Andreas, 2013-02-26 this could be wrong in the presence of module parameters and a where block+ freevars <- getCurrentModuleFreeVars let argsNoParam = genericDrop freevars args -- don't count module parameters let (hid, notHid) = partition isHidden argsNoParam- abstract (A.defAbstract di) $ checkFunDef' t info NotDelayed- (Just (length hid, length notHid)) Nothing di qname cs+ reportSDoc "tc.term.exlam" 30 $ vcat $+ [ text "dropped args: " <+> prettyTCM (take freevars args)+ , text "hidden args: " <+> prettyTCM hid+ , text "visible args: " <+> prettyTCM notHid+ ]+ abstract (A.defAbstract di) $+ checkFunDef' t info NotDelayed (Just $ ExtLamInfo (length hid) (length notHid)) Nothing di qname cs return $ Def qname $ map Apply args where -- Concrete definitions cannot use information about abstract things.@@ -555,7 +563,9 @@ -- Default value @Nothing@ will only be used for missing hidden fields. -- These can be ignored as they will be inserted by @checkArguments_@. orderFields r Nothing xs $ givenFields ++ missingExplicits- args <- checkArguments_ ExpandLast re es $ recTel def `apply` vs+ args <- checkArguments_ ExpandLast re es (recTel def `apply` vs) >>= \case+ (args, remainingTel) | null remainingTel -> return args+ _ -> __IMPOSSIBLE__ -- Don't need to block here! reportSDoc "tc.term.rec" 20 $ text $ "finished record expression" return $ Con con args@@ -992,9 +1002,9 @@ setValueMetaName v (A.metaNameSuggestion i) return (v, t) -- Rechecking an existing metavariable- Just n -> do- let v = MetaV (MetaId n) []- t' <- jMetaType . mvJudgement <$> lookupMeta (MetaId n)+ Just x -> do+ let v = MetaV x []+ t' <- jMetaType . mvJudgement <$> lookupMeta x case mt of Nothing -> return (v, t') Just t -> (,t) <$> coerce v t' t@@ -1432,12 +1442,23 @@ throwError (us ++ u : vs, es, t) -- | Check that a list of arguments fits a telescope.-checkArguments_ :: ExpandHidden -> Range -> [I.NamedArg A.Expr] -> Telescope -> TCM Args+-- Inserts hidden arguments as necessary.+-- Returns the type-checked arguments and the remaining telescope.+checkArguments_+ :: ExpandHidden -- ^ Eagerly insert trailing hidden arguments?+ -> Range -- ^ Range of application.+ -> [I.NamedArg A.Expr] -- ^ Arguments to check.+ -> Telescope -- ^ Telescope to check arguments against.+ -> TCM (Args, Telescope)+ -- ^ Checked arguments and remaining telescope if successful. checkArguments_ exh r args tel = do- z <- runExceptT $ checkArguments exh ExpandInstanceArguments r args (telePi tel $ sort Prop) (sort Prop)+ z <- runExceptT $+ checkArguments exh ExpandInstanceArguments r args (telePi tel typeDontCare) typeDontCare case z of- Right (args, _) -> return args- Left _ -> __IMPOSSIBLE__+ Right (args, t) -> do+ let TelV tel' _ = telView' t+ return (args, tel')+ Left _ -> __IMPOSSIBLE__ -- type cannot be blocked as it is generated by telePi -- | Infer the type of an expression. Implemented by checking against a meta@@ -1501,7 +1522,7 @@ -- | Check whether a de Bruijn index is bound by a module telescope. isModuleFreeVar :: Int -> TCM Bool isModuleFreeVar i = do- nfv <- getModuleFreeVars =<< currentModule+ nfv <- getCurrentModuleFreeVars n <- getContextSize -- The first de Bruijn index that points to a module -- free variable.@@ -1614,7 +1635,7 @@ checkLetBinding (A.LetApply i x modapp rd rm) ret = do -- Any variables in the context that doesn't belong to the current -- module should go with the new module.- fv <- getModuleFreeVars =<< currentModule+ fv <- getCurrentModuleFreeVars n <- getContextSize let new = n - fv reportSLn "tc.term.let.apply" 10 $ "Applying " ++ show modapp ++ " with " ++ show new ++ " free variables"
src/full/Agda/TypeChecking/Serialise.hs view
@@ -1,1966 +1,231 @@-{-# LANGUAGE CPP #-}-{-# LANGUAGE ExistentialQuantification #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE ScopedTypeVariables #-}--#if __GLASGOW_HASKELL__ >= 710-{-# LANGUAGE FlexibleContexts #-}-#endif--#if __GLASGOW_HASKELL__ <= 708-{-# LANGUAGE OverlappingInstances #-}-#endif---- Andreas, Makoto, Francesco 2014-10-15 AIM XX:--- -O2 does not have any noticable effect on runtime--- but sabotages cabal repl with -Werror--- (due to a conflict with --interactive warning)--- {-# OPTIONS_GHC -O2 #-}---- | Structure-sharing serialisation of Agda interface files.---- -!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!---- NOTE: Every time the interface format is changed the interface--- version number should be bumped _in the same patch_.--- -!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!---module Agda.TypeChecking.Serialise- ( encode, encodeFile, encodeInterface- , decode, decodeFile, decodeInterface, decodeHashes- , EmbPrj- )- where--import Control.Applicative-import Control.Arrow (first, second)-import Control.DeepSeq-import qualified Control.Exception as E-import Control.Monad-import Control.Monad.Reader-import Control.Monad.State.Strict (StateT, runStateT, gets, modify)--import Data.Array.IArray-import Data.Word-import Data.ByteString.Lazy (ByteString)-import qualified Data.ByteString.Lazy as L-import Data.Hashable-import qualified Data.HashTable.IO as H-import Data.Int (Int32)-import Data.Maybe-import Data.Map (Map)-import qualified Data.Map as Map-import Data.Set (Set)-import qualified Data.Set as Set-import qualified Data.Binary as B-import qualified Data.Binary.Get as B-import qualified Data.Binary.Put as B-import qualified Data.List as List-import Data.Function-import Data.Typeable ( cast, Typeable, typeOf, TypeRep )--import qualified Codec.Compression.GZip as G--import qualified Agda.Compiler.Epic.Interface as Epic--import Agda.Syntax.Common as Common-import Agda.Syntax.Concrete.Name as C-import qualified Agda.Syntax.Concrete as C-import qualified Agda.Syntax.Abstract as A-import Agda.Syntax.Info-import Agda.Syntax.Internal as I-import Agda.Syntax.Scope.Base-import Agda.Syntax.Position as P--- import Agda.Syntax.Position (Position, Range, noRange)--- import qualified Agda.Syntax.Position as P-import Agda.Syntax.Fixity-import Agda.Syntax.Notation-import Agda.Syntax.Literal-import qualified Agda.Compiler.JS.Syntax as JS-import qualified Agda.Interaction.Highlighting.Range as HR-import qualified Agda.Interaction.Highlighting.Precise as HP-import Agda.Interaction.FindFile--import qualified Agda.TypeChecking.Monad.Benchmark as Bench--import Agda.TypeChecking.Monad-import Agda.TypeChecking.CompiledClause-import Agda.TypeChecking.Positivity.Occurrence--- import Agda.TypeChecking.Pretty--import Agda.Utils.BiMap (BiMap)-import qualified Agda.Utils.BiMap as BiMap-import Agda.Utils.HashMap (HashMap)-import Agda.Utils.Hash-import qualified Agda.Utils.HashMap as HMap-import Agda.Utils.FileName-import Agda.Utils.IORef-import Agda.Utils.Lens-import Agda.Utils.Monad-import Agda.Utils.Permutation--import Agda.Utils.Except ( ExceptT, MonadError(throwError), runExceptT )--#include "undefined.h"-import Agda.Utils.Impossible---- Note that the Binary instance for Int writes 64 bits, but throws--- away the 32 high bits when reading (at the time of writing, on--- 32-bit machines). Word64 does not have these problems.--currentInterfaceVersion :: Word64-currentInterfaceVersion = 20150829 * 10 + 0---- | Constructor tag (maybe omitted) and argument indices.--type Node = [Int32]---- | The type of hashtables used in this module.------ A very limited amount of testing indicates that 'H.CuckooHashTable'--- is somewhat slower than 'H.BasicHashTable', and that--- 'H.LinearHashTable' and the hashtables from "Data.Hashtable" are--- much slower.--#if defined(mingw32_HOST_OS) && defined(x86_64_HOST_ARCH)-type HashTable k v = H.CuckooHashTable k v-#else-type HashTable k v = H.BasicHashTable k v-#endif---- | Structure providing fresh identifiers for hash map--- and counting hash map hits (i.e. when no fresh identifier required).-data FreshAndReuse = FreshAndReuse- { farFresh :: !Int32 -- ^ Number of hash map misses.- , farReuse :: !Int32 -- ^ Number of hash map hits.- }--farEmpty :: FreshAndReuse-farEmpty = FreshAndReuse 0 0--lensFresh :: Lens' Int32 FreshAndReuse-lensFresh f r = f (farFresh r) <&> \ i -> r { farFresh = i }--lensReuse :: Lens' Int32 FreshAndReuse-lensReuse f r = f (farReuse r) <&> \ i -> r { farReuse = i }---- | Two 'A.QName's are equal if their @QNameId@ is equal.-type QNameId = [NameId]---- | Computing a qualified names composed ID.-qnameId :: A.QName -> QNameId-qnameId (A.QName (A.MName ns) n) = map A.nameId $ n:ns---- | State of the the encoder.-data Dict = Dict- -- Dictionaries which are serialized:- { nodeD :: !(HashTable Node Int32) -- ^ Written to interface file.- , stringD :: !(HashTable String Int32) -- ^ Written to interface file.- , integerD :: !(HashTable Integer Int32) -- ^ Written to interface file.- , doubleD :: !(HashTable Double Int32) -- ^ Written to interface file.- -- Dicitionaries which are not serialized, but provide- -- short cuts to speed up serialization:- , termD :: !(HashTable (Ptr Term) Int32) -- ^ Not written to interface file.- -- Andreas, Makoto, AIM XXI- -- Memoizing A.Name does not buy us much if we already memoize A.QName.- , nameD :: !(HashTable NameId Int32) -- ^ Not written to interface file.- , qnameD :: !(HashTable QNameId Int32) -- ^ Not written to interface file.- -- Fresh UIDs and reuse statistics:- , nodeC :: !(IORef FreshAndReuse) -- counters for fresh indexes- , stringC :: !(IORef FreshAndReuse)- , integerC :: !(IORef FreshAndReuse)- , doubleC :: !(IORef FreshAndReuse)- , termC :: !(IORef FreshAndReuse)- , nameC :: !(IORef FreshAndReuse)- , qnameC :: !(IORef FreshAndReuse)- , stats :: !(HashTable String Int)- , collectStats :: Bool- -- ^ If @True@ collect in @stats@ the quantities of- -- calls to @icode@ for each @Typeable a@.- , absPathD :: !(HashTable AbsolutePath Int32) -- ^ Not written to interface file.- }---- | Creates an empty dictionary.-emptyDict- :: Bool- -- ^ Collect statistics for @icode@ calls?- -> IO Dict-emptyDict collectStats = Dict- <$> H.new- <*> H.new- <*> H.new- <*> H.new- <*> H.new- <*> H.new- <*> H.new- <*> newIORef farEmpty- <*> newIORef farEmpty- <*> newIORef farEmpty- <*> newIORef farEmpty- <*> newIORef farEmpty- <*> newIORef farEmpty- <*> newIORef farEmpty- <*> H.new- <*> pure collectStats- <*> H.new---- | Universal type, wraps everything.-data U = forall a . Typeable a => U !a---- | Univeral memo structure, to introduce sharing during decoding-type Memo = HashTable (Int32, TypeRep) U -- (node index, type rep)---- | State of the decoder.-data St = St- { nodeE :: !(Array Int32 Node) -- ^ Obtained from interface file.- , stringE :: !(Array Int32 String) -- ^ Obtained from interface file.- , integerE :: !(Array Int32 Integer) -- ^ Obtained from interface file.- , doubleE :: !(Array Int32 Double) -- ^ Obtained from interface file.- , nodeMemo :: !Memo- -- ^ Created and modified by decoder.- -- Used to introduce sharing while deserializing objects.- , modFile :: !ModuleToSource- -- ^ Maps module names to file names. Constructed by the decoder.- , includes :: [AbsolutePath]- -- ^ The include directories.- }---- | Monad used by the encoder.--type S a = ReaderT Dict IO a---- | Monad used by the decoder.------ 'TCM' is not used because the associated overheads would make--- decoding slower.--type R a = ExceptT TypeError (StateT St IO) a---- | Throws an error which is suitable when the data stream is--- malformed.--malformed :: R a-malformed = throwError $ GenericError "Malformed input."--class Typeable a => EmbPrj a where- icode :: a -> S Int32 -- ^ Serialization (wrapper).- icod_ :: a -> S Int32 -- ^ Serialization (worker).- value :: Int32 -> R a -- ^ Deserialization.-- icode a = do- tickICode a- icod_ a---- | Increase entry for @a@ in 'stats'.-tickICode :: forall a. Typeable a => a -> S ()-tickICode _ = whenM (asks collectStats) $ do- let key = "icode " ++ show (typeOf (undefined :: a))- hmap <- asks stats- liftIO $ do- n <- fromMaybe 0 <$> H.lookup hmap key- H.insert hmap key $! n + 1---- | Encodes something. To ensure relocatability file paths in--- positions are replaced with module names.--encode :: EmbPrj a => a -> TCM L.ByteString-encode a = do- collectStats <- hasVerbosity "profile.serialize" 20- fileMod <- sourceToModule- newD@(Dict nD sD iD dD _tD- _nameD- _qnameD- nC sC iC dC tC- nameC- qnameC- stats _ _) <- liftIO $ emptyDict collectStats- root <- liftIO $ (`runReaderT` newD) $ do- icodeFileMod fileMod- icode a- nL <- benchSort $ l nD- sL <- benchSort $ l sD- iL <- benchSort $ l iD- dL <- benchSort $ l dD- -- Record reuse statistics.- verboseS "profile.sharing" 10 $ do- statistics "pointers" tC- verboseS "profile.serialize" 10 $ do- statistics "Integer" iC- statistics "String" sC- statistics "Double" dC- statistics "Node" nC- statistics "Shared Term" tC- statistics "A.QName" qnameC- statistics "A.Name" nameC- when collectStats $ do- stats <- Map.fromList . map (second toInteger) <$> do- liftIO $ H.toList stats- modifyStatistics $ Map.union stats- -- Encode hashmaps and root, and compress.- bits1 <- Bench.billTo [ Bench.Serialization, Bench.BinaryEncode ] $- return $!! B.encode (root, nL, sL, iL, dL)- let compressParams = G.defaultCompressParams- { G.compressLevel = G.bestSpeed- , G.compressStrategy = G.huffmanOnlyStrategy- }- cbits <- Bench.billTo [ Bench.Serialization, Bench.Compress ] $- return $!! G.compressWith compressParams bits1- let x = B.encode currentInterfaceVersion `L.append` cbits- return x- where- l h = List.map fst . List.sortBy (compare `on` snd) <$> H.toList h- benchSort = Bench.billTo [Bench.Serialization, Bench.Sort] . liftIO- statistics :: String -> IORef FreshAndReuse -> TCM ()- statistics kind ioref = do- FreshAndReuse fresh reused <- liftIO $ readIORef ioref- tickN (kind ++ " (fresh)") $ fromIntegral fresh- tickN (kind ++ " (reused)") $ fromIntegral reused----- encode :: EmbPrj a => a -> TCM L.ByteString--- encode a = do--- fileMod <- sourceToModule--- (x, shared, total) <- liftIO $ do--- newD@(Dict nD sD iD dD _ _ _ _ _ stats _) <- emptyDict fileMod--- root <- runReaderT (icode a) newD--- nL <- l nD; sL <- l sD; iL <- l iD; dL <- l dD--- (shared, total) <- readIORef stats--- return (B.encode currentInterfaceVersion `L.append`--- G.compress (B.encode (root, nL, sL, iL, dL)), shared, total)--- verboseS "profile.sharing" 10 $ do--- tickN "pointers (reused)" $ fromIntegral shared--- tickN "pointers" $ fromIntegral total--- return x--- where--- l h = List.map fst . List.sortBy (compare `on` snd) <$> H.toList h---- | Data.Binary.runGetState is deprecated in favour of runGetIncremental.--- Reimplementing it in terms of the new function. The new Decoder type contains--- strict byte strings so we need to be careful not to feed the entire lazy byte--- string to the decoder at once.-runGetState :: B.Get a -> L.ByteString -> B.ByteOffset -> (a, L.ByteString, B.ByteOffset)-runGetState g s n = feed (B.runGetIncremental g) (L.toChunks s)- where- feed (B.Done s n' x) ss = (x, L.fromChunks (s : ss), n + n')- feed (B.Fail _ _ err) _ = error err- feed (B.Partial f) (s : ss) = feed (f $ Just s) ss- feed (B.Partial f) [] = feed (f Nothing) []---- | Decodes something. The result depends on the include path.------ Returns 'Nothing' if the input does not start with the right magic--- number or some other decoding error is encountered.--decode :: EmbPrj a => L.ByteString -> TCM (Maybe a)-decode s = do- mf <- use stModuleToSource- incs <- getIncludeDirs-- -- Note that B.runGetState and G.decompress can raise errors if the- -- input is malformed. The decoder is (intended to be) strict enough- -- to ensure that all such errors can be caught by the handler here.-- (mf, r) <- liftIO $ E.handle (\(E.ErrorCall s) -> noResult s) $ do-- (ver, s, _) <- return $ runGetState B.get s 0- if ver /= currentInterfaceVersion- then noResult "Wrong interface version."- else do-- ((r, nL, sL, iL, dL), s, _) <-- return $ runGetState B.get (G.decompress s) 0- if s /= L.empty- -- G.decompress seems to throw away garbage at the end, so- -- the then branch is possibly dead code.- then noResult "Garbage at end."- else do-- st <- St (ar nL) (ar sL) (ar iL) (ar dL)- <$> liftIO H.new- <*> return mf <*> return incs- (r, st) <- runStateT (runExceptT (value r)) st- return (Just (modFile st), r)-- case mf of- Nothing -> return ()- Just mf -> stModuleToSource .= mf-- case r of- Right x -> return (Just x)- Left err -> do- reportSLn "import.iface" 5 $ "Error when decoding interface file"- -- Andreas, 2014-06-11 deactivated debug printing- -- in order to get rid of dependency of Serialize on TCM.Pretty- -- reportSDoc "import.iface" 5 $- -- text "Error when decoding interface file:"- -- $+$ nest 2 (prettyTCM err)- return Nothing-- where- ar l = listArray (0, List.genericLength l - 1) l-- noResult s = return (Nothing, Left $ GenericError s)--encodeInterface :: Interface -> TCM L.ByteString-encodeInterface i = L.append hashes <$> encode i- where- hashes :: L.ByteString- hashes = B.runPut $ B.put (iSourceHash i) >> B.put (iFullHash i)---- | Encodes something. To ensure relocatability file paths in--- positions are replaced with module names.--encodeFile :: FilePath -> Interface -> TCM ()-encodeFile f i = liftIO . L.writeFile f =<< encodeInterface i---- | Decodes something. The result depends on the include path.------ Returns 'Nothing' if the file does not start with the right magic--- number or some other decoding error is encountered.--decodeInterface :: L.ByteString -> TCM (Maybe Interface)-decodeInterface s = decode $ L.drop 16 s--decodeHashes :: L.ByteString -> Maybe (Hash, Hash)-decodeHashes s- | L.length s < 16 = Nothing- | otherwise = Just $ B.runGet getH $ L.take 16 s- where getH = (,) <$> B.get <*> B.get--decodeFile :: FilePath -> TCM (Maybe Interface)-decodeFile f = decodeInterface =<< liftIO (L.readFile f)---- | Store a 'SourceToModule' (map from 'AbsolutePath' to 'TopLevelModuleName')--- as map from 'AbsolutePath' to 'Int32', in order to directly get the identifiers--- from absolute pathes rather than going through top level module names.-icodeFileMod- :: SourceToModule- -- ^ Maps file names to the corresponding module names.- -- Must contain a mapping for every file name that is later encountered.- -> S ()-icodeFileMod fileMod = do- hmap <- asks absPathD- forM_ (Map.toList fileMod) $ \ (absolutePath, topLevelModuleName) -> do- i <- icod_ topLevelModuleName- liftIO $ H.insert hmap absolutePath i--#if __GLASGOW_HASKELL__ >= 710-instance {-# OVERLAPPING #-} EmbPrj String where-#else-instance EmbPrj String where-#endif- icod_ = icodeString- value i = (! i) `fmap` gets stringE--instance EmbPrj Integer where- icod_ = icodeInteger- value i = (! i) `fmap` gets integerE--instance EmbPrj Word64 where- icod_ i = icode2' (int32 q) (int32 r)- where (q, r) = quotRem i (2^32)- int32 :: Word64 -> Int32- int32 = fromIntegral- value = vcase valu where valu [a, b] = return $ n * mod (fromIntegral a) n + mod (fromIntegral b) n- valu _ = malformed- n = 2^32--instance EmbPrj Int32 where- icod_ i = return i- value i = return i--instance EmbPrj Int where- icod_ i = return (fromIntegral i)- value i = return (fromIntegral i)--instance EmbPrj Char where- icod_ c = return (fromIntegral $ fromEnum c)- value i = return (toEnum $ fromInteger $ toInteger i)--instance EmbPrj Double where- icod_ = icodeDouble- value i = (! i) `fmap` gets doubleE--instance EmbPrj () where- icod_ () = icode0'- value = vcase valu where valu [] = valu0 ()- valu _ = malformed--instance (EmbPrj a, EmbPrj b) => EmbPrj (a, b) where- icod_ (a, b) = icode2' a b- value = vcase valu where valu [a, b] = valu2 (,) a b- valu _ = malformed--instance (EmbPrj a, EmbPrj b, EmbPrj c) => EmbPrj (a, b, c) where- icod_ (a, b, c) = icode3' a b c- value = vcase valu where valu [a, b, c] = valu3 (,,) a b c- valu _ = malformed--instance EmbPrj a => EmbPrj (Maybe a) where- icod_ Nothing = icode0'- icod_ (Just x) = icode1' x- value = vcase valu where valu [] = valu0 Nothing- valu [x] = valu1 Just x- valu _ = malformed--instance EmbPrj Bool where- icod_ True = icode0'- icod_ False = icode0 0- value = vcase valu where valu [] = valu0 True- valu [0] = valu0 False- valu _ = malformed--instance EmbPrj AbsolutePath where- icod_ file = do- d <- asks absPathD- liftIO $ fromMaybe __IMPOSSIBLE__ <$> H.lookup d file- value m = do- m :: TopLevelModuleName- <- value m- mf <- gets modFile- incs <- gets includes- (r, mf) <- liftIO $ findFile'' incs m mf- modify $ \s -> s { modFile = mf }- case r of- Left err -> throwError $ findErrorToTypeError m err- Right f -> return f--instance EmbPrj Position where- icod_ (P.Pn file pos line col) = icode4' file pos line col- value = vcase valu- where- valu [f, p, l, c] = valu4 P.Pn f p l c- valu _ = malformed--instance EmbPrj TopLevelModuleName where- icod_ (TopLevelModuleName a) = icode1' a- value = vcase valu where valu [a] = valu1 TopLevelModuleName a- valu _ = malformed--#if __GLASGOW_HASKELL__ >= 710-instance {-# OVERLAPPABLE #-} EmbPrj a => EmbPrj [a] where-#else-instance EmbPrj a => EmbPrj [a] where-#endif- icod_ xs = icodeN =<< mapM icode xs- value = vcase (mapM value)--- icode [] = icode0'--- icode (x : xs) = icode2' x xs--- value = vcase valu where valu [] = valu0 []--- valu [x, xs] = valu2 (:) x xs--- valu _ = malformed--instance (Ord a, Ord b, EmbPrj a, EmbPrj b) => EmbPrj (BiMap a b) where- icod_ m = icode (BiMap.toList m)- value m = BiMap.fromList <$> value m--instance (Ord a, EmbPrj a, EmbPrj b) => EmbPrj (Map a b) where- icod_ m = icode (Map.toList m)- value m = Map.fromList `fmap` value m--instance (Ord a, EmbPrj a) => EmbPrj (Set a) where- icod_ s = icode (Set.toList s)- value s = Set.fromList `fmap` value s--instance EmbPrj P.Interval where- icod_ (P.Interval p q) = icode2' p q- value = vcase valu where valu [p, q] = valu2 P.Interval p q- valu _ = malformed--instance EmbPrj Range where- icod_ (P.Range is) = icode1' is- value = vcase valu where valu [is] = valu1 P.Range is- valu _ = malformed--instance EmbPrj HR.Range where- icod_ (HR.Range a b) = icode2' a b- value = vcase valu where valu [a, b] = valu2 HR.Range a b- valu _ = malformed--instance EmbPrj C.Name where- icod_ (C.NoName a b) = icode2 0 a b- icod_ (C.Name r xs) = icode2' r xs- value = vcase valu where valu [0, a, b] = valu2 C.NoName a b- valu [r, xs] = valu2 C.Name r xs- valu _ = malformed--instance EmbPrj NamePart where- icod_ Hole = icode0'- icod_ (Id a) = icode1' a- value = vcase valu where valu [] = valu0 Hole- valu [a] = valu1 Id a- valu _ = malformed--instance EmbPrj C.QName where- icod_ (Qual a b) = icode2' a b- icod_ (C.QName a ) = icode1' a- value = vcase valu where valu [a, b] = valu2 Qual a b- valu [a] = valu1 C.QName a- valu _ = malformed--instance EmbPrj Scope where- icod_ (Scope a b c d e) = icode5' a b c d e- value = vcase valu where valu [a, b, c, d, e] = valu5 Scope a b c d e- valu _ = malformed--instance EmbPrj NameSpaceId where- icod_ PublicNS = icode0'- icod_ PrivateNS = icode0 1- icod_ ImportedNS = icode0 2- icod_ OnlyQualifiedNS = icode0 3- value = vcase valu where valu [] = valu0 PublicNS- valu [1] = valu0 PrivateNS- valu [2] = valu0 ImportedNS- valu [3] = valu0 OnlyQualifiedNS- valu _ = malformed--instance EmbPrj Access where- icod_ PrivateAccess = icode0 0- icod_ PublicAccess = icode0'- icod_ OnlyQualified = icode0 2- value = vcase valu where valu [0] = valu0 PrivateAccess- valu [] = valu0 PublicAccess- valu [2] = valu0 OnlyQualified- valu _ = malformed--instance EmbPrj NameSpace where- icod_ (NameSpace a b) = icode2' a b- value = vcase valu where valu [a, b] = valu2 NameSpace a b- valu _ = malformed--instance EmbPrj WhyInScope where- icod_ Defined = icode0'- icod_ (Opened a b) = icode2 0 a b- icod_ (Applied a b) = icode2 1 a b- value = vcase valu where valu [] = valu0 Defined- valu [0, a, b] = valu2 Opened a b- valu [1, a, b] = valu2 Applied a b- valu _ = malformed--instance EmbPrj AbstractName where- icod_ (AbsName a b c) = icode3' a b c- value = vcase valu where valu [a, b, c] = valu3 AbsName a b c- valu _ = malformed--instance EmbPrj AbstractModule where- icod_ (AbsModule a b) = icode2' a b- value = vcase valu where valu [a, b] = valu2 AbsModule a b- valu _ = malformed--instance EmbPrj KindOfName where- icod_ DefName = icode0'- icod_ ConName = icode0 1- icod_ FldName = icode0 2- icod_ PatternSynName = icode0 3- icod_ QuotableName = icode0 4- value = vcase valu where valu [] = valu0 DefName- valu [1] = valu0 ConName- valu [2] = valu0 FldName- valu [3] = valu0 PatternSynName- valu [4] = valu0 QuotableName- valu _ = malformed--instance EmbPrj Agda.Syntax.Fixity.Associativity where- icod_ LeftAssoc = icode0'- icod_ RightAssoc = icode0 1- icod_ NonAssoc = icode0 2- value = vcase valu where valu [] = valu0 LeftAssoc- valu [1] = valu0 RightAssoc- valu [2] = valu0 NonAssoc- valu _ = malformed--instance EmbPrj Agda.Syntax.Fixity.Fixity where- icod_ (Fixity a b c) = icode3' a b c- value = vcase valu where valu [a, b, c] = valu3 Fixity a b c- valu _ = malformed--instance EmbPrj Agda.Syntax.Fixity.Fixity' where- icod_ (Fixity' a b) = icode2' a b- value = vcase valu where valu [a,b] = valu2 Fixity' a b- valu _ = malformed--instance EmbPrj GenPart where- icod_ (BindHole a) = icode1 0 a- icod_ (NormalHole a) = icode1 1 a- icod_ (IdPart a) = icode1' a- value = vcase valu where valu [0, a] = valu1 BindHole a- valu [1, a] = valu1 NormalHole a- valu [a] = valu1 IdPart a- valu _ = malformed--instance EmbPrj A.QName where- icod_ n@(A.QName a b) = icodeMemo qnameD qnameC (qnameId n) $ icode2' a b- value = vcase valu where valu [a, b] = valu2 A.QName a b- valu _ = malformed--instance EmbPrj A.AmbiguousQName where- icod_ (A.AmbQ a) = icode a- value n = A.AmbQ `fmap` value n--instance EmbPrj A.ModuleName where- icod_ (A.MName a) = icode a- value n = A.MName `fmap` value n--instance EmbPrj A.Name where- icod_ (A.Name a b c d) = icodeMemo nameD nameC a $ icode4' a b c d- value = vcase valu where valu [a, b, c, d] = valu4 A.Name a b c d- valu _ = malformed--instance (EmbPrj s, EmbPrj t) => EmbPrj (Named s t) where- icod_ (Named a b) = icode2' a b- value = vcase valu where valu [a, b] = valu2 Named a b- valu _ = malformed--instance EmbPrj a => EmbPrj (Ranged a) where- icod_ (Ranged r x) = icode2' r x- value = vcase valu where valu [r, x] = valu2 Ranged r x- valu _ = malformed--instance EmbPrj LocalVar where- icod_ (LocalVar a) = icode1' a- icod_ (ShadowedVar a b) = icode2' a b- value = vcase valu where valu [a] = valu1 LocalVar a- valu [a, b] = valu2 ShadowedVar a b- valu _ = malformed---- Only used for pattern synonyms-instance EmbPrj A.Expr where- icod_ (A.Var n) = icode1 0 n- icod_ (A.Def n) = icode1 1 n- icod_ (A.Con ns) = icode1 2 ns- icod_ (A.Lit l) = icode1 3 l- icod_ (A.QuestionMark{}) = icode0 4- icod_ (A.Underscore _) = icode0 5- icod_ (A.App _ a b) = icode2 6 a b- icod_ (A.WithApp _ a b) = icode2 7 a b- icod_ (A.Lam _ a b) = icode2 8 a b- icod_ (A.AbsurdLam _ a) = icode1 9 a- icod_ (A.ExtendedLam _ _ _ _) = __IMPOSSIBLE__- icod_ (A.Pi _ a b) = icode2 11 a b- icod_ (A.Fun _ a b) = icode2 12 a b- icod_ (A.Set _ a) = icode1 13 a- icod_ (A.Prop _) = icode0 14- icod_ (A.Let _ _ _) = __IMPOSSIBLE__- icod_ (A.ETel{}) = __IMPOSSIBLE__- icod_ (A.Rec _ a) = icode1 17 a- icod_ (A.RecUpdate _ a b) = icode2 18 a b- -- Andreas, 2015-07-15, drop scopes embedded in expressions.- -- As expressions are not @unScope@d before serialization,- -- this case is not __IMPOSSIBLE__.- icod_ (A.ScopedExpr a b) = icod_ b -- WAS: icode2 19 a b- icod_ (A.QuoteGoal _ a b) = icode2 20 a b- icod_ (A.QuoteContext _ a b) = icode2 21 a b- icod_ (A.Quote _) = icode0 22- icod_ (A.QuoteTerm _) = icode0 23- icod_ (A.Unquote _) = icode0 24- icod_ (A.DontCare a) = icode1 25 a- icod_ (A.PatternSyn a) = icode1 26 a- icod_ (A.Proj a) = icode1 27 a-- value = vcase valu- where- valu [0, a] = valu1 A.Var a- valu [1, a] = valu1 A.Def a- valu [2, a] = valu1 A.Con a- valu [3, a] = valu1 A.Lit a- valu [4] = valu0 (A.QuestionMark emptyMetaInfo 0)- valu [5] = valu0 (A.Underscore emptyMetaInfo)- valu [6, a, b] = valu2 (A.App i) a b- valu [7, a, b] = valu2 (A.WithApp i) a b- valu [8, a, b] = valu2 (A.Lam i) a b- valu [9, a] = valu1 (A.AbsurdLam i) a- valu [11, a, b] = valu2 (A.Pi i) a b- valu [12, a, b] = valu2 (A.Fun i) a b- valu [13, a] = valu1 (A.Set i) a- valu [14] = valu0 (A.Prop i)- valu [17, a] = valu1 (A.Rec i) a- valu [18, a, b] = valu2 (A.RecUpdate i) a b- -- valu [19, a, b] = valu2 A.ScopedExpr a b- valu [20, a, b] = valu2 (A.QuoteGoal i) a b- valu [21, a, b] = valu2 (A.QuoteContext i) a b- valu [22] = valu0 (A.Quote i)- valu [23] = valu0 (A.QuoteTerm i)- valu [24] = valu0 (A.Unquote i)- valu [25, a] = valu1 A.DontCare a- valu [26, a] = valu1 A.PatternSyn a- valu [27, a] = valu1 A.Proj a- valu _ = malformed-- i = ExprRange noRange--instance EmbPrj ConPatInfo where- icod_ (ConPatInfo a _) = icod_ a- value a = flip ConPatInfo patNoRange <$> value a--instance EmbPrj A.Pattern where- icod_ (A.VarP a) = icode1 0 a- icod_ (A.ConP a b c) = icode3 1 a b c- icod_ (A.DefP _ a b) = icode2 2 a b- icod_ (A.WildP _) = icode0 3- icod_ (A.AsP _ a b) = icode2 4 a b- icod_ (A.DotP _ a) = icode1 5 a- icod_ (A.AbsurdP _) = icode0 6- icod_ (A.LitP a) = icode1 7 a- icod_ (A.PatternSynP _ a b) = icode2 9 a b-- value = vcase valu- where- valu [0, a] = valu1 A.VarP a- valu [1, a, b, c] = valu3 A.ConP a b c- valu [2, a, b] = valu2 (A.DefP i) a b- valu [3] = valu0 (A.WildP i)- valu [4, a, b] = valu2 (A.AsP i) a b- valu [5, a] = valu1 (A.DotP i) a- valu [6] = valu0 (A.AbsurdP i)- valu [7, a] = valu1 (A.LitP) a- valu [9, a, b] = valu2 (A.PatternSynP i) a b- valu _ = malformed-- i = patNoRange--instance EmbPrj A.LamBinding where- icod_ (A.DomainFree i e) = icode2 0 i e- icod_ (A.DomainFull a) = icode1 1 a-- value = vcase valu where valu [0, i, e] = valu2 A.DomainFree i e- valu [1, a] = valu1 A.DomainFull a- valu _ = malformed--instance EmbPrj A.LetBinding where- icod_ (A.LetBind _ a b c d) = icode4 0 a b c d- icod_ (A.LetPatBind _ a b ) = icode2 1 a b- icod_ (A.LetApply _ _ _ _ _) = icode0 2- icod_ (A.LetOpen _ _) = icode0 2-- value = vcase valu- where- valu [0, a, b, c, d] = valu4 (A.LetBind (LetRange noRange)) a b c d- valu [1, a, b] = valu2 (A.LetPatBind (LetRange noRange)) a b- valu [2] = throwError $ NotSupported- "importing pattern synonym containing let module"- valu _ = malformed--instance EmbPrj A.TypedBindings where- icod_ (A.TypedBindings a b) = icode2' a b-- value = vcase valu where valu [a, b] = valu2 A.TypedBindings a b- valu _ = malformed--instance EmbPrj A.TypedBinding where- icod_ (A.TBind a b c) = icode3 0 a b c- icod_ (A.TLet a b) = icode2 1 a b-- value = vcase valu where valu [0, a, b, c] = valu3 A.TBind a b c- valu [1, a, b] = valu2 A.TLet a b- valu _ = malformed--instance EmbPrj c => EmbPrj (Common.ArgInfo c) where- icod_ (ArgInfo h r cs) = icode3' h r cs-- value = vcase valu where valu [h, r, cs] = valu3 ArgInfo h r cs- valu _ = malformed--instance EmbPrj NameId where- icod_ (NameId a b) = icode2' a b- value = vcase valu where valu [a, b] = valu2 NameId a b- valu _ = malformed--instance EmbPrj Signature where- icod_ (Sig a b c) = icode3' a b c- value = vcase valu where valu [a, b, c] = valu3 Sig a b c- valu _ = malformed--instance (Eq k, Hashable k, EmbPrj k, EmbPrj v) => EmbPrj (HashMap k v) where- icod_ m = icode (HMap.toList m)- value m = HMap.fromList `fmap` value m--instance EmbPrj Section where- icod_ (Section a b) = icode2' a b- value = vcase valu where valu [a, b] = valu2 Section a b- valu _ = malformed--instance EmbPrj Telescope where- icod_ EmptyTel = icode0'- icod_ (ExtendTel a b) = icode2' a b- value = vcase valu where valu [] = valu0 EmptyTel- valu [a, b] = valu2 ExtendTel a b- valu _ = malformed--instance EmbPrj Permutation where- icod_ (Perm a b) = icode2' a b- value = vcase valu where valu [a, b] = valu2 Perm a b- valu _ = malformed--instance EmbPrj a => EmbPrj (Drop a) where- icod_ (Drop a b) = icode2' a b- value = vcase valu where valu [a, b] = valu2 Drop a b- valu _ = malformed--instance EmbPrj a => EmbPrj (Elim' a) where- icod_ (Apply a) = icode1' a- icod_ (Proj a) = icode1 0 a- value = vcase valu where valu [a] = valu1 Apply a- valu [0, a] = valu1 Proj a- valu _ = malformed--instance EmbPrj a => EmbPrj (WithHiding a) where- icod_ (WithHiding a b) = icode2' a b- value = vcase valu where valu [a, b] = valu2 WithHiding a b- valu _ = malformed--instance (EmbPrj a, EmbPrj c) => EmbPrj (Common.Arg c a) where- icod_ (Arg i e) = icode2' i e- value = vcase valu where valu [i, e] = valu2 Arg i e- valu _ = malformed--instance (EmbPrj a, EmbPrj c) => EmbPrj (Common.Dom c a) where- icod_ (Dom i e) = icode2' i e- value = vcase valu where valu [i, e] = valu2 Dom i e- valu _ = malformed--instance EmbPrj Common.Induction where- icod_ Inductive = icode0'- icod_ CoInductive = icode0 1- value = vcase valu where valu [] = valu0 Inductive- valu [1] = valu0 CoInductive- valu _ = malformed--instance EmbPrj Common.Hiding where- icod_ Hidden = return 0- icod_ NotHidden = return 1- icod_ Instance = return 2- value 0 = return Hidden- value 1 = return NotHidden- value 2 = return Instance- value _ = malformed--instance EmbPrj Common.Relevance where- icod_ Relevant = return 0- icod_ Irrelevant = return 1- icod_ (Forced Small) = return 2- icod_ (Forced Big) = return 3- icod_ NonStrict = return 4- icod_ UnusedArg = return 5- value 0 = return Relevant- value 1 = return Irrelevant- value 2 = return (Forced Small)- value 3 = return (Forced Big)- value 4 = return NonStrict- value 5 = return UnusedArg- value _ = malformed---- instance EmbPrj Common.Relevance where--- icod_ Relevant = icode0'--- icod_ Irrelevant = icode0 1--- icod_ (Forced Small) = icode0 2--- icod_ (Forced Big) = icode0 5--- icod_ NonStrict = icode0 3--- icod_ UnusedArg = icode0 4--- value = vcase valu where valu [] = valu0 Relevant--- valu [1] = valu0 Irrelevant--- valu [2] = valu0 (Forced Small)--- valu [5] = valu0 (Forced Big)--- valu [3] = valu0 NonStrict--- valu [4] = valu0 UnusedArg--- valu _ = malformed--instance EmbPrj I.ConHead where- icod_ (ConHead a b c) = icode3' a b c- value = vcase valu where valu [a, b, c] = valu3 ConHead a b c- valu _ = malformed--instance (EmbPrj a) => EmbPrj (I.Type' a) where- icod_ (El a b) = icode2' a b- value = vcase valu where valu [a, b] = valu2 El a b- valu _ = malformed--instance (EmbPrj a) => EmbPrj (I.Abs a) where- icod_ (NoAbs a b) = icode2 0 a b- icod_ (Abs a b) = icode2' a b- value = vcase valu where valu [a, b] = valu2 Abs a b- valu [0, a, b] = valu2 NoAbs a b- valu _ = malformed--instance EmbPrj I.Term where- icod_ (Var a []) = icode1' a- icod_ (Var a b) = icode2 0 a b- icod_ (Lam a b) = icode2 1 a b- icod_ (Lit a ) = icode1 2 a- icod_ (Def a b) = icode2 3 a b- icod_ (Con a b) = icode2 4 a b- icod_ (Pi a b) = icode2 5 a b- icod_ (Sort a ) = icode1 7 a- icod_ (MetaV a b) = __IMPOSSIBLE__- icod_ ExtLam{} = __IMPOSSIBLE__- icod_ (DontCare a ) = icode1 8 a- icod_ (Level a ) = icode1 9 a- icod_ (Shared p) = icodeMemo termD termC p $ icode (derefPtr p)-- value r = vcase valu' r- where- valu' xs = shared <$> valu xs- valu [a] = valu1 var a- valu [0, a, b] = valu2 Var a b- valu [1, a, b] = valu2 Lam a b- valu [2, a] = valu1 Lit a- valu [3, a, b] = valu2 Def a b- valu [4, a, b] = valu2 Con a b- valu [5, a, b] = valu2 Pi a b- valu [7, a] = valu1 Sort a- valu [8, a] = valu1 DontCare a- valu [9, a] = valu1 Level a- valu _ = malformed--instance EmbPrj Level where- icod_ (Max a) = icode1' a- value = vcase valu where valu [a] = valu1 Max a- valu _ = malformed--instance EmbPrj PlusLevel where- icod_ (ClosedLevel a) = icode1' a- icod_ (Plus a b) = icode2' a b- value = vcase valu where valu [a] = valu1 ClosedLevel a- valu [a, b] = valu2 Plus a b- valu _ = malformed--instance EmbPrj LevelAtom where- icod_ (NeutralLevel _ a) = icode1' a- icod_ (UnreducedLevel a) = icode1 1 a- icod_ MetaLevel{} = __IMPOSSIBLE__- icod_ BlockedLevel{} = __IMPOSSIBLE__- value = vcase valu where- valu [a] = valu1 UnreducedLevel a -- we forget that we are a NeutralLevel,- -- since we do not want do (de)serialize- -- the reason for neutrality- valu [1, a] = valu1 UnreducedLevel a- valu _ = malformed--instance EmbPrj I.Sort where- icod_ (Type a ) = icode1' a- icod_ Prop = icode1 1 ()- icod_ SizeUniv = icode1 3 ()- icod_ Inf = icode1 4 ()- icod_ (DLub a b) = __IMPOSSIBLE__- value = vcase valu where valu [a] = valu1 Type a- valu [1, _] = valu0 Prop- valu [3, _] = valu0 SizeUniv- valu [4, _] = valu0 Inf- valu _ = malformed--instance EmbPrj Agda.Syntax.Literal.Literal where- icod_ (LitInt a b) = icode2' a b- icod_ (LitFloat a b) = icode2 1 a b- icod_ (LitString a b) = icode2 2 a b- icod_ (LitChar a b) = icode2 3 a b- icod_ (LitQName a b) = icode2 5 a b- value = vcase valu where valu [a, b] = valu2 LitInt a b- valu [1, a, b] = valu2 LitFloat a b- valu [2, a, b] = valu2 LitString a b- valu [3, a, b] = valu2 LitChar a b- valu [5, a, b] = valu2 LitQName a b- valu _ = malformed--instance EmbPrj DisplayForm where- icod_ (Display a b c) = icode3' a b c- value = vcase valu where valu [a, b, c] = valu3 Display a b c- valu _ = malformed--instance EmbPrj a => EmbPrj (Open a) where- icod_ (OpenThing a b) = icode2' a b- value = vcase valu where valu [a, b] = valu2 OpenThing a b- valu _ = malformed--instance EmbPrj CtxId where- icod_ (CtxId a) = icode a- value n = CtxId `fmap` value n--instance EmbPrj DisplayTerm where- icod_ (DTerm a ) = icode1' a- icod_ (DDot a ) = icode1 1 a- icod_ (DCon a b) = icode2 2 a b- icod_ (DDef a b) = icode2 3 a b- icod_ (DWithApp a b c) = icode3 4 a b c- value = vcase valu where valu [a] = valu1 DTerm a- valu [1, a] = valu1 DDot a- valu [2, a, b] = valu2 DCon a b- valu [3, a, b] = valu2 DDef a b- valu [4, a, b, c] = valu3 DWithApp a b c- valu _ = malformed--instance EmbPrj MutualId where- icod_ (MutId a) = icode a- value n = MutId `fmap` value n--instance EmbPrj Definition where- icod_ (Defn rel a b c d e f g h i) = icode10' rel a (P.killRange b) c d e f g h i- value = vcase valu where valu [rel, a, b, c, d, e, f, g, h, i] = valu10 Defn rel a b c d e f g h i- valu _ = malformed--instance EmbPrj NLPat where- icod_ (PVar a) = icode1 0 a- icod_ (PWild) = icode0 1- icod_ (PDef a b) = icode2 2 a b- icod_ (PLam a b) = icode2 3 a b- icod_ (PPi a b) = icode2 4 a b- icod_ (PBoundVar a b) = icode2 5 a b- icod_ (PTerm a) = icode1 6 a- value = vcase valu where valu [0, a] = valu1 PVar a- valu [1] = valu0 PWild- valu [2, a, b] = valu2 PDef a b- valu [3, a, b] = valu2 PLam a b- valu [4, a, b] = valu2 PPi a b- valu [5, a, b] = valu2 PBoundVar a b- valu [6, a] = valu1 PTerm a- valu _ = malformed--instance EmbPrj RewriteRule where- icod_ (RewriteRule a b c d e) = icode5' a b c d e- value = vcase valu where valu [a, b, c, d, e] = valu5 RewriteRule a b c d e- valu _ = malformed---instance EmbPrj Projection where- icod_ (Projection a b c d e) = icode5' a b c d e- value = vcase valu where valu [a, b, c, d, e] = valu5 Projection a b c d e- valu _ = malformed--instance EmbPrj HaskellExport where- icod_ (HsExport a b) = icode2' a b- value = vcase valu where- valu [a,b] = valu2 HsExport a b- valu _ = malformed--instance EmbPrj HaskellRepresentation where- icod_ (HsType a) = icode1' a- icod_ (HsDefn a b) = icode2' a b-- value = vcase valu where- valu [a] = valu1 HsType a- valu [a, b] = valu2 HsDefn a b- valu _ = malformed--instance EmbPrj JS.Exp where- icod_ (JS.Self) = icode0 0- icod_ (JS.Local i) = icode1 1 i- icod_ (JS.Global i) = icode1 2 i- icod_ (JS.Undefined) = icode0 3- icod_ (JS.String s) = icode1 4 s- icod_ (JS.Char c) = icode1 5 c- icod_ (JS.Integer n) = icode1 6 n- icod_ (JS.Double d) = icode1 7 d- icod_ (JS.Lambda n e) = icode2 8 n e- icod_ (JS.Object o) = icode1 9 o- icod_ (JS.Apply e es) = icode2 10 e es- icod_ (JS.Lookup e l) = icode2 11 e l- icod_ (JS.If e f g) = icode3 12 e f g- icod_ (JS.BinOp e op f) = icode3 13 e op f- icod_ (JS.PreOp op e) = icode2 14 op e- icod_ (JS.Const i) = icode1 15 i- value = vcase valu where valu [0] = valu0 JS.Self- valu [1, a] = valu1 JS.Local a- valu [2, a] = valu1 JS.Global a- valu [3] = valu0 JS.Undefined- valu [4, a] = valu1 JS.String a- valu [5, a] = valu1 JS.Char a- valu [6, a] = valu1 JS.Integer a- valu [7, a] = valu1 JS.Double a- valu [8, a, b] = valu2 JS.Lambda a b- valu [9, a] = valu1 JS.Object a- valu [10, a, b] = valu2 JS.Apply a b- valu [11, a, b] = valu2 JS.Lookup a b- valu [12, a, b, c] = valu3 JS.If a b c- valu [13, a, b, c] = valu3 JS.BinOp a b c- valu [14, a, b] = valu2 JS.PreOp a b- valu [15, a] = valu1 JS.Const a- valu _ = malformed--instance EmbPrj JS.LocalId where- icod_ (JS.LocalId l) = icode l- value n = JS.LocalId `fmap` value n--instance EmbPrj JS.GlobalId where- icod_ (JS.GlobalId l) = icode l- value n = JS.GlobalId `fmap` value n--instance EmbPrj JS.MemberId where- icod_ (JS.MemberId l) = icode l- value n = JS.MemberId `fmap` value n--instance EmbPrj Polarity where- icod_ Covariant = return 0- icod_ Contravariant = return 1- icod_ Invariant = return 2- icod_ Nonvariant = return 3-- value 0 = return Covariant- value 1 = return Contravariant- value 2 = return Invariant- value 3 = return Nonvariant- value _ = malformed---- instance EmbPrj Polarity where--- icod_ Covariant = icode0'--- icod_ Contravariant = icode0 1--- icod_ Invariant = icode0 2--- icod_ Nonvariant = icode0 3---- value = vcase valu where--- valu [] = valu0 Covariant--- valu [1] = valu0 Contravariant--- valu [2] = valu0 Invariant--- valu [3] = valu0 Nonvariant--- valu _ = malformed--instance EmbPrj Occurrence where- icod_ StrictPos = return 0- icod_ Mixed = return 1- icod_ Unused = return 2- icod_ GuardPos = return 3- icod_ JustPos = return 4- icod_ JustNeg = return 5-- value 0 = return StrictPos- value 1 = return Mixed- value 2 = return Unused- value 3 = return GuardPos- value 4 = return JustPos- value 5 = return JustNeg- value _ = malformed---- instance EmbPrj Occurrence where--- icod_ StrictPos = icode0'--- icod_ Mixed = icode0 1--- icod_ Unused = icode0 2--- icod_ GuardPos = icode0 3--- icod_ JustPos = icode0 4--- icod_ JustNeg = icode0 5---- value = vcase valu where--- valu [] = valu0 StrictPos--- valu [1] = valu0 Mixed--- valu [2] = valu0 Unused--- valu [3] = valu0 GuardPos--- valu [4] = valu0 JustPos--- valu [5] = valu0 JustNeg--- valu _ = malformed--instance EmbPrj CompiledRepresentation where- icod_ (CompiledRep a b c d) = icode4' a b c d- value = vcase valu where valu [a, b, c, d] = valu4 CompiledRep a b c d- valu _ = malformed--instance EmbPrj Defn where- icod_ Axiom = icode0 0- icod_ (Function a b c d e f g h i j k l m) = icode13 1 a b c d e f g h i j k l m- icod_ (Datatype a b c d e f g h i j) = icode10 2 a b c d e f g h i j- icod_ (Record a b c d e f g h i j k l) = icode12 3 a b c d e f g h i j k l- icod_ (Constructor a b c d e) = icode5 4 a b c d e- icod_ (Primitive a b c d) = icode4 5 a b c d- value = vcase valu where- valu [0] = valu0 Axiom- valu [1, a, b, c, d, e, f, g, h, i, j, k, l, m] = valu13 Function a b c d e f g h i j k l m- valu [2, a, b, c, d, e, f, g, h, i, j] = valu10 Datatype a b c d e f g h i j- valu [3, a, b, c, d, e, f, g, h, i, j, k, l] = valu12 Record a b c d e f g h i j k l- valu [4, a, b, c, d, e] = valu5 Constructor a b c d e- valu [5, a, b, c, d] = valu4 Primitive a b c d- valu _ = malformed--instance EmbPrj a => EmbPrj (WithArity a) where- icod_ (WithArity a b) = icode2' a b-- value = vcase valu where- valu [a, b] = valu2 WithArity a b- valu _ = malformed--instance EmbPrj a => EmbPrj (Case a) where- icod_ (Branches a b c d) = icode4' a b c d-- value = vcase valu where- valu [a, b, c, d] = valu4 Branches a b c d- valu _ = malformed--instance EmbPrj CompiledClauses where- icod_ Fail = icode0'- icod_ (Done a b) = icode2' a (P.killRange b)- icod_ (Case a b) = icode2 2 a b-- value = vcase valu where- valu [] = valu0 Fail- valu [a, b] = valu2 Done a b- valu [2, a, b] = valu2 Case a b- valu _ = malformed--instance EmbPrj FunctionInverse where- icod_ NotInjective = icode0'- icod_ (Inverse a) = icode1' a- value = vcase valu where valu [] = valu0 NotInjective- valu [a] = valu1 Inverse a- valu _ = malformed--instance EmbPrj TermHead where- icod_ SortHead = icode0'- icod_ PiHead = icode0 1- icod_ (ConsHead a) = icode1 2 a- value = vcase valu where valu [] = valu0 SortHead- valu [1] = valu0 PiHead- valu [2, a] = valu1 ConsHead a- valu _ = malformed--instance EmbPrj Common.IsAbstract where- icod_ AbstractDef = icode0 0- icod_ ConcreteDef = icode0'- value = vcase valu where valu [0] = valu0 AbstractDef- valu [] = valu0 ConcreteDef- valu _ = malformed--instance EmbPrj I.Clause where- icod_ (Clause a b c d e f) = icode6' a b c d e f- value = vcase valu where valu [a, b, c, d, e, f] = valu6 Clause a b c d e f- valu _ = malformed--instance EmbPrj I.ClauseBody where- icod_ (Body a) = icode1 0 a- icod_ (Bind a) = icode1' a- icod_ NoBody = icode0'- value = vcase valu where valu [0, a] = valu1 Body a- valu [a] = valu1 Bind a- valu [] = valu0 NoBody- valu _ = malformed--instance EmbPrj Delayed where- icod_ Delayed = icode0 0- icod_ NotDelayed = icode0'- value = vcase valu where valu [0] = valu0 Delayed- valu [] = valu0 NotDelayed- valu _ = malformed--instance EmbPrj I.ConPatternInfo where- icod_ (ConPatternInfo a b) = icode2' a b- value = vcase valu where valu [a, b] = valu2 ConPatternInfo a b- valu _ = malformed--instance EmbPrj ConPOrigin where- icod_ ConPImplicit = return 0- icod_ ConPCon = return 1- icod_ ConPRec = return 2- value 0 = return ConPImplicit- value 1 = return ConPCon- value 2 = return ConPRec- value _ = malformed--instance EmbPrj I.Pattern where- icod_ (VarP a ) = icode1' a- icod_ (ConP a b c) = icode3' a b c- icod_ (LitP a ) = icode1 2 a- icod_ (DotP a ) = icode1 3 a- icod_ (ProjP a ) = icode1 4 a- value = vcase valu where valu [a] = valu1 VarP a- valu [a, b, c] = valu3 ConP a b c- valu [2, a] = valu1 LitP a- valu [3, a] = valu1 DotP a- valu [4, a] = valu1 ProjP a- valu _ = malformed--instance EmbPrj a => EmbPrj (Builtin a) where- icod_ (Prim a) = icode1' a- icod_ (Builtin a) = icode1 1 a- value = vcase valu where valu [a] = valu1 Prim a- valu [1, a] = valu1 Builtin a- valu _ = malformed--instance EmbPrj HP.NameKind where- icod_ HP.Bound = icode0'- icod_ (HP.Constructor a) = icode1 1 a- icod_ HP.Datatype = icode0 2- icod_ HP.Field = icode0 3- icod_ HP.Function = icode0 4- icod_ HP.Module = icode0 5- icod_ HP.Postulate = icode0 6- icod_ HP.Primitive = icode0 7- icod_ HP.Record = icode0 8- icod_ HP.Argument = icode0 9-- value = vcase valu where- valu [] = valu0 HP.Bound- valu [1 , a] = valu1 HP.Constructor a- valu [2] = valu0 HP.Datatype- valu [3] = valu0 HP.Field- valu [4] = valu0 HP.Function- valu [5] = valu0 HP.Module- valu [6] = valu0 HP.Postulate- valu [7] = valu0 HP.Primitive- valu [8] = valu0 HP.Record- valu [9] = valu0 HP.Argument- valu _ = malformed--instance EmbPrj HP.Aspect where- icod_ HP.Comment = icode0 0- icod_ HP.Keyword = icode0 1- icod_ HP.String = icode0 2- icod_ HP.Number = icode0 3- icod_ HP.Symbol = icode0'- icod_ HP.PrimitiveType = icode0 5- icod_ (HP.Name mk b) = icode2 6 mk b-- value = vcase valu where- valu [0] = valu0 HP.Comment- valu [1] = valu0 HP.Keyword- valu [2] = valu0 HP.String- valu [3] = valu0 HP.Number- valu [] = valu0 HP.Symbol- valu [5] = valu0 HP.PrimitiveType- valu [6, mk, b] = valu2 HP.Name mk b- valu _ = malformed--instance EmbPrj HP.OtherAspect where- icod_ HP.Error = icode0 0- icod_ HP.DottedPattern = icode0'- icod_ HP.UnsolvedMeta = icode0 2- icod_ HP.TerminationProblem = icode0 3- icod_ HP.IncompletePattern = icode0 4- icod_ HP.TypeChecks = icode0 5- icod_ HP.UnsolvedConstraint = icode0 6-- value = vcase valu where- valu [0] = valu0 HP.Error- valu [] = valu0 HP.DottedPattern- valu [2] = valu0 HP.UnsolvedMeta- valu [3] = valu0 HP.TerminationProblem- valu [4] = valu0 HP.IncompletePattern- valu [5] = valu0 HP.TypeChecks- valu [6] = valu0 HP.UnsolvedConstraint- valu _ = malformed--instance EmbPrj HP.Aspects where- icod_ (HP.Aspects a b c d) = icode4' a b c d-- value = vcase valu where- valu [a, b, c, d] = valu4 HP.Aspects a b c d- valu _ = malformed--instance EmbPrj Precedence where- icod_ TopCtx = icode0'- icod_ FunctionSpaceDomainCtx = icode0 1- icod_ (LeftOperandCtx a) = icode1 2 a- icod_ (RightOperandCtx a) = icode1 3 a- icod_ FunctionCtx = icode0 4- icod_ ArgumentCtx = icode0 5- icod_ InsideOperandCtx = icode0 6- icod_ WithFunCtx = icode0 7- icod_ WithArgCtx = icode0 8- icod_ DotPatternCtx = icode0 9- value = vcase valu- where- valu [] = valu0 TopCtx- valu [1] = valu0 FunctionSpaceDomainCtx- valu [2, a] = valu1 LeftOperandCtx a- valu [3, a] = valu1 RightOperandCtx a- valu [4] = valu0 FunctionCtx- valu [5] = valu0 ArgumentCtx- valu [6] = valu0 InsideOperandCtx- valu [7] = valu0 WithFunCtx- valu [8] = valu0 WithArgCtx- valu [9] = valu0 DotPatternCtx- valu _ = malformed--instance EmbPrj ScopeInfo where- icod_ (ScopeInfo a b c d) = icode4' a b c d- value = vcase valu where valu [a, b, c, d] = valu4 ScopeInfo a b c d- valu _ = malformed--instance EmbPrj HP.CompressedFile where- icod_ (HP.CompressedFile f) = icode1' f- value = vcase valu- where- valu [f] = valu1 HP.CompressedFile f- valu _ = malformed--instance EmbPrj Interface where- icod_ (Interface a b c d e f g h i j k) = icode11' a b c d e f g h i j k- value = vcase valu- where- valu [a, b, c, d, e, f, g, h, i, j, k] = valu11 Interface a b c d e f g h i j k- valu _ = malformed---- This is used for the Epic compiler backend-instance EmbPrj Epic.EInterface where- icod_ (Epic.EInterface a b c d e f g h) = icode8' a b c d e f g h- value = vcase valu where- valu [a, b, c, d, e, f, g, h] = valu8 Epic.EInterface a b c d e f g h- valu _ = malformed--instance EmbPrj Epic.InjectiveFun where- icod_ (Epic.InjectiveFun a b) = icode2' a b- value = vcase valu where- valu [a,b] = valu2 Epic.InjectiveFun a b- valu _ = malformed--instance EmbPrj Epic.Relevance where- icod_ Epic.Irr = icode0 0- icod_ Epic.Rel = icode0 1- value = vcase valu where valu [0] = valu0 Epic.Irr- valu [1] = valu0 Epic.Rel- valu _ = malformed--instance EmbPrj Epic.Forced where- icod_ Epic.Forced = icode0 0- icod_ Epic.NotForced = icode0 1- value = vcase valu where valu [0] = valu0 Epic.Forced- valu [1] = valu0 Epic.NotForced- valu _ = malformed--instance EmbPrj Epic.Tag where- icod_ (Epic.Tag a) = icode1 0 a- icod_ (Epic.PrimTag a) = icode1 1 a- value = vcase valu- where- valu [0, a] = valu1 Epic.Tag a- valu [1, a] = valu1 Epic.PrimTag a- valu _ = malformed---- Specializing icodeX leads to Warning like--- src/full/Agda/TypeChecking/Serialise.hs:1297:1: Warning:--- RULE left-hand side too complicated to desugar--- case cobox_aQY5 of _ [Occ=Dead] { ghc-prim:GHC.Types.Eq# cobox ->--- icodeX @ String $dEq_aQY3 $dHashable_aQY4--- }------ type ICodeX k--- = (Dict -> HashTable k Int32)--- -> (Dict -> IORef Int32)--- -> k -> S Int32--- {-# SPECIALIZE icodeX :: ICodeX String #-}--- {-# SPECIALIZE icodeX :: ICodeX Integer #-}--- {-# SPECIALIZE icodeX :: ICodeX Double #-}--- {-# SPECIALIZE icodeX :: ICodeX Node #-}---- Andreas, 2014-10-16 AIM XX:--- Inlining this increases Serialization time by 10%--- Makoto's theory: code size increase might lead to--- instruction cache misses.--- {-# INLINE icodeX #-}-icodeX :: (Eq k, Hashable k)- => (Dict -> HashTable k Int32)- -> (Dict -> IORef FreshAndReuse)- -> k -> S Int32-icodeX dict counter key = do- d <- asks dict- c <- asks counter- liftIO $ do- mi <- H.lookup d key- case mi of- Just i -> do- modifyIORef' c $ over lensReuse (+1)- return i- Nothing -> do- fresh <- (^.lensFresh) <$> do readModifyIORef' c $ over lensFresh (+1)- H.insert d key fresh- return fresh---- Instead of inlining icodeX, we manually specialize it to--- its four uses: Integer, String, Double, Node.--- Not a great gain (hardly noticeable), but not harmful.--icodeInteger :: Integer -> S Int32-icodeInteger key = do- d <- asks integerD- c <- asks integerC- liftIO $ do- mi <- H.lookup d key- case mi of- Just i -> do- modifyIORef' c $ over lensReuse (+1)- return i- Nothing -> do- fresh <- (^.lensFresh) <$> do readModifyIORef' c $ over lensFresh (+1)- H.insert d key fresh- return fresh--icodeDouble :: Double -> S Int32-icodeDouble key = do- d <- asks doubleD- c <- asks doubleC- liftIO $ do- mi <- H.lookup d key- case mi of- Just i -> do- modifyIORef' c $ over lensReuse (+1)- return i- Nothing -> do- fresh <- (^.lensFresh) <$> do readModifyIORef' c $ over lensFresh (+1)- H.insert d key fresh- return fresh--icodeString :: String -> S Int32-icodeString key = do- d <- asks stringD- c <- asks stringC- liftIO $ do- mi <- H.lookup d key- case mi of- Just i -> do- modifyIORef' c $ over lensReuse (+1)- return i- Nothing -> do- fresh <- (^.lensFresh) <$> do readModifyIORef' c $ over lensFresh (+1)- H.insert d key fresh- return fresh--icodeN :: Node -> S Int32-icodeN key = do- d <- asks nodeD- c <- asks nodeC- liftIO $ do- mi <- H.lookup d key- case mi of- Just i -> do- modifyIORef' c $ over lensReuse (+1)- return i- Nothing -> do- fresh <- (^.lensFresh) <$> do readModifyIORef' c $ over lensFresh (+1)- H.insert d key fresh- return fresh---- icodeN :: [Int32] -> S Int32--- icodeN = icodeX nodeD nodeC---- | @icode@ only if thing has not seen before.-icodeMemo- :: (Eq a, Ord a, Hashable a)- => (Dict -> HashTable a Int32) -- ^ Memo structure for thing of key @a@.- -> (Dict -> IORef FreshAndReuse) -- ^ Statistics.- -> a -- ^ Key to the thing.- -> S Int32 -- ^ Fallback computation to encode the thing.- -> S Int32 -- ^ Encoded thing.-icodeMemo getDict getCounter a icodeP = do- h <- asks getDict- mi <- liftIO $ H.lookup h a- st <- asks getCounter- case mi of- Just i -> liftIO $ do- modifyIORef' st $ over lensReuse (+ 1)- return i- Nothing -> do- liftIO $ modifyIORef' st $ over lensFresh (+1)- i <- icodeP- liftIO $ H.insert h a i- return i--{-# INLINE vcase #-}--- | @vcase value ix@ decodes thing represented by @ix :: Int32@--- via the @valu@ function and stores it in 'nodeMemo'.--- If @ix@ is present in 'nodeMemo', @valu@ is not used, but--- the thing is read from 'nodeMemo' instead.-vcase :: forall a . EmbPrj a => (Node -> R a) -> Int32 -> R a-vcase valu = \ix -> do- memo <- gets nodeMemo- -- compute run-time representation of type a- let aTyp = typeOf (undefined :: a)- -- to introduce sharing, see if we have seen a thing- -- represented by ix before- maybeU <- liftIO $ H.lookup memo (ix, aTyp)- case maybeU of- -- yes, we have seen it before, use the version from memo- Just (U u) -> maybe malformed return (cast u)- -- no, it's new, so generate it via valu and insert it into memo- Nothing -> do- v <- valu . (! ix) =<< gets nodeE- liftIO $ H.insert memo (ix, aTyp) (U v)- return v---- Andreas, Makoto, AIM XX (2014-10-15):--- No performance gain for INLINE here (neutral / slighly negative).------ {-# INLINE icode0 #-}--- {-# INLINE icode1 #-}--- {-# INLINE icode2 #-}--- {-# INLINE icode3 #-}--- {-# INLINE icode4 #-}--- {-# INLINE icode5 #-}--- {-# INLINE icode6 #-}--- {-# INLINE icode7 #-}--- {-# INLINE icode8 #-}--- {-# INLINE icode9 #-}--- {-# INLINE icode10 #-}--- {-# INLINE icode11 #-}--- {-# INLINE icode12 #-}--- {-# INLINE icode13 #-}--- {-# INLINE icode14 #-}--icode0 :: Int32 -> S Int32--icode1 :: EmbPrj a => Int32 -> a -> S Int32--icode2 :: (EmbPrj a, EmbPrj b) =>- Int32 -> a -> b ->- S Int32--icode3 :: (EmbPrj a, EmbPrj b, EmbPrj c) =>- Int32 -> a -> b -> c ->- S Int32--icode4 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d) =>- Int32 -> a -> b -> c -> d ->- S Int32--icode5 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e) =>- Int32 -> a -> b -> c -> d -> e ->- S Int32--icode6 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f) =>- Int32 -> a -> b -> c -> d -> e -> f ->- S Int32--icode7 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g ) =>- Int32 -> a -> b -> c -> d -> e -> f -> g ->- S Int32--icode8 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g, EmbPrj h ) =>- Int32 -> a -> b -> c -> d -> e -> f -> g -> h ->- S Int32--icode9 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g, EmbPrj h, EmbPrj i ) =>- Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i ->- S Int32--icode10 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j ) =>- Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j ->- S Int32--icode11 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k ) =>- Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k ->- S Int32--icode12 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l ) =>- Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l ->- S Int32--icode13 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l- , EmbPrj m ) =>- Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m ->- S Int32--icode14 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l- , EmbPrj m, EmbPrj n ) =>- Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> n ->- S Int32--icode0 tag = icodeN [tag]-icode1 tag a = icodeN . (tag :) =<< sequence [icode a]-icode2 tag a b = icodeN . (tag :) =<< sequence [icode a, icode b]-icode3 tag a b c = icodeN . (tag :) =<< sequence [icode a, icode b, icode c]-icode4 tag a b c d = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d]-icode5 tag a b c d e = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e]-icode6 tag a b c d e f = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f]-icode7 tag a b c d e f g = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g]-icode8 tag a b c d e f g h = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h]-icode9 tag a b c d e f g h i = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i]-icode10 tag a b c d e f g h i j = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j]-icode11 tag a b c d e f g h i j k = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k]-icode12 tag a b c d e f g h i j k l = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l]-icode13 tag a b c d e f g h i j k l m = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l, icode m]-icode14 tag a b c d e f g h i j k l m n = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l, icode m, icode n]----- Andreas, Makoto, AIM XX (2014-10-15):--- No performance gain for INLINE here (neutral / slighly negative).------ {-# INLINE icode0' #-}--- {-# INLINE icode1' #-}--- {-# INLINE icode2' #-}--- {-# INLINE icode3' #-}--- {-# INLINE icode4' #-}--- {-# INLINE icode5' #-}--- {-# INLINE icode6' #-}--- {-# INLINE icode7' #-}--- {-# INLINE icode8' #-}--- {-# INLINE icode9' #-}--- {-# INLINE icode10' #-}--- {-# INLINE icode11' #-}--- {-# INLINE icode12' #-}--- {-# INLINE icode13' #-}--- {-# INLINE icode14' #-}--icode0' :: S Int32--icode1' :: EmbPrj a => a -> S Int32--icode2' :: (EmbPrj a, EmbPrj b) =>- a -> b ->- S Int32--icode3' :: (EmbPrj a, EmbPrj b, EmbPrj c) =>- a -> b -> c ->- S Int32--icode4' :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d) =>- a -> b -> c -> d ->- S Int32--icode5' :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e) =>- a -> b -> c -> d -> e ->- S Int32--icode6' :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f) =>- a -> b -> c -> d -> e -> f ->- S Int32--icode7' :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g ) =>- a -> b -> c -> d -> e -> f -> g ->- S Int32--icode8' :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g, EmbPrj h ) =>- a -> b -> c -> d -> e -> f -> g -> h ->- S Int32--icode9' :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g, EmbPrj h, EmbPrj i ) =>- a -> b -> c -> d -> e -> f -> g -> h -> i ->- S Int32--icode10' :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j ) =>- a -> b -> c -> d -> e -> f -> g -> h -> i -> j ->- S Int32--icode11' :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k ) =>- a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k ->- S Int32--icode12' :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l ) =>- a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l ->- S Int32--icode13' :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l- , EmbPrj m ) =>- a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m ->- S Int32--icode14' :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l- , EmbPrj m, EmbPrj n ) =>- a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> n ->- S Int32--icode0' = icodeN []-icode1' a = icodeN =<< sequence [icode a]-icode2' a b = icodeN =<< sequence [icode a, icode b]-icode3' a b c = icodeN =<< sequence [icode a, icode b, icode c]-icode4' a b c d = icodeN =<< sequence [icode a, icode b, icode c, icode d]-icode5' a b c d e = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e]-icode6' a b c d e f = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f]-icode7' a b c d e f g = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g]-icode8' a b c d e f g h = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h]-icode9' a b c d e f g h i = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i]-icode10' a b c d e f g h i j = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j]-icode11' a b c d e f g h i j k = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k]-icode12' a b c d e f g h i j k l = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l]-icode13' a b c d e f g h i j k l m = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l, icode m]-icode14' a b c d e f g h i j k l m n = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l, icode m, icode n]--valu0 :: a -> R a--valu1 :: EmbPrj a => (a -> b) -> Int32 -> R b--valu2 :: (EmbPrj a, EmbPrj b) =>- (a -> b -> c) ->- Int32 -> Int32 ->- R c--valu3 :: (EmbPrj a, EmbPrj b, EmbPrj c) =>- (a -> b -> c -> d) ->- Int32 -> Int32 -> Int32 ->- R d--valu4 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d) =>- (a -> b -> c -> d -> e) ->- Int32 -> Int32 -> Int32 -> Int32 ->- R e--valu5 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e) =>- (a -> b -> c -> d -> e -> f) ->- Int32 -> Int32 -> Int32 -> Int32 -> Int32 ->- R f--valu6 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f) =>- (a -> b -> c -> d -> e -> f -> g) ->- Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 ->- R g--valu7 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g ) =>- (a -> b -> c -> d -> e -> f -> g -> h) ->- Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 ->- R h--valu8 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g, EmbPrj h ) =>- (a -> b -> c -> d -> e -> f -> g -> h -> i) ->- Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 ->- R i--valu9 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g, EmbPrj h, EmbPrj i ) =>- (a -> b -> c -> d -> e -> f -> g -> h -> i -> j) ->- Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 ->- R j--valu10 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j ) =>- (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k) ->- Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 ->- R k--valu11 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k ) =>- (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l) ->- Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 ->- R l--valu12 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l ) =>- (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m) ->- Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 ->- R m--valu13 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l- , EmbPrj m ) =>- (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> n) ->- Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 ->- R n--valu14 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f- , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l- , EmbPrj m, EmbPrj n ) =>- (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> n -> o) ->- Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 ->- R o--valu0 z = return z-valu1 z a = valu0 z `ap` value a-valu2 z a b = valu1 z a `ap` value b-valu3 z a b c = valu2 z a b `ap` value c-valu4 z a b c d = valu3 z a b c `ap` value d-valu5 z a b c d e = valu4 z a b c d `ap` value e-valu6 z a b c d e f = valu5 z a b c d e `ap` value f-valu7 z a b c d e f g = valu6 z a b c d e f `ap` value g-valu8 z a b c d e f g h = valu7 z a b c d e f g `ap` value h-valu9 z a b c d e f g h i = valu8 z a b c d e f g h `ap` value i-valu10 z a b c d e f g h i j = valu9 z a b c d e f g h i `ap` value j-valu11 z a b c d e f g h i j k = valu10 z a b c d e f g h i j `ap` value k-valu12 z a b c d e f g h i j k l = valu11 z a b c d e f g h i j k `ap` value l-valu13 z a b c d e f g h i j k l m = valu12 z a b c d e f g h i j k l `ap` value m-valu14 z a b c d e f g h i j k l m n = valu13 z a b c d e f g h i j k l m `ap` value n+-- Andreas, Makoto, Francesco 2014-10-15 AIM XX:+-- -O2 does not have any noticable effect on runtime+-- but sabotages cabal repl with -Werror+-- (due to a conflict with --interactive warning)+-- {-# OPTIONS_GHC -O2 #-}++-- | Structure-sharing serialisation of Agda interface files.++-- -!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-+-- NOTE: Every time the interface format is changed the interface+-- version number should be bumped _in the same patch_.+-- -!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-!-++module Agda.TypeChecking.Serialise+ ( encode, encodeFile, encodeInterface+ , decode, decodeFile, decodeInterface, decodeHashes+ , EmbPrj+ )+ where++import Control.Applicative+import Control.Arrow (second)+import Control.DeepSeq+import qualified Control.Exception as E+import Control.Monad+import Control.Monad.Reader+import Control.Monad.State.Strict++import Data.Array.IArray+import Data.Word+import qualified Data.ByteString.Lazy as L+import qualified Data.HashTable.IO as H+import qualified Data.Map as Map+import qualified Data.Binary as B+import qualified Data.Binary.Get as B+import qualified Data.Binary.Put as B+import qualified Data.List as List+import Data.Function++import qualified Codec.Compression.GZip as G++import qualified Agda.TypeChecking.Monad.Benchmark as Bench++import Agda.TypeChecking.Serialise.Base+import Agda.TypeChecking.Serialise.Instances ()++import Agda.TypeChecking.Monad++import Agda.Utils.Hash+import Agda.Utils.IORef+import Agda.Utils.Lens++import Agda.Utils.Except++-- Note that the Binary instance for Int writes 64 bits, but throws+-- away the 32 high bits when reading (at the time of writing, on+-- 32-bit machines). Word64 does not have these problems.++currentInterfaceVersion :: Word64+currentInterfaceVersion = 20151209 * 10 + 0++-- | Encodes something. To ensure relocatability file paths in+-- positions are replaced with module names.++encode :: EmbPrj a => a -> TCM L.ByteString+encode a = do+ collectStats <- hasVerbosity "profile.serialize" 20+ fileMod <- sourceToModule+ newD@(Dict nD sD iD dD _tD+ _nameD+ _qnameD+ nC sC iC dC tC+ nameC+ qnameC+ stats _ _) <- liftIO $ emptyDict collectStats+ root <- liftIO $ (`runReaderT` newD) $ do+ icodeFileMod fileMod+ icode a+ nL <- benchSort $ l nD+ sL <- benchSort $ l sD+ iL <- benchSort $ l iD+ dL <- benchSort $ l dD+ -- Record reuse statistics.+ verboseS "profile.sharing" 10 $ do+ statistics "pointers" tC+ verboseS "profile.serialize" 10 $ do+ statistics "Integer" iC+ statistics "String" sC+ statistics "Double" dC+ statistics "Node" nC+ statistics "Shared Term" tC+ statistics "A.QName" qnameC+ statistics "A.Name" nameC+ when collectStats $ do+ stats <- Map.fromList . map (second toInteger) <$> do+ liftIO $ H.toList stats+ modifyStatistics $ Map.union stats+ -- Encode hashmaps and root, and compress.+ bits1 <- Bench.billTo [ Bench.Serialization, Bench.BinaryEncode ] $+ return $!! B.encode (root, nL, sL, iL, dL)+ let compressParams = G.defaultCompressParams+ { G.compressLevel = G.bestSpeed+ , G.compressStrategy = G.huffmanOnlyStrategy+ }+ cbits <- Bench.billTo [ Bench.Serialization, Bench.Compress ] $+ return $!! G.compressWith compressParams bits1+ let x = B.encode currentInterfaceVersion `L.append` cbits+ return x+ where+ l h = List.map fst . List.sortBy (compare `on` snd) <$> H.toList h+ benchSort = Bench.billTo [Bench.Serialization, Bench.Sort] . liftIO+ statistics :: String -> IORef FreshAndReuse -> TCM ()+ statistics kind ioref = do+ FreshAndReuse fresh reused <- liftIO $ readIORef ioref+ tickN (kind ++ " (fresh)") $ fromIntegral fresh+ tickN (kind ++ " (reused)") $ fromIntegral reused++-- encode :: EmbPrj a => a -> TCM L.ByteString+-- encode a = do+-- fileMod <- sourceToModule+-- (x, shared, total) <- liftIO $ do+-- newD@(Dict nD sD iD dD _ _ _ _ _ stats _) <- emptyDict fileMod+-- root <- runReaderT (icode a) newD+-- nL <- l nD; sL <- l sD; iL <- l iD; dL <- l dD+-- (shared, total) <- readIORef stats+-- return (B.encode currentInterfaceVersion `L.append`+-- G.compress (B.encode (root, nL, sL, iL, dL)), shared, total)+-- verboseS "profile.sharing" 10 $ do+-- tickN "pointers (reused)" $ fromIntegral shared+-- tickN "pointers" $ fromIntegral total+-- return x+-- where+-- l h = List.map fst . List.sortBy (compare `on` snd) <$> H.toList h++-- | Decodes something. The result depends on the include path.+--+-- Returns 'Nothing' if the input does not start with the right magic+-- number or some other decoding error is encountered.++decode :: EmbPrj a => L.ByteString -> TCM (Maybe a)+decode s = do+ mf <- use stModuleToSource+ incs <- getIncludeDirs++ -- Note that B.runGetState and G.decompress can raise errors if the+ -- input is malformed. The decoder is (intended to be) strict enough+ -- to ensure that all such errors can be caught by the handler here.++ (mf, r) <- liftIO $ E.handle (\(E.ErrorCall s) -> noResult s) $ do++ (ver, s, _) <- return $ runGetState B.get s 0+ if ver /= currentInterfaceVersion+ then noResult "Wrong interface version."+ else do++ ((r, nL, sL, iL, dL), s, _) <-+ return $ runGetState B.get (G.decompress s) 0+ if s /= L.empty+ -- G.decompress seems to throw away garbage at the end, so+ -- the then branch is possibly dead code.+ then noResult "Garbage at end."+ else do++ st <- St (ar nL) (ar sL) (ar iL) (ar dL)+ <$> liftIO H.new+ <*> return mf <*> return incs+ (r, st) <- runStateT (runExceptT (value r)) st+ return (Just (modFile st), r)++ case mf of+ Nothing -> return ()+ Just mf -> stModuleToSource .= mf++ case r of+ Right x -> return (Just x)+ Left err -> do+ reportSLn "import.iface" 5 $ "Error when decoding interface file"+ -- Andreas, 2014-06-11 deactivated debug printing+ -- in order to get rid of dependency of Serialize on TCM.Pretty+ -- reportSDoc "import.iface" 5 $+ -- text "Error when decoding interface file:"+ -- $+$ nest 2 (prettyTCM err)+ return Nothing++ where+ ar l = listArray (0, List.genericLength l - 1) l++ noResult s = return (Nothing, Left $ GenericError s)++encodeInterface :: Interface -> TCM L.ByteString+encodeInterface i = L.append hashes <$> encode i+ where+ hashes :: L.ByteString+ hashes = B.runPut $ B.put (iSourceHash i) >> B.put (iFullHash i)++-- | Encodes something. To ensure relocatability file paths in+-- positions are replaced with module names.++encodeFile :: FilePath -> Interface -> TCM ()+encodeFile f i = liftIO . L.writeFile f =<< encodeInterface i++-- | Decodes something. The result depends on the include path.+--+-- Returns 'Nothing' if the file does not start with the right magic+-- number or some other decoding error is encountered.++decodeInterface :: L.ByteString -> TCM (Maybe Interface)+decodeInterface s = decode $ L.drop 16 s++decodeHashes :: L.ByteString -> Maybe (Hash, Hash)+decodeHashes s+ | L.length s < 16 = Nothing+ | otherwise = Just $ B.runGet getH $ L.take 16 s+ where getH = (,) <$> B.get <*> B.get++decodeFile :: FilePath -> TCM (Maybe Interface)+decodeFile f = decodeInterface =<< liftIO (L.readFile f)++-- | Store a 'SourceToModule' (map from 'AbsolutePath' to 'TopLevelModuleName')+-- as map from 'AbsolutePath' to 'Int32', in order to directly get the identifiers+-- from absolute pathes rather than going through top level module names.+icodeFileMod+ :: SourceToModule+ -- ^ Maps file names to the corresponding module names.+ -- Must contain a mapping for every file name that is later encountered.+ -> S ()+icodeFileMod fileMod = do+ hmap <- asks absPathD+ forM_ (Map.toList fileMod) $ \ (absolutePath, topLevelModuleName) -> do+ i <- icod_ topLevelModuleName+ liftIO $ H.insert hmap absolutePath i
+ src/full/Agda/TypeChecking/Serialise/Base.hs view
@@ -0,0 +1,640 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE ExistentialQuantification #-}+{-# LANGUAGE ScopedTypeVariables #-}++module Agda.TypeChecking.Serialise.Base where++import Control.Applicative+import Control.Monad+import Control.Monad.Reader+import Control.Monad.State.Strict (StateT, gets)++import Data.Array.IArray+import qualified Data.ByteString.Lazy as L+import Data.Hashable+import qualified Data.HashTable.IO as H+import Data.Int (Int32)+import Data.Maybe+import qualified Data.Binary as B+import qualified Data.Binary.Get as B+import Data.Typeable ( cast, Typeable, typeOf, TypeRep )++import Agda.Syntax.Common (NameId)+import Agda.Syntax.Internal (Term, QName(..), ModuleName(..), nameId)+import Agda.TypeChecking.Monad.Base (TypeError(GenericError), ModuleToSource)++import Agda.Utils.FileName+import Agda.Utils.IORef+import Agda.Utils.Lens+import Agda.Utils.Monad+import Agda.Utils.Pointer+import Agda.Utils.Except (ExceptT, throwError)++-- | Constructor tag (maybe omitted) and argument indices.++type Node = [Int32]++-- | The type of hashtables used in this module.+--+-- A very limited amount of testing indicates that 'H.CuckooHashTable'+-- is somewhat slower than 'H.BasicHashTable', and that+-- 'H.LinearHashTable' and the hashtables from "Data.Hashtable" are+-- much slower.++#if defined(mingw32_HOST_OS) && defined(x86_64_HOST_ARCH)+type HashTable k v = H.CuckooHashTable k v+#else+type HashTable k v = H.BasicHashTable k v+#endif++-- | Structure providing fresh identifiers for hash map+-- and counting hash map hits (i.e. when no fresh identifier required).+data FreshAndReuse = FreshAndReuse+ { farFresh :: !Int32 -- ^ Number of hash map misses.+ , farReuse :: !Int32 -- ^ Number of hash map hits.+ }++farEmpty :: FreshAndReuse+farEmpty = FreshAndReuse 0 0++lensFresh :: Lens' Int32 FreshAndReuse+lensFresh f r = f (farFresh r) <&> \ i -> r { farFresh = i }++lensReuse :: Lens' Int32 FreshAndReuse+lensReuse f r = f (farReuse r) <&> \ i -> r { farReuse = i }++-- | Two 'A.QName's are equal if their @QNameId@ is equal.+type QNameId = [NameId]++-- | Computing a qualified names composed ID.+qnameId :: QName -> QNameId+qnameId (QName (MName ns) n) = map nameId $ n:ns++-- | State of the the encoder.+data Dict = Dict+ -- Dictionaries which are serialized:+ { nodeD :: !(HashTable Node Int32) -- ^ Written to interface file.+ , stringD :: !(HashTable String Int32) -- ^ Written to interface file.+ , integerD :: !(HashTable Integer Int32) -- ^ Written to interface file.+ , doubleD :: !(HashTable Double Int32) -- ^ Written to interface file.+ -- Dicitionaries which are not serialized, but provide+ -- short cuts to speed up serialization:+ , termD :: !(HashTable (Ptr Term) Int32) -- ^ Not written to interface file.+ -- Andreas, Makoto, AIM XXI+ -- Memoizing A.Name does not buy us much if we already memoize A.QName.+ , nameD :: !(HashTable NameId Int32) -- ^ Not written to interface file.+ , qnameD :: !(HashTable QNameId Int32) -- ^ Not written to interface file.+ -- Fresh UIDs and reuse statistics:+ , nodeC :: !(IORef FreshAndReuse) -- counters for fresh indexes+ , stringC :: !(IORef FreshAndReuse)+ , integerC :: !(IORef FreshAndReuse)+ , doubleC :: !(IORef FreshAndReuse)+ , termC :: !(IORef FreshAndReuse)+ , nameC :: !(IORef FreshAndReuse)+ , qnameC :: !(IORef FreshAndReuse)+ , stats :: !(HashTable String Int)+ , collectStats :: Bool+ -- ^ If @True@ collect in @stats@ the quantities of+ -- calls to @icode@ for each @Typeable a@.+ , absPathD :: !(HashTable AbsolutePath Int32) -- ^ Not written to interface file.+ }++-- | Creates an empty dictionary.+emptyDict+ :: Bool+ -- ^ Collect statistics for @icode@ calls?+ -> IO Dict+emptyDict collectStats = Dict+ <$> H.new+ <*> H.new+ <*> H.new+ <*> H.new+ <*> H.new+ <*> H.new+ <*> H.new+ <*> newIORef farEmpty+ <*> newIORef farEmpty+ <*> newIORef farEmpty+ <*> newIORef farEmpty+ <*> newIORef farEmpty+ <*> newIORef farEmpty+ <*> newIORef farEmpty+ <*> H.new+ <*> pure collectStats+ <*> H.new++-- | Universal type, wraps everything.+data U = forall a . Typeable a => U !a++-- | Univeral memo structure, to introduce sharing during decoding+type Memo = HashTable (Int32, TypeRep) U -- (node index, type rep)++-- | State of the decoder.+data St = St+ { nodeE :: !(Array Int32 Node) -- ^ Obtained from interface file.+ , stringE :: !(Array Int32 String) -- ^ Obtained from interface file.+ , integerE :: !(Array Int32 Integer) -- ^ Obtained from interface file.+ , doubleE :: !(Array Int32 Double) -- ^ Obtained from interface file.+ , nodeMemo :: !Memo+ -- ^ Created and modified by decoder.+ -- Used to introduce sharing while deserializing objects.+ , modFile :: !ModuleToSource+ -- ^ Maps module names to file names. Constructed by the decoder.+ , includes :: [AbsolutePath]+ -- ^ The include directories.+ }++-- | Monad used by the encoder.++type S a = ReaderT Dict IO a++-- | Monad used by the decoder.+--+-- 'TCM' is not used because the associated overheads would make+-- decoding slower.++type R a = ExceptT TypeError (StateT St IO) a++-- | Throws an error which is suitable when the data stream is+-- malformed.++malformed :: R a+malformed = throwError $ GenericError "Malformed input."++class Typeable a => EmbPrj a where+ icode :: a -> S Int32 -- ^ Serialization (wrapper).+ icod_ :: a -> S Int32 -- ^ Serialization (worker).+ value :: Int32 -> R a -- ^ Deserialization.++ icode a = do+ tickICode a+ icod_ a++-- | Increase entry for @a@ in 'stats'.+tickICode :: forall a. Typeable a => a -> S ()+tickICode _ = whenM (asks collectStats) $ do+ let key = "icode " ++ show (typeOf (undefined :: a))+ hmap <- asks stats+ liftIO $ do+ n <- fromMaybe 0 <$> H.lookup hmap key+ H.insert hmap key $! n + 1++-- | Data.Binary.runGetState is deprecated in favour of runGetIncremental.+-- Reimplementing it in terms of the new function. The new Decoder type contains+-- strict byte strings so we need to be careful not to feed the entire lazy byte+-- string to the decoder at once.+runGetState :: B.Get a -> L.ByteString -> B.ByteOffset -> (a, L.ByteString, B.ByteOffset)+runGetState g s n = feed (B.runGetIncremental g) (L.toChunks s)+ where+ feed (B.Done s n' x) ss = (x, L.fromChunks (s : ss), n + n')+ feed (B.Fail _ _ err) _ = error err+ feed (B.Partial f) (s : ss) = feed (f $ Just s) ss+ feed (B.Partial f) [] = feed (f Nothing) []++-- Specializing icodeX leads to Warning like+-- src/full/Agda/TypeChecking/Serialise.hs:1297:1: Warning:+-- RULE left-hand side too complicated to desugar+-- case cobox_aQY5 of _ [Occ=Dead] { ghc-prim:GHC.Types.Eq# cobox ->+-- icodeX @ String $dEq_aQY3 $dHashable_aQY4+-- }+--+-- type ICodeX k+-- = (Dict -> HashTable k Int32)+-- -> (Dict -> IORef Int32)+-- -> k -> S Int32+-- {-# SPECIALIZE icodeX :: ICodeX String #-}+-- {-# SPECIALIZE icodeX :: ICodeX Integer #-}+-- {-# SPECIALIZE icodeX :: ICodeX Double #-}+-- {-# SPECIALIZE icodeX :: ICodeX Node #-}++-- Andreas, 2014-10-16 AIM XX:+-- Inlining this increases Serialization time by 10%+-- Makoto's theory: code size increase might lead to+-- instruction cache misses.+-- {-# INLINE icodeX #-}+icodeX :: (Eq k, Hashable k)+ => (Dict -> HashTable k Int32)+ -> (Dict -> IORef FreshAndReuse)+ -> k -> S Int32+icodeX dict counter key = do+ d <- asks dict+ c <- asks counter+ liftIO $ do+ mi <- H.lookup d key+ case mi of+ Just i -> do+ modifyIORef' c $ over lensReuse (+1)+ return i+ Nothing -> do+ fresh <- (^.lensFresh) <$> do readModifyIORef' c $ over lensFresh (+1)+ H.insert d key fresh+ return fresh++-- Instead of inlining icodeX, we manually specialize it to+-- its four uses: Integer, String, Double, Node.+-- Not a great gain (hardly noticeable), but not harmful.++icodeInteger :: Integer -> S Int32+icodeInteger key = do+ d <- asks integerD+ c <- asks integerC+ liftIO $ do+ mi <- H.lookup d key+ case mi of+ Just i -> do+ modifyIORef' c $ over lensReuse (+1)+ return i+ Nothing -> do+ fresh <- (^.lensFresh) <$> do readModifyIORef' c $ over lensFresh (+1)+ H.insert d key fresh+ return fresh++icodeDouble :: Double -> S Int32+icodeDouble key = do+ d <- asks doubleD+ c <- asks doubleC+ liftIO $ do+ mi <- H.lookup d key+ case mi of+ Just i -> do+ modifyIORef' c $ over lensReuse (+1)+ return i+ Nothing -> do+ fresh <- (^.lensFresh) <$> do readModifyIORef' c $ over lensFresh (+1)+ H.insert d key fresh+ return fresh++icodeString :: String -> S Int32+icodeString key = do+ d <- asks stringD+ c <- asks stringC+ liftIO $ do+ mi <- H.lookup d key+ case mi of+ Just i -> do+ modifyIORef' c $ over lensReuse (+1)+ return i+ Nothing -> do+ fresh <- (^.lensFresh) <$> do readModifyIORef' c $ over lensFresh (+1)+ H.insert d key fresh+ return fresh++icodeN :: Node -> S Int32+icodeN key = do+ d <- asks nodeD+ c <- asks nodeC+ liftIO $ do+ mi <- H.lookup d key+ case mi of+ Just i -> do+ modifyIORef' c $ over lensReuse (+1)+ return i+ Nothing -> do+ fresh <- (^.lensFresh) <$> do readModifyIORef' c $ over lensFresh (+1)+ H.insert d key fresh+ return fresh++-- icodeN :: [Int32] -> S Int32+-- icodeN = icodeX nodeD nodeC++-- | @icode@ only if thing has not seen before.+icodeMemo+ :: (Eq a, Ord a, Hashable a)+ => (Dict -> HashTable a Int32) -- ^ Memo structure for thing of key @a@.+ -> (Dict -> IORef FreshAndReuse) -- ^ Statistics.+ -> a -- ^ Key to the thing.+ -> S Int32 -- ^ Fallback computation to encode the thing.+ -> S Int32 -- ^ Encoded thing.+icodeMemo getDict getCounter a icodeP = do+ h <- asks getDict+ mi <- liftIO $ H.lookup h a+ st <- asks getCounter+ case mi of+ Just i -> liftIO $ do+ modifyIORef' st $ over lensReuse (+ 1)+ return i+ Nothing -> do+ liftIO $ modifyIORef' st $ over lensFresh (+1)+ i <- icodeP+ liftIO $ H.insert h a i+ return i++{-# INLINE vcase #-}+-- | @vcase value ix@ decodes thing represented by @ix :: Int32@+-- via the @valu@ function and stores it in 'nodeMemo'.+-- If @ix@ is present in 'nodeMemo', @valu@ is not used, but+-- the thing is read from 'nodeMemo' instead.+vcase :: forall a . EmbPrj a => (Node -> R a) -> Int32 -> R a+vcase valu = \ix -> do+ memo <- gets nodeMemo+ -- compute run-time representation of type a+ let aTyp = typeOf (undefined :: a)+ -- to introduce sharing, see if we have seen a thing+ -- represented by ix before+ maybeU <- liftIO $ H.lookup memo (ix, aTyp)+ case maybeU of+ -- yes, we have seen it before, use the version from memo+ Just (U u) -> maybe malformed return (cast u)+ -- no, it's new, so generate it via valu and insert it into memo+ Nothing -> do+ v <- valu . (! ix) =<< gets nodeE+ liftIO $ H.insert memo (ix, aTyp) (U v)+ return v++-- Andreas, Makoto, AIM XX (2014-10-15):+-- No performance gain for INLINE here (neutral / slighly negative).+--+-- {-# INLINE icode0 #-}+-- {-# INLINE icode1 #-}+-- {-# INLINE icode2 #-}+-- {-# INLINE icode3 #-}+-- {-# INLINE icode4 #-}+-- {-# INLINE icode5 #-}+-- {-# INLINE icode6 #-}+-- {-# INLINE icode7 #-}+-- {-# INLINE icode8 #-}+-- {-# INLINE icode9 #-}+-- {-# INLINE icode10 #-}+-- {-# INLINE icode11 #-}+-- {-# INLINE icode12 #-}+-- {-# INLINE icode13 #-}+-- {-# INLINE icode14 #-}++icode0 :: Int32 -> S Int32++icode1 :: EmbPrj a => Int32 -> a -> S Int32++icode2 :: (EmbPrj a, EmbPrj b) =>+ Int32 -> a -> b ->+ S Int32++icode3 :: (EmbPrj a, EmbPrj b, EmbPrj c) =>+ Int32 -> a -> b -> c ->+ S Int32++icode4 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d) =>+ Int32 -> a -> b -> c -> d ->+ S Int32++icode5 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e) =>+ Int32 -> a -> b -> c -> d -> e ->+ S Int32++icode6 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f) =>+ Int32 -> a -> b -> c -> d -> e -> f ->+ S Int32++icode7 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g ) =>+ Int32 -> a -> b -> c -> d -> e -> f -> g ->+ S Int32++icode8 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h ) =>+ Int32 -> a -> b -> c -> d -> e -> f -> g -> h ->+ S Int32++icode9 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h, EmbPrj i ) =>+ Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i ->+ S Int32++icode10 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j ) =>+ Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j ->+ S Int32++icode11 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k ) =>+ Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k ->+ S Int32++icode12 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l ) =>+ Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l ->+ S Int32++icode13 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l+ , EmbPrj m ) =>+ Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m ->+ S Int32++icode14 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l+ , EmbPrj m, EmbPrj n ) =>+ Int32 -> a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> n ->+ S Int32++icode0 tag = icodeN [tag]+icode1 tag a = icodeN . (tag :) =<< sequence [icode a]+icode2 tag a b = icodeN . (tag :) =<< sequence [icode a, icode b]+icode3 tag a b c = icodeN . (tag :) =<< sequence [icode a, icode b, icode c]+icode4 tag a b c d = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d]+icode5 tag a b c d e = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e]+icode6 tag a b c d e f = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f]+icode7 tag a b c d e f g = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g]+icode8 tag a b c d e f g h = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h]+icode9 tag a b c d e f g h i = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i]+icode10 tag a b c d e f g h i j = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j]+icode11 tag a b c d e f g h i j k = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k]+icode12 tag a b c d e f g h i j k l = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l]+icode13 tag a b c d e f g h i j k l m = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l, icode m]+icode14 tag a b c d e f g h i j k l m n = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l, icode m, icode n]+++-- Andreas, Makoto, AIM XX (2014-10-15):+-- No performance gain for INLINE here (neutral / slighly negative).+--+-- {-# INLINE icode0' #-}+-- {-# INLINE icode1' #-}+-- {-# INLINE icode2' #-}+-- {-# INLINE icode3' #-}+-- {-# INLINE icode4' #-}+-- {-# INLINE icode5' #-}+-- {-# INLINE icode6' #-}+-- {-# INLINE icode7' #-}+-- {-# INLINE icode8' #-}+-- {-# INLINE icode9' #-}+-- {-# INLINE icode10' #-}+-- {-# INLINE icode11' #-}+-- {-# INLINE icode12' #-}+-- {-# INLINE icode13' #-}+-- {-# INLINE icode14' #-}++icode0' :: S Int32++icode1' :: EmbPrj a => a -> S Int32++icode2' :: (EmbPrj a, EmbPrj b) =>+ a -> b ->+ S Int32++icode3' :: (EmbPrj a, EmbPrj b, EmbPrj c) =>+ a -> b -> c ->+ S Int32++icode4' :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d) =>+ a -> b -> c -> d ->+ S Int32++icode5' :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e) =>+ a -> b -> c -> d -> e ->+ S Int32++icode6' :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f) =>+ a -> b -> c -> d -> e -> f ->+ S Int32++icode7' :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g ) =>+ a -> b -> c -> d -> e -> f -> g ->+ S Int32++icode8' :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h ) =>+ a -> b -> c -> d -> e -> f -> g -> h ->+ S Int32++icode9' :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h, EmbPrj i ) =>+ a -> b -> c -> d -> e -> f -> g -> h -> i ->+ S Int32++icode10' :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j ) =>+ a -> b -> c -> d -> e -> f -> g -> h -> i -> j ->+ S Int32++icode11' :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k ) =>+ a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k ->+ S Int32++icode12' :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l ) =>+ a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l ->+ S Int32++icode13' :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l+ , EmbPrj m ) =>+ a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m ->+ S Int32++icode14' :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l+ , EmbPrj m, EmbPrj n ) =>+ a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> n ->+ S Int32++icode0' = icodeN []+icode1' a = icodeN =<< sequence [icode a]+icode2' a b = icodeN =<< sequence [icode a, icode b]+icode3' a b c = icodeN =<< sequence [icode a, icode b, icode c]+icode4' a b c d = icodeN =<< sequence [icode a, icode b, icode c, icode d]+icode5' a b c d e = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e]+icode6' a b c d e f = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f]+icode7' a b c d e f g = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g]+icode8' a b c d e f g h = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h]+icode9' a b c d e f g h i = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i]+icode10' a b c d e f g h i j = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j]+icode11' a b c d e f g h i j k = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k]+icode12' a b c d e f g h i j k l = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l]+icode13' a b c d e f g h i j k l m = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l, icode m]+icode14' a b c d e f g h i j k l m n = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l, icode m, icode n]++valu0 :: a -> R a++valu1 :: EmbPrj a => (a -> b) -> Int32 -> R b++valu2 :: (EmbPrj a, EmbPrj b) =>+ (a -> b -> c) ->+ Int32 -> Int32 ->+ R c++valu3 :: (EmbPrj a, EmbPrj b, EmbPrj c) =>+ (a -> b -> c -> d) ->+ Int32 -> Int32 -> Int32 ->+ R d++valu4 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d) =>+ (a -> b -> c -> d -> e) ->+ Int32 -> Int32 -> Int32 -> Int32 ->+ R e++valu5 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e) =>+ (a -> b -> c -> d -> e -> f) ->+ Int32 -> Int32 -> Int32 -> Int32 -> Int32 ->+ R f++valu6 :: (EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f) =>+ (a -> b -> c -> d -> e -> f -> g) ->+ Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 ->+ R g++valu7 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g ) =>+ (a -> b -> c -> d -> e -> f -> g -> h) ->+ Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 ->+ R h++valu8 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h ) =>+ (a -> b -> c -> d -> e -> f -> g -> h -> i) ->+ Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 ->+ R i++valu9 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h, EmbPrj i ) =>+ (a -> b -> c -> d -> e -> f -> g -> h -> i -> j) ->+ Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 ->+ R j++valu10 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j ) =>+ (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k) ->+ Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 ->+ R k++valu11 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k ) =>+ (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l) ->+ Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 ->+ R l++valu12 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l ) =>+ (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m) ->+ Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 ->+ R m++valu13 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l+ , EmbPrj m ) =>+ (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> n) ->+ Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 ->+ R n++valu14 :: ( EmbPrj a, EmbPrj b, EmbPrj c, EmbPrj d, EmbPrj e, EmbPrj f+ , EmbPrj g, EmbPrj h, EmbPrj i, EmbPrj j, EmbPrj k, EmbPrj l+ , EmbPrj m, EmbPrj n ) =>+ (a -> b -> c -> d -> e -> f -> g -> h -> i -> j -> k -> l -> m -> n -> o) ->+ Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 ->+ R o++valu0 z = return z+valu1 z a = valu0 z `ap` value a+valu2 z a b = valu1 z a `ap` value b+valu3 z a b c = valu2 z a b `ap` value c+valu4 z a b c d = valu3 z a b c `ap` value d+valu5 z a b c d e = valu4 z a b c d `ap` value e+valu6 z a b c d e f = valu5 z a b c d e `ap` value f+valu7 z a b c d e f g = valu6 z a b c d e f `ap` value g+valu8 z a b c d e f g h = valu7 z a b c d e f g `ap` value h+valu9 z a b c d e f g h i = valu8 z a b c d e f g h `ap` value i+valu10 z a b c d e f g h i j = valu9 z a b c d e f g h i `ap` value j+valu11 z a b c d e f g h i j k = valu10 z a b c d e f g h i j `ap` value k+valu12 z a b c d e f g h i j k l = valu11 z a b c d e f g h i j k `ap` value l+valu13 z a b c d e f g h i j k l m = valu12 z a b c d e f g h i j k l `ap` value m+valu14 z a b c d e f g h i j k l m n = valu13 z a b c d e f g h i j k l m `ap` value n
+ src/full/Agda/TypeChecking/Serialise/Instances.hs view
@@ -0,0 +1,19 @@+{-# OPTIONS_GHC -fno-warn-orphans #-}++-- Only instances exported+module Agda.TypeChecking.Serialise.Instances () where++import Agda.TypeChecking.Monad.Base+import Agda.TypeChecking.Serialise.Base+import Agda.TypeChecking.Serialise.Instances.Abstract ()+import Agda.TypeChecking.Serialise.Instances.Common ()+import Agda.TypeChecking.Serialise.Instances.Compilers ()+import Agda.TypeChecking.Serialise.Instances.Highlighting ()+import Agda.TypeChecking.Serialise.Instances.Internal ()++instance EmbPrj Interface where+ icod_ (Interface a b c d e f g h i j k) = icode11' a b c d e f g h i j k++ value = vcase valu where+ valu [a, b, c, d, e, f, g, h, i, j, k] = valu11 Interface a b c d e f g h i j k+ valu _ = malformed
+ src/full/Agda/TypeChecking/Serialise/Instances/Abstract.hs view
@@ -0,0 +1,279 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE FlexibleInstances #-}++#if __GLASGOW_HASKELL__ >= 710+{-# LANGUAGE FlexibleContexts #-}+#endif++{-# OPTIONS_GHC -fno-warn-orphans #-}++module Agda.TypeChecking.Serialise.Instances.Abstract where++import Control.Applicative++import Agda.Syntax.Common+import qualified Agda.Syntax.Abstract as A+import Agda.Syntax.Info+import Agda.Syntax.Scope.Base+import Agda.Syntax.Position as P+import Agda.Syntax.Fixity++import Agda.TypeChecking.Serialise.Base+import Agda.TypeChecking.Serialise.Instances.Common ()++import Agda.TypeChecking.Monad++import Agda.Utils.Except++#include "undefined.h"+import Agda.Utils.Impossible++instance EmbPrj Scope where+ icod_ (Scope a b c d e) = icode5' a b c d e++ value = vcase valu where+ valu [a, b, c, d, e] = valu5 Scope a b c d e+ valu _ = malformed++instance EmbPrj NameSpaceId where+ icod_ PublicNS = icode0'+ icod_ PrivateNS = icode0 1+ icod_ ImportedNS = icode0 2+ icod_ OnlyQualifiedNS = icode0 3++ value = vcase valu where+ valu [] = valu0 PublicNS+ valu [1] = valu0 PrivateNS+ valu [2] = valu0 ImportedNS+ valu [3] = valu0 OnlyQualifiedNS+ valu _ = malformed++instance EmbPrj Access where+ icod_ PrivateAccess = icode0 0+ icod_ PublicAccess = icode0'+ icod_ OnlyQualified = icode0 2++ value = vcase valu where+ valu [0] = valu0 PrivateAccess+ valu [] = valu0 PublicAccess+ valu [2] = valu0 OnlyQualified+ valu _ = malformed++instance EmbPrj NameSpace where+ icod_ (NameSpace a b) = icode2' a b++ value = vcase valu where+ valu [a, b] = valu2 NameSpace a b+ valu _ = malformed++instance EmbPrj WhyInScope where+ icod_ Defined = icode0'+ icod_ (Opened a b) = icode2 0 a b+ icod_ (Applied a b) = icode2 1 a b++ value = vcase valu where+ valu [] = valu0 Defined+ valu [0, a, b] = valu2 Opened a b+ valu [1, a, b] = valu2 Applied a b+ valu _ = malformed++instance EmbPrj AbstractName where+ icod_ (AbsName a b c) = icode3' a b c++ value = vcase valu where+ valu [a, b, c] = valu3 AbsName a b c+ valu _ = malformed++instance EmbPrj AbstractModule where+ icod_ (AbsModule a b) = icode2' a b++ value = vcase valu where+ valu [a, b] = valu2 AbsModule a b+ valu _ = malformed++instance EmbPrj KindOfName where+ icod_ DefName = icode0'+ icod_ ConName = icode0 1+ icod_ FldName = icode0 2+ icod_ PatternSynName = icode0 3+ icod_ QuotableName = icode0 4++ value = vcase valu where+ valu [] = valu0 DefName+ valu [1] = valu0 ConName+ valu [2] = valu0 FldName+ valu [3] = valu0 PatternSynName+ valu [4] = valu0 QuotableName+ valu _ = malformed++instance EmbPrj LocalVar where+ icod_ (LocalVar a) = icode1' a+ icod_ (ShadowedVar a b) = icode2' a b++ value = vcase valu where+ valu [a] = valu1 LocalVar a+ valu [a, b] = valu2 ShadowedVar a b+ valu _ = malformed++-- Only used for pattern synonyms+instance EmbPrj A.Expr where+ icod_ (A.Var n) = icode1 0 n+ icod_ (A.Def n) = icode1 1 n+ icod_ (A.Con ns) = icode1 2 ns+ icod_ (A.Lit l) = icode1 3 l+ icod_ (A.QuestionMark{}) = icode0 4+ icod_ (A.Underscore _) = icode0 5+ icod_ (A.App _ a b) = icode2 6 a b+ icod_ (A.WithApp _ a b) = icode2 7 a b+ icod_ (A.Lam _ a b) = icode2 8 a b+ icod_ (A.AbsurdLam _ a) = icode1 9 a+ icod_ (A.ExtendedLam _ _ _ _) = __IMPOSSIBLE__+ icod_ (A.Pi _ a b) = icode2 11 a b+ icod_ (A.Fun _ a b) = icode2 12 a b+ icod_ (A.Set _ a) = icode1 13 a+ icod_ (A.Prop _) = icode0 14+ icod_ (A.Let _ _ _) = __IMPOSSIBLE__+ icod_ (A.ETel{}) = __IMPOSSIBLE__+ icod_ (A.Rec _ a) = icode1 17 a+ icod_ (A.RecUpdate _ a b) = icode2 18 a b+ -- Andreas, 2015-07-15, drop scopes embedded in expressions.+ -- As expressions are not @unScope@d before serialization,+ -- this case is not __IMPOSSIBLE__.+ icod_ (A.ScopedExpr a b) = icod_ b -- WAS: icode2 19 a b+ icod_ (A.QuoteGoal _ a b) = icode2 20 a b+ icod_ (A.QuoteContext _ a b) = icode2 21 a b+ icod_ (A.Quote _) = icode0 22+ icod_ (A.QuoteTerm _) = icode0 23+ icod_ (A.Unquote _) = icode0 24+ icod_ (A.DontCare a) = icode1 25 a+ icod_ (A.PatternSyn a) = icode1 26 a+ icod_ (A.Proj a) = icode1 27 a++ value = vcase valu where+ valu [0, a] = valu1 A.Var a+ valu [1, a] = valu1 A.Def a+ valu [2, a] = valu1 A.Con a+ valu [3, a] = valu1 A.Lit a+ valu [4] = valu0 (A.QuestionMark emptyMetaInfo 0)+ valu [5] = valu0 (A.Underscore emptyMetaInfo)+ valu [6, a, b] = valu2 (A.App i) a b+ valu [7, a, b] = valu2 (A.WithApp i) a b+ valu [8, a, b] = valu2 (A.Lam i) a b+ valu [9, a] = valu1 (A.AbsurdLam i) a+ valu [11, a, b] = valu2 (A.Pi i) a b+ valu [12, a, b] = valu2 (A.Fun i) a b+ valu [13, a] = valu1 (A.Set i) a+ valu [14] = valu0 (A.Prop i)+ valu [17, a] = valu1 (A.Rec i) a+ valu [18, a, b] = valu2 (A.RecUpdate i) a b+ -- valu [19, a, b] = valu2 A.ScopedExpr a b+ valu [20, a, b] = valu2 (A.QuoteGoal i) a b+ valu [21, a, b] = valu2 (A.QuoteContext i) a b+ valu [22] = valu0 (A.Quote i)+ valu [23] = valu0 (A.QuoteTerm i)+ valu [24] = valu0 (A.Unquote i)+ valu [25, a] = valu1 A.DontCare a+ valu [26, a] = valu1 A.PatternSyn a+ valu [27, a] = valu1 A.Proj a+ valu _ = malformed++ i = ExprRange noRange++instance EmbPrj ConPatInfo where+ icod_ (ConPatInfo a _) = icod_ a+ value a = flip ConPatInfo patNoRange <$> value a++instance EmbPrj A.Pattern where+ icod_ (A.VarP a) = icode1 0 a+ icod_ (A.ConP a b c) = icode3 1 a b c+ icod_ (A.DefP _ a b) = icode2 2 a b+ icod_ (A.WildP _) = icode0 3+ icod_ (A.AsP _ a b) = icode2 4 a b+ icod_ (A.DotP _ a) = icode1 5 a+ icod_ (A.AbsurdP _) = icode0 6+ icod_ (A.LitP a) = icode1 7 a+ icod_ (A.PatternSynP _ a b) = icode2 9 a b++ value = vcase valu where+ valu [0, a] = valu1 A.VarP a+ valu [1, a, b, c] = valu3 A.ConP a b c+ valu [2, a, b] = valu2 (A.DefP i) a b+ valu [3] = valu0 (A.WildP i)+ valu [4, a, b] = valu2 (A.AsP i) a b+ valu [5, a] = valu1 (A.DotP i) a+ valu [6] = valu0 (A.AbsurdP i)+ valu [7, a] = valu1 (A.LitP) a+ valu [9, a, b] = valu2 (A.PatternSynP i) a b+ valu _ = malformed++ i = patNoRange++instance EmbPrj A.LamBinding where+ icod_ (A.DomainFree i e) = icode2 0 i e+ icod_ (A.DomainFull a) = icode1 1 a++ value = vcase valu where+ valu [0, i, e] = valu2 A.DomainFree i e+ valu [1, a] = valu1 A.DomainFull a+ valu _ = malformed++instance EmbPrj A.LetBinding where+ icod_ (A.LetBind _ a b c d) = icode4 0 a b c d+ icod_ (A.LetPatBind _ a b ) = icode2 1 a b+ icod_ (A.LetApply _ _ _ _ _) = icode0 2+ icod_ (A.LetOpen _ _) = icode0 2++ value = vcase valu where+ valu [0, a, b, c, d] = valu4 (A.LetBind (LetRange noRange)) a b c d+ valu [1, a, b] = valu2 (A.LetPatBind (LetRange noRange)) a b+ valu [2] = throwError $ NotSupported+ "importing pattern synonym containing let module"+ valu _ = malformed++instance EmbPrj A.TypedBindings where+ icod_ (A.TypedBindings a b) = icode2' a b++ value = vcase valu where+ valu [a, b] = valu2 A.TypedBindings a b+ valu _ = malformed++instance EmbPrj A.TypedBinding where+ icod_ (A.TBind a b c) = icode3 0 a b c+ icod_ (A.TLet a b) = icode2 1 a b++ value = vcase valu where+ valu [0, a, b, c] = valu3 A.TBind a b c+ valu [1, a, b] = valu2 A.TLet a b+ valu _ = malformed++instance EmbPrj Precedence where+ icod_ TopCtx = icode0'+ icod_ FunctionSpaceDomainCtx = icode0 1+ icod_ (LeftOperandCtx a) = icode1 2 a+ icod_ (RightOperandCtx a) = icode1 3 a+ icod_ FunctionCtx = icode0 4+ icod_ ArgumentCtx = icode0 5+ icod_ InsideOperandCtx = icode0 6+ icod_ WithFunCtx = icode0 7+ icod_ WithArgCtx = icode0 8+ icod_ DotPatternCtx = icode0 9++ value = vcase valu where+ valu [] = valu0 TopCtx+ valu [1] = valu0 FunctionSpaceDomainCtx+ valu [2, a] = valu1 LeftOperandCtx a+ valu [3, a] = valu1 RightOperandCtx a+ valu [4] = valu0 FunctionCtx+ valu [5] = valu0 ArgumentCtx+ valu [6] = valu0 InsideOperandCtx+ valu [7] = valu0 WithFunCtx+ valu [8] = valu0 WithArgCtx+ valu [9] = valu0 DotPatternCtx+ valu _ = malformed++instance EmbPrj ScopeInfo where+ icod_ (ScopeInfo a b c d) = icode4' a b c d++ value = vcase valu where+ valu [a, b, c, d] = valu4 ScopeInfo a b c d+ valu _ = malformed
+ src/full/Agda/TypeChecking/Serialise/Instances/Common.hs view
@@ -0,0 +1,437 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE ExistentialQuantification #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE ScopedTypeVariables #-}++#if __GLASGOW_HASKELL__ >= 710+{-# LANGUAGE FlexibleContexts #-}+#endif++#if __GLASGOW_HASKELL__ <= 708+{-# LANGUAGE OverlappingInstances #-}+#endif++{-# OPTIONS_GHC -fno-warn-orphans #-}+module Agda.TypeChecking.Serialise.Instances.Common where++import Control.Applicative+import Control.Monad.Reader+import Control.Monad.State.Strict (gets, modify)++import Data.Array.IArray+import Data.Word+import qualified Data.ByteString.Lazy as L+import qualified Data.Foldable as Fold+import Data.Hashable+import qualified Data.HashTable.IO as H+import Data.Int (Int32)+import Data.Maybe+import Data.Map (Map)+import qualified Data.Map as Map+import Data.Set (Set)+import qualified Data.Set as Set+import Data.Sequence (Seq)+import qualified Data.Sequence as Seq+import Data.Void++import Agda.Syntax.Common as Common+import Agda.Syntax.Concrete.Name as C+import qualified Agda.Syntax.Concrete as C+import qualified Agda.Syntax.Abstract as A+import Agda.Syntax.Position as P+import Agda.Syntax.Fixity+import Agda.Syntax.Notation+import Agda.Syntax.Literal+import Agda.Interaction.FindFile++import Agda.TypeChecking.Serialise.Base++import Agda.Utils.BiMap (BiMap)+import qualified Agda.Utils.BiMap as BiMap+import Agda.Utils.HashMap (HashMap)+import qualified Agda.Utils.HashMap as HMap+import Agda.Utils.FileName+import qualified Agda.Utils.Maybe.Strict as Strict++import Agda.Utils.Except++#include "undefined.h"+import Agda.Utils.Impossible++#if __GLASGOW_HASKELL__ >= 710+instance {-# OVERLAPPING #-} EmbPrj String where+#else+instance EmbPrj String where+#endif+ icod_ = icodeString+ value i = (! i) `fmap` gets stringE++instance EmbPrj Integer where+ icod_ = icodeInteger+ value i = (! i) `fmap` gets integerE++instance EmbPrj Word64 where+ icod_ i = icode2' (int32 q) (int32 r)+ where (q, r) = quotRem i (2^32)+ int32 :: Word64 -> Int32+ int32 = fromIntegral++ value = vcase valu where+ valu [a, b] = return $ n * mod (fromIntegral a) n + mod (fromIntegral b) n+ valu _ = malformed+ n = 2^32++instance EmbPrj Int32 where+ icod_ i = return i+ value i = return i++instance EmbPrj Int where+ icod_ i = return (fromIntegral i)+ value i = return (fromIntegral i)++instance EmbPrj Char where+ icod_ c = return (fromIntegral $ fromEnum c)+ value i = return (toEnum $ fromInteger $ toInteger i)++instance EmbPrj Double where+ icod_ = icodeDouble+ value i = (! i) `fmap` gets doubleE++instance EmbPrj () where+ icod_ () = icode0'++ value = vcase valu where+ valu [] = valu0 ()+ valu _ = malformed++instance (EmbPrj a, EmbPrj b) => EmbPrj (a, b) where+ icod_ (a, b) = icode2' a b++ value = vcase valu where+ valu [a, b] = valu2 (,) a b+ valu _ = malformed++instance (EmbPrj a, EmbPrj b, EmbPrj c) => EmbPrj (a, b, c) where+ icod_ (a, b, c) = icode3' a b c++ value = vcase valu where+ valu [a, b, c] = valu3 (,,) a b c+ valu _ = malformed++instance EmbPrj a => EmbPrj (Maybe a) where+ icod_ Nothing = icode0'+ icod_ (Just x) = icode1' x++ value = vcase valu where+ valu [] = valu0 Nothing+ valu [x] = valu1 Just x+ valu _ = malformed++instance EmbPrj Bool where+ icod_ True = icode0'+ icod_ False = icode0 0++ value = vcase valu where+ valu [] = valu0 True+ valu [0] = valu0 False+ valu _ = malformed++instance EmbPrj AbsolutePath where+ icod_ file = do+ d <- asks absPathD+ liftIO $ fromMaybe __IMPOSSIBLE__ <$> H.lookup d file++ value m = do+ m :: TopLevelModuleName+ <- value m+ mf <- gets modFile+ incs <- gets includes+ (r, mf) <- liftIO $ findFile'' incs m mf+ modify $ \s -> s { modFile = mf }+ case r of+ Left err -> throwError $ findErrorToTypeError m err+ Right f -> return f++instance EmbPrj Position where+ icod_ (P.Pn file pos line col) = icode4' file pos line col++ value = vcase valu where+ valu [f, p, l, c] = valu4 P.Pn f p l c+ valu _ = malformed++instance EmbPrj TopLevelModuleName where+ icod_ (TopLevelModuleName a) = icode1' a++ value = vcase valu where+ valu [a] = valu1 TopLevelModuleName a+ valu _ = malformed++#if __GLASGOW_HASKELL__ >= 710+instance {-# OVERLAPPABLE #-} EmbPrj a => EmbPrj [a] where+#else+instance EmbPrj a => EmbPrj [a] where+#endif+ icod_ xs = icodeN =<< mapM icode xs+ value = vcase (mapM value)+-- icode [] = icode0'+-- icode (x : xs) = icode2' x xs+-- value = vcase valu where valu [] = valu0 []+-- valu [x, xs] = valu2 (:) x xs+-- valu _ = malformed++instance (Ord a, Ord b, EmbPrj a, EmbPrj b) => EmbPrj (BiMap a b) where+ icod_ m = icode (BiMap.toList m)+ value m = BiMap.fromList <$> value m++instance (Ord a, EmbPrj a, EmbPrj b) => EmbPrj (Map a b) where+ icod_ m = icode (Map.toList m)+ value m = Map.fromList `fmap` value m++instance (Ord a, EmbPrj a) => EmbPrj (Set a) where+ icod_ s = icode (Set.toList s)+ value s = Set.fromList `fmap` value s++instance EmbPrj P.Interval where+ icod_ (P.Interval p q) = icode2' p q++ value = vcase valu where+ valu [p, q] = valu2 P.Interval p q+ valu _ = malformed++instance EmbPrj Range where+ icod_ (P.Range is) = icode1' is++ value = vcase valu where+ valu [is] = valu1 P.Range is+ valu _ = malformed++instance EmbPrj C.Name where+ icod_ (C.NoName a b) = icode2 0 a b+ icod_ (C.Name r xs) = icode2' r xs++ value = vcase valu where+ valu [0, a, b] = valu2 C.NoName a b+ valu [r, xs] = valu2 C.Name r xs+ valu _ = malformed++instance EmbPrj NamePart where+ icod_ Hole = icode0'+ icod_ (Id a) = icode1' a++ value = vcase valu where+ valu [] = valu0 Hole+ valu [a] = valu1 Id a+ valu _ = malformed++instance EmbPrj C.QName where+ icod_ (Qual a b) = icode2' a b+ icod_ (C.QName a ) = icode1' a++ value = vcase valu where+ valu [a, b] = valu2 Qual a b+ valu [a] = valu1 C.QName a+ valu _ = malformed++instance EmbPrj Agda.Syntax.Fixity.Associativity where+ icod_ LeftAssoc = icode0'+ icod_ RightAssoc = icode0 1+ icod_ NonAssoc = icode0 2++ value = vcase valu where+ valu [] = valu0 LeftAssoc+ valu [1] = valu0 RightAssoc+ valu [2] = valu0 NonAssoc+ valu _ = malformed++instance EmbPrj Agda.Syntax.Fixity.Fixity where+ icod_ (Fixity a b c) = icode3' a b c++ value = vcase valu where+ valu [a, b, c] = valu3 Fixity a b c+ valu _ = malformed++instance EmbPrj Agda.Syntax.Fixity.Fixity' where+ icod_ (Fixity' a b) = icode2' a b++ value = vcase valu where+ valu [a,b] = valu2 Fixity' a b+ valu _ = malformed++instance EmbPrj GenPart where+ icod_ (BindHole a) = icode1 0 a+ icod_ (NormalHole a) = icode1 1 a+ icod_ (IdPart a) = icode1' a++ value = vcase valu where+ valu [0, a] = valu1 BindHole a+ valu [1, a] = valu1 NormalHole a+ valu [a] = valu1 IdPart a+ valu _ = malformed++instance EmbPrj A.QName where+ icod_ n@(A.QName a b) = icodeMemo qnameD qnameC (qnameId n) $ icode2' a b++ value = vcase valu where+ valu [a, b] = valu2 A.QName a b+ valu _ = malformed++instance EmbPrj A.AmbiguousQName where+ icod_ (A.AmbQ a) = icode a+ value n = A.AmbQ `fmap` value n++instance EmbPrj A.ModuleName where+ icod_ (A.MName a) = icode a+ value n = A.MName `fmap` value n++instance EmbPrj A.Name where+ icod_ (A.Name a b c d) = icodeMemo nameD nameC a $ icode4' a b c d++ value = vcase valu where+ valu [a, b, c, d] = valu4 A.Name a b c d+ valu _ = malformed++instance (EmbPrj s, EmbPrj t) => EmbPrj (Named s t) where+ icod_ (Named a b) = icode2' a b++ value = vcase valu where+ valu [a, b] = valu2 Named a b+ valu _ = malformed++instance EmbPrj a => EmbPrj (Ranged a) where+ icod_ (Ranged r x) = icode2' r x++ value = vcase valu where+ valu [r, x] = valu2 Ranged r x+ valu _ = malformed++instance EmbPrj c => EmbPrj (Common.ArgInfo c) where+ icod_ (ArgInfo h r cs) = icode3' h r cs++ value = vcase valu where+ valu [h, r, cs] = valu3 ArgInfo h r cs+ valu _ = malformed++instance EmbPrj NameId where+ icod_ (NameId a b) = icode2' a b++ value = vcase valu where+ valu [a, b] = valu2 NameId a b+ valu _ = malformed++instance (Eq k, Hashable k, EmbPrj k, EmbPrj v) => EmbPrj (HashMap k v) where+ icod_ m = icode (HMap.toList m)+ value m = HMap.fromList `fmap` value m++instance EmbPrj a => EmbPrj (WithHiding a) where+ icod_ (WithHiding a b) = icode2' a b++ value = vcase valu where+ valu [a, b] = valu2 WithHiding a b+ valu _ = malformed++instance (EmbPrj a, EmbPrj c) => EmbPrj (Common.Arg c a) where+ icod_ (Arg i e) = icode2' i e++ value = vcase valu where+ valu [i, e] = valu2 Arg i e+ valu _ = malformed++instance (EmbPrj a, EmbPrj c) => EmbPrj (Common.Dom c a) where+ icod_ (Dom i e) = icode2' i e++ value = vcase valu where+ valu [i, e] = valu2 Dom i e+ valu _ = malformed++instance EmbPrj Common.Induction where+ icod_ Inductive = icode0'+ icod_ CoInductive = icode0 1++ value = vcase valu where+ valu [] = valu0 Inductive+ valu [1] = valu0 CoInductive+ valu _ = malformed++instance EmbPrj Common.Hiding where+ icod_ Hidden = return 0+ icod_ NotHidden = return 1+ icod_ Instance = return 2++ value 0 = return Hidden+ value 1 = return NotHidden+ value 2 = return Instance+ value _ = malformed++instance EmbPrj Common.Relevance where+ icod_ Relevant = return 0+ icod_ Irrelevant = return 1+ icod_ (Forced Small) = return 2+ icod_ (Forced Big) = return 3+ icod_ NonStrict = return 4+ icod_ UnusedArg = return 5++ value 0 = return Relevant+ value 1 = return Irrelevant+ value 2 = return (Forced Small)+ value 3 = return (Forced Big)+ value 4 = return NonStrict+ value 5 = return UnusedArg+ value _ = malformed++-- instance EmbPrj Common.Relevance where+-- icod_ Relevant = icode0'+-- icod_ Irrelevant = icode0 1+-- icod_ (Forced Small) = icode0 2+-- icod_ (Forced Big) = icode0 5+-- icod_ NonStrict = icode0 3+-- icod_ UnusedArg = icode0 4+-- value = vcase valu where valu [] = valu0 Relevant+-- valu [1] = valu0 Irrelevant+-- valu [2] = valu0 (Forced Small)+-- valu [5] = valu0 (Forced Big)+-- valu [3] = valu0 NonStrict+-- valu [4] = valu0 UnusedArg+-- valu _ = malformed++instance EmbPrj ConPOrigin where+ icod_ ConPImplicit = return 0+ icod_ ConPCon = return 1+ icod_ ConPRec = return 2++ value 0 = return ConPImplicit+ value 1 = return ConPCon+ value 2 = return ConPRec+ value _ = malformed++instance EmbPrj Agda.Syntax.Literal.Literal where+ icod_ (LitInt a b) = icode2' a b+ icod_ (LitFloat a b) = icode2 1 a b+ icod_ (LitString a b) = icode2 2 a b+ icod_ (LitChar a b) = icode2 3 a b+ icod_ (LitQName a b) = icode2 5 a b++ value = vcase valu where+ valu [a, b] = valu2 LitInt a b+ valu [1, a, b] = valu2 LitFloat a b+ valu [2, a, b] = valu2 LitString a b+ valu [3, a, b] = valu2 LitChar a b+ valu [5, a, b] = valu2 LitQName a b+ valu _ = malformed++instance EmbPrj Common.IsAbstract where+ icod_ AbstractDef = icode0 0+ icod_ ConcreteDef = icode0'++ value = vcase valu where+ valu [0] = valu0 AbstractDef+ valu [] = valu0 ConcreteDef+ valu _ = malformed++instance EmbPrj Delayed where+ icod_ Delayed = icode0 0+ icod_ NotDelayed = icode0'++ value = vcase valu where+ valu [0] = valu0 Delayed+ valu [] = valu0 NotDelayed+ valu _ = malformed
+ src/full/Agda/TypeChecking/Serialise/Instances/Compilers.hs view
@@ -0,0 +1,126 @@+{-# OPTIONS_GHC -fno-warn-orphans #-}+{-# OPTIONS_GHC -fwarn-unused-imports #-}++module Agda.TypeChecking.Serialise.Instances.Compilers where++import qualified Agda.Compiler.Epic.Interface as Epic+import qualified Agda.Compiler.JS.Syntax as JS++import Agda.TypeChecking.Serialise.Base+import Agda.TypeChecking.Serialise.Instances.Common ()++import Agda.TypeChecking.Monad++instance EmbPrj HaskellExport where+ icod_ (HsExport a b) = icode2' a b++ value = vcase valu where+ valu [a,b] = valu2 HsExport a b+ valu _ = malformed++instance EmbPrj HaskellRepresentation where+ icod_ (HsType a) = icode1' a+ icod_ (HsDefn a b) = icode2' a b++ value = vcase valu where+ valu [a] = valu1 HsType a+ valu [a, b] = valu2 HsDefn a b+ valu _ = malformed++instance EmbPrj CompiledRepresentation where+ icod_ (CompiledRep a b c d) = icode4' a b c d++ value = vcase valu where+ valu [a, b, c, d] = valu4 CompiledRep a b c d+ valu _ = malformed++instance EmbPrj JS.Exp where+ icod_ (JS.Self) = icode0 0+ icod_ (JS.Local i) = icode1 1 i+ icod_ (JS.Global i) = icode1 2 i+ icod_ (JS.Undefined) = icode0 3+ icod_ (JS.String s) = icode1 4 s+ icod_ (JS.Char c) = icode1 5 c+ icod_ (JS.Integer n) = icode1 6 n+ icod_ (JS.Double d) = icode1 7 d+ icod_ (JS.Lambda n e) = icode2 8 n e+ icod_ (JS.Object o) = icode1 9 o+ icod_ (JS.Apply e es) = icode2 10 e es+ icod_ (JS.Lookup e l) = icode2 11 e l+ icod_ (JS.If e f g) = icode3 12 e f g+ icod_ (JS.BinOp e op f) = icode3 13 e op f+ icod_ (JS.PreOp op e) = icode2 14 op e+ icod_ (JS.Const i) = icode1 15 i++ value = vcase valu where+ valu [0] = valu0 JS.Self+ valu [1, a] = valu1 JS.Local a+ valu [2, a] = valu1 JS.Global a+ valu [3] = valu0 JS.Undefined+ valu [4, a] = valu1 JS.String a+ valu [5, a] = valu1 JS.Char a+ valu [6, a] = valu1 JS.Integer a+ valu [7, a] = valu1 JS.Double a+ valu [8, a, b] = valu2 JS.Lambda a b+ valu [9, a] = valu1 JS.Object a+ valu [10, a, b] = valu2 JS.Apply a b+ valu [11, a, b] = valu2 JS.Lookup a b+ valu [12, a, b, c] = valu3 JS.If a b c+ valu [13, a, b, c] = valu3 JS.BinOp a b c+ valu [14, a, b] = valu2 JS.PreOp a b+ valu [15, a] = valu1 JS.Const a+ valu _ = malformed++instance EmbPrj JS.LocalId where+ icod_ (JS.LocalId l) = icode l+ value n = JS.LocalId `fmap` value n++instance EmbPrj JS.GlobalId where+ icod_ (JS.GlobalId l) = icode l+ value n = JS.GlobalId `fmap` value n++instance EmbPrj JS.MemberId where+ icod_ (JS.MemberId l) = icode l+ value n = JS.MemberId `fmap` value n++-- This is used for the Epic compiler backend.+instance EmbPrj Epic.EInterface where+ icod_ (Epic.EInterface a b c d e f g h) = icode8' a b c d e f g h++ value = vcase valu where+ valu [a, b, c, d, e, f, g, h] = valu8 Epic.EInterface a b c d e f g h+ valu _ = malformed++instance EmbPrj Epic.InjectiveFun where+ icod_ (Epic.InjectiveFun a b) = icode2' a b++ value = vcase valu where+ valu [a,b] = valu2 Epic.InjectiveFun a b+ valu _ = malformed++instance EmbPrj Epic.Relevance where+ icod_ Epic.Irr = icode0 0+ icod_ Epic.Rel = icode0 1++ value = vcase valu where+ valu [0] = valu0 Epic.Irr+ valu [1] = valu0 Epic.Rel+ valu _ = malformed++instance EmbPrj Epic.Forced where+ icod_ Epic.Forced = icode0 0+ icod_ Epic.NotForced = icode0 1++ value = vcase valu where+ valu [0] = valu0 Epic.Forced+ valu [1] = valu0 Epic.NotForced+ valu _ = malformed++instance EmbPrj Epic.Tag where+ icod_ (Epic.Tag a) = icode1 0 a+ icod_ (Epic.PrimTag a) = icode1 1 a++ value = vcase valu where+ valu [0, a] = valu1 Epic.Tag a+ valu [1, a] = valu1 Epic.PrimTag a+ valu _ = malformed
+ src/full/Agda/TypeChecking/Serialise/Instances/Highlighting.hs view
@@ -0,0 +1,93 @@+{-# OPTIONS_GHC -fno-warn-orphans #-}++module Agda.TypeChecking.Serialise.Instances.Highlighting where++import qualified Agda.Interaction.Highlighting.Range as HR+import qualified Agda.Interaction.Highlighting.Precise as HP++import Agda.TypeChecking.Serialise.Base+import Agda.TypeChecking.Serialise.Instances.Common ()++instance EmbPrj HR.Range where+ icod_ (HR.Range a b) = icode2' a b++ value = vcase valu where+ valu [a, b] = valu2 HR.Range a b+ valu _ = malformed++instance EmbPrj HP.NameKind where+ icod_ HP.Bound = icode0'+ icod_ (HP.Constructor a) = icode1 1 a+ icod_ HP.Datatype = icode0 2+ icod_ HP.Field = icode0 3+ icod_ HP.Function = icode0 4+ icod_ HP.Module = icode0 5+ icod_ HP.Postulate = icode0 6+ icod_ HP.Primitive = icode0 7+ icod_ HP.Record = icode0 8+ icod_ HP.Argument = icode0 9++ value = vcase valu where+ valu [] = valu0 HP.Bound+ valu [1 , a] = valu1 HP.Constructor a+ valu [2] = valu0 HP.Datatype+ valu [3] = valu0 HP.Field+ valu [4] = valu0 HP.Function+ valu [5] = valu0 HP.Module+ valu [6] = valu0 HP.Postulate+ valu [7] = valu0 HP.Primitive+ valu [8] = valu0 HP.Record+ valu [9] = valu0 HP.Argument+ valu _ = malformed++instance EmbPrj HP.Aspect where+ icod_ HP.Comment = icode0 0+ icod_ HP.Keyword = icode0 1+ icod_ HP.String = icode0 2+ icod_ HP.Number = icode0 3+ icod_ HP.Symbol = icode0'+ icod_ HP.PrimitiveType = icode0 5+ icod_ (HP.Name mk b) = icode2 6 mk b++ value = vcase valu where+ valu [0] = valu0 HP.Comment+ valu [1] = valu0 HP.Keyword+ valu [2] = valu0 HP.String+ valu [3] = valu0 HP.Number+ valu [] = valu0 HP.Symbol+ valu [5] = valu0 HP.PrimitiveType+ valu [6, mk, b] = valu2 HP.Name mk b+ valu _ = malformed++instance EmbPrj HP.OtherAspect where+ icod_ HP.Error = icode0 0+ icod_ HP.DottedPattern = icode0'+ icod_ HP.UnsolvedMeta = icode0 2+ icod_ HP.TerminationProblem = icode0 3+ icod_ HP.IncompletePattern = icode0 4+ icod_ HP.TypeChecks = icode0 5+ icod_ HP.UnsolvedConstraint = icode0 6++ value = vcase valu where+ valu [0] = valu0 HP.Error+ valu [] = valu0 HP.DottedPattern+ valu [2] = valu0 HP.UnsolvedMeta+ valu [3] = valu0 HP.TerminationProblem+ valu [4] = valu0 HP.IncompletePattern+ valu [5] = valu0 HP.TypeChecks+ valu [6] = valu0 HP.UnsolvedConstraint+ valu _ = malformed++instance EmbPrj HP.Aspects where+ icod_ (HP.Aspects a b c d) = icode4' a b c d++ value = vcase valu where+ valu [a, b, c, d] = valu4 HP.Aspects a b c d+ valu _ = malformed++instance EmbPrj HP.CompressedFile where+ icod_ (HP.CompressedFile f) = icode1' f++ value = vcase valu where+ valu [f] = valu1 HP.CompressedFile f+ valu _ = malformed
+ src/full/Agda/TypeChecking/Serialise/Instances/Internal.hs view
@@ -0,0 +1,418 @@+{-# LANGUAGE CPP #-}++{-# OPTIONS_GHC -fno-warn-orphans #-}++module Agda.TypeChecking.Serialise.Instances.Internal where++import Control.Applicative+import Control.Monad.State.Strict++import Agda.Syntax.Internal as I+import Agda.Syntax.Position as P++import Agda.TypeChecking.Serialise.Base+import Agda.TypeChecking.Serialise.Instances.Common ()+import Agda.TypeChecking.Serialise.Instances.Compilers ()++import Agda.TypeChecking.Monad+import Agda.TypeChecking.CompiledClause+import Agda.TypeChecking.Positivity.Occurrence++import Agda.Utils.Permutation++#include "undefined.h"+import Agda.Utils.Impossible++instance EmbPrj Signature where+ icod_ (Sig a b c) = icode3' a b c++ value = vcase valu where+ valu [a, b, c] = valu3 Sig a b c+ valu _ = malformed++instance EmbPrj Section where+ icod_ (Section a) = icode1' a++ value = vcase valu where+ valu [a] = valu1 Section a+ valu _ = malformed++instance EmbPrj a => EmbPrj (Tele a) where+ icod_ EmptyTel = icode0'+ icod_ (ExtendTel a b) = icode2' a b++ value = vcase valu where+ valu [] = valu0 EmptyTel+ valu [a, b] = valu2 ExtendTel a b+ valu _ = malformed++instance EmbPrj Permutation where+ icod_ (Perm a b) = icode2' a b++ value = vcase valu where+ valu [a, b] = valu2 Perm a b+ valu _ = malformed++instance EmbPrj a => EmbPrj (Drop a) where+ icod_ (Drop a b) = icode2' a b++ value = vcase valu where+ valu [a, b] = valu2 Drop a b+ valu _ = malformed++instance EmbPrj a => EmbPrj (Elim' a) where+ icod_ (Apply a) = icode1' a+ icod_ (Proj a) = icode1 0 a++ value = vcase valu where+ valu [a] = valu1 Apply a+ valu [0, a] = valu1 Proj a+ valu _ = malformed++instance EmbPrj I.ConHead where+ icod_ (ConHead a b c) = icode3' a b c++ value = vcase valu where+ valu [a, b, c] = valu3 ConHead a b c+ valu _ = malformed++instance (EmbPrj a) => EmbPrj (I.Type' a) where+ icod_ (El a b) = icode2' a b++ value = vcase valu where+ valu [a, b] = valu2 El a b+ valu _ = malformed++instance (EmbPrj a) => EmbPrj (I.Abs a) where+ icod_ (NoAbs a b) = icode2 0 a b+ icod_ (Abs a b) = icode2' a b++ value = vcase valu where+ valu [a, b] = valu2 Abs a b+ valu [0, a, b] = valu2 NoAbs a b+ valu _ = malformed++instance EmbPrj I.Term where+ icod_ (Var a []) = icode1' a+ icod_ (Var a b) = icode2 0 a b+ icod_ (Lam a b) = icode2 1 a b+ icod_ (Lit a ) = icode1 2 a+ icod_ (Def a b) = icode2 3 a b+ icod_ (Con a b) = icode2 4 a b+ icod_ (Pi a b) = icode2 5 a b+ icod_ (Sort a ) = icode1 7 a+ icod_ (MetaV a b) = __IMPOSSIBLE__+ icod_ ExtLam{} = __IMPOSSIBLE__+ icod_ (DontCare a ) = icode1 8 a+ icod_ (Level a ) = icode1 9 a+ icod_ (Shared p) = icodeMemo termD termC p $ icode (derefPtr p)++ value r = vcase valu' r where+ valu' xs = shared <$> valu xs+ valu [a] = valu1 var a+ valu [0, a, b] = valu2 Var a b+ valu [1, a, b] = valu2 Lam a b+ valu [2, a] = valu1 Lit a+ valu [3, a, b] = valu2 Def a b+ valu [4, a, b] = valu2 Con a b+ valu [5, a, b] = valu2 Pi a b+ valu [7, a] = valu1 Sort a+ valu [8, a] = valu1 DontCare a+ valu [9, a] = valu1 Level a+ valu _ = malformed++instance EmbPrj Level where+ icod_ (Max a) = icode1' a++ value = vcase valu where+ valu [a] = valu1 Max a+ valu _ = malformed++instance EmbPrj PlusLevel where+ icod_ (ClosedLevel a) = icode1' a+ icod_ (Plus a b) = icode2' a b++ value = vcase valu where+ valu [a] = valu1 ClosedLevel a+ valu [a, b] = valu2 Plus a b+ valu _ = malformed++instance EmbPrj LevelAtom where+ icod_ (NeutralLevel _ a) = icode1' a+ icod_ (UnreducedLevel a) = icode1 1 a+ icod_ MetaLevel{} = __IMPOSSIBLE__+ icod_ BlockedLevel{} = __IMPOSSIBLE__++ value = vcase valu where+ valu [a] = valu1 UnreducedLevel a -- we forget that we are a NeutralLevel,+ -- since we do not want do (de)serialize+ -- the reason for neutrality+ valu [1, a] = valu1 UnreducedLevel a+ valu _ = malformed++instance EmbPrj I.Sort where+ icod_ (Type a ) = icode1' a+ icod_ Prop = icode1 1 ()+ icod_ SizeUniv = icode1 3 ()+ icod_ Inf = icode1 4 ()+ icod_ (DLub a b) = __IMPOSSIBLE__++ value = vcase valu where+ valu [a] = valu1 Type a+ valu [1, _] = valu0 Prop+ valu [3, _] = valu0 SizeUniv+ valu [4, _] = valu0 Inf+ valu _ = malformed++instance EmbPrj DisplayForm where+ icod_ (Display a b c) = icode3' a b c++ value = vcase valu where+ valu [a, b, c] = valu3 Display a b c+ valu _ = malformed++instance EmbPrj a => EmbPrj (Open a) where+ icod_ (OpenThing a b) = icode2' a b++ value = vcase valu where+ valu [a, b] = valu2 OpenThing a b+ valu _ = malformed++instance EmbPrj CtxId where+ icod_ (CtxId a) = icode a+ value n = CtxId `fmap` value n++instance EmbPrj DisplayTerm where+ icod_ (DTerm a ) = icode1' a+ icod_ (DDot a ) = icode1 1 a+ icod_ (DCon a b) = icode2 2 a b+ icod_ (DDef a b) = icode2 3 a b+ icod_ (DWithApp a b c) = icode3 4 a b c++ value = vcase valu where+ valu [a] = valu1 DTerm a+ valu [1, a] = valu1 DDot a+ valu [2, a, b] = valu2 DCon a b+ valu [3, a, b] = valu2 DDef a b+ valu [4, a, b, c] = valu3 DWithApp a b c+ valu _ = malformed++instance EmbPrj MutualId where+ icod_ (MutId a) = icode a+ value n = MutId `fmap` value n++instance EmbPrj Definition where+ icod_ (Defn rel a b c d e f g h i) = icode10' rel a (P.killRange b) c d e f g h i++ value = vcase valu where+ valu [rel, a, b, c, d, e, f, g, h, i] = valu10 Defn rel a b c d e f g h i+ valu _ = malformed++instance EmbPrj NLPat where+ icod_ (PVar a) = icode1 0 a+ icod_ (PWild) = icode0 1+ icod_ (PDef a b) = icode2 2 a b+ icod_ (PLam a b) = icode2 3 a b+ icod_ (PPi a b) = icode2 4 a b+ icod_ (PBoundVar a b) = icode2 5 a b+ icod_ (PTerm a) = icode1 6 a++ value = vcase valu where+ valu [0, a] = valu1 PVar a+ valu [1] = valu0 PWild+ valu [2, a, b] = valu2 PDef a b+ valu [3, a, b] = valu2 PLam a b+ valu [4, a, b] = valu2 PPi a b+ valu [5, a, b] = valu2 PBoundVar a b+ valu [6, a] = valu1 PTerm a+ valu _ = malformed++instance EmbPrj RewriteRule where+ icod_ (RewriteRule a b c d e) = icode5' a b c d e++ value = vcase valu where+ valu [a, b, c, d, e] = valu5 RewriteRule a b c d e+ valu _ = malformed++instance EmbPrj Projection where+ icod_ (Projection a b c d e) = icode5' a b c d e++ value = vcase valu where+ valu [a, b, c, d, e] = valu5 Projection a b c d e+ valu _ = malformed++instance EmbPrj ExtLamInfo where+ icod_ (ExtLamInfo a b) = icode2' a b++ value = vcase valu where+ valu [a, b] = valu2 ExtLamInfo a b+ valu _ = malformed++instance EmbPrj Polarity where+ icod_ Covariant = return 0+ icod_ Contravariant = return 1+ icod_ Invariant = return 2+ icod_ Nonvariant = return 3++ value 0 = return Covariant+ value 1 = return Contravariant+ value 2 = return Invariant+ value 3 = return Nonvariant+ value _ = malformed++-- instance EmbPrj Polarity where+-- icod_ Covariant = icode0'+-- icod_ Contravariant = icode0 1+-- icod_ Invariant = icode0 2+-- icod_ Nonvariant = icode0 3++-- value = vcase valu where+-- valu [] = valu0 Covariant+-- valu [1] = valu0 Contravariant+-- valu [2] = valu0 Invariant+-- valu [3] = valu0 Nonvariant+-- valu _ = malformed++instance EmbPrj Occurrence where+ icod_ StrictPos = return 0+ icod_ Mixed = return 1+ icod_ Unused = return 2+ icod_ GuardPos = return 3+ icod_ JustPos = return 4+ icod_ JustNeg = return 5++ value 0 = return StrictPos+ value 1 = return Mixed+ value 2 = return Unused+ value 3 = return GuardPos+ value 4 = return JustPos+ value 5 = return JustNeg+ value _ = malformed++-- instance EmbPrj Occurrence where+-- icod_ StrictPos = icode0'+-- icod_ Mixed = icode0 1+-- icod_ Unused = icode0 2+-- icod_ GuardPos = icode0 3+-- icod_ JustPos = icode0 4+-- icod_ JustNeg = icode0 5++-- value = vcase valu where+-- valu [] = valu0 StrictPos+-- valu [1] = valu0 Mixed+-- valu [2] = valu0 Unused+-- valu [3] = valu0 GuardPos+-- valu [4] = valu0 JustPos+-- valu [5] = valu0 JustNeg+-- valu _ = malformed++instance EmbPrj Defn where+ icod_ Axiom = icode0 0+ icod_ (Function a b c d e f g h i j k l m) = icode13 1 a b c d e f g h i j k l m+ icod_ (Datatype a b c d e f g h i j) = icode10 2 a b c d e f g h i j+ icod_ (Record a b c d e f g h i j k l) = icode12 3 a b c d e f g h i j k l+ icod_ (Constructor a b c d e) = icode5 4 a b c d e+ icod_ (Primitive a b c d) = icode4 5 a b c d++ value = vcase valu where+ valu [0] = valu0 Axiom+ valu [1, a, b, c, d, e, f, g, h, i, j, k, l, m] = valu13 Function a b c d e f g h i j k l m+ valu [2, a, b, c, d, e, f, g, h, i, j] = valu10 Datatype a b c d e f g h i j+ valu [3, a, b, c, d, e, f, g, h, i, j, k, l] = valu12 Record a b c d e f g h i j k l+ valu [4, a, b, c, d, e] = valu5 Constructor a b c d e+ valu [5, a, b, c, d] = valu4 Primitive a b c d+ valu _ = malformed++instance EmbPrj a => EmbPrj (WithArity a) where+ icod_ (WithArity a b) = icode2' a b++ value = vcase valu where+ valu [a, b] = valu2 WithArity a b+ valu _ = malformed++instance EmbPrj a => EmbPrj (Case a) where+ icod_ (Branches a b c d) = icode4' a b c d++ value = vcase valu where+ valu [a, b, c, d] = valu4 Branches a b c d+ valu _ = malformed++instance EmbPrj CompiledClauses where+ icod_ Fail = icode0'+ icod_ (Done a b) = icode2' a (P.killRange b)+ icod_ (Case a b) = icode2 2 a b++ value = vcase valu where+ valu [] = valu0 Fail+ valu [a, b] = valu2 Done a b+ valu [2, a, b] = valu2 Case a b+ valu _ = malformed++instance EmbPrj a => EmbPrj (FunctionInverse' a) where+ icod_ NotInjective = icode0'+ icod_ (Inverse a) = icode1' a++ value = vcase valu where+ valu [] = valu0 NotInjective+ valu [a] = valu1 Inverse a+ valu _ = malformed++instance EmbPrj TermHead where+ icod_ SortHead = icode0'+ icod_ PiHead = icode0 1+ icod_ (ConsHead a) = icode1 2 a++ value = vcase valu where+ valu [] = valu0 SortHead+ valu [1] = valu0 PiHead+ valu [2, a] = valu1 ConsHead a+ valu _ = malformed++instance EmbPrj I.Clause where+ icod_ (Clause a b c d e f) = icode6' a b c d e f++ value = vcase valu where+ valu [a, b, c, d, e, f] = valu6 Clause a b c d e f+ valu _ = malformed++instance EmbPrj a => EmbPrj (I.ClauseBodyF a) where+ icod_ (Body a) = icode1 0 a+ icod_ (Bind a) = icode1' a+ icod_ NoBody = icode0'++ value = vcase valu where+ valu [0, a] = valu1 Body a+ valu [a] = valu1 Bind a+ valu [] = valu0 NoBody+ valu _ = malformed++instance EmbPrj I.ConPatternInfo where+ icod_ (ConPatternInfo a b) = icode2' a b++ value = vcase valu where+ valu [a, b] = valu2 ConPatternInfo a b+ valu _ = malformed++instance EmbPrj a => EmbPrj (I.Pattern' a) where+ icod_ (VarP a ) = icode1' a+ icod_ (ConP a b c) = icode3' a b c+ icod_ (LitP a ) = icode1 2 a+ icod_ (DotP a ) = icode1 3 a+ icod_ (ProjP a ) = icode1 4 a++ value = vcase valu where+ valu [a] = valu1 VarP a+ valu [a, b, c] = valu3 ConP a b c+ valu [2, a] = valu1 LitP a+ valu [3, a] = valu1 DotP a+ valu [4, a] = valu1 ProjP a+ valu _ = malformed++instance EmbPrj a => EmbPrj (Builtin a) where+ icod_ (Prim a) = icode1' a+ icod_ (Builtin a) = icode1 1 a++ value = vcase valu where+ valu [a] = valu1 Prim a+ valu [1, a] = valu1 Builtin a+ valu _ = malformed
src/full/Agda/TypeChecking/Substitute.hs view
@@ -165,8 +165,14 @@ Defn info x (piApply t args) (apply pol args) (apply occ args) df m c inst (apply d args) instance Apply RewriteRule where- apply (RewriteRule q gamma lhs rhs t) args =- RewriteRule q (apply gamma args) lhs rhs t+ apply r args = RewriteRule+ { rewName = rewName r+ , rewContext = apply (rewContext r) args+ , rewLHS = applySubst sub (rewLHS r)+ , rewRHS = applySubst sub (rewRHS r)+ , rewType = applySubst sub (rewType r)+ }+ where sub = parallelS (map unArg args) #if __GLASGOW_HASKELL__ >= 710 instance {-# OVERLAPPING #-} Apply [Occ.Occurrence] where@@ -611,6 +617,12 @@ compactS :: Empty -> [Maybe Term] -> Substitution compactS err us = prependS err us idS +-- | Γ ⊢ (strengthenS ⊥ |Δ|) : Γ,Δ+strengthenS :: Empty -> Int -> Substitution+strengthenS err n+ | n < 0 = __IMPOSSIBLE__+ | otherwise = iterate (Strengthen err) idS !! n+ lookupS :: Substitution -> Nat -> Term lookupS rho i = case rho of IdS -> var i@@ -869,9 +881,17 @@ bindsWithHidingToTel :: [WithHiding Name] -> Dom Type -> ListTel bindsWithHidingToTel = bindsWithHidingToTel' nameToArgName +-- | Takes off all exposed function domains from the given type.+-- This means that it does not reduce to expose @Pi@-types. telView' :: Type -> TelView-telView' t = case ignoreSharing $ unEl t of- Pi a b -> absV a (absName b) $ telView' (absBody b)+telView' = telView'UpTo (-1)++-- | @telView'UpTo n t@ takes off the first @n@ exposed function types of @t@.+-- Takes off all (exposed ones) if @n < 0@.+telView'UpTo :: Int -> Type -> TelView+telView'UpTo 0 t = TelV EmptyTel t+telView'UpTo n t = case ignoreSharing $ unEl t of+ Pi a b -> absV a (absName b) $ telView'UpTo (n - 1) (absBody b) _ -> TelV EmptyTel t where absV a x (TelV tel t) = TelV (ExtendTel a (Abs x tel)) t@@ -1059,6 +1079,7 @@ deriving instance (Subst a, Ord a) => Ord (Tele a) deriving instance Eq Constraint+deriving instance Eq Section instance Ord PlusLevel where compare ClosedLevel{} Plus{} = LT
src/full/Agda/TypeChecking/With.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE CPP #-} {-# LANGUAGE PatternGuards #-}+{-# LANGUAGE TupleSections #-} module Agda.TypeChecking.With where @@ -23,6 +24,7 @@ import Agda.TypeChecking.Reduce import Agda.TypeChecking.Datatypes import Agda.TypeChecking.EtaContract+import Agda.TypeChecking.Free import Agda.TypeChecking.Patterns.Abstract import Agda.TypeChecking.Pretty import Agda.TypeChecking.Records@@ -37,39 +39,197 @@ import Agda.Utils.List import Agda.Utils.Monad import Agda.Utils.Permutation+import Agda.Utils.Pretty (prettyShow) import Agda.Utils.Size #include "undefined.h" import Agda.Utils.Impossible -withFunctionType :: Telescope -> [Term] -> [Type] -> Telescope -> Type -> TCM Type-withFunctionType delta1 vs as delta2 b = {-dontEtaContractImplicit $-} do- (vas, b) <- addCtxTel delta1 $ do- reportSLn "tc.with.abstract" 20 $ "preparing for with-abstraction"++-- | Split pattern variables according to with-expressions.++-- Input:+--+-- [@Δ@] context of types and with-arguments.+--+-- [@Δ ⊢ t@] type of rhs.+--+-- [@Δ ⊢ as@] types of with arguments.+--+-- [@Δ ⊢ vs@] with arguments.+--+--+-- Output:+--+-- [@Δ₁@] part of context not needed for with arguments and their types.+--+-- [@Δ₂@] part of context needed for with arguments and their types.+--+-- [@π@] permutation from Δ to Δ₁Δ₂ as returned by 'splitTelescope'.+--+-- [@Δ₁Δ₂ ⊢ t'@] type of rhs under @π@+--+-- [@Δ₁ ⊢ as'@] types with with-arguments depending only on @Δ₁@.+--+-- [@Δ₁ ⊢ vs'@] with-arguments under @π@.++splitTelForWith+ -- Input:+ :: Telescope -- ^ __@Δ@__ context of types and with-arguments.+ -> Type -- ^ __@Δ ⊢ t@__ type of rhs.+ -> [Type] -- ^ __@Δ ⊢ as@__ types of with arguments.+ -> [Term] -- ^ __@Δ ⊢ vs@__ with arguments.+ -- Output:+ -> ( Telescope -- @Δ₁@ part of context not needed for with arguments and their types.+ , Telescope -- @Δ₂@ part of context needed for with arguments and their types.+ , Permutation -- @π@ permutation from Δ to Δ₁Δ₂ as returned by 'splitTelescope'.+ , Type -- @Δ₁Δ₂ ⊢ t'@ type of rhs under @π@+ , [Type] -- @Δ₁ ⊢ as'@ types with with-arguments depending only on @Δ₁@.+ , [Term] -- @Δ₁ ⊢ vs'@ with-arguments under @π@.+ ) -- ^ (__@Δ₁@__,__@Δ₂@__,__@π@__,__@t'@__,__@as'@__,__@vs'@__) where+--+-- [@Δ₁@] part of context not needed for with arguments and their types.+--+-- [@Δ₂@] part of context needed for with arguments and their types.+--+-- [@π@] permutation from Δ to Δ₁Δ₂ as returned by 'splitTelescope'.+--+-- [@Δ₁Δ₂ ⊢ t'@] type of rhs under @π@+--+-- [@Δ₁ ⊢ as'@] types with with-arguments depending only on @Δ₁@.+--+-- [@Δ₁ ⊢ vs'@] with-arguments under @π@.++splitTelForWith delta t as vs = let+ -- Split the telescope into the part needed to type the with arguments+ -- and all the other stuff+ fv = allFreeVars as+ SplitTel delta1 delta2 perm = splitTelescope fv delta++ -- Δ₁Δ₂ ⊢ π : Δ+ pi = renaming (reverseP perm)+ -- Δ₁ ⊢ ρ : Δ₁Δ₂ (We know that as does not depend on Δ₂.)+ rho = strengthenS __IMPOSSIBLE__ $ size delta2+ -- Δ₁ ⊢ ρ ∘ π : Δ+ rhopi = composeS rho pi++ -- We need Δ₁Δ₂ ⊢ t'+ t' = applySubst pi t+ -- and Δ₁ ⊢ as'+ as' = applySubst rhopi as+ -- and Δ₁ ⊢ vs' : as'+ vs' = applySubst pi vs++ in (delta1, delta2, perm, t', as', vs')+++-- | Abstract with-expressions @vs@ to generate type for with-helper function.++withFunctionType+ :: Telescope -- ^ @Δ₁@ context for types of with types.+ -> [Term] -- ^ @Δ₁,Δ₂ ⊢ vs : raise Δ₂ as@ with-expressions.+ -> [Type] -- ^ @Δ₁ ⊢ as@ types of with-expressions.+ -> Telescope -- ^ @Δ₁ ⊢ Δ₂@ context extension to type with-expressions.+ -> Type -- ^ @Δ₁,Δ₂ ⊢ b@ type of rhs.+ -> TCM Type -- ^ @Δ₁ → wtel → Δ₂′ → b′@ such that+ -- @[vs/wtel]wtel = as@ and+ -- @[vs/wtel]Δ₂′ = Δ₂@ and+ -- @[vs/wtel]b′ = b@.++withFunctionType delta1 vs as delta2 b = addCtxTel delta1 $ do++ -- Normalize and η-contract the types @as@ of the with-expressions.++ reportSLn "tc.with.abstract" 20 $ "preparing for with-abstraction"+ as <- etaContract =<< normalise as+ reportSDoc "tc.with.abstract" 20 $ text " as = " <+> prettyTCM as++ -- Normalize and η-contract the type @b@ of the rhs and the types @delta2@+ -- of the pattern variables not mentioned in @as@.++ d2b <- return $ telePi_ delta2 b+ reportSDoc "tc.with.abstract" 30 $ text "normalizing d2b = " <+> prettyTCM d2b+ d2b <- normalise d2b+ reportSDoc "tc.with.abstract" 30 $ text "eta-contracting d2b = " <+> prettyTCM d2b+ d2b <- etaContract d2b+ reportSDoc "tc.with.abstract" 20 $ text " d2b = " <+> prettyTCM d2b+ let n2 = size delta2+ TelV delta2 b <- telViewUpTo n2 d2b++ addContext delta2 $ do++ -- Normalize and η-contract the with-expressions @vs@.+ vs <- etaContract =<< normalise vs reportSDoc "tc.with.abstract" 20 $ text " vs = " <+> prettyTCM vs- as <- etaContract =<< normalise as- reportSDoc "tc.with.abstract" 20 $ text " as = " <+> prettyTCM as- b <- return $ telePi_ delta2 b- reportSDoc "tc.with.abstract" 30 $ text "normalizing b = " <+> prettyTCM b- b <- normalise b- reportSDoc "tc.with.abstract" 30 $ text "eta-contracting b = " <+> prettyTCM b- b <- etaContract b- reportSDoc "tc.with.abstract" 20 $ text " b = " <+> prettyTCM b reportSDoc "tc.with.abstract" 40 $ sep [ text "abstracting" , nest 2 $ vcat $- [ text "vs = " <+> prettyTCM vs- , text "as = " <+> prettyTCM as- , text "b = " <+> prettyTCM b ]+ [ text "vs = " <+> prettyTCM vs+ , text "as = " <+> escapeContext n2 (prettyTCM as)+ , text "delta2 = " <+> escapeContext n2 (prettyTCM delta2)+ , text "b = " <+> prettyTCM b ] ] reportSLn "tc.with.abstract" 50 $ " raw vs = " ++ show vs ++ "\n raw b = " ++ show b- return (zip vs as, b)- return $ telePi_ delta1 $ foldr (uncurry piAbstractTerm) b vas + -- Abstract in @b@ and in @as@, generating @wtel@ and @b'@.+ -----------------------------------------------------------++ -- Δ₁, Δ₂ ⊢ wtel0+ -- Δ₁, Δ₂, wtel0 ⊢ b0+ let TelV wtel0 b0 = telView'UpTo (size as) $+ foldr (uncurry piAbstractTerm) b $ zip vs $ raise n2 as++ -- We know the types in wtel0 (abstracted versions of @as@) do not depend on Δ₂.+ -- Δ₁ ⊢ wtel+ let wtel = applySubst (strengthenS __IMPOSSIBLE__ n2) wtel0++ -- Δ₁, Δ₂, wtel ⊢ ρ : Δ₁, wtel, Δ₂+ let m = n2 + size wtel+ let rho = (map var $ [n2..m-1] ++ [0..n2-1]) ++# raiseS m++ -- Using ρ, swap the variables of wtel and Δ₂ to get+ -- Δ₁, wtel, Δ₂ ⊢ b'+ let b' = applySubst rho b0++ -- Abstract in @Δ₂@ to get @Δ₁, wtel ⊢ Δ₂′@.+ ------------------------------------------++ -- Δ₁, Δ₂ ⊢ Δ₂flat+ let delta2flat = flattenTel delta2++ let abstrvs t = foldl (flip abstractTerm) t $ zipWith raise [0..] vs+ -- Δ₁, Δ₂, wtel ⊢ Δ₂abs+ let delta2abs = abstrvs delta2flat++ -- Δ₁, wtel, Δ₂ ⊢ Δ₂flat'+ let delta2flat' = applySubst rho delta2abs++ -- Δ₁, wtel ⊢ Δ₂′+ let delta2' = unflattenTel (teleNames delta2) delta2flat'++ -- Assemble final type of with-function.+ ----------------------------------------++ let ty = telePi_ delta1 $ telePi_ wtel $ telePi_ delta2' b'+ reportSDoc "tc.with.abstract" 20 $ sep $+ [ text "finished with-abstraction"+ , text " wtel0 = " <+> prettyTCM wtel0+ , text " wtel = " <+> do escapeContext n2 $ prettyTCM wtel+ , text " b0 = " <+> addContext wtel (prettyTCM b0)+ , text " b' = " <+> do escapeContext n2 $ addContext wtel $ addContext delta2 $ prettyTCM b'+ , text " delta2flat = " <+> prettyTCM delta2flat+ , text " delta2flat' = " <+> do addContext wtel $ prettyTCM delta2flat'+ , text " delta2' = " <+> do escapeContext n2 $ addContext wtel $ prettyTCM delta2'+ , text " ty = " <+> do escapeContext n2 $ escapeContext (size delta1) $ prettyTCM delta2'+ ]+ return ty++ -- | Compute the clauses for the with-function given the original patterns. buildWithFunction- :: QName -- ^ Name of the with-function.+ :: QName -- ^ Name of the parent function.+ -> QName -- ^ Name of the with-function. -> Type -- ^ Types of the parent function. -> [I.NamedArg Pattern] -- ^ Parent patterns. -> Permutation -- ^ Final permutation.@@ -77,13 +237,13 @@ -> Nat -- ^ Number of with expressions. -> [A.SpineClause] -- ^ With-clauses. -> TCM [A.SpineClause] -- ^ With-clauses flattened wrt. parent patterns.-buildWithFunction aux t qs perm n1 n cs = mapM buildWithClause cs+buildWithFunction f aux t qs perm n1 n cs = mapM buildWithClause cs where buildWithClause (A.Clause (A.SpineLHS i _ ps wps) rhs wh) = do let (wps0, wps1) = genericSplitAt n wps ps0 = map defaultNamedArg wps0 rhs <- buildRHS rhs- (ps1, ps2) <- genericSplitAt n1 <$> stripWithClausePatterns aux t qs perm ps+ (ps1, ps2) <- genericSplitAt n1 <$> stripWithClausePatterns f aux t qs perm ps let result = A.Clause (A.SpineLHS i aux (ps1 ++ ps0 ++ ps2) wps1) rhs wh reportSDoc "tc.with" 20 $ vcat [ text "buildWithClause returns" <+> prettyA result@@ -96,23 +256,24 @@ mapM (A.spineToLhs <.> buildWithClause . A.lhsToSpine) cs buildRHS (A.RewriteRHS qes rhs wh) = flip (A.RewriteRHS qes) wh <$> buildRHS rhs -{-| @stripWithClausePatterns f t qs π ps = ps'@+{-| @stripWithClausePatterns parent f t qs π ps = ps'@ - @Δ@ - context bound by lhs of original function (not an argument)+[@Δ@] context bound by lhs of original function (not an argument). - @f@ - name of with-function+[@f@] name of @with@-function. - @t@ - type of the original function+[@t@] type of the original function. - @qs@ - internal patterns for original function+[@qs@] internal patterns for original function. - @π@ - permutation taking @vars(qs)@ to @support(Δ)@+[@π@] permutation taking @vars(qs)@ to @support(Δ)@. - @ps@ - patterns in with clause (eliminating type @t@)+[@ps@] patterns in with clause (eliminating type @t@). - @ps'@ - patterns for with function (presumably of type @Δ@)+[@ps'@] patterns for with function (presumably of type @Δ@). Example:+ @ record Stream (A : Set) : Set where coinductive@@ -129,9 +290,11 @@ test : (s : Nat × Stream Nat) (t : Stream Nat) → SEq (delay s) t → SEq t (delay s) ~force (test (a , as) t p) with force t ~force (test (suc n , as) t p) | b , bs = {!!}+@ With function: +@ f : (t : Stream Nat) (w : Nat × Stream Nat) (a : Nat) (as : Stream Nat) (p : SEq (delay (a , as)) t) → (fst w ≡ a) × SEq (snd w) as @@ -140,27 +303,33 @@ qs = (a , as) t p ~force ps = (suc n , as) t p ~force ps' = (suc n) as t p+@ Resulting with-function clause is: +@ f t (b , bs) (suc n) as t p+@ -Note: stripWithClausePatterns factors ps through qs, thus+Note: stripWithClausePatterns factors @ps@ through @qs@, thus +@ ps = qs[ps']--where [..] is to be understood as substitution.-The projection patterns have vanished from ps' (as they are already in qs). @++where @[..]@ is to be understood as substitution.+The projection patterns have vanished from @ps'@ (as they are already in @qs@). -}+ stripWithClausePatterns- :: QName -- ^ @f@- -> Type -- ^ @t@- -> [I.NamedArg Pattern] -- ^ @qs@- -> Permutation -- ^ @π@- -> [A.NamedArg A.Pattern] -- ^ @ps@- -> TCM [A.NamedArg A.Pattern] -- ^ @ps'@-stripWithClausePatterns f t qs perm ps = do+ :: QName -- ^ Name of the parent function.+ -> QName -- ^ Name of with-function.+ -> Type -- ^ __@t@__ type of the original function.+ -> [I.NamedArg Pattern] -- ^ __@qs@__ internal patterns for original function.+ -> Permutation -- ^ __@π@__ permutation taking @vars(qs)@ to @support(Δ)@.+ -> [A.NamedArg A.Pattern] -- ^ __@ps@__ patterns in with clause (eliminating type @t@).+ -> TCM [A.NamedArg A.Pattern] -- ^ __@ps'@__ patterns for with function (presumably of type @Δ@).+stripWithClausePatterns parent f t qs perm ps = do -- Andreas, 2014-03-05 expand away pattern synoyms (issue 1074) ps <- expandPatternSynonyms ps psi <- insertImplicitPatternsT ExpandLast ps t@@ -170,7 +339,8 @@ , nest 2 $ text "psi = " <+> fsep (punctuate comma $ map prettyA psi) , nest 2 $ text "qs = " <+> fsep (punctuate comma $ map (prettyTCM . namedArg) qs) ]- ps' <- strip (Def f []) t psi $ numberPatVars perm qs+ -- Andreas, 2015-11-09 Issue 1710: self starts with parent-function, not with-function!+ ps' <- strip (Def parent []) t psi $ numberPatVars perm qs let psp = permute perm ps' reportSDoc "tc.with.strip" 10 $ vcat [ nest 2 $ text "ps' = " <+> fsep (punctuate comma $ map prettyA ps')@@ -233,6 +403,7 @@ , nest 2 $ text "ps0 =" <+> fsep (punctuate comma $ map prettyA ps0) , nest 2 $ text "exp =" <+> prettyA p , nest 2 $ text "qs0 =" <+> fsep (punctuate comma $ map (prettyTCM . namedArg) qs0)+ , nest 2 $ text "self=" <+> prettyTCM self , nest 2 $ text "t =" <+> prettyTCM t ] let failDotPat = do@@ -325,6 +496,7 @@ -- Compute the new type let v = Con c [ Arg info (var i) | (i, Arg info _) <- zip (downFrom $ size qs') qs' ] t' = tel' `abstract` absApp (raise (size tel') b) v+ self' = tel' `abstract` apply1 (raise (size tel') self) v -- Issue 1546 reportSDoc "tc.with.strip" 15 $ sep [ text "inserting implicit"@@ -338,7 +510,7 @@ WrongNumberOfConstructorArguments (conName c) (size tel') (size psi') -- Keep going- strip (self `apply1` v) t' (psi' ++ ps) (qs' ++ qs)+ strip self' t' (psi' ++ ps) (qs' ++ qs) p@(A.PatternSynP pi' c' ps') -> do reportSDoc "impossible" 10 $@@ -371,18 +543,26 @@ -- | Construct the display form for a with function. It will display -- applications of the with function as applications to the original function.--- For instance, @aux a b c@ as @f (suc a) (suc b) | c@+-- For instance, ----- @n@ is the number of with arguments.+-- @+-- aux a b c+-- @+--+-- as+--+-- @+-- f (suc a) (suc b) | c+-- @ withDisplayForm- :: QName -- ^ The name of parent function.- -> QName -- ^ The name of the with-function.- -> Telescope -- ^ The arguments of the with function before the with exprs.- -> Telescope -- ^ The arguments of the with function after the with exprs.- -> Nat -- ^ The number of with expressions.- -> [I.NamedArg Pattern] -- ^ The parent patterns.- -> Permutation -- ^ Permutation to split into needed and unneeded vars.- -> Permutation -- ^ Permutation reordering the variables in parent patterns.+ :: QName -- ^ The name of parent function.+ -> QName -- ^ The name of the @with@-function.+ -> Telescope -- ^ __@Δ₁@__ The arguments of the @with@ function before the @with@ expressions.+ -> Telescope -- ^ __@Δ₂@__ The arguments of the @with@ function after the @with@ expressions.+ -> Nat -- ^ __@n@__ The number of @with@ expressions.+ -> [I.NamedArg Pattern] -- ^ __@qs@__ The parent patterns.+ -> Permutation -- ^ __@perm@__ Permutation to split into needed and unneeded vars.+ -> Permutation -- ^ __@lhsPerm@__ Permutation reordering the variables in parent patterns. -> TCM DisplayForm withDisplayForm f aux delta1 delta2 n qs perm@(Perm m _) lhsPerm = do @@ -400,7 +580,8 @@ -- Build a substitution to replace the parent pattern vars -- by the pattern vars of the with-function. (ys0, ys1) = splitAt (size delta1) $ permute perm $ downFrom m- ys = reverse $ map Just ys0 ++ replicate n Nothing ++ map Just ys1+ ys = reverse (map Just ys0 ++ replicate n Nothing ++ map Just ys1)+ ++ map (Just . (m +)) [0..top-1] rho = sub top ys wild tqs = applySubst rho tqs0 -- Build the arguments to the with function.@@ -426,22 +607,27 @@ , text "n =" <+> text (show n) , text "perm =" <+> text (show perm) , text "top =" <+> do addFullCtx $ prettyTCM topArgs- , text "qs =" <+> text (show qs)- , text "dt =" <+> do addFullCtx $ prettyTCM dt- , text "ys =" <+> text (show ys)- , text "raw =" <+> text (show display)+ , text "qs =" <+> sep (map (prettyTCM . namedArg) qs) , text "qsToTm =" <+> prettyTCM tqs0 -- ctx would be permuted form of delta1 ++ delta2- , text "sub qs =" <+> prettyTCM tqs+ , text "ys =" <+> text (show ys)+ , text "rho =" <+> text (prettyShow rho)+ , text "qs[rho]=" <+> do addFullCtx $ prettyTCM tqs+ , text "dt =" <+> do addFullCtx $ prettyTCM dt ] ]+ reportSDoc "tc.with.display" 70 $ nest 2 $ vcat+ [ text "raw =" <+> text (show display)+ ] return display where -- Ulf, 2014-02-19: We need to rename the module parameters as well! (issue1035)- sub top ys wild = map term [0 .. m - 1] ++# raiseS (length qs)+ -- sub top ys wild = map term [0 .. m - 1] ++# raiseS (length qs)+ -- Andreas, 2015-10-28: Yes, but properly! (Issue 1407)+ sub top ys wild = parallelS $ map term [0 .. m + top - 1] where term i = maybe wild var $ findIndex (Just i ==) ys- -- OLD+ -- -- OLD -- sub top rho wild = parallelS $ map term [0 .. m - 1] ++ topTerms -- where -- -- Ulf, 2014-02-19: We need to rename the module parameters as well! (issue1035)
src/full/Agda/Utils/Pretty.hs view
@@ -37,6 +37,11 @@ prettyShow :: Pretty a => a -> String prettyShow = render . pretty +-- | Space separated list of pretty things.++prettyList :: Pretty a => [a] -> Doc+prettyList = sep . map (prettyPrec 10000)+ -- * Pretty instances instance Pretty Bool where pretty = text . show